Updated node modules
This commit is contained in:
22
node_modules/tailwindcss/src/value-parser/LICENSE
generated
vendored
Normal file
22
node_modules/tailwindcss/src/value-parser/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
Copyright (c) Bogdan Chadkin <trysound@yandex.ru>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
3
node_modules/tailwindcss/src/value-parser/README.md
generated
vendored
Normal file
3
node_modules/tailwindcss/src/value-parser/README.md
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# postcss-value-parser (forked + inlined)
|
||||
|
||||
This is a customized version of of [PostCSS Value Parser](https://github.com/TrySound/postcss-value-parser) to fix some bugs around parsing CSS functions.
|
177
node_modules/tailwindcss/src/value-parser/index.d.ts
generated
vendored
Normal file
177
node_modules/tailwindcss/src/value-parser/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,177 @@
|
||||
declare namespace postcssValueParser {
|
||||
interface BaseNode {
|
||||
/**
|
||||
* The offset, inclusive, inside the CSS value at which the node starts.
|
||||
*/
|
||||
sourceIndex: number
|
||||
|
||||
/**
|
||||
* The offset, exclusive, inside the CSS value at which the node ends.
|
||||
*/
|
||||
sourceEndIndex: number
|
||||
|
||||
/**
|
||||
* The node's characteristic value
|
||||
*/
|
||||
value: string
|
||||
}
|
||||
|
||||
interface ClosableNode {
|
||||
/**
|
||||
* Whether the parsed CSS value ended before the node was properly closed
|
||||
*/
|
||||
unclosed?: true
|
||||
}
|
||||
|
||||
interface AdjacentAwareNode {
|
||||
/**
|
||||
* The token at the start of the node
|
||||
*/
|
||||
before: string
|
||||
|
||||
/**
|
||||
* The token at the end of the node
|
||||
*/
|
||||
after: string
|
||||
}
|
||||
|
||||
interface CommentNode extends BaseNode, ClosableNode {
|
||||
type: 'comment'
|
||||
}
|
||||
|
||||
interface DivNode extends BaseNode, AdjacentAwareNode {
|
||||
type: 'div'
|
||||
}
|
||||
|
||||
interface FunctionNode extends BaseNode, ClosableNode, AdjacentAwareNode {
|
||||
type: 'function'
|
||||
|
||||
/**
|
||||
* Nodes inside the function
|
||||
*/
|
||||
nodes: Node[]
|
||||
}
|
||||
|
||||
interface SpaceNode extends BaseNode {
|
||||
type: 'space'
|
||||
}
|
||||
|
||||
interface StringNode extends BaseNode, ClosableNode {
|
||||
type: 'string'
|
||||
|
||||
/**
|
||||
* The quote type delimiting the string
|
||||
*/
|
||||
quote: '"' | "'"
|
||||
}
|
||||
|
||||
interface UnicodeRangeNode extends BaseNode {
|
||||
type: 'unicode-range'
|
||||
}
|
||||
|
||||
interface WordNode extends BaseNode {
|
||||
type: 'word'
|
||||
}
|
||||
|
||||
/**
|
||||
* Any node parsed from a CSS value
|
||||
*/
|
||||
type Node =
|
||||
| CommentNode
|
||||
| DivNode
|
||||
| FunctionNode
|
||||
| SpaceNode
|
||||
| StringNode
|
||||
| UnicodeRangeNode
|
||||
| WordNode
|
||||
|
||||
interface CustomStringifierCallback {
|
||||
/**
|
||||
* @param node The node to stringify
|
||||
* @returns The serialized CSS representation of the node
|
||||
*/
|
||||
(nodes: Node): string | undefined
|
||||
}
|
||||
|
||||
interface WalkCallback {
|
||||
/**
|
||||
* @param node The currently visited node
|
||||
* @param index The index of the node in the series of parsed nodes
|
||||
* @param nodes The series of parsed nodes
|
||||
* @returns Returning `false` will prevent traversal of descendant nodes (only applies if `bubble` was set to `true` in the `walk()` call)
|
||||
*/
|
||||
(node: Node, index: number, nodes: Node[]): void | boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* A CSS dimension, decomposed into its numeric and unit parts
|
||||
*/
|
||||
interface Dimension {
|
||||
number: string
|
||||
unit: string
|
||||
}
|
||||
|
||||
/**
|
||||
* A wrapper around a parsed CSS value that allows for inspecting and walking nodes
|
||||
*/
|
||||
interface ParsedValue {
|
||||
/**
|
||||
* The series of parsed nodes
|
||||
*/
|
||||
nodes: Node[]
|
||||
|
||||
/**
|
||||
* Walk all parsed nodes, applying a callback
|
||||
*
|
||||
* @param callback A visitor callback that will be executed for each node
|
||||
* @param bubble When set to `true`, walking will be done inside-out instead of outside-in
|
||||
*/
|
||||
walk(callback: WalkCallback, bubble?: boolean): this
|
||||
}
|
||||
|
||||
interface ValueParser {
|
||||
/**
|
||||
* Decompose a CSS dimension into its numeric and unit part
|
||||
*
|
||||
* @param value The dimension to decompose
|
||||
* @returns An object representing `number` and `unit` part of the dimension or `false` if the decomposing fails
|
||||
*/
|
||||
unit(value: string): Dimension | false
|
||||
|
||||
/**
|
||||
* Serialize a series of nodes into a CSS value
|
||||
*
|
||||
* @param nodes The nodes to stringify
|
||||
* @param custom A custom stringifier callback
|
||||
* @returns The generated CSS value
|
||||
*/
|
||||
stringify(nodes: Node | Node[], custom?: CustomStringifierCallback): string
|
||||
|
||||
/**
|
||||
* Walk a series of nodes, applying a callback
|
||||
*
|
||||
* @param nodes The nodes to walk
|
||||
* @param callback A visitor callback that will be executed for each node
|
||||
* @param bubble When set to `true`, walking will be done inside-out instead of outside-in
|
||||
*/
|
||||
walk(nodes: Node[], callback: WalkCallback, bubble?: boolean): void
|
||||
|
||||
/**
|
||||
* Parse a CSS value into a series of nodes to operate on
|
||||
*
|
||||
* @param value The value to parse
|
||||
*/
|
||||
new (value: string): ParsedValue
|
||||
|
||||
/**
|
||||
* Parse a CSS value into a series of nodes to operate on
|
||||
*
|
||||
* @param value The value to parse
|
||||
*/
|
||||
(value: string): ParsedValue
|
||||
}
|
||||
}
|
||||
|
||||
declare const postcssValueParser: postcssValueParser.ValueParser
|
||||
|
||||
export = postcssValueParser
|
28
node_modules/tailwindcss/src/value-parser/index.js
generated
vendored
Normal file
28
node_modules/tailwindcss/src/value-parser/index.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
var parse = require('./parse')
|
||||
var walk = require('./walk')
|
||||
var stringify = require('./stringify')
|
||||
|
||||
function ValueParser(value) {
|
||||
if (this instanceof ValueParser) {
|
||||
this.nodes = parse(value)
|
||||
return this
|
||||
}
|
||||
return new ValueParser(value)
|
||||
}
|
||||
|
||||
ValueParser.prototype.toString = function () {
|
||||
return Array.isArray(this.nodes) ? stringify(this.nodes) : ''
|
||||
}
|
||||
|
||||
ValueParser.prototype.walk = function (cb, bubble) {
|
||||
walk(this.nodes, cb, bubble)
|
||||
return this
|
||||
}
|
||||
|
||||
ValueParser.unit = require('./unit')
|
||||
|
||||
ValueParser.walk = walk
|
||||
|
||||
ValueParser.stringify = stringify
|
||||
|
||||
module.exports = ValueParser
|
303
node_modules/tailwindcss/src/value-parser/parse.js
generated
vendored
Normal file
303
node_modules/tailwindcss/src/value-parser/parse.js
generated
vendored
Normal file
@@ -0,0 +1,303 @@
|
||||
var openParentheses = '('.charCodeAt(0)
|
||||
var closeParentheses = ')'.charCodeAt(0)
|
||||
var singleQuote = "'".charCodeAt(0)
|
||||
var doubleQuote = '"'.charCodeAt(0)
|
||||
var backslash = '\\'.charCodeAt(0)
|
||||
var slash = '/'.charCodeAt(0)
|
||||
var comma = ','.charCodeAt(0)
|
||||
var colon = ':'.charCodeAt(0)
|
||||
var star = '*'.charCodeAt(0)
|
||||
var uLower = 'u'.charCodeAt(0)
|
||||
var uUpper = 'U'.charCodeAt(0)
|
||||
var plus = '+'.charCodeAt(0)
|
||||
var isUnicodeRange = /^[a-f0-9?-]+$/i
|
||||
|
||||
module.exports = function (input) {
|
||||
var tokens = []
|
||||
var value = input
|
||||
|
||||
var next, quote, prev, token, escape, escapePos, whitespacePos, parenthesesOpenPos
|
||||
var pos = 0
|
||||
var code = value.charCodeAt(pos)
|
||||
var max = value.length
|
||||
var stack = [{ nodes: tokens }]
|
||||
var balanced = 0
|
||||
var parent
|
||||
|
||||
var name = ''
|
||||
var before = ''
|
||||
var after = ''
|
||||
|
||||
while (pos < max) {
|
||||
// Whitespaces
|
||||
if (code <= 32) {
|
||||
next = pos
|
||||
do {
|
||||
next += 1
|
||||
code = value.charCodeAt(next)
|
||||
} while (code <= 32)
|
||||
token = value.slice(pos, next)
|
||||
|
||||
prev = tokens[tokens.length - 1]
|
||||
if (code === closeParentheses && balanced) {
|
||||
after = token
|
||||
} else if (prev && prev.type === 'div') {
|
||||
prev.after = token
|
||||
prev.sourceEndIndex += token.length
|
||||
} else if (
|
||||
code === comma ||
|
||||
code === colon ||
|
||||
(code === slash &&
|
||||
value.charCodeAt(next + 1) !== star &&
|
||||
(!parent || (parent && parent.type === 'function' && false)))
|
||||
) {
|
||||
before = token
|
||||
} else {
|
||||
tokens.push({
|
||||
type: 'space',
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token,
|
||||
})
|
||||
}
|
||||
|
||||
pos = next
|
||||
|
||||
// Quotes
|
||||
} else if (code === singleQuote || code === doubleQuote) {
|
||||
next = pos
|
||||
quote = code === singleQuote ? "'" : '"'
|
||||
token = {
|
||||
type: 'string',
|
||||
sourceIndex: pos,
|
||||
quote: quote,
|
||||
}
|
||||
do {
|
||||
escape = false
|
||||
next = value.indexOf(quote, next + 1)
|
||||
if (~next) {
|
||||
escapePos = next
|
||||
while (value.charCodeAt(escapePos - 1) === backslash) {
|
||||
escapePos -= 1
|
||||
escape = !escape
|
||||
}
|
||||
} else {
|
||||
value += quote
|
||||
next = value.length - 1
|
||||
token.unclosed = true
|
||||
}
|
||||
} while (escape)
|
||||
token.value = value.slice(pos + 1, next)
|
||||
token.sourceEndIndex = token.unclosed ? next : next + 1
|
||||
tokens.push(token)
|
||||
pos = next + 1
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
// Comments
|
||||
} else if (code === slash && value.charCodeAt(pos + 1) === star) {
|
||||
next = value.indexOf('*/', pos)
|
||||
|
||||
token = {
|
||||
type: 'comment',
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next + 2,
|
||||
}
|
||||
|
||||
if (next === -1) {
|
||||
token.unclosed = true
|
||||
next = value.length
|
||||
token.sourceEndIndex = next
|
||||
}
|
||||
|
||||
token.value = value.slice(pos + 2, next)
|
||||
tokens.push(token)
|
||||
|
||||
pos = next + 2
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
// Operation within calc
|
||||
} else if ((code === slash || code === star) && parent && parent.type === 'function' && true) {
|
||||
token = value[pos]
|
||||
tokens.push({
|
||||
type: 'word',
|
||||
sourceIndex: pos - before.length,
|
||||
sourceEndIndex: pos + token.length,
|
||||
value: token,
|
||||
})
|
||||
pos += 1
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
// Dividers
|
||||
} else if (code === slash || code === comma || code === colon) {
|
||||
token = value[pos]
|
||||
|
||||
tokens.push({
|
||||
type: 'div',
|
||||
sourceIndex: pos - before.length,
|
||||
sourceEndIndex: pos + token.length,
|
||||
value: token,
|
||||
before: before,
|
||||
after: '',
|
||||
})
|
||||
before = ''
|
||||
|
||||
pos += 1
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
// Open parentheses
|
||||
} else if (openParentheses === code) {
|
||||
// Whitespaces after open parentheses
|
||||
next = pos
|
||||
do {
|
||||
next += 1
|
||||
code = value.charCodeAt(next)
|
||||
} while (code <= 32)
|
||||
parenthesesOpenPos = pos
|
||||
token = {
|
||||
type: 'function',
|
||||
sourceIndex: pos - name.length,
|
||||
value: name,
|
||||
before: value.slice(parenthesesOpenPos + 1, next),
|
||||
}
|
||||
pos = next
|
||||
|
||||
if (name === 'url' && code !== singleQuote && code !== doubleQuote) {
|
||||
next -= 1
|
||||
do {
|
||||
escape = false
|
||||
next = value.indexOf(')', next + 1)
|
||||
if (~next) {
|
||||
escapePos = next
|
||||
while (value.charCodeAt(escapePos - 1) === backslash) {
|
||||
escapePos -= 1
|
||||
escape = !escape
|
||||
}
|
||||
} else {
|
||||
value += ')'
|
||||
next = value.length - 1
|
||||
token.unclosed = true
|
||||
}
|
||||
} while (escape)
|
||||
// Whitespaces before closed
|
||||
whitespacePos = next
|
||||
do {
|
||||
whitespacePos -= 1
|
||||
code = value.charCodeAt(whitespacePos)
|
||||
} while (code <= 32)
|
||||
if (parenthesesOpenPos < whitespacePos) {
|
||||
if (pos !== whitespacePos + 1) {
|
||||
token.nodes = [
|
||||
{
|
||||
type: 'word',
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: whitespacePos + 1,
|
||||
value: value.slice(pos, whitespacePos + 1),
|
||||
},
|
||||
]
|
||||
} else {
|
||||
token.nodes = []
|
||||
}
|
||||
if (token.unclosed && whitespacePos + 1 !== next) {
|
||||
token.after = ''
|
||||
token.nodes.push({
|
||||
type: 'space',
|
||||
sourceIndex: whitespacePos + 1,
|
||||
sourceEndIndex: next,
|
||||
value: value.slice(whitespacePos + 1, next),
|
||||
})
|
||||
} else {
|
||||
token.after = value.slice(whitespacePos + 1, next)
|
||||
token.sourceEndIndex = next
|
||||
}
|
||||
} else {
|
||||
token.after = ''
|
||||
token.nodes = []
|
||||
}
|
||||
pos = next + 1
|
||||
token.sourceEndIndex = token.unclosed ? next : pos
|
||||
code = value.charCodeAt(pos)
|
||||
tokens.push(token)
|
||||
} else {
|
||||
balanced += 1
|
||||
token.after = ''
|
||||
token.sourceEndIndex = pos + 1
|
||||
tokens.push(token)
|
||||
stack.push(token)
|
||||
tokens = token.nodes = []
|
||||
parent = token
|
||||
}
|
||||
name = ''
|
||||
|
||||
// Close parentheses
|
||||
} else if (closeParentheses === code && balanced) {
|
||||
pos += 1
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
parent.after = after
|
||||
parent.sourceEndIndex += after.length
|
||||
after = ''
|
||||
balanced -= 1
|
||||
stack[stack.length - 1].sourceEndIndex = pos
|
||||
stack.pop()
|
||||
parent = stack[balanced]
|
||||
tokens = parent.nodes
|
||||
|
||||
// Words
|
||||
} else {
|
||||
next = pos
|
||||
do {
|
||||
if (code === backslash) {
|
||||
next += 1
|
||||
}
|
||||
next += 1
|
||||
code = value.charCodeAt(next)
|
||||
} while (
|
||||
next < max &&
|
||||
!(
|
||||
code <= 32 ||
|
||||
code === singleQuote ||
|
||||
code === doubleQuote ||
|
||||
code === comma ||
|
||||
code === colon ||
|
||||
code === slash ||
|
||||
code === openParentheses ||
|
||||
(code === star && parent && parent.type === 'function' && true) ||
|
||||
(code === slash && parent.type === 'function' && true) ||
|
||||
(code === closeParentheses && balanced)
|
||||
)
|
||||
)
|
||||
token = value.slice(pos, next)
|
||||
|
||||
if (openParentheses === code) {
|
||||
name = token
|
||||
} else if (
|
||||
(uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
|
||||
plus === token.charCodeAt(1) &&
|
||||
isUnicodeRange.test(token.slice(2))
|
||||
) {
|
||||
tokens.push({
|
||||
type: 'unicode-range',
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token,
|
||||
})
|
||||
} else {
|
||||
tokens.push({
|
||||
type: 'word',
|
||||
sourceIndex: pos,
|
||||
sourceEndIndex: next,
|
||||
value: token,
|
||||
})
|
||||
}
|
||||
|
||||
pos = next
|
||||
}
|
||||
}
|
||||
|
||||
for (pos = stack.length - 1; pos; pos -= 1) {
|
||||
stack[pos].unclosed = true
|
||||
stack[pos].sourceEndIndex = value.length
|
||||
}
|
||||
|
||||
return stack[0].nodes
|
||||
}
|
41
node_modules/tailwindcss/src/value-parser/stringify.js
generated
vendored
Normal file
41
node_modules/tailwindcss/src/value-parser/stringify.js
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
function stringifyNode(node, custom) {
|
||||
var type = node.type
|
||||
var value = node.value
|
||||
var buf
|
||||
var customResult
|
||||
|
||||
if (custom && (customResult = custom(node)) !== undefined) {
|
||||
return customResult
|
||||
} else if (type === 'word' || type === 'space') {
|
||||
return value
|
||||
} else if (type === 'string') {
|
||||
buf = node.quote || ''
|
||||
return buf + value + (node.unclosed ? '' : buf)
|
||||
} else if (type === 'comment') {
|
||||
return '/*' + value + (node.unclosed ? '' : '*/')
|
||||
} else if (type === 'div') {
|
||||
return (node.before || '') + value + (node.after || '')
|
||||
} else if (Array.isArray(node.nodes)) {
|
||||
buf = stringify(node.nodes, custom)
|
||||
if (type !== 'function') {
|
||||
return buf
|
||||
}
|
||||
return value + '(' + (node.before || '') + buf + (node.after || '') + (node.unclosed ? '' : ')')
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
function stringify(nodes, custom) {
|
||||
var result, i
|
||||
|
||||
if (Array.isArray(nodes)) {
|
||||
result = ''
|
||||
for (i = nodes.length - 1; ~i; i -= 1) {
|
||||
result = stringifyNode(nodes[i], custom) + result
|
||||
}
|
||||
return result
|
||||
}
|
||||
return stringifyNode(nodes, custom)
|
||||
}
|
||||
|
||||
module.exports = stringify
|
118
node_modules/tailwindcss/src/value-parser/unit.js
generated
vendored
Normal file
118
node_modules/tailwindcss/src/value-parser/unit.js
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
var minus = '-'.charCodeAt(0)
|
||||
var plus = '+'.charCodeAt(0)
|
||||
var dot = '.'.charCodeAt(0)
|
||||
var exp = 'e'.charCodeAt(0)
|
||||
var EXP = 'E'.charCodeAt(0)
|
||||
|
||||
// Check if three code points would start a number
|
||||
// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
|
||||
function likeNumber(value) {
|
||||
var code = value.charCodeAt(0)
|
||||
var nextCode
|
||||
|
||||
if (code === plus || code === minus) {
|
||||
nextCode = value.charCodeAt(1)
|
||||
|
||||
if (nextCode >= 48 && nextCode <= 57) {
|
||||
return true
|
||||
}
|
||||
|
||||
var nextNextCode = value.charCodeAt(2)
|
||||
|
||||
if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
if (code === dot) {
|
||||
nextCode = value.charCodeAt(1)
|
||||
|
||||
if (nextCode >= 48 && nextCode <= 57) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
if (code >= 48 && code <= 57) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Consume a number
|
||||
// https://www.w3.org/TR/css-syntax-3/#consume-number
|
||||
module.exports = function (value) {
|
||||
var pos = 0
|
||||
var length = value.length
|
||||
var code
|
||||
var nextCode
|
||||
var nextNextCode
|
||||
|
||||
if (length === 0 || !likeNumber(value)) {
|
||||
return false
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
if (code === plus || code === minus) {
|
||||
pos++
|
||||
}
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break
|
||||
}
|
||||
|
||||
pos += 1
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos)
|
||||
nextCode = value.charCodeAt(pos + 1)
|
||||
|
||||
if (code === dot && nextCode >= 48 && nextCode <= 57) {
|
||||
pos += 2
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break
|
||||
}
|
||||
|
||||
pos += 1
|
||||
}
|
||||
}
|
||||
|
||||
code = value.charCodeAt(pos)
|
||||
nextCode = value.charCodeAt(pos + 1)
|
||||
nextNextCode = value.charCodeAt(pos + 2)
|
||||
|
||||
if (
|
||||
(code === exp || code === EXP) &&
|
||||
((nextCode >= 48 && nextCode <= 57) ||
|
||||
((nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57))
|
||||
) {
|
||||
pos += nextCode === plus || nextCode === minus ? 3 : 2
|
||||
|
||||
while (pos < length) {
|
||||
code = value.charCodeAt(pos)
|
||||
|
||||
if (code < 48 || code > 57) {
|
||||
break
|
||||
}
|
||||
|
||||
pos += 1
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
number: value.slice(0, pos),
|
||||
unit: value.slice(pos),
|
||||
}
|
||||
}
|
18
node_modules/tailwindcss/src/value-parser/walk.js
generated
vendored
Normal file
18
node_modules/tailwindcss/src/value-parser/walk.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
module.exports = function walk(nodes, cb, bubble) {
|
||||
var i, max, node, result
|
||||
|
||||
for (i = 0, max = nodes.length; i < max; i += 1) {
|
||||
node = nodes[i]
|
||||
if (!bubble) {
|
||||
result = cb(node, i, nodes)
|
||||
}
|
||||
|
||||
if (result !== false && node.type === 'function' && Array.isArray(node.nodes)) {
|
||||
walk(node.nodes, cb, bubble)
|
||||
}
|
||||
|
||||
if (bubble) {
|
||||
cb(node, i, nodes)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user