yummacss 3.0.3 → 3.2.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.
Files changed (52) hide show
  1. package/README.md +66 -66
  2. package/dist/index.js +1 -0
  3. package/package.json +21 -26
  4. package/src/{reset/_stylecent.scss → _base.scss} +231 -231
  5. package/src/_fonts.scss +16 -16
  6. package/src/abstracts/_breakpoints.scss +45 -45
  7. package/src/abstracts/_index.scss +5 -5
  8. package/src/abstracts/_theme.scss +22 -21
  9. package/src/abstracts/_variables.scss +84 -82
  10. package/src/abstracts/functions/_create-values.scss +16 -16
  11. package/src/abstracts/functions/_ignore-neutral.scss +8 -9
  12. package/src/abstracts/functions/_index.scss +2 -2
  13. package/src/abstracts/mixins/_create-colors.scss +87 -41
  14. package/src/abstracts/mixins/_create-utilities.scss +53 -39
  15. package/src/abstracts/mixins/_index.scss +2 -2
  16. package/src/{yummacss-core.scss → core.scss} +3 -3
  17. package/src/{yummacss.scss → index.scss} +4 -4
  18. package/src/utilities/_background.scss +95 -95
  19. package/src/utilities/_border.scss +314 -313
  20. package/src/utilities/_box-model.scss +290 -290
  21. package/src/utilities/_color.scss +85 -72
  22. package/src/utilities/_effect.scss +98 -98
  23. package/src/utilities/_flexbox.scss +213 -175
  24. package/src/utilities/_grid.scss +322 -322
  25. package/src/utilities/_index.scss +14 -14
  26. package/src/utilities/_interactivity.scss +304 -304
  27. package/src/utilities/_outline.scss +53 -53
  28. package/src/utilities/_positioning.scss +436 -436
  29. package/src/utilities/_svg.scss +27 -27
  30. package/src/utilities/_table.scss +35 -35
  31. package/src/utilities/_transform.scss +164 -164
  32. package/src/utilities/_typography.scss +278 -278
  33. package/src/utilities/maps/_index.scss +12 -12
  34. package/src/utilities/maps/box-model/_dimension.scss +26 -16
  35. package/src/utilities/maps/box-model/_height.scss +26 -16
  36. package/src/utilities/maps/box-model/_margin.scss +11 -10
  37. package/src/utilities/maps/box-model/_padding.scss +11 -10
  38. package/src/utilities/maps/box-model/_width.scss +26 -16
  39. package/src/utilities/maps/flexbox/_flex-basis.scss +12 -12
  40. package/src/utilities/maps/grid/_gap.scss +5 -5
  41. package/dist/cli/commands/build.js +0 -43
  42. package/dist/cli/commands/init.js +0 -19
  43. package/dist/cli/commands/watch.js +0 -48
  44. package/dist/cli/config/defaultConfig.js +0 -9
  45. package/dist/cli/config/templates.js +0 -33
  46. package/dist/cli/lib/cli-lang.js +0 -23
  47. package/dist/cli/lib/cli-ui.js +0 -14
  48. package/dist/cli/services/configLoader.js +0 -42
  49. package/dist/cli/services/minifyService.js +0 -16
  50. package/dist/cli/services/purgeService.js +0 -12
  51. package/dist/cli/services/scssCompiler.js +0 -34
  52. package/dist/cli/src/cli.js +0 -16
@@ -1,10 +1,11 @@
1
- @use "sass:map";
2
- @use "../../../abstracts/functions/create-values" as fun;
3
- @use "../../../abstracts/variables" as vars;
4
-
5
- $yma-margin-map: map.merge(
6
- (
7
- "auto": auto,
8
- ),
9
- fun.create-values(vars.$yma-margin)
10
- );
1
+ @use "sass:map";
2
+ @use "../../../abstracts/functions/create-values" as fun;
3
+ @use "../../../abstracts/variables" as vars;
4
+
5
+ $ycss-margin-map: map.merge(
6
+ (
7
+ "auto": auto,
8
+ "px": 1px,
9
+ ),
10
+ fun.create-values(vars.$ycss-margin)
11
+ );
@@ -1,10 +1,11 @@
1
- @use "sass:map";
2
- @use "../../../abstracts/functions/create-values" as fun;
3
- @use "../../../abstracts/variables" as vars;
4
-
5
- $yma-padding-map: map.merge(
6
- (
7
- "auto": auto,
8
- ),
9
- fun.create-values(vars.$yma-padding)
10
- );
1
+ @use "sass:map";
2
+ @use "../../../abstracts/functions/create-values" as fun;
3
+ @use "../../../abstracts/variables" as vars;
4
+
5
+ $ycss-padding-map: map.merge(
6
+ (
7
+ "auto": auto,
8
+ "px": 1px,
9
+ ),
10
+ fun.create-values(vars.$ycss-padding)
11
+ );
@@ -1,16 +1,26 @@
1
- @use "sass:map";
2
- @use "../../../abstracts/functions/create-values" as fun;
3
- @use "../../../abstracts/variables" as vars;
4
-
5
- $yma-width-map: map.merge(
6
- (
7
- "auto": auto,
8
- "dvh": 100dvh,
9
- "fc": fit-content,
10
- "full": 100%,
11
- "half": 50%,
12
- "max": max-content,
13
- "min": min-content,
14
- ),
15
- fun.create-values(vars.$yma-width)
16
- );
1
+ @use "sass:map";
2
+ @use "../../../abstracts/functions/create-values" as fun;
3
+ @use "../../../abstracts/variables" as vars;
4
+ @use "../../../abstracts/_breakpoints.scss" as bp;
5
+
6
+ $ycss-width-map: map.merge(
7
+ (
8
+ "auto": auto,
9
+ "dvh": 100dvh,
10
+ "dvw": 100dvw,
11
+ "fc": fit-content,
12
+ "full": 100%,
13
+ "half": 50%,
14
+ "max": max-content,
15
+ "min": min-content,
16
+ "px": 1px,
17
+ "vh": 100vh,
18
+ "vw": 100vw,
19
+ "sm": map.get(bp.$ycss-breakpoints, "sm"),
20
+ "md": map.get(bp.$ycss-breakpoints, "md"),
21
+ "lg": map.get(bp.$ycss-breakpoints, "lg"),
22
+ "xl": map.get(bp.$ycss-breakpoints, "xl"),
23
+ "xxl": map.get(bp.$ycss-breakpoints, "xxl"),
24
+ ),
25
+ fun.create-values(vars.$ycss-width)
26
+ );
@@ -1,12 +1,12 @@
1
- @use "sass:map";
2
- @use "../../../abstracts/functions/create-values" as fun;
3
- @use "../../../abstracts/variables" as vars;
4
-
5
- $yma-flex-basis-map: map.merge(
6
- (
7
- "auto": auto,
8
- "full": 100%,
9
- "half": 50%,
10
- ),
11
- fun.create-values(vars.$yma-flex-basis)
12
- );
1
+ @use "sass:map";
2
+ @use "../../../abstracts/functions/create-values" as fun;
3
+ @use "../../../abstracts/variables" as vars;
4
+
5
+ $ycss-flex-basis-map: map.merge(
6
+ (
7
+ "auto": auto,
8
+ "full": 100%,
9
+ "half": 50%,
10
+ ),
11
+ fun.create-values(vars.$ycss-flex-basis)
12
+ );
@@ -1,5 +1,5 @@
1
- @use "sass:map";
2
- @use "../../../abstracts/functions/create-values" as fun;
3
- @use "../../../abstracts/variables" as vars;
4
-
5
- $yma-gap-map: fun.create-values(vars.$yma-gap);
1
+ @use "sass:map";
2
+ @use "../../../abstracts/functions/create-values" as fun;
3
+ @use "../../../abstracts/variables" as vars;
4
+
5
+ $ycss-gap-map: fun.create-values(vars.$ycss-gap);
@@ -1,43 +0,0 @@
1
- import { writeFileSync } from "fs";
2
- import { messages } from "../lib/cli-lang.js";
3
- import { cli } from "../lib/cli-ui.js";
4
- import { loadConfig } from "../services/configLoader.js";
5
- import { minifyCSS } from "../services/minifyService.js";
6
- import { purgeCSS } from "../services/purgeService.js";
7
- import { compileSCSS } from "../services/scssCompiler.js";
8
- let cache = {};
9
- export async function build(existingConfig, forceRebuild = false) {
10
- const buildSpinner = cli.startSpinner(messages.build.start);
11
- const startTime = Date.now();
12
- try {
13
- const config = existingConfig || (await loadConfig());
14
- const configHash = JSON.stringify(config);
15
- const configChanged = cache.configHash !== configHash;
16
- let css;
17
- if (forceRebuild || configChanged || !cache.css) {
18
- buildSpinner.text = messages.build.compiling;
19
- const result = await compileSCSS(config);
20
- css = result.css;
21
- cache = {
22
- css: result.css,
23
- dependencies: result.dependencies,
24
- configHash,
25
- };
26
- }
27
- else {
28
- css = cache.css;
29
- buildSpinner.text = messages.build.usingCache;
30
- }
31
- buildSpinner.text = messages.build.purging;
32
- const purgedCSS = await purgeCSS(css, config);
33
- buildSpinner.text = messages.build.minifying;
34
- const finalCSS = minifyCSS(purgedCSS, config);
35
- writeFileSync(config.output, finalCSS);
36
- buildSpinner.succeed(messages.build.success(Date.now() - startTime, config.output));
37
- }
38
- catch (error) {
39
- buildSpinner.fail(messages.build.fail);
40
- cli.error(error instanceof Error ? error.message : messages.common.unknownError);
41
- process.exit(1);
42
- }
43
- }
@@ -1,19 +0,0 @@
1
- import { writeFileSync } from "fs";
2
- import { generateConfigFile } from "../config/templates.js";
3
- import { messages } from "../lib/cli-lang.js";
4
- import { cli } from "../lib/cli-ui.js";
5
- const DEFAULT_CONFIG_EXTENSION = ".js";
6
- export function init() {
7
- const init = cli.startSpinner(messages.init.start);
8
- try {
9
- const configContent = generateConfigFile(DEFAULT_CONFIG_EXTENSION);
10
- const configFileName = `yumma.config${DEFAULT_CONFIG_EXTENSION}`;
11
- writeFileSync(configFileName, configContent);
12
- init.succeed(messages.init.success);
13
- }
14
- catch (error) {
15
- init.fail(messages.init.fail);
16
- cli.error(error instanceof Error ? error.message : messages.common.unknownError);
17
- process.exit(1);
18
- }
19
- }
@@ -1,48 +0,0 @@
1
- import chok from "chokidar";
2
- import { globby } from "globby";
3
- import { messages } from "../lib/cli-lang.js";
4
- import { cli } from "../lib/cli-ui.js";
5
- import { loadConfig } from "../services/configLoader.js";
6
- import { build } from "./build.js";
7
- let currentConfig;
8
- let buildTimeout = null;
9
- let changedFiles = new Set();
10
- export async function watch() {
11
- const watchSpinner = cli.startSpinner(messages.watch.start);
12
- try {
13
- currentConfig = await loadConfig();
14
- await build(currentConfig, true);
15
- const files = await globby(currentConfig.source);
16
- const watcher = chok.watch(files, {
17
- awaitWriteFinish: {
18
- pollInterval: 50,
19
- stabilityThreshold: 200,
20
- },
21
- ignored: /(^|[/\\])\../,
22
- ignoreInitial: true,
23
- persistent: true,
24
- });
25
- watcher
26
- .on("add", (path) => handleChange(path, "added"))
27
- .on("change", (path) => handleChange(path, "changed"))
28
- .on("unlink", (path) => handleChange(path, "removed"));
29
- function handleChange(path, event) {
30
- changedFiles.add(path);
31
- if (buildTimeout) {
32
- clearTimeout(buildTimeout);
33
- }
34
- buildTimeout = setTimeout(async () => {
35
- if (changedFiles.size > 0) {
36
- await build(currentConfig, true);
37
- changedFiles.clear();
38
- }
39
- buildTimeout = null;
40
- }, 500); // 500ms
41
- }
42
- }
43
- catch (error) {
44
- watchSpinner.fail(messages.watch.fail);
45
- cli.error(error instanceof Error ? error.message : messages.common.unknownError);
46
- process.exit(1);
47
- }
48
- }
@@ -1,9 +0,0 @@
1
- const defaultConfig = {
2
- source: [""],
3
- output: "",
4
- buildOptions: {
5
- reset: true,
6
- minify: false,
7
- },
8
- };
9
- export { defaultConfig };
@@ -1,33 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { join, dirname } from "path";
3
- import { fileURLToPath } from "url";
4
- import { defaultConfig } from "./defaultConfig.js";
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = dirname(__filename);
7
- const TEMPLATES_DIR = join(__dirname, "templates");
8
- const CONFIG_PLACEHOLDER = "{{CONFIG}}";
9
- const SUPPORTED_TEMPLATES = [
10
- { extension: ".js", templateFile: "yumma.config.js.template" },
11
- ];
12
- function loadTemplate(templateFile) {
13
- const templatePath = join(TEMPLATES_DIR, templateFile);
14
- return readFileSync(templatePath, "utf-8");
15
- }
16
- function generateConfigContent(template, config) {
17
- const configString = JSON.stringify(config, null, 2);
18
- return template.replace(CONFIG_PLACEHOLDER, configString);
19
- }
20
- export function generateConfigFile(extension) {
21
- const templateInfo = SUPPORTED_TEMPLATES.find(t => t.extension === extension);
22
- if (!templateInfo) {
23
- throw new Error(`Unsupported config extension: ${extension}`);
24
- }
25
- const template = loadTemplate(templateInfo.templateFile);
26
- return generateConfigContent(template, defaultConfig);
27
- }
28
- export function getSupportedExtensions() {
29
- return SUPPORTED_TEMPLATES.map(t => t.extension);
30
- }
31
- export function isSupportedExtension(extension) {
32
- return SUPPORTED_TEMPLATES.some(t => t.extension === extension);
33
- }
@@ -1,23 +0,0 @@
1
- export const messages = {
2
- build: {
3
- start: "Building...",
4
- compiling: "Compiling...",
5
- usingCache: "Using cache...",
6
- purging: "Purging...",
7
- minifying: "Minifying...",
8
- success: (ms, output) => `Build done in ${ms}ms. (${output})`,
9
- fail: "Build failed.",
10
- },
11
- init: {
12
- start: "Creating config...",
13
- success: "Config created.",
14
- fail: "Config failed.",
15
- },
16
- watch: {
17
- start: "Watching...",
18
- fail: "Watch failed.",
19
- },
20
- common: {
21
- unknownError: "Unknown error.",
22
- },
23
- };
@@ -1,14 +0,0 @@
1
- import ora from "ora";
2
- const spinner = ora({
3
- spinner: "sand",
4
- });
5
- const cli = {
6
- success: (msg) => console.log(`✔ ${msg}`),
7
- info: (msg) => console.log(`ℹ ${msg}`),
8
- error: (msg) => console.log(`✗ ${msg}`),
9
- startSpinner: (text) => {
10
- const spinner = ora({ spinner: "sand", color: "white" }).start(text);
11
- return spinner;
12
- },
13
- };
14
- export { spinner, cli };
@@ -1,42 +0,0 @@
1
- import { join, extname } from "path";
2
- import { pathToFileURL } from "url";
3
- import { existsSync } from "fs";
4
- import { defaultConfig } from "../config/defaultConfig.js";
5
- import { getSupportedExtensions } from "../config/templates.js";
6
- const CONFIG_BASE = "yumma.config";
7
- const SUPPORTED_EXTENSIONS = getSupportedExtensions();
8
- const EXTENSION_LOADERS = {
9
- ".js": async (path) => {
10
- const configUrl = pathToFileURL(path).href;
11
- return (await import(configUrl)).default;
12
- },
13
- };
14
- function findConfigFile(cwd) {
15
- for (const ext of SUPPORTED_EXTENSIONS) {
16
- const file = join(cwd, `${CONFIG_BASE}${ext}`);
17
- if (existsSync(file))
18
- return file;
19
- }
20
- return null;
21
- }
22
- export async function loadConfig() {
23
- const cwd = process.cwd();
24
- const configPath = findConfigFile(cwd);
25
- if (!configPath) {
26
- throw new Error(`No config file found. Supported: ${CONFIG_BASE}${SUPPORTED_EXTENSIONS.join(", ")}`);
27
- }
28
- const ext = extname(configPath);
29
- const loader = EXTENSION_LOADERS[ext];
30
- if (!loader) {
31
- throw new Error(`Unsupported config file extension: ${ext}`);
32
- }
33
- const userConfig = await loader(configPath);
34
- return {
35
- ...defaultConfig,
36
- ...userConfig,
37
- buildOptions: {
38
- ...defaultConfig.buildOptions,
39
- ...userConfig.buildOptions,
40
- },
41
- };
42
- }
@@ -1,16 +0,0 @@
1
- import { transform } from "lightningcss";
2
- export function minifyCSS(css, config) {
3
- try {
4
- const result = transform({
5
- filename: "style.css",
6
- code: Buffer.from(css),
7
- minify: config.buildOptions.minify,
8
- sourceMap: false,
9
- });
10
- return result.code.toString();
11
- }
12
- catch (error) {
13
- console.error("Minification error:", error);
14
- throw error;
15
- }
16
- }
@@ -1,12 +0,0 @@
1
- import { globby } from "globby";
2
- import { PurgeCSS } from "purgecss";
3
- export async function purgeCSS(css, config) {
4
- const purgeCSSResult = await new PurgeCSS().purge({
5
- content: await globby(config.source),
6
- css: [{ raw: css }],
7
- defaultExtractor: (content) => {
8
- return content.match(/[\w-/\\:]+/g) || [];
9
- },
10
- });
11
- return purgeCSSResult[0].css;
12
- }
@@ -1,34 +0,0 @@
1
- import { dirname, join } from "path";
2
- import { fileURLToPath } from "url";
3
- import * as sass from "sass-embedded";
4
- const __filename = fileURLToPath(import.meta.url);
5
- const __dirname = dirname(__filename);
6
- const packageRoot = join(__dirname, "../../..");
7
- export async function compileSCSS(config) {
8
- const scssFile = config.buildOptions.reset
9
- ? "yummacss.scss"
10
- : "yummacss-core.scss";
11
- try {
12
- const result = await sass.compileAsync(join(packageRoot, "src", scssFile), {
13
- style: "expanded",
14
- loadPaths: [join(packageRoot, "src")],
15
- importers: [
16
- {
17
- findFileUrl(url) {
18
- return new URL(url, `file://${join(packageRoot, "src/")}`);
19
- },
20
- },
21
- ],
22
- });
23
- return {
24
- css: result.css,
25
- dependencies: result.loadedUrls
26
- .filter((url) => url.protocol === "file:")
27
- .map((url) => fileURLToPath(url)),
28
- };
29
- }
30
- catch (error) {
31
- console.error("SCSS compilation error:", error);
32
- throw error;
33
- }
34
- }
@@ -1,16 +0,0 @@
1
- import { Command } from "commander";
2
- import { build } from "../commands/build.js";
3
- import { init } from "../commands/init.js";
4
- import { watch } from "../commands/watch.js";
5
- const program = new Command();
6
- program.name("yummacss").description("Yumma CSS CLI");
7
- program.command("init").description("Create config file.").action(init);
8
- program
9
- .command("build")
10
- .description("Build styles.")
11
- .action(() => build().catch(() => process.exit(1)));
12
- program
13
- .command("watch")
14
- .description("Build styles automatically.")
15
- .action(() => watch().catch(() => process.exit(1)));
16
- program.parse(process.argv);