` as a wrapper for the repo content (files, commits, branches, etc.)
-
-Later we use css to go from default 1 column layout to 2 column layout more similar to github's design.
-
-```diff
--
-```
-
-Adds the class `lugit-repo-list-view` to the container of the repo content (only when we are not viewing a file or in blame view). This allows us to change the layout of the main repo view, except when viewing a file or in blame view.
+
+ lucaslabs
โบ Gitea theme
+
+
+*Theme for `lucaslabs` internal gitea server.*
+
+> [!IMPORTANT]
+> From version `v1.0.0` onwards, `gitea>=1.23` is required.
+> In case you're looking for `gitea@1.22.x` support, [`v0.2.2`](https://github.com/lucas-labs/gitea-lugit-theme/releases/tag/v0.2.2)
+> is the last version that supports it.
+
+## Preview
+
+
+
+
+Issue Page
+
+
+
+
+Settings Page
+
+
+
+
+PR Page
+
+
+
+## Usage
+
+1. Go to the [releases page](https://github.com/lucas-labs/gitea-lugit-theme/releases) and get the latest `gitea-lugit-theme.tar.gz` release file.
+2. Place the `templates` and `public` folder in your `$GITEA_CUSTOM` directory.
+3. Append the themes in your `app.ini` file:
+
+```ini
+[ui]
+THEMES=...,dark,light,auto
+DEFAULT_THEME=dark # optional
+```
+
+> ๐ก You can change the names of the themes by changing the name of the theme files in `public/css/theme-{name}.css` and in the `app.ini` file, accordingly.
+
+4. Restart `gitea`.
+
+> [!NOTE]
+> The latest version works with `gitea` version `v1.22.x`.
+
+## Credits
+
+- [`catppuccin/gitea`](https://github.com/catppuccin/gitea), these themes are based on them.
+
+## Development
+
+### build
+```bash
+$ npm install
+$ npm run build
+```
+
+### serve
+```bash
+$ npm run serve -- --server path/to/gitea/custom
+
+# e.g.
+
+# on linux
+$ npm run serve -- --server ~/gitea/custom
+# on windows
+$ npm run serve -- -- --server c:/gitea/custom
+```
+
+## Contributing
+
+Please feel free to open an issue or a pull request. Contributions are welcome!
\ No newline at end of file
diff --git a/figs/dark.png b/figs/dark.png
deleted file mode 100644
index b5c07eb..0000000
Binary files a/figs/dark.png and /dev/null differ
diff --git a/figs/issue.png b/figs/issue.png
new file mode 100644
index 0000000..6a3abc0
Binary files /dev/null and b/figs/issue.png differ
diff --git a/figs/light.png b/figs/light.png
deleted file mode 100644
index 62ebba5..0000000
Binary files a/figs/light.png and /dev/null differ
diff --git a/figs/pr.png b/figs/pr.png
new file mode 100644
index 0000000..12b2117
Binary files /dev/null and b/figs/pr.png differ
diff --git a/figs/repo.png b/figs/repo.png
new file mode 100644
index 0000000..47867e1
Binary files /dev/null and b/figs/repo.png differ
diff --git a/figs/settings.png b/figs/settings.png
new file mode 100644
index 0000000..9d1529b
Binary files /dev/null and b/figs/settings.png differ
diff --git a/package-lock.json b/package-lock.json
index 5dd795f..cbcb739 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@lucas-labs/lugit-theme",
- "version": "0.2.0",
+ "version": "0.2.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@lucas-labs/lugit-theme",
- "version": "0.2.0",
+ "version": "0.2.2",
"license": "MIT",
"dependencies": {
"@lucas-labs/lui-micro": "^3.1.4"
@@ -19,7 +19,7 @@
"fabric": "5.3",
"imagemin-zopfli": "^7.0.0",
"prettier": "^2.8.8",
- "sass": "^1.63.6",
+ "sass": "1.63.6",
"svgo": "^3.0.2"
}
},
@@ -3007,9 +3007,10 @@
}
},
"node_modules/immutable": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT"
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+ "dev": true
},
"node_modules/import-fresh": {
"version": "3.3.0",
@@ -4625,8 +4626,9 @@
},
"node_modules/sass": {
"version": "1.63.6",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
+ "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
diff --git a/package.json b/package.json
index 9ec2b5e..de3350f 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
"fabric": "5.3",
"imagemin-zopfli": "^7.0.0",
"prettier": "^2.8.8",
- "sass": "^1.63.6",
+ "sass": "1.63.6",
"svgo": "^3.0.2"
},
"dependencies": {
diff --git a/src/templates/base/head_navbar.tmpl b/src/templates/base/head_navbar.tmpl
deleted file mode 100644
index 2075ece..0000000
--- a/src/templates/base/head_navbar.tmpl
+++ /dev/null
@@ -1,214 +0,0 @@
-{{$notificationUnreadCount := 0}}
-{{if and .IsSigned .NotificationUnreadCount}}
- {{$notificationUnreadCount = call .NotificationUnreadCount}}
-{{end}}
-
-
-
-
-
-
-
- {{if and .IsSigned EnableTimetracking .ActiveStopwatch}}
-
- {{end}}
-
diff --git a/src/templates/home.tmpl b/src/templates/home.tmpl
deleted file mode 100644
index 4c0c931..0000000
--- a/src/templates/home.tmpl
+++ /dev/null
@@ -1,9 +0,0 @@
-{{template "base/head" .}}
-
-
-
-
-
-
-
-{{template "base/footer" .}}
diff --git a/src/templates/repo/home.tmpl b/src/templates/repo/home.tmpl
deleted file mode 100644
index 5491408..0000000
--- a/src/templates/repo/home.tmpl
+++ /dev/null
@@ -1,162 +0,0 @@
-{{template "base/head" .}}
-
- {{template "repo/header" .}}
-
-
-
- {{template "repo/sub_menu" .}}
- {{$n := len .TreeNames}}
- {{$l := Eval $n "-" 1}}
- {{$isHomepage := (eq $n 0)}}
-
- {{if .IsViewFile}}
- {{template "repo/view_file" .}}
- {{else if .IsBlame}}
- {{template "repo/blame" .}}
- {{else}}{{/* IsViewDirectory */}}
- {{template "repo/view_list" .}}
- {{end}}
-
-
-
-
-{{template "base/footer" .}}
diff --git a/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2 b/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2
deleted file mode 100644
index 0acaaff..0000000
Binary files a/src/themes/fonts/KaTeX_AMS-Regular.73ea273a.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2 b/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2
deleted file mode 100644
index f390922..0000000
Binary files a/src/themes/fonts/KaTeX_Caligraphic-Bold.a1abf90d.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2 b/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2
deleted file mode 100644
index 75344a1..0000000
Binary files a/src/themes/fonts/KaTeX_Caligraphic-Regular.d6484fce.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2 b/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2
deleted file mode 100644
index 395f28b..0000000
Binary files a/src/themes/fonts/KaTeX_Fraktur-Bold.931d67ea.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2 b/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2
deleted file mode 100644
index 735f694..0000000
Binary files a/src/themes/fonts/KaTeX_Fraktur-Regular.172d3529.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2 b/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2
deleted file mode 100644
index ab2ad21..0000000
Binary files a/src/themes/fonts/KaTeX_Main-Bold.39890742.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2 b/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2
deleted file mode 100644
index 5931794..0000000
Binary files a/src/themes/fonts/KaTeX_Main-BoldItalic.20f389c4.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2 b/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2
deleted file mode 100644
index b50920e..0000000
Binary files a/src/themes/fonts/KaTeX_Main-Italic.fe2176f7.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2 b/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2
deleted file mode 100644
index eb24a7b..0000000
Binary files a/src/themes/fonts/KaTeX_Main-Regular.f650f111.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2 b/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2
deleted file mode 100644
index 2965702..0000000
Binary files a/src/themes/fonts/KaTeX_Math-BoldItalic.dcbcbd93.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2 b/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2
deleted file mode 100644
index 215c143..0000000
Binary files a/src/themes/fonts/KaTeX_Math-Italic.6d3d25f4.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2 b/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2
deleted file mode 100644
index cfaa3bd..0000000
Binary files a/src/themes/fonts/KaTeX_SansSerif-Bold.95591a92.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2 b/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2
deleted file mode 100644
index 349c06d..0000000
Binary files a/src/themes/fonts/KaTeX_SansSerif-Italic.7d393d38.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2 b/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2
deleted file mode 100644
index a90eea8..0000000
Binary files a/src/themes/fonts/KaTeX_SansSerif-Regular.cd5e231e.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2 b/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2
deleted file mode 100644
index b3048fc..0000000
Binary files a/src/themes/fonts/KaTeX_Script-Regular.c81d1b2a.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2 b/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2
deleted file mode 100644
index c5a8462..0000000
Binary files a/src/themes/fonts/KaTeX_Size1-Regular.6eec866c.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2 b/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2
deleted file mode 100644
index e1bccfe..0000000
Binary files a/src/themes/fonts/KaTeX_Size2-Regular.2960900c.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2 b/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2
deleted file mode 100644
index 249a286..0000000
Binary files a/src/themes/fonts/KaTeX_Size3-Regular.e1951519.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2 b/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2
deleted file mode 100644
index 680c130..0000000
Binary files a/src/themes/fonts/KaTeX_Size4-Regular.e418bf25.woff2 and /dev/null differ
diff --git a/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2 b/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2
deleted file mode 100644
index 771f1af..0000000
Binary files a/src/themes/fonts/KaTeX_Typewriter-Regular.c295e7f7.woff2 and /dev/null differ
diff --git a/src/themes/fonts/codicon.4a477f66.ttf b/src/themes/fonts/codicon.4a477f66.ttf
deleted file mode 100644
index c4a33a4..0000000
Binary files a/src/themes/fonts/codicon.4a477f66.ttf and /dev/null differ
diff --git a/src/themes/scss/_utils/_color-utils.scss b/src/themes/scss/_utils/_color-utils.scss
new file mode 100644
index 0000000..1a3df5b
--- /dev/null
+++ b/src/themes/scss/_utils/_color-utils.scss
@@ -0,0 +1,100 @@
+@use 'sass:color';
+@use 'sass:map';
+
+@function light-change($color, $amount) {
+ @return color.adjust($color, $lightness: $amount * -1);
+}
+
+@function alpha-change($color, $alpha) {
+ @return color.change($color, $alpha: $alpha);
+}
+
+@function color-variants-light($color, $with-base: false) {
+ $set: (
+ '3%': light-change($color, -3%),
+ '6%': light-change($color, -6%),
+ '9%': light-change($color, -9%),
+ '10%': light-change($color, -10%),
+ '12%': light-change($color, -12%),
+ '15%': light-change($color, -15%),
+ '20%': light-change($color, -20%),
+ '25%': light-change($color, -25%),
+ '30%': light-change($color, -30%),
+ '35%': light-change($color, -35%),
+ '40%': light-change($color, -40%),
+ '45%': light-change($color, -45%),
+ '50%': light-change($color, -50%),
+ '55%': light-change($color, -55%),
+ '60%': light-change($color, -60%),
+ '65%': light-change($color, -65%),
+ '70%': light-change($color, -70%),
+ '75%': light-change($color, -75%),
+ '80%': light-change($color, -80%),
+ '85%': light-change($color, -85%),
+ '90%': light-change($color, -90%),
+ '95%': light-change($color, -95%),
+ '100%': light-change($color, -100%)
+ );
+
+ @if $with-base {
+ $set: map.merge((base: $color), $set);
+ }
+
+ @return $set;
+}
+
+@function color-variants-dark($color, $with-base: false) {
+ $set: (
+ '3%': light-change($color, 3%),
+ '6%': light-change($color, 6%),
+ '9%': light-change($color, 9%),
+ '10%': light-change($color, 10%),
+ '12%': light-change($color, 12%),
+ '15%': light-change($color, 15%),
+ '20%': light-change($color, 20%),
+ '25%': light-change($color, 25%),
+ '30%': light-change($color, 30%),
+ '35%': light-change($color, 35%),
+ '40%': light-change($color, 40%),
+ '45%': light-change($color, 45%),
+ '50%': light-change($color, 50%),
+ '55%': light-change($color, 55%),
+ '60%': light-change($color, 60%),
+ '65%': light-change($color, 65%),
+ '70%': light-change($color, 70%),
+ '75%': light-change($color, 75%),
+ '80%': light-change($color, 80%),
+ '85%': light-change($color, 85%),
+ '90%': light-change($color, 90%),
+ '95%': light-change($color, 95%),
+ '100%': light-change($color, 100%)
+ );
+
+ @if $with-base {
+ $set: map.merge((base: $color), $set);
+ }
+
+ @return $set;
+}
+
+@function variants($color, $light: true, $dark: true, $base: true, $override-base-with: null) {
+ $set: ();
+
+ @if $light {
+ $set: map.merge($set, (light: color-variants-light($color)));
+ }
+
+ @if $dark {
+ $set: map.merge($set, (dark: color-variants-dark($color)));
+ }
+
+ @if $base {
+ @if $override-base-with {
+ $set: map.merge($set, (base: $override-base-with));
+ } @else {
+ $set: map.merge($set, (base: $color));
+ }
+ }
+
+ @return $set;
+}
\ No newline at end of file
diff --git a/src/themes/scss/_vars.scss b/src/themes/scss/_vars.scss
new file mode 100644
index 0000000..c7c4e38
--- /dev/null
+++ b/src/themes/scss/_vars.scss
@@ -0,0 +1,36 @@
+$variables: (
+ 'font-size': (
+ 'xs': .714rem,
+ 'sm': .857rem,
+ 'md': 1rem, // 14
+ 'lg': 1.143rem, // 16
+ 'xl': 1.286rem, // 18
+ '2xl': 1.429rem, // 20
+ '3xl': 1.714rem, // 24
+ '4xl': 2rem, // 28
+ ),
+ 'font-family': '-apple-system, "Segoe UI", system-ui, "SF Pro Text", Inter, Roboto, "Helvetica Neue", Arial, sans-serif',
+ 'code-font-family': 'ui-monospace, SFMono-Regular, "Source Code Pro", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, var(--fonts-emoji)',
+ 'emoji-font-family': '"Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla"',
+ 'measure': (
+ '.25x': 4px,
+ '.375x': 6px,
+ '.5x': 8px,
+ '.75x': 12px,
+ '.875x': 14px,
+ '1x': 16px,
+ '1.25x': 20px,
+ '1.5x': 24px,
+ '2x': 32px,
+ '2.5x': 40px,
+ '3x': 48px,
+ '4x': 64px,
+ ),
+ 'navbar-logo': (
+ 'width': 56px,
+ 'height': 20px,
+ ),
+ 'repo-home': (
+ 'sidebar-width': 296px,
+ )
+);
\ No newline at end of file
diff --git a/src/themes/scss/dark.scss b/src/themes/scss/dark.scss
index 4c8e36f..0ab8b53 100644
--- a/src/themes/scss/dark.scss
+++ b/src/themes/scss/dark.scss
@@ -1,83 +1,56 @@
-@use '@lucas-labs/lui-micro' as lui;
-@use './utils/color-utils' as c;
-@use './theme' as theme;
-
-$is-dark: true;
-
-$brand: #a6c6f7;
-
-$colors: (
- theme: (
- 'rosewater': c.variants(#f5e0dc, $is-dark),
- 'flamingo': c.variants(#f2cdcd, $is-dark),
- 'pink': c.variants(#f5c2e7, $is-dark),
- 'mauve': c.variants(#9b6bf5, $is-dark),
- 'red': c.variants(#f38ba8, $is-dark),
- 'maroon': c.variants(#eba0ac, $is-dark),
- 'peach': c.variants(#fab387, $is-dark),
- 'yellow': c.variants(#f9e2af, $is-dark),
- 'green': c.variants($brand, $is-dark),
- 'dark-green': c.variants(#00E676, $is-dark),
- 'teal': c.variants(#94e2d5, $is-dark),
- 'sky': c.variants(#89dceb, $is-dark),
- 'sapphire': c.variants(#74c7ec, $is-dark),
- 'blue': c.variants(#89b4fa, $is-dark),
- 'lavender': c.variants(#b4befe, $is-dark),
- 'black': c.variants(#181825, $is-dark),
- 'white': c.variants(#e6edf3, $is-dark),
- ),
- text: #e6edf3,
- primary: c.variants($brand, $is-dark),
- secondary: c.variants(#5d5f7a, $is-dark),
- elevation: (
- '1': #000000, // crust
- '2': #040407, // mantle
- '3': #07070f, // base
- '4': #161720, // surface0
- '5': #1a1a25, // surface1
- '6': #222330, // surface2
- '7': #393c4d, // overlay0
- '8': #515569, // overlay1
- '9': #6b7188, // overlay2
- '10': #868ca5, // subtext0
- '11': #9aa2c2, // subtext1
- '12': #b6c0e0, //
- )
-);
-
-// init lui-micro, css-vars only (no reboot, no basic)
-@include lui.init(
- $theme: (
- colors: $colors,
- variables: (
- 'small-font-size': 12px,
- 'base-font-size': 14px,
- 'font-family': '"Outfit", Inter, Roboto, "Segoe UI", sans-serif',
- 'code-font-family': '"Source Code Pro", "Roboto Mono", Consolas, monospace',
- 'measure': (
- '.25x': 4px,
- '.5x': 8px,
- '1x': 16px,
- '1.25x': 20px,
- '1.5x': 24px,
- '2x': 32px,
- '3x': 48px,
- '4x': 64px,
- ),
- 'repo-home': (
- 'sidebar-width': 296px,
- )
- ),
- ),
-
- $options: (
- reboot: false,
- basic: false,
- fg-var-name: 'text',
- bg-var-name: 'elevation/1',
- ),
-);
-
-@include theme.make-theme(
- $is-dark: $is-dark,
-);
\ No newline at end of file
+@use '@lucas-labs/lui-micro' as lui;
+@use './_utils/color-utils' as c;
+@use './theme' as theme;
+@use './vars' as vars;
+
+$is-dark: true;
+$brand: #a6c6f7;
+
+$colors: (
+ primary: c.variants($brand),
+ secondary: c.variants(hsl(240, 18%, 14%)), // same as elevation/6
+ text: #e6edf3,
+ subtle: hsl(240, 10%, 70%), // same as elevation/10
+ palette: (
+ 'red': c.variants(#f38ba8), // red
+ 'orange': c.variants(#fab387), // peach
+ 'yellow': c.variants(#f9e2af), // yellow
+ 'olive': c.variants(#e2f095),
+ 'green': c.variants(#00E676), // green
+ 'teal': c.variants(#94e2d5), // teal
+ 'blue': c.variants(#89b4fa), // blue
+ 'violet': c.variants(#b4befe), // lavender
+ 'purple': c.variants(#9b6bf5), // mauve
+ 'pink': c.variants(#f5c2e7), // pink
+ 'brown': c.variants(#f2cdcd), // flamingo
+ 'black': c.variants(#181825), // black
+ 'white': c.variants(#e6edf3), // white
+ ),
+ elevation: (
+ '1': hsl(240, 33%, 01%),
+ '2': hsl(240, 33%, 04%),
+ '3': hsl(240, 33%, 06%),
+ '4': hsl(240, 30%, 08%),
+ '5': hsl(240, 28%, 12%),
+ '6': hsl(240, 25%, 14%),
+ '7': hsl(240, 20%, 30%),
+ '8': hsl(240, 20%, 40%),
+ '9': hsl(240, 10%, 50%),
+ '10': hsl(240, 10%, 70%),
+ '11': hsl(240, 10%, 80%),
+ '12': hsl(240, 10%, 90%),
+ )
+);
+
+// init lui-micro, css-vars only (no reboot, no basic)
+@include lui.init(
+ $theme: (colors: $colors, variables: vars.$variables),
+ $options: (
+ reboot: false,
+ basic: false,
+ fg-var-name: 'text',
+ bg-var-name: 'elevation/1',
+ ),
+);
+
+@include theme.make-theme($is-dark);
\ No newline at end of file
diff --git a/src/themes/scss/light.scss b/src/themes/scss/light.scss
index 815913d..2de837d 100644
--- a/src/themes/scss/light.scss
+++ b/src/themes/scss/light.scss
@@ -1,83 +1,56 @@
-@use '@lucas-labs/lui-micro' as lui;
-@use './utils/color-utils' as c;
-@use './theme' as theme;
-
-$is-dark: true;
-
-$brand: #6296e2;
-
-$colors: (
- theme: (
- 'rosewater': c.variants(#dc8a78, $is-dark),
- 'flamingo': c.variants(#dd7878, $is-dark),
- 'pink': c.variants(#ea76cb, $is-dark),
- 'mauve': c.variants($brand, $is-dark),
- 'red': c.variants(#d20f39, $is-dark),
- 'maroon': c.variants(#e64553, $is-dark),
- 'peach': c.variants(#fe640b, $is-dark),
- 'yellow': c.variants(#df8e1d, $is-dark),
- 'green': c.variants($brand, $is-dark),
- 'dark-green': c.variants(#11752d, $is-dark),
- 'teal': c.variants(#179299, $is-dark),
- 'sky': c.variants(#04a5e5, $is-dark),
- 'sapphire': c.variants(#209fb5, $is-dark),
- 'blue': c.variants(#1e66f5, $is-dark),
- 'lavender': c.variants(#7287fd, $is-dark),
- 'black': c.variants(#181825, $is-dark),
- 'white': c.variants(#e6edf3, $is-dark),
- ),
- text: #4c4f69,
- primary: c.variants($brand, $is-dark),
- secondary: c.variants(#5d5f7a, $is-dark),
- elevation: (
- '1': #dce0e8, // crust
- '2': #e6e9ef, // mantle
- '3': #eff1f5, // base
- '4': #ccd0da, // surface0
- '5': #bcc0cc, // surface1
- '6': #acb0be, // surface2
- '7': #9ca0b0, // overlay0
- '8': #8c8fa1, // overlay1
- '9': #7c7f93, // overlay2
- '10': #6c6f85, // subtext0
- '11': #5c5f77, // subtext1
- '12': #4c4f69, //
- )
-);
-
-// init lui-micro, css-vars only (no reboot, no basic)
-@include lui.init(
- $theme: (
- colors: $colors,
- variables: (
- 'small-font-size': 12px,
- 'base-font-size': 14px,
- 'font-family': '"Outfit", Inter, Roboto, "Segoe UI", sans-serif',
- 'code-font-family': '"Source Code Pro", "Roboto Mono", Consolas, monospace',
- 'measure': (
- '.25x': 4px,
- '.5x': 8px,
- '1x': 16px,
- '1.25x': 20px,
- '1.5x': 24px,
- '2x': 32px,
- '3x': 48px,
- '4x': 64px,
- ),
- 'repo-home': (
- 'sidebar-width': 296px,
- )
- ),
- ),
-
- $options: (
- reboot: false,
- basic: false,
- fg-var-name: 'text',
- bg-var-name: 'elevation/1',
- ),
-);
-
-@include theme.make-theme(
- $is-dark: $is-dark,
-);
\ No newline at end of file
+@use '@lucas-labs/lui-micro' as lui;
+@use './_utils/color-utils' as c;
+@use './theme' as theme;
+@use './vars' as vars;
+
+$is-dark: false;
+$brand: #6296e2;
+
+$colors: (
+ primary: c.variants($brand),
+ secondary: c.variants(#bcc0cc),
+ text: #484b60,
+ subtle: #656c90, // same as elevation/10
+ palette: (
+ 'red': c.variants(#d20f39), // red
+ 'orange': c.variants(#fe640b), // peach
+ 'yellow': c.variants(#df8e1d), // yellow
+ 'olive': c.variants(#e2f095),
+ 'green': c.variants(#34ac56), // green
+ 'teal': c.variants(#179299), // teal
+ 'blue': c.variants(#1e66f5), // blue
+ 'violet': c.variants(#7287fd), // lavender
+ 'purple': c.variants(#8652e7), // mauve
+ 'pink': c.variants(#ea76cb), // pink
+ 'brown': c.variants(#dd7878), // flamingo
+ 'black': c.variants(#181825), // black
+ 'white': c.variants(#e6edf3), // white
+ ),
+ elevation: (
+ '1': #fcfcfd, // elevation/1
+ '2': #f6f7f9, // elevation/2
+ '3': #eff1f5, // elevation/3
+ '4': #e6e9ef, // elevation/4
+ '5': #d7dce6, // elevation/5
+ '6': #bcc0cc, // elevation/6
+ '7': #9ba7bf, // elevation/7
+ '8': #838fae, // elevation/8
+ '9': #717a9f, // elevation/9
+ '10': #656c90, // elevation/10
+ '11': #565b77, // elevation/11
+ '12': #484b60, // elevation/12
+ )
+);
+
+// init lui-micro, css-vars only (no reboot, no basic)
+@include lui.init(
+ $theme: (colors: $colors, variables: vars.$variables),
+ $options: (
+ reboot: false,
+ basic: false,
+ fg-var-name: 'text',
+ bg-var-name: 'elevation/1',
+ ),
+);
+
+@include theme.make-theme($is-dark);
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/_avatar.scss b/src/themes/scss/theme/components/_avatar.scss
new file mode 100644
index 0000000..f8a53a3
--- /dev/null
+++ b/src/themes/scss/theme/components/_avatar.scss
@@ -0,0 +1,8 @@
+@mixin avatar {
+ img.ui.avatar, .ui.avatar img, .ui.avatar svg {
+ &:not(.org-avatar) {
+ border-radius: 50% !important;
+ object-fit: fill;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/_boxes.scss b/src/themes/scss/theme/components/_boxes.scss
new file mode 100644
index 0000000..49d3ee0
--- /dev/null
+++ b/src/themes/scss/theme/components/_boxes.scss
@@ -0,0 +1,89 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin segment {
+ .ui.segment {
+ margin: var.get('measure/1x') 0;
+ padding: var.get('measure/1x');
+ border-radius: var(--border-radius);
+ }
+
+ .ui.segment form >*:first-child {
+ margin-top: 0;
+ }
+
+ .ui.segment form >*:last-child {
+ margin-bottom: 0;
+ }
+
+ .ui.top.attached.header {
+ border-radius: var(--border-radius) var(--border-radius) 0 0;
+ }
+
+ .ui.attached.segment:has(+.ui[class*="top attached"].header), .ui.attached.segment:has(+.page.buttons), .ui.attached.segment:last-child, .ui.segment:has(+.ui.segment:not(.attached)), .ui.attached.segment:has(+.ui.modal) {
+ border-bottom-left-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
+ }
+
+ .ui.segments:not(.horizontal)>.segment:first-child, .ui.segments.horizontal>.segment:first-child {
+ border-radius: var(--border-radius);
+ }
+
+ .ui.segments:not(.horizontal)>.segment:last-child, .ui.horizontal.segments>.segment:last-child {
+ border-radius: var(--border-radius);
+ }
+}
+
+@mixin comments {
+ .comment {
+ .content {
+ background-color: var(--color-box-body);
+
+ >.comment-header, >.ui.segment {
+ &:before, &:after {
+ display: none;
+ }
+ }
+
+ .comment-header {
+ padding: var.get('measure/.25x') var.get('measure/.25x') var.get('measure/.25x') var.get('measure/1x') !important;
+
+ .comment-header-left {
+ .text {
+ color: color.get('subtle') !important;
+
+ .author {
+ color: color.get('text') !important;
+ }
+ }
+ }
+
+ .comment-header-right {
+ * {
+ color: color.get('subtle') !important;
+ }
+
+ .label {
+ height: var.get('measure/1.25x', 1.25rem) !important;
+ padding: 0px var.get('measure/.375x') !important;
+ border-radius: var.get('measure/1x') !important;
+ }
+ }
+ }
+ }
+ }
+
+ .comment-list .comment>.content>div:last-child {
+ border-bottom-left-radius: var(--border-radius) !important;
+ border-bottom-right-radius: var(--border-radius) !important;
+ }
+
+ .comment-list .comment>.content>div:first-child {
+ border-top-left-radius: var(--border-radius) !important;
+ border-top-right-radius: var(--border-radius) !important;
+ }
+
+ .ui.comments .comment {
+ margin: var.get('measure/.25x') 0 0;
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/_editor.scss b/src/themes/scss/theme/components/_editor.scss
new file mode 100644
index 0000000..1a27735
--- /dev/null
+++ b/src/themes/scss/theme/components/_editor.scss
@@ -0,0 +1,143 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin editor {
+ .combo-markdown-editor {
+ .top.tabular.menu {
+ background-color: var(--color-box-header);
+ border-radius: var(--border-radius) var(--border-radius) 0 0;
+ min-height: 0px;
+ margin-bottom: var.get('measure/1x') !important;
+
+ .item {
+ margin: -1px 0 0 -1px; // merge borders
+ border-top-left-radius: var(--border-radius) !important;
+ border-top-right-radius: var(--border-radius) !important;
+ padding: var.get('measure/.5x') var.get('measure/.75x') !important;
+ font-weight: 400;
+
+ &:hover {
+ color: var(--color-text-light-2);
+ }
+
+ &.active {
+ color: var(--color-text);
+ &:after {
+ // a hacky 1 pixel "button border" to make the border
+ // of the whole menu disappear under the active tab
+ display: block;
+ content: '';
+ position: absolute;
+ top: 100%;
+ right: 0;
+ width: 100%;
+ height: 1px;
+ background-color: var(--color-body);
+ }
+ }
+ }
+ }
+
+ .tab {
+ .EasyMDEContainer { // legacy editor
+ border: none !important;
+
+ .editor-toolbar {
+ border: none !important;
+ }
+ }
+
+ markdown-toolbar, .EasyMDEContainer .editor-toolbar {
+ padding: 0 10px !important;
+
+ .markdown-toolbar-group {
+ border: none !important;
+ padding: 0 !important;
+
+ &:not(:last-child) {
+ &:after {
+ content: '';
+ display: block;
+ position: relative;
+ width: 1px;
+ flex: 1;
+ margin: var.get('measure/.375x') var.get('measure/.375x') !important;
+ background-color: color.get('elevation/6');
+ }
+ }
+ }
+
+ .markdown-toolbar-button, button {
+ line-height: 0;
+ display: inline-block;
+ color: var(--color-text-light-2) !important;
+ padding: var.get('measure/.375x') !important;
+ transition: background-color .1s ease;
+ border-radius: var.get('measure/.375x') !important;
+ height: auto;
+ min-width: fit-content;
+
+ &:hover {
+ background-color: color.get('elevation/5') !important;
+ }
+
+ // if has attribute level
+ &[level] {
+ width: 34px;
+ }
+
+ // if aria-checked is true
+ &[aria-checked="true"] {
+ background-color: color.get('elevation/4');
+ }
+ }
+
+ button {
+ &:after {
+ vertical-align: unset !important;
+ }
+ }
+ }
+
+ textarea, .CodeMirror.cm-s-easymde.CodeMirror-wrap {
+ background-color: transparent !important;
+ border: none !important;
+ padding: var.get('measure/1x') var.get('measure/1x') !important;
+ }
+
+ .editor-statusbar {
+ margin-bottom: 0 !important;
+ }
+
+ &.markup {
+ padding: 0 var.get('measure/1x') var.get('measure/1x');
+ }
+ }
+ }
+
+ .combo-markdown-editor {
+ border: 1px solid var(--color-secondary);
+ border-radius: var(--border-radius);
+ &:focus-within {
+ outline: 2px solid var(--color-accent);
+ border-radius: var(--border-radius);
+ }
+
+ textarea:focus {
+ outline: none !important;
+ }
+
+ .ui.tab.markup[data-tab-panel=markdown-previewer] {
+ border-bottom: 0px;
+ }
+ }
+
+ #comment-form, .edit-content-zone, .comment-form, .comment-code-cloud form {
+ padding: 0 !important;
+ border: none !important;
+
+ .field {
+ margin-bottom: var.get('measure/1x') !important;
+ }
+ }
+}
diff --git a/src/themes/scss/theme/components/_file-content.scss b/src/themes/scss/theme/components/_file-content.scss
new file mode 100644
index 0000000..604db84
--- /dev/null
+++ b/src/themes/scss/theme/components/_file-content.scss
@@ -0,0 +1,45 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin file-content {
+ .non-diff-file-content {
+ .ui.segment.list-header {
+ border-radius: var(--border-radius);
+ margin-bottom: var.get('measure/1x') !important;
+ gap: var.get('measure/.5x');
+ padding: var.get('measure/.5x') var.get('measure/.75x');
+
+ .latest-commit {
+ gap: var.get('measure/.5x');
+ }
+
+ .commit-summary {
+ color: color.get('subtle');
+ }
+
+ .age {
+ font-size: 12px;
+ }
+ }
+
+ .ui.top.attached.header {
+ border-top-left-radius: var(--border-radius);
+ border-top-right-radius: var(--border-radius);
+
+ .file-info {
+ color: color.get('subtle') !important;
+ }
+
+ .btn-octicon {
+ --color-text: #{color.get('subtle')};
+ }
+ }
+
+ .ui.attached.segment:has(+.ui[class*="top attached"].header), .ui.attached.segment:has(+.page.buttons), .ui.attached.segment:last-child, .ui.segment:has(+.ui.segment:not(.attached)), .ui.attached.segment:has(+.ui.modal) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/_forms.scss b/src/themes/scss/theme/components/_forms.scss
new file mode 100644
index 0000000..f92368d
--- /dev/null
+++ b/src/themes/scss/theme/components/_forms.scss
@@ -0,0 +1,11 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use './forms/' as forms;
+
+@mixin forms {
+ @include forms.dropdown-menu;
+ @include forms.menu;
+ @include forms.tabular-menu;
+ @include forms.input;
+}
+
diff --git a/src/themes/scss/theme/components/_labels.scss b/src/themes/scss/theme/components/_labels.scss
new file mode 100644
index 0000000..caa84b6
--- /dev/null
+++ b/src/themes/scss/theme/components/_labels.scss
@@ -0,0 +1,64 @@
+@use '@lucas-labs/lui-micro/color' as color;
+@use '@lucas-labs/lui-micro/var' as var;
+
+@mixin label-signed {
+ .label.isSigned {
+ font-size: var.get('font-size/sm') !important;
+ margin: 0px .25em !important;
+ padding: 0 !important;
+ display: inline-flex !important;
+ gap: 0px !important;
+ border-radius: 16px !important;
+
+ --color-light-border: rgba(#{color.get('palette/green/base', 'rgb')}, 1) !important;
+ --color-label-bg: none !important;
+ --color-text: rgba(#{color.get('palette/green/base', 'rgb')}, 1) !important;
+ --color-green-badge-bg: none !important;
+ --color-green-badge-hover-bg: rgba(#{color.get('palette/green/base', 'rgb')}, 0.05) !important;
+ --color-label-hover-bg: rgba(#{color.get('palette/green/base', 'rgb')}, 0.05) !important;
+ --color-label-text: rgba(#{color.get('palette/green/base', 'rgb')}, 1) !important;
+ --color-green-badge: rgba(#{color.get('palette/green/base', 'rgb')}, 1) !important;
+
+ .shortsha {
+ padding: 2px 6px 2px 8px !important;
+ }
+
+ .ui.detail.icon.button {
+ opacity: 1 !important;
+ padding: 2px 8px 2px 6px !important;
+ margin: 0 !important;
+ background: none !important;
+ border-color: rgba(#{color.get('palette/green/base', 'rgb')}, 1) !important;
+ }
+
+ &.isVerified {
+ .ui.detail.icon.button {
+ padding: 2px 8px 2px 6px !important;
+ }
+ }
+ }
+}
+
+@mixin label-default {
+ .ui.label {
+ border-radius: var.get('measure/1.25x');
+
+ &.scope-left {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &.scope-right {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ &.green {
+ color: var(--color-green-contrast) !important;
+ }
+
+ &.red {
+ color: var(--color-red-contrast) !important;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/_markup.scss b/src/themes/scss/theme/components/_markup.scss
new file mode 100644
index 0000000..91008a8
--- /dev/null
+++ b/src/themes/scss/theme/components/_markup.scss
@@ -0,0 +1,35 @@
+@use '@lucas-labs/lui-micro/color' as color;
+@use '@lucas-labs/lui-micro/var' as var;
+
+@mixin markup {
+ .markup {
+ .task-list-item input[type=checkbox] {
+ margin: 0 .5em .25em -1.4em;
+ }
+
+ input[type=checkbox] {
+ --border-radius: #{var.get('measure/.25x')};
+ width: var.get('measure/1x');
+ height: var.get('measure/1x');
+ margin-right: 4px;
+ --color-input-background: #{color.get('elevation/5')};
+
+ &:checked {
+ background-color: var(--color-primary);
+ }
+
+ &:after {
+ --color-text: var(--color-primary-contrast);
+ }
+
+ &:not([disabled]):hover, &:not([disabled]):active {
+ border-color: var(--color-secondary);
+ background-color: color.get('elevation/6');
+
+ &:checked {
+ background-color: var(--color-primary-hover);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/button/index.scss b/src/themes/scss/theme/components/button/index.scss
new file mode 100644
index 0000000..ed89f6d
--- /dev/null
+++ b/src/themes/scss/theme/components/button/index.scss
@@ -0,0 +1,128 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin hollow {
+ --border-radius: #{var.get('measure/.25x')};
+
+ padding: var.get('measure/.375x') var.get('measure/.5x') !important;
+ background-color: transparent !important;
+ font-weight: normal;
+
+ button, .button {
+ border-color: color.get('elevation/6') !important;
+ gap: var.get('measure/.5x') !important;
+ border-radius: var(--border-radius);
+
+ &:hover {
+ border-color: color.get('elevation/7') !important;
+
+ +.label {
+ border-left-color: color.get('elevation/7') !important;
+ }
+ }
+ }
+
+ &.labeled {
+ button, .button {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ .label {
+ border-color: color.get('elevation/6') !important;
+ background-color: transparent !important;
+
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
+
+
+ &:hover {
+ border-color: color.get('elevation/7') !important;
+ }
+ }
+ }
+
+ &:hover {
+ border-color: color.get('elevation/7') !important;
+ }
+}
+
+@mixin gitea-button {
+ .ui.icon.buttons .button, .ui.icon.button:not(.compact) {
+ // padding: 50px;
+ }
+
+ .code-comment-buttons-buttons {
+ button:not(.labeled):not(.icon) {
+ padding: .78571429em !important;
+ }
+ }
+
+ // buttons group
+ .ui.buttons {
+ &.icon .button, &.icon:not(.compact) {
+ padding: 50px 50px;
+ }
+
+ .button {
+ &:first-child {
+ border-top-left-radius: var(--border-radius);
+ border-bottom-left-radius: var(--border-radius);
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &.button:last-child {
+ border-top-right-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ border-right: none;
+ flex: 1 0 auto;
+ border-radius: 0;
+ margin: 0;
+ }
+ }
+
+ .ui.button {
+ border-radius: var(--border-radius);
+ transition: color .1s ease, background-color .1s ease, border-color .1s ease;
+ padding: calc(#{var.get('measure/.375x')} - 1px) var.get('measure/1x');
+ font-size: var.get('font-size/md');
+ line-height: 20px;
+
+ &.tiny {
+ font-size: var.get('font-size/sm');
+ line-height: var.get('font-size/sm');
+ }
+
+ &.basic {
+ border-radius: var(--border-radius);
+ }
+
+ &.red, &.red.basic {
+ border-color: var(--color-secondary);
+ background: var(--color-button);
+ color: var(--color-red);
+
+ &:hover {
+ background: var(--color-red-dark-2);
+ color: var(--color-white);
+ }
+
+ &.basic {
+ border-color: rgba(#{color.get('palette/red/base', 'rgb')}, 0.4);
+ }
+ }
+
+ &.primary, &.red, &.basic {
+ font-weight: 500;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/forms/_input.scss b/src/themes/scss/theme/components/forms/_input.scss
new file mode 100644
index 0000000..d5c93d8
--- /dev/null
+++ b/src/themes/scss/theme/components/forms/_input.scss
@@ -0,0 +1,86 @@
+@use '@lucas-labs/lui-micro/color' as color;
+@use '@lucas-labs/lui-micro/var' as var;
+
+@mixin -all-inputs($state: null) {
+ input#{$state},
+ textarea#{$state},
+ .ui.input>input#{$state},
+ .ui.form input:not([type])#{$state},
+ .ui.form select#{$state},
+ .ui.form textarea#{$state},
+ .ui.form input[type=date]#{$state},
+ .ui.form input[type=datetime-local]#{$state},
+ .ui.form input[type=email]#{$state},
+ .ui.form input[type=file]#{$state},
+ .ui.form input[type=number]#{$state},
+ .ui.form input[type=password]#{$state},
+ .ui.form input[type=search]#{$state},
+ .ui.form input[type=tel]#{$state},
+ .ui.form input[type=text]#{$state},
+ .ui.form input[type=time]#{$state},
+ .ui.form input[type=url]#{$state},
+ .ui.selection.dropdown#{$state} {
+ @content;
+ }
+}
+
+@mixin input {
+ @include -all-inputs {
+ border-color: var(--color-input-border);
+ color: var(--color-input-text);
+ border-radius: var(--border-radius);
+ line-height: 20px;
+ min-height: auto;
+ padding: calc(#{var.get('measure/.375x')} - 1px) var.get('measure/.75x');
+
+ +.ui.button:last-child {
+ border-top-right-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
+ }
+ }
+
+ @include -all-inputs(':hover') {
+ // border-radius: var(--border-radius);
+ border-color: var(--color-input-border);
+ color: var(--color-input-text)
+ }
+
+ @include -all-inputs(':focus') {
+ border-radius: var(--border-radius);
+ border-color: var(--color-input-border);
+ color: var(--color-input-text);
+ outline: 2px solid var(--color-accent);
+ background-color: color.get('elevation/2');
+ }
+
+ @include -all-inputs('.active') {
+ border-radius: var(--border-radius);
+ outline: 2px solid var(--color-accent);
+ }
+
+ .ui.action.input:not([class*="left action"])>input:focus {
+ border-right-color: var(--color-input-border);
+ z-index: 1;
+ }
+
+ .ui.action.input>.dropdown:not(:first-child):not(:last-child),
+ .ui.action.input>.button:not(:first-child):not(:last-child),
+ .ui.action.input>.buttons:not(:first-child):not(:last-child)>.button {
+ border-radius: 0 !important;
+ }
+
+ .ui.action.input:not([class*="left action"])>input:focus+.ui.dropdown.selection,
+ .ui.action.input:not([class*="left action"])>input:focus+.ui.dropdown.selection:hover,
+ .ui.action.input:not([class*="left action"])>input:focus+.button,
+ .ui.action.input:not([class*="left action"])>input:focus+.button:hover,
+ .ui.action.input:not([class*="left action"])>input:focus+i.icon+.button,
+ .ui.action.input:not([class*="left action"])>input:focus+i.icon+.button:hover {
+ border-left-color: var(--color-input-border);
+ }
+
+ .ui.form .field>label {
+ margin: 0 0 var.get('measure/.375x');
+ font-size: var.get('font-size/md');
+ font-weight: 600;
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/forms/_menu.scss b/src/themes/scss/theme/components/forms/_menu.scss
new file mode 100644
index 0000000..6e7b2c2
--- /dev/null
+++ b/src/themes/scss/theme/components/forms/_menu.scss
@@ -0,0 +1,214 @@
+@use '@lucas-labs/lui-micro/color' as color;
+@use '@lucas-labs/lui-micro/var' as var;
+
+@mixin dropdown-menu {
+ .ui.dropdown {
+ // dropdown menu
+ >.menu {
+ --border-radius: #{var.get('measure/.75x')};
+
+ opacity: 0;
+ overflow-x: hidden;
+ &.hidden { opacity: 0 !important;}
+ &.visible { opacity: 1 !important; }
+
+ border-radius: var(--border-radius) !important;
+ transition: opacity .2s ease !important;
+ box-shadow: 0px 6px 12px -3px rgba(var(--color-shadow-rgb), 0.5),
+ 0px 6px 18px 0px rgba(var(--color-shadow-rgb), 0.1) !important;
+
+ .divider {
+ margin-top: var.get('measure/.5x') !important;
+ margin-bottom: var.get('measure/.5x') !important;
+ }
+
+ .item:not(.comment-reaction-button) {
+ --border-radius: #{var.get('measure/.375x')};
+
+ margin: 0 var.get('measure/.5x') !important;
+ border-radius: var(--border-radius) !important;
+ padding: var.get('measure/.375x') var.get('measure/.5x') !important;
+ line-height: 1 !important;
+ display: flex;
+ flex-wrap: wrap;
+ align-content: center;
+ width: auto;
+
+ &:first-of-type {
+ margin-top: var.get('measure/.5x') !important;
+ }
+
+ &:last-of-type {
+ margin-bottom: var.get('measure/.5x') !important;
+ }
+
+ &.clear-selection {
+ margin-bottom: var.get('measure/.5x') !important;
+ }
+ }
+
+ input[type="text"], input[name="search"] {
+ --color-input-background: #{color.get('elevation/1')};
+ --color-input-border: #{color.get('elevation/5')};
+
+ min-height: var.get('measure/2x') !important;
+ padding: 0 var.get('measure/.5x') !important;
+ font-size: var.get('font-size/md') !important;
+ border-radius: var.get('measure/.375x') !important;
+
+ &:focus {
+ --color-primary: var(--color-accent);
+ }
+ }
+
+ .scrolling.menu {
+ .item {
+ gap: var.get('measure/.5x') !important;
+
+ &:hover {
+ &:before {
+ position: absolute;
+ top: calc(50% - 12px);
+ left: -8px;
+ width: 4px;
+ height: 24px;
+ content: "";
+ background-color: var(--color-accent);
+ border-radius: 6px;
+ }
+ }
+
+ .item-check-mark {
+ background-color: color.get('elevation/6');
+ visibility: visible !important;
+ display: inline-flex;
+ padding: 2px;
+ border-radius: var.get('measure/.375x');
+ border: 1px solid color.get('elevation/8');
+
+ svg {
+ visibility: hidden;
+ }
+ }
+
+ .item-secondary-info {
+ flex-basis: 100%;
+ padding: 0 0 0 var.get('measure/.5x');
+ color: color.get('subtle');
+ line-height: 100%;
+ white-space: nowrap;
+ overflow-x: hidden;
+
+ small {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+
+ &.checked {
+ .item-check-mark {
+ background-color: var(--color-accent);
+
+ svg {
+ visibility: visible;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // if not .upward
+ &:not(.upward) {
+ >.menu {
+ top: calc(100% + var.get('measure/.5x')) !important;
+ }
+ }
+
+ &.upward {
+ >.menu {
+ bottom: calc(100% + var.get('measure/.5x')) !important;
+ }
+ }
+
+ &.upward.selection.visible, &.active.upward.selection {
+ border-top-left-radius: var(--border-radius) !important;
+ border-top-right-radius: var(--border-radius) !important;
+ border-bottom-left-radius: var(--border-radius) !important;
+ border-bottom-right-radius: var(--border-radius) !important;
+ }
+
+ &.selection.active, &.selection.active:hover, &.selection.active .menu, &.selection.active:hover .menu {
+ border-color: var(--color-secondary) !important;
+ }
+
+ // select type dropdown
+ &.selection {
+ --border-radius: #{var.get('measure/.5x')};
+ border-radius: var(--border-radius) !important;
+
+ &:focus, &.active {
+ border-color: var(--color-secondary) !important;
+ outline: 2px solid var(--color-accent);
+ }
+
+ &.active {
+ border-radius: var(--border-radius) !important;
+ }
+
+ >.menu {
+ border-radius: var(--border-radius) !important;
+ border-top-width: 1px !important;
+ border-color: var(--color-secondary) !important;
+ flex-direction: column;
+ gap: var.get('measure/.25x');
+
+ &.visible {
+ display: flex;
+ }
+
+ .item {
+ border: none !important;
+ }
+ }
+ }
+ }
+}
+
+@mixin menu {
+ .ui.menu {
+ border-radius: var(--border-radius);
+
+ >.item:first-child {
+ border-radius: var(--border-radius) 0 0 var(--border-radius);
+ }
+
+ &.compact:not(.secondary) .item:last-child {
+ border-radius: 0 var(--border-radius) var(--border-radius) 0;
+ }
+ }
+
+ .ui.secondary.menu {
+ gap: var.get('measure/.25x');
+
+ &.vertical {
+ >.item {
+ border: none;
+ margin: 0 0 var.get('measure/.25x') 0;
+ border-radius: var(--border-radius) !important;
+ }
+ }
+
+ .dropdown.item.active:hover, a.item.active:hover {
+ color: var(--color-text);
+ background: var(--color-hover);
+ }
+ }
+}
+
+@mixin tabular-menu {
+ .ui.tabular.menu .active.item, .ui.tabular.menu .active.item:hover {
+ border-radius: var(--border-radius) var(--border-radius) 0 0 !important;
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/forms/index.scss b/src/themes/scss/theme/components/forms/index.scss
new file mode 100644
index 0000000..9ff06ec
--- /dev/null
+++ b/src/themes/scss/theme/components/forms/index.scss
@@ -0,0 +1,2 @@
+@forward './menu';
+@forward './input';
\ No newline at end of file
diff --git a/src/themes/scss/theme/components/index.scss b/src/themes/scss/theme/components/index.scss
new file mode 100644
index 0000000..6d1ee3a
--- /dev/null
+++ b/src/themes/scss/theme/components/index.scss
@@ -0,0 +1,8 @@
+@forward './labels';
+@forward './editor';
+@forward './forms';
+@forward './file-content';
+@forward './avatar';
+@forward './button';
+@forward './boxes';
+@forward './markup';
\ No newline at end of file
diff --git a/src/themes/scss/theme/index.scss b/src/themes/scss/theme/index.scss
index ece1050..de82a20 100644
--- a/src/themes/scss/theme/index.scss
+++ b/src/themes/scss/theme/index.scss
@@ -1,425 +1,30 @@
-@use '@lucas-labs/lui-micro/color' as color;
-@use './modules/chroma' as chroma;
-@use './modules/monaco' as monaco;
-@use './modules/codemirror' as codemirror;
-@use './modules/custom' as custom;
-@use '@lucas-labs/lui-micro/var' as var;
+@use './vars';
+@use './components';
+@use './modules';
@mixin make-theme($is-dark: true) {
- $lvl1: #{color.get('elevation/3')};
- $lvl1-rgb: #{color.get('elevation/3', 'rgb')};
- $lvl2: #{color.get('elevation/2')};
- $lvl2-rgb: #{color.get('elevation/2', 'rgb')};
- $lvl3: #{color.get('elevation/1')};
- $lvl3-rgb: #{color.get('elevation/1', 'rgb')};
-
- :root {
- * {
- --fonts-regular: #{var.get('font-family')};
- --fonts-monospace: #{var.get('code-font-family')};
- }
-
- @if $is-dark {
- color-scheme: dark;
- --is-dark-theme: true;
- } @else {
- color-scheme: light;
- --is-dark-theme: false;
- }
-
- accent-color: #{color.get('primary/base')};
-
- --color-primary: #{color.get('primary/base')};
- --color-primary-contrast: #{color.get('primary/base', 'contrast')};
-
- --color-primary-dark-1: #{color.get('primary/dark/3%')};
- --color-primary-dark-2: #{color.get('primary/dark/6%')};
- --color-primary-dark-3: #{color.get('primary/dark/9%')};
- --color-primary-dark-4: #{color.get('primary/dark/12%')};
- --color-primary-dark-5: #{color.get('primary/dark/15%')};
- --color-primary-dark-6: #{color.get('primary/dark/18%')};
- --color-primary-dark-7: #{color.get('primary/dark/21%')};
-
- --color-primary-light-1: #{color.get('primary/light/3%')};
- --color-primary-light-2: #{color.get('primary/light/6%')};
- --color-primary-light-3: #{color.get('primary/light/9%')};
- --color-primary-light-4: #{color.get('primary/light/12%')};
- --color-primary-light-5: #{color.get('primary/light/15%')};
- --color-primary-light-6: #{color.get('primary/light/18%')};
- --color-primary-light-7: #{color.get('primary/light/21%')};
-
- --color-primary-alpha-10: rgba(#{color.get('primary/base', 'rgb')}, 0.1);
- --color-primary-alpha-20: rgba(#{color.get('primary/base', 'rgb')}, 0.2);
- --color-primary-alpha-30: rgba(#{color.get('primary/base', 'rgb')}, 0.3);
- --color-primary-alpha-40: rgba(#{color.get('primary/base', 'rgb')}, 0.4);
- --color-primary-alpha-50: rgba(#{color.get('primary/base', 'rgb')}, 0.5);
- --color-primary-alpha-60: rgba(#{color.get('primary/base', 'rgb')}, 0.6);
- --color-primary-alpha-70: rgba(#{color.get('primary/base', 'rgb')}, 0.7);
- --color-primary-alpha-80: rgba(#{color.get('primary/base', 'rgb')}, 0.8);
- --color-primary-alpha-90: rgba(#{color.get('primary/base', 'rgb')}, 0.9);
-
-
- --color-primary-hover: #{color.get('primary/light/3%')};
- --color-primary-active: #{color.get('primary/light/6%')};
- --color-secondary: #{color.get('elevation/5')};
-
- --color-secondary-dark-1: #{color.get('secondary/light/3%')};
- --color-secondary-dark-2: #{color.get('secondary/light/6%')};
- --color-secondary-dark-3: #{color.get('secondary/light/9%')};
- --color-secondary-dark-4: #{color.get('secondary/light/12%')};
- --color-secondary-dark-5: #{color.get('secondary/light/15%')};
- --color-secondary-dark-6: #{color.get('secondary/light/18%')};
- --color-secondary-dark-7: #{color.get('secondary/light/21%')};
- --color-secondary-dark-8: #{color.get('secondary/light/24%')};
- --color-secondary-dark-9: #{color.get('secondary/light/27%')};
- --color-secondary-dark-10: #{color.get('secondary/light/30%')};
- --color-secondary-dark-11: #{color.get('secondary/light/33%')};
- --color-secondary-dark-12: #{color.get('secondary/light/36%')};
- --color-secondary-dark-13: #{color.get('secondary/light/39%')};
-
- --color-secondary-light-1: #{color.get('secondary/dark/3%')};
- --color-secondary-light-2: #{color.get('secondary/dark/6%')};
- --color-secondary-light-3: #{color.get('secondary/dark/9%')};
- --color-secondary-light-4: #{color.get('secondary/dark/12%')};
-
- --color-secondary-alpha-10: rgba(#{color.get('secondary/base', 'rgb')}, 0.1);
- --color-secondary-alpha-20: rgba(#{color.get('secondary/base', 'rgb')}, 0.2);
- --color-secondary-alpha-30: rgba(#{color.get('secondary/base', 'rgb')}, 0.3);
- --color-secondary-alpha-40: rgba(#{color.get('secondary/base', 'rgb')}, 0.4);
- --color-secondary-alpha-50: rgba(#{color.get('secondary/base', 'rgb')}, 0.5);
- --color-secondary-alpha-60: rgba(#{color.get('secondary/base', 'rgb')}, 0.6);
- --color-secondary-alpha-70: rgba(#{color.get('secondary/base', 'rgb')}, 0.7);
- --color-secondary-alpha-80: rgba(#{color.get('secondary/base', 'rgb')}, 0.8);
- --color-secondary-alpha-90: rgba(#{color.get('secondary/base', 'rgb')}, 0.9);
-
- /* colors */
- --color-red: #{color.get('theme/red/base')};
- --color-orange: #{color.get('theme/peach/base')};
- --color-yellow: #{color.get('theme/yellow/base')};
- --color-olive: #{color.get('theme/green/base')};
- --color-green: #{color.get('theme/green/base')};
- --color-teal: #{color.get('theme/teal/base')};
- --color-blue: #{color.get('theme/blue/base')};
- --color-violet: #{color.get('theme/lavender/base')};
- --color-purple: #{color.get('theme/mauve/base')};
- --color-pink: #{color.get('theme/pink/base')};
- --color-brown: #{color.get('theme/flamingo/base')};
- --color-grey: #{color.get('elevation/9')};
- --color-black: #{color.get('elevation/1')};
-
- /* dark variants */
- --color-red-dark-1: #{color.get('theme/red/dark/12%')};
- --color-orange-dark-1: #{color.get('theme/peach/dark/12%')};
- --color-yellow-dark-1: #{color.get('theme/yellow/dark/12%')};
- --color-olive-dark-1: #{color.get('theme/green/dark/12%')};
- --color-green-dark-1: #{color.get('theme/green/dark/12%')};
- --color-teal-dark-1: #{color.get('theme/teal/dark/12%')};
- --color-blue-dark-1: #{color.get('theme/blue/dark/12%')};
- --color-violet-dark-1: #{color.get('theme/lavender/dark/12%')};
- --color-purple-dark-1: #{color.get('theme/mauve/dark/12%')};
- --color-pink-dark-1: #{color.get('theme/pink/dark/12%')};
- --color-brown-dark-1: #{color.get('theme/flamingo/dark/12%')};
-
- --color-red-dark-2: #{color.get('theme/red/dark/15%')};
- --color-orange-dark-2: #{color.get('theme/peach/dark/15%')};
- --color-yellow-dark-2: #{color.get('theme/yellow/dark/15%')};
- --color-olive-dark-2: #{color.get('theme/green/dark/15%')};
- --color-green-dark-2: #{color.get('theme/green/dark/15%')};
- --color-teal-dark-2: #{color.get('theme/teal/dark/15%')};
- --color-blue-dark-2: #{color.get('theme/blue/dark/15%')};
- --color-violet-dark-2: #{color.get('theme/lavender/dark/15%')};
- --color-purple-dark-2: #{color.get('theme/mauve/dark/15%')};
- --color-pink-dark-2: #{color.get('theme/pink/dark/15%')};
- --color-brown-dark-2: #{color.get('theme/flamingo/dark/15%')};
-
- /* light variants */
- --color-red-light: #{color.get('theme/red/light/12%')};
- --color-orange-light: #{color.get('theme/peach/light/12%')};
- --color-yellow-light: #{color.get('theme/yellow/light/12%')};
- --color-olive-light: #{color.get('theme/green/light/12%')};
- --color-green-light: #{color.get('theme/green/light/12%')};
- --color-teal-light: #{color.get('theme/teal/light/12%')};
- --color-blue-light: #{color.get('theme/blue/light/12%')};
- --color-violet-light: #{color.get('theme/lavender/light/12%')};
- --color-purple-light: #{color.get('theme/mauve/light/12%')};
- --color-pink-light: #{color.get('theme/pink/light/12%')};
- --color-brown-light: #{color.get('theme/flamingo/light/12%')};
- --color-grey-light: #{color.get('elevation/11')};
- --color-black-light: #{if(
- is-dark,
- color.get('theme/black/light/12%'),
- color.get('theme/white/light/12%')
- )};
-
- /* other colors */
- --color-gold: #{color.get('theme/rosewater/base')};
- --color-white: #{color.get('text')};
- --color-diff-removed-word-bg: rgba(#{color.get('theme/red/base', 'rgb')}, 0.15);
- --color-diff-added-word-bg: rgba(#{color.get('theme/green/base', 'rgb')}, 0.15);
- --color-diff-removed-row-bg: rgba(#{color.get('theme/red/base', 'rgb')}, 0.07);
- --color-diff-moved-row-bg: rgba(#{color.get('theme/yellow/base', 'rgb')}, 0.07);
- --color-diff-added-row-bg: rgba(#{color.get('theme/green/base', 'rgb')}, 0.07);
- --color-diff-removed-row-border: rgba(#{color.get('theme/red/base', 'rgb')}, 0.07);
- --color-diff-moved-row-border: rgba(#{color.get('theme/yellow/base', 'rgb')}, 0.07);
- --color-diff-added-row-border: rgba(#{color.get('theme/green/base', 'rgb')}, 0.07);
- --color-diff-inactive: #{color.get('elevation/9')};
- --color-error-border: #{color.get('theme/red/base')};
- --color-error-bg: rgba(#{color.get('theme/red/base', 'rgb')}, 0.15);
- --color-error-bg-active: #{color.get('theme/red/light/6%')};
- --color-error-bg-hover: #{color.get('theme/red/light/12%')};
- --color-error-text: #{color.get('theme/red/base')};
- --color-success-border: #{color.get('theme/green/light/12%')};
- --color-success-bg: rgba(#{color.get('theme/green/base', 'rgb')}, 0.15);
- --color-success-text: #{color.get('text')};
- --color-warning-border: #{color.get('theme/yellow/light/12%')};
- --color-warning-bg: #{color.get('theme/yellow/base')};
- --color-warning-text: #{$lvl1};
- --color-info-border: #{color.get('theme/blue/light/12%')};
- --color-info-bg: #{$lvl1};
- --color-info-text: #{color.get('text')};
- --color-red-badge: #{color.get('theme/red/light/12%')};
- --color-red-badge-bg: #{$lvl1};
- --color-red-badge-hover-bg: #{color.get('theme/red/light/6%')};
- --color-green-badge: #{color.get('theme/green/base')};
- --color-green-badge-bg: #{$lvl1};
- --color-green-badge-hover-bg: #{color.get('theme/green/light/6%')};
- --color-yellow-badge: #{color.get('theme/yellow/base')};
- --color-yellow-badge-bg: #{$lvl1};
- --color-yellow-badge-hover-bg: #{color.get('theme/yellow/light/6%')};
- --color-orange-badge: #{color.get('theme/peach/base')};
- --color-orange-badge-bg: #{$lvl1};
- --color-orange-badge-hover-bg: #{color.get('theme/peach/light/6%')};
- --color-git: #{color.get('theme/peach/base')};
- --color-label-bg: #{color.get('primary/base')};
- --color-label-hover-bg: #{color.get('primary/light/6%')};
-
- /* target-based colors */
- --color-body: #{$lvl1};
- --color-box-header: #{rgba(color.get('elevation/2', 'rgb'), 1)};
- --color-box-body: var(--color-body);
- --color-box-body-highlight: #{color.get('elevation/4')};
- --color-text-dark: #{color.get('elevation/10')};
- --color-text: #{color.get('text')};
- --color-text-light: #{color.get('elevation/12')};
- --color-text-light-1: #{color.get('elevation/11')};
- --color-text-light-2: #{color.get('elevation/10')};
- --color-text-light-3: #{color.get('elevation/9')};
- --color-footer: rgba(#{color.get('elevation/2', 'rgb')}, 0.2);
- --color-timeline: #{color.get('elevation/4')};
- --color-input-text: #{color.get('text')};
- --color-input-background: #{color.get('elevation/4')};
- --color-input-toggle-background: #{color.get('elevation/4')};
- --color-input-border: #{color.get('elevation/5')};
- --color-input-border-hover: #{color.get('elevation/6')};
- --color-header-wrapper: #{$lvl2};
- --color-header-wrapper-transparent: #00000000;
- --color-light: #{color.get('elevation/6')};
- --color-light-mimic-enabled: rgba(
- 0,
- 0,
- 0,
- calc(40 / 255 * 222 / 255 / var(--opacity-disabled))
- );
- --color-light-border: #{color.get('elevation/6')};
- --color-hover: rgba(#{color.get('elevation/6', 'rgb')}, 0.1);
- --color-active: rgba(#{color.get('text', 'rgb')}, 0.1);
- --color-menu: #{color.get('elevation/3')};
- --color-card: #{color.get('elevation/3')};
- --color-markup-table-row: rgba(#{color.get('text', 'rgb')}, 0.02);
- --color-markup-code-block: #{color.get('elevation/2')};
- --color-button: #{color.get('elevation/4')};
- --color-code-bg: $lvl1;
- --color-code-sidebar-bg: #{color.get('elevation/4')};
- --color-shadow: rgba(#{$lvl1-rgb}, 0.1);
- --color-secondary-bg: #{color.get('elevation/4')};
- --color-text-focus: #{color.get('text')};
- --color-expand-button: #{color.get('elevation/6')};
- --color-placeholder-text: #{color.get('elevation/9')};
- --color-editor-line-highlight: var(--color-primary-light-5);
- --color-project-board-bg: #{color.get('elevation/2')};
- --color-caret: var(--color-text);
- --color-reaction-bg: rgba(#{color.get('text', 'rgb')}, 0.07);
- --color-reaction-active-bg: var(--color-primary-alpha-40);
- --color-tooltip-text: #{color.get('primary/base')};
- --color-tooltip-bg: #{color.get('primary/base', 'contrast')};
- --color-nav-bg: #{$lvl2};
- --color-secondary-nav-bg: #{$lvl2};
- --color-nav-text: #{color.get('text')};
- --color-nav-hover-bg: #{color.get('elevation/6')};
- --color-label-active-bg: #{color.get('elevation/6')};
- --color-label-text: #{color.get('primary/base', 'contrast')};
- --color-accent: var(--color-primary-light-1);
- --color-small-accent: var(--color-primary-light-5);
- --color-active-line: #{color.get('elevation/5')};
- }
-
- @if $is-dark {
- /* invert emojis that are hard to read otherwise */
- .emoji[aria-label='check mark'],
- .emoji[aria-label='currency exchange'],
- .emoji[aria-label='TOP arrow'],
- .emoji[aria-label='END arrow'],
- .emoji[aria-label='ON! arrow'],
- .emoji[aria-label='SOON arrow'],
- .emoji[aria-label='heavy dollar sign'],
- .emoji[aria-label='copyright'],
- .emoji[aria-label='registered'],
- .emoji[aria-label='trade mark'],
- .emoji[aria-label='multiply'],
- .emoji[aria-label='plus'],
- .emoji[aria-label='minus'],
- .emoji[aria-label='divide'],
- .emoji[aria-label='curly loop'],
- .emoji[aria-label='double curly loop'],
- .emoji[aria-label='wavy dash'],
- .emoji[aria-label='paw prints'],
- .emoji[aria-label='musical note'],
- .emoji[aria-label='musical notes'] {
- filter: invert(100%) hue-rotate(180deg);
- }
- }
-
- @media (prefers-color-scheme: dark) {
- input:-webkit-autofill, input:-webkit-autofill:focus, input:-webkit-autofill:hover, input:-webkit-autofill:active, .ui.form .field.field input:-webkit-autofill, .ui.form .field.field input:-webkit-autofill:focus, .ui.form .field.field input:-webkit-autofill:hover, .ui.form .field.field input:-webkit-autofill:active {
- -webkit-background-clip: text;
- -webkit-text-fill-color: var(--color-secondary);
- box-shadow: 0 0 0 100px var(--color-primary-light-3) inset !important;
- border-color: var(--color-primary-light-3) !important;
- }
- }
-
- .ui.ui.ui.button:not(.inverted, .basic),
- .ui.ui.ui.label:not(.inverted, .basic) {
- &.primary,
- &.green,
- &.red,
- &.teal {
- color: $lvl1;
- &:hover {
- color: $lvl3;
- }
- }
- }
-
- .ui.success.message, .ui.attached.success.message, .ui.positive.message, .ui.attached.positive.message {
- background: var(--color-success-bg);
- color: var(--color-success-text);
- border-color: var(--color-success-border);
- }
-
- .ui.grey.labels .label, .ui.ui.ui.grey.label {
- background-color: color.get('primary/base');
- border-color: color.get('primary/base');
- color: $lvl1;
- font-weight: 900;
- }
-
- .ui.label, .ui.menu .item>.label {
- background: var(--color-label-bg);
- color: var(--color-label-text);
- }
-
- .ui.basic.modal {
- background-color: $lvl3;
- }
-
- .ui.error.message .header, .ui.negative.message .header, .ui.red.message .header {
- color: var(--color-error-text);
- }
-
- // modal text color for the "Remove GPG Key" modal
- .ui.basic.modal,
- .ui.basic.modal > .header,
- .ui.inverted.button {
- color: color.get('text') !important;
- }
-
- ::selection {
- background: rgba(#{color.get('theme/rosewater/base', 'rgb')}, 0.3) !important;
- }
-
- body {
- font-size: var.get('base-font-size');
- }
-
- footer {
- justify-content: flex-end !important;
-
- .right-links {
- justify-content: space-around !important;
- }
-
- .right-links>a {
- border-left: none !important;
- padding-left: 0px !important;
- margin-left: 0px !important;
- }
-
- .ui.dropdown .menu {
- left: -50% !important;
- margin-bottom: 16px !important;
- }
- }
-
- .label.isSigned {
- margin: 0px .25em !important;
- padding: 0 !important;
- display: inline-flex !important;
- gap: 0px !important;
- border-radius: 16px !important;
-
- --color-light-border: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 1) !important;
- --color-label-bg: none !important;
- --color-text: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 1) !important;
- --color-green-badge-bg: none !important;
- --color-green-badge-hover-bg: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 0.05) !important;
- --color-label-hover-bg: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 0.05) !important;
- --color-label-text: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 1) !important;
- --color-green-badge: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 1) !important;
-
- .shortsha {
- padding: 4px 6px 4px 12px !important;
- }
-
- .ui.detail.icon.button {
- opacity: 1 !important;
- padding: 4px 8px 4px 6px !important;
- margin: 0 !important;
- background: none !important;
- border-color: rgba(#{color.get('theme/dark-green/base', 'rgb')}, 1) !important;
- }
-
- &.isVerified {
- .ui.detail.icon.button {
- padding: 4px 12px 4px 6px !important;
- }
- }
- }
-
- #commits-table {
- --color-light: transparent !important;
- }
-
- .flex-list {
- .flex-item {
- .flex-item-main {
- gap: var.get('measure/.25x');
-
- .flex-item-header {
- .flex-item-title {
- gap: var.get('measure/.5x');
- }
- }
-
- .flex-item-body:not(:last-child) {
- margin-bottom: var.get('measure/1x');
- }
- }
- }
- }
-
- @include chroma.make-chroma-styles;
- @include codemirror.make-code-mirror-styles;
- @include monaco.make-monaco-styles($is-dark: true);
- @include custom.apply-custom-styles;
+ @include vars.base;
+ @include vars.colors($is-dark);
+
+ // components
+ @include components.label-default; // label for GPG signed commits
+ @include components.label-signed; // label for GPG signed commits
+ @include components.editor; // github-style (kinda) markdown editor in comments, issues, etc.
+ @include components.forms; // github-style dropdown menus
+ @include components.file-content; // github-style file content
+ @include components.avatar; // github-style avatars
+ @include components.gitea-button; // github-style buttons
+ @include components.segment;
+ @include components.comments; // github-style comment boxes
+ @include components.markup; // styling rendered for markdown content
+
+ // code highlighting
+ @include modules.chroma($is-dark); // syntax highlighting
+ @include modules.codemirror; // code editor
+ @include modules.monaco; // vscode-like code editor
+ @include modules.settings; // settings & profile pages
+
+ // customized pages
+ @include modules.repo; // repo page
+ @include modules.issues; // issues page
}
diff --git a/src/themes/scss/theme/modules/_chroma.scss b/src/themes/scss/theme/modules/_chroma.scss
index c22cf7d..e92b580 100644
--- a/src/themes/scss/theme/modules/_chroma.scss
+++ b/src/themes/scss/theme/modules/_chroma.scss
@@ -1,304 +1,100 @@
@use '@lucas-labs/lui-micro/color' as color;
@use '@lucas-labs/lui-micro/var' as var;
+@mixin chroma($dark: false) {
+ $orange: if($dark, 'palette/orange/base', 'palette/orange/dark/15%');
+ $blue: if($dark, 'palette/blue/base', 'palette/blue/dark/15%');
+ $fg: 'text';
+ $subtle: 'subtle';
+ $more-subtle: if($dark, 'elevation/8', 'elevation/8');
+ $brown: if($dark, 'palette/brown/base', 'palette/brown/dark/15%');
+ $red: if($dark, 'palette/red/base', 'palette/red/dark/15%');
+ $green: if($dark, 'palette/green/base', 'palette/green/dark/10%');
+ $teal: if($dark, 'palette/teal/base', 'palette/teal/dark/15%');
+ $purple: if($dark, 'palette/purple/base', 'palette/purple/dark/10%');
+ $yellow: if($dark, 'palette/yellow/base', 'palette/yellow/dark/25%');
+ $violet: if($dark, 'palette/violet/base', 'palette/violet/dark/50%');
+ $pink: if($dark, 'palette/pink/base', 'palette/pink/dark/25%');
+ $blwh: if($dark, 'palette/white/base', 'palette/black/base');
-@mixin make-chroma-styles {
- .chroma .code-inner{
- font: 14px var.get('code-font-family');
- }
+ .chroma {
+ .code-inner {
+ font: 14px var.get('code-font-family');
+ }
- /* NameBuiltinPseudo */
- .chroma .bp {
- color: color.get('theme/peach/base');
- }
- /* Comment */
- .chroma .c {
- color: color.get('elevated/7');
- }
- /* CommentSingle */
- .chroma .c1 {
- color: color.get('elevated/7');
- }
- /* CommentHashbang */
- .chroma .ch {
- color: color.get('elevated/7');
- }
- /* CommentMultiline */
- .chroma .cm {
- color: color.get('elevated/7');
- }
- /* CommentPreproc */
- .chroma .cp {
- color: color.get('theme/blue/base');
- }
- /* CommentPreprocFile */
- .chroma .cpf {
- color: color.get('theme/blue/base');
- }
- /* CommentSpecial */
- .chroma .cs {
- color: color.get('elevated/7');
- }
- /* LiteralStringDelimiter */
- .chroma .dl {
- color: color.get('theme/blue/base');
- }
- /* NameFunctionMagic */
- .chroma .fm {
- }
- /* Generic */
- .chroma .g {
- }
- /* GenericDeleted */
- .chroma .gd {
- color: color.get('theme');
- background-color: rgba(#{color.get('theme/red/base', 'rgb')}, 0.15);
- }
- /* GenericEmph */
- .chroma .ge {
- font-style: italic;
- }
- /* GenericHeading */
- .chroma .gh {
- color: color.get('theme/sky/base');
- }
- /* GenericInserted */
- .chroma .gi {
- color: color.get('theme');
- background-color: rgba(#{color.get('theme/green/base', 'rgb')}, 0.15);
- }
- /* GenericUnderline */
- .chroma .gl {
- }
- /* GenericOutput */
- .chroma .go {
- color: color.get('theme/peach/base');
- }
- /* GenericPrompt */
- .chroma .gp {
- color: color.get('elevated/7');
- font-weight: bold;
- }
- /* GenericError */
- .chroma .gr {
- color: color.get('theme/maroon/base');
- }
- /* GenericStrong */
- .chroma .gs {
- font-weight: bold;
- }
- /* GenericTraceback */
- .chroma .gt {
- color: color.get('theme/maroon/base');
- }
- /* GenericSubheading */
- .chroma .gu {
- color: color.get('theme/sky/base');
- }
- /* LiteralNumberIntegerLong */
- .chroma .il {
- color: color.get('theme/peach/base');
- }
- /* Keyword */
- .chroma .k {
- color: color.get('theme/mauve/base');
- }
- /* KeywordConstant */
- .chroma .kc {
- color: color.get('theme/yellow/base');
- }
- /* KeywordDeclaration */
- .chroma .kd {
- color: color.get('theme/mauve/base');
- }
- /* KeywordNamespace */
- .chroma .kn {
- color: color.get('theme/yellow/base');
- }
- /* KeywordPseudo */
- .chroma .kp {
- color: color.get('theme/mauve/base');
- font-weight: bold;
- }
- /* KeywordReserved */
- .chroma .kr {
- color: color.get('theme/mauve/base');
- }
- /* KeywordType */
- .chroma .kt {
- color: color.get('theme/yellow/base');
- }
- /* Literal */
- .chroma .l {
- }
- /* LiteralDate */
- .chroma .ld {
- }
- /* LiteralNumber */
- .chroma .m {
- color: color.get('theme/peach/base');
- }
- /* LiteralNumberBin */
- .chroma .mb {
- color: color.get('theme/peach/base');
- }
- /* LiteralNumberFloat */
- .chroma .mf {
- color: color.get('theme/peach/base');
- }
- /* LiteralNumberHex */
- .chroma .mh {
- color: color.get('theme/peach/base');
- }
- /* LiteralNumberInteger */
- .chroma .mi {
- color: color.get('theme/peach/base');
- }
- /* LiteralNumberOct */
- .chroma .mo {
- color: color.get('theme/peach/base');
- }
- /* Name */
- .chroma .n {
- color: color.get('theme/lavender/base');
- }
- /* NameAttribute */
- .chroma .na {
- color: color.get('theme/yellow/base');
- }
- /* NameBuiltin */
- .chroma .nb {
- color: color.get('theme/peach/base');
- }
- /* NameClass */
- .chroma .nc {
- color: color.get('theme/yellow/base');
- }
- /* NameDecorator */
- .chroma .nd {
- color: color.get('theme/pink/base');
- }
- /* NameException */
- .chroma .ne {
- color: color.get('theme/maroon/base');
- }
- /* NameFunction */
- .chroma .nf {
- color: color.get('theme/blue/base');
- }
- /* NameEntity */
- .chroma .ni {
- color: color.get('theme/pink/base');
- }
- /* NameLabel */
- .chroma .nl {
- color: color.get('theme/yellow/base');
- }
- /* NameNamespace */
- .chroma .nn {
- color: color.get('theme/yellow/base');
- }
- /* NameConstant */
- .chroma .no {
- color: color.get('theme/yellow/base');
- }
- /* NameTag */
- .chroma .nt {
- color: color.get('theme/mauve/base');
- }
- /* NameVariable */
- .chroma .nv {
- color: color.get('theme/peach/base');
- }
- /* NameOther */
- .chroma .nx {
- color: color.get('theme/peach/base');
- }
- /* Operator */
- .chroma .o {
- color: color.get('theme/sky/base');
- }
- /* OperatorWord */
- .chroma .ow {
- color: color.get('theme/sky/base');
- font-weight: bold;
- }
- /* Punctuation */
- .chroma .p {
- color: color.get('elevated/9');
- }
- /* NameProperty */
- .chroma .py {
- }
- /* LiteralString */
- .chroma .s {
- color: color.get('theme/green/base');
- }
- /* LiteralStringSingle */
- .chroma .s1 {
- color: color.get('theme/green/base');
- }
- /* LiteralStringDouble */
- .chroma .s2 {
- color: color.get('theme/green/base');
- }
- /* LiteralStringAffix */
- .chroma .sa {
- color: color.get('theme/green/base');
- }
- /* LiteralStringBacktick */
- .chroma .sb {
- color: color.get('theme/green/base');
- }
- /* LiteralStringChar */
- .chroma .sc {
- color: color.get('theme/green/base');
- }
- /* LiteralStringDoc */
- .chroma .sd {
- color: color.get('theme/green/base');
- }
- /* LiteralStringEscape */
- .chroma .se {
- color: color.get('theme/blue/base');
- }
- /* LiteralStringHeredoc */
- .chroma .sh {
- color: color.get('theme/green/base');
- }
- /* LiteralStringInterpol */
- .chroma .si {
- color: color.get('theme/green/base');
- }
- /* LiteralStringRegex */
- .chroma .sr {
- color: color.get('theme/blue/base');
- }
- /* LiteralStringSymbol */
- .chroma .ss {
- color: color.get('theme/green/base');
- }
- /* LiteralStringOther */
- .chroma .sx {
- color: color.get('theme/green/base');
- }
- /* NameVariableClass */
- .chroma .vc {
- color: color.get('theme/yellow/base');
- }
- /* NameVariableGlobal */
- .chroma .vg {
- color: color.get('theme/peach/base');
- }
- /* NameVariableInstance */
- .chroma .vi {
- color: color.get('theme/yellow/base');
- }
- /* NameVariableMagic */
- .chroma .vm {
- }
- /* TextWhitespace */
- .chroma .w {
- color: color.get('elevated/4');
- }
-}
+ .bp { color: color.get($orange); font-weight: 600;} // NameBuiltinPseudo
+ .c { color: color.get($subtle); font-style: italic; } // Comment
+ .c1 { color: color.get($subtle); font-style: italic; } // CommentSingle
+ .ch { color: color.get($subtle); font-style: italic; } // CommentHashbang
+ .cm { color: color.get($subtle); font-style: italic; } // CommentMultiline
+ .cp { color: color.get($blue); } // CommentPreproc
+ .cpf { color: color.get($blue); } // CommentPreprocFile
+ .cs { color: color.get($subtle); } // CommentSpecial
+ .dl { color: color.get($blue); } // LiteralStringDelimiter
+ .fm {} // NameFunctionMagic
+ .g {} // Generic
+ .gd { color: color.get($blwh); background-color: rgba(#{color.get($red, 'rgb')}, .25); } // GenericDeleted
+ .ge { font-style: italic; } // GenericEmph
+ .gh { color: color.get($teal); } // GenericHeading
+ .gi { color: color.get($blwh); background-color: rgba(#{color.get($green, 'rgb')}, 0.3); } // GenericInserted
+ .gl {} // GenericUnderline
+ .go { color: color.get($orange); } // GenericOutput
+ .gp { color: color.get($subtle); font-weight: bold; } // GenericPrompt
+ .gr { color: color.get($brown); } // GenericError
+ .gs { font-weight: bold; } // GenericStrong
+ .gt { color: color.get($brown); } // GenericTraceback
+ .gu { color: color.get($teal); } // GenericSubheading
+ .il { color: color.get($orange); } // LiteralNumberIntegerLong
+ .k { color: color.get($purple); font-weight: 600; } // Keyword
+ .kc { color: color.get($yellow); } // KeywordConstant
+ .kd { color: color.get($purple); font-weight: 600; } // KeywordDeclaration
+ .kn { color: color.get($yellow); } // KeywordNamespace
+ .kp { color: color.get($purple); font-weight: 600; } // KeywordPseudo
+ .kr { color: color.get($purple); font-weight: 600;} // KeywordReserved
+ .kt { color: color.get($yellow); } // KeywordType
+ .l {} // Literal
+ .ld {} // LiteralDate
+ .m { color: color.get($orange); } // LiteralNumber
+ .mb { color: color.get($orange); } // LiteralNumberBin
+ .mf { color: color.get($orange); } // LiteralNumberFloat
+ .mh { color: color.get($orange); } // LiteralNumberHex
+ .mi { color: color.get($orange); } // LiteralNumberInteger
+ .mo { color: color.get($orange); } // LiteralNumberOct
+ .n { color: color.get($violet); } // Name
+ .na { color: color.get($yellow); } // NameAttribute
+ .nb { color: color.get($orange); font-weight: 600; } // NameBuiltin
+ .nc { color: color.get($pink); } // NameClass
+ .nd { color: color.get($pink); } // NameDecorator
+ .ne { color: color.get($brown); } // NameException
+ .nf { color: color.get($blue); } // NameFunction
+ .ni { color: color.get($pink); } // NameEntity
+ .nl { color: color.get($yellow); } // NameLabel
+ .nn { color: color.get($yellow); } // NameNamespace
+ .no { color: color.get($yellow); } // NameConstant
+ .nt { color: color.get($purple); } // NameTag
+ .nv { color: color.get($orange); } // NameVariable
+ .nx { color: color.get($orange); } // NameOther
+ .o { color: color.get($teal); } // Operator
+ .ow { color: color.get($teal); font-weight: bold; } // OperatorWord
+ .p { color: color.get($subtle); } // Punctuation
+ .py {} // NameProperty
+ .s { color: color.get($green); } // LiteralString
+ .s1 { color: color.get($green); } // LiteralStringSingle
+ .s2 { color: color.get($green); } // LiteralStringDouble
+ .sa { color: color.get($green); } // LiteralStringAffix
+ .sb { color: color.get($green); } // LiteralStringBacktick
+ .sc { color: color.get($green); } // LiteralStringChar
+ .sd { color: color.get($green); } // LiteralStringDoc
+ .se { color: color.get($blue); } // LiteralStringEscape
+ .sh { color: color.get($green); } // LiteralStringHeredoc
+ .si { color: color.get($green); } // LiteralStringInterpol
+ .sr { color: color.get($blue); } // LiteralStringRegex
+ .ss { color: color.get($green); } // LiteralStringSymbol
+ .sx { color: color.get($green); } // LiteralStringOther
+ .vc { color: color.get($yellow); } // NameVariableClass
+ .vg { color: color.get($orange); } // NameVariableGlobal
+ .vi { color: color.get($yellow); } // NameVariableInstance
+ .vm {} // NameVariableMagic
+ .w { color: color.get($more-subtle); } // TextWhitespace
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/_codemirror.scss b/src/themes/scss/theme/modules/_codemirror.scss
index ae47773..e1ae601 100644
--- a/src/themes/scss/theme/modules/_codemirror.scss
+++ b/src/themes/scss/theme/modules/_codemirror.scss
@@ -1,6 +1,6 @@
@use '@lucas-labs/lui-micro/color' as color;
-@mixin make-code-mirror-styles {
+@mixin codemirror {
.CodeMirror,
.CodeMirror.cm-s-default,
.CodeMirror.cm-s-paper {
@@ -13,19 +13,19 @@
}
.cm-quote {
- color: color.get('theme/green/base')
+ color: color.get('palette/green/base')
}
.cm-keyword {
- color: color.get('theme/mauve/base');
+ color: color.get('palette/purple/base');
}
.cm-atom {
- color: color.get('theme/red/base');
+ color: color.get('palette/red/base');
}
.cm-number {
- color: color.get('theme/peach/base');
+ color: color.get('palette/orange/base');
}
.cm-def {
@@ -33,11 +33,11 @@
}
.cm-variable-2 {
- color: color.get('theme/sky/base');
+ color: color.get('palette/blue/base');
}
.cm-variable-3 {
- color: color.get('theme/teal/base');
+ color: color.get('palette/teal/base');
}
.cm-comment {
@@ -45,23 +45,23 @@
}
.cm-string {
- color: color.get('theme/green')
+ color: color.get('palette/green/base')
}
.cm-string-2 {
- color: color.get('theme/green')
+ color: color.get('palette/green/base')
}
.cm-meta {
- color: color.get('theme/peach/base');
+ color: color.get('palette/orange/base');
}
.cm-qualifier {
- color: color.get('theme/peach/base');
+ color: color.get('palette/orange/base');
}
.cm-builtin {
- color: color.get('theme/peach/base');
+ color: color.get('palette/orange/base');
}
.cm-bracket {
@@ -69,11 +69,11 @@
}
.cm-tag {
- color: color.get('theme/yellow/base');
+ color: color.get('palette/yellow/base');
}
.cm-attribute {
- color: color.get('theme/yellow/base');
+ color: color.get('palette/yellow/base');
}
.cm-hr {
@@ -81,15 +81,15 @@
}
.cm-url {
- color: color.get('theme/blue/base');
+ color: color.get('palette/blue/base');
}
.cm-link {
- color: color.get('theme/blue/base');
+ color: color.get('palette/blue/base');
}
.cm-error {
- color: color.get('theme/red/base');
+ color: color.get('palette/red/base');
}
}
}
diff --git a/src/themes/scss/theme/modules/_monaco.scss b/src/themes/scss/theme/modules/_monaco.scss
index 8354839..7316de8 100644
--- a/src/themes/scss/theme/modules/_monaco.scss
+++ b/src/themes/scss/theme/modules/_monaco.scss
@@ -1,6 +1,6 @@
@use '@lucas-labs/lui-micro/color' as color;
-@mixin make-monaco-styles($is-dark: true) {
+@mixin monaco {
$surface0: #{color.get('elevation/4')};
$subtext0: #{color.get('elevation/10')};
$overlay2: #{color.get('elevation/9')};
@@ -8,12 +8,12 @@
$base: #{color.get('elevation/3')};
$accent: #{color.get('primary/base')};
$text: #{color.get('text')};
- $mauve: #{color.get('theme/sapphire/base')};
- $peach: #{color.get('theme/peach/base')};
- $teal: #{color.get('theme/teal/base')};
- $green: #{color.get('theme/green/base')};
- $blue: #{color.get('theme/blue/base')};
- $pink: #{color.get('theme/pink/base')};
+ $mauve: #{color.get('palette/purple/base')};
+ $peach: #{color.get('palette/orange/base')};
+ $teal: #{color.get('palette/teal/base')};
+ $green: #{color.get('palette/green/base')};
+ $blue: #{color.get('palette/blue/base')};
+ $pink: #{color.get('palette/pink/base')};
.monaco-editor {
--vscode-editor-background: #{$mantle} !important;
diff --git a/src/themes/scss/theme/modules/custom/_home.scss b/src/themes/scss/theme/modules/custom/_home.scss
deleted file mode 100644
index 33a596e..0000000
--- a/src/themes/scss/theme/modules/custom/_home.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-@use '@lucas-labs/lui-micro/var' as var;
-@use '@lucas-labs/lui-micro/color' as color;
-
-@mixin apply-styles {
- .page-content.home {
- div.center {
- img {
- // background-color: color.get('primary/base');
- // border-radius: var.get('measure/4x');
- // padding: var.get('measure/1.25x');
- }
- }
- }
-}
diff --git a/src/themes/scss/theme/modules/custom/_issue-content.scss b/src/themes/scss/theme/modules/custom/_issue-content.scss
deleted file mode 100644
index f0cc4d6..0000000
--- a/src/themes/scss/theme/modules/custom/_issue-content.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@mixin apply-styles {
- .issue-content {
- img {
- max-width: 100%;
- }
- }
-
- .issue-content, .issue-list {
- .labels-list {
- .label {
-
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/custom/_markup.scss b/src/themes/scss/theme/modules/custom/_markup.scss
deleted file mode 100644
index 90637c9..0000000
--- a/src/themes/scss/theme/modules/custom/_markup.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@use '@lucas-labs/lui-micro/color' as color;
-
-@mixin apply-styles() {
- .markup {
- table {
- width: fit-content;
- }
- }
-}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/custom/_project.scss b/src/themes/scss/theme/modules/custom/_project.scss
deleted file mode 100644
index 2ba9fc5..0000000
--- a/src/themes/scss/theme/modules/custom/_project.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@use '@lucas-labs/lui-micro/var' as var;
-@use '@lucas-labs/lui-micro/color' as color;
-
-@mixin apply-styles {
- #project-board {
- .project-column-header {
- .project-column-title {
- .circular.label {
- display: flex;
- padding: 0 !important;
- align-items: center;
- justify-content: center;
- line-height: 16px;
- padding: 0 var.get('measure/.25x') !important;
- }
- }
- }
- }
-}
diff --git a/src/themes/scss/theme/modules/custom/_repo-header.scss b/src/themes/scss/theme/modules/custom/_repo-header.scss
deleted file mode 100644
index 8ba5d10..0000000
--- a/src/themes/scss/theme/modules/custom/_repo-header.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-@use '@lucas-labs/lui-micro/var' as var;
-@use '@lucas-labs/lui-micro/color' as color;
-
-@mixin apply-styles {
- .secondary-nav {
- display: flex;
- flex-direction: column;
- margin-bottom: var.get('measure/1x');
-
- .ui.container {
- margin: 0 0 0 0 !important;
- max-width: unset !important;
- width: 100% !important;
- padding: 0 var.get('measure/1x');
- }
-
- .repo-header {
- margin: 0 0 var.get('measure/1x') 0;
- }
-
- .ui.tabs.divider {
- margin-bottom: 0;
- }
-
- overflow-menu {
- .item {
- --item-margin-bottom: #{var.get('measure/.5x')} !important;
- margin: 0 var.get('measure/.5x') var(--item-margin-bottom) !important;
- border-radius: var.get('measure/.25x') !important;
- padding: var.get('measure/.5x') var.get('measure/.5x') !important;
- color: var(--color-text) !important;
- border: none !important;
- position: relative; // Make the parent element positioned
-
- svg {
- color: var(--color-text-light-3) !important;
- margin-right: var.get('measure/.5x') !important;
- }
-
- &:hover {
- background-color: color.get('elevation/4') !important;
- }
-
- &.active {
- background-color: transparent !important;
- color: var(--color-text) !important;
- border-radius: 0 !important;
- // font-weight: normal !important;
- border-bottom: calc(var(--item-margin-bottom) - 1px) solid var(--color-secondary-nav-bg) !important;
- margin-bottom: 1px !important;
- box-shadow: 0px 2px 0px 0px color.get('primary/base') !important;
- }
-
- .small.label {
- background-color: color.get('elevation/7');
- border: 1px solid color.get('elevation/7');
- border-radius: var.get('measure/2x');
- color: var(--color-text);
- font-weight: var(--base-text-weight-medium, 500);
- min-width: calc(var.get('measure/1.25x') + 6px);
- padding: 6px;
- text-align: center;
- align-items: center;
- justify-content: center;
- }
- }
- }
- }
-}
diff --git a/src/themes/scss/theme/modules/custom/index.scss b/src/themes/scss/theme/modules/custom/index.scss
deleted file mode 100644
index f4820a5..0000000
--- a/src/themes/scss/theme/modules/custom/index.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-@use './repo-header';
-@use './repo';
-@use './project';
-@use './home';
-@use './markup';
-@use './issue-content';
-
-@mixin apply-custom-styles {
- @include repo-header.apply-styles();
- @include repo.apply-styles();
- @include project.apply-styles();
- @include home.apply-styles();
- @include markup.apply-styles();
- @include issue-content.apply-styles();
-}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/custom/repo/_file-list.scss b/src/themes/scss/theme/modules/custom/repo/_file-list.scss
deleted file mode 100644
index 25b602e..0000000
--- a/src/themes/scss/theme/modules/custom/repo/_file-list.scss
+++ /dev/null
@@ -1,207 +0,0 @@
-@use '@lucas-labs/lui-micro/var' as var;
-@use '@lucas-labs/lui-micro/color' as color;
-
-@mixin apply-styles {
-
- #repo-topics, #topic_edit, .label-list {
- row-gap: var.get('measure/.5x');
- margin-top: 0 !important;
-
- .label:not(.basic) {
- font-size: var.get('small-font-size') !important;
- background-color: rgba(#{color.get('theme/blue/base', 'rgb')}, 0.1);
- color: color.get('primary/base');
- border-radius: var.get('measure/2x');
- line-height: 14px;
- transition: background-color 0.2s ease;
-
- &:hover {
- background-color: rgba(#{color.get('theme/blue/base', 'rgb')}, 0.3) !important;
- color: color.get('primary/base') !important;
- }
- }
-
- }
-
- .ui.table>tr>td, .ui.table>tbody>tr>td {
- border-top-color: rgba(#{color.get('theme/blue/base', 'rgb')}, 0.04);
- }
-
- .page-content.repository.file.list > .ui.container.lugit-repo-list-view {
- display: flex;
- flex-direction: row-reverse;
- column-gap: 24px;
-
- @media (max-width: 1100px) {
- width: 100%;
- min-width: 100%;
- margin: 0;
- padding: 0 var.get('measure/2x');
-
- .lugit-repo-header-data {
- min-width: calc(#{var.get('repo-home/sidebar-width')} * 0.87) !important;
- max-width: calc(#{var.get('repo-home/sidebar-width')} * 0.87) !important;
- width: calc(#{var.get('repo-home/sidebar-width')} * 0.87) !important;
- }
-
- .repo-button-row {
- .gt-gap-y-3 {
- column-gap: var.get('measure/.5x');
-
- #new-pull-request {
- display: none;
- }
-
- [role=menu] {
- display: none;
- }
- }
-
- #clone-panel {
- #repo-clone-url {
- display: none;
- }
- }
- }
- }
-
- @media (max-width: 1280px) {
- flex-direction: column;
- column-gap: 0;
- row-gap: 24px;
-
- .lugit-repo-header-data {
- min-width: 100%!important;
- max-width: 100%!important;
- width: 100%!important;
- }
-
- #repo-topics {
- display: none !important;
- }
-
- #repo-desc {
- display: flex;
- flex-direction: column;
- font-size: 1em;
- row-gap: var.get('measure/1x');
-
- h5 {
- display: none;
- }
-
- span {
- font-size: 1.2em !important;
- font-style: italic !important;
- color: var(--color-text-light-3);
- }
-
- a {
- font-size: 1.1em;
- }
- }
-
- }
-
- .repo-button-row {
- .gt-gap-y-3 {
- column-gap: var.get('measure/.5x');
- }
-
- #clone-panel {
- #repo-clone-url {
- width: unset;
- }
- }
- }
-
- .lugit-repo-header-data {
- min-width: var.get('repo-home/sidebar-width');
- max-width: var.get('repo-home/sidebar-width');
- width: var.get('repo-home/sidebar-width');
-
- #repo-desc {
- display: flex;
- flex-direction: column;
- font-size: 1em;
- row-gap: var.get('measure/1x');
-
- * {
- margin: 0;
- }
-
- h5 {
- font-size: 1.1em;
- }
-
- span {
- font-size: 1.1em;
- }
-
- a {
- font-size: 1.1em;
- }
- }
- }
-
- .lugit-repo-content {
- display: flex;
- flex-direction: column;
- row-gap: var.get('measure/1x');
- flex: 1;
- }
-
- #repo-files-table {
- .commit-list {
- .latest-commit {
- gap: var.get('measure/.5x');
- }
-
- .isSigned, .isVerified {
- padding: 0 !important;
- border: none !important;
- .shortsha {
- display: none;
- }
-
- .detail {
- border-left: none !important;
- padding: 0 !important;
- margin: 0 !important;
-
- div {
- display: block;
- padding: 0 !important;
- margin: 0 !important;
-
- svg {
- margin: 0 !important;
- }
- }
- }
-
- .avatar {
- display: none;
- }
- }
-
- .commit-summary {
- color: var(--color-text-light-2) !important
- }
- }
- }
-
- #topic_edit {
- flex-direction: column;
- row-gap: var.get('measure/1x');
-
- .field.gt-f1.gt-mr-3 {
- margin: 0px !important;
- }
- }
-
- #repo-topics {
- margin-top: var.get('measure/1x') !important;
- }
- }
-}
diff --git a/src/themes/scss/theme/modules/custom/repo/index.scss b/src/themes/scss/theme/modules/custom/repo/index.scss
deleted file mode 100644
index 23a5720..0000000
--- a/src/themes/scss/theme/modules/custom/repo/index.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@use './file-list';
-
-@mixin apply-styles {
- @include file-list.apply-styles();
-}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/index.scss b/src/themes/scss/theme/modules/index.scss
new file mode 100644
index 0000000..37593a0
--- /dev/null
+++ b/src/themes/scss/theme/modules/index.scss
@@ -0,0 +1,6 @@
+@forward './repo';
+@forward './issues';
+@forward './chroma';
+@forward './codemirror';
+@forward './monaco';
+@forward './settings';
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/issues/_issue-sidebar.scss b/src/themes/scss/theme/modules/issues/_issue-sidebar.scss
new file mode 100644
index 0000000..17c8a4a
--- /dev/null
+++ b/src/themes/scss/theme/modules/issues/_issue-sidebar.scss
@@ -0,0 +1,294 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use '../../components/button' as button;
+
+@mixin sidebar {
+ --spc: #{var.get('measure/1x')}; // var(--spc) 16px
+ --spc-7_8: calc(var(--spc) * .875); // 7/8 of the base var(--spc-7_8) 14px
+ --spc-6_8: calc(var(--spc) * .750); // 6/8 = 3/4 of the base var(--spc-6_8) 12px
+ --spc-4_8: calc(var(--spc) * .500); // 4/8 = 1/2 of the base var(--spc-4_8) 8px
+ --spc-3_8: calc(var(--spc) * .375); // 3/8 of the base var(--spc-3_8) 6px
+ --spc-2_8: calc(var(--spc) * .250); // 2/8 = 1/4 of the base var(--spc-2_8) 4px
+
+ display: flex;
+ flex-direction: column;
+ border: none !important;
+ color: var(--color-text-light-2) !important;
+ padding: 0 !important;
+
+ // reset padding and margin for all children
+ >*, .issue-sidebar-combo>*, >text+*, >.ui>* {
+ margin: unset !important;
+ padding: unset !important;
+ font-size: var.get('font-size/sm') !important;
+ }
+
+ // alignment for main children elements
+ >.ui, >.text, >.ui {
+ padding-left: var(--spc-4_8) !important;
+ padding-right: 0 !important;
+ }
+
+ .ui.ui.ui.compact.grid>.column:not(.row), .ui.ui.ui.compact.grid>.row>.column {
+ padding-left: unset;
+ padding-right: unset;
+ }
+
+ // reset for all actionable elements
+ button, input, .dropdown, .ui.grid>.row>[class*="two wide"].column, .ui.grid>.column.row>[class*="two wide"].column, .ui.grid>[class*="two wide"].column, .ui.column.grid>[class*="two wide"].column {
+ padding: 0 !important;
+ margin: 0 !important;
+ min-height: 0 !important;
+ min-width: 0 !important;
+ }
+
+ // -------------------------------------------------------------- //
+ // ---------------------- Elements Styling ---------------------- //
+ // -------------------------------------------------------------- //
+
+ a:hover {
+ text-decoration: none !important;
+ }
+
+ // dividers
+ >.divider {
+ width: calc(100% - var(--spc-4_8)) !important;
+ align-self: flex-end;
+ margin: var(--spc-7_8) 0 !important;
+ }
+
+
+ // select branch dropdown
+ .select-branch {
+ align-self: flex-end;
+
+ .branch-dropdown-button {
+ @include button.hollow;
+ }
+
+ +.divider {
+ border: none !important;
+ margin: var(--spc-4_8) 0 !important;
+ }
+
+ .menu {
+ --color-menu: #{color.get('elevation/3')};
+
+ .branch-tag-item.active, .reference-list-menu, .reference-list-menu .item {
+ --color-menu: #{color.get('elevation/4')} !important;
+ }
+
+ .branch-tag-item {
+ --border-radius: #{var(--spc-4_8)};
+
+ &:hover {
+ color: currentColor !important;
+ }
+ }
+ }
+ }
+
+ .issue-sidebar-combo {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spc-4_8) !important;
+
+ > * {
+ padding-left: var(--spc-4_8) !important;
+ padding-right: var(--spc-4_8) !important;
+ }
+
+ .ui.dropdown {
+ padding-top: var(--spc-3_8) !important;
+ padding-bottom: var(--spc-3_8) !important;
+ font-size: var.get('font-size/sm');
+ transition: background-color .1s ease;
+ border-radius: var(--border-radius) !important;
+
+ >a {
+ flex: 1;
+ display: flex;
+ justify-content: space-between;
+
+ &:hover {
+ color: currentColor !important;
+ text-decoration: none !important;
+ }
+ }
+
+ &:hover {
+ background-color: rgba(#{color.get('elevation/6', 'rgb')}, .5);
+ }
+ }
+ }
+
+ // direct text children
+ >.text {
+ // background-color: orange !important;
+ flex: 1;
+ display: flex !important;
+ justify-content: space-between;
+ font-weight: 500 !important;
+ margin-bottom: var(--spc-6_8) !important;
+
+ strong {
+ font-weight: 500 !important;
+ }
+ }
+
+ .watching {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spc-6_8) !important;
+
+ button {
+ font-weight: 500;
+ padding: var(--spc-4_8) var(--spc-6_8) !important;
+ border-radius: var(--border-radius) !important;
+
+ svg {
+ color: color.get('subtle') !important;
+ }
+ }
+ }
+
+ .depending {
+ // title
+ >.text {
+ display: inline-block;
+ margin-bottom: var(--spc-6_8) !important;
+ }
+
+ >p {
+ margin-bottom: var(--spc-4_8) !important;
+ }
+
+ .divided.list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spc) !important;
+
+ .dependency {
+ border: none !important;
+
+ .item-left {
+ a { // issue
+
+ }
+
+ div.text { // repo
+ font-size: var.get('font-size/xs') !important;
+ }
+ }
+
+ // if not the first dependency in the list, we add a :before element to serve as divider
+ &:not(:first-child) {
+ position: relative;
+ &:before {
+ content: '';
+ display: block;
+ position: absolute;
+ top: -8px;
+ left: 0;
+ height: 1px;
+ width: 100%;
+ background-color: color.get('elevation/4');
+ }
+ }
+ }
+ }
+
+ #new-dependency-drop-list {
+ padding: var(--spc-3_8) var(--spc-6_8) !important;
+ // make radius to the right be 0 to merge with the add button
+ border-top-right-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+
+ &.active {
+ // restore right border to 1px when active
+ border-top-left-radius: var(--border-radius) !important;
+ border-bottom-left-radius: var(--border-radius) !important;
+ border-color: color.get('elevation/5') !important;
+ outline: 2px solid var(--color-accent);
+ }
+
+ input {
+ padding: var(--spc-3_8) var(--spc-6_8) !important;
+ line-height: 20px !important;
+ }
+ }
+
+ button {
+ padding: var(--spc-4_8) !important;
+ }
+ }
+
+ // reference
+ div.ui.equal.width.compact.grid {
+ button {
+ @include button.hollow;
+ display: flex;
+ color: color.get('subtle') !important;
+ width: unset !important;
+ }
+ }
+
+ // issue due date form
+ .issue-due-form {
+ * {
+ color: color.get('subtle') !important;
+ }
+
+ // input of type date
+ input[type="date"] {
+ padding: var(--spc-4_8) var(--spc-6_8) !important;
+ border-top-left-radius: var(--border-radius);
+ border-bottom-left-radius: var(--border-radius);
+ }
+
+ button {
+ padding: var(--spc-4_8) !important;
+ border-top-right-radius: var(--border-radius) !important;
+ border-bottom-right-radius: var(--border-radius) !important;
+ }
+ }
+
+ // direct form child
+ >form, .form {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spc-4_8) !important;
+ }
+
+ // buttons at the end of the sidebar
+ >form button, >button {
+ font-size: var.get('font-size/sm') !important;
+ border: none !important;
+ background: transparent !important;
+ padding: var(--spc-3_8) var(--spc-4_8) !important;
+ justify-content: start !important;
+ gap: var(--spc-4_8) !important;
+ margin-bottom: var(--spc-2_8) !important;
+ border-radius: var(--border-radius) !important;
+
+ svg {
+ color: color.get('subtle') !important;
+ }
+
+ &:hover {
+ background: color.get('elevation/4') !important;
+ }
+
+ // if the data-modal attr is #sidebar-delete-issue, make the color red
+ &[data-modal="#sidebar-delete-issue"] {
+ color: color.get('palette/red/base') !important;
+ svg {
+ color: color.get('palette/red/base') !important;
+ }
+
+ &:hover {
+ background: rgba(#{color.get('palette/red/dark/15%', 'rgb')}, 0.1) !important;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/issues/_issue.scss b/src/themes/scss/theme/modules/issues/_issue.scss
new file mode 100644
index 0000000..cefe9e9
--- /dev/null
+++ b/src/themes/scss/theme/modules/issues/_issue.scss
@@ -0,0 +1,258 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use '../../components/button' as button;
+@use './issue-sidebar';
+
+@mixin apply-styles {
+ .issue-content-right {
+ @include issue-sidebar.sidebar;
+ }
+
+ .issue-title-header {
+ margin-bottom: var.get('measure/1.5x');
+ padding-bottom: var.get('measure/.75x');
+ border-bottom: 1px solid color.get('elevation/5');
+
+ .issue-title {
+ .index {
+ font-weight: 300;
+ }
+ }
+
+ .issue-title-meta {
+ color: color.get('subtle');
+ }
+
+ &:has(+ .ui.pull.tabs) { // if the next sibling is a tab (e.g. pull request tab selector)
+ margin-bottom: var.get('measure/1x');
+ padding-bottom: var.get('measure/.5x');
+ border-bottom: none;
+ }
+ }
+
+ .issue-content {
+ column-gap: var.get('measure/1.5x');
+ }
+
+ .issue-content-left {
+ .timeline-avatar img {
+ border-radius: 50% !important;
+ }
+ }
+
+ .timeline-item {
+ &.event {
+ .badge {
+ // and not contains a tw-bg-* class
+ &:not([class*="tw-bg-"]) {
+ color: var(--color-timeline-badge-fg) !important;
+ }
+
+ &.tw-bg-green.tw-text-white {
+ color: var(--color-green-contrast) !important;
+ }
+
+ &.tw-bg-red.tw-text-white {
+ color: var(--color-red-contrast) !important;
+ }
+ }
+
+ .ui.segments.conversation-holder {
+ margin-left: var.get('measure/.5x');
+ border-radius: var(--border-radius);
+ }
+ }
+
+ &.comment {
+ // comment form at the end
+ &.form:not(.issue-content) {
+ display: flex;
+ align-items: flex-start;
+ background-color: var(--color-body);
+ gap: var.get('measure/1x');
+ left: -68px !important;
+ width: calc(100% + 68px - 16px) !important;
+
+ @media (max-width: 768px) {
+ left: 0 !important;
+ margin-left: -16px !important;
+ width: auto !important;
+ }
+
+ .timeline-avatar {
+ display: block;
+ position: relative !important;
+ left: unset !important;
+ flex: 0 0 auto !important;
+ }
+
+ .content {
+ // fake title to mimic github new issue page
+ &:before {
+ display: block;
+ content: 'Add a comment';
+ font-weight: 600;
+ margin-bottom: var.get('measure/1x');
+ margin-top: var.get('measure/.5x');
+ font-size: var.get('font-size/lg');
+ }
+
+ display: block;
+ position: relative !important;
+ margin-left: 0 !important;
+ flex: 1;
+
+ .ui.segment {
+ padding: 0 !important;
+ border: none !important;
+ }
+ }
+ }
+ }
+ }
+
+ .repository.view.issue {
+ --avatar-size: 24px;
+
+ .comment-list .ui.comments {
+ background-color: transparent;
+ gap: var.get('measure/1x');
+ position: relative;
+ }
+
+ .comment-list {
+ .ui.comment-code-cloud.segment {
+ padding: 0 var.get('measure/.5x') var.get('measure/.5x') !important;
+
+ .ui.comments {
+ gap: var.get('measure/.5x');
+
+ &:before {
+ display: block;
+ content: "";
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: calc((var(--avatar-size) / 2) - 1px);
+ top: 16px;
+ width: 3px;
+ background-color: var(--color-timeline);
+ opacity: 50%;
+ }
+
+ .comment.code-comment .content.comment-container{
+ background-color: transparent !important;
+
+ .header.comment-header {
+ .comment-header-left {
+ gap: var.get('measure/.5x');
+ .avatar img {
+ z-index: 1 !important;
+ width: var(--avatar-size) !important;
+ height: var(--avatar-size) !important;
+ }
+ }
+ }
+ }
+ }
+
+ .code-comment-buttons {
+ margin: 0!important;
+ }
+
+ .comment-form {
+ margin-top: var.get('measure/1x');
+
+ .field.footer {
+ margin: 0 !important;
+ padding: 0 !important;
+
+ button {
+ padding: var.get('measure/.5x') var.get('measure/1x') !important;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .repository .ui.tabs.divider {
+ margin-bottom: var.get('measure/1x');
+ }
+
+ .repository .diff-detail-box { // diff page detail box
+ padding: var.get('measure/.5x') 0;
+ margin: calc(var.get('measure/1x') * -1) 0 0 0;
+ height: 60px;
+ }
+
+ .repository #diff-container {
+ #diff-file-tree {
+ top: 60px;
+ .diff-file-tree-items {
+ margin: 0;
+ }
+ }
+
+ column-gap: var.get('measure/1x');
+
+ .diff-file-body tr.tag-code:last-child td:first-child, .diff-file-body tr.tag-code:last-child td:first-child * {
+ border-bottom-left-radius: calc(var(--border-radius) - 2px);
+ }
+
+ .diff-file-body tr.tag-code:last-child td:last-child, .diff-file-body tr.tag-code:last-child td:last-child * {
+ border-bottom-right-radius: var(--border-radius);
+ }
+
+ .ui.attached.header.diff-file-header.sticky-2nd-row {
+ position: sticky;
+ top: 60px;
+ z-index: 7;
+ }
+
+ .add-comment {
+ border-top: 1px solid var(--color-secondary);
+ border-bottom: 1px solid var(--color-secondary);
+
+ .conversation-holder {
+ .comment-code-cloud {
+ padding: var.get('measure/.75x') !important;
+ form {
+ &:not(:first-child) {
+ margin-top: var.get('measure/.5x');
+ }
+
+ .field.footer {
+ margin: 0 !important;
+ padding: 0 !important;
+
+ button {
+ padding: var.get('measure/.5x') var.get('measure/1x') !important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // new issue page
+ .page-content.repository.new.issue {
+ .issue-content-left {
+ .ui.comments .comment {
+ .ui.segment.content {
+ padding: 6px 0 0;
+ border: none;
+
+ .field {
+ margin-bottom: var.get('measure/1x');
+ }
+
+ &:before, &:after {
+ display: none;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/themes/scss/theme/modules/issues/_list.scss b/src/themes/scss/theme/modules/issues/_list.scss
new file mode 100644
index 0000000..781a097
--- /dev/null
+++ b/src/themes/scss/theme/modules/issues/_list.scss
@@ -0,0 +1,46 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin apply-styles {
+ .page-content.repository.issue-list, .page-content.dashboard.issues {
+ .secondary-nav {
+ margin-bottom: var.get('measure/1.5x');
+ }
+
+ #issue-filters {
+ margin: var.get('measure/2x') 0 var.get('measure/1x') 0;
+ gap: var.get('measure/3x');
+ align-items: center;
+ }
+
+ #issue-list {
+ .flex-item {
+ padding: var.get('measure/.75x') 0 var.get('measure/.75x') 0;
+
+ &:first-child {
+ padding-top: 0;
+ }
+
+ &:last-child {
+ padding-bottom: 0;
+ }
+
+ .branch {
+ background-color: color.get('elevation/1');
+ }
+
+ .flex-item-icon {
+ svg {
+ &.green {
+ color: color.get('palette/green/base') !important;
+ }
+ }
+ }
+ }
+ }
+
+ .list-header {
+ margin-bottom: var.get('measure/1.5x');
+ }
+ }
+}
diff --git a/src/themes/scss/theme/modules/issues/index.scss b/src/themes/scss/theme/modules/issues/index.scss
new file mode 100644
index 0000000..deb0855
--- /dev/null
+++ b/src/themes/scss/theme/modules/issues/index.scss
@@ -0,0 +1,7 @@
+@use './list';
+@use './issue';
+
+@mixin issues {
+ @include list.apply-styles();
+ @include issue.apply-styles();
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/repo/_file-list.scss b/src/themes/scss/theme/modules/repo/_file-list.scss
new file mode 100644
index 0000000..6e07737
--- /dev/null
+++ b/src/themes/scss/theme/modules/repo/_file-list.scss
@@ -0,0 +1,104 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use '../../components/button' as button;
+
+@mixin apply-styles {
+ .repo-button-row-left {
+ gap: var.get('measure/.5x');
+
+ .button {
+ @include button.hollow;
+ }
+
+ .breadcrumb.repo-path {
+ font-size: var.get('font-size/lg');
+ padding: 0 0 0 var.get('measure/.5x');
+
+ .section {
+ &:first-of-type, &.active {
+ font-weight: 600;
+ }
+ }
+
+ .breadcrumb-divider, button {
+ color: color.get('subtle') !important;
+ }
+
+ button {
+ border-radius: var(--border-radius);
+ padding: var.get('measure/.375x');
+ margin: 0 0 0 var.get('measure/.5x') !important;
+
+ svg {
+ width: var.get('measure/1x');
+ height: var.get('measure/1x');
+ }
+
+ &:hover {
+ background-color: var(--color-nav-hover-bg);
+ }
+ }
+ }
+ }
+
+ .repo-home-filelist {
+ > div {
+ margin: 0 !important;
+ }
+
+ display: flex;
+ flex-direction: column;
+ row-gap: var.get('measure/1x');
+
+ // file list table
+ #repo-files-table {
+ // header
+ .repo-file-last-commit {
+ padding: var.get('measure/.75x') var.get('measure/1x') !important;
+
+ .commit-summary {
+ margin: 0;
+ }
+
+ .latest-commit {
+ gap: var.get('measure/.5x');
+
+ img {
+ // make it a circle (avatar)
+ border-radius: 50%;
+ width: var.get('measure/1.25x');
+ height: var.get('measure/1.25x');
+ }
+ }
+
+ .label {
+ // boton con icono y avatar
+ .detail.icon.button img {
+ display: none;
+ }
+ }
+ }
+
+ // cells
+ .repo-file-cell {
+ padding: var.get('measure/.5x') var.get('measure/1x') !important;
+
+ &.name {
+ display: flex;
+ flex-wrap: nowrap;
+ column-gap: var.get('measure/.5x');
+ align-items: center;
+ }
+ }
+ }
+
+ // readme
+ #readme {
+
+ }
+
+ .repository-summary .sub-menu .item {
+ height: 30px;
+ }
+ }
+}
diff --git a/src/themes/scss/theme/modules/repo/_home.scss b/src/themes/scss/theme/modules/repo/_home.scss
new file mode 100644
index 0000000..01a8e8c
--- /dev/null
+++ b/src/themes/scss/theme/modules/repo/_home.scss
@@ -0,0 +1,243 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin apply-styles {
+ // description, labels, info
+ .repo-home-sidebar-top {
+ @media (max-width: 768px) {
+ border-bottom: 1px solid color.get('elevation/6');
+ margin-bottom: var.get('measure/1x');
+ }
+
+ form {
+ margin-top: 0 !important;
+ }
+
+ #repo-topics, #topic_edit, .label-list {
+ row-gap: var.get('measure/.5x');
+ margin-top: 0 !important;
+
+ .label:not(.basic) {
+ font-size: var.get('font-size/sm') !important;
+ background-color: rgba(#{color.get('palette/blue/base', 'rgb')}, 0.1);
+ color: color.get('primary/base');
+ border-radius: var.get('measure/2x');
+ line-height: 22px !important;
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+
+ &:hover {
+ background-color: rgba(#{color.get('palette/blue/base', 'rgb')}, 0.3) !important;
+ color: color.get('primary/base') !important;
+ }
+ }
+
+ .ui.selection.active.dropdown, .ui.selection.active.dropdown .menu {
+ border-color: color.get('elevation/6')
+ }
+ }
+
+ .repo-description {
+ margin-bottom: var.get('measure/1x');
+
+ +a.flex-text-block {
+ svg {
+ color: color.get('subtle') !important;
+ }
+ margin-bottom: var.get('measure/1x');
+ }
+ }
+
+ .flex-text-block {
+ gap: var.get('measure/.25x') !important;
+ font-size: var.get('font-size/md') !important;
+
+ svg {
+ margin-right: var.get('measure/.25x') !important;
+ }
+ }
+
+ @media (max-width: 768px) {
+ .repo-description {
+ margin-top: 0 !important;
+
+ +a.flex-text-block {
+ margin-bottom: 0;
+ }
+ }
+
+ #repo-topics, #manage_topic, .flex-item-title {
+ display: none;
+ }
+
+ .flex-item-body>div {
+ flex: 1;
+ }
+ }
+ }
+
+ // releases + languages section
+ .repo-home-sidebar-bottom {
+ .flex-list .flex-item .flex-item-main {
+ .flex-item {
+ padding: 0 !important;
+
+ .flex-item-main {
+ gap: 0 !important;
+
+ .flex-item-header {
+ * {
+ font-size: var.get('font-size/md') !important;
+ }
+
+ .flex-item-title {
+ gap: var.get('measure/.5x') !important;
+ .green.label {
+ border-radius: var.get('measure/2x');
+ font-size: var.get('font-size/sm') !important;
+ background-color: transparent !important;
+ border: 1px solid color.get('palette/green/base') !important;
+ color: color.get('palette/green/base') !important;
+ }
+ }
+ }
+
+ .flex-item-body {
+ .time {
+ font-size: var.get('font-size/sm') !important;
+ }
+ }
+ }
+ }
+ }
+
+ // languages
+ .flex-item-body {
+ gap: 0 !important;
+
+ .language-stats {
+ margin: 0 !important;
+ height: var.get('measure/.5x') !important;
+ margin-bottom: var.get('measure/.5x') !important;
+ }
+
+ .language-stats-details {
+ gap: var.get('measure/1x') !important;
+ .item {
+ font-size: var.get('font-size/sm') !important;
+ padding: 0;
+ gap: var.get('measure/.25x') !important;
+
+ .color-icon {
+ height: var.get('measure/.5x') !important;
+ width: var.get('measure/.5x') !important;
+ margin-right: var.get('measure/.25x') !important;
+ }
+ }
+ }
+ }
+ }
+
+ .repo-home-sidebar-bottom, .repo-home-sidebar-top {
+ padding-left: var.get('measure/1.5x');
+
+ @media (max-width: 768px) {
+ padding-left: 0 !important;
+ }
+
+ .flex-item-title .item {
+ display: flex;
+ flex-wrap: nowrap;
+ gap: var.get('measure/.5x');
+ text-decoration: none;
+
+ .small.label {
+ background-color: color.get('elevation/7');
+ border: 1px solid color.get('elevation/7');
+ border-radius: var.get('measure/2x');
+ color: color.get('text');
+ font-weight: var(--base-text-weight-medium, 500);
+ min-width: 20px;
+ padding: 2px;
+ text-align: center;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+
+ >.flex-list>.flex-item {
+ padding-top: var.get('measure/1x');
+ padding-bottom: var.get('measure/1x');
+
+ >.flex-item-main {
+ gap: var.get('measure/1x');
+ }
+ }
+ }
+
+ button.ui.primary.button.js-btn-clone-panel {
+ display: flex;
+ flex-wrap: nowrap;
+ gap: var.get('measure/.5x');
+ align-items: center;
+
+ span {
+ display: flex;
+ flex-wrap: nowrap;
+ gap: var.get('measure/.375x');
+ align-items: center;
+ }
+ }
+
+ .clone-panel-popup {
+ .clone-panel-field {
+ margin: var.get('measure/1x');
+ }
+
+ .clone-panel-list {
+ margin: var.get('measure/1x');
+
+ .item {
+ margin: var.get('measure/.5x') 0;
+ }
+ }
+
+ .clone-panel-tab {
+ padding: 0 var.get('measure/1x') var.get('measure/.5x');
+ display: flex;
+ gap: var.get('measure/.5x');
+
+ button {
+ padding: var.get('measure/.375x') var.get('measure/.5x');
+ font-weight: 600;
+
+ &.active {
+ border-bottom: 0;
+ position: relative;
+
+ &:after {
+ content: '';
+ display: block;
+ position: absolute;
+ bottom: -7px;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background-color: color.get('primary/base');
+ }
+ }
+
+ &:hover {
+ background-color: var(--color-hover);
+ border-radius: var(--border-radius);
+ transition: background 0.12s ease-out;
+ text-decoration: none;
+ }
+ }
+ }
+ }
+
+ .tippy-svg-arrow {
+ display: none;
+ }
+}
diff --git a/src/themes/scss/theme/modules/repo/_secondary-navbar.scss b/src/themes/scss/theme/modules/repo/_secondary-navbar.scss
new file mode 100644
index 0000000..6c238da
--- /dev/null
+++ b/src/themes/scss/theme/modules/repo/_secondary-navbar.scss
@@ -0,0 +1,171 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use '../../components/button' as button;
+
+@mixin apply-styles {
+ .secondary-nav {
+ margin-bottom: var.get('measure/1.5x') !important;
+
+ .ui.container {
+ margin: 0 0 0 0 !important;
+ max-width: unset !important;
+ width: 100% !important;
+ padding: 0 var.get('measure/1x');
+ }
+
+ // header
+ .repo-header {
+ margin: 0 0 var.get('measure/1x') 0;
+
+ // repo image
+ img.avatar {
+ width: var.get('measure/2x') !important;
+ height: var.get('measure/2x') !important;
+ }
+
+ // repo title (repo "owner / name" text)
+ .flex-item-title {
+ gap: var.get('measure/.25x') !important;
+ font-size: var.get('font-size/md') !important;
+ font-weight: normal !important;
+ color: color.get('elevation/10') !important;
+
+ a {
+ padding: var.get('measure/.375x') var.get('measure/.5x') !important;
+ border-radius: var.get('measure/.25x');
+
+ &:hover {
+ background-color: color.get('elevation/4') !important;
+ color: color.get('text') !important;
+ text-decoration: none !important;
+ }
+ }
+
+ // repo name only
+ a:last-child {
+ font-weight: 600;
+ }
+ }
+
+ // "public/private" label
+ .flex-item-trailing {
+ .label {
+ padding: var.get('measure/.25x') var.get('measure/.5x');
+ font-size: var.get('font-size/sm');
+ border-radius: var.get('measure/1x');
+ background-color: transparent;
+ color: color.get('elevation/10');
+ }
+
+ // lock icon
+ svg {
+ color: color.get('elevation/10');
+ }
+ }
+
+ @media (max-width: 768px) {
+ // repo title (repo "owner / name" text)
+ .flex-item-title {
+ display: inline-block;
+ white-space: nowrap;
+ padding: 0 var.get('measure/.5x') !important;
+ font-size: var.get('font-size/sm') !important;
+ font-weight: 500 !important;
+
+ a {
+ padding: 0 !important;
+
+ &:hover {
+ background-color: transparent !important;
+ color: color.get('primary/base') !important;
+ text-decoration: none !important;
+ }
+ }
+
+ a:first-child {
+ float: left;
+ margin-right: var.get('measure/.5x');
+ color: color.get('elevation/10') !important;
+ font-weight: 500 !important;
+
+ &:hover {
+ color: color.get('primary/base') !important;
+ }
+ }
+
+ // repo name only
+ a:last-child {
+ font-size: var.get('font-size/md') !important;
+ clear: left;
+ display: block;
+ }
+ }
+ }
+ }
+
+ // header navbar menu
+ overflow-menu.ui.secondary.pointing.menu {
+ .overflow-menu-items {
+ gap: var.get('measure/.5x') !important;
+ }
+
+ // navbar menu items
+ .item {
+ padding: var.get('measure/.375x') var.get('measure/.5x') !important;
+ margin-bottom: var.get('measure/.5x') !important;
+ border-radius: var.get('measure/.25x');
+ border: none !important;
+
+ // icon
+ svg {
+ color: var(--color-text-light-3) !important;
+ margin-right: var.get('measure/.5x') !important;
+ }
+
+ &:hover {
+ background-color: var(--color-secondary-nav-hover-bg) !important;
+ color: var(--color-text-light-2) !important;
+ }
+
+ // when the represents the current route
+ &.active {
+ border: none !important;
+ &:after {
+ content: '';
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 2px;
+ left: 0;
+ top: calc(100% + #{var.get('measure/.375x')} - 1px);
+ background-color: color.get('primary/base');
+ transform: unset;
+ border: none;
+ }
+ }
+
+ // numeric badge/label (e.g. indicating the number of issues)
+ .small.label {
+ background-color: color.get('elevation/7');
+ border: 1px solid color.get('elevation/7');
+ border-radius: var.get('measure/2x');
+ color: color.get('text');
+ font-weight: var(--base-text-weight-medium, 500);
+ min-width: calc(var.get('measure/1x') + 1px);
+ padding: 2px;
+ text-align: center;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ }
+
+ // buttons at the right of the header (unwatch, star, fork, etc.)
+ .repo-buttons {
+ .button {
+ font-size: var.get('font-size/sm') !important;
+ @include button.hollow;
+ }
+ }
+ }
+}
diff --git a/src/themes/scss/theme/modules/repo/index.scss b/src/themes/scss/theme/modules/repo/index.scss
new file mode 100644
index 0000000..a76311a
--- /dev/null
+++ b/src/themes/scss/theme/modules/repo/index.scss
@@ -0,0 +1,9 @@
+@use './home';
+@use './secondary-navbar';
+@use './file-list';
+
+@mixin repo {
+ @include home.apply-styles();
+ @include secondary-navbar.apply-styles();
+ @include file-list.apply-styles();
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/settings/_pages.scss b/src/themes/scss/theme/modules/settings/_pages.scss
new file mode 100644
index 0000000..2595c99
--- /dev/null
+++ b/src/themes/scss/theme/modules/settings/_pages.scss
@@ -0,0 +1,20 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+@use './section';
+
+@mixin settings-pages {
+ .page-content.user.settings, .page-content.admin, .page-content.repository.settings {
+ .ui.flex-container {
+ column-gap: 40px;
+
+ .flex-container-nav {
+ width: 232px;
+ @include section.nav;
+ }
+
+ .flex-container-main {
+ @include section.content;
+ }
+ }
+ }
+}
diff --git a/src/themes/scss/theme/modules/settings/index.scss b/src/themes/scss/theme/modules/settings/index.scss
new file mode 100644
index 0000000..7282697
--- /dev/null
+++ b/src/themes/scss/theme/modules/settings/index.scss
@@ -0,0 +1,5 @@
+@use './pages';
+
+@mixin settings {
+ @include pages.settings-pages;
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/settings/section/_content.scss b/src/themes/scss/theme/modules/settings/section/_content.scss
new file mode 100644
index 0000000..4cde472
--- /dev/null
+++ b/src/themes/scss/theme/modules/settings/section/_content.scss
@@ -0,0 +1,87 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin content {
+ .ui.top.attached.header {
+ background: unset;
+ border: none;
+ font-size: var.get('font-size/3xl');
+ font-weight: 400;
+ padding: 0 0 var.get('measure/.5x') 0;
+ border-bottom: 1px solid var(--color-secondary);
+ margin-bottom: var.get('measure/1x');
+
+ // if not the first header, add a margin top
+ &:not(:first-child) {
+ margin-top: var.get('measure/2.5x');
+ }
+
+ &.error {
+ border-color: var(--color-secondary) !important;
+ background: unset !important;
+ }
+ }
+
+ .ui.segment {
+ border-radius: var(--border-radius);
+
+ >*:last-child {
+ margin-bottom: 0;
+ padding-bottom: 0;
+ }
+ }
+
+ .ui.attached.segment {
+ background: unset;
+ padding:0;
+ border: none;
+ margin: 0;
+
+ &.bottom {
+ margin-top: var.get('measure/2x');
+ }
+
+ a:not(.button) {
+ color: var(--color-primary);
+ text-decoration: underline;
+ display: inline-flex;
+ align-items: center;
+ column-gap: var.get('measure/.375x');
+
+ svg {
+ margin-left: var.get('measure/.25x');
+ }
+ }
+
+ .ui.form .field {
+ margin: 0 0 1em;
+ }
+
+ .ui.form .fields .fields, .ui.form .field:last-child, .ui.form .fields:last-child .field {
+ margin-bottom: 0;
+ }
+
+ .field {
+ margin: var.get('measure/1x') 0;
+ }
+
+ .divider {
+ margin: var.get('measure/1x') 0;
+ }
+
+ .list {
+ border: 1px solid var(--color-secondary);
+ border-radius: var(--border-radius);
+
+ .item {
+ margin-left: 0;
+ margin-right: 0;
+
+ &:not(:first-child), &:first-child {
+ padding: 1rem;
+ margin: 0rem 0rem 0rem 0rem;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/settings/section/_nav.scss b/src/themes/scss/theme/modules/settings/section/_nav.scss
new file mode 100644
index 0000000..50300bd
--- /dev/null
+++ b/src/themes/scss/theme/modules/settings/section/_nav.scss
@@ -0,0 +1,94 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin nav {
+ .vertical.menu {
+ --spacing: #{var.get('measure/.375x')} #{var.get('measure/.75x')};
+ --min-height: #{var.get('measure/2x')};
+ background-color: transparent;
+ border: none;
+
+ .header.item {
+ display: flex;
+ align-items: center;
+ padding: var(--spacing);
+ font-size: var.get('font-size/sm');
+ font-weight: 600;
+ color: color.get('subtle');
+ background-color: transparent;
+ min-height: var(--min-height);
+ }
+
+ a.item, details.item {
+ min-height: var(--min-height);
+ &:before {
+ content: none;
+ }
+
+ &:not(:last-child) {
+ margin-bottom: var.get('measure/.25x');
+ }
+
+ &.active {
+ font-weight: 600;
+ background-color: var(--color-menu);
+ position: relative;
+
+ &:hover {
+ background-color: var(--color-hover);
+ }
+
+ &:after {
+ background: var(--color-primary);
+ border-radius: .375rem;
+ content: "";
+ height: 24px;
+ width: 4px;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ left: calc(0px - 4px - #{var.get('measure/.375x')});
+ }
+ }
+ }
+
+ a.item, details.item summary {
+ padding: var(--spacing);
+ border-radius: var(--border-radius);
+ }
+
+ details.item {
+ --octicon-chevron-down: url('data:image/svg+xml;utf8,
');
+
+ summary {
+ &:after {
+ color: color.get('subtle');
+ transform: scaleY(1);
+ transition: transform .12s linear;
+ mask-image: var(--octicon-chevron-down);
+ -webkit-mask-image: var(--octicon-chevron-down);
+ }
+ }
+
+ &[open] summary {
+ &:after {
+ transform: scaleY(-1);
+ }
+ }
+
+ .menu {
+ .item {
+ display: flex;
+ align-items: center;
+ color: color.get('text') !important;
+
+ &:hover {
+ background-color: var(--color-hover);
+ }
+ }
+
+ margin: 0 !important;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/modules/settings/section/index.scss b/src/themes/scss/theme/modules/settings/section/index.scss
new file mode 100644
index 0000000..aa3adbd
--- /dev/null
+++ b/src/themes/scss/theme/modules/settings/section/index.scss
@@ -0,0 +1,2 @@
+@forward './nav';
+@forward './content';
\ No newline at end of file
diff --git a/src/themes/scss/theme/vars/_base.scss b/src/themes/scss/theme/vars/_base.scss
new file mode 100644
index 0000000..f9583b9
--- /dev/null
+++ b/src/themes/scss/theme/vars/_base.scss
@@ -0,0 +1,60 @@
+@use '@lucas-labs/lui-micro/color' as color;
+@use '@lucas-labs/lui-micro/var' as var;
+
+@mixin base {
+ :root {
+ // โโโโโโโโโ
+ // โ fonts โ
+ // โโโโโโโโโ
+ --fonts-proportional: #{var.get('font-family')};
+ --fonts-monospace: #{var.get('code-font-family')};
+ --fonts-emoji: #{var.get('emoji-font-family')};
+
+ // โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
+ // โ fonts โ weights & heights โ
+ // โโโโโโโโโดโโโโโโโโโโโโโโโโโโโโ
+ --font-weight-light: 300;
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --font-weight-bold: 700;
+ --line-height-default: normal;
+
+ // โโโโโโโโโโ
+ // โ images โ
+ // โโโโโโโโโโ
+ --checkbox-mask-checked: url('data:image/svg+xml;utf8,
');
+ --checkbox-mask-indeterminate: url('data:image/svg+xml;utf8,
');
+ --octicon-chevron-right: url('data:image/svg+xml;utf8,
');
+
+ // โโโโโโโโโโ
+ // โ radius โ
+ // โโโโโโโโโโ
+ --border-radius: #{var.get('measure/.5x')};
+ --border-radius-medium: #{var.get('measure/1x')};
+ --border-radius-full: calc(infinity * 1px);
+
+ // โโโโโโโโโโ
+ // โ others โ
+ // โโโโโโโโโโ
+ --opacity-disabled: 0.55;
+ --height-loading: 16rem;
+ --min-height-textarea: 132px; // padding + 6 lines + border = calc(1.57142em + 6lh + 2px), but lh is not fully supported
+ --checkbox-size: 16px; // height and width of checkbox and radio inputs
+ --page-spacing: 24px; // space between page elements
+ --page-margin-x: 32px; // minimum space on left and right side of page
+ --tab-size: 4;
+ }
+
+ @media (min-width: 768px) and (max-width: 1200px) {
+ :root {
+ --page-margin-x: 24px;
+ }
+ }
+
+ @media (max-width: 767.98px) {
+ :root {
+ --page-margin-x: 16px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/themes/scss/theme/vars/_colors.scss b/src/themes/scss/theme/vars/_colors.scss
new file mode 100644
index 0000000..6f171a5
--- /dev/null
+++ b/src/themes/scss/theme/vars/_colors.scss
@@ -0,0 +1,410 @@
+@use '@lucas-labs/lui-micro/var' as var;
+@use '@lucas-labs/lui-micro/color' as color;
+
+@mixin colors($is-dark: true) {
+ $scheme: if($is-dark, 'dark', 'light');
+ $scheme-inverted: if($is-dark, 'light', 'dark');
+
+ :root {
+ accent-color: var(--color-accent);
+
+ @if $is-dark {
+ color-scheme: dark;
+ --is-dark-theme: true;
+ } @else {
+ color-scheme: light;
+ --is-dark-theme: false;
+ }
+
+ // โโโโโโโโโโโ
+ // โ primary โ
+ // โโโโโโโโโโโ
+ --color-primary: #{color.get('primary/base')};
+ --color-primary-contrast: #{color.get('primary/base', 'contrast')};
+
+ // dark
+ --color-primary-dark-1: #{color.get('primary/' + $scheme-inverted + '/3%')};
+ --color-primary-dark-2: #{color.get('primary/' + $scheme-inverted + '/6%')};
+ --color-primary-dark-3: #{color.get('primary/' + $scheme-inverted + '/9%')};
+ --color-primary-dark-4: #{color.get('primary/' + $scheme-inverted + '/10%')};
+ --color-primary-dark-5: #{color.get('primary/' + $scheme-inverted + '/20%')};
+ --color-primary-dark-6: #{color.get('primary/' + $scheme-inverted + '/25%')};
+ --color-primary-dark-7: #{color.get('primary/' + $scheme-inverted + '/30%')};
+
+ // light
+ --color-primary-light-1: #{color.get('primary/' + $scheme + '/3%')};
+ --color-primary-light-2: #{color.get('primary/' + $scheme + '/6%')};
+ --color-primary-light-3: #{color.get('primary/' + $scheme + '/10%')};
+ --color-primary-light-4: #{color.get('primary/' + $scheme + '/15%')};
+ --color-primary-light-5: #{color.get('primary/' + $scheme + '/20%')};
+ --color-primary-light-6: #{color.get('primary/' + $scheme + '/30%')};
+ --color-primary-light-7: #{color.get('primary/' + $scheme + '/40%')};
+
+ // alpha
+ --color-primary-alpha-10: rgba(#{color.get('primary/base', 'rgb')}, 0.1);
+ --color-primary-alpha-20: rgba(#{color.get('primary/base', 'rgb')}, 0.2);
+ --color-primary-alpha-30: rgba(#{color.get('primary/base', 'rgb')}, 0.3);
+ --color-primary-alpha-40: rgba(#{color.get('primary/base', 'rgb')}, 0.4);
+ --color-primary-alpha-50: rgba(#{color.get('primary/base', 'rgb')}, 0.5);
+ --color-primary-alpha-60: rgba(#{color.get('primary/base', 'rgb')}, 0.6);
+ --color-primary-alpha-70: rgba(#{color.get('primary/base', 'rgb')}, 0.7);
+ --color-primary-alpha-80: rgba(#{color.get('primary/base', 'rgb')}, 0.8);
+ --color-primary-alpha-90: rgba(#{color.get('primary/base', 'rgb')}, 0.9);
+
+ // states
+ --color-primary-hover: var(--color-primary-light-1);
+ --color-primary-active: var(--color-primary-light-3);
+
+ // โโโโโโโโโโโโโ
+ // โ secondary โ ยป secondary
+ // โโโโโโโโโโโโโ
+ --color-secondary: #{color.get('secondary/base')};
+
+ // dark
+ --color-secondary-dark-1: #{color.get('secondary/' + $scheme-inverted + '/3%')};
+ --color-secondary-dark-2: #{color.get('secondary/' + $scheme-inverted + '/6%')};
+ --color-secondary-dark-3: #{color.get('secondary/' + $scheme-inverted + '/9%')};
+ --color-secondary-dark-4: #{color.get('secondary/' + $scheme-inverted + '/12%')};
+ --color-secondary-dark-5: #{color.get('secondary/' + $scheme-inverted + '/15%')};
+ --color-secondary-dark-6: #{color.get('secondary/' + $scheme-inverted + '/20%')};
+ --color-secondary-dark-7: #{color.get('secondary/' + $scheme-inverted + '/25%')};
+ --color-secondary-dark-8: #{color.get('secondary/' + $scheme-inverted + '/30%')};
+ --color-secondary-dark-9: #{color.get('secondary/' + $scheme-inverted + '/35%')};
+ --color-secondary-dark-10: #{color.get('secondary/' + $scheme-inverted + '/40%')};
+ --color-secondary-dark-11: #{color.get('secondary/' + $scheme-inverted + '/45%')};
+ --color-secondary-dark-12: #{color.get('secondary/' + $scheme-inverted + '/50%')};
+ --color-secondary-dark-13: #{color.get('secondary/' + $scheme-inverted + '/55%')};
+
+ // light
+ --color-secondary-light-1: #{color.get('secondary/' + $scheme + '/3%')};
+ --color-secondary-light-2: #{color.get('secondary/' + $scheme + '/6%')};
+ --color-secondary-light-3: #{color.get('secondary/' + $scheme + '/9%')};
+ --color-secondary-light-4: #{color.get('secondary/' + $scheme + '/12%')};
+
+ // alpha
+ --color-secondary-alpha-10: rgba(#{color.get('secondary/base', 'rgb')}, 0.1);
+ --color-secondary-alpha-20: rgba(#{color.get('secondary/base', 'rgb')}, 0.2);
+ --color-secondary-alpha-30: rgba(#{color.get('secondary/base', 'rgb')}, 0.3);
+ --color-secondary-alpha-40: rgba(#{color.get('secondary/base', 'rgb')}, 0.4);
+ --color-secondary-alpha-50: rgba(#{color.get('secondary/base', 'rgb')}, 0.5);
+ --color-secondary-alpha-60: rgba(#{color.get('secondary/base', 'rgb')}, 0.6);
+ --color-secondary-alpha-70: rgba(#{color.get('secondary/base', 'rgb')}, 0.7);
+ --color-secondary-alpha-80: rgba(#{color.get('secondary/base', 'rgb')}, 0.8);
+ --color-secondary-alpha-90: rgba(#{color.get('secondary/base', 'rgb')}, 0.9);
+
+ // states
+ --color-secondary-button: var(--color-secondary-dark-4);
+ --color-secondary-hover: var(--color-secondary-dark-3);
+ --color-secondary-active: var(--color-secondary-dark-2);
+
+ // โโโโโโโโโโโ
+ // โ console โ ยป used for actions console and console files
+ // โโโโโโโโโโโ
+ --color-console-fg: #f7f8f9;
+ --color-console-fg-subtle: #bdc4cc;
+ --color-console-bg: #171b1e;
+ --color-console-border: #2e353b;
+ --color-console-hover-bg: #272d33;
+ --color-console-active-bg: #2e353b;
+ --color-console-menu-bg: #262b31;
+ --color-console-menu-border: #414b55;
+
+ // โโโโโโโโโ
+ // โ named โ
+ // โโโโโโโโโ
+ --color-red: #{color.get('palette/red/base')};
+ --color-orange: #{color.get('palette/orange/base')};
+ --color-yellow: #{color.get('palette/yellow/base')};
+ --color-olive: #{color.get('palette/olive/base')};
+ --color-green: #{color.get('palette/green/base')};
+ --color-teal: #{color.get('palette/teal/base')};
+ --color-blue: #{color.get('palette/blue/base')};
+ --color-violet: #{color.get('palette/violet/base')};
+ --color-purple: #{color.get('palette/purple/base')};
+ --color-pink: #{color.get('palette/pink/base')};
+ --color-brown: #{color.get('palette/brown/base')};
+ --color-black: #{color.get('palette/black/base')};
+
+ // โโโโโโโโโ
+ // โ named โ ยป contrasts (lugit addition)
+ // โโโโโโโโโ
+ --color-green-contrast: #{if($is-dark, var(--color-black), var(--color-white))};
+ --color-red-contrast: #{if($is-dark, var(--color-black), var(--color-white))};
+
+
+ // โโโโโโโโโ
+ // โ named โ ยป light variants
+ // โโโโโโโโโ
+ --color-red-light: #{color.get('palette/red/light/10%')};
+ --color-orange-light: #{color.get('palette/orange/light/10%')};
+ --color-yellow-light: #{color.get('palette/yellow/light/10%')};
+ --color-olive-light: #{color.get('palette/olive/light/10%')};
+ --color-green-light: #{color.get('palette/green/light/10%')};
+ --color-teal-light: #{color.get('palette/teal/light/10%')};
+ --color-blue-light: #{color.get('palette/blue/light/10%')};
+ --color-violet-light: #{color.get('palette/violet/light/10%')};
+ --color-purple-light: #{color.get('palette/purple/light/10%')};
+ --color-pink-light: #{color.get('palette/pink/light/10%')};
+ --color-brown-light: #{color.get('palette/brown/light/10%')};
+ --color-black-light: #{if(
+ $is-dark,
+ color.get('palette/black/light/10%'),
+ color.get('palette/white/light/10%')
+ )};
+
+ // โโโโโโโโโ
+ // โ named โ ยป dark 1 variants
+ // โโโโโโโโโ
+ --color-red-dark-1: #{color.get('palette/red/dark/10%')};
+ --color-orange-dark-1: #{color.get('palette/orange/dark/10%')};
+ --color-yellow-dark-1: #{color.get('palette/yellow/dark/10%')};
+ --color-olive-dark-1: #{color.get('palette/olive/dark/10%')};
+ --color-green-dark-1: #{color.get('palette/green/dark/10%')};
+ --color-teal-dark-1: #{color.get('palette/teal/dark/10%')};
+ --color-blue-dark-1: #{color.get('palette/blue/dark/10%')};
+ --color-violet-dark-1: #{color.get('palette/violet/dark/10%')};
+ --color-purple-dark-1: #{color.get('palette/purple/dark/10%')};
+ --color-pink-dark-1: #{color.get('palette/pink/dark/10%')};
+ --color-brown-dark-1: #{color.get('palette/brown/dark/10%')};
+ --color-black-dark-1: #{if(
+ $is-dark,
+ color.get('palette/black/dark/10%'),
+ color.get('palette/white/dark/10%')
+ )};
+
+ // โโโโโโโโโ
+ // โ named โ ยป dark 2 variants
+ // โโโโโโโโโ
+ --color-red-dark-2: #{color.get('palette/red/dark/20%')};
+ --color-orange-dark-2: #{color.get('palette/orange/dark/20%')};
+ --color-yellow-dark-2: #{color.get('palette/yellow/dark/20%')};
+ --color-olive-dark-2: #{color.get('palette/olive/dark/20%')};
+ --color-green-dark-2: #{color.get('palette/green/dark/20%')};
+ --color-teal-dark-2: #{color.get('palette/teal/dark/20%')};
+ --color-blue-dark-2: #{color.get('palette/blue/dark/20%')};
+ --color-violet-dark-2: #{color.get('palette/violet/dark/20%')};
+ --color-purple-dark-2: #{color.get('palette/purple/dark/20%')};
+ --color-pink-dark-2: #{color.get('palette/pink/dark/20%')};
+ --color-brown-dark-2: #{color.get('palette/brown/dark/20%')};
+ --color-black-dark-2: #{if(
+ $is-dark,
+ color.get('palette/black/dark/20%'),
+ color.get('palette/white/dark/20%')
+ )};
+
+ // โโโโโโโโ
+ // โ ansi โ ยป for actions console and console files
+ // โโโโโโโโ
+ --color-ansi-black: #1e2327;
+ --color-ansi-red: #cc4848;
+ --color-ansi-green: #87ab63;
+ --color-ansi-yellow: #cc9903;
+ --color-ansi-blue: #3a8ac6;
+ --color-ansi-magenta: #d22e8b;
+ --color-ansi-cyan: #00918a;
+ --color-ansi-white: var(--color-console-fg-subtle);
+ --color-ansi-bright-black: #424851;
+ --color-ansi-bright-red: #d15a5a;
+ --color-ansi-bright-green: #93b373;
+ --color-ansi-bright-yellow: #eaaf03;
+ --color-ansi-bright-blue: #4e96cc;
+ --color-ansi-bright-magenta: #d74397;
+ --color-ansi-bright-cyan: #00b6ad;
+ --color-ansi-bright-white: var(--color-console-fg);
+
+ // โโโโโโโโโ
+ // โ other โ
+ // โโโโโโโโโ
+ --color-grey: #{color.get('elevation/9')};
+ --color-grey-light: #{color.get('elevation/11')};
+ --color-gold: #{color.get('palette/yellow/dark/20%')};
+ --color-white: #{color.get('palette/white/base')};
+ --color-git: #f05133;
+
+ // โโโโโโโโ
+ // โ diff โ
+ // โโโโโโโโ
+ --color-diff-added-linenum-bg: #{if($is-dark, #{color.get('palette/teal/dark/50%')}, rgba(#{color.get('palette/white/base', 'rgb')}, .2))};
+ --color-diff-added-row-bg: #{if($is-dark, #{color.get('palette/teal/dark/60%')}, rgba(#{color.get('palette/green/light/20%', 'rgb')}, .25))};
+ --color-diff-added-row-border: #{if($is-dark, #{color.get('palette/teal/dark/40%')}, rgba(#{color.get('palette/green/light/25%', 'rgb')}, .25))};
+ --color-diff-added-word-bg: #{if($is-dark, #{color.get('palette/teal/dark/50%')}, rgba(#{color.get('palette/green/light/6%', 'rgb')}, .3))};
+ --color-diff-moved-row-bg: #{if($is-dark, #{color.get('palette/yellow/dark/75%')}, rgba(#{color.get('palette/yellow/light/20%', 'rgb')}, .25))};
+ --color-diff-moved-row-border: #{if($is-dark, #{color.get('palette/yellow/dark/65%')}, rgba(#{color.get('palette/yellow/light/25%', 'rgb')}, .25))};
+ --color-diff-removed-linenum-bg: #{if($is-dark, #{color.get('palette/red/dark/60%')}, rgba(#{color.get('palette/white/base', 'rgb')}, .2))};
+ --color-diff-removed-row-bg: #{if($is-dark, #{color.get('palette/red/dark/65%')}, rgba(#{color.get('palette/red/light/30%', 'rgb')}, .15))};
+ --color-diff-removed-row-border: #{if($is-dark, #{color.get('palette/red/dark/50%')}, rgba(#{color.get('palette/red/light/35%', 'rgb')}, .2))};
+ --color-diff-removed-word-bg: #{if($is-dark, #{color.get('palette/red/dark/55%')}, rgba(#{color.get('palette/red/light/25%', 'rgb')}, .2))};
+ --color-diff-inactive: #{if($is-dark, #{color.get('elevation/6')}, red)};
+
+ // โโโโโโโโโโ
+ // โ status โ
+ // โโโโโโโโโโ
+ --color-error-border: #{color.get('palette/red/base')};
+ --color-error-bg: rgba(#{color.get('palette/red/base', 'rgb')}, 0.15);
+ --color-error-bg-active: #{color.get('palette/red/light/6%')};
+ --color-error-bg-hover: #{color.get('palette/red/light/12%')};
+ --color-error-text: #{color.get('palette/red/base')};
+ --color-success-border: #{color.get('palette/green/light/12%')};
+ --color-success-bg: rgba(#{color.get('palette/green/base', 'rgb')}, 0.15);
+ --color-success-text: #{color.get('text')};
+ --color-warning-border: #{color.get('palette/yellow/light/12%')};
+ --color-warning-bg: #{color.get('palette/yellow/base')};
+ --color-warning-text: #{color.get('elevation/3')};
+ --color-info-border: #{color.get('palette/blue/light/12%')};
+ --color-info-bg: #{color.get('elevation/3')};
+ --color-info-text: #{color.get('text')};
+
+ // โโโโโโโโโ
+ // โ badge โ
+ // โโโโโโโโโ
+ --color-red-badge: #{color.get('palette/red/dark/20%')};
+ --color-red-badge-bg: rgba(#{color.get('palette/red/dark/20%', 'rgb')}, .1);
+ --color-red-badge-hover-bg: rgba(#{color.get('palette/red/dark/20%', 'rgb')}, .2);
+
+ --color-green-badge: #{color.get('palette/green/base')};
+ --color-green-badge-bg: rgba(#{color.get('palette/green/base', 'rgb')}, .1);
+ --color-green-badge-hover-bg: rgba(#{color.get('palette/green/base', 'rgb')}, .2);
+
+ --color-yellow-badge: #{color.get('palette/yellow/dark/10%')};
+ --color-yellow-badge-bg: rgba(#{color.get('palette/yellow/dark/10%', 'rgb')}, .1);
+ --color-yellow-badge-hover-bg: rgba(#{color.get('palette/yellow/dark/10%', 'rgb')}, .2);
+
+ --color-orange-badge: #{color.get('palette/orange/dark/10%')};
+ --color-orange-badge-bg: rgba(#{color.get('palette/orange/dark/10%', 'rgb')}, .1);
+ --color-orange-badge-hover-bg: rgba(#{color.get('palette/orange/dark/10%', 'rgb')}, .2);
+
+ // โโโโโโโโโโโโโโโโ
+ // โ target-based โ
+ // โโโโโโโโโโโโโโโโ
+
+ // body colors
+ --color-body: #{color.get('elevation/3')};
+ --color-text-dark: #{color.get('text')};
+ --color-text: #{color.get('text')};
+ --color-text-light: #{color.get('subtle')};
+ --color-text-light-1: #{color.get('subtle')};
+ --color-text-light-2: #{color.get('subtle')};
+ --color-text-light-3: #{color.get('subtle')};
+ --color-footer: rgba(#{color.get('elevation/2', 'rgb')}, 0.2);
+ --color-timeline: #{color.get('elevation/5')};
+ --color-timeline-badge-fg: #{if($is-dark, var(--color-white), var.get('color-text'))};
+
+ // box
+ --color-box-header: #{rgba(color.get('elevation/4', 'rgb'), 1)};
+ --color-box-body: #{color.get('elevation/3')};
+ --color-box-body-highlight: #{color.get('elevation/4')};
+
+ // input
+ --color-input-text: var(--color-text-dark);
+ --color-input-background: #{color.get('elevation/4')};
+ --color-input-toggle-background: #{color.get('elevation/4')};
+ --color-input-border: #{color.get('elevation/5')};
+ --color-input-border-hover: #{color.get('elevation/6')};
+
+ // light
+ --color-light: #00001728;
+ --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
+ --color-light-border: #{color.get('elevation/6')};
+ --color-hover: rgba(#{color.get('elevation/6', 'rgb')}, 0.5);
+ --color-hover-opaque: #{color.get('elevation/6', 'rgb')};
+ --color-active: #{color.get('elevation/5')};
+ --color-menu: #{color.get('elevation/4')};
+ --color-card: #{color.get('elevation/3')};
+ --color-markup-table-row: rgba(#{color.get('text', 'rgb')}, 0.02);
+ --color-markup-code-block: #{color.get('elevation/4')};
+ --color-markup-code-inline: #{color.get('elevation/4')};
+ --color-button: #{color.get('elevation/4')};
+ --color-code-bg: #{color.get('elevation/3')};
+ --color-shadow: #{if($is-dark, rgba(#{color.get('elevation/1', 'rgb')}, 0.5), rgba(#{color.get('elevation/6', 'rgb')}, 0.5))};
+ --color-shadow-opaque: #{if($is-dark, color.get('elevation/1'), color.get('elevation/6'))};
+
+ --color-shadow-rgb: #{if($is-dark, color.get('elevation/1', 'rgb'), color.get('elevation/6', 'rgb'))};
+
+ --color-secondary-bg: #{color.get('elevation/4')};
+ --color-expand-button: #{color.get('elevation/6')};
+ --color-placeholder-text: #{color.get('elevation/9')};
+ --color-editor-line-highlight: var(--color-primary-light-5);
+ --color-project-column-bg: #{color.get('elevation/1')};
+ --color-caret: var(--color-text);
+ --color-reaction-bg: rgba(#{color.get('primary/dark/30%', 'rgb')}, .1);;
+ --color-reaction-hover-bg: rgba(#{color.get('primary/dark/30%', 'rgb')}, .2);;
+ --color-reaction-active-bg: rgba(#{color.get('primary/dark/30%', 'rgb')}, .05);;
+ --color-tooltip-text: #{if($is-dark, color.get('text'), color.get('elevation/1'))};
+ --color-tooltip-bg: #{if($is-dark, color.get('elevation/7'), color.get('elevation/10'))};
+ --color-overlay-backdrop: rgba(#{color.get('elevation/1', 'rgb')}, 0.8);
+
+ // navbar
+ --color-nav-bg: #{color.get('navbar/bg', $default: if($is-dark, color.get('elevation/1'), color.get('elevation/4')))};
+ --color-nav-hover-bg: #{color.get('navbar/hover', $default: if($is-dark, color.get('elevation/5'), color.get('elevation/5')))};
+ --color-nav-text: #{color.get('navbar/fg', $default: var(--color-text))};
+ --color-secondary-nav-bg: #{if($is-dark, color.get('elevation/1'), color.get('elevation/4'))};
+ --color-secondary-nav-hover-bg: #{if($is-dark, color.get('elevation/4'), color.get('elevation/5'))};
+
+ // label
+ --color-label-text: var(--color-text);
+ --color-label-bg: #7282924b;
+ --color-label-hover-bg: #728292a0;
+ --color-label-active-bg: #728292ff;
+
+ // accents
+ --color-accent: #{color.get('palette/blue/dark/25%')};
+ --color-small-accent: var(--color-primary-light-5);
+ --color-highlight-fg: #{color.get('palette/yellow/dark/20%')};
+ --color-highlight-bg: #{color.get('palette/yellow/dark/75%')};
+ }
+
+ #commits-table {
+ // even rows color
+ --color-light: transparent !important;
+ }
+
+ #navbar {
+ #navbar-logo {
+ img {
+ height: var.get('navbar-logo/height') !important;
+ width: var.get('navbar-logo/width') !important;
+ }
+ }
+ }
+
+ .markup {
+ code {
+ border-radius: var.get('measure/.375x') !important;
+ }
+
+ p {
+ line-height: 1.5 !important;
+ }
+ }
+
+ ::selection {
+ background-color: #{color.get('primary/dark/60%')};
+ color: #{color.get('primary/dark/60%', 'contrast')};
+ }
+
+ // // In dark mode, invert emojis that are hard to read otherwise
+ @if $is-dark {
+ .emoji[aria-label="check mark"],
+ .emoji[aria-label="currency exchange"],
+ .emoji[aria-label="TOP arrow"],
+ .emoji[aria-label="END arrow"],
+ .emoji[aria-label="ON! arrow"],
+ .emoji[aria-label="SOON arrow"],
+ .emoji[aria-label="heavy dollar sign"],
+ .emoji[aria-label="copyright"],
+ .emoji[aria-label="registered"],
+ .emoji[aria-label="trade mark"],
+ .emoji[aria-label="multiply"],
+ .emoji[aria-label="plus"],
+ .emoji[aria-label="minus"],
+ .emoji[aria-label="divide"],
+ .emoji[aria-label="curly loop"],
+ .emoji[aria-label="double curly loop"],
+ .emoji[aria-label="wavy dash"],
+ .emoji[aria-label="paw prints"],
+ .emoji[aria-label="musical note"],
+ .emoji[aria-label="musical notes"] {
+ filter: invert(100%) hue-rotate(180deg);
+ }
+ }
+}
diff --git a/src/themes/scss/theme/vars/index.scss b/src/themes/scss/theme/vars/index.scss
new file mode 100644
index 0000000..8d5d581
--- /dev/null
+++ b/src/themes/scss/theme/vars/index.scss
@@ -0,0 +1,2 @@
+@forward './base';
+@forward './colors';
\ No newline at end of file
diff --git a/src/themes/scss/utils/_color-utils.scss b/src/themes/scss/utils/_color-utils.scss
deleted file mode 100644
index c8ade23..0000000
--- a/src/themes/scss/utils/_color-utils.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-@use 'sass:color';
-@use 'sass:map';
-
-@function light-change($color, $amount, $isDark) {
- $multiplier: if($isDark, -1, 1);
- @return color.adjust($color, $lightness: $amount * $multiplier);
-}
-
-@function alpha-change($color, $alpha) {
- @return color.change($color, $alpha: $alpha);
-}
-
-@function color-variants-light($color, $is-dark, $with-base: false) {
- $set: (
- '3%': light-change($color, -3%, $is-dark),
- '6%': light-change($color, -6%, $is-dark),
- '9%': light-change($color, -9%, $is-dark),
- '12%': light-change($color, -12%, $is-dark),
- '15%': light-change($color, -15%, $is-dark),
- '18%': light-change($color, -18%, $is-dark),
- '21%': light-change($color, -21%, $is-dark),
- '24%': light-change($color, -24%, $is-dark),
- '27%': light-change($color, -27%, $is-dark),
- '30%': light-change($color, -30%, $is-dark),
- '33%': light-change($color, -33%, $is-dark),
- '36%': light-change($color, -36%, $is-dark),
- '39%': light-change($color, -39%, $is-dark)
- );
-
- @if $with-base {
- $set: map.merge((base: $color), $set);
- }
-
- @return $set;
-}
-
-@function color-variants-dark($color, $is-dark, $with-base: false) {
- $set: (
- '3%': light-change($color, 3%, $is-dark),
- '6%': light-change($color, 6%, $is-dark),
- '9%': light-change($color, 9%, $is-dark),
- '12%': light-change($color, 12%, $is-dark),
- '15%': light-change($color, 15%, $is-dark),
- '18%': light-change($color, 18%, $is-dark),
- '21%': light-change($color, 21%, $is-dark),
- '24%': light-change($color, 24%, $is-dark),
- '27%': light-change($color, 27%, $is-dark),
- '30%': light-change($color, 30%, $is-dark),
- '33%': light-change($color, 33%, $is-dark),
- '36%': light-change($color, 36%, $is-dark),
- '39%': light-change($color, 39%, $is-dark),
- );
-
- @if $with-base {
- $set: map.merge((base: $color), $set);
- }
-
- @return $set;
-}
-
-@function variants($color, $is-dark, $light: true, $dark: true, $base: true, $override-base-with: null) {
- $set: ();
-
- // base: $color,
- // light: color-variants-light($color, $is-dark),
- // dark: color-variants-dark($color, $is-dark),
-
- @if $light {
- $set: map.merge($set, (light: color-variants-light($color, $is-dark)));
- }
-
- @if $dark {
- $set: map.merge($set, (dark: color-variants-dark($color, $is-dark)));
- }
-
- @if $base {
- @if $override-base-with {
- $set: map.merge($set, (base: $override-base-with));
- } @else {
- $set: map.merge($set, (base: $color));
- }
- }
-
- @return $set;
-}
\ No newline at end of file
diff --git a/tools/tasks/fonts.js b/tools/tasks/fonts.js
index 311b1ec..23b8598 100644
--- a/tools/tasks/fonts.js
+++ b/tools/tasks/fonts.js
@@ -1,4 +1,4 @@
-import { copyFileSync, mkdirSync } from 'fs';
+import { copyFileSync, mkdirSync, existsSync } from 'fs';
import { join } from 'path';
import { readFiles } from '../utils/funcs.js';
import { Logger } from '../utils/logger.js';
@@ -12,7 +12,11 @@ export async function buildFonts(srcHome, distHome) {
const fontsSrcPath = join(srcHome, imgSrc);
const fontsDestPath = join(distHome, imgDest);
- mkdirSync(fontsDestPath, { recursive: true });
+ // if fontsSrcPath does not exist, return
+ if (!existsSync(fontsSrcPath)) {
+ logger.warn(`No fonts found in ${fontsSrcPath} (there's not even a folder there)`);
+ return;
+ }
const files = readFiles(fontsSrcPath, [
'.woff',
@@ -23,6 +27,14 @@ export async function buildFonts(srcHome, distHome) {
'.otf',
]);
+ // if there are no files, return
+ if (!files.length) {
+ logger.warn(`No fonts found in ${fontsSrcPath}`);
+ return;
+ }
+
+ mkdirSync(fontsDestPath, { recursive: true });
+
for (const file of files) {
// just copy the file
copyFileSync(join(fontsSrcPath, file), join(fontsDestPath, file));
diff --git a/tools/tasks/templates.js b/tools/tasks/templates.js
index b86a562..b05a4e4 100644
--- a/tools/tasks/templates.js
+++ b/tools/tasks/templates.js
@@ -1,4 +1,5 @@
import { join } from 'path';
+import { existsSync } from 'fs';
import { copyFolderRecursiveSync } from '../utils/funcs.js';
import { Logger } from '../utils/logger.js';
@@ -11,6 +12,12 @@ export async function buildTemplates(srcHome, distHome) {
const tmplSrcPath = join(srcHome, tmplSrc);
const tmplDestPath = join(distHome, tmplDest);
+ // if src/templates folder doesn't exist, just return
+ if (!existsSync(tmplSrcPath)) {
+ logger.info(`No templates found in ${tmplSrcPath}. Skipping templates build`);
+ return;
+ }
+
// just copy the entire tmplSrcPath to tmplDestPath
copyFolderRecursiveSync(tmplSrcPath, tmplDestPath);
logger.info('Templates build has finished');