{"version":3,"sources":["../src/rules/dates.js","../src/rules/initials.js","../src/rules/ordinals.js","../src/data/prepositions.js","../src/rules/prepositions.js","../src/rules/roman.js","../src/rules/thousands.js","../src/data/units.js","../src/rules/units.js","../src/fixCzech.js","../src/fixCzechDom.js","../src/TypoWrapper.js","../src/fixCzechHtml.js","../src/Typo.server.js","../src/useFixCzech.js"],"names":["React","useMemo","useRef","useEffect","jsx","renderToStaticMarkup","Fragment"],"mappings":"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","file":"react.cjs","sourcesContent":["const FULL_DATE_REGEX = /(\\d{1,2})\\.[ \\t]+(\\d{1,2})\\.[ \\t]+(\\d{2,4})\\b/g;\r\nconst DAY_MONTH_REGEX = /(\\d{1,2})\\.[ \\t]+(\\d{1,2})\\.(?=[^\\p{L}\\p{N}]|$)/gu;\r\n\r\n/**\r\n * Glues date components together with non-breaking spaces.\r\n *\r\n * - `5. 12. 2024` → `5.\\u00A012.\\u00A02024`\r\n * - `5. 12.` → `5.\\u00A012.`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyDates(text) {\r\n    return text\r\n        .replace(FULL_DATE_REGEX, '$1.\\u00A0$2.\\u00A0$3')\r\n        .replace(DAY_MONTH_REGEX, '$1.\\u00A0$2.');\r\n}\r\n","const INITIAL_REGEX = /(\\b\\p{Lu})\\.[ \\t]+(?=\\p{Lu})/gu;\r\n\r\n/**\r\n * Glues an initial (a single uppercase letter followed by a dot) to the\r\n * following word with a non-breaking space. Repeats until stable so chains\r\n * like `J. R. R. Tolkien` are fully fixed.\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyInitials(text) {\r\n    let previous;\r\n    let current = text;\r\n    do {\r\n        previous = current;\r\n        current = current.replace(INITIAL_REGEX, '$1.\\u00A0');\r\n    } while (current !== previous);\r\n    return current;\r\n}\r\n","const ORDINAL_REGEX = /(\\d{1,2})\\.[ \\t]+(?=\\p{Ll})/gu;\r\n\r\n/**\r\n * Glues ordinal numbers to the following word with a non-breaking space.\r\n * Triggers only when the next character is a Unicode lowercase letter so\r\n * sentences ending with an ordinal (e.g. `žil v 19. století. Měl…`)\r\n * are not affected at the sentence boundary.\r\n *\r\n * - `1. ledna` → `1.\\u00A0ledna`\r\n * - `25. listopadu 2024` → `25.\\u00A0listopadu 2024`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyOrdinals(text) {\r\n    return text.replace(ORDINAL_REGEX, '$1.\\u00A0');\r\n}\r\n","/**\r\n * Czech one-letter prepositions and conjunctions that should not be left\r\n * at the end of a line (per Czech orthography rules).\r\n *\r\n * Source: https://prirucka.ujc.cas.cz/?id=880\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const PREPOSITIONS = Object.freeze([\r\n    'a',\r\n    'i',\r\n    'k',\r\n    'o',\r\n    's',\r\n    'u',\r\n    'v',\r\n    'z',\r\n]);\r\n","import { PREPOSITIONS } from '../data/prepositions.js';\r\n\r\nconst PREPOSITION_REGEX = new RegExp(\r\n    `(?<=^|[\\\\s(\\\\[\"'\\u00A0\\u2018\\u201C\\u00BB\\u2014\\u2013-])(${PREPOSITIONS.join('|')})[ \\\\t]+(?=\\\\S)`,\r\n    'giu',\r\n);\r\n\r\n/**\r\n * Glues Czech one-letter prepositions and conjunctions (a, i, k, o, s, u,\r\n * v, z) to the following word with a non-breaking space.\r\n *\r\n * Case-insensitive – also handles capitalised forms at the start of a\r\n * sentence (`K Tobě`, `V domě`, `S Petrem`).\r\n *\r\n * Uses a lookbehind so consecutive prepositions (`v a z`) are all fixed\r\n * in a single pass.\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyPrepositions(text) {\r\n    return text.replace(PREPOSITION_REGEX, '$1\\u00A0');\r\n}\r\n","const ROMAN_NUMERAL =\r\n    '(?:(?=[IVXLCDM])M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3}))';\r\nconst ROMAN_REGEX = new RegExp(\r\n    `(\\\\b\\\\p{Lu}\\\\p{L}+)[ \\\\t]+(?=${ROMAN_NUMERAL}\\\\.(?=[^\\\\p{L}\\\\p{N}]|$))`,\r\n    'gu',\r\n);\r\n\r\n/**\r\n * Glues a name to a following Roman numeral (with optional dot) using a\r\n * non-breaking space.\r\n *\r\n * - `Karel IV.` → `Karel\\u00A0IV.`\r\n * - `Jindřich VIII.` → `Jindřich\\u00A0VIII.`\r\n * - `papež Jan Pavel II.` → `papež Jan Pavel\\u00A0II.`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyRoman(text) {\r\n    return text.replace(ROMAN_REGEX, '$1\\u00A0');\r\n}\r\n","const THOUSANDS_REGEX = /(\\d)[ \\t](\\d{3})(?=\\D|$)/g;\r\n\r\n/**\r\n * Replaces a regular space used as a thousand separator with a non-breaking\r\n * space so the number stays on one line (`10 000` → `10\\u00A0000`).\r\n *\r\n * Applied repeatedly to handle multiple separators in a single number\r\n * (`1 000 000`).\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyThousands(text) {\r\n    let previous;\r\n    let current = text;\r\n    do {\r\n        previous = current;\r\n        current = current.replace(THOUSANDS_REGEX, '$1\\u00A0$2');\r\n    } while (current !== previous);\r\n    return current;\r\n}\r\n","/**\r\n * Units of measurement that are safe to glue to a preceding number with a\r\n * non-breaking space, regardless of what follows.\r\n *\r\n * Sorted from longest to shortest so the regex alternation matches the most\r\n * specific unit first (e.g. `kWh` before `kW` before `W`).\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const SAFE_UNITS = Object.freeze(\r\n    [\r\n        'km/h',\r\n        'm/s',\r\n        'kWh',\r\n        'mAh',\r\n        'mbar',\r\n        'kbps',\r\n        'Mbps',\r\n        'Gbit',\r\n        'kPa',\r\n        'bar',\r\n        'kg',\r\n        'mg',\r\n        'cm',\r\n        'mm',\r\n        'µm',\r\n        'nm',\r\n        'km',\r\n        'ml',\r\n        'cl',\r\n        'dl',\r\n        'kJ',\r\n        'Nm',\r\n        'Wb',\r\n        'lm',\r\n        'lx',\r\n        'cd',\r\n        'mol',\r\n        'min',\r\n        'ms',\r\n        'ns',\r\n        'Hz',\r\n        'Pa',\r\n        'kW',\r\n        'MW',\r\n        'Ohm',\r\n        '°C',\r\n        '°F',\r\n        '°',\r\n        '‰',\r\n        '%',\r\n        'px',\r\n        'pt',\r\n        'dpi',\r\n        'bpm',\r\n        'EUR',\r\n        'USD',\r\n        'CZK',\r\n        'Kč',\r\n        'mg/m³',\r\n        'str',\r\n        'osob',\r\n        'ks',\r\n        'MJ',\r\n        'TB',\r\n        'GB',\r\n        'MB',\r\n        'kB',\r\n        'bit',\r\n        'GBit',\r\n        'mol',\r\n        'Ω',\r\n        '€',\r\n        '$',\r\n        '£',\r\n    ].sort((a, b) => b.length - a.length),\r\n);\r\n\r\n/**\r\n * Units that collide with common Czech words/letters when used as a\r\n * single character (e.g. `s` is also a preposition, `m` matches `m` in\r\n * \"5 mužů\"). They are applied only when the unit is followed by a clear\r\n * word boundary that is not another letter (interpunction or end of string).\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const STRICT_UNITS = Object.freeze(\r\n    ['m', 's', 'l', 't', 'g', 'V', 'A', 'W', 'J', 'K', 'B'].sort(\r\n        (a, b) => b.length - a.length,\r\n    ),\r\n);\r\n","import { SAFE_UNITS, STRICT_UNITS } from '../data/units.js';\r\n\r\nfunction escapeRegex(value) {\r\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n\r\nconst SAFE_PATTERN = SAFE_UNITS.map(escapeRegex).join('|');\r\nconst STRICT_PATTERN = STRICT_UNITS.map(escapeRegex).join('|');\r\n\r\nconst SAFE_UNIT_REGEX = new RegExp(\r\n    `(\\\\d)[ \\\\t]+(?=(?:${SAFE_PATTERN})(?![\\\\p{L}\\\\p{N}]))`,\r\n    'gu',\r\n);\r\n\r\nconst STRICT_UNIT_REGEX = new RegExp(\r\n    `(\\\\d)[ \\\\t]+(?=(?:${STRICT_PATTERN})(?:[.,;:!?)\\\\]/\\\\u00A0]|$))`,\r\n    'gu',\r\n);\r\n\r\n/**\r\n * Glues a number to its unit of measurement with a non-breaking space.\r\n *\r\n * Two passes:\r\n *  1. **Safe units** – multi-character or symbolic units (`km`, `°C`, `Kč`,\r\n *     `Ω`) match whenever they follow a digit and are not the prefix of a\r\n *     longer word.\r\n *  2. **Strict units** – single-letter units that collide with common Czech\r\n *     words (`s`, `m`, `g`, `K`, `V`, `A`, `W`) match only when followed by\r\n *     interpunction or end-of-string – never when followed by another\r\n *     letter (avoids false positives like `5 mužů`).\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyUnits(text) {\r\n    return text\r\n        .replace(SAFE_UNIT_REGEX, '$1\\u00A0')\r\n        .replace(STRICT_UNIT_REGEX, '$1\\u00A0');\r\n}\r\n","import { applyDates } from './rules/dates.js';\r\nimport { applyInitials } from './rules/initials.js';\r\nimport { applyOrdinals } from './rules/ordinals.js';\r\nimport { applyPrepositions } from './rules/prepositions.js';\r\nimport { applyRoman } from './rules/roman.js';\r\nimport { applyThousands } from './rules/thousands.js';\r\nimport { applyUnits } from './rules/units.js';\r\n\r\n/**\r\n * @typedef {object} FixCzechOptions\r\n * @property {boolean} [prepositions=true] Glue one-letter prepositions/conjunctions to the next word.\r\n * @property {boolean} [units=true]        Glue numbers to units of measurement.\r\n * @property {boolean} [initials=true]     Glue initials (J., A.) to surnames.\r\n * @property {boolean} [dates=true]        Glue dates (5. 12. 2024) together.\r\n * @property {boolean} [ordinals=true]     Glue ordinal numbers (1. ledna) to the next word.\r\n * @property {boolean} [roman=true]        Glue names to Roman numerals (Karel IV.).\r\n * @property {boolean} [thousands=true]    Replace thousands separators (10 000) with nbsp.\r\n */\r\n\r\nconst DEFAULT_OPTIONS = Object.freeze({\r\n    prepositions: true,\r\n    units: true,\r\n    initials: true,\r\n    dates: true,\r\n    ordinals: true,\r\n    roman: true,\r\n    thousands: true,\r\n});\r\n\r\n/**\r\n * Apply Czech typography rules to a string.\r\n *\r\n * Returns the input unchanged when it isn't a string, so the function is\r\n * safe to call on `null`, `undefined`, numbers etc. without guarding.\r\n *\r\n * Pipeline order matters – `thousands` runs before `units`, otherwise the\r\n * \"10 000 km\" case would steal the thousand-separator space as the\r\n * number-to-unit space.\r\n *\r\n * @param {string} text\r\n * @param {FixCzechOptions} [options]\r\n * @returns {string}\r\n */\r\nexport function fixCzech(text, options) {\r\n    if (typeof text !== 'string' || text.length === 0) {\r\n        return text;\r\n    }\r\n\r\n    const opts = options ? { ...DEFAULT_OPTIONS, ...options } : DEFAULT_OPTIONS;\r\n\r\n    let result = text;\r\n    if (opts.thousands) result = applyThousands(result);\r\n    if (opts.dates) result = applyDates(result);\r\n    if (opts.ordinals) result = applyOrdinals(result);\r\n    if (opts.units) result = applyUnits(result);\r\n    if (opts.initials) result = applyInitials(result);\r\n    if (opts.roman) result = applyRoman(result);\r\n    if (opts.prepositions) result = applyPrepositions(result);\r\n    return result;\r\n}\r\n\r\nexport default fixCzech;\r\n","import { fixCzech } from './fixCzech.js';\r\n\r\nconst SKIPPED_TAGS = new Set(['SCRIPT', 'STYLE', 'PRE', 'CODE', 'TEXTAREA']);\r\n\r\nconst ELEMENT_NODE = 1;\r\nconst TEXT_NODE = 3;\r\n\r\nconst processedNodes = new WeakSet();\r\n\r\nfunction shouldSkipParent(element) {\r\n    let parent = element;\r\n    while (parent && parent.nodeType === ELEMENT_NODE) {\r\n        if (SKIPPED_TAGS.has(parent.nodeName)) return true;\r\n        if (parent.isContentEditable) return true;\r\n        parent = parent.parentNode;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction processTextNode(node, options) {\r\n    if (!node.nodeValue) return;\r\n    if (processedNodes.has(node)) return;\r\n    if (shouldSkipParent(node.parentNode)) return;\r\n    const fixed = fixCzech(node.nodeValue, options);\r\n    if (fixed !== node.nodeValue) {\r\n        node.nodeValue = fixed;\r\n    }\r\n    processedNodes.add(node);\r\n}\r\n\r\nfunction walk(node, options) {\r\n    if (!node) return;\r\n    if (node.nodeType === TEXT_NODE) {\r\n        processTextNode(node, options);\r\n        return;\r\n    }\r\n    if (node.nodeType !== ELEMENT_NODE) return;\r\n    if (SKIPPED_TAGS.has(node.nodeName)) return;\r\n    if (node.isContentEditable) return;\r\n\r\n    let child = node.firstChild;\r\n    while (child) {\r\n        const next = child.nextSibling;\r\n        walk(child, options);\r\n        child = next;\r\n    }\r\n}\r\n\r\n/**\r\n * Recursively walk a DOM subtree and apply Czech typography rules to\r\n * every text node, skipping `<script>`, `<style>`, `<pre>`, `<code>`,\r\n * `<textarea>` and `contenteditable` elements.\r\n *\r\n * Idempotent – calling this on the same subtree twice produces the same\r\n * output (processed text nodes are tracked in a `WeakSet`).\r\n *\r\n * @param {Node} root\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n */\r\nexport function fixCzechDom(root, options) {\r\n    if (!root || typeof root !== 'object' || typeof root.nodeType !== 'number') return;\r\n    walk(root, options);\r\n}\r\n\r\n/**\r\n * Begin observing `root` for DOM mutations and apply Czech typography\r\n * rules to any text nodes that are added or modified. Returns a\r\n * disconnect function.\r\n *\r\n * @param {Node} root\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {() => void}\r\n */\r\nexport function observeCzechDom(root, options) {\r\n    if (!root) return () => {};\r\n    fixCzechDom(root, options);\r\n\r\n    if (typeof MutationObserver === 'undefined') return () => {};\r\n\r\n    const observer = new MutationObserver((mutations) => {\r\n        for (const mutation of mutations) {\r\n            if (mutation.type === 'characterData') {\r\n                processedNodes.delete(mutation.target);\r\n                if (mutation.target.nodeType === TEXT_NODE) {\r\n                    processTextNode(mutation.target, options);\r\n                }\r\n                continue;\r\n            }\r\n            for (const added of mutation.addedNodes) {\r\n                walk(added, options);\r\n            }\r\n        }\r\n    });\r\n\r\n    observer.observe(root, {\r\n        childList: true,\r\n        subtree: true,\r\n        characterData: true,\r\n    });\r\n\r\n    return () => observer.disconnect();\r\n}\r\n","'use client';\r\n\r\nimport React, { useEffect, useMemo, useRef } from 'react';\r\nimport { fixCzech } from './fixCzech.js';\r\nimport { observeCzechDom } from './fixCzechDom.js';\r\n\r\nfunction processChildren(node, options) {\r\n    if (typeof node === 'string') {\r\n        return fixCzech(node, options);\r\n    }\r\n\r\n    if (typeof node === 'number' || typeof node === 'boolean' || node == null) {\r\n        return node;\r\n    }\r\n\r\n    if (Array.isArray(node)) {\r\n        return node.map((child, index) => {\r\n            const processed = processChildren(child, options);\r\n            if (React.isValidElement(processed) && processed.key == null) {\r\n                return React.cloneElement(processed, { key: index });\r\n            }\r\n            return processed;\r\n        });\r\n    }\r\n\r\n    if (React.isValidElement(node)) {\r\n        const props = node.props;\r\n        if (props == null || props.children == null) return node;\r\n        return React.cloneElement(node, {\r\n            ...props,\r\n            children: processChildren(props.children, options),\r\n        });\r\n    }\r\n\r\n    return node;\r\n}\r\n\r\nfunction normaliseOptions(props) {\r\n    if (props.options) return props.options;\r\n    const {\r\n        prepositions,\r\n        units,\r\n        initials,\r\n        dates,\r\n        ordinals,\r\n        roman,\r\n        thousands,\r\n    } = props;\r\n    const result = {};\r\n    if (prepositions !== undefined) result.prepositions = prepositions;\r\n    if (units !== undefined) result.units = units;\r\n    if (initials !== undefined) result.initials = initials;\r\n    if (dates !== undefined) result.dates = dates;\r\n    if (ordinals !== undefined) result.ordinals = ordinals;\r\n    if (roman !== undefined) result.roman = roman;\r\n    if (thousands !== undefined) result.thousands = thousands;\r\n    return result;\r\n}\r\n\r\n/**\r\n * @typedef {object} TypoWrapperProps\r\n * @property {React.ReactNode} [children]                 Child JSX/text to process.\r\n * @property {'jsx' | 'dom'}    [mode='jsx']             Processing strategy.\r\n * @property {import('./fixCzech.js').FixCzechOptions} [options] All rule toggles in one object.\r\n * @property {boolean} [prepositions]                    Shortcut for `options.prepositions`.\r\n * @property {boolean} [units]                           Shortcut for `options.units`.\r\n * @property {boolean} [initials]                        Shortcut for `options.initials`.\r\n * @property {boolean} [dates]                           Shortcut for `options.dates`.\r\n * @property {boolean} [ordinals]                        Shortcut for `options.ordinals`.\r\n * @property {boolean} [roman]                           Shortcut for `options.roman`.\r\n * @property {boolean} [thousands]                       Shortcut for `options.thousands`.\r\n * @property {string} [as='span']                        Element used to host the DOM-mode subtree.\r\n */\r\n\r\n/**\r\n * React component that applies Czech typography rules to its children.\r\n *\r\n * Two modes:\r\n *\r\n * - **`mode=\"jsx\"` (default)** – traverses the React children tree at\r\n *   render time. Fast, no DOM mutations, but only sees text passed\r\n *   directly as children (won't reach into `<App />`).\r\n * - **`mode=\"dom\"`** – after mount, walks the rendered DOM subtree and\r\n *   fixes every text node, then uses a `MutationObserver` to keep\r\n *   following changes. Works for the entire app even when wrapping\r\n *   `<App />` in pure React or arbitrary nested components. SSR-safe –\r\n *   does nothing during server rendering, applies after hydration.\r\n *\r\n * @param {TypoWrapperProps} props\r\n * @returns {JSX.Element}\r\n */\r\nexport function TypoWrapper(props) {\r\n    const { children, mode = 'jsx', as: Tag = 'span' } = props;\r\n    const options = useMemo(\r\n        () => normaliseOptions(props),\r\n        // Each tracked prop is a primitive boolean (or an object reference\r\n        // explicitly supplied by the caller), so listing them keeps the\r\n        // memo stable across renders that pass identical config.\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        [\r\n            props.options,\r\n            props.prepositions,\r\n            props.units,\r\n            props.initials,\r\n            props.dates,\r\n            props.ordinals,\r\n            props.roman,\r\n            props.thousands,\r\n        ],\r\n    );\r\n\r\n    const containerRef = useRef(null);\r\n    const processedJsx = useMemo(\r\n        () => (mode === 'jsx' ? processChildren(children, options) : null),\r\n        [mode, children, options],\r\n    );\r\n\r\n    useEffect(() => {\r\n        if (mode !== 'dom') return undefined;\r\n        const target = containerRef.current;\r\n        if (!target) return undefined;\r\n        return observeCzechDom(target, options);\r\n    }, [mode, options]);\r\n\r\n    if (mode === 'dom') {\r\n        return (\r\n            <Tag ref={containerRef} style={{ display: 'contents' }}>\r\n                {children}\r\n            </Tag>\r\n        );\r\n    }\r\n\r\n    return <>{processedJsx}</>;\r\n}\r\n\r\nexport default TypoWrapper;\r\n","import { fixCzech } from './fixCzech.js';\r\n\r\nconst RAW_TEXT_TAGS = new Set(['script', 'style', 'pre', 'code', 'textarea']);\r\n\r\nconst TOKEN_REGEX =\r\n    /<!--[\\s\\S]*?-->|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|<![A-Za-z][^>]*>|<\\?[\\s\\S]*?\\?>|<\\/?([A-Za-z][A-Za-z0-9-]*)\\b[^>]*>|[^<]+/g;\r\n\r\nconst SENTINEL = '\\u0001';\r\n\r\nfunction isTextToken(match) {\r\n    return match.charCodeAt(0) !== 60;\r\n}\r\n\r\nfunction isTagToken(match) {\r\n    return (\r\n        match.charCodeAt(0) === 60 &&\r\n        !match.startsWith('<!--') &&\r\n        !match.startsWith('<![') &&\r\n        !match.startsWith('<!') &&\r\n        !match.startsWith('<?')\r\n    );\r\n}\r\n\r\nfunction fixWithLookahead(text, options, nextChar) {\r\n    if (nextChar && /\\S/.test(nextChar)) {\r\n        const padded = text + nextChar + SENTINEL;\r\n        const fixed = fixCzech(padded, options);\r\n        if (fixed.endsWith(nextChar + SENTINEL)) {\r\n            return fixed.slice(0, -(nextChar.length + SENTINEL.length));\r\n        }\r\n        return fixed.endsWith(SENTINEL) ? fixed.slice(0, -SENTINEL.length) : fixed;\r\n    }\r\n    return fixCzech(text, options);\r\n}\r\n\r\nfunction transformOne(match, tagName, rawTextStack, options, nextChar) {\r\n    if (!isTagToken(match) && match.charCodeAt(0) === 60) {\r\n        return match;\r\n    }\r\n\r\n    if (isTagToken(match)) {\r\n        const isClosing = match.charCodeAt(1) === 47;\r\n        const tag = tagName ? tagName.toLowerCase() : '';\r\n        if (isClosing) {\r\n            const top = rawTextStack[rawTextStack.length - 1];\r\n            if (top && top === tag) rawTextStack.pop();\r\n        } else if (RAW_TEXT_TAGS.has(tag) && !/\\/\\s*>$/.test(match)) {\r\n            rawTextStack.push(tag);\r\n        }\r\n        return match;\r\n    }\r\n\r\n    if (rawTextStack.length > 0) return match;\r\n    return fixWithLookahead(match, options, nextChar);\r\n}\r\n\r\nfunction tokenize(html) {\r\n    const tokens = [];\r\n    TOKEN_REGEX.lastIndex = 0;\r\n    let m;\r\n    while ((m = TOKEN_REGEX.exec(html))) {\r\n        tokens.push({ match: m[0], tagName: m[1], end: m.index + m[0].length });\r\n    }\r\n    return tokens;\r\n}\r\n\r\nfunction lookaheadOf(tokens, index, fallback) {\r\n    const next = tokens[index + 1];\r\n    if (!next) return fallback || '';\r\n    if (isTextToken(next.match)) return next.match.charAt(0);\r\n    return '<';\r\n}\r\n\r\nfunction transformTokens(tokens, rawTextStack, options, trailingChar) {\r\n    let output = '';\r\n    for (let i = 0; i < tokens.length; i++) {\r\n        const { match, tagName } = tokens[i];\r\n        const nextChar = lookaheadOf(tokens, i, trailingChar);\r\n        output += transformOne(match, tagName, rawTextStack, options, nextChar);\r\n    }\r\n    return output;\r\n}\r\n\r\n/**\r\n * Apply Czech typography rules to an HTML string. Tags, attributes,\r\n * comments, doctypes and the contents of `script`/`style`/`pre`/`code`/\r\n * `textarea` elements are left untouched.\r\n *\r\n * @param {string} html\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {string}\r\n */\r\nexport function fixCzechHtml(html, options) {\r\n    if (typeof html !== 'string' || html.length === 0) return html;\r\n    return transformTokens(tokenize(html), [], options, '');\r\n}\r\n\r\nconst STREAM_TAIL = 64;\r\n\r\n/**\r\n * Stateful streaming processor – feeds chunks of HTML through the same\r\n * transformation as {@link fixCzechHtml} while keeping a small tail\r\n * buffer to handle words and tags split across chunk boundaries.\r\n *\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {{ feed(chunk: string): string, flush(): string }}\r\n */\r\nexport function createFixCzechProcessor(options) {\r\n    let buffer = '';\r\n    const rawTextStack = [];\r\n\r\n    function flushUpTo(cutPoint, trailingChar) {\r\n        if (cutPoint === 0) return '';\r\n        const processable = buffer.slice(0, cutPoint);\r\n        const tokens = tokenize(processable);\r\n        const output = transformTokens(tokens, rawTextStack, options, trailingChar);\r\n        buffer = buffer.slice(cutPoint);\r\n        return output;\r\n    }\r\n\r\n    return {\r\n        feed(chunk) {\r\n            if (typeof chunk !== 'string') chunk = String(chunk);\r\n            buffer += chunk;\r\n            if (buffer.length === 0) return '';\r\n\r\n            let cutPoint = Math.max(0, buffer.length - STREAM_TAIL);\r\n            const lastLt = buffer.lastIndexOf('<');\r\n            const lastGt = buffer.lastIndexOf('>');\r\n            if (lastLt > lastGt) cutPoint = Math.min(cutPoint, lastLt);\r\n\r\n            while (cutPoint > 0 && !/\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n            while (cutPoint > 0 && /\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n            while (cutPoint > 0 && !/\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n\r\n            if (cutPoint === 0) return '';\r\n\r\n            const trailingChar = buffer.charAt(cutPoint);\r\n            return flushUpTo(cutPoint, trailingChar);\r\n        },\r\n\r\n        flush() {\r\n            if (buffer.length === 0) return '';\r\n            return flushUpTo(buffer.length, '');\r\n        },\r\n    };\r\n}\r\n\r\n/**\r\n * Create a Web-Streams `TransformStream` that applies Czech typography\r\n * rules to an HTML response on the fly. Compatible with Vercel Edge,\r\n * Cloudflare Workers, Node.js 18+, Deno and Bun.\r\n *\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {TransformStream<Uint8Array | string, Uint8Array>}\r\n */\r\nexport function createFixCzechStream(options) {\r\n    if (typeof TransformStream === 'undefined') {\r\n        throw new Error(\r\n            'createFixCzechStream requires the Web Streams API. Use Node 18+, Deno, Bun, or run in a browser/Edge runtime.',\r\n        );\r\n    }\r\n\r\n    const decoder = new TextDecoder('utf-8');\r\n    const encoder = new TextEncoder();\r\n    const processor = createFixCzechProcessor(options);\r\n\r\n    return new TransformStream({\r\n        transform(chunk, controller) {\r\n            const text =\r\n                typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\r\n            const out = processor.feed(text);\r\n            if (out.length > 0) controller.enqueue(encoder.encode(out));\r\n        },\r\n        flush(controller) {\r\n            const tail = decoder.decode();\r\n            if (tail.length > 0) {\r\n                const out = processor.feed(tail);\r\n                if (out.length > 0) controller.enqueue(encoder.encode(out));\r\n            }\r\n            const final = processor.flush();\r\n            if (final.length > 0) controller.enqueue(encoder.encode(final));\r\n        },\r\n    });\r\n}\r\n","import { renderToStaticMarkup } from 'react-dom/server';\r\nimport { fixCzechHtml } from './fixCzechHtml.js';\r\n\r\n/**\r\n * @typedef {object} TypoProps\r\n * @property {React.ReactNode} [children]\r\n * @property {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @property {string} [as='span']\r\n */\r\n\r\n/**\r\n * Async server component that renders its children to static markup,\r\n * applies {@link fixCzechHtml}, and re-injects the fixed markup via\r\n * `dangerouslySetInnerHTML`.\r\n *\r\n * Suitable for self-contained text fragments (article body, headline,\r\n * description). **Loses client interactivity inside the wrapped tree** –\r\n * for whole-page coverage use the Next.js middleware or a Vite SSR\r\n * pipeline instead.\r\n *\r\n * @param {TypoProps} props\r\n */\r\nexport default function Typo({ children, options, as: Tag = 'span' }) {\r\n    const html = renderToStaticMarkup(<>{children}</>);\r\n    const fixed = fixCzechHtml(html, options);\r\n    return <Tag dangerouslySetInnerHTML={{ __html: fixed }} />;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { fixCzech } from './fixCzech.js';\r\n\r\n/**\r\n * Hook that returns the input string with Czech typography rules\r\n * applied. Memoised on the text + serialised options so re-renders with\r\n * the same input do not redo the work.\r\n *\r\n * @param {string} text\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {string}\r\n */\r\nexport function useFixCzech(text, options) {\r\n    const optionsKey = options ? JSON.stringify(options) : '';\r\n    return useMemo(\r\n        () => fixCzech(text, options),\r\n        // optionsKey is a serialised representation of `options`, so it\r\n        // captures the relevant dependencies without re-firing on a fresh\r\n        // object literal with the same values.\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        [text, optionsKey],\r\n    );\r\n}\r\n\r\nexport default useFixCzech;\r\n"]}