import { presetMini } from '@unocss/preset-mini'; import { defineConfig } from '@unocss/vite'; function pxValueToRem(size: number): string { return `calc(${size}rem / var(--kolibri-root-font-size, 16))`; } function convertRem(value: number): string { return pxValueToRem(value * 16); } function convertDynamicClassValueToRem(value: string) { return pxValueToRem((Number.parseFloat(value) * 16) / 4); } export default defineConfig({ rules: [ [ /^p-(\d+)$/, ([, d]) => ({ padding: convertDynamicClassValueToRem(d), }), ], [ /^px-(\d+)$/, ([, d]) => ({ 'padding-left': convertDynamicClassValueToRem(d), 'padding-right': convertDynamicClassValueToRem(d), }), ], [ /^py-(\d+)$/, ([, d]) => ({ 'padding-top': convertDynamicClassValueToRem(d), 'padding-bottom': convertDynamicClassValueToRem(d), }), ], [ /^ps-(\d+)$/, ([, d]) => ({ 'padding-inline-start': convertDynamicClassValueToRem(d), }), ], [ /^pe-(\d+)$/, ([, d]) => ({ 'padding-inline-end': convertDynamicClassValueToRem(d), }), ], [ /^pt-(\d+)$/, ([, d]) => ({ 'padding-top': convertDynamicClassValueToRem(d), }), ], [ /^pl-(\d+)$/, ([, d]) => ({ 'padding-left': convertDynamicClassValueToRem(d), }), ], [ /^pr-(\d+)$/, ([, d]) => ({ 'padding-right': convertDynamicClassValueToRem(d), }), ], [ /^pb-(\d+)$/, ([, d]) => ({ 'padding-bottom': convertDynamicClassValueToRem(d), }), ], [ /^p-t-(\d+)$/, ([, d]) => ({ 'padding-top': convertDynamicClassValueToRem(d), }), ], [ /^p-l-(\d+)$/, ([, d]) => ({ 'padding-left': convertDynamicClassValueToRem(d), }), ], [ /^p-r-(\d+)$/, ([, d]) => ({ 'padding-right': convertDynamicClassValueToRem(d), }), ], [ /^p-b-(\d+)$/, ([, d]) => ({ 'padding-bottom': convertDynamicClassValueToRem(d), }), ], [ /^m-(\d+)$/, ([, d]) => ({ margin: convertDynamicClassValueToRem(d), }), ], [ /^mx-(\d+)$/, ([, d]) => ({ 'margin-left': convertDynamicClassValueToRem(d), 'margin-right': convertDynamicClassValueToRem(d), }), ], [ /^my-(\d+)$/, ([, d]) => ({ 'margin-top': convertDynamicClassValueToRem(d), 'margin-bottom': convertDynamicClassValueToRem(d), }), ], [ /^ms-(\d+)$/, ([, d]) => ({ 'margin-inline-start': convertDynamicClassValueToRem(d), }), ], [ /^me-(\d+)$/, ([, d]) => ({ 'margin-inline-end': convertDynamicClassValueToRem(d), }), ], [ /^mt$/, () => ({ 'margin-top': pxValueToRem(16), }), ], [ /^ml$/, () => ({ 'margin-left': pxValueToRem(16), }), ], [ /^mr$/, () => ({ 'margin-right': pxValueToRem(16), }), ], [ /^mb$/, () => ({ 'margin-bottom': pxValueToRem(16), }), ], [ /^mt-(\d+)$/, ([, d]) => ({ 'margin-top': convertDynamicClassValueToRem(d), }), ], [ /^ml-(\d+)$/, ([, d]) => ({ 'margin-left': convertDynamicClassValueToRem(d), }), ], [ /^mr-(\d+)$/, ([, d]) => ({ 'margin-right': convertDynamicClassValueToRem(d), }), ], [ /^mb-(\d+)$/, ([, d]) => ({ 'margin-bottom': convertDynamicClassValueToRem(d), }), ], [ /^m-t-(\d+)$/, ([, d]) => ({ 'margin-top': convertDynamicClassValueToRem(d), }), ], [ /^m-l-(\d+)$/, ([, d]) => ({ 'margin-left': convertDynamicClassValueToRem(d), }), ], [ /^m-r-(\d+)$/, ([, d]) => ({ 'margin-right': convertDynamicClassValueToRem(d), }), ], [ /^m-b-(\d+)$/, ([, d]) => ({ 'margin-bottom': convertDynamicClassValueToRem(d), }), ], [ /^mb-sm$/, () => ({ 'margin-bottom': pxValueToRem(14), }), ], [/^gap-(\d+)$/, ([, d]) => ({ gap: convertDynamicClassValueToRem(d) })], [/^gap-x-(\d+)$/, ([, d]) => ({ 'column-gap': convertDynamicClassValueToRem(d) })], [/^gap-y-(\d+)$/, ([, d]) => ({ 'row-gap': convertDynamicClassValueToRem(d) })], [ /^w-(\d+)rem$/, ([, d]) => ({ width: pxValueToRem(Number.parseInt(d) * 16), }), ], [ /^w-sm$/, () => ({ width: pxValueToRem(24 * 16), // 24rem }), ], ], extendTheme: (theme: any) => { return { ...theme, fontSize: { xs: [convertRem(0.75), '1'], sm: [convertRem(0.875), '1.25'], base: [convertRem(1), '1.5'], lg: [convertRem(1.125), '1.75'], xl: [convertRem(1.25), '1.75'], '2xl': [convertRem(1.5), '2'], '3xl': [convertRem(1.875), '2.25'], '4xl': [convertRem(2.25), '2.5'], '5xl': [convertRem(3), '1'], '6xl': [convertRem(3.75), '1'], '7xl': [convertRem(4.5), '1'], '8xl': [convertRem(6), '1'], '9xl': [convertRem(8), '1'], 'kol-test': ['625%', '1'], }, borderRadius: { DEFAULT: convertRem(0.25), none: '0', sm: convertRem(0.125), md: convertRem(0.375), lg: convertRem(0.5), xl: convertRem(0.75), '2xl': convertRem(1), '3xl': convertRem(1.5), full: '9999px', }, containers: { xs: `(min-width: ${convertRem(20)})`, sm: `(min-width: ${convertRem(24)})`, md: `(min-width: ${convertRem(28)})`, lg: `(min-width: ${convertRem(32)})`, xl: `(min-width: ${convertRem(36)})`, '2xl': `(min-width: ${convertRem(42)})`, '3xl': `(min-width: ${convertRem(48)})`, '4xl': `(min-width: ${convertRem(56)})`, '5xl': `(min-width: ${convertRem(64)})`, '6xl': `(min-width: ${convertRem(72)})`, '7xl': `(min-width: ${convertRem(80)})`, prose: '(min-width: 65ch)', }, spacing: { DEFAULT: convertRem(1), none: '0', xs: convertRem(0.75), sm: convertRem(0.875), lg: convertRem(1.125), xl: convertRem(1.25), '2xl': convertRem(1.5), '3xl': convertRem(1.875), '4xl': convertRem(2.25), '5xl': convertRem(3), '6xl': convertRem(3.75), '7xl': convertRem(4.5), '8xl': convertRem(6), '9xl': convertRem(8), }, textIndent: { DEFAULT: convertRem(1.5), xs: convertRem(0.5), sm: convertRem(1), md: convertRem(1.5), lg: convertRem(2), xl: convertRem(2.5), '2xl': convertRem(3), '3xl': convertRem(4), }, textStrokeWidth: { DEFAULT: convertRem(1.5), none: '0', sm: 'thin', md: 'medium', lg: 'thick', }, }; }, presets: [presetMini()], });