arekui 1.0.0 → 2.0.0
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/CHANGELOG.md +49 -0
- package/LICENSE +21 -21
- package/README.md +26 -198
- package/arekui.css +5930 -3279
- package/arekui.d.ts +328 -328
- package/arekui.js +817 -450
- package/assets/img/grunge-wall-texture-freepick-kues1.webp +0 -0
- package/assets/img/logo.png +0 -0
- package/dist/css/arekui.base.min.css +1 -0
- package/dist/css/arekui.broadsheet.min.css +1 -0
- package/dist/css/arekui.brutalist.min.css +1 -0
- package/dist/css/arekui.default.min.css +1 -0
- package/dist/css/arekui.full.min.css +1 -0
- package/dist/css/arekui.min.css +1 -0
- package/dist/css/arekui.neo.min.css +1 -0
- package/dist/css/arekui.pixel.min.css +1 -0
- package/dist/js/arekui.min.js +2 -0
- package/package.json +64 -57
- package/scripts/build-css.js +95 -0
- package/scripts/build-custom.js +287 -318
- package/scripts/build-js.js +68 -0
- package/scripts/clean.js +13 -0
- package/scripts/dev.js +97 -0
- package/scripts/imports.js +18 -0
- package/scripts/split.js +256 -0
- package/src/arekui.base.css +63 -0
- package/src/arekui.broadsheet.css +6 -0
- package/src/arekui.brutalist.css +8 -0
- package/src/arekui.core.css +64 -0
- package/src/arekui.css +22 -5
- package/src/arekui.default.css +6 -0
- package/src/arekui.neo.css +8 -0
- package/src/arekui.pixel.css +8 -0
- package/src/base/brutalist-overrides.css +254 -0
- package/src/base/neo-overrides.css +330 -315
- package/src/base/pixel-overrides.css +336 -0
- package/src/base/reset.css +179 -65
- package/src/base/theme-brutalist.css +111 -0
- package/src/base/theme-default.css +184 -0
- package/src/base/theme-neo.css +108 -0
- package/src/base/theme-pixel.css +111 -0
- package/src/base/tokens.css +59 -302
- package/src/components/accordion.css +32 -33
- package/src/components/alert.css +24 -25
- package/src/components/badge.css +31 -32
- package/src/components/breadcrumb.css +31 -32
- package/src/components/broadsheet.css +264 -0
- package/src/components/button.css +102 -101
- package/src/components/card.css +22 -23
- package/src/components/carousel.css +49 -13
- package/src/components/chat.css +77 -76
- package/src/components/description-list.css +34 -0
- package/src/components/docs.css +252 -0
- package/src/components/empty.css +36 -0
- package/src/components/file-upload.css +49 -50
- package/src/components/footer.css +40 -25
- package/src/components/forms.css +67 -68
- package/src/components/heading.css +27 -0
- package/src/components/hero.css +20 -21
- package/src/components/join.css +12 -13
- package/src/components/kbd.css +15 -0
- package/src/components/link.css +22 -23
- package/src/components/loading.css +109 -0
- package/src/components/menu.css +104 -54
- package/src/components/misc.css +94 -55
- package/src/components/modal.css +30 -31
- package/src/components/navbar.css +166 -36
- package/src/components/pagination.css +50 -45
- package/src/components/popover.css +68 -69
- package/src/components/progress.css +17 -18
- package/src/components/prose.css +78 -78
- package/src/components/rating.css +35 -36
- package/src/components/scroll-top.css +34 -34
- package/src/components/segmented.css +44 -0
- package/src/components/sidebar.css +377 -0
- package/src/components/skeleton.css +52 -52
- package/src/components/spinner.css +36 -0
- package/src/components/swap.css +43 -43
- package/src/components/table.css +20 -21
- package/src/components/tabs.css +22 -23
- package/src/components/tag.css +99 -99
- package/src/components/textured.css +52 -32
- package/src/components/timeline.css +32 -33
- package/src/components/toast.css +132 -132
- package/src/components/tooltip.css +22 -23
- package/src/utilities/borders.css +150 -150
- package/src/utilities/brutalist-utilities.css +49 -0
- package/src/utilities/colors.css +79 -71
- package/src/utilities/hover.css +31 -31
- package/src/utilities/layout.css +98 -98
- package/src/utilities/neo-utilities.css +86 -93
- package/src/utilities/pixel-utilities.css +88 -0
- package/src/utilities/responsive.css +131 -126
- package/src/utilities/sizing.css +98 -89
- package/src/utilities/spacing.css +132 -129
- package/src/utilities/typography.css +95 -92
- package/dist/arekui.min.css +0 -1
- package/dist/arekui.min.js +0 -2
- package/src/components/drawer.css +0 -53
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const esbuild = require("esbuild");
|
|
6
|
+
|
|
7
|
+
const SRC = path.join(__dirname, "..", "arekui.js");
|
|
8
|
+
const DIST = path.join(__dirname, "..", "dist");
|
|
9
|
+
const OUT_MIN = path.join(DIST, "js", "arekui.min.js");
|
|
10
|
+
const OUT_MAP = path.join(DIST, "js", "arekui.min.js.map");
|
|
11
|
+
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
const watch = args.includes("--watch");
|
|
14
|
+
const sourcemap = args.includes("--sourcemap");
|
|
15
|
+
|
|
16
|
+
async function build() {
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
|
|
19
|
+
fs.mkdirSync(path.dirname(OUT_MIN), { recursive: true });
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const result = await esbuild.build({
|
|
23
|
+
entryPoints: [SRC],
|
|
24
|
+
bundle: false,
|
|
25
|
+
minify: true,
|
|
26
|
+
sourcemap: sourcemap,
|
|
27
|
+
outfile: OUT_MIN,
|
|
28
|
+
target: ["es2018"],
|
|
29
|
+
format: "iife",
|
|
30
|
+
legalComments: "none",
|
|
31
|
+
banner: {
|
|
32
|
+
js: "/*! ArekUI v2.0.0 | MIT License */",
|
|
33
|
+
},
|
|
34
|
+
write: false,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
for (const file of result.outputFiles) {
|
|
38
|
+
fs.writeFileSync(file.path, file.contents);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const originalSize = fs.statSync(SRC).size;
|
|
42
|
+
const minifiedSize = fs.statSync(OUT_MIN).size;
|
|
43
|
+
const reduction = ((1 - minifiedSize / originalSize) * 100).toFixed(1);
|
|
44
|
+
const elapsed = Date.now() - startTime;
|
|
45
|
+
|
|
46
|
+
console.log(`✓ JS built in ${elapsed}ms`);
|
|
47
|
+
console.log(
|
|
48
|
+
` ${originalSize} → ${minifiedSize} bytes (${reduction}% reduction)`,
|
|
49
|
+
);
|
|
50
|
+
console.log(` Output: ${OUT_MIN}`);
|
|
51
|
+
if (sourcemap) {
|
|
52
|
+
console.log(` Sourcemap: ${OUT_MAP}`);
|
|
53
|
+
}
|
|
54
|
+
} catch (err) {
|
|
55
|
+
console.error("✗ JS build failed:", err.message);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (watch) {
|
|
61
|
+
console.log(`Watching ${SRC} for changes...`);
|
|
62
|
+
fs.watchFile(SRC, { interval: 100 }, () => {
|
|
63
|
+
console.log("\nChange detected, rebuilding JS...");
|
|
64
|
+
build();
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
build();
|
package/scripts/clean.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const DIST = path.join(__dirname, "..", "dist");
|
|
7
|
+
|
|
8
|
+
if (fs.existsSync(DIST)) {
|
|
9
|
+
fs.rmSync(DIST, { recursive: true, force: true });
|
|
10
|
+
console.log(`✓ Removed ${DIST}`);
|
|
11
|
+
} else {
|
|
12
|
+
console.log("ℹ Nothing to clean (dist/ doesn't exist)");
|
|
13
|
+
}
|
package/scripts/dev.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawn, spawnSync } = require("child_process");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
|
|
7
|
+
const ROOT = path.join(__dirname, "..");
|
|
8
|
+
const SCRIPTS = __dirname;
|
|
9
|
+
const children = [];
|
|
10
|
+
let shuttingDown = false;
|
|
11
|
+
|
|
12
|
+
// Runs a script to completion before continuing. With { fatal: true } a
|
|
13
|
+
// failed run tears the dev process down instead of building on top of a
|
|
14
|
+
// stale bundle.
|
|
15
|
+
function run(script, { fatal = false } = {}) {
|
|
16
|
+
const result = spawnSync(process.execPath, [path.join(SCRIPTS, script)], {
|
|
17
|
+
cwd: ROOT,
|
|
18
|
+
stdio: "inherit",
|
|
19
|
+
});
|
|
20
|
+
if (result.status !== 0) {
|
|
21
|
+
console.error(`✗ ${script} failed`);
|
|
22
|
+
if (fatal) process.exit(result.status || 1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function watchScript(script, label) {
|
|
27
|
+
const child = spawn(process.execPath, [path.join(SCRIPTS, script), "--watch"], {
|
|
28
|
+
cwd: ROOT,
|
|
29
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
30
|
+
});
|
|
31
|
+
const prefix = `\x1b[90m[${label}]\x1b[0m `;
|
|
32
|
+
const pipe = (stream, out) => {
|
|
33
|
+
let buffer = "";
|
|
34
|
+
stream.on("data", (chunk) => {
|
|
35
|
+
buffer += chunk.toString();
|
|
36
|
+
const lines = buffer.split("\n");
|
|
37
|
+
buffer = lines.pop();
|
|
38
|
+
for (const line of lines) out.write(prefix + line + "\n");
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
pipe(child.stdout, process.stdout);
|
|
42
|
+
pipe(child.stderr, process.stderr);
|
|
43
|
+
child.on("exit", (code, signal) => {
|
|
44
|
+
if (shuttingDown) return;
|
|
45
|
+
console.error(`${prefix}exited unexpectedly (${signal || code})`);
|
|
46
|
+
shutdown(1);
|
|
47
|
+
});
|
|
48
|
+
children.push(child);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function shutdown(code) {
|
|
52
|
+
if (shuttingDown) return;
|
|
53
|
+
shuttingDown = true;
|
|
54
|
+
for (const child of children) {
|
|
55
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
56
|
+
try {
|
|
57
|
+
child.kill();
|
|
58
|
+
} catch (e) {}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
process.exit(code);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
process.on("SIGINT", () => shutdown(0));
|
|
65
|
+
process.on("SIGTERM", () => shutdown(0));
|
|
66
|
+
|
|
67
|
+
const timers = new Map();
|
|
68
|
+
function debounce(key, label, fn) {
|
|
69
|
+
const existing = timers.get(key);
|
|
70
|
+
if (existing) clearTimeout(existing);
|
|
71
|
+
timers.set(
|
|
72
|
+
key,
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
timers.delete(key);
|
|
75
|
+
process.stdout.write(`\x1b[90m[${label}]\x1b[0m ${key} changed\n`);
|
|
76
|
+
fn();
|
|
77
|
+
}, 100),
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
console.log("ArekUI dev\n");
|
|
82
|
+
|
|
83
|
+
run("split.js", { fatal: true });
|
|
84
|
+
run("build-css.js", { fatal: true });
|
|
85
|
+
run("build-js.js", { fatal: true });
|
|
86
|
+
|
|
87
|
+
watchScript("build-css.js", "css");
|
|
88
|
+
watchScript("build-js.js", "js");
|
|
89
|
+
|
|
90
|
+
const rootCss = path.join(ROOT, "arekui.css");
|
|
91
|
+
if (fs.existsSync(rootCss)) {
|
|
92
|
+
fs.watchFile(rootCss, { interval: 200 }, () => {
|
|
93
|
+
debounce("arekui.css", "split", () => run("split.js"));
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log("Watching arekui.css (Ctrl+C to stop)\n");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// The nine base-layer imports every ArekUI entry point starts with. Both
|
|
2
|
+
// consumers must emit them identically, so they live here once instead of
|
|
3
|
+
// being kept in sync by hand: split.js (the src/ orchestrators) and
|
|
4
|
+
// build-custom.js (the arekui-build consumer bundle).
|
|
5
|
+
|
|
6
|
+
const BASE_IMPORTS = [
|
|
7
|
+
'@import "./base/tokens.css" layer(base);',
|
|
8
|
+
'@import "./base/theme-default.css" layer(base);',
|
|
9
|
+
'@import "./base/theme-neo.css" layer(base);',
|
|
10
|
+
'@import "./base/theme-pixel.css" layer(base);',
|
|
11
|
+
'@import "./base/theme-brutalist.css" layer(base);',
|
|
12
|
+
'@import "./base/reset.css" layer(base);',
|
|
13
|
+
'@import "./base/neo-overrides.css" layer(themes);',
|
|
14
|
+
'@import "./base/pixel-overrides.css" layer(themes);',
|
|
15
|
+
'@import "./base/brutalist-overrides.css" layer(themes);',
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
module.exports = { BASE_IMPORTS };
|
package/scripts/split.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const { BASE_IMPORTS } = require("./imports");
|
|
6
|
+
|
|
7
|
+
const SRC_FILE = path.join(__dirname, "..", "arekui.css");
|
|
8
|
+
const SRC_DIR = path.join(__dirname, "..", "src");
|
|
9
|
+
|
|
10
|
+
const BASE_SECTIONS = {
|
|
11
|
+
1: "tokens.css",
|
|
12
|
+
"1b": "theme-default.css",
|
|
13
|
+
"1c": "theme-neo.css",
|
|
14
|
+
"1d": "theme-pixel.css",
|
|
15
|
+
"1e": "theme-brutalist.css",
|
|
16
|
+
2: "reset.css",
|
|
17
|
+
"37": "neo-overrides.css",
|
|
18
|
+
"37b": "pixel-overrides.css",
|
|
19
|
+
"37c": "brutalist-overrides.css",
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const COMPONENT_SECTIONS = {
|
|
23
|
+
3: "button.css",
|
|
24
|
+
4: "navbar.css",
|
|
25
|
+
5: "menu.css",
|
|
26
|
+
6: "swap.css",
|
|
27
|
+
7: "card.css",
|
|
28
|
+
8: "badge.css",
|
|
29
|
+
9: "modal.css",
|
|
30
|
+
10: "carousel.css",
|
|
31
|
+
11: "sidebar.css",
|
|
32
|
+
12: "footer.css",
|
|
33
|
+
13: "hero.css",
|
|
34
|
+
14: "tooltip.css",
|
|
35
|
+
15: "link.css",
|
|
36
|
+
16: "join.css",
|
|
37
|
+
17: "prose.css",
|
|
38
|
+
18: "textured.css",
|
|
39
|
+
19: "forms.css",
|
|
40
|
+
20: "table.css",
|
|
41
|
+
21: "alert.css",
|
|
42
|
+
22: "tabs.css",
|
|
43
|
+
23: "accordion.css",
|
|
44
|
+
24: "progress.css",
|
|
45
|
+
25: "timeline.css",
|
|
46
|
+
26: "misc.css",
|
|
47
|
+
27: "toast.css",
|
|
48
|
+
28: "skeleton.css",
|
|
49
|
+
"28b": "loading.css",
|
|
50
|
+
29: "breadcrumb.css",
|
|
51
|
+
30: "pagination.css",
|
|
52
|
+
31: "rating.css",
|
|
53
|
+
32: "chat.css",
|
|
54
|
+
33: "tag.css",
|
|
55
|
+
34: "popover.css",
|
|
56
|
+
35: "file-upload.css",
|
|
57
|
+
36: "scroll-top.css",
|
|
58
|
+
"36b": "heading.css",
|
|
59
|
+
"36c": "spinner.css",
|
|
60
|
+
"36d": "docs.css",
|
|
61
|
+
"36e": "broadsheet.css",
|
|
62
|
+
"36f": "empty.css",
|
|
63
|
+
"36g": "segmented.css",
|
|
64
|
+
"36h": "kbd.css",
|
|
65
|
+
"36i": "description-list.css",
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const UTILITY_SECTIONS = {
|
|
69
|
+
spacing: "spacing.css",
|
|
70
|
+
"layout & flex & grid": "layout.css",
|
|
71
|
+
typography: "typography.css",
|
|
72
|
+
sizing: "sizing.css",
|
|
73
|
+
colors: "colors.css",
|
|
74
|
+
"border, radius, shadow, position, misc": "borders.css",
|
|
75
|
+
"hover states": "hover.css",
|
|
76
|
+
responsive: "responsive.css",
|
|
77
|
+
neobrutalism: "neo-utilities.css",
|
|
78
|
+
"pixel-art": "pixel-utilities.css",
|
|
79
|
+
brutalist: "brutalist-utilities.css",
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
function split() {
|
|
83
|
+
const content = fs.readFileSync(SRC_FILE, "utf-8");
|
|
84
|
+
|
|
85
|
+
for (const dir of ["base", "components", "utilities"]) {
|
|
86
|
+
fs.mkdirSync(path.join(SRC_DIR, dir), { recursive: true });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const sectionRegex =
|
|
90
|
+
/\/\*\s*={10,}\s*\n\s*(\d+[a-z]?)\.\s+(.+?)\s*\n(?:[\s\S]*?)\s*={10,}\s*\*\//g;
|
|
91
|
+
const sections = [];
|
|
92
|
+
let m;
|
|
93
|
+
while ((m = sectionRegex.exec(content)) !== null) {
|
|
94
|
+
sections.push({
|
|
95
|
+
raw: m[1],
|
|
96
|
+
num: parseInt(m[1], 10),
|
|
97
|
+
name: m[2].trim(),
|
|
98
|
+
headerEnd: m.index + m[0].length,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
for (let i = 0; i < sections.length; i++) {
|
|
103
|
+
const sec = sections[i];
|
|
104
|
+
const nextStart =
|
|
105
|
+
i + 1 < sections.length
|
|
106
|
+
? content.lastIndexOf("/*", sections[i + 1].headerEnd - 100)
|
|
107
|
+
: content.length;
|
|
108
|
+
|
|
109
|
+
let start = sec.headerEnd;
|
|
110
|
+
while (
|
|
111
|
+
start < content.length &&
|
|
112
|
+
(content[start] === "\n" || content[start] === "\r")
|
|
113
|
+
) {
|
|
114
|
+
start++;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const chunk = content.substring(start, nextStart).trim();
|
|
118
|
+
|
|
119
|
+
let outFile = null;
|
|
120
|
+
let outDir = null;
|
|
121
|
+
|
|
122
|
+
if (BASE_SECTIONS[sec.raw]) {
|
|
123
|
+
outFile = BASE_SECTIONS[sec.raw];
|
|
124
|
+
outDir = "base";
|
|
125
|
+
} else {
|
|
126
|
+
if (sec.name.toUpperCase().includes("UTILITIES")) {
|
|
127
|
+
for (const [keyword, filename] of Object.entries(UTILITY_SECTIONS)) {
|
|
128
|
+
if (sec.name.toLowerCase().includes(keyword.toLowerCase())) {
|
|
129
|
+
outFile = filename;
|
|
130
|
+
outDir = "utilities";
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (!outFile && COMPONENT_SECTIONS[sec.raw]) {
|
|
136
|
+
outFile = COMPONENT_SECTIONS[sec.raw];
|
|
137
|
+
outDir = "components";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (outFile && outDir && chunk) {
|
|
142
|
+
const filePath = path.join(SRC_DIR, outDir, outFile);
|
|
143
|
+
const stem = outFile
|
|
144
|
+
.replace(/\.css$/i, "")
|
|
145
|
+
.replace(/[^a-z0-9]+/gi, " ")
|
|
146
|
+
.trim()
|
|
147
|
+
.toUpperCase();
|
|
148
|
+
const name = sec.name.replace(/[^a-z0-9]+/gi, " ").trim().toUpperCase();
|
|
149
|
+
const header = name === stem ? "" : `/* ${sec.name} */\n`;
|
|
150
|
+
fs.writeFileSync(filePath, `${header}${chunk}\n`);
|
|
151
|
+
console.log(`✓ ${outDir}/${outFile} (${chunk.split("\n").length} lines)`);
|
|
152
|
+
} else {
|
|
153
|
+
console.log(`⚠ Skipped section ${sec.num}: ${sec.name}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
createOrchestrator();
|
|
158
|
+
console.log("\n✓ Split complete!");
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Files in section order. Object keys iterate the integer-like entries
|
|
162
|
+
// ("3".."36") before the lettered ones ("28b", "36b"), so Object.values
|
|
163
|
+
// alone would list loading.css after scroll-top.css instead of right after
|
|
164
|
+
// skeleton.css. Sort keys back by section number, then by suffix.
|
|
165
|
+
function sectionFiles(sections) {
|
|
166
|
+
return Object.keys(sections)
|
|
167
|
+
.sort((a, b) => parseInt(a, 10) - parseInt(b, 10) || a.localeCompare(b))
|
|
168
|
+
.map((key) => sections[key]);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function createOrchestrator() {
|
|
172
|
+
// Import lines mirror the section maps above: split order is cascade order,
|
|
173
|
+
// so reordering a section reorders the generated bundles too.
|
|
174
|
+
const importLines = (files, layer) =>
|
|
175
|
+
files.map((file) => `@import "./${layer}/${file}" layer(${layer});`);
|
|
176
|
+
|
|
177
|
+
const lines = [
|
|
178
|
+
"/* ArekUI v2.0.0 - CSS Framework */",
|
|
179
|
+
"/* https://github.com/andikarekatias/arekui */",
|
|
180
|
+
"",
|
|
181
|
+
"@layer base, components, themes, utilities;",
|
|
182
|
+
"",
|
|
183
|
+
"/* Base layer */",
|
|
184
|
+
...BASE_IMPORTS,
|
|
185
|
+
"",
|
|
186
|
+
"/* Components */",
|
|
187
|
+
...importLines(sectionFiles(COMPONENT_SECTIONS), "components"),
|
|
188
|
+
"",
|
|
189
|
+
"/* Utilities */",
|
|
190
|
+
// Utility keys are plain words, so Object.values already lists them in
|
|
191
|
+
// the order they are written above.
|
|
192
|
+
...importLines(Object.values(UTILITY_SECTIONS), "utilities"),
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
fs.writeFileSync(path.join(SRC_DIR, "arekui.css"), lines.join("\n"));
|
|
196
|
+
console.log("✓ src/arekui.css (orchestrator)");
|
|
197
|
+
|
|
198
|
+
const lookImports = new Set([
|
|
199
|
+
"./base/neo-overrides.css",
|
|
200
|
+
"./base/pixel-overrides.css",
|
|
201
|
+
"./base/brutalist-overrides.css",
|
|
202
|
+
"./utilities/neo-utilities.css",
|
|
203
|
+
"./utilities/pixel-utilities.css",
|
|
204
|
+
"./utilities/brutalist-utilities.css",
|
|
205
|
+
]);
|
|
206
|
+
const styleImports = new Set([
|
|
207
|
+
"./base/theme-neo.css",
|
|
208
|
+
"./base/theme-pixel.css",
|
|
209
|
+
"./base/theme-brutalist.css",
|
|
210
|
+
]);
|
|
211
|
+
const without = (drop) =>
|
|
212
|
+
lines.filter((line) => {
|
|
213
|
+
const m = /^@import "(\.\/[^"]+)"/.exec(line);
|
|
214
|
+
return !m || !drop.has(m[1]);
|
|
215
|
+
});
|
|
216
|
+
const base = without(
|
|
217
|
+
new Set([...styleImports, "./base/theme-default.css", ...lookImports]),
|
|
218
|
+
);
|
|
219
|
+
fs.writeFileSync(path.join(SRC_DIR, "arekui.base.css"), base.join("\n"));
|
|
220
|
+
console.log("✓ src/arekui.base.css (themeless orchestrator)");
|
|
221
|
+
|
|
222
|
+
const core = without(new Set([...styleImports, ...lookImports]));
|
|
223
|
+
fs.writeFileSync(path.join(SRC_DIR, "arekui.core.css"), core.join("\n"));
|
|
224
|
+
console.log("✓ src/arekui.core.css (default light+dark orchestrator)");
|
|
225
|
+
|
|
226
|
+
const addOn = (file, imports) => {
|
|
227
|
+
const body = [...lines.slice(0, 5), ...imports].join("\n") + "\n";
|
|
228
|
+
fs.writeFileSync(path.join(SRC_DIR, file), body);
|
|
229
|
+
console.log(`✓ src/${file} (theme add-on orchestrator)`);
|
|
230
|
+
};
|
|
231
|
+
addOn("arekui.default.css", [
|
|
232
|
+
'@import "./base/theme-default.css" layer(base);',
|
|
233
|
+
]);
|
|
234
|
+
addOn("arekui.neo.css", [
|
|
235
|
+
'@import "./base/theme-neo.css" layer(base);',
|
|
236
|
+
'@import "./base/neo-overrides.css" layer(themes);',
|
|
237
|
+
'@import "./utilities/neo-utilities.css" layer(utilities);',
|
|
238
|
+
]);
|
|
239
|
+
addOn("arekui.pixel.css", [
|
|
240
|
+
'@import "./base/theme-pixel.css" layer(base);',
|
|
241
|
+
'@import "./base/pixel-overrides.css" layer(themes);',
|
|
242
|
+
'@import "./utilities/pixel-utilities.css" layer(utilities);',
|
|
243
|
+
]);
|
|
244
|
+
addOn("arekui.brutalist.css", [
|
|
245
|
+
'@import "./base/theme-brutalist.css" layer(base);',
|
|
246
|
+
'@import "./base/brutalist-overrides.css" layer(themes);',
|
|
247
|
+
'@import "./utilities/brutalist-utilities.css" layer(utilities);',
|
|
248
|
+
]);
|
|
249
|
+
// Component add-on, same shape as the theme add-ons: shared header plus its
|
|
250
|
+
// own import — the sheet tokens and components ride together in one file.
|
|
251
|
+
addOn("arekui.broadsheet.css", [
|
|
252
|
+
'@import "./components/broadsheet.css" layer(components);',
|
|
253
|
+
]);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
split();
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* ArekUI v2.0.0 - CSS Framework */
|
|
2
|
+
/* https://github.com/andikarekatias/arekui */
|
|
3
|
+
|
|
4
|
+
@layer base, components, themes, utilities;
|
|
5
|
+
|
|
6
|
+
/* Base layer */
|
|
7
|
+
@import "./base/tokens.css" layer(base);
|
|
8
|
+
@import "./base/reset.css" layer(base);
|
|
9
|
+
|
|
10
|
+
/* Components */
|
|
11
|
+
@import "./components/button.css" layer(components);
|
|
12
|
+
@import "./components/navbar.css" layer(components);
|
|
13
|
+
@import "./components/menu.css" layer(components);
|
|
14
|
+
@import "./components/swap.css" layer(components);
|
|
15
|
+
@import "./components/card.css" layer(components);
|
|
16
|
+
@import "./components/badge.css" layer(components);
|
|
17
|
+
@import "./components/modal.css" layer(components);
|
|
18
|
+
@import "./components/carousel.css" layer(components);
|
|
19
|
+
@import "./components/sidebar.css" layer(components);
|
|
20
|
+
@import "./components/footer.css" layer(components);
|
|
21
|
+
@import "./components/hero.css" layer(components);
|
|
22
|
+
@import "./components/tooltip.css" layer(components);
|
|
23
|
+
@import "./components/link.css" layer(components);
|
|
24
|
+
@import "./components/join.css" layer(components);
|
|
25
|
+
@import "./components/prose.css" layer(components);
|
|
26
|
+
@import "./components/textured.css" layer(components);
|
|
27
|
+
@import "./components/forms.css" layer(components);
|
|
28
|
+
@import "./components/table.css" layer(components);
|
|
29
|
+
@import "./components/alert.css" layer(components);
|
|
30
|
+
@import "./components/tabs.css" layer(components);
|
|
31
|
+
@import "./components/accordion.css" layer(components);
|
|
32
|
+
@import "./components/progress.css" layer(components);
|
|
33
|
+
@import "./components/timeline.css" layer(components);
|
|
34
|
+
@import "./components/misc.css" layer(components);
|
|
35
|
+
@import "./components/toast.css" layer(components);
|
|
36
|
+
@import "./components/skeleton.css" layer(components);
|
|
37
|
+
@import "./components/loading.css" layer(components);
|
|
38
|
+
@import "./components/breadcrumb.css" layer(components);
|
|
39
|
+
@import "./components/pagination.css" layer(components);
|
|
40
|
+
@import "./components/rating.css" layer(components);
|
|
41
|
+
@import "./components/chat.css" layer(components);
|
|
42
|
+
@import "./components/tag.css" layer(components);
|
|
43
|
+
@import "./components/popover.css" layer(components);
|
|
44
|
+
@import "./components/file-upload.css" layer(components);
|
|
45
|
+
@import "./components/scroll-top.css" layer(components);
|
|
46
|
+
@import "./components/heading.css" layer(components);
|
|
47
|
+
@import "./components/spinner.css" layer(components);
|
|
48
|
+
@import "./components/docs.css" layer(components);
|
|
49
|
+
@import "./components/broadsheet.css" layer(components);
|
|
50
|
+
@import "./components/empty.css" layer(components);
|
|
51
|
+
@import "./components/segmented.css" layer(components);
|
|
52
|
+
@import "./components/kbd.css" layer(components);
|
|
53
|
+
@import "./components/description-list.css" layer(components);
|
|
54
|
+
|
|
55
|
+
/* Utilities */
|
|
56
|
+
@import "./utilities/spacing.css" layer(utilities);
|
|
57
|
+
@import "./utilities/layout.css" layer(utilities);
|
|
58
|
+
@import "./utilities/typography.css" layer(utilities);
|
|
59
|
+
@import "./utilities/sizing.css" layer(utilities);
|
|
60
|
+
@import "./utilities/colors.css" layer(utilities);
|
|
61
|
+
@import "./utilities/borders.css" layer(utilities);
|
|
62
|
+
@import "./utilities/hover.css" layer(utilities);
|
|
63
|
+
@import "./utilities/responsive.css" layer(utilities);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* ArekUI v2.0.0 - CSS Framework */
|
|
2
|
+
/* https://github.com/andikarekatias/arekui */
|
|
3
|
+
|
|
4
|
+
@layer base, components, themes, utilities;
|
|
5
|
+
|
|
6
|
+
@import "./base/theme-brutalist.css" layer(base);
|
|
7
|
+
@import "./base/brutalist-overrides.css" layer(themes);
|
|
8
|
+
@import "./utilities/brutalist-utilities.css" layer(utilities);
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* ArekUI v2.0.0 - CSS Framework */
|
|
2
|
+
/* https://github.com/andikarekatias/arekui */
|
|
3
|
+
|
|
4
|
+
@layer base, components, themes, utilities;
|
|
5
|
+
|
|
6
|
+
/* Base layer */
|
|
7
|
+
@import "./base/tokens.css" layer(base);
|
|
8
|
+
@import "./base/theme-default.css" layer(base);
|
|
9
|
+
@import "./base/reset.css" layer(base);
|
|
10
|
+
|
|
11
|
+
/* Components */
|
|
12
|
+
@import "./components/button.css" layer(components);
|
|
13
|
+
@import "./components/navbar.css" layer(components);
|
|
14
|
+
@import "./components/menu.css" layer(components);
|
|
15
|
+
@import "./components/swap.css" layer(components);
|
|
16
|
+
@import "./components/card.css" layer(components);
|
|
17
|
+
@import "./components/badge.css" layer(components);
|
|
18
|
+
@import "./components/modal.css" layer(components);
|
|
19
|
+
@import "./components/carousel.css" layer(components);
|
|
20
|
+
@import "./components/sidebar.css" layer(components);
|
|
21
|
+
@import "./components/footer.css" layer(components);
|
|
22
|
+
@import "./components/hero.css" layer(components);
|
|
23
|
+
@import "./components/tooltip.css" layer(components);
|
|
24
|
+
@import "./components/link.css" layer(components);
|
|
25
|
+
@import "./components/join.css" layer(components);
|
|
26
|
+
@import "./components/prose.css" layer(components);
|
|
27
|
+
@import "./components/textured.css" layer(components);
|
|
28
|
+
@import "./components/forms.css" layer(components);
|
|
29
|
+
@import "./components/table.css" layer(components);
|
|
30
|
+
@import "./components/alert.css" layer(components);
|
|
31
|
+
@import "./components/tabs.css" layer(components);
|
|
32
|
+
@import "./components/accordion.css" layer(components);
|
|
33
|
+
@import "./components/progress.css" layer(components);
|
|
34
|
+
@import "./components/timeline.css" layer(components);
|
|
35
|
+
@import "./components/misc.css" layer(components);
|
|
36
|
+
@import "./components/toast.css" layer(components);
|
|
37
|
+
@import "./components/skeleton.css" layer(components);
|
|
38
|
+
@import "./components/loading.css" layer(components);
|
|
39
|
+
@import "./components/breadcrumb.css" layer(components);
|
|
40
|
+
@import "./components/pagination.css" layer(components);
|
|
41
|
+
@import "./components/rating.css" layer(components);
|
|
42
|
+
@import "./components/chat.css" layer(components);
|
|
43
|
+
@import "./components/tag.css" layer(components);
|
|
44
|
+
@import "./components/popover.css" layer(components);
|
|
45
|
+
@import "./components/file-upload.css" layer(components);
|
|
46
|
+
@import "./components/scroll-top.css" layer(components);
|
|
47
|
+
@import "./components/heading.css" layer(components);
|
|
48
|
+
@import "./components/spinner.css" layer(components);
|
|
49
|
+
@import "./components/docs.css" layer(components);
|
|
50
|
+
@import "./components/broadsheet.css" layer(components);
|
|
51
|
+
@import "./components/empty.css" layer(components);
|
|
52
|
+
@import "./components/segmented.css" layer(components);
|
|
53
|
+
@import "./components/kbd.css" layer(components);
|
|
54
|
+
@import "./components/description-list.css" layer(components);
|
|
55
|
+
|
|
56
|
+
/* Utilities */
|
|
57
|
+
@import "./utilities/spacing.css" layer(utilities);
|
|
58
|
+
@import "./utilities/layout.css" layer(utilities);
|
|
59
|
+
@import "./utilities/typography.css" layer(utilities);
|
|
60
|
+
@import "./utilities/sizing.css" layer(utilities);
|
|
61
|
+
@import "./utilities/colors.css" layer(utilities);
|
|
62
|
+
@import "./utilities/borders.css" layer(utilities);
|
|
63
|
+
@import "./utilities/hover.css" layer(utilities);
|
|
64
|
+
@import "./utilities/responsive.css" layer(utilities);
|
package/src/arekui.css
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* ArekUI v2.0.0 - CSS Framework */
|
|
2
2
|
/* https://github.com/andikarekatias/arekui */
|
|
3
3
|
|
|
4
|
-
@layer base, components, utilities;
|
|
4
|
+
@layer base, components, themes, utilities;
|
|
5
5
|
|
|
6
6
|
/* Base layer */
|
|
7
7
|
@import "./base/tokens.css" layer(base);
|
|
8
|
+
@import "./base/theme-default.css" layer(base);
|
|
9
|
+
@import "./base/theme-neo.css" layer(base);
|
|
10
|
+
@import "./base/theme-pixel.css" layer(base);
|
|
11
|
+
@import "./base/theme-brutalist.css" layer(base);
|
|
8
12
|
@import "./base/reset.css" layer(base);
|
|
9
|
-
@import "./base/neo-overrides.css" layer(
|
|
13
|
+
@import "./base/neo-overrides.css" layer(themes);
|
|
14
|
+
@import "./base/pixel-overrides.css" layer(themes);
|
|
15
|
+
@import "./base/brutalist-overrides.css" layer(themes);
|
|
10
16
|
|
|
11
17
|
/* Components */
|
|
12
18
|
@import "./components/button.css" layer(components);
|
|
@@ -17,7 +23,7 @@
|
|
|
17
23
|
@import "./components/badge.css" layer(components);
|
|
18
24
|
@import "./components/modal.css" layer(components);
|
|
19
25
|
@import "./components/carousel.css" layer(components);
|
|
20
|
-
@import "./components/
|
|
26
|
+
@import "./components/sidebar.css" layer(components);
|
|
21
27
|
@import "./components/footer.css" layer(components);
|
|
22
28
|
@import "./components/hero.css" layer(components);
|
|
23
29
|
@import "./components/tooltip.css" layer(components);
|
|
@@ -35,6 +41,7 @@
|
|
|
35
41
|
@import "./components/misc.css" layer(components);
|
|
36
42
|
@import "./components/toast.css" layer(components);
|
|
37
43
|
@import "./components/skeleton.css" layer(components);
|
|
44
|
+
@import "./components/loading.css" layer(components);
|
|
38
45
|
@import "./components/breadcrumb.css" layer(components);
|
|
39
46
|
@import "./components/pagination.css" layer(components);
|
|
40
47
|
@import "./components/rating.css" layer(components);
|
|
@@ -43,6 +50,14 @@
|
|
|
43
50
|
@import "./components/popover.css" layer(components);
|
|
44
51
|
@import "./components/file-upload.css" layer(components);
|
|
45
52
|
@import "./components/scroll-top.css" layer(components);
|
|
53
|
+
@import "./components/heading.css" layer(components);
|
|
54
|
+
@import "./components/spinner.css" layer(components);
|
|
55
|
+
@import "./components/docs.css" layer(components);
|
|
56
|
+
@import "./components/broadsheet.css" layer(components);
|
|
57
|
+
@import "./components/empty.css" layer(components);
|
|
58
|
+
@import "./components/segmented.css" layer(components);
|
|
59
|
+
@import "./components/kbd.css" layer(components);
|
|
60
|
+
@import "./components/description-list.css" layer(components);
|
|
46
61
|
|
|
47
62
|
/* Utilities */
|
|
48
63
|
@import "./utilities/spacing.css" layer(utilities);
|
|
@@ -53,4 +68,6 @@
|
|
|
53
68
|
@import "./utilities/borders.css" layer(utilities);
|
|
54
69
|
@import "./utilities/hover.css" layer(utilities);
|
|
55
70
|
@import "./utilities/responsive.css" layer(utilities);
|
|
56
|
-
@import "./utilities/neo-utilities.css" layer(utilities);
|
|
71
|
+
@import "./utilities/neo-utilities.css" layer(utilities);
|
|
72
|
+
@import "./utilities/pixel-utilities.css" layer(utilities);
|
|
73
|
+
@import "./utilities/brutalist-utilities.css" layer(utilities);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* ArekUI v2.0.0 - CSS Framework */
|
|
2
|
+
/* https://github.com/andikarekatias/arekui */
|
|
3
|
+
|
|
4
|
+
@layer base, components, themes, utilities;
|
|
5
|
+
|
|
6
|
+
@import "./base/theme-neo.css" layer(base);
|
|
7
|
+
@import "./base/neo-overrides.css" layer(themes);
|
|
8
|
+
@import "./utilities/neo-utilities.css" layer(utilities);
|