From da1f63fc8d9b23e4df5b7d08fd1813eba8916fc8 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Mon, 12 Oct 2020 02:26:24 +1300 Subject: [PATCH] Groups and rooms list first draft --- build.js | 231 ++++++++++++++++++++++++++++++ build/index.html | 78 ++++++++++ build/static/basic.js | 148 +++++++++++++++++++ build/static/groups.js | 15 ++ build/static/main.css | 99 +++++++++++++ build/static/whitney-500.woff | Bin 0 -> 76744 bytes spec.js | 32 +++++ src/assets/fonts/whitney-500.woff | Bin 0 -> 76744 bytes src/home.pug | 38 +++++ src/js/basic.js | 148 +++++++++++++++++++ src/js/groups.js | 15 ++ src/sass/base.sass | 17 +++ src/sass/colors.sass | 5 + src/sass/components/groups.sass | 51 +++++++ src/sass/components/rooms.sass | 37 +++++ src/sass/main.sass | 3 + 16 files changed, 917 insertions(+) create mode 100644 build.js create mode 100644 build/index.html create mode 100644 build/static/basic.js create mode 100644 build/static/groups.js create mode 100644 build/static/main.css create mode 100644 build/static/whitney-500.woff create mode 100644 spec.js create mode 100644 src/assets/fonts/whitney-500.woff create mode 100644 src/home.pug create mode 100644 src/js/basic.js create mode 100644 src/js/groups.js create mode 100644 src/sass/base.sass create mode 100644 src/sass/colors.sass create mode 100644 src/sass/components/groups.sass create mode 100644 src/sass/components/rooms.sass create mode 100644 src/sass/main.sass diff --git a/build.js b/build.js new file mode 100644 index 0000000..63baa01 --- /dev/null +++ b/build.js @@ -0,0 +1,231 @@ +const pug = require("pug") +const sass = require("sass") +const fs = require("fs").promises +const os = require("os") +const crypto = require("crypto") +const path = require("path") +const pj = path.join +const babel = require("@babel/core") +const fetch = require("node-fetch") +const chalk = require("chalk") +const hint = require("jshint").JSHINT + +process.chdir(pj(__dirname, "src")) + +const buildDir = "../build" + +const validationQueue = [] +const validationHost = os.hostname() === "future" ? "http://localhost:8888/" : "http://validator.w3.org/nu/" +const static = new Map() +const links = new Map() +const pugLocals = {static, links} + +const spec = require("./spec.js") + +function hash(buffer) { + return crypto.createHash("sha256").update(buffer).digest("hex").slice(0, 10) +} + +function validate(filename, body, type) { + const promise = fetch(validationHost+"?out=json", { + method: "POST", + body, + headers: { + "content-type": `text/${type}; charset=UTF-8` + } + }).then(res => res.json()).then(root => { + return function cont() { + let concerningMessages = 0 + for (const message of root.messages) { + if (message.hiliteStart) { + let type = message.type + if (message.type === "error") { + type = chalk.red("error") + } else if (message.type === "warning") { + type = chalk.yellow("warning") + } else { + continue // don't care about info + } + concerningMessages++ + console.log(`validation: ${type} in ${filename}`) + console.log(` ${message.message}`) + const text = message.extract.replace(/\n/g, "⏎").replace(/\t/g, " ") + console.log(chalk.grey( + " " + + text.slice(0, message.hiliteStart) + + chalk.inverse(text.substr(message.hiliteStart, message.hiliteLength)) + + text.slice(message.hiliteStart+message.hiliteLength) + )) + } else { + console.log(message) + } + } + if (!concerningMessages) { + console.log(`validation: ${chalk.green("ok")} for ${filename}`) + } + } + }) + validationQueue.push(promise) + return promise +} + +function runHint(filename, source) { + hint(source, { + esversion: 9, + undef: true, + unused: true, + loopfunc: true, + globals: ["require", "console", "URLSearchParams", "L"], + strict: "global", + browser: true + }) + const result = hint.data() + if (result.errors && result.errors.length) { + for (const error of result.errors) { + if (error.evidence) { + const text = error.evidence.replace(/\t/g, " ") + let type = error.code.startsWith("W") ? chalk.yellow("warning") : chalk.red("error") + console.log(`hint: ${type} in ${filename}`) + console.log(` ${error.line}:${error.character}: ${error.reason} (${error.code})`) + console.log(chalk.gray( + " " + + text.slice(0, error.character) + + chalk.inverse(text.substr(error.character, 1)) + + text.slice(error.character+1) + )) + } + } + console.log(`hint: ${chalk.cyan(result.errors.length+" problems")} in ${filename}`) + } else { + console.log(`hint: ${chalk.green("ok")} for ${filename}`) + } +} + +async function addFile(sourcePath, targetPath) { + const contents = await fs.readFile(pj(".", sourcePath), {encoding: null}) + static.set(sourcePath, `${targetPath}?static=${hash(contents)}`) + fs.writeFile(pj(buildDir, targetPath), contents) +} + +async function addJS(sourcePath, targetPath) { + const source = await fs.readFile(pj(".", sourcePath), {encoding: "utf8"}) + static.set(sourcePath, `${targetPath}?static=${hash(source)}`) + runHint(sourcePath, source); + fs.writeFile(pj(buildDir, targetPath), source) +} + +async function addSass(sourcePath, targetPath) { + const renderedCSS = sass.renderSync({ + file: pj(".", sourcePath), + outputStyle: "expanded", + indentType: "tab", + indentWidth: 1, + functions: { + "static($name)": function(name) { + if (!(name instanceof sass.types.String)) { + throw "$name: expected a string" + } + const result = static.get(name.getValue()) + if (typeof result === "string") { + return new sass.types.String(result) + } else { + throw new Error("static file '"+name.getValue()+"' does not exist") + } + } + } + }).css + static.set(sourcePath, `${targetPath}?static=${hash(renderedCSS)}`) + validate(sourcePath, renderedCSS, "css") + await fs.writeFile(pj(buildDir, targetPath), renderedCSS) +} + +async function addPug(sourcePath, targetPath) { + function getRelative(staticTarget) { + const pathLayer = (path.dirname(targetPath).replace(/\/$/, "").match(/\//g) || []).length + const prefix = Array(pathLayer).fill("../").join("") + const result = prefix + staticTarget.replace(/^\//, "") + if (result) return result + else return "./" + } + function getStatic(target) { + return getRelative(static.get(target)) + } + function getStaticName(target) { + return getRelative(static.get(target)).replace(/\?.*$/, "") + } + function getLink(target) { + return getRelative(links.get(target)) + } + const renderedHTML = pug.compileFile(pj(".", sourcePath), {pretty: true})({getStatic, getStaticName, getLink, ...pugLocals}) + let renderedWithoutPHP = renderedHTML.replace(/<\?(?:php|=).*?\?>/gsm, "") + validate(sourcePath, renderedWithoutPHP, "html") + await fs.writeFile(pj(buildDir, targetPath), renderedHTML) +} + +async function addBabel(sourcePath, targetPath) { + const originalCode = await fs.readFile(pj(".", sourcePath), "utf8") + + const compiled = babel.transformSync(originalCode, { + sourceMaps: false, + sourceType: "script", + presets: [ + [ + "@babel/env", { + targets: { + "ie": 11 + } + } + ] + ], + generatorOpts: { + comments: false, + minified: false, + sourceMaps: false, + } + }) + + const filenameWithQuery = `${targetPath}?static=${hash(compiled.code)}` + + static.set(sourcePath, filenameWithQuery) + + await Promise.all([ + fs.writeFile(pj(buildDir, targetPath), originalCode), + fs.writeFile(pj(buildDir, minFilename), compiled.code), + fs.writeFile(pj(buildDir, mapFilename), JSON.stringify(compiled.map)) + ]) +} + +;(async () => { + // Stage 1: Register + for (const item of spec) { + if (item.type === "pug") { + links.set(item.source, item.target.replace(/index.html$/, "")) + } + } + + // Stage 2: Build + for (const item of spec) { + if (item.type === "file") { + await addFile(item.source, item.target) + } else if (item.type === "js") { + await addJS(item.source, item.target) + } else if (item.type === "sass") { + await addSass(item.source, item.target) + } else if (item.type === "babel") { + await addBabel(item.source, item.target) + } else if (item.type === "pug") { + await addPug(item.source, item.target) + } else { + throw new Error("Unknown item type: "+item.type) + } + } + + console.log(chalk.green("All files emitted.")) + + await Promise.all(validationQueue).then(v => { + console.log(`validation: using host ${chalk.cyan(validationHost)}`) + v.forEach(cont => cont()) + }) + + console.log(chalk.green("Build complete.") + "\n\n------------\n") +})() diff --git a/build/index.html b/build/index.html new file mode 100644 index 0000000..5af69a2 --- /dev/null +++ b/build/index.html @@ -0,0 +1,78 @@ + + + + + + + Carbon + + +
+
+
+
+
+
+
Directs
+
+
+
+
Channels
+
+
+
+
Fediverse Drama Museum
+
+
+
+
Epicord
+
+
+
+
Invidious
+
+
+
+
+
+
+
+
Carbon brainstorming
+
+
+
+
riley
+
+
+
+
BadAtNames
+
+
+
+
lepton
+
+
+
+
cockandball
+
+
+
+
Bibliogram
+
+
+
+
Monsters Inc Debate Hall
+
+
+
+
DRB clan
+
+
+
+
mettaton simp zone
+
+
+
+
+ + \ No newline at end of file diff --git a/build/static/basic.js b/build/static/basic.js new file mode 100644 index 0000000..c525e80 --- /dev/null +++ b/build/static/basic.js @@ -0,0 +1,148 @@ +/** + * Shortcut for querySelector. + * @template {HTMLElement} T + * @returns {T} + */ +const q = s => document.querySelector(s); +/** + * Shortcut for querySelectorAll. + * @template {HTMLElement} T + * @returns {T[]} + */ +const qa = s => document.querySelectorAll(s); + +/** + * An easier, chainable, object-oriented way to create and update elements + * and children according to related data. Subclass ElemJS to create useful, + * advanced data managers, or just use it inline to quickly make a custom element. + * Created by Cadence Ember in 2018. + */ +class ElemJS { + constructor(type) { + if (type instanceof HTMLElement) { + // If passed an existing element, bind to it + this.bind(type); + } else { + // Otherwise, create a new detached element to bind to + this.bind(document.createElement(type)); + } + this.children = []; + } + + /** Bind this construct to an existing element on the page. */ + bind(element) { + this.element = element; + this.element.js = this; + return this; + } + + /** Add a class. */ + class() { + for (let name of arguments) if (name) this.element.classList.add(name); + return this; + } + + /** Remove a class. */ + removeClass() { + for (let name of arguments) if (name) this.element.classList.remove(name); + return this; + } + + /** Set a JS property on the element. */ + direct(name, value) { + if (name) this.element[name] = value; + return this; + } + + /** Set an attribute on the element. */ + attribute(name, value) { + if (name) this.element.setAttribute(name, value != undefined ? value : ""); + return this; + } + + /** Set a style on the element. */ + style(name, value) { + if (name) this.element.style[name] = value; + return this; + } + + /** Set the element's ID. */ + id(name) { + if (name) this.element.id = name; + return this; + } + + /** Attach a callback function to an event on the element. */ + on(name, callback) { + this.element.addEventListener(name, callback); + return this; + } + + /** Set the element's text. */ + text(name) { + this.element.innerText = name; + return this; + } + + /** Create a text node and add it to the element. */ + addText(name) { + const node = document.createTextNode(name); + this.element.appendChild(node); + return this; + } + + /** Set the element's HTML content. */ + html(name) { + this.element.innerHTML = name; + return this; + } + + /** + * Add children to the element. + * Children can either be an instance of ElemJS, in + * which case the element will be appended as a child, + * or a string, in which case the string will be added as a text node. + * Each child should be a parameter to this method. + */ + child(...children) { + for (const toAdd of children) { + if (typeof toAdd === "object" && toAdd !== null) { + // Should be an instance of ElemJS, so append as child + toAdd.parent = this; + this.element.appendChild(toAdd.element); + this.children.push(toAdd); + } else if (typeof toAdd === "string") { + // Is a string, so add as text node + this.addText(toAdd); + } + } + return this; + } + + /** + * Remove all children from the element. + */ + clearChildren() { + this.children.length = 0; + while (this.element.lastChild) this.element.removeChild(this.element.lastChild); + } + + /** + * Remove this element. + */ + remove() { + let index; + if (this.parent && (index = this.parent.children.indexOf(this)) !== -1) { + this.parent.children.splice(index, 1); + } + this.parent = null; + this.element.remove(); + } +} + +/** Shortcut for `new ElemJS`. */ +function ejs(tag) { + return new ElemJS(tag); +} + +export {q, qa, ElemJS, ejs} diff --git a/build/static/groups.js b/build/static/groups.js new file mode 100644 index 0000000..7de9c02 --- /dev/null +++ b/build/static/groups.js @@ -0,0 +1,15 @@ +import {q} from "./basic.js" + +let state = "CLOSED" + +const groups = q("#c-groups") +const rooms = q("#c-rooms") + +groups.addEventListener("click", () => { + console.log("hello", groups) + groups.classList.add("c-groups__display--closed") +}) + +rooms.addEventListener("mouseout", () => { + groups.classList.remove("c-groups__display--closed") +}) diff --git a/build/static/main.css b/build/static/main.css new file mode 100644 index 0000000..514569f --- /dev/null +++ b/build/static/main.css @@ -0,0 +1,99 @@ +@font-face { + font-family: Whitney; + font-weight: 500; + src: url(/static/whitney-500.woff?static=ba33ed18fe) format("woff2"); +} +body { + font-family: sans-serif; + background-color: #36393e; + color: #ddd; + font-size: 24px; + font-family: Whitney; + margin: 0; + height: 100vh; +} + +.main { + height: 100vh; + display: flex; +} + +.c-rooms { + background-color: #2f3135; + padding: 8px; + width: 240px; + font-size: 20px; + overflow-y: scroll; + scrollbar-width: thin; + scrollbar-color: #42454a #2f3135; +} + +.c-room { + display: flex; + align-items: center; + padding: 8px; + cursor: pointer; +} +.c-room:hover { + background-color: #393c42; + border-radius: 8px; +} +.c-room__icon { + width: 36px; + height: 36px; + background-color: #bbb; + margin-right: 8px; + border-radius: 50%; + flex-shrink: 0; +} +.c-room__name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.c-groups { + position: relative; + width: 80px; +} +.c-groups__display { + background-color: #202224; + overflow: hidden; + width: 80px; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; +} +.c-groups__display:not(.c-groups__display--closed):hover { + width: 300px; +} +.c-groups__container { + width: 300px; + padding: 8px; +} + +.c-group { + display: flex; + align-items: center; + padding: 4px 8px; + cursor: pointer; + border-radius: 8px; +} +.c-group:hover { + background-color: #2f3135; +} +.c-group__icon { + width: 48px; + height: 48px; + background-color: #999; + border-radius: 50%; + margin-right: 16px; + flex-shrink: 0; +} +.c-group__name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} \ No newline at end of file diff --git a/build/static/whitney-500.woff b/build/static/whitney-500.woff new file mode 100644 index 0000000000000000000000000000000000000000..fc821385999b43b4eeac3cd4b4f08bd9ad4fce5a GIT binary patch literal 76744 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 UCy8cAiqi>1DF{Lt235`f0;?-f=Kufz literal 0 HcmV?d00001 diff --git a/spec.js b/spec.js new file mode 100644 index 0000000..ef562ca --- /dev/null +++ b/spec.js @@ -0,0 +1,32 @@ +module.exports = [ + { + type: "file", + source: "/assets/fonts/whitney-500.woff", + target: "/static/whitney-500.woff" + }, + { + type: "file", + source: "/js/basic.js", + target: "/static/basic.js" + }, + { + type: "file", + source: "/js/groups.js", + target: "/static/groups.js" + }, + { + type: "file", + source: "/assets/fonts/whitney-500.woff", + target: "/static/whitney-500.woff" + }, + { + type: "sass", + source: "/sass/main.sass", + target: "/static/main.css" + }, + { + type: "pug", + source: "/home.pug", + target: "/index.html" + } +] diff --git a/src/assets/fonts/whitney-500.woff b/src/assets/fonts/whitney-500.woff new file mode 100644 index 0000000000000000000000000000000000000000..fc821385999b43b4eeac3cd4b4f08bd9ad4fce5a GIT binary patch literal 76744 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 UCy8cAiqi>1DF{Lt235`f0;?-f=Kufz literal 0 HcmV?d00001 diff --git a/src/home.pug b/src/home.pug new file mode 100644 index 0000000..420382a --- /dev/null +++ b/src/home.pug @@ -0,0 +1,38 @@ +mixin group(name) + .c-group + .c-group__icon + .c-group__name= name + +mixin room(name) + .c-room + .c-room__icon + .c-room__name= name + +doctype html +html + head + meta(charset="utf-8") + link(rel="stylesheet" type="text/css" href=getStatic("/sass/main.sass")) + script(type="module" src=getStatic("/js/groups.js")) + title Carbon + body + main.main + .c-groups + .c-groups__display#c-groups + .c-groups__container + +group("Directs") + +group("Channels") + +group("Fediverse Drama Museum") + +group("Epicord") + +group("Invidious") + .c-rooms#c-rooms + +room("Carbon brainstorming") + +room("riley") + +room("BadAtNames") + +room("lepton") + +room("cockandball") + +room("Bibliogram") + +room("Monsters Inc Debate Hall") + +room("DRB clan") + +room("mettaton simp zone") + .c-chat diff --git a/src/js/basic.js b/src/js/basic.js new file mode 100644 index 0000000..c525e80 --- /dev/null +++ b/src/js/basic.js @@ -0,0 +1,148 @@ +/** + * Shortcut for querySelector. + * @template {HTMLElement} T + * @returns {T} + */ +const q = s => document.querySelector(s); +/** + * Shortcut for querySelectorAll. + * @template {HTMLElement} T + * @returns {T[]} + */ +const qa = s => document.querySelectorAll(s); + +/** + * An easier, chainable, object-oriented way to create and update elements + * and children according to related data. Subclass ElemJS to create useful, + * advanced data managers, or just use it inline to quickly make a custom element. + * Created by Cadence Ember in 2018. + */ +class ElemJS { + constructor(type) { + if (type instanceof HTMLElement) { + // If passed an existing element, bind to it + this.bind(type); + } else { + // Otherwise, create a new detached element to bind to + this.bind(document.createElement(type)); + } + this.children = []; + } + + /** Bind this construct to an existing element on the page. */ + bind(element) { + this.element = element; + this.element.js = this; + return this; + } + + /** Add a class. */ + class() { + for (let name of arguments) if (name) this.element.classList.add(name); + return this; + } + + /** Remove a class. */ + removeClass() { + for (let name of arguments) if (name) this.element.classList.remove(name); + return this; + } + + /** Set a JS property on the element. */ + direct(name, value) { + if (name) this.element[name] = value; + return this; + } + + /** Set an attribute on the element. */ + attribute(name, value) { + if (name) this.element.setAttribute(name, value != undefined ? value : ""); + return this; + } + + /** Set a style on the element. */ + style(name, value) { + if (name) this.element.style[name] = value; + return this; + } + + /** Set the element's ID. */ + id(name) { + if (name) this.element.id = name; + return this; + } + + /** Attach a callback function to an event on the element. */ + on(name, callback) { + this.element.addEventListener(name, callback); + return this; + } + + /** Set the element's text. */ + text(name) { + this.element.innerText = name; + return this; + } + + /** Create a text node and add it to the element. */ + addText(name) { + const node = document.createTextNode(name); + this.element.appendChild(node); + return this; + } + + /** Set the element's HTML content. */ + html(name) { + this.element.innerHTML = name; + return this; + } + + /** + * Add children to the element. + * Children can either be an instance of ElemJS, in + * which case the element will be appended as a child, + * or a string, in which case the string will be added as a text node. + * Each child should be a parameter to this method. + */ + child(...children) { + for (const toAdd of children) { + if (typeof toAdd === "object" && toAdd !== null) { + // Should be an instance of ElemJS, so append as child + toAdd.parent = this; + this.element.appendChild(toAdd.element); + this.children.push(toAdd); + } else if (typeof toAdd === "string") { + // Is a string, so add as text node + this.addText(toAdd); + } + } + return this; + } + + /** + * Remove all children from the element. + */ + clearChildren() { + this.children.length = 0; + while (this.element.lastChild) this.element.removeChild(this.element.lastChild); + } + + /** + * Remove this element. + */ + remove() { + let index; + if (this.parent && (index = this.parent.children.indexOf(this)) !== -1) { + this.parent.children.splice(index, 1); + } + this.parent = null; + this.element.remove(); + } +} + +/** Shortcut for `new ElemJS`. */ +function ejs(tag) { + return new ElemJS(tag); +} + +export {q, qa, ElemJS, ejs} diff --git a/src/js/groups.js b/src/js/groups.js new file mode 100644 index 0000000..7de9c02 --- /dev/null +++ b/src/js/groups.js @@ -0,0 +1,15 @@ +import {q} from "./basic.js" + +let state = "CLOSED" + +const groups = q("#c-groups") +const rooms = q("#c-rooms") + +groups.addEventListener("click", () => { + console.log("hello", groups) + groups.classList.add("c-groups__display--closed") +}) + +rooms.addEventListener("mouseout", () => { + groups.classList.remove("c-groups__display--closed") +}) diff --git a/src/sass/base.sass b/src/sass/base.sass new file mode 100644 index 0000000..4321ab5 --- /dev/null +++ b/src/sass/base.sass @@ -0,0 +1,17 @@ +@font-face + font-family: Whitney + font-weight: 500 + src: url(static("/assets/fonts/whitney-500.woff")) format("woff2") + +body + font-family: sans-serif + background-color: #36393e + color: #ddd + font-size: 24px + font-family: Whitney + margin: 0 + height: 100vh + +.main + height: 100vh + display: flex diff --git a/src/sass/colors.sass b/src/sass/colors.sass new file mode 100644 index 0000000..f69d71b --- /dev/null +++ b/src/sass/colors.sass @@ -0,0 +1,5 @@ +$dark: #36393e +$darker: #2f3135 +$darkest: #202224 +$mild: #393c42 +$milder: #42454a diff --git a/src/sass/components/groups.sass b/src/sass/components/groups.sass new file mode 100644 index 0000000..376c22a --- /dev/null +++ b/src/sass/components/groups.sass @@ -0,0 +1,51 @@ +@use "../colors" as c +@use "./rooms" as rooms + +$icon-size: 48px +$icon-padding: 8px +$base-width: $icon-size + $icon_padding * 4 +$out-width: $base-width + rooms.$list-width - 20px + +.c-groups + position: relative + width: $base-width + + &__display + background-color: c.$darkest + overflow: hidden + width: $base-width + position: absolute + left: 0 + top: 0 + bottom: 0 + right: 0 + + &:not(&--closed):hover + width: $out-width + + &__container + width: $out-width + padding: $icon-padding + +.c-group + display: flex + align-items: center + padding: $icon-padding / 2 $icon-padding + cursor: pointer + border-radius: 8px + + &:hover + background-color: c.$darker + + &__icon + width: $icon-size + height: $icon-size + background-color: #999 + border-radius: 50% + margin-right: $icon-padding * 2 + flex-shrink: 0 + + &__name + white-space: nowrap + overflow: hidden + text-overflow: ellipsis diff --git a/src/sass/components/rooms.sass b/src/sass/components/rooms.sass new file mode 100644 index 0000000..1fd18e2 --- /dev/null +++ b/src/sass/components/rooms.sass @@ -0,0 +1,37 @@ +@use "../colors" as c + +$list-width: 240px +$icon-size: 36px +$icon-padding: 8px + +.c-rooms + background-color: c.$darker + padding: $icon-padding + width: $list-width + font-size: 20px + overflow-y: scroll + scrollbar-width: thin + scrollbar-color: c.$milder c.$darker + +.c-room + display: flex + align-items: center + padding: $icon-padding + cursor: pointer + + &:hover + background-color: c.$mild + border-radius: 8px + + &__icon + width: $icon-size + height: $icon-size + background-color: #bbb + margin-right: $icon-padding + border-radius: 50% + flex-shrink: 0 + + &__name + white-space: nowrap + overflow: hidden + text-overflow: ellipsis diff --git a/src/sass/main.sass b/src/sass/main.sass new file mode 100644 index 0000000..40317cf --- /dev/null +++ b/src/sass/main.sass @@ -0,0 +1,3 @@ +@use "./base" +@use "./components/groups" +@use "./components/rooms"