summaryrefslogtreecommitdiff
path: root/node_modules/autoprefixer/lib/hacks/mask-composite.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/autoprefixer/lib/hacks/mask-composite.js
Docs
Diffstat (limited to 'node_modules/autoprefixer/lib/hacks/mask-composite.js')
-rw-r--r--node_modules/autoprefixer/lib/hacks/mask-composite.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/node_modules/autoprefixer/lib/hacks/mask-composite.js b/node_modules/autoprefixer/lib/hacks/mask-composite.js
new file mode 100644
index 0000000..a30df13
--- /dev/null
+++ b/node_modules/autoprefixer/lib/hacks/mask-composite.js
@@ -0,0 +1,88 @@
+let Declaration = require('../declaration')
+
+class MaskComposite extends Declaration {
+ /**
+ * Prefix mask-composite for webkit
+ */
+ insert(decl, prefix, prefixes) {
+ let isCompositeProp = decl.prop === 'mask-composite'
+
+ let compositeValues
+
+ if (isCompositeProp) {
+ compositeValues = decl.value.split(',')
+ } else {
+ compositeValues = decl.value.match(MaskComposite.regexp) || []
+ }
+
+ compositeValues = compositeValues.map(el => el.trim()).filter(el => el)
+ let hasCompositeValues = compositeValues.length
+
+ let compositeDecl
+
+ if (hasCompositeValues) {
+ compositeDecl = this.clone(decl)
+ compositeDecl.value = compositeValues
+ .map(value => MaskComposite.oldValues[value] || value)
+ .join(', ')
+
+ if (compositeValues.includes('intersect')) {
+ compositeDecl.value += ', xor'
+ }
+
+ compositeDecl.prop = prefix + 'mask-composite'
+ }
+
+ if (isCompositeProp) {
+ if (!hasCompositeValues) {
+ return undefined
+ }
+
+ if (this.needCascade(decl)) {
+ compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix)
+ }
+
+ return decl.parent.insertBefore(decl, compositeDecl)
+ }
+
+ let cloned = this.clone(decl)
+ cloned.prop = prefix + cloned.prop
+
+ if (hasCompositeValues) {
+ cloned.value = cloned.value.replace(MaskComposite.regexp, '')
+ }
+
+ if (this.needCascade(decl)) {
+ cloned.raws.before = this.calcBefore(prefixes, decl, prefix)
+ }
+
+ decl.parent.insertBefore(decl, cloned)
+
+ if (!hasCompositeValues) {
+ return decl
+ }
+
+ if (this.needCascade(decl)) {
+ compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix)
+ }
+ return decl.parent.insertBefore(decl, compositeDecl)
+ }
+}
+
+MaskComposite.names = ['mask', 'mask-composite']
+
+MaskComposite.oldValues = {
+ add: 'source-over',
+ exclude: 'xor',
+ intersect: 'source-in',
+ subtract: 'source-out'
+}
+
+MaskComposite.regexp = new RegExp(
+ `\\s+(${Object.keys(MaskComposite.oldValues).join(
+ '|'
+ )})\\b(?!\\))\\s*(?=[,])`,
+ 'ig'
+)
+
+module.exports = MaskComposite