summaryrefslogtreecommitdiff
path: root/node_modules/tailwindcss/src/util/prefixSelector.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/tailwindcss/src/util/prefixSelector.js
Docs
Diffstat (limited to 'node_modules/tailwindcss/src/util/prefixSelector.js')
-rw-r--r--node_modules/tailwindcss/src/util/prefixSelector.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/node_modules/tailwindcss/src/util/prefixSelector.js b/node_modules/tailwindcss/src/util/prefixSelector.js
new file mode 100644
index 0000000..93cbeb9
--- /dev/null
+++ b/node_modules/tailwindcss/src/util/prefixSelector.js
@@ -0,0 +1,33 @@
+import parser from 'postcss-selector-parser'
+
+/**
+ * @template {string | import('postcss-selector-parser').Root} T
+ *
+ * Prefix all classes in the selector with the given prefix
+ *
+ * It can take either a string or a selector AST and will return the same type
+ *
+ * @param {string} prefix
+ * @param {T} selector
+ * @param {boolean} prependNegative
+ * @returns {T}
+ */
+export default function (prefix, selector, prependNegative = false) {
+ if (prefix === '') {
+ return selector
+ }
+
+ /** @type {import('postcss-selector-parser').Root} */
+ let ast = typeof selector === 'string' ? parser().astSync(selector) : selector
+
+ ast.walkClasses((classSelector) => {
+ let baseClass = classSelector.value
+ let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-')
+
+ classSelector.value = shouldPlaceNegativeBeforePrefix
+ ? `-${prefix}${baseClass.slice(1)}`
+ : `${prefix}${baseClass}`
+ })
+
+ return typeof selector === 'string' ? ast.toString() : ast
+}