Some more CSS styling for the options page.

This commit is contained in:
Ryan Breen
2023-01-25 00:14:15 -05:00
parent b6acf27087
commit 83cf21e5f5
6 changed files with 284 additions and 90 deletions

View File

@@ -419,6 +419,172 @@ video {
display: none; display: none;
} }
[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-color: #fff;
border-color: #6b7280;
border-width: 1px;
border-radius: 0px;
padding-top: 0.5rem;
padding-right: 0.75rem;
padding-bottom: 0.5rem;
padding-left: 0.75rem;
font-size: 1rem;
line-height: 1.5rem;
--tw-shadow: 0 0 #0000;
}
[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: #2563eb;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
border-color: #2563eb;
}
input::-moz-placeholder, textarea::-moz-placeholder {
color: #6b7280;
opacity: 1;
}
input::placeholder,textarea::placeholder {
color: #6b7280;
opacity: 1;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-date-and-time-value {
min-height: 1.5em;
}
::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {
padding-top: 0;
padding-bottom: 0;
}
select {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
background-position: right 0.5rem center;
background-repeat: no-repeat;
background-size: 1.5em 1.5em;
padding-right: 2.5rem;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
[multiple] {
background-image: initial;
background-position: initial;
background-repeat: unset;
background-size: initial;
padding-right: 0.75rem;
-webkit-print-color-adjust: unset;
print-color-adjust: unset;
}
[type='checkbox'],[type='radio'] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding: 0;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
display: inline-block;
vertical-align: middle;
background-origin: border-box;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
flex-shrink: 0;
height: 1rem;
width: 1rem;
color: #2563eb;
background-color: #fff;
border-color: #6b7280;
border-width: 1px;
--tw-shadow: 0 0 #0000;
}
[type='checkbox'] {
border-radius: 0px;
}
[type='radio'] {
border-radius: 100%;
}
[type='checkbox']:focus,[type='radio']:focus {
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
--tw-ring-offset-width: 2px;
--tw-ring-offset-color: #fff;
--tw-ring-color: #2563eb;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
[type='checkbox']:checked,[type='radio']:checked {
border-color: transparent;
background-color: currentColor;
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
[type='checkbox']:checked {
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
}
[type='radio']:checked {
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
}
[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {
border-color: transparent;
background-color: currentColor;
}
[type='checkbox']:indeterminate {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
border-color: transparent;
background-color: currentColor;
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {
border-color: transparent;
background-color: currentColor;
}
[type='file'] {
background: unset;
border-color: inherit;
border-width: 0;
border-radius: 0;
padding: 0;
font-size: unset;
line-height: inherit;
}
[type='file']:focus {
outline: 1px solid ButtonText;
outline: 1px auto -webkit-focus-ring-color;
}
*, ::before, ::after { *, ::before, ::after {
--tw-border-spacing-x: 0; --tw-border-spacing-x: 0;
--tw-border-spacing-y: 0; --tw-border-spacing-y: 0;
@@ -513,6 +679,38 @@ video {
--tw-backdrop-sepia: ; --tw-backdrop-sepia: ;
} }
.btn {
border-radius: 0.5rem;
--tw-bg-opacity: 1;
background-color: rgb(112 26 117 / var(--tw-bg-opacity));
padding: 0.375rem;
--tw-text-opacity: 1;
color: rgb(232 121 249 / var(--tw-text-opacity));
}
.btn:hover {
--tw-bg-opacity: 1;
background-color: rgb(134 25 143 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(240 171 252 / var(--tw-text-opacity));
}
.btn:active {
--tw-bg-opacity: 1;
background-color: rgb(162 28 175 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(245 208 254 / var(--tw-text-opacity));
}
.input {
border-radius: 0.5rem;
--tw-bg-opacity: 1;
background-color: rgb(245 208 254 / var(--tw-bg-opacity));
padding: 0.375rem;
--tw-text-opacity: 1;
color: rgb(134 25 143 / var(--tw-text-opacity));
}
.visible { .visible {
visibility: visible; visibility: visible;
} }
@@ -529,6 +727,14 @@ video {
isolation: isolate; isolation: isolate;
} }
.mt-3 {
margin-top: 0.75rem;
}
.mt-6 {
margin-top: 1.5rem;
}
.block { .block {
display: block; display: block;
} }
@@ -549,6 +755,14 @@ video {
display: none; display: none;
} }
.w-64 {
width: 16rem;
}
.w-1\/3 {
width: 33.333333%;
}
.grow { .grow {
flex-grow: 1; flex-grow: 1;
} }
@@ -557,10 +771,6 @@ video {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
} }
.rounded-lg {
border-radius: 0.5rem;
}
.border { .border {
border-width: 1px; border-width: 1px;
} }
@@ -570,25 +780,21 @@ video {
background-color: rgb(232 121 249 / var(--tw-bg-opacity)); background-color: rgb(232 121 249 / var(--tw-bg-opacity));
} }
.bg-fuchsia-900 {
--tw-bg-opacity: 1;
background-color: rgb(112 26 117 / var(--tw-bg-opacity));
}
.p-44 {
padding: 11rem;
}
.p-40 {
padding: 10rem;
}
.p-32 { .p-32 {
padding: 8rem; padding: 8rem;
} }
.p-1 { .p-2 {
padding: 0.25rem; padding: 0.5rem;
}
.text-center {
text-align: center;
}
.text-6xl {
font-size: 3.75rem;
line-height: 1;
} }
.text-5xl { .text-5xl {
@@ -596,14 +802,9 @@ video {
line-height: 1; line-height: 1;
} }
.text-sm { .text-lg {
font-size: 0.875rem; font-size: 1.125rem;
line-height: 1.25rem; line-height: 1.75rem;
}
.text-6xl {
font-size: 3.75rem;
line-height: 1;
} }
.font-bold { .font-bold {
@@ -622,21 +823,11 @@ video {
text-transform: capitalize; text-transform: capitalize;
} }
.text-green-500 {
--tw-text-opacity: 1;
color: rgb(34 197 94 / var(--tw-text-opacity));
}
.text-fuchsia-900 { .text-fuchsia-900 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(112 26 117 / var(--tw-text-opacity)); color: rgb(112 26 117 / var(--tw-text-opacity));
} }
.text-fuchsia-400 {
--tw-text-opacity: 1;
color: rgb(232 121 249 / var(--tw-text-opacity));
}
.text-red-500 { .text-red-500 {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(239 68 68 / var(--tw-text-opacity)); color: rgb(239 68 68 / var(--tw-text-opacity));
@@ -648,14 +839,6 @@ video {
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
.outline-1 {
outline-width: 1px;
}
.outline-4 {
outline-width: 4px;
}
.ring { .ring {
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
@@ -682,29 +865,4 @@ video {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms; transition-duration: 150ms;
}
.hover\:bg-fuchsia-600:hover {
--tw-bg-opacity: 1;
background-color: rgb(192 38 211 / var(--tw-bg-opacity));
}
.hover\:bg-fuchsia-800:hover {
--tw-bg-opacity: 1;
background-color: rgb(134 25 143 / var(--tw-bg-opacity));
}
.hover\:text-fuchsia-300:hover {
--tw-text-opacity: 1;
color: rgb(240 171 252 / var(--tw-text-opacity));
}
.active\:bg-fuchsia-700:active {
--tw-bg-opacity: 1;
background-color: rgb(162 28 175 / var(--tw-bg-opacity));
}
.active\:text-fuchsia-200:active {
--tw-text-opacity: 1;
color: rgb(245 208 254 / var(--tw-text-opacity));
} }

View File

@@ -1,3 +1,13 @@
@tailwind base; @tailwind base;
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
@layer components {
.btn {
@apply rounded-lg p-1.5 bg-fuchsia-900 text-fuchsia-400 hover:bg-fuchsia-800 hover:text-fuchsia-300 active:bg-fuchsia-700 active:text-fuchsia-200;
}
.input {
@apply bg-fuchsia-200 text-fuchsia-800 rounded-lg p-1.5;
}
}

View File

@@ -10,36 +10,39 @@
</head> </head>
<body x-data="options" class="text-fuchsia-900 bg-fuchsia-400 p-32"> <body x-data="options" class="text-fuchsia-900 bg-fuchsia-400 p-32">
<h1 class="text-6xl font-bold">Settings</h1> <h1 class="text-6xl font-bold">Advanced</h1>
<select x-model.number="profileIndex" name="profiles" id="profiles"> <select class="mt-3 input w-64" x-model.number="profileIndex" name="profiles" id="profiles" class="mt-3">
<template x-for="(profileName, index) in profileNames" :key="profileName"> <template x-for="(profileName, index) in profileNames" :key="profileName">
<option x-text="profileName" :value="index"></option> <option x-text="profileName" :value="index"></option>
</template> </template>
</select> </select>
<h2 class="text-5xl font-bold">Relays</h2> <h2 class="text-5xl font-bold mt-6">Relays</h2>
<table> <table class="mt-3">
<thead> <thead class="font-bold text-lg">
<td>URL</td> <td class="p-2 text-center">URL</td>
<td>Read</td> <td class="p-2 text-center">Read</td>
<td>Write</td> <td class="p-2 text-center">Write</td>
<td>Actions</td> <td class="p-2 text-center">Actions</td>
</thead> </thead>
<template x-for="(relay, index) in relays" :key="index"> <template x-for="(relay, index) in relays" :key="index">
<tr> <tr>
<td x-text="relay.url"></td> <td class="p-2 w-1/3" x-text="relay.url"></td>
<td><input type="checkbox" x-model="relay.read" @change="await saveRelaysForProfile(index)"></td> <td class="p-2 text-center"><input type="checkbox" x-model="relay.read"
<td><input type="checkbox" x-model="relay.write" @change="await saveRelaysForProfile(index)"></td> @change="await saveRelaysForProfile(index)"></td>
<td><button <td class="p-2 text-center"><input type="checkbox" x-model="relay.write"
class="rounded-lg p-1 bg-fuchsia-900 text-fuchsia-400 hover:bg-fuchsia-800 hover:text-fuchsia-300 active:bg-fuchsia-700 active:text-fuchsia-200" @change="await saveRelaysForProfile(index)"></td>
@click="await deleteRelay(index)">Delete</button></td> <td class="p-2 text-center">
<button class="btn" @click="await deleteRelay(index)">Delete</button>
</td>
</tr> </tr>
</template> </template>
</table> </table>
<input x-model="newRelay" type="text" @keyup.enter="await addRelay()"> <button @click="await addRelay()">Add</button> <input class="mt-3 input" x-model="newRelay" type="text" @keyup.enter="await addRelay()" placeholder="wss://...">
<button class="btn" @click="await addRelay()">Add</button>
<div class="text-red-500 font-bold" x-show="urlError.length > 0" x-text="urlError"></div> <div class="text-red-500 font-bold" x-show="urlError.length > 0" x-text="urlError"></div>
</body> </body>

22
package-lock.json generated
View File

@@ -14,6 +14,7 @@
"nostr-tools": "^1.1.1" "nostr-tools": "^1.1.1"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/forms": "^0.5.3",
"prettier": "^2.8.3", "prettier": "^2.8.3",
"tailwindcss": "^3.2.4" "tailwindcss": "^3.2.4"
} }
@@ -463,6 +464,18 @@
} }
] ]
}, },
"node_modules/@tailwindcss/forms": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
"integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
"dev": true,
"dependencies": {
"mini-svg-data-uri": "^1.2.3"
},
"peerDependencies": {
"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
}
},
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.1.5", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
@@ -874,6 +887,15 @@
"node": ">=8.6" "node": ">=8.6"
} }
}, },
"node_modules/mini-svg-data-uri": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
"integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
"dev": true,
"bin": {
"mini-svg-data-uri": "cli.js"
}
},
"node_modules/minimist": { "node_modules/minimist": {
"version": "1.2.7", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",

View File

@@ -11,7 +11,7 @@
"scripts": { "scripts": {
"build": "./build.js", "build": "./build.js",
"watch": "./build.js watch", "watch": "./build.js watch",
"watch-tailwind": "tailwindcss -i './Shared (Extension)/Resources/options.css' -o 'Shared (Extension)/Resources/options.build.css' --watch", "watch-tailwind": "tailwindcss -i './Shared (Extension)/Resources/options.css' -o './Shared (Extension)/Resources/options.build.css' --watch",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"author": "", "author": "",
@@ -22,6 +22,7 @@
"nostr-tools": "^1.1.1" "nostr-tools": "^1.1.1"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/forms": "^0.5.3",
"prettier": "^2.8.3", "prettier": "^2.8.3",
"tailwindcss": "^3.2.4" "tailwindcss": "^3.2.4"
} }

View File

@@ -1,8 +1,8 @@
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: ['./Shared (Extension)/Resources/*.{js,html}'], content: ['./Shared (Extension)/Resources/*.{html,js}'],
theme: { theme: {
extend: {}, extend: {},
}, },
plugins: [], plugins: [require('@tailwindcss/forms')],
}; };