{"version":3,"file":"ptw.cjs","sources":["../../src/tailwind/ptw.ts"],"sourcesContent":["import { type YogaStyles } from '../core/style/yogaStyles';\n\nclass TailwindParser {\n    private static readonly BASE_UNIT = 4;\n\n    private static readonly SPACING_MAP = {\n        p: 'padding',\n        px: ['paddingLeft', 'paddingRight'],\n        py: ['paddingTop', 'paddingBottom'],\n        pt: 'paddingTop',\n        pr: 'paddingRight',\n        pb: 'paddingBottom',\n        pl: 'paddingLeft',\n        m: 'margin',\n        mx: ['marginLeft', 'marginRight'],\n        my: ['marginTop', 'marginBottom'],\n        mt: 'marginTop',\n        mr: 'marginRight',\n        mb: 'marginBottom',\n        ml: 'marginLeft',\n\n        gap: 'gap',\n        'gap-x': 'columnGap',\n        'gap-y': 'rowGap',\n    };\n\n    private static readonly DISPLAY_MAP = {\n        // flex: { display: 'flex' },\n        // block: { display: 'block' },\n        // hidden: { display: 'none' },\n    };\n\n    private static readonly FLEX_MAP = {\n        'flex-row': { flexDirection: 'row' },\n        'flex-col': { flexDirection: 'column' },\n        'flex-row-reverse': { flexDirection: 'row-reverse' },\n        'flex-col-reverse': { flexDirection: 'column-reverse' },\n        'flex-wrap': { flexWrap: 'wrap' },\n        'flex-wrap-reverse': { flexWrap: 'wrap-reverse' },\n        'flex-nowrap': { flexWrap: 'nowrap' },\n\n        'grow-0': { flexGrow: 0 },\n        grow: { flexGrow: 1 },\n\n        'shrink-0': { flexShrink: 0 },\n        shrink: { flexShrink: 1 },\n\n        'justify-start': { justifyContent: 'flex-start' },\n        'justify-center': { justifyContent: 'center' },\n        'justify-end': { justifyContent: 'flex-end' },\n        'justify-between': { justifyContent: 'space-between' },\n        'justify-around': { justifyContent: 'space-around' },\n        'justify-evenly': { justifyContent: 'space-evenly' },\n\n        'items-start': { alignItems: 'flex-start' },\n        'items-center': { alignItems: 'center' },\n        'items-end': { alignItems: 'flex-end' },\n        'items-baseline': { alignItems: 'baseline' },\n        'items-stretch': { alignItems: 'stretch' },\n\n        'content-start': { alignContent: 'flex-start' },\n        'content-center': { alignContent: 'center' },\n        'content-end': { alignContent: 'flex-end' },\n        'content-between': { alignContent: 'space-between' },\n        'content-around': { alignContent: 'space-around' },\n        'content-evenly': { alignContent: 'space-evenly' },\n        'content-stretch': { alignContent: 'stretch' },\n\n        'self-auto': { alignSelf: 'auto' },\n        'self-start': { alignSelf: 'flex-start' },\n        'self-center': { alignSelf: 'center' },\n        'self-end': { alignSelf: 'flex-end' },\n        'self-stretch': { alignSelf: 'stretch' },\n        'self-baseline': { alignSelf: 'baseline' },\n    };\n\n    private static readonly SIZE_MAP = {\n        w: 'width',\n        h: 'height',\n        size: ['width', 'height'],\n        'min-w': 'minWidth',\n        'min-h': 'minHeight',\n        'max-w': 'maxWidth',\n        'max-h': 'maxHeight',\n    };\n\n    private static convertSizeValue(value: string): number | string {\n        if (value === 'full') return '100%';\n        if (value === 'screen') return '100vh';\n        if (value === 'px') return 1;\n        if (value === 'auto') return 'auto';\n        if (value === '1/2') return '50%';\n        if (value === '1/3') return '33.333333%';\n        if (value === '2/3') return '66.666667%';\n        if (value === '1/4') return '25%';\n        if (value === '2/4') return '50%';\n        if (value === '3/4') return '75%';\n        if (value === '1/5') return '20%';\n        if (value === '2/5') return '40%';\n        if (value === '3/5') return '60%';\n        if (value === '4/5') return '80%';\n\n        return Number(value) * this.BASE_UNIT;\n    }\n\n    private static parseSize(key: keyof (typeof TailwindParser)['SIZE_MAP'], value: string, styles: YogaStyles): void {\n        const property = this.SIZE_MAP[key] as keyof YogaStyles;\n        const size = this.convertSizeValue(value);\n\n        if (Array.isArray(property)) {\n            property.forEach((prop) => (styles[prop as keyof YogaStyles] = size as any));\n        } else if (property) {\n            styles[property] = size as any;\n        }\n    }\n\n    private static convertSpacingValue(value: string): number {\n        if (value === 'px') return 1;\n\n        return Number(value) * this.BASE_UNIT;\n    }\n\n    private static parseSpacing(\n        key: keyof (typeof TailwindParser)['SPACING_MAP'],\n        value: string,\n        styles: YogaStyles,\n    ): void {\n        const property = this.SPACING_MAP[key] as keyof YogaStyles | (keyof YogaStyles)[];\n        const spacing = this.convertSpacingValue(value);\n\n        if (Array.isArray(property)) {\n            property.forEach((prop) => (styles[prop] = spacing as any));\n        } else if (property) {\n            styles[property] = spacing as any;\n        }\n    }\n\n    public static parse(classString: string): YogaStyles {\n        const classes = classString.trim().split(' ') as any[];\n        const styles: YogaStyles = {};\n\n        for (const cls of classes) {\n            // Handle spacing utilities (p-, m-)\n            const [key, value] = cls.split('-') as [keyof (typeof TailwindParser)['SPACING_MAP'], string];\n\n            if (this.SPACING_MAP[key]) {\n                this.parseSpacing(key, value, styles);\n                continue;\n            }\n\n            // Handle size utilities (w-, h-, min-w-, min-h-, max-w-, max-h-)\n            if (this.SIZE_MAP[key as keyof (typeof TailwindParser)['SIZE_MAP']]) {\n                this.parseSize(key as keyof (typeof TailwindParser)['SIZE_MAP'], value, styles);\n                continue;\n            }\n\n            // Handle display utilities\n            if (this.DISPLAY_MAP[cls as keyof (typeof TailwindParser)['DISPLAY_MAP']]) {\n                Object.assign(\n                    styles,\n                    this.DISPLAY_MAP[cls as keyof (typeof TailwindParser)['DISPLAY_MAP']] as YogaStyles,\n                );\n                continue;\n            }\n\n            // Handle flex utilities\n            if (this.FLEX_MAP[cls as keyof (typeof TailwindParser)['FLEX_MAP']]) {\n                Object.assign(styles, this.FLEX_MAP[cls as keyof (typeof TailwindParser)['FLEX_MAP']] as YogaStyles);\n                continue;\n            }\n        }\n\n        return styles;\n    }\n}\n\n/**\n * Tagged template literal function for Tailwind-like styling in PixiJS Layout\n * Converts Tailwind-style class strings into PixiJS Layout style objects\n *\n * @param template - Template string array\n * @param templateElements - Dynamic values to interpolate\n * @returns YogaStyles object\n *\n * @example\n * // Basic usage\n * const styles = tw`p-4 m-2 flex-row items-center`;\n *\n * // With dynamic values\n * const padding = 4;\n * const styles = tw`p-${padding} flex-row`;\n *\n * // Using with PixiJS Layout\n * <container layout={tw`p-4 flex-row items-center justify-between`}>\n *   <sprite layout={tw`w-full h-20`} />\n * </container>\n */\nexport function tw(template: TemplateStringsArray, ...templateElements: any[]) {\n    const res = template\n        .reduce((sum, n, index) => {\n            const templateElement = templateElements[index];\n\n            if (typeof templateElement === 'string') {\n                return `${sum}${n}${templateElement}`;\n            }\n\n            return `${sum}${n}`;\n        }, '')\n        .trim()\n        .replace(/\\s{2,}/g, ' ');\n\n    // convert string to an object that can be used as a style\n    return TailwindParser.parse(res);\n}\n"],"names":[],"mappings":"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"}