refactor: Begin cleaning up photo information

- Plus making apps follow the same design principles as notes and todo
This commit is contained in:
alexsparkes 2024-02-17 18:33:51 +00:00
parent 6b9ae07d8a
commit 8fc6b1bf1b
4 changed files with 242 additions and 230 deletions

View File

@ -69,7 +69,7 @@ dependencies:
devDependencies:
'@commitlint/cli':
specifier: ^18.6.1
version: 18.6.1(@types/node@20.11.17)(typescript@5.3.3)
version: 18.6.1(@types/node@20.11.19)(typescript@5.3.3)
'@commitlint/config-conventional':
specifier: ^18.6.2
version: 18.6.2
@ -111,7 +111,7 @@ devDependencies:
version: 6.1.0(stylelint@16.2.1)
vite:
specifier: 5.1.3
version: 5.1.3(@types/node@20.11.17)(sass@1.71.0)
version: 5.1.3(@types/node@20.11.19)(sass@1.71.0)
vite-plugin-progress:
specifier: ^0.0.7
version: 0.0.7(vite@5.1.3)
@ -210,7 +210,7 @@ packages:
dependencies:
'@babel/compat-data': 7.23.5
'@babel/helper-validator-option': 7.23.5
browserslist: 4.22.3
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
dev: true
@ -1454,7 +1454,7 @@ packages:
babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9)
babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9)
babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9)
core-js-compat: 3.35.1
core-js-compat: 3.36.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@ -1545,14 +1545,14 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
/@commitlint/cli@18.6.1(@types/node@20.11.17)(typescript@5.3.3):
/@commitlint/cli@18.6.1(@types/node@20.11.19)(typescript@5.3.3):
resolution: {integrity: sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==}
engines: {node: '>=v18'}
hasBin: true
dependencies:
'@commitlint/format': 18.6.1
'@commitlint/lint': 18.6.1
'@commitlint/load': 18.6.1(@types/node@20.11.17)(typescript@5.3.3)
'@commitlint/load': 18.6.1(@types/node@20.11.19)(typescript@5.3.3)
'@commitlint/read': 18.6.1
'@commitlint/types': 18.6.1
execa: 5.1.1
@ -1624,7 +1624,7 @@ packages:
'@commitlint/types': 18.6.1
dev: true
/@commitlint/load@18.6.1(@types/node@20.11.17)(typescript@5.3.3):
/@commitlint/load@18.6.1(@types/node@20.11.19)(typescript@5.3.3):
resolution: {integrity: sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==}
engines: {node: '>=v18'}
dependencies:
@ -1634,7 +1634,7 @@ packages:
'@commitlint/types': 18.6.1
chalk: 4.1.2
cosmiconfig: 8.3.6(typescript@5.3.3)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.17)(cosmiconfig@8.3.6)(typescript@5.3.3)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.19)(cosmiconfig@8.3.6)(typescript@5.3.3)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
@ -2187,8 +2187,8 @@ packages:
'@jridgewell/trace-mapping': 0.3.22
dev: true
/@jridgewell/resolve-uri@3.1.1:
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
/@jridgewell/resolve-uri@3.1.2:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
dev: true
@ -2204,7 +2204,7 @@ packages:
/@jridgewell/trace-mapping@0.3.22:
resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
@ -2424,104 +2424,104 @@ packages:
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
dev: false
/@rollup/rollup-android-arm-eabi@4.10.0:
resolution: {integrity: sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==}
/@rollup/rollup-android-arm-eabi@4.12.0:
resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm64@4.10.0:
resolution: {integrity: sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==}
/@rollup/rollup-android-arm64@4.12.0:
resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.10.0:
resolution: {integrity: sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==}
/@rollup/rollup-darwin-arm64@4.12.0:
resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.10.0:
resolution: {integrity: sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==}
/@rollup/rollup-darwin-x64@4.12.0:
resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.10.0:
resolution: {integrity: sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==}
/@rollup/rollup-linux-arm-gnueabihf@4.12.0:
resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.10.0:
resolution: {integrity: sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==}
/@rollup/rollup-linux-arm64-gnu@4.12.0:
resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.10.0:
resolution: {integrity: sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==}
/@rollup/rollup-linux-arm64-musl@4.12.0:
resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.10.0:
resolution: {integrity: sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==}
/@rollup/rollup-linux-riscv64-gnu@4.12.0:
resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.10.0:
resolution: {integrity: sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==}
/@rollup/rollup-linux-x64-gnu@4.12.0:
resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.10.0:
resolution: {integrity: sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==}
/@rollup/rollup-linux-x64-musl@4.12.0:
resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.10.0:
resolution: {integrity: sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==}
/@rollup/rollup-win32-arm64-msvc@4.12.0:
resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.10.0:
resolution: {integrity: sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==}
/@rollup/rollup-win32-ia32-msvc@4.12.0:
resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.10.0:
resolution: {integrity: sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==}
/@rollup/rollup-win32-x64-msvc@4.12.0:
resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==}
cpu: [x64]
os: [win32]
requiresBuild: true
@ -2770,8 +2770,8 @@ packages:
resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
dev: true
/@types/node@20.11.17:
resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==}
/@types/node@20.11.19:
resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==}
dependencies:
undici-types: 5.26.5
dev: true
@ -2790,11 +2790,11 @@ packages:
/@types/react-transition-group@4.4.10:
resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==}
dependencies:
'@types/react': 18.2.55
'@types/react': 18.2.56
dev: false
/@types/react@18.2.55:
resolution: {integrity: sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==}
/@types/react@18.2.56:
resolution: {integrity: sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==}
dependencies:
'@types/prop-types': 15.7.11
'@types/scheduler': 0.16.8
@ -2962,7 +2962,7 @@ packages:
vite: ^4 || ^5
dependencies:
'@swc/core': 1.4.1
vite: 5.1.3(@types/node@20.11.17)(sass@1.71.0)
vite: 5.1.3(@types/node@20.11.19)(sass@1.71.0)
transitivePeerDependencies:
- '@swc/helpers'
dev: true
@ -3080,7 +3080,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
get-intrinsic: 1.2.4
is-string: 1.0.7
dev: true
@ -3096,7 +3096,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-array-method-boxes-properly: 1.0.0
is-string: 1.0.7
dev: true
@ -3107,7 +3107,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
es-shim-unscopables: 1.0.2
dev: true
@ -3118,7 +3118,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-shim-unscopables: 1.0.2
dev: true
@ -3128,7 +3128,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-shim-unscopables: 1.0.2
dev: true
@ -3137,7 +3137,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
es-shim-unscopables: 1.0.2
dev: true
@ -3149,7 +3149,7 @@ packages:
array-buffer-byte-length: 1.0.1
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
get-intrinsic: 1.2.4
is-array-buffer: 3.0.4
@ -3220,7 +3220,7 @@ packages:
dependencies:
'@babel/core': 7.23.9
'@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9)
core-js-compat: 3.35.1
core-js-compat: 3.36.0
transitivePeerDependencies:
- supports-color
dev: true
@ -3297,15 +3297,15 @@ packages:
fill-range: 7.0.1
dev: true
/browserslist@4.22.3:
resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==}
/browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001587
electron-to-chromium: 1.4.667
electron-to-chromium: 1.4.673
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.22.3)
update-browserslist-db: 1.0.13(browserslist@4.23.0)
dev: true
/call-bind@1.0.7:
@ -3457,13 +3457,13 @@ packages:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
dev: true
/core-js-compat@3.35.1:
resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==}
/core-js-compat@3.36.0:
resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==}
dependencies:
browserslist: 4.22.3
browserslist: 4.23.0
dev: true
/cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.17)(cosmiconfig@8.3.6)(typescript@5.3.3):
/cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.19)(cosmiconfig@8.3.6)(typescript@5.3.3):
resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==}
engines: {node: '>=v16'}
peerDependencies:
@ -3471,7 +3471,7 @@ packages:
cosmiconfig: '>=8.2'
typescript: '>=4'
dependencies:
'@types/node': 20.11.17
'@types/node': 20.11.19
cosmiconfig: 8.3.6(typescript@5.3.3)
jiti: 1.21.0
typescript: 5.3.3
@ -3600,21 +3600,20 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
/define-data-property@1.1.3:
resolution: {integrity: sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg==}
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
get-intrinsic: 1.2.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
dev: true
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.3
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
dev: true
@ -3663,8 +3662,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
/electron-to-chromium@1.4.667:
resolution: {integrity: sha512-66L3pLlWhTNVUhnmSA5+qDM3fwnXsM6KAqE36e2w4KN0g6pkEtlT5bs41FQtQwVwKnfhNBXiWRLPs30HSxd7Kw==}
/electron-to-chromium@1.4.673:
resolution: {integrity: sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==}
dev: true
/embla-carousel-autoplay@8.0.0-rc22(embla-carousel@8.0.0-rc22):
@ -3715,14 +3714,16 @@ packages:
dependencies:
is-arrayish: 0.2.1
/es-abstract@1.22.3:
resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
/es-abstract@1.22.4:
resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==}
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.1
arraybuffer.prototype.slice: 1.0.3
available-typed-arrays: 1.0.6
call-bind: 1.0.7
es-define-property: 1.0.0
es-errors: 1.3.0
es-set-tostringtag: 2.0.2
es-to-primitive: 1.2.1
function.prototype.name: 1.1.6
@ -3776,14 +3777,14 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/es-iterator-helpers@1.0.16:
resolution: {integrity: sha512-CREG2A9Vq7bpDRnldhFcMKuKArvkZtsH6Y0DHOHVg49qhf+LD8uEdUM3OkOAICv0EziGtDEnQtqY2/mfBILpFw==}
/es-iterator-helpers@1.0.17:
resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==}
engines: {node: '>= 0.4'}
dependencies:
asynciterator.prototype: 1.0.0
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
es-set-tostringtag: 2.0.2
function-bind: 1.1.2
@ -4034,7 +4035,7 @@ packages:
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.16
es-iterator-helpers: 1.0.17
eslint: 8.56.0
hasown: 2.0.1
jsx-ast-utils: 3.3.5
@ -4063,7 +4064,7 @@ packages:
array.prototype.flatmap: 1.3.2
array.prototype.tosorted: 1.1.3
doctrine: 2.1.0
es-iterator-helpers: 1.0.16
es-iterator-helpers: 1.0.17
eslint: 8.56.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
@ -4357,7 +4358,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
functions-have-names: 1.2.3
dev: true
@ -5279,7 +5280,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/object.fromentries@2.0.7:
@ -5288,7 +5289,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/object.groupby@1.0.2:
@ -5297,7 +5298,7 @@ packages:
array.prototype.filter: 1.0.3
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
dev: true
@ -5305,7 +5306,7 @@ packages:
resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
dependencies:
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/object.values@1.1.7:
@ -5314,7 +5315,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/once@1.4.0:
@ -5662,7 +5663,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
es-errors: 1.3.0
get-intrinsic: 1.2.4
globalthis: 1.0.3
@ -5781,26 +5782,26 @@ packages:
glob: 10.3.10
dev: true
/rollup@4.10.0:
resolution: {integrity: sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==}
/rollup@4.12.0:
resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.10.0
'@rollup/rollup-android-arm64': 4.10.0
'@rollup/rollup-darwin-arm64': 4.10.0
'@rollup/rollup-darwin-x64': 4.10.0
'@rollup/rollup-linux-arm-gnueabihf': 4.10.0
'@rollup/rollup-linux-arm64-gnu': 4.10.0
'@rollup/rollup-linux-arm64-musl': 4.10.0
'@rollup/rollup-linux-riscv64-gnu': 4.10.0
'@rollup/rollup-linux-x64-gnu': 4.10.0
'@rollup/rollup-linux-x64-musl': 4.10.0
'@rollup/rollup-win32-arm64-msvc': 4.10.0
'@rollup/rollup-win32-ia32-msvc': 4.10.0
'@rollup/rollup-win32-x64-msvc': 4.10.0
'@rollup/rollup-android-arm-eabi': 4.12.0
'@rollup/rollup-android-arm64': 4.12.0
'@rollup/rollup-darwin-arm64': 4.12.0
'@rollup/rollup-darwin-x64': 4.12.0
'@rollup/rollup-linux-arm-gnueabihf': 4.12.0
'@rollup/rollup-linux-arm64-gnu': 4.12.0
'@rollup/rollup-linux-arm64-musl': 4.12.0
'@rollup/rollup-linux-riscv64-gnu': 4.12.0
'@rollup/rollup-linux-x64-gnu': 4.12.0
'@rollup/rollup-linux-x64-musl': 4.12.0
'@rollup/rollup-win32-arm64-msvc': 4.12.0
'@rollup/rollup-win32-ia32-msvc': 4.12.0
'@rollup/rollup-win32-x64-msvc': 4.12.0
fsevents: 2.3.3
dev: true
@ -5871,7 +5872,7 @@ packages:
resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.3
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
@ -5883,7 +5884,7 @@ packages:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.3
define-data-property: 1.1.4
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
dev: true
@ -5950,14 +5951,14 @@ packages:
spdx-license-ids: 3.0.17
dev: true
/spdx-exceptions@2.4.0:
resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==}
/spdx-exceptions@2.5.0:
resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
dev: true
/spdx-expression-parse@3.0.1:
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
dependencies:
spdx-exceptions: 2.4.0
spdx-exceptions: 2.5.0
spdx-license-ids: 3.0.17
dev: true
@ -6003,7 +6004,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
get-intrinsic: 1.2.4
has-symbols: 1.0.3
internal-slot: 1.0.7
@ -6018,7 +6019,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/string.prototype.trimend@1.0.7:
@ -6026,7 +6027,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/string.prototype.trimstart@1.0.7:
@ -6034,7 +6035,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-abstract: 1.22.4
dev: true
/string_decoder@1.3.0:
@ -6402,13 +6403,13 @@ packages:
engines: {node: '>=4'}
dev: true
/update-browserslist-db@1.0.13(browserslist@4.22.3):
/update-browserslist-db@1.0.13(browserslist@4.23.0):
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.22.3
browserslist: 4.23.0
escalade: 3.1.2
picocolors: 1.0.0
dev: true
@ -6439,10 +6440,10 @@ packages:
picocolors: 1.0.0
progress: 2.0.3
rd: 2.0.1
vite: 5.1.3(@types/node@20.11.17)(sass@1.71.0)
vite: 5.1.3(@types/node@20.11.19)(sass@1.71.0)
dev: true
/vite@5.1.3(@types/node@20.11.17)(sass@1.71.0):
/vite@5.1.3(@types/node@20.11.19)(sass@1.71.0):
resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6470,10 +6471,10 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.11.17
'@types/node': 20.11.19
esbuild: 0.19.12
postcss: 8.4.35
rollup: 4.10.0
rollup: 4.12.0
sass: 1.71.0
optionalDependencies:
fsevents: 2.3.3

View File

@ -1,6 +1,6 @@
import variables from 'modules/variables';
import { PureComponent } from 'react';
import { MdUpdate, MdOutlineExtensionOff, MdCode } from 'react-icons/md';
import { MdUpdate, MdOutlineExtensionOff, MdSendTimeExtension } from 'react-icons/md';
import { toast } from 'react-toastify';
import Modal from 'react-modal';
@ -78,7 +78,7 @@ export default class Added extends PureComponent {
type="settings"
onClick={() => document.getElementById('file-input').click()}
ref={this.customDnd}
icon={<MdCode />}
icon={<MdSendTimeExtension />}
label={variables.getMessage('modals.main.addons.sideload.title')}
/>
);
@ -251,7 +251,7 @@ export default class Added extends PureComponent {
<Button
type="settings"
onClick={() => document.getElementById('file-input').click()}
icon={<MdCode />}
icon={<MdSendTimeExtension />}
label={variables.getMessage('modals.main.addons.sideload.title')}
/>
</div>

View File

@ -145,6 +145,121 @@ function PhotoInformation({ info, url, api }) {
);
};
const InformationItems = () => {
return (
<div className="extra-content">
{info.location && info.location !== 'N/A' ? (
<div className="row" title={variables.getMessage('widgets.background.location')}>
<MdLocationOn />
<span id="infoLocation">{info.location}</span>
</div>
) : null}
{info.camera && info.camera !== 'N/A' ? (
<div className="row" title={variables.getMessage('widgets.background.camera')}>
<MdPhotoCamera />
<span id="infoCamera">{info.camera}</span>
</div>
) : null}
<div className="row" title={variables.getMessage('widgets.background.resolution')}>
<Resolution />
<span id="infoResolution">
{width}x{height}
</span>
</div>
{info.category && (
<div className="row" title={variables.getMessage('widgets.background.category')}>
<Category />
<span id="infoCategory">{info.category[0].toUpperCase() + info.category.slice(1)}</span>
</div>
)}
{api && (
<div className="row" title={variables.getMessage('widgets.background.source')}>
<Source />
<span id="infoSource">
{info.photoURL ? (
<a
href={info.photoURL + '?utm_source=mue'}
target="_blank"
rel="noopener noreferrer"
className="link"
>
{api.charAt(0).toUpperCase() + api.slice(1)}
</a>
) : (
<a href={info.url} target="_blank" rel="noopener noreferrer" className="link">
{api.charAt(0).toUpperCase() + api.slice(1)}
</a>
)}
</span>
</div>
)}
</div>
);
};
const ActionButtons = () => {
return (
<div className="buttons">
{!info.offline && (
<Tooltip title={variables.getMessage('widgets.quote.share')} key="share" placement="top">
<Share onClick={() => openShareModal(true)} />
</Tooltip>
)}
<Tooltip
title={variables.getMessage('widgets.quote.favourite')}
key="favourite"
placement="top"
>
<Favourite
pun={info.pun}
offline={info.offline}
credit={info.credit}
photoURL={info.url}
/>
</Tooltip>
{!info.offline && (
<Tooltip
title={variables.getMessage('widgets.background.download')}
key="download"
placement="top"
>
<Download onClick={() => downloadImage(info)} />
</Tooltip>
)}
{info.pun && (
<Tooltip
title={variables.getMessage('widgets.background.exclude')}
key="exclude"
placement="top"
>
<VisibilityOff onClick={() => openExcludeModal(true)} />
</Tooltip>
)}
</div>
);
};
const UnsplashStats = () => {
return (
<div className="unsplashStats">
<div title={variables.getMessage('widgets.background.views')}>
<Views />
<span>{info.views.toLocaleString()}</span>
</div>
<div title={variables.getMessage('widgets.background.downloads')}>
<Download />
<span>{info.downloads.toLocaleString()}</span>
</div>
{!!info.likes ? (
<div title={variables.getMessage('widgets.background.likes')}>
<MdFavourite />
<span>{info.likes.toLocaleString()}</span>
</div>
) : null}
</div>
);
};
let photoMapClassList = 'map-concept';
if (photoMap() !== null) {
photoMapClassList += ' photoMap';
@ -256,24 +371,7 @@ function PhotoInformation({ info, url, api }) {
{photo} {credit}
</span>
</div>
{info.views && info.downloads !== null ? (
<div className="unsplashStats">
<div title={variables.getMessage('widgets.background.views')}>
<Views />
<span>{info.views.toLocaleString()}</span>
</div>
<div title={variables.getMessage('widgets.background.downloads')}>
<Download />
<span>{info.downloads.toLocaleString()}</span>
</div>
{!!info.likes ? (
<div title={variables.getMessage('widgets.background.likes')}>
<MdFavourite />
<span>{info.likes.toLocaleString()}</span>
</div>
) : null}
</div>
) : null}
{info.views && info.downloads !== null ? <UnsplashStats /> : null}
</div>
{showExtraInfo || other ? (
@ -281,101 +379,8 @@ function PhotoInformation({ info, url, api }) {
<span className="subtitle">
{variables.getMessage('widgets.background.information')}
</span>
<div className="extra-content">
{info.location && info.location !== 'N/A' ? (
<div className="row" title={variables.getMessage('widgets.background.location')}>
<MdLocationOn />
<span id="infoLocation">{info.location}</span>
</div>
) : null}
{info.camera && info.camera !== 'N/A' ? (
<div className="row" title={variables.getMessage('widgets.background.camera')}>
<MdPhotoCamera />
<span id="infoCamera">{info.camera}</span>
</div>
) : null}
<div className="row" title={variables.getMessage('widgets.background.resolution')}>
<Resolution />
<span id="infoResolution">
{width}x{height}
</span>
</div>
{info.category && (
<div className="row" title={variables.getMessage('widgets.background.category')}>
<Category />
<span id="infoCategory">
{info.category[0].toUpperCase() + info.category.slice(1)}
</span>
</div>
)}
{api && (
<div className="row" title={variables.getMessage('widgets.background.source')}>
<Source />
<span id="infoSource">
{info.photoURL ? (
<a
href={info.photoURL + '?utm_source=mue'}
target="_blank"
rel="noopener noreferrer"
className="link"
>
{api.charAt(0).toUpperCase() + api.slice(1)}
</a>
) : (
<a
href={info.url}
target="_blank"
rel="noopener noreferrer"
className="link"
>
{api.charAt(0).toUpperCase() + api.slice(1)}
</a>
)}
</span>
</div>
)}
</div>
<div className="buttons">
{!info.offline && (
<Tooltip
title={variables.getMessage('widgets.quote.share')}
key="share"
placement="top"
>
<Share onClick={() => openShareModal(true)} />
</Tooltip>
)}
<Tooltip
title={variables.getMessage('widgets.quote.favourite')}
key="favourite"
placement="top"
>
<Favourite
pun={info.pun}
offline={info.offline}
credit={info.credit}
photoURL={info.url}
/>
</Tooltip>
{!info.offline && (
<Tooltip
title={variables.getMessage('widgets.background.download')}
key="download"
placement="top"
>
<Download onClick={() => downloadImage(info)} />
</Tooltip>
)}
{info.pun && (
<Tooltip
title={variables.getMessage('widgets.background.exclude')}
key="exclude"
placement="top"
>
<VisibilityOff onClick={() => openExcludeModal(true)} />
</Tooltip>
)}
</div>
<InformationItems />
<ActionButtons />
</>
) : null}
</div>

View File

@ -2,7 +2,7 @@
import variables from 'modules/variables';
import { PureComponent, memo, useState } from 'react';
import { MdLinkOff, MdOutlineApps } from 'react-icons/md';
import { MdPlaylistRemove, MdOutlineApps } from 'react-icons/md';
import Tooltip from 'components/helpers/tooltip/Tooltip';
import { shift, useFloating } from '@floating-ui/react-dom';
import EventBus from 'modules/helpers/eventbus';
@ -78,6 +78,12 @@ class Apps extends PureComponent {
left: this.props.xPosition ?? '',
}}
>
<div className="flexTodo">
<div className="topBarNotes" style={{ display: 'flex' }}>
<MdOutlineApps />
<span>{variables.getMessage('widgets.navbar.apps.title')}</span>
</div>
</div>
{appsInfo.length > 0 ? (
<div className="appsShortcutContainer">
{appsInfo.map((info, i) => (
@ -103,9 +109,9 @@ class Apps extends PureComponent {
))}
</div>
) : (
<div className="noAppsContainer">
<div className="todosEmpty">
<div className="emptyNewMessage">
<MdLinkOff />
<MdPlaylistRemove />
<span className="title">
{variables.language.getMessage(
variables.languagecode,