Adding exact search checkbox.

This commit is contained in:
Bradley Shellnut 2023-12-26 16:42:06 -08:00
parent 527866b1d2
commit c91cb72b38
5 changed files with 140 additions and 128 deletions

View file

@ -27,7 +27,7 @@
}, },
"devDependencies": { "devDependencies": {
"@melt-ui/pp": "^0.1.4", "@melt-ui/pp": "^0.1.4",
"@melt-ui/svelte": "^0.66.0", "@melt-ui/svelte": "^0.66.3",
"@playwright/test": "^1.40.1", "@playwright/test": "^1.40.1",
"@resvg/resvg-js": "^2.4.1", "@resvg/resvg-js": "^2.4.1",
"@sveltejs/adapter-auto": "^2.1.1", "@sveltejs/adapter-auto": "^2.1.1",
@ -35,10 +35,10 @@
"@sveltejs/kit": "^1.30.3", "@sveltejs/kit": "^1.30.3",
"@types/cookie": "^0.5.4", "@types/cookie": "^0.5.4",
"@types/node": "^18.19.3", "@types/node": "^18.19.3",
"@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/eslint-plugin": "^6.16.0",
"@typescript-eslint/parser": "^6.14.0", "@typescript-eslint/parser": "^6.16.0",
"autoprefixer": "^10.4.15", "autoprefixer": "^10.4.15",
"eslint": "^8.55.0", "eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.35.1", "eslint-plugin-svelte": "^2.35.1",
"just-clone": "^6.2.0", "just-clone": "^6.2.0",
@ -59,8 +59,8 @@
"svelte-preprocess": "^5.1.3", "svelte-preprocess": "^5.1.3",
"svelte-sequential-preprocessor": "^2.0.1", "svelte-sequential-preprocessor": "^2.0.1",
"sveltekit-flash-message": "^2.3.0", "sveltekit-flash-message": "^2.3.0",
"sveltekit-superforms": "^1.12.0", "sveltekit-superforms": "^1.13.1",
"tailwindcss": "^3.3.7", "tailwindcss": "^3.4.0",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"tslib": "^2.6.1", "tslib": "^2.6.1",
"typescript": "^5.3.3", "typescript": "^5.3.3",
@ -90,7 +90,7 @@
"clsx": "^2.0.0", "clsx": "^2.0.0",
"cookie": "^0.5.0", "cookie": "^0.5.0",
"feather-icons": "^4.29.1", "feather-icons": "^4.29.1",
"formsnap": "^0.4.1", "formsnap": "^0.4.2",
"html-entities": "^2.4.0", "html-entities": "^2.4.0",
"iconify-icon": "^1.0.8", "iconify-icon": "^1.0.8",
"just-kebab-case": "^4.2.0", "just-kebab-case": "^4.2.0",
@ -102,7 +102,7 @@
"radix-svelte": "^0.9.0", "radix-svelte": "^0.9.0",
"svelte-french-toast": "^1.2.0", "svelte-french-toast": "^1.2.0",
"svelte-lazy-loader": "^1.0.0", "svelte-lazy-loader": "^1.0.0",
"tailwind-merge": "^2.1.0", "tailwind-merge": "^2.2.0",
"tailwind-variants": "^0.1.19", "tailwind-variants": "^0.1.19",
"tailwindcss-animate": "^1.0.6", "tailwindcss-animate": "^1.0.6",
"zod-to-json-schema": "^3.22.3" "zod-to-json-schema": "^3.22.3"

View file

@ -54,8 +54,8 @@ dependencies:
specifier: ^4.29.1 specifier: ^4.29.1
version: 4.29.1 version: 4.29.1
formsnap: formsnap:
specifier: ^0.4.1 specifier: ^0.4.2
version: 0.4.1(svelte@4.2.8)(sveltekit-superforms@1.12.0)(zod@3.22.4) version: 0.4.2(svelte@4.2.8)(sveltekit-superforms@1.13.1)(zod@3.22.4)
html-entities: html-entities:
specifier: ^2.4.0 specifier: ^2.4.0
version: 2.4.0 version: 2.4.0
@ -90,14 +90,14 @@ dependencies:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0 version: 1.0.0
tailwind-merge: tailwind-merge:
specifier: ^2.1.0 specifier: ^2.2.0
version: 2.1.0 version: 2.2.0
tailwind-variants: tailwind-variants:
specifier: ^0.1.19 specifier: ^0.1.19
version: 0.1.19(tailwindcss@3.3.7) version: 0.1.19(tailwindcss@3.4.0)
tailwindcss-animate: tailwindcss-animate:
specifier: ^1.0.6 specifier: ^1.0.6
version: 1.0.7(tailwindcss@3.3.7) version: 1.0.7(tailwindcss@3.4.0)
zod-to-json-schema: zod-to-json-schema:
specifier: ^3.22.3 specifier: ^3.22.3
version: 3.22.3(zod@3.22.4) version: 3.22.3(zod@3.22.4)
@ -105,10 +105,10 @@ dependencies:
devDependencies: devDependencies:
'@melt-ui/pp': '@melt-ui/pp':
specifier: ^0.1.4 specifier: ^0.1.4
version: 0.1.4(@melt-ui/svelte@0.66.0)(svelte@4.2.8) version: 0.1.4(@melt-ui/svelte@0.66.3)(svelte@4.2.8)
'@melt-ui/svelte': '@melt-ui/svelte':
specifier: ^0.66.0 specifier: ^0.66.3
version: 0.66.0(svelte@4.2.8) version: 0.66.3(svelte@4.2.8)
'@playwright/test': '@playwright/test':
specifier: ^1.40.1 specifier: ^1.40.1
version: 1.40.1 version: 1.40.1
@ -131,23 +131,23 @@ devDependencies:
specifier: ^18.19.3 specifier: ^18.19.3
version: 18.19.3 version: 18.19.3
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^6.14.0 specifier: ^6.16.0
version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) version: 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.3.3)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^6.14.0 specifier: ^6.16.0
version: 6.14.0(eslint@8.55.0)(typescript@5.3.3) version: 6.16.0(eslint@8.56.0)(typescript@5.3.3)
autoprefixer: autoprefixer:
specifier: ^10.4.15 specifier: ^10.4.15
version: 10.4.16(postcss@8.4.32) version: 10.4.16(postcss@8.4.32)
eslint: eslint:
specifier: ^8.55.0 specifier: ^8.56.0
version: 8.55.0 version: 8.56.0
eslint-config-prettier: eslint-config-prettier:
specifier: ^9.1.0 specifier: ^9.1.0
version: 9.1.0(eslint@8.55.0) version: 9.1.0(eslint@8.56.0)
eslint-plugin-svelte: eslint-plugin-svelte:
specifier: ^2.35.1 specifier: ^2.35.1
version: 2.35.1(eslint@8.55.0)(svelte@4.2.8)(ts-node@10.9.2) version: 2.35.1(eslint@8.56.0)(svelte@4.2.8)(ts-node@10.9.2)
just-clone: just-clone:
specifier: ^6.2.0 specifier: ^6.2.0
version: 6.2.0 version: 6.2.0
@ -203,11 +203,11 @@ devDependencies:
specifier: ^2.3.0 specifier: ^2.3.0
version: 2.3.0(@sveltejs/kit@1.30.3)(svelte@4.2.8) version: 2.3.0(@sveltejs/kit@1.30.3)(svelte@4.2.8)
sveltekit-superforms: sveltekit-superforms:
specifier: ^1.12.0 specifier: ^1.13.1
version: 1.12.0(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4) version: 1.13.1(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4)
tailwindcss: tailwindcss:
specifier: ^3.3.7 specifier: ^3.4.0
version: 3.3.7(ts-node@10.9.2) version: 3.4.0(ts-node@10.9.2)
ts-node: ts-node:
specifier: ^10.9.2 specifier: ^10.9.2
version: 10.9.2(@types/node@18.19.3)(typescript@5.3.3) version: 10.9.2(@types/node@18.19.3)(typescript@5.3.3)
@ -844,13 +844,13 @@ packages:
requiresBuild: true requiresBuild: true
optional: true optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies: dependencies:
eslint: 8.55.0 eslint: 8.56.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
@ -867,7 +867,7 @@ packages:
debug: 4.3.4 debug: 4.3.4
espree: 9.6.1 espree: 9.6.1
globals: 13.23.0 globals: 13.23.0
ignore: 5.2.4 ignore: 5.3.0
import-fresh: 3.3.0 import-fresh: 3.3.0
js-yaml: 4.1.0 js-yaml: 4.1.0
minimatch: 3.1.2 minimatch: 3.1.2
@ -876,8 +876,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@eslint/js@8.55.0: /@eslint/js@8.56.0:
resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
@ -1028,14 +1028,14 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@melt-ui/pp@0.1.4(@melt-ui/svelte@0.66.0)(svelte@4.2.8): /@melt-ui/pp@0.1.4(@melt-ui/svelte@0.66.3)(svelte@4.2.8):
resolution: {integrity: sha512-zR+Kl3CZJPJBHW8V7YcdQCMI/dVcnW9Ct3yGbVaIywYVStVRS7F9uEDOea3xLLT2WTGodQePzPlUn53yKFu87g==} resolution: {integrity: sha512-zR+Kl3CZJPJBHW8V7YcdQCMI/dVcnW9Ct3yGbVaIywYVStVRS7F9uEDOea3xLLT2WTGodQePzPlUn53yKFu87g==}
engines: {pnpm: '>=8.6.3'} engines: {pnpm: '>=8.6.3'}
peerDependencies: peerDependencies:
'@melt-ui/svelte': '>= 0.29.0' '@melt-ui/svelte': '>= 0.29.0'
svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1 svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1
dependencies: dependencies:
'@melt-ui/svelte': 0.66.0(svelte@4.2.8) '@melt-ui/svelte': 0.66.3(svelte@4.2.8)
estree-walker: 3.0.3 estree-walker: 3.0.3
svelte: 4.2.8 svelte: 4.2.8
dev: true dev: true
@ -1054,8 +1054,8 @@ packages:
svelte: 4.2.8 svelte: 4.2.8
dev: false dev: false
/@melt-ui/svelte@0.66.0(svelte@4.2.8): /@melt-ui/svelte@0.66.3(svelte@4.2.8):
resolution: {integrity: sha512-vEF8V+MYNOovNxAgc54o9BWE8+TeQt6ey2zOxHjPuj8GnnIUsRHJxErMo96bjqdhpVjW7cMUEdOET0Tw0YqSIw==} resolution: {integrity: sha512-inwvI+YjvMWykK8PEYIg9sAx0sQHI29XeX9hfrdtP47mFVa61pQLqrLoADBpTSb5gO9ZzuL01agXGFfzjK1iPw==}
peerDependencies: peerDependencies:
svelte: '>=3 <5' svelte: '>=3 <5'
dependencies: dependencies:
@ -1909,8 +1909,8 @@ packages:
resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
dev: true dev: true
/@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): /@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} resolution: {integrity: sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@ -1921,15 +1921,15 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.3.3)
'@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/scope-manager': 6.16.0
'@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/type-utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3)
'@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.14.0 '@typescript-eslint/visitor-keys': 6.16.0
debug: 4.3.4 debug: 4.3.4
eslint: 8.55.0 eslint: 8.56.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.3.0
natural-compare: 1.4.0 natural-compare: 1.4.0
semver: 7.5.4 semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.3.3) ts-api-utils: 1.0.3(typescript@5.3.3)
@ -1938,8 +1938,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): /@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
@ -1948,27 +1948,27 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/scope-manager': 6.16.0
'@typescript-eslint/types': 6.14.0 '@typescript-eslint/types': 6.16.0
'@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.14.0 '@typescript-eslint/visitor-keys': 6.16.0
debug: 4.3.4 debug: 4.3.4
eslint: 8.55.0 eslint: 8.56.0
typescript: 5.3.3 typescript: 5.3.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/scope-manager@6.14.0: /@typescript-eslint/scope-manager@6.16.0:
resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} resolution: {integrity: sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dependencies: dependencies:
'@typescript-eslint/types': 6.14.0 '@typescript-eslint/types': 6.16.0
'@typescript-eslint/visitor-keys': 6.14.0 '@typescript-eslint/visitor-keys': 6.16.0
dev: true dev: true
/@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): /@typescript-eslint/type-utils@6.16.0(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} resolution: {integrity: sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
@ -1977,23 +1977,23 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3)
'@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.3.3)
debug: 4.3.4 debug: 4.3.4
eslint: 8.55.0 eslint: 8.56.0
ts-api-utils: 1.0.3(typescript@5.3.3) ts-api-utils: 1.0.3(typescript@5.3.3)
typescript: 5.3.3 typescript: 5.3.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/types@6.14.0: /@typescript-eslint/types@6.16.0:
resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} resolution: {integrity: sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dev: true dev: true
/@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): /@typescript-eslint/typescript-estree@6.16.0(typescript@5.3.3):
resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} resolution: {integrity: sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -2001,11 +2001,12 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/types': 6.14.0 '@typescript-eslint/types': 6.16.0
'@typescript-eslint/visitor-keys': 6.14.0 '@typescript-eslint/visitor-keys': 6.16.0
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.5.4 semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.3.3) ts-api-utils: 1.0.3(typescript@5.3.3)
typescript: 5.3.3 typescript: 5.3.3
@ -2013,30 +2014,30 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): /@typescript-eslint/utils@6.16.0(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} resolution: {integrity: sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/semver': 7.5.6 '@types/semver': 7.5.6
'@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/scope-manager': 6.16.0
'@typescript-eslint/types': 6.14.0 '@typescript-eslint/types': 6.16.0
'@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.3.3)
eslint: 8.55.0 eslint: 8.56.0
semver: 7.5.4 semver: 7.5.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
dev: true dev: true
/@typescript-eslint/visitor-keys@6.14.0: /@typescript-eslint/visitor-keys@6.16.0:
resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} resolution: {integrity: sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dependencies: dependencies:
'@typescript-eslint/types': 6.14.0 '@typescript-eslint/types': 6.16.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
@ -2309,7 +2310,6 @@ packages:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
dependencies: dependencies:
balanced-match: 1.0.2 balanced-match: 1.0.2
dev: false
/braces@3.0.2: /braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
@ -2691,25 +2691,25 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/eslint-compat-utils@0.1.2(eslint@8.55.0): /eslint-compat-utils@0.1.2(eslint@8.56.0):
resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
eslint: '>=6.0.0' eslint: '>=6.0.0'
dependencies: dependencies:
eslint: 8.55.0 eslint: 8.56.0
dev: true dev: true
/eslint-config-prettier@9.1.0(eslint@8.55.0): /eslint-config-prettier@9.1.0(eslint@8.56.0):
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
eslint: '>=7.0.0' eslint: '>=7.0.0'
dependencies: dependencies:
eslint: 8.55.0 eslint: 8.56.0
dev: true dev: true
/eslint-plugin-svelte@2.35.1(eslint@8.55.0)(svelte@4.2.8)(ts-node@10.9.2): /eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@4.2.8)(ts-node@10.9.2):
resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==} resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==}
engines: {node: ^14.17.0 || >=16.0.0} engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@ -2719,11 +2719,11 @@ packages:
svelte: svelte:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/sourcemap-codec': 1.4.15
debug: 4.3.4 debug: 4.3.4
eslint: 8.55.0 eslint: 8.56.0
eslint-compat-utils: 0.1.2(eslint@8.55.0) eslint-compat-utils: 0.1.2(eslint@8.56.0)
esutils: 2.0.3 esutils: 2.0.3
known-css-properties: 0.29.0 known-css-properties: 0.29.0
postcss: 8.4.32 postcss: 8.4.32
@ -2751,15 +2751,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/eslint@8.55.0: /eslint@8.56.0:
resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@eslint/eslintrc': 2.1.4 '@eslint/eslintrc': 2.1.4
'@eslint/js': 8.55.0 '@eslint/js': 8.56.0
'@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
@ -2781,7 +2781,7 @@ packages:
glob-parent: 6.0.2 glob-parent: 6.0.2
globals: 13.23.0 globals: 13.23.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.3.0
imurmurhash: 0.1.4 imurmurhash: 0.1.4
is-glob: 4.0.3 is-glob: 4.0.3
is-path-inside: 3.0.3 is-path-inside: 3.0.3
@ -2952,15 +2952,15 @@ packages:
is-callable: 1.2.7 is-callable: 1.2.7
dev: false dev: false
/formsnap@0.4.1(svelte@4.2.8)(sveltekit-superforms@1.12.0)(zod@3.22.4): /formsnap@0.4.2(svelte@4.2.8)(sveltekit-superforms@1.13.1)(zod@3.22.4):
resolution: {integrity: sha512-hUOaDKb+KoBi4PamJRnxRqIQW3msp2BKPqohoqjHUuBb+vgBrhoaz0WYEFkXG4bzVQS3JngG55m/zX5ciZTyeA==} resolution: {integrity: sha512-iUhGDUcjUW9tCOYLZ1rbNR1wkjtEbrXDxhUnl7+zPKjP5K8ikDfhZWH1cquKdUcHJoSE7M/Rruvg0fNQMjSNtA==}
peerDependencies: peerDependencies:
svelte: ^4.0.0 svelte: ^4.0.0
sveltekit-superforms: ^1.7.1 sveltekit-superforms: ^1.7.1
zod: ^3.22.2 zod: ^3.22.2
dependencies: dependencies:
svelte: 4.2.8 svelte: 4.2.8
sveltekit-superforms: 1.12.0(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4) sveltekit-superforms: 1.13.1(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4)
zod: 3.22.4 zod: 3.22.4
dev: false dev: false
@ -3165,11 +3165,6 @@ packages:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
dev: false dev: false
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
dev: true
/ignore@5.3.0: /ignore@5.3.0:
resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
@ -3523,6 +3518,13 @@ packages:
brace-expansion: 2.0.1 brace-expansion: 2.0.1
dev: false dev: false
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: true
/minimist@1.2.8: /minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
@ -4830,8 +4832,8 @@ packages:
svelte: 4.2.8 svelte: 4.2.8
dev: true dev: true
/sveltekit-superforms@1.12.0(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4): /sveltekit-superforms@1.13.1(@sveltejs/kit@1.30.3)(svelte@4.2.8)(zod@3.22.4):
resolution: {integrity: sha512-yer9YKhfWsKsDIxXahFLuGuUel32gyi96qIdxTVFAOWXZM9ZaMEP7+FL2cMYRDg6Xqlrh5SQ9oQdkVYeLNG0eA==} resolution: {integrity: sha512-aWHAV6t6+7g37IGFNLRtbRIoqfC3a56Hf4/tTUNFZfwO2mOQGfeMb49WWBLdZZTrFRPGngfNRUxQzeoO3GspnQ==}
peerDependencies: peerDependencies:
'@sveltejs/kit': 1.x || 2.x '@sveltejs/kit': 1.x || 2.x
svelte: 3.x || 4.x svelte: 3.x || 4.x
@ -4848,32 +4850,32 @@ packages:
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
dev: false dev: false
/tailwind-merge@2.1.0: /tailwind-merge@2.2.0:
resolution: {integrity: sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ==} resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==}
dependencies: dependencies:
'@babel/runtime': 7.23.6 '@babel/runtime': 7.23.6
dev: false dev: false
/tailwind-variants@0.1.19(tailwindcss@3.3.7): /tailwind-variants@0.1.19(tailwindcss@3.4.0):
resolution: {integrity: sha512-D9Yf5WqsxodnCtjZt6KifEoKwW8rTURXQV03KRKlojITQM5gV1vPVWufWNiIvd/ptC3QybYFpwmHK9cs4Ei08Q==} resolution: {integrity: sha512-D9Yf5WqsxodnCtjZt6KifEoKwW8rTURXQV03KRKlojITQM5gV1vPVWufWNiIvd/ptC3QybYFpwmHK9cs4Ei08Q==}
engines: {node: '>=16.x', pnpm: '>=7.x'} engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies: peerDependencies:
tailwindcss: '*' tailwindcss: '*'
dependencies: dependencies:
tailwind-merge: 1.14.0 tailwind-merge: 1.14.0
tailwindcss: 3.3.7(ts-node@10.9.2) tailwindcss: 3.4.0(ts-node@10.9.2)
dev: false dev: false
/tailwindcss-animate@1.0.7(tailwindcss@3.3.7): /tailwindcss-animate@1.0.7(tailwindcss@3.4.0):
resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
peerDependencies: peerDependencies:
tailwindcss: '>=3.0.0 || insiders' tailwindcss: '>=3.0.0 || insiders'
dependencies: dependencies:
tailwindcss: 3.3.7(ts-node@10.9.2) tailwindcss: 3.4.0(ts-node@10.9.2)
dev: false dev: false
/tailwindcss@3.3.7(ts-node@10.9.2): /tailwindcss@3.4.0(ts-node@10.9.2):
resolution: {integrity: sha512-pjgQxDZPvyS/nG3ZYkyCvsbONJl7GdOejfm24iMt2ElYQQw8Jc4p0m8RdMp7mznPD0kUhfzwV3zAwa80qI0zmQ==} resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:

View file

@ -61,6 +61,7 @@ const Search = z.object({
export const search_schema = z export const search_schema = z
.object({ .object({
q: z.string().trim().optional().default(''), q: z.string().trim().optional().default(''),
exact: z.preprocess((a) => Boolean(a), z.boolean().default(true)),
minAge: IntegerString(z.number().min(1).max(120).optional()), minAge: IntegerString(z.number().min(1).max(120).optional()),
minPlayers: IntegerString(z.number().min(1).max(50).optional()), minPlayers: IntegerString(z.number().min(1).max(50).optional()),
maxPlayers: IntegerString(z.number().min(1).max(50).optional()), maxPlayers: IntegerString(z.number().min(1).max(50).optional()),

View file

@ -37,12 +37,12 @@ async function searchForGames(
const response = await eventFetch(url, requestInit); const response = await eventFetch(url, requestInit);
console.log('response from internal api', response); console.log('response from internal api', response);
if (!response.ok) { if (response.status !== 404 && !response.ok) {
console.log('Status not 200', response.status); console.log('Status from internal api not 200', response.status);
throw error(response.status); throw error(response.status);
} }
let games = await response.json(); const games = await response.json();
console.log('games from DB', games); console.log('games from DB', games);
const gameNameSearch = urlQueryParams.get('q'); const gameNameSearch = urlQueryParams.get('q');
@ -61,9 +61,9 @@ async function searchForGames(
console.log('Back from external search', externalResponse); console.log('Back from external search', externalResponse);
if (!response.ok) { if (!externalResponse.ok) {
console.log('Status not 200', response.status); console.log('Status not 200', externalResponse.status);
throw error(response.status); throw error(externalResponse.status);
} }
if (externalResponse.ok) { if (externalResponse.ok) {

View file

@ -10,6 +10,7 @@
import { Label } from '$lib/components/ui/label'; import { Label } from '$lib/components/ui/label';
import { Input } from '$lib/components/ui/input'; import { Input } from '$lib/components/ui/input';
import { Button } from '$lib/components/ui/button'; import { Button } from '$lib/components/ui/button';
import { Checkbox } from "$lib/components/ui/checkbox";
export let data; export let data;
@ -39,17 +40,25 @@
<search> <search>
<form id="search-form" action="/search" method="GET"> <form id="search-form" action="/search" method="GET">
<div class="search"> <fieldset>
<fieldset class="text-search"> <Label for="label">Search</Label>
<Label for="label">Search</Label> <Input type="text" id="q" class={$errors.q && "outline outline-destructive"} name="q" placeholder="Search board games" data-invalid={$errors.q} bind:value={$form.q} />
<Input type="text" id="q" class={$errors.q && "outline outline-destructive"} name="q" placeholder="Search board games" data-invalid={$errors.q} bind:value={$form.q} /> {#if $errors.q}
{#if $errors.q} <p class="text-sm text-destructive">{$errors.q}</p>
<p class="text-sm text-destructive">{$errors.q}</p> {/if}
{/if} <input id="skip" type="hidden" name="skip" bind:value={$form.skip} />
<input id="skip" type="hidden" name="skip" bind:value={$form.skip} /> <input id="limit" type="hidden" name="limit" bind:value={$form.limit} />
<input id="limit" type="hidden" name="limit" bind:value={$form.limit} /> </fieldset>
</fieldset> <fieldset class="flex items-center space-x-2">
</div> <Checkbox id="exact" bind:checked={$form.exact} aria-labelledby="exact-label" />
<Label
id="exact-label"
for="exact"
class="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Exact Search
</Label>
</fieldset>
<Button type="submit">Submit</Button> <Button type="submit">Submit</Button>
</form> </form>
</search> </search>