@symbo.ls/scratch 2.10.149 → 2.10.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/defaultConfig/animation.js +24 -0
- package/dist/cjs/defaultConfig/cases.js +24 -0
- package/dist/cjs/defaultConfig/color.js +32 -0
- package/dist/cjs/defaultConfig/document.js +24 -0
- package/dist/cjs/defaultConfig/font-family.js +39 -0
- package/dist/cjs/defaultConfig/font.js +33 -0
- package/dist/cjs/defaultConfig/icons.js +24 -0
- package/dist/cjs/defaultConfig/index.js +41 -0
- package/dist/cjs/defaultConfig/media.js +39 -0
- package/dist/cjs/defaultConfig/responsive.js +48 -0
- package/dist/cjs/defaultConfig/sequence.js +49 -0
- package/dist/cjs/defaultConfig/spacing.js +36 -0
- package/dist/cjs/defaultConfig/svg.js +26 -0
- package/dist/cjs/defaultConfig/theme.js +36 -0
- package/dist/cjs/defaultConfig/timing.js +36 -0
- package/dist/cjs/defaultConfig/typography.js +39 -0
- package/dist/cjs/defaultConfig/unit.js +26 -0
- package/dist/cjs/factory.js +69 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/package.json +4 -0
- package/dist/cjs/set.js +121 -0
- package/dist/cjs/system/color.js +169 -0
- package/dist/cjs/system/document.js +35 -0
- package/dist/cjs/system/font.js +50 -0
- package/dist/cjs/system/index.js +26 -0
- package/dist/cjs/system/reset.js +83 -0
- package/dist/cjs/system/spacing.js +129 -0
- package/dist/cjs/system/svg.js +81 -0
- package/dist/cjs/system/theme.js +255 -0
- package/dist/cjs/system/timing.js +48 -0
- package/dist/cjs/system/typography.js +94 -0
- package/dist/cjs/tests/index.js +28 -0
- package/dist/cjs/utils/color.js +163 -0
- package/dist/cjs/utils/font.js +70 -0
- package/dist/cjs/utils/index.js +23 -0
- package/dist/cjs/utils/object.js +73 -0
- package/dist/cjs/utils/sequence.js +199 -0
- package/dist/cjs/utils/sprite.js +63 -0
- package/dist/cjs/utils/theme.js +32 -0
- package/dist/cjs/utils/var.js +64 -0
- package/dist/esm/defaultConfig/animation.js +4 -0
- package/dist/esm/defaultConfig/cases.js +4 -0
- package/dist/esm/defaultConfig/color.js +12 -0
- package/dist/esm/defaultConfig/document.js +4 -0
- package/dist/esm/defaultConfig/font-family.js +19 -0
- package/dist/esm/defaultConfig/font.js +13 -0
- package/dist/esm/defaultConfig/icons.js +4 -0
- package/dist/esm/defaultConfig/index.js +20 -0
- package/dist/esm/defaultConfig/media.js +19 -0
- package/dist/esm/defaultConfig/responsive.js +28 -0
- package/dist/esm/defaultConfig/sequence.js +29 -0
- package/dist/esm/defaultConfig/spacing.js +16 -0
- package/dist/esm/defaultConfig/svg.js +6 -0
- package/dist/esm/defaultConfig/theme.js +16 -0
- package/dist/esm/defaultConfig/timing.js +16 -0
- package/dist/esm/defaultConfig/typography.js +19 -0
- package/dist/esm/defaultConfig/unit.js +6 -0
- package/dist/esm/factory.js +39 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/set.js +113 -0
- package/dist/esm/system/color.js +156 -0
- package/dist/esm/system/document.js +15 -0
- package/dist/esm/system/font.js +35 -0
- package/dist/esm/system/index.js +9 -0
- package/dist/esm/system/reset.js +63 -0
- package/dist/esm/system/spacing.js +115 -0
- package/dist/esm/system/svg.js +61 -0
- package/dist/esm/system/theme.js +240 -0
- package/dist/esm/system/timing.js +32 -0
- package/dist/esm/system/typography.js +80 -0
- package/dist/esm/tests/index.js +8 -0
- package/dist/esm/utils/color.js +143 -0
- package/dist/esm/utils/font.js +50 -0
- package/dist/esm/utils/index.js +6 -0
- package/dist/esm/utils/object.js +53 -0
- package/dist/esm/utils/sequence.js +179 -0
- package/dist/esm/utils/sprite.js +43 -0
- package/dist/esm/utils/theme.js +12 -0
- package/dist/esm/utils/var.js +44 -0
- package/package.json +15 -15
- package/dist/index.cjs.js +0 -2389
- package/dist/index.cjs.js.map +0 -7
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { isString } from "@domql/utils";
|
|
2
|
+
import { toDashCase } from "@symbo.ls/utils";
|
|
3
|
+
import { getActiveConfig } from "../factory.js";
|
|
4
|
+
const numToLetterMap = {
|
|
5
|
+
"-6": "U",
|
|
6
|
+
"-5": "V",
|
|
7
|
+
"-4": "W",
|
|
8
|
+
"-3": "X",
|
|
9
|
+
"-2": "Y",
|
|
10
|
+
"-1": "Z",
|
|
11
|
+
0: "A",
|
|
12
|
+
1: "B",
|
|
13
|
+
2: "C",
|
|
14
|
+
3: "D",
|
|
15
|
+
4: "E",
|
|
16
|
+
5: "F",
|
|
17
|
+
6: "G",
|
|
18
|
+
7: "H",
|
|
19
|
+
8: "I",
|
|
20
|
+
9: "J",
|
|
21
|
+
10: "K",
|
|
22
|
+
11: "L",
|
|
23
|
+
12: "M",
|
|
24
|
+
13: "N",
|
|
25
|
+
14: "O",
|
|
26
|
+
15: "P",
|
|
27
|
+
16: "Q",
|
|
28
|
+
17: "R",
|
|
29
|
+
18: "S",
|
|
30
|
+
19: "T"
|
|
31
|
+
};
|
|
32
|
+
const setSequenceValue = (props, sequenceProps) => {
|
|
33
|
+
const { key, variable, value, scaling, index } = props;
|
|
34
|
+
sequenceProps.sequence[key] = {
|
|
35
|
+
key,
|
|
36
|
+
decimal: ~~(value * 100) / 100,
|
|
37
|
+
val: ~~value,
|
|
38
|
+
scaling,
|
|
39
|
+
index,
|
|
40
|
+
variable
|
|
41
|
+
};
|
|
42
|
+
sequenceProps.scales[key] = scaling;
|
|
43
|
+
sequenceProps.vars[variable] = scaling + sequenceProps.unit;
|
|
44
|
+
};
|
|
45
|
+
const generateSubSequence = (props, sequenceProps) => {
|
|
46
|
+
const { key, base, value, ratio, variable, index } = props;
|
|
47
|
+
const next = value * ratio;
|
|
48
|
+
const diff = next - value;
|
|
49
|
+
const smallscale = diff / 1.618;
|
|
50
|
+
const valueRounded = ~~value;
|
|
51
|
+
const nextRounded = ~~next;
|
|
52
|
+
const diffRounded = nextRounded - valueRounded;
|
|
53
|
+
let arr = [];
|
|
54
|
+
const first = next - smallscale;
|
|
55
|
+
const second = value + smallscale;
|
|
56
|
+
const middle = (first + second) / 2;
|
|
57
|
+
if (diffRounded > 16)
|
|
58
|
+
arr = [first, middle, second];
|
|
59
|
+
else
|
|
60
|
+
arr = [first, second];
|
|
61
|
+
arr.map((v, k) => {
|
|
62
|
+
const scaling = ~~(v / base * 1e3) / 1e3;
|
|
63
|
+
const newVar = variable + (k + 1);
|
|
64
|
+
const props2 = {
|
|
65
|
+
key: key + (k + 1),
|
|
66
|
+
variable: newVar,
|
|
67
|
+
value: v,
|
|
68
|
+
scaling,
|
|
69
|
+
index: index + (k + 1) / 10
|
|
70
|
+
};
|
|
71
|
+
return setSequenceValue(props2, sequenceProps);
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const switchSequenceOnNegative = (key, base, ratio) => {
|
|
75
|
+
return base * Math.pow(ratio, key);
|
|
76
|
+
};
|
|
77
|
+
const generateSequence = (sequenceProps) => {
|
|
78
|
+
const { type, base, ratio, range, subSequence } = sequenceProps;
|
|
79
|
+
const n = Math.abs(range[0]) + Math.abs(range[1]);
|
|
80
|
+
const prefix = "--" + (type && type.replace(".", "-")) + "-";
|
|
81
|
+
for (let i = 0; i <= n; i++) {
|
|
82
|
+
const key = range[1] - i;
|
|
83
|
+
const letterKey = numToLetterMap[key];
|
|
84
|
+
const value = switchSequenceOnNegative(key, base, ratio);
|
|
85
|
+
const scaling = ~~(value / base * 100) / 100;
|
|
86
|
+
const variable = prefix + letterKey;
|
|
87
|
+
const props = {
|
|
88
|
+
key: letterKey,
|
|
89
|
+
variable,
|
|
90
|
+
value,
|
|
91
|
+
base,
|
|
92
|
+
scaling,
|
|
93
|
+
ratio,
|
|
94
|
+
index: key
|
|
95
|
+
};
|
|
96
|
+
setSequenceValue(props, sequenceProps);
|
|
97
|
+
if (subSequence)
|
|
98
|
+
generateSubSequence(props, sequenceProps);
|
|
99
|
+
}
|
|
100
|
+
return sequenceProps;
|
|
101
|
+
};
|
|
102
|
+
const getSequenceValue = (value = "A", sequenceProps) => {
|
|
103
|
+
const CONFIG = getActiveConfig();
|
|
104
|
+
const { UNIT } = CONFIG;
|
|
105
|
+
const {
|
|
106
|
+
sequence,
|
|
107
|
+
unit = UNIT.default,
|
|
108
|
+
useVariable
|
|
109
|
+
} = sequenceProps;
|
|
110
|
+
if (isString(value) && value.slice(0, 2) === "--")
|
|
111
|
+
return `var(${value})`;
|
|
112
|
+
const prefix = `--${toDashCase(sequenceProps.type.replace(".", "-"))}-`;
|
|
113
|
+
const startsWithDashOrLetterRegex = /^-?[a-zA-Z]/i;
|
|
114
|
+
const startsWithDashOrLetter = startsWithDashOrLetterRegex.test(value);
|
|
115
|
+
if (value === "none" || value === "auto" || value === "unset" || value === "inherit" || value === "fit-content" || value === "min-content" || value === "max-content" || value.includes("calc") || !startsWithDashOrLetter)
|
|
116
|
+
return value;
|
|
117
|
+
const letterVal = value.toUpperCase();
|
|
118
|
+
const isNegative = letterVal.slice(0, 1) === "-" ? "-" : "";
|
|
119
|
+
let absValue = isNegative ? letterVal.slice(1) : letterVal;
|
|
120
|
+
let mediaName = "";
|
|
121
|
+
if (absValue.includes("-")) {
|
|
122
|
+
mediaName = "-" + absValue.split("-")[1].toLowerCase();
|
|
123
|
+
absValue = absValue.split("-")[0];
|
|
124
|
+
}
|
|
125
|
+
const varValue = (v) => `var(${prefix}${v}${mediaName})`;
|
|
126
|
+
if (absValue.includes("+")) {
|
|
127
|
+
const args = absValue.split("+");
|
|
128
|
+
const [first, second] = args;
|
|
129
|
+
const joint = `${varValue(first)} + ${varValue(second)}`;
|
|
130
|
+
return isNegative ? `calc((${joint}) * -1)` : `calc(${joint})`;
|
|
131
|
+
} else if (absValue.includes("-")) {
|
|
132
|
+
const args = absValue.split("-");
|
|
133
|
+
const [first, second] = args;
|
|
134
|
+
const joint = `${varValue(first)} - ${varValue(second)}`;
|
|
135
|
+
return isNegative ? `calc((${joint}) * -1)` : `calc(${joint})`;
|
|
136
|
+
}
|
|
137
|
+
if (!sequence[absValue] && absValue.length === 2) {
|
|
138
|
+
if (CONFIG.verbose)
|
|
139
|
+
console.warn(absValue, "- value is not found because `subSequence` is set to false");
|
|
140
|
+
absValue = absValue.slice(0, 1);
|
|
141
|
+
}
|
|
142
|
+
if (useVariable || CONFIG.useVariable) {
|
|
143
|
+
const varValue2 = `var(${prefix}${absValue}${mediaName})`;
|
|
144
|
+
return isNegative ? `calc(${varValue2} * -1)` : varValue2;
|
|
145
|
+
}
|
|
146
|
+
const sequenceItem = sequence ? sequence[absValue] : null;
|
|
147
|
+
if (!sequenceItem)
|
|
148
|
+
return console.warn("can't find", sequence, absValue);
|
|
149
|
+
if (unit === "ms" || unit === "s") {
|
|
150
|
+
return isNegative + sequenceItem.val + unit;
|
|
151
|
+
}
|
|
152
|
+
return isNegative + sequenceItem.scaling + unit;
|
|
153
|
+
};
|
|
154
|
+
const getSequenceValuePropertyPair = (value, propertyName, sequenceProps) => {
|
|
155
|
+
if (typeof value !== "string") {
|
|
156
|
+
console.warn(propertyName, value, "is not a string");
|
|
157
|
+
return {};
|
|
158
|
+
}
|
|
159
|
+
if (value === "-" || value === "")
|
|
160
|
+
return {};
|
|
161
|
+
return { [propertyName]: getSequenceValue(value, sequenceProps) };
|
|
162
|
+
};
|
|
163
|
+
const findHeadingLetter = (h1Matches, index) => numToLetterMap[h1Matches - index];
|
|
164
|
+
const findHeadings = (propertyNames) => {
|
|
165
|
+
const { h1Matches, sequence } = propertyNames;
|
|
166
|
+
return new Array(6).fill(null).map((_, i) => {
|
|
167
|
+
const findLetter = findHeadingLetter(h1Matches, i);
|
|
168
|
+
return sequence[findLetter];
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
export {
|
|
172
|
+
findHeadingLetter,
|
|
173
|
+
findHeadings,
|
|
174
|
+
generateSequence,
|
|
175
|
+
generateSubSequence,
|
|
176
|
+
getSequenceValue,
|
|
177
|
+
getSequenceValuePropertyPair,
|
|
178
|
+
numToLetterMap
|
|
179
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { isString } from "@domql/utils";
|
|
2
|
+
const generateSprite = (icons) => {
|
|
3
|
+
let sprite = '<svg aria-hidden="true" width="0" height="0" style="position:absolute">';
|
|
4
|
+
for (let key in icons) {
|
|
5
|
+
sprite += icons[key];
|
|
6
|
+
}
|
|
7
|
+
sprite += "</svg>";
|
|
8
|
+
return sprite;
|
|
9
|
+
};
|
|
10
|
+
const parseRootAttributes = (htmlString) => {
|
|
11
|
+
if (!isString(htmlString)) {
|
|
12
|
+
return console.warn(`parseRootAttributes: ${htmlString} is not a string`);
|
|
13
|
+
}
|
|
14
|
+
let match = htmlString.match(/<svg\s+(.*?)>/);
|
|
15
|
+
if (!match || !match[1]) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
let attrString = match[1];
|
|
19
|
+
let attrs = attrString.match(/(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|\s*\/?[>"']))+.)["']?/gm);
|
|
20
|
+
return attrs.reduce((acc, attr) => {
|
|
21
|
+
let [key, value] = attr.split("=");
|
|
22
|
+
acc[key] = value.replace(/['"]/g, "");
|
|
23
|
+
return acc;
|
|
24
|
+
}, {});
|
|
25
|
+
};
|
|
26
|
+
const convertSvgToSymbol = (key, code) => {
|
|
27
|
+
const extractAttrs = parseRootAttributes(code);
|
|
28
|
+
const { width, height } = extractAttrs;
|
|
29
|
+
const viewBox = extractAttrs.viewBox || `0 0 ${width || 24} ${height || 24}`;
|
|
30
|
+
const xmlns = "http://www.w3.org/2000/svg";
|
|
31
|
+
let symbol = code.replace(
|
|
32
|
+
"<svg",
|
|
33
|
+
`<symbol id="${key}" xmlns="${xmlns}" viewBox="${viewBox}"`
|
|
34
|
+
);
|
|
35
|
+
symbol = symbol.replace(/width="[^\"]*/, "");
|
|
36
|
+
symbol = symbol.replace(/height="[^\"]*/, "");
|
|
37
|
+
symbol = symbol.replace("</svg", "</symbol");
|
|
38
|
+
return symbol;
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
convertSvgToSymbol,
|
|
42
|
+
generateSprite
|
|
43
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const returnSubThemeOrDefault = (orig, theme) => {
|
|
2
|
+
if (!orig)
|
|
3
|
+
return;
|
|
4
|
+
if (orig.themes && orig.themes[theme])
|
|
5
|
+
return orig.themes[theme];
|
|
6
|
+
if (orig[theme])
|
|
7
|
+
return [orig, orig[theme]];
|
|
8
|
+
return orig;
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
returnSubThemeOrDefault
|
|
12
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getActiveConfig } from "../factory.js";
|
|
2
|
+
import { isObjectLike } from "@domql/utils";
|
|
3
|
+
const ENV = "development";
|
|
4
|
+
const setVariables = (result, key) => {
|
|
5
|
+
const CONFIG = getActiveConfig();
|
|
6
|
+
const { CSS_VARS } = CONFIG;
|
|
7
|
+
if (isObjectLike(result.value)) {
|
|
8
|
+
} else {
|
|
9
|
+
CSS_VARS[result.var] = result.value;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const applySequenceVars = (props, mediaName, options = {}) => {
|
|
13
|
+
const CONFIG = getActiveConfig();
|
|
14
|
+
const { UNIT, MEDIA, TIMING, CSS_VARS } = CONFIG;
|
|
15
|
+
const unit = props.unit || UNIT.default;
|
|
16
|
+
const { sequence, scales } = props;
|
|
17
|
+
for (const key in sequence) {
|
|
18
|
+
const item = sequence[key];
|
|
19
|
+
const value = (props.type === TIMING.type ? sequence[key].val : scales[key]) + unit;
|
|
20
|
+
if (mediaName) {
|
|
21
|
+
const query = MEDIA[mediaName];
|
|
22
|
+
if (!query) {
|
|
23
|
+
if (CONFIG.verbose)
|
|
24
|
+
console.warn("Can't find query ", query);
|
|
25
|
+
}
|
|
26
|
+
let underMediaQuery = CSS_VARS[`@media ${query}`];
|
|
27
|
+
if (!underMediaQuery)
|
|
28
|
+
underMediaQuery = CSS_VARS[`@media ${query}`] = {};
|
|
29
|
+
underMediaQuery[item.variable] = `var(${item.variable + "-" + mediaName})`;
|
|
30
|
+
CSS_VARS[item.variable + "-" + mediaName] = value;
|
|
31
|
+
} else {
|
|
32
|
+
if (options.useDefault === false) {
|
|
33
|
+
CSS_VARS[item.variable] = value;
|
|
34
|
+
} else {
|
|
35
|
+
CSS_VARS[item.variable + "-default"] = value;
|
|
36
|
+
CSS_VARS[item.variable] = `var(${item.variable + "-default"})`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
applySequenceVars,
|
|
43
|
+
setVariables
|
|
44
|
+
};
|
package/package.json
CHANGED
|
@@ -2,22 +2,27 @@
|
|
|
2
2
|
"name": "@symbo.ls/scratch",
|
|
3
3
|
"description": "Φ / CSS framework and methodology.",
|
|
4
4
|
"author": "symbo.ls",
|
|
5
|
-
"version": "2.10.
|
|
5
|
+
"version": "2.10.156",
|
|
6
6
|
"files": [
|
|
7
7
|
"src",
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
10
|
"repository": "https://github.com/symbo-ls/scratch",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
11
|
+
"type": "module",
|
|
12
|
+
"module": "dist/esm/index.js",
|
|
13
|
+
"unpkg": "dist/iife/index.js",
|
|
14
|
+
"jsdelivr": "dist/iife/index.js",
|
|
15
|
+
"main": "dist/esm/index.js",
|
|
16
|
+
"exports": "./dist/cjs/index.js",
|
|
17
|
+
"source": "index.js",
|
|
14
18
|
"publishConfig": {},
|
|
15
19
|
"scripts": {
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
20
|
+
"copy:package:cjs": "cp ../../.build/package-cjs.json dist/cjs/package.json",
|
|
21
|
+
"build:esm": "npx esbuild ./src/*.js ./src/**/*.js --target=es2020 --format=esm --outdir=dist/esm",
|
|
22
|
+
"build:cjs": "npx esbuild ./src/*.js ./src/**/*.js --target=node16 --format=cjs --outdir=dist/cjs",
|
|
23
|
+
"build:iife": "npx esbuild ./src/index.js --target=es2020 --format=iife --outdir=dist/iife --bundle --minify",
|
|
24
|
+
"build": "yarn build:esm && yarn build:cjs",
|
|
25
|
+
"prepublish": "rimraf -I dist && yarn build && yarn copy:package:cjs"
|
|
21
26
|
},
|
|
22
27
|
"dependencies": {
|
|
23
28
|
"@domql/utils": "latest",
|
|
@@ -31,10 +36,5 @@
|
|
|
31
36
|
"> 1%",
|
|
32
37
|
"ie >= 9"
|
|
33
38
|
],
|
|
34
|
-
"
|
|
35
|
-
"context": "browser",
|
|
36
|
-
"outputFormat": "commonjs",
|
|
37
|
-
"includeNodeModules": true
|
|
38
|
-
},
|
|
39
|
-
"gitHead": "e12c846d47b3309dc6fbe18c359a3db2b8586cbe"
|
|
39
|
+
"gitHead": "447c8b2e2cd8f196d8485145bc3ba0e945d27f9c"
|
|
40
40
|
}
|