stylelint

This commit is contained in:
Luna D. 2024-05-20 21:25:43 +02:00
parent 511c419e5e
commit f659023649
No known key found for this signature in database
GPG key ID: 4B1C63448394F688
36 changed files with 946 additions and 162 deletions

75
assets/.stylelintrc.yml Normal file
View file

@ -0,0 +1,75 @@
---
extends: stylelint-config-recommended
rules:
block-no-empty: true
at-rule-no-unknown:
- true
- ignoreAtRules:
- mixin
- define-mixin
media-query-no-invalid:
rule-empty-line-before:
- always-multi-line
- except:
- after-single-line-comment
- first-nested
declaration-block-no-duplicate-custom-properties: true
declaration-block-no-duplicate-properties: true
font-family-no-duplicate-names: true
keyframe-block-no-duplicate-selectors: true
no-duplicate-at-import-rules: true
no-duplicate-selectors: true
color-no-invalid-hex: true
function-calc-no-unspaced-operator: true
named-grid-areas-no-invalid: true
no-invalid-double-slash-comments: true
no-invalid-position-at-import-rule: true
string-no-newline: true
no-irregular-whitespace: true
custom-property-no-missing-var-function: true
font-family-no-missing-generic-family-keyword: true
function-linear-gradient-no-nonstandard-direction: true
declaration-block-no-shorthand-property-overrides: true
selector-anb-no-unmatchable: true
function-no-unknown: true
media-feature-name-no-unknown: true
media-feature-name-value-no-unknown: true
no-unknown-animations: true
length-zero-no-unit: true
media-feature-name-no-vendor-prefix: true
selector-no-vendor-prefix: true
value-no-vendor-prefix: true
function-name-case: lower
selector-type-case: lower
value-keyword-case: lower
at-rule-empty-line-before:
- always
- except:
- first-nested
ignore:
- after-comment
- blockless-after-blockless
custom-property-empty-line-before: never
declaration-empty-line-before: never
declaration-block-single-line-max-declarations: 3
number-max-precision: 2
max-nesting-depth: 1
color-hex-length: long
alpha-value-notation: number
font-weight-notation: named-where-possible
hue-degree-notation: number
import-notation: string
keyframe-selector-notation: percentage-unless-within-keyword-only-block
lightness-notation: percentage
media-feature-range-notation: prefix
selector-not-notation: simple
selector-pseudo-element-colon-notation: single
custom-property-pattern: "[a-z\\-\\$]+"
selector-class-pattern: "^[a-z\\-]+(\\-\\-|__)?[a-z\\-]*(\\-\\-|__)?[a-z\\-]*$"
selector-id-pattern: "[a-z\\-]+"
font-family-name-quotes: always-unless-keyword
function-url-quotes: always
selector-attribute-quotes: always
declaration-block-no-redundant-longhand-properties: true
shorthand-property-no-redundant-values: true
comment-whitespace-inside: always

View file

@ -2,53 +2,64 @@ $min-desktop-width: 1280px;
$max-phone-width: 700px;
$narrow-layout-width: 960px;
$medium-layout-width: $min-desktop-width;
$font-family-base: verdana, arial, helvetica, sans-serif;
$font-family-monospace: "Droid Sans Mono", monospace;
:root {
/* Paddings */
--padding-tiny: 0.3rem;
--padding-small: 0.4rem;
--padding-normal: 0.75rem;
--padding-large: 1.5rem;
/* Common line heights */
--default-line-height: 1.15;
--readable-line-height: 1.35rem;
/* Header height */
--block-header-height: 2rem;
/* Navbar */
--navbar-size: 4rem;
--navbar-secondary-size: 2.5rem;
--navbar-input-size: 2rem;
--navbar-input-width: 18vw;
--navbar-input-max-width: 22rem;
/* Avatars */
--avatar-navbar-size: 2.5rem;
--avatar-small-size: 6rem;
--avatar-large-size: 8rem;
/* Buttons */
--button-height: 2rem;
--button-group-height: 2rem;
--button-group-tall-height: 2.5rem;
--button-group-small-height: 1.5rem;
/* Checkboxes */
--checkbox-width: 3rem;
--checkbox-height: 1.5rem;
--checkbox-border-width: 2px;
/* Separators */
--separator-vertical-size: 1.3em;
/* Tags */
--tag-height: 2em;
--tag-border-width: 0;
/* Homepage left column width on desktop */
--column-left-width: 360px;
/* Borders and rounding */
--border-radius-outer: 0.35rem;
--border-radius-inner: 0.25rem;
--border-radius-tag: 0.2rem;
--border-radius-avatar: 100%;
--border-radius-checkbox: 1rem;
/* Images and media */
--media-container-width: 225px;
--media-tiny-container-width: 50px;
--media-small-container-width: 150px;
@ -59,18 +70,20 @@ $font-family-monospace: "Droid Sans Mono", monospace;
--media-header-height: 2rem;
--media-small-header-height: 1rem;
/* Badges */
--badge-small-size: 1.1rem;
--badge-normal-size: 2rem;
/* Counter badges (the "red notification badge") */
--number-badge-size: 0.6rem;
--number-badge-padding: 0.1rem;
--number-badge-border: 2px;
--number-badge-lower-offset: 0.7rem;
--number-badge-upper-offset: 0.7rem;
/* Fonts */
--font-family: $font-family-base;
--font-family-monospace: $font-family-monospace;
--font-size: 14px;
--font-tiny-size: 12px;
--font-micro-size: 10px;
@ -83,13 +96,16 @@ $font-family-monospace: "Droid Sans Mono", monospace;
--font-h5-size: 1.1rem;
--font-h6-size: 1rem;
/* Inputs */
--input-text-height: 9rem;
/* Layout sizes */
--min-desktop-width: $min-desktop-width;
--max-phone-width: $max-phone-width;
--medium-layout-width: $medium-layout-width;
--narrow-layout-width: $narrow-layout-width;
/* Animations */
--transition-animation-duration: 0.15s;
--transition-long-animation-duration: 0.3s;
}

View file

@ -60,6 +60,5 @@
@define-mixin subgrid {
display: grid;
grid-template-columns: 1 / -1;
grid: inherit;
grid-gap: inherit;
}

View file

@ -45,3 +45,13 @@ p, .paragraph {
margin: var(--padding-small);
margin-right: 0;
}
.fa--padded {
padding: 0 var(--padding-normal);
}
@mixin if-mobile {
.fa-padded {
padding: 0 var(--padding-small);
}
}

View file

@ -59,10 +59,6 @@
border-bottom-right-radius: var(--border-radius-outer) !important;
}
.block--borderless .block__header {
padding: 0;
}
.block__content, .block__tab {
border-radius: var(--border-radius-outer);
padding: var(--padding-normal);
@ -125,6 +121,10 @@
padding: 0 var(--padding-normal);
}
.block--borderless .block__header {
padding: 0;
}
.block--fixed {
padding: var(--padding-normal);
border-radius: var(--border-radius-inner);

View file

@ -83,6 +83,10 @@
margin-right: var(--padding-small);
}
.button__group--single {
margin-right: 0;
}
.button__group, .button__group--single, .button__group--standalone {
display: flex;
flex-direction: row;
@ -104,6 +108,11 @@
line-height: var(--button-group-small-height)
}
.block__header__buttons .button {
color: var(--link-color);
border-width: 0 !important;
}
.button__group .button {
border: 0;
border-right: var(--secondary-color);
@ -113,10 +122,6 @@
border-right: 0;
}
.button__group--single {
margin-right: 0;
}
.button__group--standalone a {
@mixin animated-transition;
font-weight: bold;
@ -133,11 +138,6 @@
border-width: 0;
}
.block__header__buttons .button {
color: var(--link-color);
border-width: 0 !important;
}
.block__header__buttons .button:hover {
background: var(--primary-muted-color);
border-radius: var(--border-radius-inner);

View file

@ -1,4 +1,4 @@
input[type=checkbox].checkbox {
input[type="checkbox"].checkbox {
appearance: none;
}
@ -14,7 +14,7 @@ input[type=checkbox].checkbox {
border-color var(--transition-long-animation-duration) ease;
}
.checkbox::after {
.checkbox:after {
content: '';
font-family: var(--fa-style-family, "Font Awesome 6 Free");
font-weight: var(--fa-style, 900);
@ -26,7 +26,7 @@ input[type=checkbox].checkbox {
width: calc(var(--checkbox-height) - var(--checkbox-border-width) * 2);
height: calc(var(--checkbox-height) - var(--checkbox-border-width) * 2);
border-radius: 100%;
left: 0px;
left: 0;
transition: left var(--transition-long-animation-duration) ease;
}
@ -37,7 +37,7 @@ input[type=checkbox].checkbox {
border-color var(--transition-long-animation-duration) ease;
}
.checkbox:checked::after {
.checkbox:checked:after {
content: '';
left: calc(var(--checkbox-width) - var(--checkbox-height));
transition: left var(--transition-long-animation-duration) ease;

View file

@ -3,12 +3,6 @@
display: inline-block;
}
.dropdown:hover .dropdown__content {
display: block;
min-width: 100%;
z-index: 999;
}
.dropdown__content {
background: var(--primary-muted-color);
border: 1px solid var(--primary-border-color);
@ -18,6 +12,12 @@
left: 0;
}
.dropdown:hover .dropdown__content {
display: block;
min-width: 100%;
z-index: 999;
}
.dropdown__content > :not(.hidden) {
display: block;
white-space: nowrap;
@ -34,6 +34,12 @@
color: var(--text-color);
}
.dropdown__text {
padding: 0 var(--padding-small);
background: var(--primary-muted-color);
border-left: 1px solid var(--primary-border-color);
}
.dropdown__item:hover .dropdown__text {
background: var(--primary-dark-color);
}
@ -44,12 +50,6 @@
border-right: 1px solid var(--primary-muted-color);
}
.dropdown__text {
padding: 0 var(--padding-small);
background: var(--primary-muted-color);
border-left: 1px solid var(--primary-border-color);
}
.dropdown__separator {
margin: 0;
border-color: var(--primary-border-color);

View file

@ -30,6 +30,6 @@
cursor: text;
}
input[type=file] {
input[type="file"] {
padding-top: var(--padding-small);
}

View file

@ -12,7 +12,7 @@
grid-gap: var(--padding-small);
}
.media-list::before {
.media-list:before {
content: '';
width: 0;
padding-bottom: calc(100% + var(--media-header-height));
@ -61,12 +61,9 @@
overflow: hidden;
}
.media-box__content .image-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
.media-box__image {
max-width: 100%;
height: auto;
}
.media-box__content--featured .media-box__image {
@ -93,6 +90,21 @@
top: var(--media-header-height);
}
.post-image-container, .post-image-container img {
width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width);
}
.media-tiny-container, .media-tiny-container img {
width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width);
}
.thumb-tiny, .thumb-tiny img {
max-width: var(--media-tiny-container-width);
max-height: var(--media-tiny-container-width);
}
.image-container {
display: flex;
flex-direction: column;
@ -109,6 +121,7 @@
/* For some reason tall images don't center properly within the container
without this hack. I blame CSS. */
.image-container a img {
max-height: 100%;
margin: auto;
@ -122,11 +135,16 @@
height: 100%;
}
.media-box__content .image-container {
position: absolute;
inset: 0;
}
.media__standalone {
position: relative;
}
.thumb_tiny .media-box__overlay {
.thumb-tiny .media-box__overlay {
width: 100%;
max-width: 100%;
padding: 0 var(--padding-tiny);
@ -134,16 +152,6 @@
font-size: var(--font-micro-size);
}
.post-image-container, .post-image-container img {
width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width);
}
.media-box__image {
max-width: 100%;
height: auto;
}
.media-grid {
display: grid;
grid-template-columns: 1fr 1fr;
@ -154,13 +162,3 @@
.image-scaled {
max-width: 100%;
}
.media-tiny-container, .media-tiny-container img {
width: var(--media-tiny-container-width);
height: var(--media-tiny-container-width);
}
.thumb_tiny, .thumb_tiny img {
max-width: var(--media-tiny-container-width);
max-height: var(--media-tiny-container-width);
}

View file

@ -1,7 +1,7 @@
.checkbox::after {
.checkbox:after {
content: '\f00d';
}
.checkbox:checked::after {
.checkbox:checked:after {
content: '\f00c';
}

View file

@ -44,40 +44,48 @@ $spoiler-color: #0f0f0f;
}
:root {
/* Main colors */
--background-color: $background-color;
--text-color: $text-color;
--text-light-color: $text-color;
/* Link colors */
--link-color: hsl(from $primary-color h calc(s + 10) calc(l + 40));
--link-hover-color: $text-color;
/* Primary color (block backgrounds and such) */
--primary-color: $primary-color;
--primary-border-color: hsl(from $primary-color h calc(s - 20) calc(l + 5));
--primary-muted-color: hsl(from $primary-color h calc(s - 10) calc(l - 10));
--primary-dark-color: hsl(from $primary-color h calc(s - 15) calc(l - 15));
--primary-link-color: var(--link-color); /* for consistency */
/* Secondary color (most buttons) */
--secondary-color: $secondary-color;
--secondary-border-color: hsl(from $secondary-color h s calc(l + 5));
--secondary-muted-color: hsl(from $secondary-color h s calc(l - 17));
--secondary-dark-color: hsl(from $secondary-color h calc(s - 5) calc(l - 25));
--secondary-link-color: hsl(from $secondary-color h s calc(l + 40));
/* Interaction (vote) colors */
--upvote-color: $upvote-color;
--downvote-color: $downvote-color;
--fave-color: $fave-color;
--comment-color: $comment-color;
--hide-color: $hide-color;
/* Spoiler colors */
--spoiler-color: $spoiler-color;
--spoiler-revealed-color: hsl(from $spoiler-color h s calc(l + 20));
/* Type (information category) colors */
@mixin type-color success, $success-color;
@mixin type-color warning, $warning-color;
@mixin type-color danger, $danger-color;
@mixin type-color information, $information-color;
@mixin type-color special, $special-color;
/* Tag colors */
@mixin tag-color default, $tag-default-color;
@mixin tag-color error, $tag-error-color, 37;
@mixin tag-color rating, $tag-rating-color, 37;

View file

@ -44,40 +44,48 @@ $spoiler-color: #0f0f0f;
}
:root {
/* Main colors */
--background-color: $background-color;
--text-color: $text-color;
--text-light-color: $text-color;
/* Link colors */
--link-color: hsl(from $primary-color h calc(s + 10) calc(l + 50));
--link-hover-color: $text-color;
/* Primary color (block backgrounds and such) */
--primary-color: $primary-color;
--primary-border-color: hsl(from $primary-color h calc(s - 20) calc(l + 5));
--primary-muted-color: hsl(from $primary-color h calc(s - 10) calc(l - 5));
--primary-dark-color: hsl(from $primary-color h calc(s - 15) calc(l - 9));
--primary-link-color: var(--link-color); /* for consistency */
/* Secondary color (most buttons) */
--secondary-color: $secondary-color;
--secondary-border-color: hsl(from $secondary-color h s calc(l + 5));
--secondary-muted-color: hsl(from $secondary-color h s calc(l - 17));
--secondary-dark-color: hsl(from $secondary-color h calc(s - 5) calc(l - 25));
--secondary-link-color: hsl(from $secondary-color h s calc(l + 40));
/* Interaction (vote) colors */
--upvote-color: $upvote-color;
--downvote-color: $downvote-color;
--fave-color: $fave-color;
--comment-color: $comment-color;
--hide-color: $hide-color;
/* Spoiler colors */
--spoiler-color: $spoiler-color;
--spoiler-revealed-color: hsl(from $spoiler-color h s calc(l + 20));
/* Type (information category) colors */
@mixin type-color success, $success-color;
@mixin type-color warning, $warning-color;
@mixin type-color danger, $danger-color;
@mixin type-color information, $information-color;
@mixin type-color special, $special-color;
/* Tag colors */
@mixin tag-color default, $tag-default-color;
@mixin tag-color error, $tag-error-color, 37;
@mixin tag-color rating, $tag-rating-color, 37;

View file

@ -44,40 +44,48 @@ $spoiler-color: #0f0f0f;
}
:root {
/* Main colors */
--background-color: $background-color;
--text-color: $text-color;
--text-light-color: $background-color;
/* Link colors */
--link-color: hsl(from $primary-color h calc(s + 25) calc(l - 25));
--link-hover-color: $text-color;
/* Primary color (block backgrounds and such) */
--primary-color: $primary-color;
--primary-border-color: hsl(from $primary-color h calc(s + 5) calc(l - 5));
--primary-muted-color: hsl(from $primary-color h calc(s + 7) calc(l + 20));
--primary-dark-color: hsl(from $primary-color h calc(s + 20) calc(l + 35));
--primary-link-color: var(--link-color); /* for consistency */
/* Secondary color (most buttons) */
--secondary-color: $secondary-color;
--secondary-border-color: hsl(from $secondary-color h s calc(l - 45));
--secondary-muted-color: hsl(from $secondary-color h calc(s + 5) calc(l + 18));
--secondary-dark-color: hsl(from $secondary-color h calc(s - 5) calc(l + 25));
--secondary-link-color: hsl(from $secondary-color h s calc(l - 55));
/* Interaction (vote) colors */
--upvote-color: $upvote-color;
--downvote-color: $downvote-color;
--fave-color: $fave-color;
--comment-color: $comment-color;
--hide-color: $hide-color;
/* Spoiler colors */
--spoiler-color: $spoiler-color;
--spoiler-revealed-color: hsl(from $spoiler-color h s calc(l + 20));
/* Type (information category) colors */
@mixin type-color success, $success-color;
@mixin type-color warning, $warning-color;
@mixin type-color danger, $danger-color;
@mixin type-color information, $information-color;
@mixin type-color special, $special-color;
/* Tag colors */
@mixin tag-color default, $tag-default-color;
@mixin tag-color error, $tag-error-color, 37;
@mixin tag-color rating, $tag-rating-color, 37;
@ -106,6 +114,6 @@ header {
color: var(--text-light-color) !important;
}
.header__search > .input:hover, .input:focus {
.input:focus, .header__search > .input:hover {
color: var(--text-color) !important;
}

View file

@ -39,8 +39,7 @@
@mixin if-mobile {
.approval-grid {
grid-template-columns: 1fr;
grid-template-rows: auto;
grid-template: auto / 1fr;
grid-template-areas:
"main"
"footer";

View file

@ -32,7 +32,7 @@
.communication__anonymous {
display: flex;
flex-direction: row;
line-height: ar(--block-header-height);
line-height: var(--block-header-height);
background: var(--secondary-color);
border: 1px solid var(--secondary-border-color);
}

View file

@ -84,6 +84,16 @@ nav.dropdown__content {
line-height: var(--navbar-secondary-size);
}
i.favicon-home {
background-image: url("/favicon.svg");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
min-width: 1em;
height: 1em;
display: inline-block;
}
@mixin if-mobile {
header {
gap: var(--padding-normal);

View file

@ -2,16 +2,16 @@
margin-top: var(--padding-normal);
}
.image_sources {
.image-sources {
display: grid;
grid-template-columns: var(--font-icon-size) auto;
gap: var(--padding-small);
}
.image_source__icon, .image_source__link {
.image-source__icon, .image-source__link {
overflow: hidden;
}
.image_source__icon {
.image-source__icon {
justify-self: center;
}

View file

@ -18,7 +18,7 @@
@mixin interaction-type comment;
@mixin interaction-type hide;
.comments_count {
.comments-count {
position: absolute;
background: var(--background-color);
border: var(--number-badge-border) solid var(--background-color);
@ -29,6 +29,6 @@
top: var(--number-badge-lower-offset);
}
.interaction--comment:hover > .comments_count {
.interaction--comment:hover > .comments-count {
visibility: hidden;
}

View file

@ -1,10 +1,9 @@
.textile-syntax-reference {
display: flex;
flex-direction: row;
flex-flow: row wrap;
line-height: var(--block-header-height);
vertical-align: center;
margin-bottom: var(--padding-small);
flex-wrap: wrap;
}
.textile-syntax-reference > span,
@ -12,11 +11,6 @@
margin-left: var(--padding-normal);
}
.textile_help {
width: 100%;
margin-top: var(--padding-normal);
}
.spoiler, .spoiler a {
color: var(--spoiler-color);
background: var(--spoiler-color)

View file

@ -8,7 +8,7 @@
display: block;
}
.metabar__interactions .comments_count {
.metabar__interactions .comments-count {
background: 0;
border: 0;
position: static;
@ -27,8 +27,7 @@
@mixin fix-interaction hide;
.metabar__interactions * {
align-self: center;
justify-self: center;
place-self: center center;
}
.metabar__mobile-separator {
@ -46,8 +45,7 @@
}
.metabar__navigation a {
align-self: center;
justify-self: center;
place-self: center center;
}
}
@ -70,7 +68,7 @@
gap: var(--padding-small);
}
.metabar__user-credit .image_uploader {
.metabar__user-credit .image-uploader {
display: flex;
align-items: center;
gap: var(--padding-small);
@ -79,7 +77,7 @@
/* For some bizarre reason the icon appears to have
* comically large gap on desktop */
@mixin if-desktop {
.image_uploader > .username-with-icon {
.image-uploader > .username-with-icon {
gap: 0;
}
}

View file

@ -20,8 +20,7 @@
.tag-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
flex-flow: row wrap;
gap: var(--padding-small);
margin-bottom: var(--padding-normal);
}

View file

@ -27,8 +27,7 @@
.user-title {
display: flex;
flex-direction: row;
flex-flow: row wrap;
gap: var(--padding-small);
flex-wrap: wrap;
margin-top: var(--padding-small);
}

View file

@ -11,7 +11,7 @@ function formResult({target, detail}) {
const elements = {
'#description-form': '.image-description',
'#uploader-form': '.image_uploader'
'#uploader-form': '.image-uploader'
};
function showResult(resultEl, formEl, response) {

689
assets/package-lock.json generated
View file

@ -29,6 +29,8 @@
"chai": "^5",
"eslint-plugin-vitest": "^0.5.4",
"jsdom": "^24.0.0",
"stylelint": "^16.5.0",
"stylelint-config-standard": "^36.0.0",
"vitest": "^1.5.3",
"vitest-fetch-mock": "^0.2.2"
}
@ -270,9 +272,9 @@
}
},
"node_modules/@csstools/css-parser-algorithms": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
"integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
"integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
"funding": [
{
"type": "github",
@ -287,13 +289,13 @@
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"@csstools/css-tokenizer": "^2.2.4"
"@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/css-tokenizer": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
"integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
"integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
"funding": [
{
"type": "github",
@ -308,6 +310,29 @@
"node": "^14 || ^16 || >=18"
}
},
"node_modules/@csstools/media-query-list-parser": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
"integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/csstools"
},
{
"type": "opencollective",
"url": "https://opencollective.com/csstools"
}
],
"engines": {
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"@csstools/css-parser-algorithms": "^2.6.3",
"@csstools/css-tokenizer": "^2.3.1"
}
},
"node_modules/@csstools/postcss-progressive-custom-properties": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz",
@ -360,6 +385,28 @@
"postcss": "^8.4"
}
},
"node_modules/@csstools/selector-specificity": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
"integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/csstools"
},
{
"type": "opencollective",
"url": "https://opencollective.com/csstools"
}
],
"engines": {
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"postcss-selector-parser": "^6.0.13"
}
},
"node_modules/@csstools/utilities": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz",
@ -381,6 +428,16 @@
"postcss": "^8.4"
}
},
"node_modules/@dual-bundle/import-meta-resolve": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
"integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
"dev": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/@esbuild/aix-ppc64": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
@ -1974,6 +2031,15 @@
"node": ">=12"
}
},
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@ -2193,6 +2259,12 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/colord": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
"dev": true
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@ -2215,6 +2287,32 @@
"integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==",
"dev": true
},
"node_modules/cosmiconfig": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
"dev": true,
"dependencies": {
"env-paths": "^2.2.1",
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
"parse-json": "^5.2.0"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/d-fischer"
},
"peerDependencies": {
"typescript": ">=4.9.5"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
@ -2254,12 +2352,46 @@
"node": ">= 8"
}
},
"node_modules/css-functions-list": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
"integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
"dev": true,
"engines": {
"node": ">=12 || >=16"
}
},
"node_modules/css-tree": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
}
},
"node_modules/css.escape": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
"integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
"dev": true
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
"bin": {
"cssesc": "bin/cssesc"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cssom": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
@ -2396,6 +2528,12 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz",
"integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw=="
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@ -2407,6 +2545,24 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/esbuild": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
@ -2723,6 +2879,15 @@
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
"dev": true,
"engines": {
"node": ">= 4.9.1"
}
},
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@ -2888,6 +3053,44 @@
"node": "*"
}
},
"node_modules/global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
"integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
"dev": true,
"dependencies": {
"global-prefix": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/global-prefix": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
"integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
"dev": true,
"dependencies": {
"ini": "^1.3.5",
"kind-of": "^6.0.2",
"which": "^1.3.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/global-prefix/node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"which": "bin/which"
}
},
"node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@ -2921,6 +3124,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globjoin": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
"dev": true
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@ -2957,6 +3166,18 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
"node_modules/html-tags": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
"integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/http-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
@ -3048,6 +3269,18 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@ -3056,6 +3289,15 @@
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@ -3083,6 +3325,15 @@
"node": ">=8"
}
},
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
@ -3488,6 +3739,12 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@ -3506,6 +3763,21 @@
"json-buffer": "3.0.1"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/known-css-properties": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz",
"integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==",
"dev": true
},
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -3518,6 +3790,12 @@
"node": ">= 0.8.0"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"node_modules/local-pkg": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
@ -3559,6 +3837,12 @@
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
"dev": true
},
"node_modules/loupe": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
@ -3623,6 +3907,34 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mathml-tag-names": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
"integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
"dev": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/mdn-data": {
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"node_modules/meow": {
"version": "13.2.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
"integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true,
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@ -3777,6 +4089,15 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
@ -3858,6 +4179,24 @@
"node": ">=6"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse5": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
@ -4015,6 +4354,51 @@
"postcss": "^8.2.14"
}
},
"node_modules/postcss-resolve-nested-selector": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
"integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
"dev": true
},
"node_modules/postcss-safe-parser": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz",
"integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"engines": {
"node": ">=18.0"
},
"peerDependencies": {
"postcss": "^8.4.31"
}
},
"node_modules/postcss-selector-parser": {
"version": "6.0.16",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/postcss-simple-vars": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz",
@ -4131,6 +4515,15 @@
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"dev": true
},
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@ -4284,6 +4677,18 @@
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
"dev": true
},
"node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@ -4292,6 +4697,23 @@
"node": ">=8"
}
},
"node_modules/slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@ -4340,6 +4762,20 @@
"integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
"dev": true
},
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -4392,6 +4828,157 @@
"integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
"dev": true
},
"node_modules/stylelint": {
"version": "16.5.0",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz",
"integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==",
"dev": true,
"dependencies": {
"@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.4",
"@csstools/media-query-list-parser": "^2.1.9",
"@csstools/selector-specificity": "^3.0.3",
"@dual-bundle/import-meta-resolve": "^4.0.0",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
"css-functions-list": "^3.2.2",
"css-tree": "^2.3.1",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"fastest-levenshtein": "^1.0.16",
"file-entry-cache": "^8.0.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
"ignore": "^5.3.1",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
"known-css-properties": "^0.30.0",
"mathml-tag-names": "^2.1.3",
"meow": "^13.2.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.4.38",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^7.0.0",
"postcss-selector-parser": "^6.0.16",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^7.1.0",
"supports-hyperlinks": "^3.0.0",
"svg-tags": "^1.0.0",
"table": "^6.8.2",
"write-file-atomic": "^5.0.1"
},
"bin": {
"stylelint": "bin/stylelint.mjs"
},
"engines": {
"node": ">=18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/stylelint"
}
},
"node_modules/stylelint-config-recommended": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz",
"integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==",
"dev": true,
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"stylelint": "^16.0.0"
}
},
"node_modules/stylelint-config-standard": {
"version": "36.0.0",
"resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.0.tgz",
"integrity": "sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==",
"dev": true,
"dependencies": {
"stylelint-config-recommended": "^14.0.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"stylelint": "^16.1.0"
}
},
"node_modules/stylelint/node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/stylelint/node_modules/balanced-match": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
"dev": true
},
"node_modules/stylelint/node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
"dependencies": {
"flat-cache": "^4.0.0"
},
"engines": {
"node": ">=16.0.0"
}
},
"node_modules/stylelint/node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
},
"engines": {
"node": ">=16"
}
},
"node_modules/stylelint/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/stylelint/node_modules/strip-ansi": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/sugarss": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz",
@ -4418,11 +5005,68 @@
"node": ">=8"
}
},
"node_modules/supports-hyperlinks": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
"integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
},
"engines": {
"node": ">=14.18"
}
},
"node_modules/svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
"dev": true
},
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
"node_modules/table": {
"version": "6.8.2",
"resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
"integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/table/node_modules/ajv": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
"integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.4.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/table/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@ -4652,6 +5296,12 @@
"requires-port": "^1.0.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"node_modules/vite": {
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz",
@ -4978,18 +5628,6 @@
"node": "*"
}
},
"node_modules/vitest/node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/vitest/node_modules/strip-final-newline": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@ -5099,6 +5737,19 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/write-file-atomic": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
"integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^4.0.1"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/ws": {
"version": "8.17.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",

View file

@ -34,6 +34,8 @@
"chai": "^5",
"eslint-plugin-vitest": "^0.5.4",
"jsdom": "^24.0.0",
"stylelint": "^16.5.0",
"stylelint-config-standard": "^36.0.0",
"vitest": "^1.5.3",
"vitest-fetch-mock": "^0.2.2"
}

View file

@ -17,7 +17,7 @@ html lang="en"
body.minimal
.minimal__message
h1.minimal__message__header
i.fa.fw.favicon-home>
i.fa--padded.favicon-home>
= site_name()
h3 = @short_msg

View file

@ -31,7 +31,7 @@ elixir:
a.interaction--comment href="/#{@image.id}#comments" title="Comments"
i.fa.fa-comments>
= if @image.comments_count > 0 do
span.comments_count data-image-id=@image.id = @image.comments_count
span.comments-count data-image-id=@image.id = @image.comments_count
/a.interaction--hide href="#" rel="nofollow" data-image-id=@image.id
i.fa.fa-eye-slash title="Hide"
.media-box__content class=size_class

View file

@ -27,7 +27,7 @@
span.downvotes< title="Downvotes" data-image-id=@image.id = @image.downvotes_count
a.interaction--comment.hidden--phone href="#comments" title="Comments"
i.fa.fa-comments
span.comments_count< data-image-id=@image.id = @image.comments_count
span.comments-count< data-image-id=@image.id = @image.comments_count
a.interaction--hide href="#" rel="nofollow" data-image-id=@image.id
span.hide-span title="Hide"
i.fa.fa-eye-slash

View file

@ -66,22 +66,22 @@
i.fas.fa-eraser>
' Wipe
.block__content.flex.flex--wrap.flex--column
.image_sources
.image-sources
= if has_sources do
- [first_source | sources] = @image.sources
.image_source__icon
.image-source__icon
i class=image_source_icon(first_source.source)
.image_source__link
.image-source__link
a.js-source-link href=first_source.source
strong = first_source.source
= for source <- sources do
.image_source__icon
.image-source__icon
i class=image_source_icon(source.source)
.image_source__link
.image-source__link
a href=source.source
strong = source.source
- else
.image_source__icon
.image-source__icon
i.fa.fa-unlink
.image_source__link
.image-source__link
em> not provided yet

View file

@ -1,11 +1,11 @@
span.image_uploader
span.image-uploader
' by
=> render PhilomenaWeb.UserAttributionView, "_anon_user.html", object: @image, awards: true, conn: @conn
= if can?(@conn, :show, :ip_address) and not hide_staff_tools?(@conn) do
=> link_to_ip(@conn, @image.ip)
=> link_to_fingerprint(@conn, @image.fingerprint)
a#edit-uploader href="#" data-click-hide=".image_uploader" data-click-show="#uploader-form"
a#edit-uploader href="#" data-click-hide=".image-uploader" data-click-show="#uploader-form"
i.fas.fa-edit
a#edit-anonymous href="#" data-click-toggle=".image-anonymous"
i.fas.fa-eye

View file

@ -1,6 +1,6 @@
nav#burger
a href="/"
i.fa-fw.favicon-home<>
i.fa--padded.favicon-home<>
' Home
a href="/images/new"
i.fa.fa-fw.fa-upload<>

View file

@ -3,7 +3,7 @@ header
a.header__link href="#"
i.fa.fa-bars
a.header__logo.header__link href="/"
i.fab.fa-phoenix-framework>
i.fa--padded.favicon-home>
span.hidden--mobile = site_name()
a.header__link.hidden--mobile href="/images/new" title="Upload"
i.fa.fa-upload

View file

@ -175,7 +175,7 @@ defmodule PhilomenaWeb.ImageView do
def image_container(conn, image, size, block) do
content_tag(:div, block.(),
class: "image-container #{size}",
class: "image-container #{String.replace(to_string(size), "_", "-", global: true)}",
data: image_container_data(conn, image, size)
)
end

View file

@ -3,41 +3,46 @@ defmodule PhilomenaWeb.SettingView do
def theme_options(conn) do
[
[
key: "Blue (default)",
value: "dark-blue",
data: [theme_path: Routes.static_path(conn, "/css/dark-blue.css")]
],
[
key: "Red",
value: "dark-red",
data: [theme_path: Routes.static_path(conn, "/css/dark-red.css")]
],
[
key: "Green",
value: "dark-green",
data: [theme_path: Routes.static_path(conn, "/css/dark-green.css")]
],
[
key: "Purple",
value: "dark-purple",
data: [theme_path: Routes.static_path(conn, "/css/dark-purple.css")]
],
[
key: "Pink",
value: "dark-pink",
data: [theme_path: Routes.static_path(conn, "/css/dark-pink.css")]
key: "Orange",
value: "dark-orange",
data: [theme_path: Routes.static_path(conn, "/css/dark-orange.css")]
],
[
key: "Yellow",
value: "dark-yellow",
data: [theme_path: Routes.static_path(conn, "/css/dark-yellow.css")]
],
[
key: "Green",
value: "dark-green",
data: [theme_path: Routes.static_path(conn, "/css/dark-green.css")]
],
[
key: "Blue",
value: "dark-blue",
data: [theme_path: Routes.static_path(conn, "/css/dark-blue.css")]
],
[
key: "Purple",
value: "dark-purple",
data: [theme_path: Routes.static_path(conn, "/css/dark-purple.css")]
],
[
key: "Cyan",
value: "dark-cyan",
data: [theme_path: Routes.static_path(conn, "/css/dark-cyan.css")]
],
[
key: "Pink",
value: "dark-pink",
data: [theme_path: Routes.static_path(conn, "/css/dark-pink.css")]
],
[
key: "Grey",
value: "dark-grey",
@ -48,41 +53,46 @@ defmodule PhilomenaWeb.SettingView do
def light_theme_options(conn) do
[
[
key: "Blue (default)",
value: "light-blue",
data: [theme_path: Routes.static_path(conn, "/css/light-blue.css")]
],
[
key: "Red",
value: "light-red",
data: [theme_path: Routes.static_path(conn, "/css/light-red.css")]
],
[
key: "Green",
value: "light-green",
data: [theme_path: Routes.static_path(conn, "/css/light-green.css")]
],
[
key: "Purple",
value: "light-purple",
data: [theme_path: Routes.static_path(conn, "/css/light-purple.css")]
],
[
key: "Pink",
value: "light-pink",
data: [theme_path: Routes.static_path(conn, "/css/light-pink.css")]
key: "Orange",
value: "light-orange",
data: [theme_path: Routes.static_path(conn, "/css/light-orange.css")]
],
[
key: "Yellow",
value: "light-yellow",
data: [theme_path: Routes.static_path(conn, "/css/light-yellow.css")]
],
[
key: "Green",
value: "light-green",
data: [theme_path: Routes.static_path(conn, "/css/light-green.css")]
],
[
key: "Blue",
value: "light-blue",
data: [theme_path: Routes.static_path(conn, "/css/light-blue.css")]
],
[
key: "Purple",
value: "light-purple",
data: [theme_path: Routes.static_path(conn, "/css/light-purple.css")]
],
[
key: "Cyan",
value: "light-cyan",
data: [theme_path: Routes.static_path(conn, "/css/light-cyan.css")]
],
[
key: "Pink",
value: "light-pink",
data: [theme_path: Routes.static_path(conn, "/css/light-pink.css")]
],
[
key: "Grey",
value: "light-grey",