UNPKG

unocss-preset-weapp

Version:

the unocss preset for wechat miniprogram (uniapp, taro)

194 lines (184 loc) 7.02 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const core = require('@unocss/core'); const extractorArbitraryVariants = require('@unocss/extractor-arbitrary-variants'); const utils = require('unplugin-transform-class/utils'); const utilities = require('./shared/unocss-preset-weapp.DNWyIsxg.cjs'); const _default$1 = require('./shared/unocss-preset-weapp.BMQ0E5PQ.cjs'); const _default$2 = require('./shared/unocss-preset-weapp.tWhipb7_.cjs'); const _default = require('./shared/unocss-preset-weapp.DlCUCesg.cjs'); const colors = require('./colors.cjs'); require('@unocss/rule-utils'); require('./shared/unocss-preset-weapp.Br6uyT3T.cjs'); require('./shared/unocss-preset-weapp.BIumAaEJ.cjs'); const wxPrefix = ["page,root-portal-content,::before,::after"]; const taroPrefix = ["*,::before,::after"]; const uniappPrefix = ["uni-page-body,::before,::after"]; function preflights(options) { if (options.preflight) { return [ { layer: "preflights", getCSS({ theme, generator }) { if (theme.preflightBase) { let entries = Object.entries(theme.preflightBase); if (options.preflight === "on-demand") { const keys = new Set(Array.from(generator.activatedRules).map((r) => r[2]?.custom?.preflightKeys).filter(Boolean).flat()); entries = entries.filter(([k]) => keys.has(k)); } if (entries.length > 0) { let css = core.entriesToCss(entries); if (options.variablePrefix !== "un-") { css = css.replace(/--un-/g, `--${options.variablePrefix}`); } let preflightRoot = theme.preflightRoot; if (!preflightRoot) { if (options.isH5) preflightRoot = options.platform === "uniapp" ? uniappPrefix : taroPrefix; else preflightRoot = wxPrefix; } const roots = core.toArray(preflightRoot); return roots.map((root) => `${root}{${css}}`).join(""); } } } } ]; } } function taroPxToRpx(size, designWidth, deviceRatio) { if (!(designWidth in deviceRatio)) throw new Error(`deviceRatio \u914D\u7F6E\u4E2D\u4E0D\u5B58\u5728 ${designWidth} \u7684\u8BBE\u7F6E\uFF01`); return `${Number.parseInt(size, 10) * deviceRatio[designWidth]}rpx`; } function taroRpxToPx(size, designWidth, deviceRatio) { if (!(designWidth in deviceRatio)) throw new Error(`deviceRatio \u914D\u7F6E\u4E2D\u4E0D\u5B58\u5728 ${designWidth} \u7684\u8BBE\u7F6E\uFF01`); return Number.parseInt(size, 10) / deviceRatio[designWidth]; } function taroPxToRemW4(size, designWidth) { return `${Math.ceil(Number.parseInt(size, 10) / 40 * 640 / designWidth * 1e5) / 1e5}rem`; } function taroPxToRemW5(size, designWidth, deviceRatio) { const baseFontSize = 20; const unitPrecision = 5; const rootValue = baseFontSize / deviceRatio[designWidth] * 2; const pixels = Number.parseFloat(size); return `${toFixed(pixels / rootValue, unitPrecision)}rem`; } function toFixed(number, precision) { const multiplier = 10 ** (precision + 1); const wholeNumber = Math.floor(number * multiplier); return Math.round(wholeNumber / 10) * 10 / multiplier; } function taroH5CssRemTransform(css, taroWebpack, designWidth, deviceRatio) { cssRpxTransform(css, rpxOrPxRE, (value) => { const size = value.endsWith("rpx") ? taroRpxToPx(value.slice(0, -3), designWidth, deviceRatio) : value.slice(0, -2); return taroWebpack === "webpack4" ? taroPxToRemW4(size, designWidth) : taroPxToRemW5(size, designWidth, deviceRatio); }); } function taroCssPxTransform(css, designWidth, deviceRatio) { cssRpxTransform(css, pxRE, (value) => { return taroPxToRpx(value.slice(0, -2), designWidth, deviceRatio); }); } function uniAppRpxTransform(size) { return `%?${size}?%`; } function uniAppVue2CssRpxTransform(css) { cssRpxTransform(css, rpxRE, (value) => { return uniAppRpxTransform(value.slice(0, -3)); }); } const pxRE = /-?[.\d]+px/g; const rpxRE = /-?[.\d]+rpx/g; const rpxOrPxRE = /-?[.\d]+r?px/g; function cssRpxTransform(css, regex, transform) { css.entries.forEach((i) => { let value = i[1]; if (value && typeof value === "string") { const matchs = Array.from(value.matchAll(regex)); if (matchs.length !== 0) { matchs.forEach((m) => { const size = m[0]; value = value.replace(size, transform(size)); }); i[1] = value; } } }); } const shorthands = { position: [ "relative", "absolute", "fixed", "sticky", "static" ], globalKeyword: utilities.globalKeywords }; const presetWeapp = core.definePreset((options = {}) => { options.dark = options.dark ?? "class"; options.attributifyPseudo = options.attributifyPseudo ?? false; options.preflight = options.preflight ?? true; options.variablePrefix = options.variablePrefix ?? "un-"; options.transform = options.transform ?? true; options.isH5 = options.isH5 ?? false; options.designWidth = options.designWidth ?? 750; options.deviceRatio = options.deviceRatio ?? { 640: 2.34 / 2, 750: 1, 828: 1.81 / 2 }; options.platform = options.platform ?? "uniapp"; options.taroWebpack = options.taroWebpack ?? "webpack4"; options.transformRules = options.transformRules ?? utils.defaultRules; options.whRpx = options.whRpx ?? true; return { name: "unocss-preset-weapp", theme: { ..._default.theme, transformRules: options.transformRules, whRpx: options.whRpx }, rules: _default$2.rules, variants: _default$1.variants(options), options, postprocess(css) { if (options.transform) css.selector = utils.cacheTransformEscapESelector(css.selector, options.transformRules); if (options.variablePrefix !== "un-") VarPrefixPostprocessor(options.variablePrefix, css); if (options.platform === "taro") { const { taroWebpack, designWidth, deviceRatio } = options; if (options.isH5) { taroH5CssRemTransform(css, taroWebpack, designWidth, deviceRatio); } else { taroCssPxTransform(css, designWidth, deviceRatio); } } if (options.platform === "uniapp" && options.isH5) uniAppVue2CssRpxTransform(css); }, preflights: preflights(options), prefix: options.prefix, extractorDefault: options.arbitraryVariants === false ? void 0 : extractorArbitraryVariants.extractorArbitraryVariants(), autocomplete: { shorthands } }; }); function VarPrefixPostprocessor(prefix, obj) { obj.entries.forEach((i) => { i[0] = i[0].replace(/^--un-/, `--${prefix}`); if (typeof i[1] === "string") i[1] = i[1].replace(/var\(--un-/g, `var(--${prefix}`); }); } exports.parseColor = utilities.parseColor; exports.theme = _default.theme; exports.colors = colors.colors; exports.default = presetWeapp; exports.presetWeapp = presetWeapp;