'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"use strict";
 
Object.defineProperty(exports, "__esModule", {
    value: true
});
 
var _browserslist = require("browserslist");
 
var _browserslist2 = _interopRequireDefault(_browserslist);
 
var _postcss = require("postcss");
 
var _postcss2 = _interopRequireDefault(_postcss);
 
var _postcssValueParser = require("postcss-value-parser");
 
var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
 
var _colours = require("./colours");
 
var _colours2 = _interopRequireDefault(_colours);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
function walk(parent, callback) {
    parent.nodes.forEach((node, index) => {
        const bubble = callback(node, index, parent);
 
        if (node.nodes && bubble !== false) {
            walk(node, callback);
        }
    });
}
 
/*
 * IE 8 & 9 do not properly handle clicks on elements
 * with a `transparent` `background-color`.
 *
 * https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
 */
 
function hasTransparentBug(browser) {
    return ~["ie 8", "ie 9"].indexOf(browser);
}
 
exports.default = _postcss2.default.plugin("postcss-colormin", () => {
    return (css, result) => {
        const resultOpts = result.opts || {};
        const browsers = (0, _browserslist2.default)(null, {
            stats: resultOpts.stats,
            path: __dirname,
            env: resultOpts.env
        });
        const isLegacy = browsers.some(hasTransparentBug);
        const colorminCache = {};
        const cache = {};
 
        css.walkDecls(decl => {
            if (/^(composes|font|filter|-webkit-tap-highlight-color)/i.test(decl.prop)) {
                return;
            }
 
            if (cache[decl.value]) {
                decl.value = cache[decl.value];
 
                return;
            }
 
            const parsed = (0, _postcssValueParser2.default)(decl.value);
 
            walk(parsed, (node, index, parent) => {
                if (node.type === "function") {
                    if (/^(rgb|hsl)a?$/i.test(node.value)) {
                        const { value } = node;
 
                        node.value = (0, _colours2.default)((0, _postcssValueParser.stringify)(node), isLegacy, colorminCache);
                        node.type = "word";
 
                        const next = parent.nodes[index + 1];
 
                        if (node.value !== value && next && (next.type === "word" || next.type === "function")) {
                            parent.nodes.splice(index + 1, 0, {
                                type: "space",
                                value: " "
                            });
                        }
                    } else if (node.value.toLowerCase() === "calc") {
                        return false;
                    }
                } else if (node.type === "word") {
                    node.value = (0, _colours2.default)(node.value, isLegacy, colorminCache);
                }
            });
 
            const optimizedValue = parsed.toString();
 
            decl.value = optimizedValue;
            cache[decl.value] = optimizedValue;
        });
    };
});