+ What are your preferred weapons to play? Select up to{" "}
+ {LFG_WEAPON_POOL_MAX_LENGTH}.
+
!weaponPool.includes(wpn))}
+ onChange={(val) => setWeaponPool((pool) => [...pool, val])}
+ inputName="weapon-pool"
+ placeholder="Luna Blaster"
+ />
+
+ {weaponPool.map((wpn, i) => (
+ -
+ {" "}
+ {i + 1}) {wpn}{" "}
+
+
+ ))}
+
+ {weaponPool.length > LFG_WEAPON_POOL_MAX_LENGTH && (
+
+ You can have at most {LFG_WEAPON_POOL_MAX_LENGTH} weapons in your
+ weapon pool
+
+ )}
+
diff --git a/app/styles/global.css b/app/styles/global.css
index a8da5589b..f2599e9d9 100644
--- a/app/styles/global.css
+++ b/app/styles/global.css
@@ -188,7 +188,7 @@ button > .button-icon {
margin-inline-end: var(--s-1-5);
}
-textarea {
+textarea:not(.plain) {
padding: var(--s-2) var(--s-3);
border: 1px solid var(--border);
accent-color: var(--theme-secondary);
@@ -202,6 +202,13 @@ textarea {
white-space: pre;
}
+textarea:not(.plain):focus-within {
+ border-color: transparent;
+
+ /* TODO: rectangle on Safari */
+ outline: 2px solid var(--theme);
+}
+
input:not(.plain) {
height: 1rem;
padding: var(--s-4) var(--s-3);
@@ -228,6 +235,7 @@ input:not(.plain):focus-within {
input:not(.plain)::placeholder {
color: var(--text-lighter);
+ font-size: var(--fonts-xxs);
font-weight: var(--semi-bold);
letter-spacing: 0.5px;
}
@@ -443,6 +451,31 @@ hr {
white-space: pre-wrap;
}
+.combobox-input {
+ width: 12rem;
+}
+
+.combobox-options {
+ position: absolute;
+ width: 12rem;
+ margin-top: var(--s-2);
+ background-color: var(--bg-darker);
+ border-radius: var(--rounded);
+ color: var(--text);
+ font-size: var(--fonts-sm);
+ padding-block: var(--s-3);
+ padding-inline: 0;
+}
+
+.combobox-item {
+ padding: var(--s-1) var(--s-3);
+ list-style: none;
+}
+
+.combobox-item.active {
+ background-color: var(--theme-transparent);
+}
+
.four-zero-one__container {
text-align: center;
}
@@ -537,10 +570,22 @@ hr {
margin-block-start: var(--s-4);
}
+.mt-6 {
+ margin-block-start: var(--s-6);
+}
+
.mb-0 {
margin-block-end: 0;
}
+.mb-2 {
+ margin-block-end: var(--s-2);
+}
+
+.ml-auto {
+ margin-inline-start: auto;
+}
+
.ml-2 {
margin-inline-start: var(--s-2);
}
diff --git a/app/styles/layout.css b/app/styles/layout.css
index 2a90efba1..cccf226e8 100644
--- a/app/styles/layout.css
+++ b/app/styles/layout.css
@@ -113,8 +113,8 @@
.layout__main {
max-width: 48rem;
- padding-top: var(--s-8);
margin: 0 auto;
+ padding-block: var(--s-8);
padding-inline: var(--s-2);
}
diff --git a/app/styles/play-settings.css b/app/styles/play-settings.css
index a00e05ccc..df8c105b7 100644
--- a/app/styles/play-settings.css
+++ b/app/styles/play-settings.css
@@ -1,15 +1,48 @@
-.play-settings__mini-bio-label {
+.play-settings__label {
display: block;
font-size: var(--fonts-sm);
font-weight: var(--bold);
}
+.play-settings__weapons {
+ display: flex;
+ width: 17rem;
+ flex-direction: column;
+ padding: 0;
+ gap: var(--s-2);
+ margin-block-start: var(--s-3);
+}
+
+.play-settings__weapon-row {
+ display: flex;
+ align-items: center;
+ padding: var(--s-1) var(--s-2);
+ background-color: var(--theme);
+ border-radius: var(--rounded);
+ color: var(--button-text);
+ font-size: var(--fonts-xxs);
+ font-weight: var(--bold);
+ letter-spacing: var(--s-0-5);
+ text-transform: uppercase;
+}
+
+.play-settings__weapon {
+ width: 2rem;
+ margin-inline-end: var(--s-2);
+}
+
.play-settings__explanation {
color: var(--text-lighter);
font-size: var(--fonts-sm);
margin-block-end: var(--s-2);
}
+.play-settings__error-text {
+ color: var(--theme-error);
+ font-size: var(--fonts-sm);
+ margin-block-start: var(--s-2);
+}
+
.play-settings__mini-bio {
width: min(18rem, 100%);
height: 6rem;
diff --git a/package-lock.json b/package-lock.json
index 248bbb1de..375887e54 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
"cookie-session": "^2.0.0",
"cross-env": "^7.0.3",
"express": "^4.17.3",
+ "fuse.js": "^6.5.3",
"just-clone": "^5.0.1",
"just-shuffle": "^4.0.1",
"morgan": "^1.10.0",
@@ -4454,6 +4455,14 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "node_modules/fuse.js": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz",
+ "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -13703,6 +13712,11 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "fuse.js": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz",
+ "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg=="
+ },
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
diff --git a/package.json b/package.json
index 4ff95c0e2..11e1ba1f4 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"cookie-session": "^2.0.0",
"cross-env": "^7.0.3",
"express": "^4.17.3",
+ "fuse.js": "^6.5.3",
"just-clone": "^5.0.1",
"just-shuffle": "^4.0.1",
"morgan": "^1.10.0",