diff --git a/.editorconfig b/.editorconfig index c6c8b36..aaac325 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,8 +1,7 @@ root = true [*] -indent_style = space -indent_size = 2 +indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true diff --git a/.prettierrc b/.prettierrc index cce9d3c..ee3bfe7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,4 @@ { - "semi": false + "semi": false, + "useTabs": true } diff --git a/README.md b/README.md index 7193293..7224685 100644 --- a/README.md +++ b/README.md @@ -15,23 +15,33 @@ yarn add @ivteplo/utilities.css ### Via CDN Add this piece of code into the `` tag in your HTML file: + ```html - + ``` Or, if you want to use the minified version: + ```html - + ``` ### Import from JavaScript This requires a bundler that supports importing CSS: + ```javascript import "@ivteplo/utilities.css/build/main.css" ``` Or minified version: + ```javascript import "@ivteplo/utilities.css/build/main.min.css" ``` @@ -39,11 +49,13 @@ import "@ivteplo/utilities.css/build/main.min.css" ### Import from CSS Using bundler: + ```css @import "@ivteplo/utilities.css"; ``` Using CDN: + ```css @import "https://unpkg.com/@ivteplo/utilities.css/build/main.min.css"; ``` @@ -52,23 +64,23 @@ Using CDN: ### Flexbox -- `.row` - flexbox container with horizontal direction - - `.reversed-order` - reverse the order of items - - `.wrap` - wrap the items that overflow the horizontal axis to a new line - - `.reversed-wrap` - the same as `.wrap`, but in reverse order - - `.no-wrap` - disable wrapping of children - - `.items-start`, `.items-center`, `.items-end`, `.items-stretch`, `.items-baseline` - vertical alignment of children - - `.content-start`, `.content-center`, `.content-end`, `.content-stretch`, `.content-baseline` - vertical alignment of children if there some children have been wrapped to a new row - - `.justify-start`, `.justify-center`, `.justify-end`, `.justify-stretch`, `.justify-baseline` - horizontal alignment of children -- `.column` - flexbox container with vertical direction - - `.reversed-order` - reverse the order of items - - `.wrap` - wrap the items that overflow the vertical axis to a new column - - `.reversed-wrap` - the same as `.wrap`, but in reverse order - - `.no-wrap` - disable wrapping of children - - `.items-start`, `.items-center`, `.items-end`, `.items-stretch`, `.items-baseline` - horizontal alignment of children - - `.content-start`, `.content-center`, `.content-end`, `.content-stretch`, `.content-baseline` - horizontal alignment of children if there some children have been wrapped to a new column - - `.justify-start`, `.justify-center`, `.justify-end`, `.justify-stretch`, `.justify-baseline` - vertical alignment of children -- `.fill` - fill the parent, applies to a child of a flexbox container +- `.row` — flexbox container with horizontal direction + - `.reversed-order` — reverse the order of items + - `.wrap` — wrap the items that overflow the horizontal axis to a new line + - `.reversed-wrap` — the same as `.wrap`, but in reverse order + - `.no-wrap` — disable wrapping of children + - `.items-start`, `.items-center`, `.items-end`, `.items-stretch`, `.items-baseline` — vertical alignment of children + - `.content-start`, `.content-center`, `.content-end`, `.content-stretch`, `.content-baseline` — vertical alignment of children if there some children have been wrapped to a new row + - `.justify-start`, `.justify-center`, `.justify-end`, `.justify-stretch`, `.justify-baseline` — horizontal alignment of children +- `.column` — flexbox container with vertical direction + - `.reversed-order` — reverse the order of items + - `.wrap` — wrap the items that overflow the vertical axis to a new column + - `.reversed-wrap` — the same as `.wrap`, but in reverse order + - `.no-wrap` — disable wrapping of children + - `.items-start`, `.items-center`, `.items-end`, `.items-stretch`, `.items-baseline` — horizontal alignment of children + - `.content-start`, `.content-center`, `.content-end`, `.content-stretch`, `.content-baseline` — horizontal alignment of children if there some children have been wrapped to a new column + - `.justify-start`, `.justify-center`, `.justify-end`, `.justify-stretch`, `.justify-baseline` — vertical alignment of children +- `.fill` — fill the parent, applies to a child of a flexbox container ### Fonts @@ -82,8 +94,15 @@ Using CDN: - `.font-bold` (700) - `.font-extra-bold` (800) - `.font-black` (900) +- Font styles + - `.font-normal` — normal style + - `.font-italic` — italic font + - `.font-oblique` — oblique font - Font families - - `.font-system` - default system font + - `.font-system` — default system font + - `.font-monospace` — cross-platform monospace font + - `.font-serif` — cross-platform serif font + - `.font-sans-serif` — cross-platform sans-serif font ### Text @@ -96,11 +115,13 @@ Using CDN: ### Miscellaneous Selection of text and other objects: -- `.selectable` - enable selection -- `.not-selectable` - disable selection + +- `.selectable` — enable selection +- `.not-selectable` — disable selection Mouse cursor: -- `.cursor-pointer` - show pointer cursor on hover + +- `.cursor-pointer` — show pointer cursor on hover ## Development diff --git a/package-lock.json b/package-lock.json index d91829c..e558c0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ivteplo/utilities.css", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ivteplo/utilities.css", - "version": "1.1.1", + "version": "1.2.0", "license": "Apache-2.0", "devDependencies": { "concurrently": "^8.0.1", @@ -50,6 +50,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -168,6 +181,19 @@ "node": ">=6" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -222,6 +248,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -327,18 +363,6 @@ "node": ">=8" } }, - "node_modules/sass/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/sass/node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -366,18 +390,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/sass/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/sass/node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -416,15 +428,6 @@ "node": ">=8" } }, - "node_modules/sass/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/sass/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -437,18 +440,6 @@ "node": ">=8.10.0" } }, - "node_modules/sass/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", @@ -514,6 +505,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -608,6 +612,15 @@ "color-convert": "^2.0.1" } }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -693,6 +706,15 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -732,6 +754,12 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -804,15 +832,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -829,15 +848,6 @@ "readdirp": "~3.6.0" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -863,12 +873,6 @@ "binary-extensions": "^2.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -877,15 +881,6 @@ "requires": { "picomatch": "^2.2.1" } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } } } }, @@ -936,6 +931,15 @@ "has-flag": "^4.0.0" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", diff --git a/package.json b/package.json index 05de3d1..02c3e53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ivteplo/utilities.css", - "version": "1.1.1", + "version": "1.2.0", "description": "CSS library with utility classes", "sass": "sources/main.scss", "style": "build/main.css", diff --git a/scripts/build.js b/scripts/build.js index 028b4b1..34af48f 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov const fs = require("node:fs/promises") const path = require("node:path") diff --git a/sources/copyright.scss b/sources/copyright.scss index dede050..c0d7c98 100644 --- a/sources/copyright.scss +++ b/sources/copyright.scss @@ -1 +1 @@ -/*! Copyright (c) 2022-2023 Ivan Teplov */ +/*! Copyright (c) 2022-2024 Ivan Teplov */ diff --git a/sources/flexbox.scss b/sources/flexbox.scss index 6c07504..deac45c 100644 --- a/sources/flexbox.scss +++ b/sources/flexbox.scss @@ -1,69 +1,69 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov @function _flex-alignment-value($alignment) { - @if $alignment == "start" or $alignment == "end" { - @return flex-#{$alignment}; - } + @if $alignment == "start" or $alignment == "end" { + @return flex-#{$alignment}; + } - @return $alignment; + @return $alignment; } @mixin flex-direction($direction) { - display: flex; - flex-direction: $direction; + display: flex; + flex-direction: $direction; - &.reversed-order { - flex-direction: #{$direction}-reverse; - } + &.reversed-order { + flex-direction: #{$direction}-reverse; + } } @mixin flex-alignments { - @each $alignment in ("start", "center", "end", "stretch", "baseline") { - $value: #{_flex-alignment-value($alignment)}; + @each $alignment in ("start", "center", "end", "stretch", "baseline") { + $value: #{_flex-alignment-value($alignment)}; - &.items-#{$alignment} { - align-items: $value; - } + &.items-#{$alignment} { + align-items: $value; + } - &.justify-#{$alignment} { - justify-content: $value; - } + &.justify-#{$alignment} { + justify-content: $value; + } - &.content-#{$alignment} { - align-content: $value; - } - } + &.content-#{$alignment} { + align-content: $value; + } + } } @mixin flex-wrap { - .wrap { - flex-wrap: wrap; - } + .wrap { + flex-wrap: wrap; + } - .reversed-wrap { - flex-wrap: wrap-reverse; - } + .reversed-wrap { + flex-wrap: wrap-reverse; + } - .no-wrap { - flex-wrap: nowrap; - } + .no-wrap { + flex-wrap: nowrap; + } } .row { - @include flex-direction(row); + @include flex-direction(row); } .column { - @include flex-direction(column); + @include flex-direction(column); } .row, .column { - @include flex-alignments(); - @include flex-wrap(); + @include flex-alignments(); + @include flex-wrap(); } .fill { - flex-grow: 1; - flex-shrink: 0; + flex-grow: 1; + flex-shrink: 0; } diff --git a/sources/fonts.scss b/sources/fonts.scss index 9e1b363..1e5f42d 100644 --- a/sources/fonts.scss +++ b/sources/fonts.scss @@ -1,25 +1,45 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov .font-system { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", - "Segoe UI Symbol"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol"; +} + +$default-fonts: ("monospace", "sans-serif", "serif"); + +@each $family in $default-fonts { + .font-#{$family} { + font-family: $family; + } } $font-weights: ( - "thin": 100, - "extra-light": 200, - "light": 300, - "regular": 400, - "medium": 500, - "semibold": 600, - "bold": 700, - "extra-bold": 800, - "black": 900, + "thin": 100, + "extra-light": 200, + "light": 300, + "regular": 400, + "medium": 500, + "semibold": 600, + "bold": 700, + "extra-bold": 800, + "black": 900, +); + +@each $weight, $value in $font-weights { + .font-#{$weight} { + font-weight: $value; + } +} + +$font-styles: ( + "normal": "normal", + "italic": "italic", + "oblique": "oblique", ); -@each $name, $value in $font-weights { - .font-#{$name} { - font-weight: $value; - } +@each $style, $value in $font-styles { + .font-#{$style} { + font-style: $value; + } } diff --git a/sources/main.scss b/sources/main.scss index c19ebf2..5231064 100644 --- a/sources/main.scss +++ b/sources/main.scss @@ -1,4 +1,4 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov @use "copyright"; @use "flexbox"; diff --git a/sources/miscellaneous.scss b/sources/miscellaneous.scss index 65e8861..efe1848 100644 --- a/sources/miscellaneous.scss +++ b/sources/miscellaneous.scss @@ -1,13 +1,13 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov .cursor-pointer { - cursor: pointer; + cursor: pointer; } .not-selectable { - user-select: none; + user-select: none; } .selectable { - user-select: auto; + user-select: auto; } diff --git a/sources/text.scss b/sources/text.scss index a212dd1..1f4173b 100644 --- a/sources/text.scss +++ b/sources/text.scss @@ -1,9 +1,9 @@ -// Copyright (c) 2022-2023 Ivan Teplov +// Copyright (c) 2022-2024 Ivan Teplov .text { - @each $alignment in ("left", "center", "right", "justify") { - &-#{$alignment} { - text-align: #{$alignment}; - } - } + @each $alignment in ("left", "center", "right", "justify") { + &-#{$alignment} { + text-align: #{$alignment}; + } + } }