@elvora/core 1.0.0-rc.1

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,"sources":["../src/utils/composeRefs.ts","../src/utils/composeEventHandlers.ts","../src/utils/mergeProps.ts","../src/utils/dataAttr.ts","../src/utils/qrcode.ts","../src/focus/focusable.ts","../src/focus/focusTrap.ts","../src/a11y/keys.ts","../src/id.ts","../src/styles/button.ts","../src/styles/input.ts","../src/styles/floatingLabel.ts","../src/components/button.ts","../src/components/input.ts","../src/components/tabs.ts"],"names":["sizeMap"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * Compose multiple refs into a single ref callback. Useful when a component\r\n * needs both an internal ref (e.g. for focus management) and a forwarded ref\r\n * from the caller.\r\n *\r\n * Framework-agnostic: works with any ref shape (callback or object with `.current`).\r\n */\r\n\r\nexport type PossibleRef<T> = ((instance: T | null) => void) | { current: T | null } | null | undefined;\r\n\r\nexport function setRef<T>(ref: PossibleRef<T>, value: T | null): void {\r\n if (typeof ref === 'function') {\r\n ref(value);\r\n } else if (ref != null) {\r\n ref.current = value;\r\n }\r\n}\r\n\r\nexport function composeRefs<T>(...refs: PossibleRef<T>[]): (node: T | null) => void {\r\n return (node: T | null) => {\r\n for (const ref of refs) {\r\n setRef(ref, node);\r\n }\r\n };\r\n}\r\n","/**\r\n * Compose two event handlers so the consumer's handler runs first; if it\r\n * calls `event.preventDefault()` (or passes `checkForDefaultPrevented` and the\r\n * synthetic event reports `defaultPrevented`), the internal handler is skipped.\r\n *\r\n * This pattern lets internal handlers do \"after\" work (e.g. close a popover)\r\n * while still letting the consumer opt out.\r\n */\r\n\r\ntype AnyEvent = { defaultPrevented?: boolean };\r\n\r\nexport function composeEventHandlers<E extends AnyEvent>(\r\n originalEventHandler: ((event: E) => void) | undefined,\r\n ourEventHandler: ((event: E) => void) | undefined,\r\n { checkForDefaultPrevented = true }: { checkForDefaultPrevented?: boolean } = {},\r\n): (event: E) => void {\r\n return function handleEvent(event: E) {\r\n originalEventHandler?.(event);\r\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\r\n ourEventHandler?.(event);\r\n }\r\n };\r\n}\r\n","/**\r\n * Merge two prop bags. Event handlers (`on*`) are chained via\r\n * composeEventHandlers; className strings are concatenated; style objects\r\n * are shallow-merged; everything else: the second arg wins.\r\n */\r\nimport { composeEventHandlers } from './composeEventHandlers';\r\n\r\ntype AnyProps = Record<string, unknown>;\r\n\r\nexport function mergeProps<A extends AnyProps, B extends AnyProps>(a: A, b: B): A & B {\r\n const merged: AnyProps = { ...a };\r\n\r\n for (const key in b) {\r\n const aValue = (a as AnyProps)[key];\r\n const bValue = (b as AnyProps)[key];\r\n\r\n if (\r\n key.startsWith('on') &&\r\n typeof aValue === 'function' &&\r\n typeof bValue === 'function'\r\n ) {\r\n merged[key] = composeEventHandlers(\r\n aValue as (event: { defaultPrevented?: boolean }) => void,\r\n bValue as (event: { defaultPrevented?: boolean }) => void,\r\n );\r\n } else if (key === 'className' && typeof aValue === 'string' && typeof bValue === 'string') {\r\n merged[key] = `${aValue} ${bValue}`.trim();\r\n } else if (key === 'style' && aValue && bValue && typeof aValue === 'object' && typeof bValue === 'object') {\r\n merged[key] = { ...(aValue as object), ...(bValue as object) };\r\n } else {\r\n merged[key] = bValue;\r\n }\r\n }\r\n\r\n return merged as A & B;\r\n}\r\n","/**\r\n * Helpers for conditionally emitting ARIA + data attributes. Returning\r\n * `undefined` (instead of `false`) keeps DOM clean: the attribute is omitted\r\n * entirely when the state isn't active.\r\n */\r\n\r\nexport function dataAttr(condition: boolean | undefined): '' | undefined {\r\n return condition ? '' : undefined;\r\n}\r\n\r\nexport function ariaAttr(condition: boolean | undefined): boolean | undefined {\r\n return condition ? true : undefined;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n/**\r\n * Minimal QR Code generator (byte mode only, error-correction levels L/M/Q/H,\r\n * versions 1–10). Adapted from Nayuki's QR Code generator algorithm; this is a\r\n * lean self-contained TypeScript port small enough to ship in a UI library\r\n * without pulling in an external dependency.\r\n *\r\n * Returns a square boolean matrix (true = dark module, false = light) plus the\r\n * chosen version. The caller is responsible for rendering it (SVG, canvas,\r\n * native paths, …).\r\n */\r\n\r\nexport type ErrorCorrection = 'L' | 'M' | 'Q' | 'H';\r\n\r\nexport interface QRMatrix {\r\n size: number;\r\n modules: boolean[][];\r\n version: number;\r\n}\r\n\r\nconst ECC_ORDER: Record<ErrorCorrection, number> = { L: 0, M: 1, Q: 2, H: 3 };\r\n\r\n// EC codewords per version per level (versions 1-10)\r\nconst ECC_CODEWORDS_PER_BLOCK: number[][] = [\r\n // L, M, Q, H\r\n [7, 10, 13, 17], // 1\r\n [10, 16, 22, 28], // 2\r\n [15, 26, 18, 22], // 3\r\n [20, 18, 26, 16], // 4\r\n [26, 24, 18, 22], // 5\r\n [18, 16, 24, 28], // 6\r\n [20, 18, 18, 26], // 7\r\n [24, 22, 22, 26], // 8\r\n [30, 22, 20, 24], // 9\r\n [18, 26, 24, 28], // 10\r\n];\r\n\r\nconst NUM_ERROR_CORRECTION_BLOCKS: number[][] = [\r\n [1, 1, 1, 1],\r\n [1, 1, 1, 1],\r\n [1, 1, 2, 2],\r\n [1, 2, 2, 4],\r\n [1, 2, 4, 4],\r\n [2, 4, 4, 4],\r\n [2, 4, 6, 5],\r\n [2, 4, 6, 6],\r\n [2, 5, 8, 8],\r\n [4, 5, 8, 8],\r\n];\r\n\r\nfunction getEccCount(ver: number, ecl: ErrorCorrection): number {\r\n return ECC_CODEWORDS_PER_BLOCK[ver - 1]![ECC_ORDER[ecl]]!;\r\n}\r\n\r\nfunction getNumBlocks(ver: number, ecl: ErrorCorrection): number {\r\n return NUM_ERROR_CORRECTION_BLOCKS[ver - 1]![ECC_ORDER[ecl]]!;\r\n}\r\n\r\nconst NUM_RAW_DATA_MODULES = (ver: number): number => {\r\n let result = (16 * ver + 128) * ver + 64;\r\n if (ver >= 2) {\r\n const align = Math.floor(ver / 7) + 2;\r\n result -= (25 * align - 10) * align - 55;\r\n if (ver >= 7) result -= 36;\r\n }\r\n return result;\r\n};\r\n\r\nconst NUM_DATA_CODEWORDS = (ver: number, ecl: ErrorCorrection): number => {\r\n return Math.floor(NUM_RAW_DATA_MODULES(ver) / 8) - getEccCount(ver, ecl) * getNumBlocks(ver, ecl);\r\n};\r\n\r\nconst EXP_TABLE: number[] = new Array(256).fill(0);\r\nconst LOG_TABLE: number[] = new Array(256).fill(0);\r\n{\r\n let x = 1;\r\n for (let i = 0; i < 255; i++) {\r\n EXP_TABLE[i] = x;\r\n LOG_TABLE[x] = i;\r\n x = x << 1;\r\n if (x & 0x100) x ^= 0x11d;\r\n }\r\n EXP_TABLE[255] = EXP_TABLE[0]!;\r\n}\r\n\r\nfunction rsMul(x: number, y: number): number {\r\n if (x === 0 || y === 0) return 0;\r\n return EXP_TABLE[(LOG_TABLE[x]! + LOG_TABLE[y]!) % 255]!;\r\n}\r\n\r\nfunction rsGeneratorPoly(degree: number): number[] {\r\n const result: number[] = [1];\r\n for (let i = 0; i < degree; i++) {\r\n const next: number[] = new Array(result.length + 1).fill(0);\r\n for (let j = 0; j < result.length; j++) {\r\n next[j] = (next[j]! ^ rsMul(result[j]!, EXP_TABLE[i]!)) & 0xff;\r\n next[j + 1] = (next[j + 1]! ^ result[j]!) & 0xff;\r\n }\r\n for (let j = 0; j < next.length; j++) result[j] = next[j]!;\r\n result.push(next[next.length - 1]!);\r\n }\r\n return result;\r\n}\r\n\r\nfunction rsRemainder(data: number[], generator: number[]): number[] {\r\n const result: number[] = new Array(generator.length - 1).fill(0);\r\n for (const b of data) {\r\n const factor = (b ^ result.shift()!) & 0xff;\r\n result.push(0);\r\n for (let i = 0; i < result.length; i++) result[i] = (result[i]! ^ rsMul(generator[i]!, factor)) & 0xff;\r\n }\r\n return result;\r\n}\r\n\r\nclass BitBuffer {\r\n bits: number[] = [];\r\n append(value: number, length: number): void {\r\n for (let i = length - 1; i >= 0; i--) this.bits.push((value >>> i) & 1);\r\n }\r\n}\r\n\r\nfunction encodeToBitBuffer(text: string, version: number): BitBuffer {\r\n const buf = new BitBuffer();\r\n buf.append(0x4, 4);\r\n const charCountBits = version < 10 ? 8 : 16;\r\n const enc = new TextEncoder();\r\n const arr = enc.encode(text);\r\n buf.append(arr.length, charCountBits);\r\n for (const b of arr) buf.append(b, 8);\r\n return buf;\r\n}\r\n\r\nfunction chooseVersion(text: string, ecl: ErrorCorrection): { version: number; bits: BitBuffer } {\r\n for (let v = 1; v <= 10; v++) {\r\n const buf = encodeToBitBuffer(text, v);\r\n const capacity = NUM_DATA_CODEWORDS(v, ecl) * 8;\r\n if (buf.bits.length <= capacity) return { version: v, bits: buf };\r\n }\r\n throw new Error('Data too long for QR Code v1-10. Trim the input or use a smaller ECC level.');\r\n}\r\n\r\nfunction buildDataCodewords(version: number, ecl: ErrorCorrection, bits: BitBuffer): number[] {\r\n const capacity = NUM_DATA_CODEWORDS(version, ecl) * 8;\r\n const termLen = Math.min(4, capacity - bits.bits.length);\r\n bits.append(0, termLen);\r\n bits.append(0, (8 - (bits.bits.length % 8)) % 8);\r\n const padBytes = [0xec, 0x11];\r\n for (let i = 0; bits.bits.length < capacity; i++) bits.append(padBytes[i % 2]!, 8);\r\n const bytes: number[] = [];\r\n for (let i = 0; i < bits.bits.length; i += 8) {\r\n let b = 0;\r\n for (let j = 0; j < 8; j++) b = (b << 1) | bits.bits[i + j]!;\r\n bytes.push(b);\r\n }\r\n const eccPerBlock = getEccCount(version, ecl);\r\n const numBlocks = getNumBlocks(version, ecl);\r\n const totalCodewords = Math.floor(NUM_RAW_DATA_MODULES(version) / 8);\r\n const numShortBlocks = numBlocks - (totalCodewords % numBlocks);\r\n const shortBlockLen = Math.floor(totalCodewords / numBlocks);\r\n const blocks: number[][] = [];\r\n const generator = rsGeneratorPoly(eccPerBlock);\r\n let k = 0;\r\n for (let i = 0; i < numBlocks; i++) {\r\n const dataLen = shortBlockLen - eccPerBlock + (i < numShortBlocks ? 0 : 1);\r\n const data = bytes.slice(k, k + dataLen);\r\n k += dataLen;\r\n const block = data.slice();\r\n const ec = rsRemainder(data, generator);\r\n for (const b of ec) block.push(b);\r\n blocks.push(block);\r\n }\r\n const result: number[] = [];\r\n const lastBlock = blocks[blocks.length - 1]!;\r\n for (let i = 0; i < lastBlock.length; i++) {\r\n for (let j = 0; j < blocks.length; j++) {\r\n if (i !== shortBlockLen - eccPerBlock || j >= numShortBlocks) result.push(blocks[j]![i]!);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction buildMatrix(version: number, ecl: ErrorCorrection, codewords: number[]): boolean[][] {\r\n const size = version * 4 + 17;\r\n const matrix: boolean[][] = Array.from({ length: size }, () => new Array(size).fill(false));\r\n const reserved: boolean[][] = Array.from({ length: size }, () => new Array(size).fill(false));\r\n\r\n const setModule = (x: number, y: number, dark: boolean) => {\r\n matrix[y]![x] = dark;\r\n reserved[y]![x] = true;\r\n };\r\n\r\n const drawFinder = (cx: number, cy: number) => {\r\n for (let dy = -4; dy <= 4; dy++) {\r\n for (let dx = -4; dx <= 4; dx++) {\r\n const x = cx + dx;\r\n const y = cy + dy;\r\n if (x < 0 || y < 0 || x >= size || y >= size) continue;\r\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\r\n setModule(x, y, dist !== 2 && dist !== 4);\r\n }\r\n }\r\n };\r\n drawFinder(3, 3);\r\n drawFinder(size - 4, 3);\r\n drawFinder(3, size - 4);\r\n\r\n for (let i = 8; i < size - 8; i++) {\r\n setModule(6, i, i % 2 === 0);\r\n setModule(i, 6, i % 2 === 0);\r\n }\r\n\r\n if (version >= 2) {\r\n const positions = getAlignmentPositions(version);\r\n for (const ay of positions) {\r\n for (const ax of positions) {\r\n if ((ax === 6 && ay === 6) || (ax === 6 && ay === size - 7) || (ax === size - 7 && ay === 6)) continue;\r\n for (let dy = -2; dy <= 2; dy++) {\r\n for (let dx = -2; dx <= 2; dx++) {\r\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\r\n setModule(ax + dx, ay + dy, dist !== 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n setModule(8, size - 8, true);\r\n\r\n for (let i = 0; i < 9; i++) {\r\n reserved[8]![i] = true;\r\n reserved[i]![8] = true;\r\n }\r\n for (let i = 0; i < 8; i++) {\r\n reserved[8]![size - 1 - i] = true;\r\n reserved[size - 1 - i]![8] = true;\r\n }\r\n\r\n const bits: number[] = [];\r\n for (const b of codewords) for (let i = 7; i >= 0; i--) bits.push((b >>> i) & 1);\r\n let bitIdx = 0;\r\n for (let right = size - 1; right >= 1; right -= 2) {\r\n if (right === 6) right = 5;\r\n for (let vert = 0; vert < size; vert++) {\r\n for (let j = 0; j < 2; j++) {\r\n const x = right - j;\r\n const upward = ((right + 1) & 2) === 0;\r\n const y = upward ? size - 1 - vert : vert;\r\n if (!reserved[y]![x] && bitIdx < bits.length) {\r\n matrix[y]![x] = bits[bitIdx] === 1;\r\n bitIdx++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const mask = 0;\r\n for (let y = 0; y < size; y++) {\r\n for (let x = 0; x < size; x++) {\r\n if (reserved[y]![x]) continue;\r\n if ((x + y) % 2 === 0) matrix[y]![x] = !matrix[y]![x];\r\n }\r\n }\r\n\r\n const formatBits = encodeFormat(ECC_ORDER[ecl], mask);\r\n for (let i = 0; i <= 5; i++) matrix[8]![i] = ((formatBits >> i) & 1) === 1;\r\n matrix[8]![7] = ((formatBits >> 6) & 1) === 1;\r\n matrix[8]![8] = ((formatBits >> 7) & 1) === 1;\r\n matrix[7]![8] = ((formatBits >> 8) & 1) === 1;\r\n for (let i = 9; i < 15; i++) matrix[14 - i]![8] = ((formatBits >> i) & 1) === 1;\r\n for (let i = 0; i < 8; i++) matrix[size - 1 - i]![8] = ((formatBits >> i) & 1) === 1;\r\n for (let i = 8; i < 15; i++) matrix[8]![size - 15 + i] = ((formatBits >> i) & 1) === 1;\r\n\r\n return matrix;\r\n}\r\n\r\nfunction getAlignmentPositions(version: number): number[] {\r\n if (version === 1) return [];\r\n const numAlign = Math.floor(version / 7) + 2;\r\n const step = Math.ceil(((version * 4 + 4) / (numAlign * 2 - 2)) * 2) / 2 * 2;\r\n const positions: number[] = [6];\r\n for (let pos = version * 4 + 10; positions.length < numAlign; pos -= step) positions.splice(1, 0, pos);\r\n return positions;\r\n}\r\n\r\nfunction encodeFormat(eclLevel: number, mask: number): number {\r\n const map = [1, 0, 3, 2];\r\n const eclBits = map[eclLevel]!;\r\n const data = (eclBits << 3) | mask;\r\n let bch = data;\r\n for (let i = 0; i < 10; i++) bch = (bch << 1) ^ ((bch >> 9) * 0x537);\r\n return ((data << 10) | bch) ^ 0x5412;\r\n}\r\n\r\n/** Generate a QR matrix for the given text. */\r\nexport function generateQrMatrix(text: string, ecl: ErrorCorrection = 'M'): QRMatrix {\r\n const { version, bits } = chooseVersion(text, ecl);\r\n const codewords = buildDataCodewords(version, ecl, bits);\r\n const modules = buildMatrix(version, ecl, codewords);\r\n return { size: modules.length, modules, version };\r\n}\r\n","/**\r\n * Discover and walk focusable elements within a container. Used by focus traps,\r\n * roving-tabindex managers, and keyboard-navigable lists/menus.\r\n *\r\n * Selectors are based on the WAI-ARIA Authoring Practices and the live\r\n * `tabindex`/`disabled`/`inert` semantics of HTML.\r\n */\r\n\r\nconst FOCUSABLE_SELECTORS = [\r\n 'a[href]',\r\n 'area[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled]):not([type=\"hidden\"])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n 'iframe',\r\n 'object',\r\n 'embed',\r\n 'audio[controls]',\r\n 'video[controls]',\r\n '[contenteditable]:not([contenteditable=\"false\"])',\r\n '[tabindex]:not([tabindex^=\"-\"])',\r\n] as const;\r\n\r\nexport const FOCUSABLE_SELECTOR = FOCUSABLE_SELECTORS.join(', ');\r\n\r\nexport function isElementVisible(el: HTMLElement): boolean {\r\n if (el.hidden) return false;\r\n const style = el.ownerDocument.defaultView?.getComputedStyle(el);\r\n if (!style) return true;\r\n return style.visibility !== 'hidden' && style.display !== 'none';\r\n}\r\n\r\nexport function isFocusable(el: HTMLElement): boolean {\r\n if (!el.isConnected) return false;\r\n if ((el as HTMLInputElement).disabled) return false;\r\n if (el.getAttribute('aria-hidden') === 'true') return false;\r\n if (el.hasAttribute('inert')) return false;\r\n if (!isElementVisible(el)) return false;\r\n return el.matches(FOCUSABLE_SELECTOR);\r\n}\r\n\r\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\r\n const nodes = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\r\n return nodes.filter(isFocusable);\r\n}\r\n\r\nexport function getFirstFocusable(container: HTMLElement): HTMLElement | null {\r\n return getFocusableElements(container)[0] ?? null;\r\n}\r\n\r\nexport function getLastFocusable(container: HTMLElement): HTMLElement | null {\r\n const list = getFocusableElements(container);\r\n return list[list.length - 1] ?? null;\r\n}\r\n","/**\r\n * Headless focus trap. Pure DOM, no framework dependency.\r\n *\r\n * Adapters call `createFocusTrap(node)` on mount, `trap.activate()` when the\r\n * dialog/menu opens, and `trap.deactivate()` when it closes. The trap is\r\n * compliant with WAI-ARIA APG's modal-dialog pattern.\r\n */\r\nimport { getFirstFocusable, getLastFocusable, isFocusable } from './focusable';\r\n\r\nexport interface FocusTrapOptions {\r\n /** Element to restore focus to on deactivation. Defaults to the previously active element. */\r\n returnFocus?: HTMLElement | null;\r\n /** Initial element to focus. Defaults to first focusable child. */\r\n initialFocus?: HTMLElement | null;\r\n /** When true, pressing Escape calls `onEscape`. */\r\n onEscape?: (event: KeyboardEvent) => void;\r\n /** Outside clicks call this. Trap does not auto-close on outside click. */\r\n onOutsideClick?: (event: MouseEvent | TouchEvent) => void;\r\n}\r\n\r\nexport interface FocusTrap {\r\n activate(): void;\r\n deactivate(): void;\r\n isActive(): boolean;\r\n}\r\n\r\nexport function createFocusTrap(container: HTMLElement, options: FocusTrapOptions = {}): FocusTrap {\r\n let active = false;\r\n let previouslyFocused: HTMLElement | null = null;\r\n\r\n function handleKeyDown(event: KeyboardEvent): void {\r\n if (!active) return;\r\n\r\n if (event.key === 'Escape' && options.onEscape) {\r\n options.onEscape(event);\r\n return;\r\n }\r\n\r\n if (event.key !== 'Tab') return;\r\n\r\n const first = getFirstFocusable(container);\r\n const last = getLastFocusable(container);\r\n if (!first || !last) {\r\n event.preventDefault();\r\n container.focus();\r\n return;\r\n }\r\n\r\n const activeEl = container.ownerDocument.activeElement as HTMLElement | null;\r\n\r\n if (event.shiftKey) {\r\n if (activeEl === first || !container.contains(activeEl)) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n if (activeEl === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n }\r\n\r\n function handlePointerDown(event: MouseEvent | TouchEvent): void {\r\n if (!active) return;\r\n const target = event.target as Node | null;\r\n if (target && !container.contains(target)) {\r\n options.onOutsideClick?.(event);\r\n }\r\n }\r\n\r\n return {\r\n activate() {\r\n if (active) return;\r\n active = true;\r\n previouslyFocused = (container.ownerDocument.activeElement as HTMLElement) ?? null;\r\n\r\n const target =\r\n options.initialFocus ??\r\n getFirstFocusable(container) ??\r\n (isFocusable(container) ? container : null);\r\n\r\n if (target) {\r\n target.focus({ preventScroll: false });\r\n } else {\r\n container.setAttribute('tabindex', '-1');\r\n container.focus({ preventScroll: false });\r\n }\r\n\r\n container.ownerDocument.addEventListener('keydown', handleKeyDown, true);\r\n container.ownerDocument.addEventListener('mousedown', handlePointerDown, true);\r\n container.ownerDocument.addEventListener('touchstart', handlePointerDown, true);\r\n },\r\n deactivate() {\r\n if (!active) return;\r\n active = false;\r\n container.ownerDocument.removeEventListener('keydown', handleKeyDown, true);\r\n container.ownerDocument.removeEventListener('mousedown', handlePointerDown, true);\r\n container.ownerDocument.removeEventListener('touchstart', handlePointerDown, true);\r\n\r\n const returnTo = options.returnFocus ?? previouslyFocused;\r\n if (returnTo && returnTo.isConnected) {\r\n returnTo.focus({ preventScroll: false });\r\n }\r\n },\r\n isActive() {\r\n return active;\r\n },\r\n };\r\n}\r\n","/**\r\n * Named keyboard constants. Adapters use these instead of magic strings so\r\n * keyboard logic is consistent across frameworks.\r\n */\r\nexport const Keys = {\r\n Enter: 'Enter',\r\n Space: ' ',\r\n Escape: 'Escape',\r\n Tab: 'Tab',\r\n ArrowUp: 'ArrowUp',\r\n ArrowDown: 'ArrowDown',\r\n ArrowLeft: 'ArrowLeft',\r\n ArrowRight: 'ArrowRight',\r\n Home: 'Home',\r\n End: 'End',\r\n PageUp: 'PageUp',\r\n PageDown: 'PageDown',\r\n Backspace: 'Backspace',\r\n Delete: 'Delete',\r\n} as const;\r\n\r\nexport type KeyName = (typeof Keys)[keyof typeof Keys];\r\n\r\n/** True when the event represents an activation (Enter or Space). */\r\nexport function isActivationKey(key: string): boolean {\r\n return key === Keys.Enter || key === Keys.Space;\r\n}\r\n","/**\r\n * Tiny, SSR-safe id generator. Prefer crypto.randomUUID when available, fall\r\n * back to a monotonic counter otherwise so generated ids are stable across\r\n * server/client when adapters seed them once.\r\n */\r\n\r\nlet counter = 0;\r\n\r\nexport function generateId(prefix = 'elvora'): string {\r\n if (typeof globalThis !== 'undefined' && globalThis.crypto?.randomUUID) {\r\n return `${prefix}-${globalThis.crypto.randomUUID().slice(0, 8)}`;\r\n }\r\n counter = (counter + 1) | 0;\r\n return `${prefix}-${counter.toString(36)}`;\r\n}\r\n","/**\r\n * Headless style descriptor for the Button component. Given a theme and the\r\n * Button's variant/size/state, returns a flat style object usable by both web\r\n * adapters (inline styles or vanilla-extract recipes) and React Native.\r\n *\r\n * Keeping this here means every framework adapter looks identical visually\r\n * without re-implementing variant logic per framework.\r\n */\r\nimport type { ElvoraTheme, IntentScale } from '../theme-shape';\r\nimport type { ElvoraSize, ElvoraVariant } from '../types';\r\n\r\nexport interface ButtonStyleInputs {\r\n theme: ElvoraTheme;\r\n variant: ElvoraVariant;\r\n size: ElvoraSize;\r\n fullWidth: boolean;\r\n isLoading: boolean;\r\n isDisabled: boolean;\r\n isPressed: boolean;\r\n isHovered: boolean;\r\n isFocusVisible: boolean;\r\n /** Intent overrides the variant's default color scheme (defaults to primary). */\r\n intent?: keyof ElvoraTheme['colors']['intent'];\r\n}\r\n\r\nexport interface ButtonStyle {\r\n /** Root style object — keys are camelCase so the same shape works in RN + web. */\r\n root: Record<string, string | number | undefined>;\r\n /** Label/text style. */\r\n label: Record<string, string | number | undefined>;\r\n /** Loading spinner color. */\r\n spinnerColor: string;\r\n}\r\n\r\nconst sizeMap: Record<\r\n ElvoraSize,\r\n { padX: number; padY: number; font: number; height: number; gap: number; radius: keyof ElvoraTheme['radii'] }\r\n> = {\r\n xs: { padX: 8, padY: 4, font: 12, height: 24, gap: 4, radius: 'sm' },\r\n sm: { padX: 12, padY: 6, font: 13, height: 32, gap: 6, radius: 'md' },\r\n md: { padX: 16, padY: 8, font: 14, height: 40, gap: 8, radius: 'md' },\r\n lg: { padX: 20, padY: 10, font: 16, height: 48, gap: 8, radius: 'lg' },\r\n xl: { padX: 24, padY: 12, font: 18, height: 56, gap: 10, radius: 'lg' },\r\n};\r\n\r\nexport function getButtonStyle(input: ButtonStyleInputs): ButtonStyle {\r\n const { theme, variant, size, fullWidth, isLoading, isDisabled, isPressed, isHovered, isFocusVisible } =\r\n input;\r\n const intent: IntentScale =\r\n theme.colors.intent[input.intent ?? (variant === 'destructive' ? 'danger' : 'primary')];\r\n\r\n const dims = sizeMap[size];\r\n const radius = theme.radii[dims.radius];\r\n\r\n const baseRoot: Record<string, string | number | undefined> = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'row',\r\n gap: dims.gap,\r\n paddingLeft: dims.padX,\r\n paddingRight: dims.padX,\r\n paddingTop: dims.padY,\r\n paddingBottom: dims.padY,\r\n minHeight: dims.height,\r\n borderRadius: radius,\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor: 'transparent',\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: dims.font,\r\n fontWeight: theme.tokens.typography.fontWeights.medium,\r\n lineHeight: theme.tokens.typography.lineHeights.tight,\r\n width: fullWidth ? '100%' : 'auto',\r\n cursor: isDisabled || isLoading ? 'not-allowed' : 'pointer',\r\n opacity: isDisabled ? 0.5 : 1,\r\n userSelect: 'none',\r\n transitionProperty: 'background-color, border-color, color, box-shadow, transform',\r\n transitionDuration: theme.durations.fast,\r\n transitionTimingFunction: theme.easings.standard,\r\n boxShadow: isFocusVisible ? theme.shadows.focus : undefined,\r\n };\r\n\r\n let root = baseRoot;\r\n let labelColor: string = theme.colors.fg;\r\n let spinnerColor: string = theme.colors.fg;\r\n\r\n switch (variant) {\r\n case 'primary':\r\n case 'destructive': {\r\n const bg = isPressed ? intent.solidActive : isHovered ? intent.solidHover : intent.solid;\r\n root = { ...root, backgroundColor: bg, borderColor: bg, color: intent.solidFg };\r\n labelColor = intent.solidFg;\r\n spinnerColor = intent.solidFg;\r\n break;\r\n }\r\n case 'secondary': {\r\n const bg = isPressed\r\n ? theme.colors.intent.neutral.subtleHover\r\n : isHovered\r\n ? theme.colors.intent.neutral.subtleHover\r\n : theme.colors.intent.neutral.subtle;\r\n root = {\r\n ...root,\r\n backgroundColor: bg,\r\n borderColor: theme.colors.border,\r\n color: theme.colors.fg,\r\n };\r\n labelColor = theme.colors.fg;\r\n spinnerColor = theme.colors.fg;\r\n break;\r\n }\r\n case 'tertiary': {\r\n const bg = isPressed ? intent.subtleHover : isHovered ? intent.subtle : 'transparent';\r\n root = { ...root, backgroundColor: bg, color: intent.fg };\r\n labelColor = intent.fg;\r\n spinnerColor = intent.fg;\r\n break;\r\n }\r\n case 'outline': {\r\n const bg = isPressed ? intent.subtleHover : isHovered ? intent.subtle : 'transparent';\r\n root = { ...root, backgroundColor: bg, borderColor: intent.border, color: intent.fg };\r\n labelColor = intent.fg;\r\n spinnerColor = intent.fg;\r\n break;\r\n }\r\n case 'ghost': {\r\n const bg = isPressed\r\n ? theme.colors.intent.neutral.subtleHover\r\n : isHovered\r\n ? theme.colors.intent.neutral.subtle\r\n : 'transparent';\r\n root = { ...root, backgroundColor: bg, color: theme.colors.fg };\r\n labelColor = theme.colors.fg;\r\n spinnerColor = theme.colors.fg;\r\n break;\r\n }\r\n case 'link': {\r\n root = {\r\n ...root,\r\n backgroundColor: 'transparent',\r\n minHeight: 'auto',\r\n padding: 0,\r\n color: intent.fg,\r\n textDecoration: isHovered || isPressed ? 'underline' : 'none',\r\n borderWidth: 0,\r\n };\r\n labelColor = intent.fg;\r\n spinnerColor = intent.fg;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n root,\r\n label: {\r\n color: labelColor,\r\n fontSize: dims.font,\r\n fontWeight: theme.tokens.typography.fontWeights.medium,\r\n opacity: isLoading ? 0 : 1,\r\n },\r\n spinnerColor,\r\n };\r\n}\r\n","import type { ElvoraTheme } from '../theme-shape';\r\nimport type { ElvoraSize, ElvoraStatus } from '../types';\r\n\r\nexport interface InputStyleInputs {\r\n theme: ElvoraTheme;\r\n size: ElvoraSize;\r\n status: ElvoraStatus;\r\n isDisabled: boolean;\r\n isReadOnly: boolean;\r\n isInvalid: boolean;\r\n isFocused: boolean;\r\n isHovered: boolean;\r\n}\r\n\r\nconst sizeMap: Record<ElvoraSize, { padX: number; padY: number; font: number; height: number; radius: keyof ElvoraTheme['radii'] }> = {\r\n xs: { padX: 8, padY: 4, font: 12, height: 24, radius: 'sm' },\r\n sm: { padX: 10, padY: 6, font: 13, height: 32, radius: 'md' },\r\n md: { padX: 12, padY: 8, font: 14, height: 40, radius: 'md' },\r\n lg: { padX: 14, padY: 10, font: 16, height: 48, radius: 'lg' },\r\n xl: { padX: 16, padY: 12, font: 18, height: 56, radius: 'lg' },\r\n};\r\n\r\nconst statusIntent: Record<ElvoraStatus, keyof ElvoraTheme['colors']['intent']> = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n};\r\n\r\nexport function getInputStyle(input: InputStyleInputs): Record<string, string | number | undefined> {\r\n const { theme, size, status, isDisabled, isReadOnly, isInvalid, isFocused, isHovered } = input;\r\n const dims = sizeMap[size];\r\n const intent = theme.colors.intent[isInvalid ? 'danger' : statusIntent[status]];\r\n\r\n const borderColor = isFocused\r\n ? intent.border\r\n : isHovered && !isDisabled\r\n ? theme.colors.borderStrong\r\n : isInvalid || status === 'error'\r\n ? theme.colors.intent.danger.border\r\n : theme.colors.border;\r\n\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n minHeight: dims.height,\r\n paddingLeft: dims.padX,\r\n paddingRight: dims.padX,\r\n paddingTop: dims.padY,\r\n paddingBottom: dims.padY,\r\n borderRadius: theme.radii[dims.radius],\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor,\r\n backgroundColor: isDisabled ? theme.colors.surface : theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: dims.font,\r\n lineHeight: theme.tokens.typography.lineHeights.normal,\r\n outline: 'none',\r\n opacity: isDisabled ? 0.6 : 1,\r\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'default' : 'text',\r\n boxShadow: isFocused ? `0 0 0 3px ${intent.ring}33` : undefined,\r\n transitionProperty: 'border-color, box-shadow, background-color',\r\n transitionDuration: theme.durations.fast,\r\n transitionTimingFunction: theme.easings.standard,\r\n };\r\n}\r\n","import type { ElvoraTheme } from '../theme-shape';\nimport type { ElvoraSize } from '../types';\n\nexport type FloatingLabelVariant = 'outlined' | 'filled';\n\nexport interface FloatingLabelStyleInputs {\n theme: ElvoraTheme;\n size: ElvoraSize;\n variant: FloatingLabelVariant;\n floated: boolean;\n focused: boolean;\n invalid: boolean;\n /**\n * Vertical resting position of the label when the field is empty. `center`\n * suits single-line controls; `top` suits multi-line controls (textarea)\n * where the text starts at the top.\n */\n restAlign?: 'center' | 'top';\n}\n\nconst sizeMap: Record<ElvoraSize, { padX: number; padY: number; restFont: number; floatFont: number }> = {\n xs: { padX: 8, padY: 4, restFont: 12, floatFont: 10 },\n sm: { padX: 10, padY: 6, restFont: 13, floatFont: 11 },\n md: { padX: 12, padY: 8, restFont: 14, floatFont: 12 },\n lg: { padX: 14, padY: 10, restFont: 16, floatFont: 12 },\n xl: { padX: 16, padY: 12, restFont: 18, floatFont: 13 },\n};\n\nexport interface FloatingLabelStyle {\n wrapper: Record<string, string | number | undefined>;\n label: Record<string, string | number | undefined>;\n}\n\n/**\n * Headless style descriptor for a floating label. Drives the `outlined`\n * (label notches the top border) and `filled` (label floats inside the field)\n * variants. The float is React-state driven via `floated` because the library\n * styles with inline CSS and cannot rely on `:focus`/`:placeholder-shown`.\n */\nexport function getFloatingLabelStyle(input: FloatingLabelStyleInputs): FloatingLabelStyle {\n const { theme, size, variant, floated, focused, invalid, restAlign = 'center' } = input;\n const dims = sizeMap[size];\n\n const activeColor = invalid\n ? theme.colors.intent.danger.fg\n : focused\n ? theme.colors.intent.info.fg\n : theme.colors.fgMuted;\n\n // Where the floated label sits vertically. Outlined rides the top border;\n // filled tucks just inside the top of the filled box.\n const floatedTop = variant === 'outlined' ? 0 : 4;\n\n // Resting position. `center` vertically centres over single-line fields;\n // `top` aligns to the first text line for multi-line fields.\n const restTop: number | string = restAlign === 'top' ? dims.padY : '50%';\n const restTransform = restAlign === 'top' ? 'translateY(0)' : 'translateY(-50%)';\n\n return {\n wrapper: {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n },\n label: {\n position: 'absolute',\n left: dims.padX,\n maxWidth: `calc(100% - ${dims.padX * 2}px)`,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n pointerEvents: 'none',\n fontFamily: theme.tokens.typography.fontFamilies.sans,\n color: floated ? activeColor : theme.colors.fgMuted,\n top: floated ? floatedTop : restTop,\n transform: floated ? 'translateY(-50%)' : restTransform,\n fontSize: floated ? dims.floatFont : dims.restFont,\n lineHeight: theme.tokens.typography.lineHeights.snug,\n transitionProperty: 'top, font-size, color',\n transitionDuration: theme.durations.fast,\n transitionTimingFunction: theme.easings.standard,\n // Outlined: paint the field background behind the floated label so the\n // label visually \"notches\" the top border.\n ...(variant === 'outlined' && floated\n ? { paddingLeft: 4, paddingRight: 4, backgroundColor: theme.colors.surfaceElevated }\n : null),\n },\n };\n}\n","/**\r\n * Framework-agnostic Button contract. Each adapter extends/maps this to its\r\n * framework-idiomatic event names (onPress vs press vs @press) but the\r\n * semantics are identical: same variants, same sizes, same states.\r\n */\r\nimport type { ElvoraSize, ElvoraVariant } from '../types';\r\nimport type { ElvoraTheme } from '../theme-shape';\r\n\r\nexport interface ButtonOwnProps {\r\n /** Visual variant. Defaults to `'primary'`. */\r\n variant?: ElvoraVariant;\r\n /** Size. Defaults to `'md'`. */\r\n size?: ElvoraSize;\r\n /** Override the intent (color scheme) for this button. */\r\n intent?: keyof ElvoraTheme['colors']['intent'];\r\n /** When true, stretches the button to fill its container. */\r\n fullWidth?: boolean;\r\n /** When true, shows a spinner and prevents activation. */\r\n isLoading?: boolean;\r\n /** Disabled state. */\r\n isDisabled?: boolean;\r\n /** Loading-state announcement for assistive tech. Defaults to \"Loading\". */\r\n loadingText?: string;\r\n /** Type attribute for HTML buttons. Defaults to `'button'`. */\r\n type?: 'button' | 'submit' | 'reset';\r\n}\r\n\r\nexport const defaultButtonProps = {\r\n variant: 'primary' as ElvoraVariant,\r\n size: 'md' as ElvoraSize,\r\n type: 'button' as const,\r\n fullWidth: false,\r\n isLoading: false,\r\n isDisabled: false,\r\n loadingText: 'Loading',\r\n};\r\n","import type { ElvoraSize, ElvoraStatus } from '../types';\r\n\r\nexport interface InputOwnProps {\r\n size?: ElvoraSize;\r\n /** Validation status (changes border color and icon). */\r\n status?: ElvoraStatus;\r\n /** When true, renders a read-only input. */\r\n isReadOnly?: boolean;\r\n /** When true, disables the input. */\r\n isDisabled?: boolean;\r\n /** When true, the field is required for form submission. */\r\n isRequired?: boolean;\r\n /** When true, marks the input as invalid (`aria-invalid`). */\r\n isInvalid?: boolean;\r\n}\r\n\r\nexport const defaultInputProps = {\r\n size: 'md' as ElvoraSize,\r\n status: 'neutral' as ElvoraStatus,\r\n isReadOnly: false,\r\n isDisabled: false,\r\n isRequired: false,\r\n isInvalid: false,\r\n};\r\n","/**\r\n * Headless Tabs contract. Each adapter renders tab buttons + panels and wires\r\n * keyboard navigation per WAI-ARIA Tabs pattern.\r\n */\r\n\r\nimport type { Orientation } from '../types';\r\n\r\nexport interface TabDescriptor<V extends string = string> {\r\n /** Stable identifier for this tab; becomes the selected value. */\r\n value: V;\r\n /** Visible label. */\r\n label: string;\r\n /** Disable this tab. */\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport type TabsActivation = 'automatic' | 'manual';\r\n\r\nexport interface TabsKeyboardOptions {\r\n orientation?: Orientation;\r\n /** When `automatic` (default) arrow keys also select; `manual` only moves focus. */\r\n activation?: TabsActivation;\r\n}\r\n\r\n/**\r\n * Compute the next focusable tab index for a keyboard event. Returns the\r\n * current index if the key shouldn't move focus.\r\n */\r\nexport function getNextTabIndex(\r\n event: { key: string },\r\n currentIndex: number,\r\n tabs: ReadonlyArray<{ isDisabled?: boolean }>,\r\n options: TabsKeyboardOptions = {},\r\n): number {\r\n const { orientation = 'horizontal' } = options;\r\n const last = tabs.length - 1;\r\n const next = (i: number) => {\r\n let n = i;\r\n do {\r\n n = n >= last ? 0 : n + 1;\r\n } while (tabs[n]?.isDisabled && n !== i);\r\n return n;\r\n };\r\n const prev = (i: number) => {\r\n let p = i;\r\n do {\r\n p = p <= 0 ? last : p - 1;\r\n } while (tabs[p]?.isDisabled && p !== i);\r\n return p;\r\n };\r\n if (orientation === 'horizontal') {\r\n if (event.key === 'ArrowRight') return next(currentIndex);\r\n if (event.key === 'ArrowLeft') return prev(currentIndex);\r\n } else {\r\n if (event.key === 'ArrowDown') return next(currentIndex);\r\n if (event.key === 'ArrowUp') return prev(currentIndex);\r\n }\r\n if (event.key === 'Home') return next(-1);\r\n if (event.key === 'End') return prev(0);\r\n return currentIndex;\r\n}\r\n"]}
@@ -0,0 +1,346 @@
1
+ export { F as FocusTrap, a as FocusTrapOptions, c as createFocusTrap } from './focusTrap-Bko1L5FG.cjs';
2
+ import { Tokens } from '@elvora/tokens';
3
+
4
+ /**
5
+ * Shared semantic types used across every Elvora component on every framework.
6
+ * Keeping these in core means every adapter (React, RN, Angular, Vue) speaks
7
+ * the same vocabulary for sizes, variants, and statuses.
8
+ */
9
+ type ElvoraSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
+ type ElvoraVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'outline' | 'destructive' | 'link';
11
+ type ElvoraStatus = 'info' | 'success' | 'warning' | 'error' | 'neutral';
12
+ type ElvoraRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';
13
+ type ElvoraTone = 'solid' | 'subtle' | 'outline';
14
+ type Orientation = 'horizontal' | 'vertical';
15
+ type Placement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end';
16
+ type Direction = 'ltr' | 'rtl';
17
+ type Booleanish = boolean | 'true' | 'false';
18
+ /** Helper to type a generic event handler that may be controlled or uncontrolled. */
19
+ type ChangeHandler<T> = (value: T) => void;
20
+ /** Helper for components that accept either a value or a callback to derive it. */
21
+ type ValueOrCallback<T, Args extends unknown[] = []> = T | ((...args: Args) => T);
22
+
23
+ /**
24
+ * Compose multiple refs into a single ref callback. Useful when a component
25
+ * needs both an internal ref (e.g. for focus management) and a forwarded ref
26
+ * from the caller.
27
+ *
28
+ * Framework-agnostic: works with any ref shape (callback or object with `.current`).
29
+ */
30
+ type PossibleRef<T> = ((instance: T | null) => void) | {
31
+ current: T | null;
32
+ } | null | undefined;
33
+ declare function setRef<T>(ref: PossibleRef<T>, value: T | null): void;
34
+ declare function composeRefs<T>(...refs: PossibleRef<T>[]): (node: T | null) => void;
35
+
36
+ /**
37
+ * Compose two event handlers so the consumer's handler runs first; if it
38
+ * calls `event.preventDefault()` (or passes `checkForDefaultPrevented` and the
39
+ * synthetic event reports `defaultPrevented`), the internal handler is skipped.
40
+ *
41
+ * This pattern lets internal handlers do "after" work (e.g. close a popover)
42
+ * while still letting the consumer opt out.
43
+ */
44
+ type AnyEvent = {
45
+ defaultPrevented?: boolean;
46
+ };
47
+ declare function composeEventHandlers<E extends AnyEvent>(originalEventHandler: ((event: E) => void) | undefined, ourEventHandler: ((event: E) => void) | undefined, { checkForDefaultPrevented }?: {
48
+ checkForDefaultPrevented?: boolean;
49
+ }): (event: E) => void;
50
+
51
+ type AnyProps = Record<string, unknown>;
52
+ declare function mergeProps<A extends AnyProps, B extends AnyProps>(a: A, b: B): A & B;
53
+
54
+ /**
55
+ * Helpers for conditionally emitting ARIA + data attributes. Returning
56
+ * `undefined` (instead of `false`) keeps DOM clean: the attribute is omitted
57
+ * entirely when the state isn't active.
58
+ */
59
+ declare function dataAttr(condition: boolean | undefined): '' | undefined;
60
+ declare function ariaAttr(condition: boolean | undefined): boolean | undefined;
61
+
62
+ /**
63
+ * Minimal QR Code generator (byte mode only, error-correction levels L/M/Q/H,
64
+ * versions 1–10). Adapted from Nayuki's QR Code generator algorithm; this is a
65
+ * lean self-contained TypeScript port small enough to ship in a UI library
66
+ * without pulling in an external dependency.
67
+ *
68
+ * Returns a square boolean matrix (true = dark module, false = light) plus the
69
+ * chosen version. The caller is responsible for rendering it (SVG, canvas,
70
+ * native paths, …).
71
+ */
72
+ type ErrorCorrection = 'L' | 'M' | 'Q' | 'H';
73
+ interface QRMatrix {
74
+ size: number;
75
+ modules: boolean[][];
76
+ version: number;
77
+ }
78
+ /** Generate a QR matrix for the given text. */
79
+ declare function generateQrMatrix(text: string, ecl?: ErrorCorrection): QRMatrix;
80
+
81
+ /**
82
+ * Discover and walk focusable elements within a container. Used by focus traps,
83
+ * roving-tabindex managers, and keyboard-navigable lists/menus.
84
+ *
85
+ * Selectors are based on the WAI-ARIA Authoring Practices and the live
86
+ * `tabindex`/`disabled`/`inert` semantics of HTML.
87
+ */
88
+ declare const FOCUSABLE_SELECTOR: string;
89
+ declare function isElementVisible(el: HTMLElement): boolean;
90
+ declare function isFocusable(el: HTMLElement): boolean;
91
+ declare function getFocusableElements(container: HTMLElement): HTMLElement[];
92
+ declare function getFirstFocusable(container: HTMLElement): HTMLElement | null;
93
+ declare function getLastFocusable(container: HTMLElement): HTMLElement | null;
94
+
95
+ /**
96
+ * Named keyboard constants. Adapters use these instead of magic strings so
97
+ * keyboard logic is consistent across frameworks.
98
+ */
99
+ declare const Keys: {
100
+ readonly Enter: "Enter";
101
+ readonly Space: " ";
102
+ readonly Escape: "Escape";
103
+ readonly Tab: "Tab";
104
+ readonly ArrowUp: "ArrowUp";
105
+ readonly ArrowDown: "ArrowDown";
106
+ readonly ArrowLeft: "ArrowLeft";
107
+ readonly ArrowRight: "ArrowRight";
108
+ readonly Home: "Home";
109
+ readonly End: "End";
110
+ readonly PageUp: "PageUp";
111
+ readonly PageDown: "PageDown";
112
+ readonly Backspace: "Backspace";
113
+ readonly Delete: "Delete";
114
+ };
115
+ type KeyName = (typeof Keys)[keyof typeof Keys];
116
+ /** True when the event represents an activation (Enter or Space). */
117
+ declare function isActivationKey(key: string): boolean;
118
+
119
+ /**
120
+ * Tiny, SSR-safe id generator. Prefer crypto.randomUUID when available, fall
121
+ * back to a monotonic counter otherwise so generated ids are stable across
122
+ * server/client when adapters seed them once.
123
+ */
124
+ declare function generateId(prefix?: string): string;
125
+
126
+ /**
127
+ * The shape of a Elvora theme. This is the contract every adapter depends on.
128
+ * The concrete `defaultTheme` / `darkTheme` values live in `@elvora/themes`,
129
+ * but the shape lives here so headless style descriptors don't need to import
130
+ * theme values — only the type.
131
+ */
132
+
133
+ interface ElvoraTheme {
134
+ name: string;
135
+ mode: 'light' | 'dark';
136
+ tokens: Tokens;
137
+ colors: ThemeColors;
138
+ radii: {
139
+ sm: string;
140
+ md: string;
141
+ lg: string;
142
+ full: string;
143
+ };
144
+ shadows: {
145
+ sm: string;
146
+ md: string;
147
+ lg: string;
148
+ focus: string;
149
+ };
150
+ durations: {
151
+ fast: string;
152
+ normal: string;
153
+ slow: string;
154
+ };
155
+ easings: {
156
+ standard: string;
157
+ emphasized: string;
158
+ };
159
+ }
160
+ interface ThemeColors {
161
+ background: string;
162
+ surface: string;
163
+ surfaceElevated: string;
164
+ fg: string;
165
+ fgMuted: string;
166
+ fgSubtle: string;
167
+ border: string;
168
+ borderStrong: string;
169
+ intent: {
170
+ primary: IntentScale;
171
+ neutral: IntentScale;
172
+ success: IntentScale;
173
+ warning: IntentScale;
174
+ danger: IntentScale;
175
+ info: IntentScale;
176
+ };
177
+ }
178
+ interface IntentScale {
179
+ solid: string;
180
+ solidHover: string;
181
+ solidActive: string;
182
+ solidFg: string;
183
+ subtle: string;
184
+ subtleHover: string;
185
+ fg: string;
186
+ border: string;
187
+ ring: string;
188
+ }
189
+
190
+ /**
191
+ * Headless style descriptor for the Button component. Given a theme and the
192
+ * Button's variant/size/state, returns a flat style object usable by both web
193
+ * adapters (inline styles or vanilla-extract recipes) and React Native.
194
+ *
195
+ * Keeping this here means every framework adapter looks identical visually
196
+ * without re-implementing variant logic per framework.
197
+ */
198
+
199
+ interface ButtonStyleInputs {
200
+ theme: ElvoraTheme;
201
+ variant: ElvoraVariant;
202
+ size: ElvoraSize;
203
+ fullWidth: boolean;
204
+ isLoading: boolean;
205
+ isDisabled: boolean;
206
+ isPressed: boolean;
207
+ isHovered: boolean;
208
+ isFocusVisible: boolean;
209
+ /** Intent overrides the variant's default color scheme (defaults to primary). */
210
+ intent?: keyof ElvoraTheme['colors']['intent'];
211
+ }
212
+ interface ButtonStyle {
213
+ /** Root style object — keys are camelCase so the same shape works in RN + web. */
214
+ root: Record<string, string | number | undefined>;
215
+ /** Label/text style. */
216
+ label: Record<string, string | number | undefined>;
217
+ /** Loading spinner color. */
218
+ spinnerColor: string;
219
+ }
220
+ declare function getButtonStyle(input: ButtonStyleInputs): ButtonStyle;
221
+
222
+ interface InputStyleInputs {
223
+ theme: ElvoraTheme;
224
+ size: ElvoraSize;
225
+ status: ElvoraStatus;
226
+ isDisabled: boolean;
227
+ isReadOnly: boolean;
228
+ isInvalid: boolean;
229
+ isFocused: boolean;
230
+ isHovered: boolean;
231
+ }
232
+ declare function getInputStyle(input: InputStyleInputs): Record<string, string | number | undefined>;
233
+
234
+ type FloatingLabelVariant = 'outlined' | 'filled';
235
+ interface FloatingLabelStyleInputs {
236
+ theme: ElvoraTheme;
237
+ size: ElvoraSize;
238
+ variant: FloatingLabelVariant;
239
+ floated: boolean;
240
+ focused: boolean;
241
+ invalid: boolean;
242
+ /**
243
+ * Vertical resting position of the label when the field is empty. `center`
244
+ * suits single-line controls; `top` suits multi-line controls (textarea)
245
+ * where the text starts at the top.
246
+ */
247
+ restAlign?: 'center' | 'top';
248
+ }
249
+ interface FloatingLabelStyle {
250
+ wrapper: Record<string, string | number | undefined>;
251
+ label: Record<string, string | number | undefined>;
252
+ }
253
+ /**
254
+ * Headless style descriptor for a floating label. Drives the `outlined`
255
+ * (label notches the top border) and `filled` (label floats inside the field)
256
+ * variants. The float is React-state driven via `floated` because the library
257
+ * styles with inline CSS and cannot rely on `:focus`/`:placeholder-shown`.
258
+ */
259
+ declare function getFloatingLabelStyle(input: FloatingLabelStyleInputs): FloatingLabelStyle;
260
+
261
+ /**
262
+ * Framework-agnostic Button contract. Each adapter extends/maps this to its
263
+ * framework-idiomatic event names (onPress vs press vs @press) but the
264
+ * semantics are identical: same variants, same sizes, same states.
265
+ */
266
+
267
+ interface ButtonOwnProps {
268
+ /** Visual variant. Defaults to `'primary'`. */
269
+ variant?: ElvoraVariant;
270
+ /** Size. Defaults to `'md'`. */
271
+ size?: ElvoraSize;
272
+ /** Override the intent (color scheme) for this button. */
273
+ intent?: keyof ElvoraTheme['colors']['intent'];
274
+ /** When true, stretches the button to fill its container. */
275
+ fullWidth?: boolean;
276
+ /** When true, shows a spinner and prevents activation. */
277
+ isLoading?: boolean;
278
+ /** Disabled state. */
279
+ isDisabled?: boolean;
280
+ /** Loading-state announcement for assistive tech. Defaults to "Loading". */
281
+ loadingText?: string;
282
+ /** Type attribute for HTML buttons. Defaults to `'button'`. */
283
+ type?: 'button' | 'submit' | 'reset';
284
+ }
285
+ declare const defaultButtonProps: {
286
+ variant: ElvoraVariant;
287
+ size: ElvoraSize;
288
+ type: "button";
289
+ fullWidth: boolean;
290
+ isLoading: boolean;
291
+ isDisabled: boolean;
292
+ loadingText: string;
293
+ };
294
+
295
+ interface InputOwnProps {
296
+ size?: ElvoraSize;
297
+ /** Validation status (changes border color and icon). */
298
+ status?: ElvoraStatus;
299
+ /** When true, renders a read-only input. */
300
+ isReadOnly?: boolean;
301
+ /** When true, disables the input. */
302
+ isDisabled?: boolean;
303
+ /** When true, the field is required for form submission. */
304
+ isRequired?: boolean;
305
+ /** When true, marks the input as invalid (`aria-invalid`). */
306
+ isInvalid?: boolean;
307
+ }
308
+ declare const defaultInputProps: {
309
+ size: ElvoraSize;
310
+ status: ElvoraStatus;
311
+ isReadOnly: boolean;
312
+ isDisabled: boolean;
313
+ isRequired: boolean;
314
+ isInvalid: boolean;
315
+ };
316
+
317
+ /**
318
+ * Headless Tabs contract. Each adapter renders tab buttons + panels and wires
319
+ * keyboard navigation per WAI-ARIA Tabs pattern.
320
+ */
321
+
322
+ interface TabDescriptor<V extends string = string> {
323
+ /** Stable identifier for this tab; becomes the selected value. */
324
+ value: V;
325
+ /** Visible label. */
326
+ label: string;
327
+ /** Disable this tab. */
328
+ isDisabled?: boolean;
329
+ }
330
+ type TabsActivation = 'automatic' | 'manual';
331
+ interface TabsKeyboardOptions {
332
+ orientation?: Orientation;
333
+ /** When `automatic` (default) arrow keys also select; `manual` only moves focus. */
334
+ activation?: TabsActivation;
335
+ }
336
+ /**
337
+ * Compute the next focusable tab index for a keyboard event. Returns the
338
+ * current index if the key shouldn't move focus.
339
+ */
340
+ declare function getNextTabIndex(event: {
341
+ key: string;
342
+ }, currentIndex: number, tabs: ReadonlyArray<{
343
+ isDisabled?: boolean;
344
+ }>, options?: TabsKeyboardOptions): number;
345
+
346
+ export { type Booleanish, type ButtonOwnProps, type ButtonStyle, type ButtonStyleInputs, type ChangeHandler, type Direction, type ElvoraRadius, type ElvoraSize, type ElvoraStatus, type ElvoraTheme, type ElvoraTone, type ElvoraVariant, type ErrorCorrection, FOCUSABLE_SELECTOR, type FloatingLabelStyle, type FloatingLabelStyleInputs, type FloatingLabelVariant, type InputOwnProps, type InputStyleInputs, type IntentScale, type KeyName, Keys, type Orientation, type Placement, type PossibleRef, type QRMatrix, type TabDescriptor, type TabsActivation, type TabsKeyboardOptions, type ThemeColors, type ValueOrCallback, ariaAttr, composeEventHandlers, composeRefs, dataAttr, defaultButtonProps, defaultInputProps, generateId, generateQrMatrix, getButtonStyle, getFirstFocusable, getFloatingLabelStyle, getFocusableElements, getInputStyle, getLastFocusable, getNextTabIndex, isActivationKey, isElementVisible, isFocusable, mergeProps, setRef };