Compare commits

...

2 Commits

Author SHA1 Message Date
Gib
55e283731d Readyish for prod! 2025-06-13 16:55:46 -05:00
Gib
0ba218e521 Readyish for prod! 2025-06-13 16:53:33 -05:00
5 changed files with 142 additions and 107 deletions

View File

@ -53,7 +53,7 @@
"@types/node": "^20.19.0", "@types/node": "^20.19.0",
"@types/react": "^19.1.8", "@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6", "@types/react-dom": "^19.1.6",
"eslint": "^9.28.0", "eslint": "^9.29.0",
"eslint-config-next": "^15.3.3", "eslint-config-next": "^15.3.3",
"eslint-config-prettier": "^10.1.5", "eslint-config-prettier": "^10.1.5",
"eslint-plugin-prettier": "^5.4.1", "eslint-plugin-prettier": "^5.4.1",

130
pnpm-lock.yaml generated
View File

@ -112,17 +112,17 @@ importers:
specifier: ^19.1.6 specifier: ^19.1.6
version: 19.1.6(@types/react@19.1.8) version: 19.1.6(@types/react@19.1.8)
eslint: eslint:
specifier: ^9.28.0 specifier: ^9.29.0
version: 9.28.0(jiti@2.4.2) version: 9.29.0(jiti@2.4.2)
eslint-config-next: eslint-config-next:
specifier: ^15.3.3 specifier: ^15.3.3
version: 15.3.3(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) version: 15.3.3(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
eslint-config-prettier: eslint-config-prettier:
specifier: ^10.1.5 specifier: ^10.1.5
version: 10.1.5(eslint@9.28.0(jiti@2.4.2)) version: 10.1.5(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: ^5.4.1 specifier: ^5.4.1
version: 5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3) version: 5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3)
import-in-the-middle: import-in-the-middle:
specifier: ^1.14.2 specifier: ^1.14.2
version: 1.14.2 version: 1.14.2
@ -152,7 +152,7 @@ importers:
version: 5.8.3 version: 5.8.3
typescript-eslint: typescript-eslint:
specifier: ^8.34.0 specifier: ^8.34.0
version: 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) version: 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
packages: packages:
@ -266,8 +266,8 @@ packages:
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.28.0': '@eslint/js@9.29.0':
resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6': '@eslint/object-schema@2.1.6':
@ -2235,8 +2235,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.28.0: eslint@9.29.0:
resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -3720,9 +3720,9 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
'@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))':
dependencies: dependencies:
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
@ -3759,7 +3759,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/js@9.28.0': {} '@eslint/js@9.29.0': {}
'@eslint/object-schema@2.1.6': {} '@eslint/object-schema@2.1.6': {}
@ -5071,15 +5071,15 @@ snapshots:
dependencies: dependencies:
'@types/node': 20.19.0 '@types/node': 20.19.0
'@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.34.0 '@typescript-eslint/scope-manager': 8.34.0
'@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/type-utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.34.0 '@typescript-eslint/visitor-keys': 8.34.0
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 7.0.5 ignore: 7.0.5
natural-compare: 1.4.0 natural-compare: 1.4.0
@ -5088,14 +5088,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': '@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.34.0 '@typescript-eslint/scope-manager': 8.34.0
'@typescript-eslint/types': 8.34.0 '@typescript-eslint/types': 8.34.0
'@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.34.0 '@typescript-eslint/visitor-keys': 8.34.0
debug: 4.4.1 debug: 4.4.1
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -5118,12 +5118,12 @@ snapshots:
dependencies: dependencies:
typescript: 5.8.3 typescript: 5.8.3
'@typescript-eslint/type-utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': '@typescript-eslint/type-utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
debug: 4.4.1 debug: 4.4.1
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
ts-api-utils: 2.1.0(typescript@5.8.3) ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
@ -5147,13 +5147,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': '@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.34.0 '@typescript-eslint/scope-manager': 8.34.0
'@typescript-eslint/types': 8.34.0 '@typescript-eslint/types': 8.34.0
'@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -5734,19 +5734,19 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@15.3.3(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): eslint-config-next@15.3.3(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.3.3 '@next/eslint-plugin-next': 15.3.3
'@rushstack/eslint-patch': 1.11.0 '@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-react: 7.37.5(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-react: 7.37.5(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-react-hooks: 5.2.0(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.2.0(eslint@9.29.0(jiti@2.4.2))
optionalDependencies: optionalDependencies:
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
@ -5754,9 +5754,9 @@ snapshots:
- eslint-plugin-import-x - eslint-plugin-import-x
- supports-color - supports-color
eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)): eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
dependencies: dependencies:
@ -5766,33 +5766,33 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)): eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.4.1 debug: 4.4.1
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
get-tsconfig: 4.10.1 get-tsconfig: 4.10.1
is-bun-module: 2.0.0 is-bun-module: 2.0.0
stable-hash: 0.0.5 stable-hash: 0.0.5
tinyglobby: 0.2.14 tinyglobby: 0.2.14
unrs-resolver: 1.9.0 unrs-resolver: 1.9.0
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.29.0(jiti@2.4.2))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)): eslint-module-utils@2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.29.0(jiti@2.4.2))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)): eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
@ -5801,9 +5801,9 @@ snapshots:
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.29.0(jiti@2.4.2))
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -5815,13 +5815,13 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@2.4.2)): eslint-plugin-jsx-a11y@6.10.2(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
aria-query: 5.3.2 aria-query: 5.3.2
array-includes: 3.1.9 array-includes: 3.1.9
@ -5831,7 +5831,7 @@ snapshots:
axobject-query: 4.1.0 axobject-query: 4.1.0
damerau-levenshtein: 1.0.8 damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2 emoji-regex: 9.2.2
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
language-tags: 1.0.9 language-tags: 1.0.9
@ -5840,21 +5840,21 @@ snapshots:
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1 string.prototype.includes: 2.0.1
eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.28.0(jiti@2.4.2)))(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3): eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@2.4.2)))(eslint@9.29.0(jiti@2.4.2))(prettier@3.5.3):
dependencies: dependencies:
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
prettier: 3.5.3 prettier: 3.5.3
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
synckit: 0.11.8 synckit: 0.11.8
optionalDependencies: optionalDependencies:
'@types/eslint': 9.6.1 '@types/eslint': 9.6.1
eslint-config-prettier: 10.1.5(eslint@9.28.0(jiti@2.4.2)) eslint-config-prettier: 10.1.5(eslint@9.29.0(jiti@2.4.2))
eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@2.4.2)): eslint-plugin-react-hooks@5.2.0(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@2.4.2)): eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@2.4.2)):
dependencies: dependencies:
array-includes: 3.1.9 array-includes: 3.1.9
array.prototype.findlast: 1.2.5 array.prototype.findlast: 1.2.5
@ -5862,7 +5862,7 @@ snapshots:
array.prototype.tosorted: 1.1.4 array.prototype.tosorted: 1.1.4
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.2.1 es-iterator-helpers: 1.2.1
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
estraverse: 5.3.0 estraverse: 5.3.0
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
@ -5890,15 +5890,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@4.2.1: {}
eslint@9.28.0(jiti@2.4.2): eslint@9.29.0(jiti@2.4.2):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.20.1 '@eslint/config-array': 0.20.1
'@eslint/config-helpers': 0.2.3 '@eslint/config-helpers': 0.2.3
'@eslint/core': 0.14.0 '@eslint/core': 0.14.0
'@eslint/eslintrc': 3.3.1 '@eslint/eslintrc': 3.3.1
'@eslint/js': 9.28.0 '@eslint/js': 9.29.0
'@eslint/plugin-kit': 0.3.2 '@eslint/plugin-kit': 0.3.2
'@humanfs/node': 0.16.6 '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
@ -7128,12 +7128,12 @@ snapshots:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10 reflect.getprototypeof: 1.0.10
typescript-eslint@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): typescript-eslint@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.28.0(jiti@2.4.2) eslint: 9.29.0(jiti@2.4.2)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color

View File

@ -1,12 +1,14 @@
/** /* Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation.
* Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful * This is especially useful for Docker builds.
* for Docker builds.
*/ */
import './src/env.js'; import './src/env.js';
import { withSentryConfig } from '@sentry/nextjs'; import { withSentryConfig } from '@sentry/nextjs';
import { withPlausibleProxy } from 'next-plausible';
/** @type {import("next").NextConfig} */ /** @type {import("next").NextConfig} */
const config = { const config = withPlausibleProxy({
customDomain: 'https://plausible.gbrown.org',
})({
output: 'standalone', output: 'standalone',
images: { images: {
remotePatterns: [ remotePatterns: [
@ -28,22 +30,29 @@ const config = {
eslint: { eslint: {
ignoreDuringBuilds: true, ignoreDuringBuilds: true,
}, },
//turbopack: { turbopack: {
//rules: { rules: {
//'*.svg': { '*.svg': {
//loaders: ['@svgr/webpack'], loaders: [
//as: '*.js', {
//}, loader: '@svgr/webpack',
//}, options: {
//}, icon: true,
}; },
},
],
as: '*.js',
},
},
},
});
const sentryConfig = { const sentryConfig = {
// For all available options, see: // For all available options, see:
// https://www.npmjs.com/package/@sentry/webpack-plugin#options // https://www.npmjs.com/package/@sentry/webpack-plugin#options
org: 'gib', org: 'gib',
project: 't3-supabase-template', project: 't3-supabase-template',
sentryUrl: process.env.SENTRY_URL, sentryUrl: process.env.NEXT_PUBLIC_SENTRY_URL,
authToken: process.env.SENTRY_AUTH_TOKEN, authToken: process.env.SENTRY_AUTH_TOKEN,
// Only print logs for uploading source maps in CI // Only print logs for uploading source maps in CI
silent: !process.env.CI, silent: !process.env.CI,

View File

@ -15,15 +15,14 @@ import { toast } from 'sonner';
import { HistoryDrawer } from '@/components/status'; import { HistoryDrawer } from '@/components/status';
import type { Profile } from '@/utils/supabase'; import type { Profile } from '@/utils/supabase';
import type { RealtimeChannel } from '@supabase/supabase-js'; import type { RealtimeChannel } from '@supabase/supabase-js';
import { makeConditionalClassName } from '@/lib/utils';
type TechTableProps = { type TechTableProps = {
initialStatuses: UserWithStatus[]; initialStatuses: UserWithStatus[];
className?: string;
}; };
export const TechTable = ({ export const TechTable = ({
initialStatuses = [], initialStatuses = [],
className = 'w-full max-w-7xl mx-auto px-4',
}: TechTableProps) => { }: TechTableProps) => {
const { isAuthenticated } = useAuth(); const { isAuthenticated } = useAuth();
const { tvMode } = useTVMode(); const { tvMode } = useTVMode();
@ -116,15 +115,8 @@ export const TechTable = ({
useEffect(() => { useEffect(() => {
if (!isAuthenticated) return; if (!isAuthenticated) return;
//if (channelRef.current) {
//const supabase = createClient();
//supabase.removeChannel(channelRef.current).catch((error) => {
//console.error(`Error unsubscribing from status updates: ${error}`);
//});
//channelRef.current = null;
//}
const supabase = createClient();
const supabase = createClient();
const channel = supabase const channel = supabase
.channel('status_updates', { .channel('status_updates', {
config: { broadcast: { self: true }} config: { broadcast: { self: true }}
@ -197,34 +189,54 @@ export const TechTable = ({
); );
} }
const containerClassName = makeConditionalClassName({
context: tvMode,
defaultClassName: 'mx-auto',
on: 'lg:w-11/12 w-full mt-15',
off: 'w-5/6',
});
const thClassName = makeConditionalClassName({
context: tvMode,
defaultClassName: 'py-3 px-4 border font-semibold',
on: 'lg:text-6xl',
off: 'lg:text-5xl',
});
const tdClassName = makeConditionalClassName({
context: tvMode,
defaultClassName: 'py-3 px-4 border',
on: 'lg:text-5xl',
off: 'lg:text-4xl',
});
const tCheckboxClassName = `py-3 px-4 border`;
const checkBoxClassName = `lg:scale-200 cursor-pointer`;
return ( return (
<div className={className}> <div className={containerClassName}>
<table <table className='w-full text-center rounded-md'>
className={`w-full text-center border-collapse \
${tvMode ? 'text-4xl lg:text-5xl' : 'text-base lg:text-lg'}`}
>
<thead> <thead>
<tr className='bg-muted'> <tr className='bg-muted'>
{!tvMode && ( {!tvMode && (
<th className='py-3 px-3 border'> <th className={tCheckboxClassName}>
<input <input
type='checkbox' type='checkbox'
className='scale-125 cursor-pointer' className={checkBoxClassName}
checked={selectAll} checked={selectAll}
onChange={handleSelectAllChange} onChange={handleSelectAllChange}
/> />
</th> </th>
)} )}
<th className='py-3 px-4 border font-semibold'>Name</th> <th className={thClassName}>Name</th>
<th className='py-3 px-4 border font-semibold'> <th className={thClassName}>
<Drawer> <Drawer>
<DrawerTrigger className='hover:underline'> <DrawerTrigger
className='hover:text-foreground/60 cursor-pointer'
>
Status Status
</DrawerTrigger> </DrawerTrigger>
<HistoryDrawer /> <HistoryDrawer />
</Drawer> </Drawer>
</th> </th>
<th className='py-3 px-4 border font-semibold'>Updated At</th> <th className={thClassName}>Updated At</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -237,10 +249,10 @@ export const TechTable = ({
`} `}
> >
{!tvMode && ( {!tvMode && (
<td className='py-2 px-3 border'> <td className={tCheckboxClassName}>
<input <input
type='checkbox' type='checkbox'
className='scale-125 cursor-pointer' className={checkBoxClassName}
checked={selectedIds.includes(userWithStatus.user.id)} checked={selectedIds.includes(userWithStatus.user.id)}
onChange={() => onChange={() =>
handleCheckboxChange(userWithStatus.user.id) handleCheckboxChange(userWithStatus.user.id)
@ -248,13 +260,13 @@ export const TechTable = ({
/> />
</td> </td>
)} )}
<td className='py-3 px-4 border font-medium'> <td className={tdClassName}>
{userWithStatus.user.full_name ?? 'Unknown User'} {userWithStatus.user.full_name ?? 'Unknown User'}
</td> </td>
<td className='py-3 px-4 border'> <td className={tdClassName}>
<Drawer> <Drawer>
<DrawerTrigger <DrawerTrigger
className='text-left w-full p-2 rounded hover:bg-muted transition-colors' className='text-center w-full p-2 rounded-md hover:bg-muted transition-colors'
onClick={() => setSelectedHistoryUser(userWithStatus.user)} onClick={() => setSelectedHistoryUser(userWithStatus.user)}
> >
{userWithStatus.status} {userWithStatus.status}
@ -264,7 +276,7 @@ export const TechTable = ({
)} )}
</Drawer> </Drawer>
</td> </td>
<td className='py-3 px-4 border text-muted-foreground'> <td className={tdClassName}>
{formatTime(userWithStatus.created_at)} {formatTime(userWithStatus.created_at)}
</td> </td>
</tr> </tr>

View File

@ -4,3 +4,17 @@ import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) { export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs)); return twMerge(clsx(inputs));
} }
export const makeConditionalClassName = ({
context,
defaultClassName,
on = '',
off = '',
}: {
context: boolean;
defaultClassName: string;
on?: string;
off?: string;
}) => {
return defaultClassName + ' ' + (context ? on : off);
};