source: frontend/node_modules/tailwindcss/lib/util/pluginUtils.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 10.9 KB
RevLine 
[9af201e]1"use strict";
2Object.defineProperty(exports, "__esModule", {
3 value: true
4});
5function _export(target, all) {
6 for(var name in all)Object.defineProperty(target, name, {
7 enumerable: true,
8 get: all[name]
9 });
10}
11_export(exports, {
12 updateAllClasses: function() {
13 return updateAllClasses;
14 },
15 asValue: function() {
16 return asValue;
17 },
18 parseColorFormat: function() {
19 return parseColorFormat;
20 },
21 asColor: function() {
22 return asColor;
23 },
24 asLookupValue: function() {
25 return asLookupValue;
26 },
27 typeMap: function() {
28 return typeMap;
29 },
30 coerceValue: function() {
31 return coerceValue;
32 },
33 getMatchingTypes: function() {
34 return getMatchingTypes;
35 }
36});
37const _escapeCommas = /*#__PURE__*/ _interop_require_default(require("./escapeCommas"));
38const _withAlphaVariable = require("./withAlphaVariable");
39const _dataTypes = require("./dataTypes");
40const _negateValue = /*#__PURE__*/ _interop_require_default(require("./negateValue"));
41const _validateFormalSyntax = require("./validateFormalSyntax");
42const _featureFlags = require("../featureFlags.js");
43function _interop_require_default(obj) {
44 return obj && obj.__esModule ? obj : {
45 default: obj
46 };
47}
48function updateAllClasses(selectors, updateClass) {
49 selectors.walkClasses((sel)=>{
50 sel.value = updateClass(sel.value);
51 if (sel.raws && sel.raws.value) {
52 sel.raws.value = (0, _escapeCommas.default)(sel.raws.value);
53 }
54 });
55}
56function resolveArbitraryValue(modifier, validate) {
57 if (!isArbitraryValue(modifier)) {
58 return undefined;
59 }
60 let value = modifier.slice(1, -1);
61 if (!validate(value)) {
62 return undefined;
63 }
64 return (0, _dataTypes.normalize)(value);
65}
66function asNegativeValue(modifier, lookup = {}, validate) {
67 let positiveValue = lookup[modifier];
68 if (positiveValue !== undefined) {
69 return (0, _negateValue.default)(positiveValue);
70 }
71 if (isArbitraryValue(modifier)) {
72 let resolved = resolveArbitraryValue(modifier, validate);
73 if (resolved === undefined) {
74 return undefined;
75 }
76 return (0, _negateValue.default)(resolved);
77 }
78}
79function asValue(modifier, options = {}, { validate =()=>true } = {}) {
80 var _options_values;
81 let value = (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier];
82 if (value !== undefined) {
83 return value;
84 }
85 if (options.supportsNegativeValues && modifier.startsWith("-")) {
86 return asNegativeValue(modifier.slice(1), options.values, validate);
87 }
88 return resolveArbitraryValue(modifier, validate);
89}
90function isArbitraryValue(input) {
91 return input.startsWith("[") && input.endsWith("]");
92}
93function splitUtilityModifier(modifier) {
94 let slashIdx = modifier.lastIndexOf("/");
95 // If the `/` is inside an arbitrary, we want to find the previous one if any
96 // This logic probably isn't perfect but it should work for most cases
97 let arbitraryStartIdx = modifier.lastIndexOf("[", slashIdx);
98 let arbitraryEndIdx = modifier.indexOf("]", slashIdx);
99 let isNextToArbitrary = modifier[slashIdx - 1] === "]" || modifier[slashIdx + 1] === "[";
100 // Backtrack to the previous `/` if the one we found was inside an arbitrary
101 if (!isNextToArbitrary) {
102 if (arbitraryStartIdx !== -1 && arbitraryEndIdx !== -1) {
103 if (arbitraryStartIdx < slashIdx && slashIdx < arbitraryEndIdx) {
104 slashIdx = modifier.lastIndexOf("/", arbitraryStartIdx);
105 }
106 }
107 }
108 if (slashIdx === -1 || slashIdx === modifier.length - 1) {
109 return [
110 modifier,
111 undefined
112 ];
113 }
114 let arbitrary = isArbitraryValue(modifier);
115 // The modifier could be of the form `[foo]/[bar]`
116 // We want to handle this case properly
117 // without affecting `[foo/bar]`
118 if (arbitrary && !modifier.includes("]/[")) {
119 return [
120 modifier,
121 undefined
122 ];
123 }
124 return [
125 modifier.slice(0, slashIdx),
126 modifier.slice(slashIdx + 1)
127 ];
128}
129function parseColorFormat(value) {
130 if (typeof value === "string" && value.includes("<alpha-value>")) {
131 let oldValue = value;
132 return ({ opacityValue =1 })=>oldValue.replace(/<alpha-value>/g, opacityValue);
133 }
134 return value;
135}
136function unwrapArbitraryModifier(modifier) {
137 return (0, _dataTypes.normalize)(modifier.slice(1, -1));
138}
139function asColor(modifier, options = {}, { tailwindConfig ={} } = {}) {
140 var _options_values;
141 if (((_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier]) !== undefined) {
142 var _options_values1;
143 return parseColorFormat((_options_values1 = options.values) === null || _options_values1 === void 0 ? void 0 : _options_values1[modifier]);
144 }
145 // TODO: Hoist this up to getMatchingTypes or something
146 // We do this here because we need the alpha value (if any)
147 let [color, alpha] = splitUtilityModifier(modifier);
148 if (alpha !== undefined) {
149 var _options_values2, _tailwindConfig_theme, _tailwindConfig_theme_opacity;
150 var _options_values_color;
151 let normalizedColor = (_options_values_color = (_options_values2 = options.values) === null || _options_values2 === void 0 ? void 0 : _options_values2[color]) !== null && _options_values_color !== void 0 ? _options_values_color : isArbitraryValue(color) ? color.slice(1, -1) : undefined;
152 if (normalizedColor === undefined) {
153 return undefined;
154 }
155 normalizedColor = parseColorFormat(normalizedColor);
156 if (isArbitraryValue(alpha)) {
157 return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, unwrapArbitraryModifier(alpha));
158 }
159 if (((_tailwindConfig_theme = tailwindConfig.theme) === null || _tailwindConfig_theme === void 0 ? void 0 : (_tailwindConfig_theme_opacity = _tailwindConfig_theme.opacity) === null || _tailwindConfig_theme_opacity === void 0 ? void 0 : _tailwindConfig_theme_opacity[alpha]) === undefined) {
160 return undefined;
161 }
162 return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, tailwindConfig.theme.opacity[alpha]);
163 }
164 return asValue(modifier, options, {
165 validate: _dataTypes.color
166 });
167}
168function asLookupValue(modifier, options = {}) {
169 var _options_values;
170 return (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier];
171}
172function guess(validate) {
173 return (modifier, options)=>{
174 return asValue(modifier, options, {
175 validate
176 });
177 };
178}
179let typeMap = {
180 any: asValue,
181 color: asColor,
182 url: guess(_dataTypes.url),
183 image: guess(_dataTypes.image),
184 length: guess(_dataTypes.length),
185 percentage: guess(_dataTypes.percentage),
186 position: guess(_dataTypes.position),
187 lookup: asLookupValue,
188 "generic-name": guess(_dataTypes.genericName),
189 "family-name": guess(_dataTypes.familyName),
190 number: guess(_dataTypes.number),
191 "line-width": guess(_dataTypes.lineWidth),
192 "absolute-size": guess(_dataTypes.absoluteSize),
193 "relative-size": guess(_dataTypes.relativeSize),
194 shadow: guess(_dataTypes.shadow),
195 size: guess(_validateFormalSyntax.backgroundSize)
196};
197let supportedTypes = Object.keys(typeMap);
198function splitAtFirst(input, delim) {
199 let idx = input.indexOf(delim);
200 if (idx === -1) return [
201 undefined,
202 input
203 ];
204 return [
205 input.slice(0, idx),
206 input.slice(idx + 1)
207 ];
208}
209function coerceValue(types, modifier, options, tailwindConfig) {
210 if (options.values && modifier in options.values) {
211 for (let { type } of types !== null && types !== void 0 ? types : []){
212 let result = typeMap[type](modifier, options, {
213 tailwindConfig
214 });
215 if (result === undefined) {
216 continue;
217 }
218 return [
219 result,
220 type,
221 null
222 ];
223 }
224 }
225 if (isArbitraryValue(modifier)) {
226 let arbitraryValue = modifier.slice(1, -1);
227 let [explicitType, value] = splitAtFirst(arbitraryValue, ":");
228 // It could be that this resolves to `url(https` which is not a valid
229 // identifier. We currently only support "simple" words with dashes or
230 // underscores. E.g.: family-name
231 if (!/^[\w-_]+$/g.test(explicitType)) {
232 value = arbitraryValue;
233 } else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) {
234 return [];
235 }
236 if (value.length > 0 && supportedTypes.includes(explicitType)) {
237 return [
238 asValue(`[${value}]`, options),
239 explicitType,
240 null
241 ];
242 }
243 }
244 let matches = getMatchingTypes(types, modifier, options, tailwindConfig);
245 // Find first matching type
246 for (let match of matches){
247 return match;
248 }
249 return [];
250}
251function* getMatchingTypes(types, rawModifier, options, tailwindConfig) {
252 let modifiersEnabled = (0, _featureFlags.flagEnabled)(tailwindConfig, "generalizedModifiers");
253 let [modifier, utilityModifier] = splitUtilityModifier(rawModifier);
254 let canUseUtilityModifier = modifiersEnabled && options.modifiers != null && (options.modifiers === "any" || typeof options.modifiers === "object" && (utilityModifier && isArbitraryValue(utilityModifier) || utilityModifier in options.modifiers));
255 if (!canUseUtilityModifier) {
256 modifier = rawModifier;
257 utilityModifier = undefined;
258 }
259 if (utilityModifier !== undefined && modifier === "") {
260 modifier = "DEFAULT";
261 }
262 // Check the full value first
263 // TODO: Move to asValue… somehow
264 if (utilityModifier !== undefined) {
265 if (typeof options.modifiers === "object") {
266 var _options_modifiers;
267 var _options_modifiers_utilityModifier;
268 let configValue = (_options_modifiers_utilityModifier = (_options_modifiers = options.modifiers) === null || _options_modifiers === void 0 ? void 0 : _options_modifiers[utilityModifier]) !== null && _options_modifiers_utilityModifier !== void 0 ? _options_modifiers_utilityModifier : null;
269 if (configValue !== null) {
270 utilityModifier = configValue;
271 } else if (isArbitraryValue(utilityModifier)) {
272 utilityModifier = unwrapArbitraryModifier(utilityModifier);
273 }
274 }
275 }
276 for (let { type } of types !== null && types !== void 0 ? types : []){
277 let result = typeMap[type](modifier, options, {
278 tailwindConfig
279 });
280 if (result === undefined) {
281 continue;
282 }
283 yield [
284 result,
285 type,
286 utilityModifier !== null && utilityModifier !== void 0 ? utilityModifier : null
287 ];
288 }
289}
Note: See TracBrowser for help on using the repository browser.