Compare commits

...

465 commits

Author SHA1 Message Date
Ayo
9264207406 feat(yolk): rename service in docker-file
Some checks failed
ci / ci (push) Has been cancelled
build & push docker container / docker (push) Has been cancelled
2025-08-08 22:11:14 +02:00
Ayo
4babfe9c46 feat(yolk): use redis in docker-compose 2025-08-08 22:08:05 +02:00
Ayo
fe3f416f54 chore: add TODO 2025-08-08 21:54:57 +02:00
Ayo
69506f7d99 Merge branch 'main' of github.com:ayoayco/elk 2025-08-08 21:33:38 +02:00
renovate[bot]
78fd25ac10
chore(deps): update devdependencies (#3344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-05 12:51:54 +01:00
renovate[bot]
7fc8aa7bc2
chore(deps): update dependency @antfu/eslint-config to v5 (#3345)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 08:20:28 +01:00
Ayo
f8a702704f Merge branch 'main' of github.com:ayoayco/elk 2025-07-30 15:45:54 +02:00
nove-b
da26c38e59
fix(ui): Asterisk pairs are removed in code block (#3326)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-07-29 08:20:09 +00:00
Simon Ramsay
e8e2192e75
feat: pass origin as website when loging into server (#3299) 2025-07-29 00:02:18 +00:00
Ayo
2d6ba0cab5 feat(yolk): disable singServerInstance 2025-07-28 14:24:47 +02:00
Ayo
1db09a2a41 feat(yolk): change config to single server social.ayco.io 2025-07-28 13:40:22 +02:00
Ayo
7f733512a2 chore(yolk): remove --prod on Dockerfile deps installation 2025-07-28 13:25:01 +02:00
Ayo Ayco
31364c1b63
fix: error accessing thumbnail when instance is not defined (#3342) 2025-07-28 10:35:11 +00:00
Ayo
e170e22621 Merge branch 'dev' of github.com:ayoayco/elk 2025-07-28 12:02:11 +02:00
Ayo
078ca947aa Merge branch 'main' of github.com:elk-zone/elk into dev 2025-07-28 11:57:00 +02:00
Ayo
a57ce2db7b fix: error accessing thumbnail when instance is not defined 2025-07-28 11:56:38 +02:00
TAKAHASHI Shuuji
317929504e
Merge pull request #3340
chore(deps): update dependency nuxt-component-meta to v0.13.0
2025-07-28 16:57:35 +09:00
TAKAHASHI Shuuji
3ef80d56ef
Merge pull request #3341
fix(deps): update dependency browser-fs-access to ^0.38.0
2025-07-28 15:11:29 +09:00
renovate[bot]
cfb68319fe
fix(deps): update dependency browser-fs-access to ^0.38.0 2025-07-28 00:47:37 +00:00
renovate[bot]
f3d1ac9fca
chore(deps): update dependency nuxt-component-meta to v0.13.0 2025-07-28 00:47:10 +00:00
Ayo
5b073ee32a chore: skip dev dependencies on prod Dockerfile 2025-07-27 21:23:13 +02:00
Ayo
ebf11b5d57 style(yolk): normal nav title color 2025-07-27 18:39:31 +02:00
Ayo
2780036983 feat(yolk): replace client_name 2025-07-27 18:39:04 +02:00
Ayo
f202edd5fd feat(yolk): replace icons & logo 2025-07-27 18:38:45 +02:00
Ayo
a876d81f51 chore(yolk): add background to README 2025-07-27 10:52:36 +02:00
Ayo
e09e4d5b4d feat(yolk): change app name & logo 2025-07-27 10:50:27 +02:00
renovate[bot]
b8144db9ac
chore(deps): update lint (#3337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-07-27 04:38:35 +00:00
renovate[bot]
b320b37e52
fix(deps): update dependency form-data to v4.0.4 [security] (#3338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-22 08:27:17 +02:00
renovate[bot]
167f6d78b4
chore(deps): update devdependencies (#3323)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-21 18:23:05 +02:00
renovate[bot]
379ab78db3
chore(deps): update dependency unstorage to ^1.16.1 (#3336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-21 09:52:22 +02:00
Florens Verschelde
3adcce4e36
chore: fix eslint warning for as prop (#3332) 2025-07-19 17:00:05 +00:00
nove-b
1d128f56f9
fix(ui): Publish button for threaded posts allows multiple click (#3333) 2025-07-18 09:19:28 +00:00
Florens Verschelde
190be77043
fix(ui): increase target size of back button (#3325) 2025-07-07 22:47:25 +00:00
renovate[bot]
a51f8f172a
chore(deps): update dependency nuxt-component-meta to v0.12.1 (#3324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-07 10:19:56 +01:00
Clovis
8b6f15a214
feat: do not use language detection features on low end devices (#3317)
Co-authored-by: admin <admin@Sonar.lan>
2025-07-02 15:32:12 +00:00
renovate[bot]
dd2148095a
chore(deps): update devdependencies (#3321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-01 21:39:21 +01:00
renovate[bot]
4f5648f151
chore(deps): update dependency nuxt-component-meta to v0.12.0 (#3322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-30 10:39:11 +01:00
nove-b
548183e14a
fix(profile): incorrect "pinned post" label shown on other account (#3320) 2025-06-29 15:28:36 +00:00
renovate[bot]
e12b1d2b6c
chore(deps): update devdependencies (#3312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-23 10:17:09 +01:00
renovate[bot]
f4567dcacc
chore(deps): update dependency vitest to v3.2.4 (#3319)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-23 09:50:14 +01:00
Thomas Steiner
d3bffd1da2
feat: add support for the Language Detector API (#3316) 2025-06-21 11:17:24 +00:00
Thomas Steiner
d22579fd89
feat: add support for the Translation API (#3314) 2025-06-21 11:15:56 +00:00
fratorgano
73f6790d01
fix: Proposal to use the "moon" icon for unlisted posts (#3313) 2025-06-16 16:31:49 +00:00
renovate[bot]
b669514243
chore(deps): update dependency vitest to v3.2.3 (#3311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-16 08:42:27 +01:00
renovate[bot]
df9554e7ae
chore(deps): update dependency vitest to v3.2.2 (#3308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 08:41:58 +00:00
renovate[bot]
1d485c91b1
chore(deps): update dependency @unocss/eslint-config to ^66.1.4 (#3307)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-09 10:36:07 +02:00
renovate[bot]
a5ec0cbd3f
chore(deps): update devdependencies (#3305)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-04 14:49:13 +00:00
renovate[bot]
5f55a5928a
chore(deps): update dependency vitest to v3.1.4 (#3304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-02 00:40:17 +00:00
Joaquín Sánchez
220189abd8
feat(i18n): include missing Spanish translation entries (#3300) 2025-05-21 22:31:55 +00:00
Daniel Roe
a3fbc056a9
refactor: migrate to nuxt compatibilityVersion: 4 (#3298) 2025-05-20 14:05:01 +00:00
renovate[bot]
46e4433e1c
chore(deps): update devdependencies (#3297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 04:48:14 +00:00
renovate[bot]
f9feb4e8e4
chore(deps): update lint (#3296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 03:52:06 +00:00
Darek
d31e353d0d
docs: Add mastodon.com.pl server to readme (#3289) 2025-05-17 01:12:26 +00:00
Xabi
4340472873
feat(i18n): update eu-ES.json (#3294) 2025-05-16 05:19:59 +00:00
renovate[bot]
9cf88c8d38
chore(deps): update dependency vitest to v3.1.3 (#3292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-12 10:27:32 +01:00
renovate[bot]
fc3dce6600
chore(deps): update dependency @antfu/eslint-config to ^4.13.0 (#3293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-12 09:46:17 +01:00
iamdtms
b78417b4de
feat(i18n): update hu-HU.json (#3285)
Co-authored-by: Tamas <iamtamasdohany@gmail.com>
2025-05-05 14:29:47 +00:00
renovate[bot]
b62006228f
chore(deps): update dependency eslint to ^9.26.0 (#3286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-05 09:38:48 +01:00
renovate[bot]
1fbea88e58
chore(deps): update dependency vitest to v3.1.2 (#3287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-05 09:08:35 +01:00
Francesco
2d86894d9f
feat(i18n): Update it-IT locale (#3281) 2025-05-02 05:03:30 +00:00
Duy
ad60711ee3
feat(i18n): Update vi-VN.json (#3282) 2025-05-02 05:02:43 +00:00
renovate[bot]
889de794c3
chore(deps): update devdependencies (#3280)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 10:46:20 +01:00
renovate[bot]
920d3f3327
chore(deps): update all non-major dependencies (#3279)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 08:33:53 +00:00
ayo
f6c34e9120
feat: show server info on aside when not signed in (#3274) 2025-04-28 08:32:56 +00:00
ayo
81675930eb
fix: fetch for followed tags needs authorized session (#3277) 2025-04-28 08:32:05 +00:00
renovate[bot]
ec594410e4
chore(deps): update dependency eslint to ^9.25.1 (#3278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 09:25:58 +01:00
Emanuel Pina
8c6c03a9a2
feat(i18n): Update pt-PT translation (#3275) 2025-04-28 05:35:33 +00:00
ayo
b82e85585c
feat: show followed hashtag badge (#3273) 2025-04-26 12:53:54 +00:00
ayo
b0f301843b
feat: search for following when viewing accounts in a list (#3272) 2025-04-26 12:46:56 +00:00
renovate[bot]
c3b3f0fc4f
chore(deps): update dependency eslint to ^9.25.0 (#3269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-21 10:27:14 +01:00
renovate[bot]
8ba1f7f1d0
chore(deps): update actions/setup-node action to v4.4.0 (#3268)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-21 10:25:41 +01:00
Duy
19457573ed
feat(i18n): update vi-VN.json (#3267) 2025-04-20 08:43:49 +00:00
iamdtms
218c85c89e
feat(i18n): update hu-HU.json (#3261)
Co-authored-by: Tamas <iamtamasdohany@gmail.com>
2025-04-14 15:36:50 +00:00
renovate[bot]
4968fac2a9
chore(deps): update dependency @antfu/eslint-config to ^4.12.0 (#3263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-14 07:13:52 +00:00
renovate[bot]
30eb3e9e5c
chore(deps): update devdependencies (#3262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-14 06:48:40 +00:00
renovate[bot]
27f543a20d
chore(deps): update devdependencies (#3258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 07:53:06 -07:00
renovate[bot]
d73fcf27db
chore(deps): update dependency eslint to ^9.24.0 (#3259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 05:51:30 -07:00
iamdtms
0a5c2e1598
feat(i18n): update hu-HU.json (#3257) 2025-04-06 16:05:52 +00:00
Xabi
ab9345b6a8
feat(i18n): update eu-ES.json (#3255) 2025-04-02 08:25:42 +00:00
renovate[bot]
cd9af5da87
chore(deps): update dependency @antfu/ni to v24 (#3253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 06:35:10 +00:00
renovate[bot]
398a792245
chore(deps): update lint (#3252)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 05:08:05 +00:00
renovate[bot]
81b1fb2d0c
chore(deps): update dependency @unlazy/nuxt to ^0.12.4 (#3250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 03:44:23 +00:00
renovate[bot]
ddcce77dc1
chore(deps): update dependency nuxt-component-meta to v0.10.1 (#3251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 03:44:03 +00:00
haayman
d9c4cdb2f1
feat: Update nl-NL.json uppercase key ALT (#3249) 2025-03-27 02:07:12 +00:00
haayman
46deba2c14
feat: Update nl-NL.json (#3248) 2025-03-26 04:34:13 +00:00
@beer
5319c1c031
chore: use navigator.userAgent instead of navigator.platform (#3247) 2025-03-25 13:59:10 +00:00
renovate[bot]
40fb0b70ec
fix(deps): update dependency prosemirror-highlight to ^0.13.0 (#3206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 03:05:55 +00:00
renovate[bot]
149208300d
chore(deps): update devdependencies (#3245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 03:04:35 +00:00
haayman
114e49f4bb
feat: Update nl-NL.json (#3246) 2025-03-24 23:27:33 +00:00
renovate[bot]
bf131da26e
chore(deps): update dependency vitest to v3.0.9 (#3244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 07:37:56 +00:00
patak
ea46a5c0c2
chore: pause codeflow (#3242) 2025-03-21 16:18:07 +00:00
TAKAHASHI Shuuji
e20815b84c
fix: make notification timestamp gray and use <time> tag (#3223) 2025-03-20 17:44:25 +00:00
renovate[bot]
2d4a1cfef1
chore(deps): update dependency nuxt to v3.16.0 [security] (#3239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2025-03-20 17:42:21 +00:00
renovate[bot]
02b9b5cbf3
chore(deps): update all non-major dependencies (#3236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 04:28:47 +00:00
renovate[bot]
1679c0dcc4
chore(deps): update lint (#3237)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 04:15:46 +00:00
Daniel Roe
1bf113a960
fix: move to mocked-exports rather than implicit unenv dep (#3232) 2025-03-14 05:07:11 +00:00
Francesco
5623f87607
feat(i18n): Update it-IT locale (#3233) 2025-03-11 05:50:12 +00:00
renovate[bot]
96e6c2a730
chore(deps): update pnpm to v9.15.8 (#3231)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 01:26:41 +00:00
renovate[bot]
b26a9dfcf9
chore(deps): update dependency vitest to v3.0.8 (#3230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 01:25:21 +00:00
Emanuel Pina
37e6a84ba5
feat(i18n): Update pt-PT translation (#3229) 2025-03-07 04:55:23 +00:00
TAKAHASHI Shuuji
538064589d
ci: refer .npmrc to ensure using consistent node version (#3228) 2025-03-06 16:18:29 +00:00
@beer
54265dab29
chore: bump node version (#3227) 2025-03-06 14:34:45 +00:00
Xabi
91de331184
feat(i18n): update eu-ES.json (#3226) 2025-03-04 14:52:44 +00:00
TAKAHASHI Shuuji
979c2fae29
chore: adjust unmute video setting wording (#3225) 2025-03-04 13:50:37 +00:00
TAKAHASHI Shuuji
4422bf6286
fix: handle v2 instance property correctly for mastodon v4.2 or lower (#3224) 2025-03-04 04:20:29 +00:00
Xabi
3b075847b0
feat(i18n): update eu-ES.json (#3220) 2025-03-04 02:31:38 +00:00
renovate[bot]
616d08c1f9
chore(deps): update dependency @unocss/eslint-config to v66 (#3222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 17:11:43 +00:00
renovate[bot]
c640dc5d9e
chore(deps): update all non-major dependencies (#3211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 08:01:29 +00:00
renovate[bot]
099b88b3b1
chore(deps): update lint (#3221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 07:39:36 +00:00
TAKAHASHI Shuuji
d94b14ae53
feat: show notification timestamp (#3215) 2025-03-02 16:54:35 +00:00
TAKAHASHI Shuuji
41379627b5
feat: add new preference to unmute videos by default (#3218) 2025-03-02 14:55:00 +00:00
TAKAHASHI Shuuji
60b1d0224c
refactor: remove withDefaults macro and clean up reactive props destructuring (#3217) 2025-03-02 14:50:12 +00:00
TAKAHASHI Shuuji
7d9712c209
feat: adopt to /api/v2/instance to fetch app vapid_key (#3193) 2025-03-02 10:56:27 +00:00
renovate[bot]
74b7c9da2c
chore(deps): update dependency vitest to v3.0.7 (#3210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 20:44:45 +00:00
Duy
260290f011
feat(i18n): Update vi-VN locale (#3208) 2025-02-18 16:32:20 +00:00
renovate[bot]
dad766177f
chore(deps): update lint (#3205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 06:02:45 +00:00
✨ Q (it/its) ✨
55ad2438ed
feat(i18n): Welsh translation (#1236)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-09 06:35:02 +00:00
Xabi
1ebac1a450
feat(i18n): update eu-ES.json (#3198) 2025-02-09 05:50:16 +00:00
Ayo Ayco
fed57014af
feat(i18n): Update tl-PH locale (#3192) 2025-02-07 05:44:27 +00:00
Shinigami
9f4945bad8
fix: replace deprecated v1.instance (#3183) 2025-02-06 16:56:43 +00:00
TAKAHASHI Shuuji
4cbafc5f56
docs: fix broken link in CONTRIBUTING.md (#3191) 2025-02-05 13:35:36 +00:00
Francesco
c1b465069d
feat(i18n): Update it-IT locale (#3189)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-05 03:52:56 +00:00
TAKAHASHI Shuuji
9f9d71e050
fix: mute duration picker was missing (#3190) 2025-02-05 03:39:12 +00:00
renovate[bot]
f9977c7f84
chore(deps): update dependency vitest to v3.0.5 [security] (#3188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-04 20:44:26 +00:00
Shinigami
efe0a81787
fix: status preview card npe (#3184) 2025-02-04 14:07:29 +00:00
Shinigami
cfe81eef82
feat: add some i18n de (#3185) 2025-02-04 14:07:18 +00:00
TAKAHASHI Shuuji
06a282e890
chore: pin sha512 hash of pnpm@9.15.5 package to workaround npm registry key issue (#3187) 2025-02-04 13:22:56 +00:00
renovate[bot]
4da8cdd3b2
chore(deps): update dependency eslint to ^9.19.0 (#3176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 06:05:02 +00:00
renovate[bot]
9e52a97795
chore(deps): update all non-major dependencies (#3175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 06:01:25 +00:00
renovate[bot]
bfd05f74d7
chore(deps): update dependency @antfu/eslint-config to v4 (#3178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 05:59:04 +00:00
renovate[bot]
76bf8cf09b
fix(deps): update dependencies (#3177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 05:55:56 +00:00
renovate[bot]
d35a1fdbb2
chore(deps): update devdependencies (major) (#3180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 05:53:39 +00:00
renovate[bot]
44409a92f2
chore(deps): update dependency vitest to v3 (#3179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 05:52:57 +00:00
TAKAHASHI Shuuji
835ed51da6 chore: workaround for npm registry key change for Dockerfile 2025-02-03 12:48:39 +09:00
SerKo
12273eae1d
fix: update status ref to use status.value (#3174)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-02-03 03:03:02 +00:00
TAKAHASHI Shuuji
414adb5a71 chore: workaround for npm registry key change 2025-02-03 11:48:02 +09:00
Emanuel Pina
daf7b8b941
feat(i18n): Update pt-PT translation (#3173) 2025-02-02 07:45:22 +00:00
Xabi
307b04dfdd
feat(i18n): update eu-ES.json (#3170) 2025-02-01 14:20:10 +00:00
patak
8116d69b6c
chore: remove welcome screen (#3168) 2025-02-01 06:25:06 +00:00
Clovis
5c38c91aee
fix: account avatar should not be streched (#3165) 2025-01-31 06:47:52 +00:00
Ayo Ayco
3d951ba44c
feat: redirect code.elk.zone to github repository (#3166) 2025-01-31 03:18:46 +00:00
Duy
fce8d79c4d
feat(i18n): Update vi-VN.json (#3164) 2025-01-31 03:07:24 +00:00
Clovis
be6aa1e878
feat: update poll (#3111)
Co-authored-by: Clovis <clovis@synapse-medicine.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-01-31 03:06:58 +00:00
Clovis
e52b34c62d
fix: account profile page title (#3159) 2025-01-29 03:02:20 +00:00
Francesco
8e2a1d58c1
feat(i18n): Update it-IT locale (#3162) 2025-01-29 02:10:23 +00:00
Emanuel Pina
853fc5cf1a
feat(i18n): Update pt-PT translation (#3163) 2025-01-29 02:10:05 +00:00
Dohány Tamás
bf000b70a1
feat(i18n): update hu-HU.json (#3160) 2025-01-28 13:21:37 +00:00
TAKAHASHI Shuuji
374d1908fc
chore: release v0.16.0 (#3158) 2025-01-27 18:42:25 +00:00
Francesco
210278703d
feat(i18n): Update it-IT locale (#3145) 2025-01-27 10:51:07 +00:00
TAKAHASHI Shuuji
f6a47167c5
fix: remove extra padding and hover effect on dark theme (#3157) 2025-01-27 07:18:33 +00:00
TAKAHASHI Shuuji
e4a3cf00f0
fix: prevent infinite account hover card (#3153) 2025-01-27 07:18:19 +00:00
Xabi
443208468e
feat(i18n): update eu-ES.json (#3154) 2025-01-25 01:53:02 +00:00
TAKAHASHI Shuuji
a7d64fd132
feat: bluesky-style follow notification (#3151) 2025-01-24 15:21:57 +00:00
Ecron
39b2182a00
fix(lang): Update ca-valencia.json (#3146) 2025-01-24 07:59:39 +00:00
TAKAHASHI Shuuji
72d6e0596b
chore(deps): update devdependencies (#3152) 2025-01-24 07:55:33 +00:00
renovate[bot]
e214076620
chore(deps): update dependency @antfu/eslint-config to ^3.14.0 (#3143)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 04:13:43 +00:00
renovate[bot]
2ffefc8392
chore(deps): update all non-major dependencies (#3144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 04:13:28 +00:00
TAKAHASHI Shuuji
f5cada0be8
style: fix broken layout "more from" badge in card with square image (#3141) 2025-01-18 09:33:07 +00:00
TAKAHASHI Shuuji
2c0052edc4
feat(i18n): update Japanese localization (#3117) 2025-01-18 02:54:42 +00:00
TAKAHASHI Shuuji
4d7dc4e5ac
chore: update devDependencies except nuxt (#3140) 2025-01-17 04:14:26 +00:00
renovate[bot]
5d4e84241a
chore(deps): update devdependencies (major) (#3132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 03:11:27 +00:00
Aleksandr Ippatev
a7cd43fcd9
fix: disable publish when be bypassed by Ctrl + Enter (#3133) 2025-01-14 08:39:59 +00:00
renovate[bot]
2a85c9ebd4
chore(deps): update lint (#3131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2025-01-13 05:30:58 +00:00
TAKAHASHI Shuuji
9da6f45269
chore: update devDependencies (#3130) 2025-01-09 11:33:32 +00:00
renovate[bot]
9a5497e318
fix(deps): update vueuse to v12 (major) (#3095)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 22:35:12 +00:00
renovate[bot]
29761c6b10
fix(deps): update dependency happy-dom to v16 (#3129)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-06 07:50:54 +00:00
renovate[bot]
7198e1e618
chore(deps): update pnpm to v9.15.3 (#3128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-06 07:50:40 +00:00
@beer
154fdaaad9
chore(utils): remove unnecessary await (#3124) 2025-01-04 06:15:25 +00:00
Joaquín Sánchez
e59f5dbb8f
fix(rtl): replace ellipsis span anchor content with bdi (#3123) 2025-01-03 00:52:04 +00:00
Joaquín Sánchez
e986de7f6c
feat(i18n): add missing Spanish timeline and status translations (#3121) 2025-01-02 06:16:48 +00:00
Xabi
6cfadd7f7c
feat(i18n): update eu-ES.json (#3116) 2024-12-31 09:46:13 +00:00
TAKAHASHI Shuuji
ed70b3c611
chore: update devDependencies (#3115) 2024-12-30 13:09:44 +00:00
renovate[bot]
ed5d03044b
chore(deps): update dependency @antfu/eslint-config to ^3.12.1 (#3113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:52:28 +00:00
renovate[bot]
b179271e3c
chore(deps): update all non-major dependencies (#3112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-30 07:47:30 +00:00
Sho Sakuma
cadd2c3fa0
feat(i18n): Unify expression in Japanese translation (#3105) 2024-12-24 14:10:03 +00:00
renovate[bot]
1281ecf869
chore(deps): update all non-major dependencies (#3100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 15:24:54 +00:00
TAKAHASHI Shuuji
209330be6d
chore: update consola to 3.3.1 (#3103) 2024-12-23 14:59:13 +00:00
TAKAHASHI Shuuji
08aac8a995
chore: update dependencies except nuxt (#3102) 2024-12-23 07:45:15 +00:00
TAKAHASHI Shuuji
3b6a1762d6
chore: downgrade dependencies to avoid 500 error on /oauth/callback (#3075)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-22 21:40:53 +00:00
Rose Liverman
5e2df3821c
docs: Remove duplicate instruction in ReadMe (#3031)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-12-22 13:35:47 +00:00
Duy
371a996624
feat(i18n): Update vi-VN.json (#3099) 2024-12-21 13:08:17 +00:00
Francesco
d8710d5b06
feat(i18n): Update it-IT locale (#3098) 2024-12-20 16:06:03 +00:00
Emanuel Pina
3b33127dd9
feat(i18n): update pt-PT translation (#3097) 2024-12-20 04:02:39 +00:00
TAKAHASHI Shuuji
dd4076f49c
feat: show pinned posts on individual account page (#2779) 2024-12-19 04:19:20 +00:00
Estela ad Astra
4c63f6b8fc
feat(i18n): Finish catalan translation (#2990)
Signed-off-by: Estela ad Astra <i@estela.moe>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-12-17 06:08:09 +00:00
Clovis
7a52a6122a
fix: more menu is not opening on click (#3090)
Co-authored-by: Clovis <clovis@synapse-medicine.com>
2024-12-16 15:43:09 +00:00
renovate[bot]
4928148eed
fix(deps): update dependencies (#3094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 15:10:18 +00:00
Clovis
83513bf624
fix: MenuBottom settings are always empty (#3091)
Co-authored-by: Clovis <clovis@synapse-medicine.com>
2024-12-16 04:12:48 +00:00
renovate[bot]
1e156ec82b
chore(deps): update devdependencies (#3092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 02:26:51 +00:00
renovate[bot]
e67f6b0392
chore(deps): update lint (#3093)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-12-16 01:48:47 +00:00
Ayo Ayco
fa6c8a8fa1
feat(ui): disable publish button (#3085) 2024-12-14 07:29:49 +00:00
TAKAHASHI Shuuji
fb411e89f4
feat: support 'annual_report' notification type (#3084) 2024-12-13 09:39:38 +00:00
renovate[bot]
62e6bdf43c
chore(deps): update devdependencies (#3081)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 20:34:44 +00:00
renovate[bot]
4d42624765
chore(deps): update pnpm to v9.15.0 (#3083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 16:56:57 +00:00
renovate[bot]
f885616537
chore(deps): update dependency vitest to v2.1.8 (#3080)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 16:56:55 +00:00
renovate[bot]
900017bb3f
chore(deps): update lint (#3082)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-12-09 03:50:20 +00:00
TAKAHASHI Shuuji
b7cff82ab2
chore: update @nuxtjs/i18n to 9.1.1 (#3078) 2024-12-08 08:14:32 +00:00
renovate[bot]
6b98b6116b
chore(deps): update dependency eslint-plugin-format to ^0.1.3 (#3073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 11:36:19 +00:00
renovate[bot]
cca29e6695
chore(deps): update dependency vitest to v2.1.6 (#3074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 10:05:19 +00:00
Andrew Crescencio
b4cb027a8e
refactor: code from profile avatar image reduced motion setting issue (#3069)
Co-authored-by: null <null>
2024-12-01 01:59:42 +00:00
TAKAHASHI Shuuji
e1b8d5cb33
fix: apply missing reordering to local public timeline (#3071) 2024-11-30 15:36:09 +00:00
Joaquín Sánchez
672e057f83
docs: add primary light theme to fix color contrast (#3070) 2024-11-30 14:42:17 +00:00
TAKAHASHI Shuuji
7a4b1907b1
chore: change default theme color and fix color contrast (#3062) 2024-11-30 14:41:33 +00:00
Markus Unterwaditzer
302da09248
fix: Add basic user-agent to all mastodon-bound requests (#2277) 2024-11-27 15:32:44 +00:00
Andrew Crescencio
008248ee0f
fix(ui): Profile avatar image motion setting #3044 (#3066)
Co-authored-by: null <null>
2024-11-27 09:09:33 +00:00
renovate[bot]
5753f0b869
fix(deps): update dependencies (#3048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-11-27 04:09:16 +00:00
renovate[bot]
08672d6f2c
chore(deps): update pnpm to v9.14.2 (#3065)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 08:28:19 +00:00
renovate[bot]
4675599b08
chore(deps): update devdependencies (#3064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 04:21:29 +00:00
renovate[bot]
beeb30f039
fix(deps): update dependencies (major) (#2994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-11-25 03:41:34 +00:00
renovate[bot]
eab541b7b8
chore(deps): update dependency @antfu/eslint-config to ^3.9.2 (#3063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 01:23:31 +00:00
TAKAHASHI Shuuji
f4b667fef6
chore: use latest i18n v9 (#3059) 2024-11-24 13:36:16 +00:00
XL
e6ebde3ac4
fix: remove extra margins before tags (#3039) 2024-11-24 10:29:11 +00:00
TAKAHASHI Shuuji
aff559780b
chore: fix @nuxt/schema warning (#3061) 2024-11-24 05:13:17 +00:00
TAKAHASHI Shuuji
63caf91ec1
chore: remove @vueuse/motion patch (#3060) 2024-11-24 02:38:02 +00:00
renovate[bot]
beb2b2d3bd
chore(deps): update dependency vitest to v2.1.5 (#3051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-19 10:51:08 +00:00
renovate[bot]
fb5cd0ecdb
chore(deps): update lint (#3053)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 07:08:04 -05:00
renovate[bot]
62141629c7
chore(deps): update pnpm to v9.13.2 (#3054)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 07:08:01 -05:00
renovate[bot]
726319efb6
chore(deps): update devdependencies (#3052)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-17 22:23:39 -05:00
Dohány Tamás
f742a01430
feat(i18n): update hu-HU.json (#3049) 2024-11-13 22:55:58 +01:00
renovate[bot]
428db939ab
chore(deps): update all non-major dependencies (#3047)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 02:02:01 +00:00
renovate[bot]
019bce3590
chore(deps): update devdependencies (#3046)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 01:07:34 +00:00
TAKAHASHI Shuuji
738bc88be2
docs: fix documentation build error (#3045)
Co-authored-by: userquin <userquin@gmail.com>
2024-11-11 00:49:56 +00:00
renovate[bot]
816f452646
fix(deps): update dependency happy-dom to v15.10.2 [security] (#3041)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-08 07:02:20 +00:00
renovate[bot]
f6265bd387
fix(deps): update dependency happy-dom to v15.10.2 [security] (#3040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-07 09:05:52 +00:00
renovate[bot]
9c25621f12
chore(deps): update dependency vitest to v2.1.4 (#3037)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 17:05:10 +00:00
renovate[bot]
074deb4ce6
chore(deps): update devdependencies (#3038)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 11:52:48 +00:00
renovate[bot]
b1428a53bd
chore(deps): update lint (#3010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-02 06:33:35 +00:00
TAKAHASHI Shuuji
54cc0e4735
feat: support wider emoji (#3028) 2024-10-29 02:26:41 +08:00
renovate[bot]
9fc75afdf0
chore(deps): update pnpm to v9.12.3 (#3026)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 06:12:59 +00:00
renovate[bot]
aae808e36b
chore(deps): update devdependencies (#3025)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-10-27 20:28:42 -07:00
TAKAHASHI Shuuji
41346e318b
feat: add credits to creators in link previews using fediverse:creator (#3012) 2024-10-26 06:13:21 +00:00
Emanuel Pina
98a910c6f1
feat(i18n): update pt-PT translation (#3024) 2024-10-26 03:49:52 +00:00
Wladimir Palant
49a5f49966
fix(ui): Avoid duplicate IDs for grouped notifications (#3014) 2024-10-26 03:37:40 +00:00
Xabi
c153f719fe
fix(i18n): update Basque localisation (#3018) 2024-10-26 03:29:30 +00:00
Francesco
83fd1f3224
feat(i18n): Update it-IT locale (#3021) 2024-10-26 03:29:17 +00:00
Duy
86581a7172
fix(i18n): Update vi-VN.json (#3020) 2024-10-26 03:29:05 +00:00
TAKAHASHI Shuuji
18b3d36e03
chore: update masto.js to latest version 6.10.1 (#3019) 2024-10-24 03:46:15 +00:00
Wladimir Palant
2c8307b3d8
fix: Do not require Git for development (#3015) 2024-10-24 00:50:30 +00:00
Wladimir Palant
83fce5d8a1
fix(i18n): Allowed translating "No posts here" text (#3016) 2024-10-23 12:51:28 +00:00
Wladimir Palant
2f3fe82593
fix(i18n): Improved consistency of the German translation (#3013) 2024-10-22 14:10:39 +00:00
TAKAHASHI Shuuji
907657725d
fix(ui): fix and adjust bottom navigation preview on setting page (#2818) 2024-10-21 09:33:35 +00:00
jyn
dac42e062c
feat(a11y): make menu buttons in 'More' dropdown selectable with the keyboard (#2976)
Co-authored-by: userquin <userquin@gmail.com>
2024-10-21 09:00:51 +00:00
TAKAHASHI Shuuji
ae1da4c3e8
feat: add 6 new bottom nav buttons (#3011) 2024-10-21 08:48:06 +00:00
renovate[bot]
78b013dc0f
chore(deps): update dependency vitest to v2.1.3 (#3008)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 02:23:55 +00:00
renovate[bot]
2d66e6f5d7
chore(deps): update pnpm to v9.12.2 (#3009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 02:23:51 +00:00
Wladimir Palant
9440527f17
fix(i18n): Fixed some German out-of-context translations (#3005) 2024-10-20 03:41:18 +00:00
Wladimir Palant
6e731866be
fix(i18n): Correct some German translations, also make them more consistent (#3001) 2024-10-18 16:45:45 +00:00
renovate[bot]
d0681bd907
fix(deps): update dependency @vueuse/motion to v2.2.6 (#2991)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 09:34:17 +01:00
renovate[bot]
36981cd40f
chore(deps): update dependency eslint to ^9.12.0 (#2992)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 09:34:15 +01:00
renovate[bot]
18433fa3e0
chore(deps): update pnpm to v9.12.1 (#2993)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-14 09:34:13 +01:00
renovate[bot]
466921de44
chore(deps): update devdependencies (#2987)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 03:40:02 +00:00
renovate[bot]
b395ab2cf9
chore(deps): update dependency vitest to v2.1.2 (#2988)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 03:35:17 +00:00
Duy
3bc6e106d2
feat(i18n): Update vi-VN.json (#2967) 2024-10-09 17:16:40 +00:00
TAKAHASHI Shuuji
f64878861e
chore: fix eslint error preventing ci (#2989) 2024-10-09 17:16:07 +00:00
Daniel Roe
abf8dd3ea1
chore: suppress type differences for nitro v2.10 2024-10-06 07:37:04 +01:00
renovate[bot]
f5b62f3a59
chore(deps): update devdependencies (#2982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 12:49:05 +00:00
renovate[bot]
502993946b
fix(deps): update dependency @unocss/nuxt to ^0.63.0 (#2983)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 08:26:15 +00:00
renovate[bot]
320ddc0e28
chore(deps): update dependency @antfu/eslint-config to v3 (#2984)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-09-30 08:11:56 +00:00
renovate[bot]
97826c00bc
chore(deps): update dependency eslint to ^9.11.1 (#2981)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 01:33:14 +00:00
patak-dev
1335bbfcd5 chore: release v0.15.1
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-09-26 09:13:34 +02:00
Joaquín Sánchez
44074ff1a3
fix: change page reload and account switch logic (#2975) 2024-09-25 15:55:32 +00:00
Joaquín Sánchez
54344acf4b
fix: prevent reloading page (#2973) 2024-09-23 16:08:02 +00:00
Daniel Roe
fe58a2b522
chore: release v0.15.0
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-09-23 15:02:26 +01:00
Joaquín Sánchez
4d95c17e86
fix: add new service worker (#2971) 2024-09-23 12:45:46 +00:00
renovate[bot]
2f4ee35561
chore(deps): update dependency vitest to v2.1.1 (#2960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 11:29:55 +00:00
Joaquín Sánchez
10076be909
fix: top level await (chrome 129) (#2970) 2024-09-23 10:53:10 +00:00
renovate[bot]
7ab2f16f35
chore(deps): update dependency eslint to ^9.11.0 (#2968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 09:27:38 +00:00
renovate[bot]
7a1ed8f9a2
chore(deps): update pnpm to v9.11.0 (#2969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 09:27:34 +00:00
TAKAHASHI Shuuji
744c1784c3
fix: fix invalid permissions-policy value for fullscreen (#2941) 2024-09-19 12:00:39 +00:00
renovate[bot]
7aabe17860
fix(deps): update dependency prosemirror-highlight to ^0.9.0 (#2961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:59:36 +00:00
renovate[bot]
bc324ec8ae
chore(deps): update dependency nuxt-component-meta to v0.8.2 (#2958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:59:01 +00:00
renovate[bot]
ff9c025126
chore(deps): update devdependencies (#2959)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 11:58:15 +00:00
Joaquín Sánchez
662a8aec69
chore: cleanup ModalContainer.vue (#2956) 2024-09-14 03:56:25 +00:00
Joaquín Sánchez
01ffb1a3e1
fix(ui): composer dialog layout broken (#2955) 2024-09-12 09:36:43 +00:00
Joaquín Sánchez
4061075dde
fix(ui): generate only one thread composer in PublishWidgetList and provide it to each widget (#2953) 2024-09-11 20:37:14 +00:00
Joaquín Sánchez
dbf743afd9
fix(ui): bind attributes to PublishWidgetList list (#2952) 2024-09-11 15:43:30 +00:00
renovate[bot]
dd6fab86ee
chore(deps): update dependency nuxt to ^3.13.1 (#2946)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-09-11 14:37:59 +00:00
renovate[bot]
344ec56da0
chore(deps): update all non-major dependencies (#2949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 11:29:26 +00:00
Daniel Roe
672e8a9a24
fix: bump unstorage and address type issues (#2951) 2024-09-11 11:20:26 +00:00
renovate[bot]
201ab3b13a
chore(deps): update dependency eslint to ^9.10.0 (#2948)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:24:14 +00:00
renovate[bot]
6fd288dcc1
fix(deps): update dependency @vueuse/motion to v2.2.5 (#2947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:23:00 +00:00
Joaquín Sánchez
41eb84416a
fix(ui): add loading indicator (#2769) 2024-09-07 09:37:01 +00:00
Shinigami
e477cd8ee2
chore: use script setup lang=ts everywhere (#2944) 2024-09-07 09:30:43 +00:00
Shinigami
4caa63e84f
perf: reduce timeline limit on slow connection (#2945) 2024-09-07 09:27:01 +00:00
Shinigami
3054667050
chore: unify script setup lang order (#2943) 2024-09-07 07:38:18 +00:00
renovate[bot]
b2102732cf
chore(deps): update devdependencies (#2939)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 06:56:23 +00:00
renovate[bot]
7141a75544
chore(deps): update pnpm to v9.9.0 (#2940)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 06:55:39 +00:00
Sho Sakuma
926f7769c2
fix(i18n): Fix redundant Japanese translation (#2938) 2024-09-02 06:54:39 +00:00
Duy
538fadc908
feat(i18n): Update vi-VN.json (#2937) 2024-08-31 13:53:17 +00:00
renovate[bot]
f605d96836
chore(deps): update devdependencies (#2931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 03:20:57 +00:00
renovate[bot]
0c1dd1cb7b
chore(deps): update lint (#2932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 02:56:38 +00:00
Ao Ito
53f3d44f21
refactor: remove redundant imports (#2927) 2024-08-24 12:16:10 +00:00
renovate[bot]
faae7e32f4
fix(deps): update dependencies (major) (#2921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 10:28:35 +00:00
renovate[bot]
b8efd67e83
fix(deps): update vueuse to v11 (major) (#2922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-08-20 15:51:05 +00:00
renovate[bot]
7de45d154e
chore(deps): update all non-major dependencies (#2920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 02:54:17 +00:00
renovate[bot]
1353f62ebb
chore(deps): update dependency prettier to ^3.3.3 (#2919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 02:51:09 +00:00
renovate[bot]
e22555b581
fix(deps): update dependencies (major) (#2559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 15:49:14 +00:00
renovate[bot]
55372aa530
chore(deps): update devdependencies (#2782)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 15:20:49 +00:00
renovate[bot]
efa8a89f92
chore(deps): update dependency eslint to v9 (#2785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-16 14:58:14 +00:00
renovate[bot]
0fba07e6e5
chore(deps): update dependency @antfu/eslint-config to ^2.19.0 (#2726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 14:52:08 +00:00
renovate[bot]
23f82d3296
fix(deps): update dependencies (#2526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-08-16 14:35:44 +00:00
Ao Ito
bd7fd961d0
feat: add custom metadata type for PageMeta (#2907) 2024-08-16 14:33:39 +00:00
renovate[bot]
1a8d365779
chore(deps): update dependency vitest to v2.0.5 (#2911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-16 14:29:39 +00:00
Daniel Roe
335ae78a67
chore: bump and patch dependencies to augment vue (#2918) 2024-08-16 13:31:43 +00:00
renovate[bot]
bdf5a18b4d
chore(deps): update pnpm to v9.7.0 (#2917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 15:52:58 +00:00
Chris​‌​‮ ‬Hayes‌​​​
71369c4c78
fix(ui): profile name gets cut off by roles (#2915) 2024-08-13 15:45:09 +00:00
TAKAHASHI Shuuji
1d62c2640e
fix(ui): adjust z-index of Embedded Media Player and sticky header (#2848) 2024-08-10 14:55:05 +00:00
TAKAHASHI Shuuji
d79add2ddb
fix(ui): fix z-index of horizontal line between statuses (#2778) 2024-08-10 14:54:01 +00:00
KaKi87
f15c8a18d0
feat(i18n): Update French translations (#1839)
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-08-09 06:06:09 +00:00
TAKAHASHI Shuuji
879f0d8648
feat(ui): overlap multiple account icons in notification (#2869) 2024-08-09 06:00:19 +00:00
Lixou
20ac0d5066
fix(ui): change apple app status bar style (#2903)
Co-authored-by: Joaquín Sánchez <userquin@gmail.com>
2024-08-09 05:58:49 +00:00
Chris​‌​‮ ‬Hayes‌​​​
fb7f2b5a8e
docs(contributing): update node and pnpm version (#2913) 2024-08-09 05:57:18 +00:00
renovate[bot]
4a3218dae3
chore(deps): update dependency vitest to v2.0.4 (#2909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 02:19:26 +00:00
renovate[bot]
21f7a029fa
chore(deps): update pnpm to v9.6.0 (#2908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-22 06:38:20 +00:00
renovate[bot]
f8b4f700e7
chore(deps): update dependency vitest to v2 (#2906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-16 04:06:56 +00:00
renovate[bot]
d2aee8fc37
chore(deps): update pnpm to v9.5.0 (#2905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-08 07:31:58 +00:00
renovate[bot]
2144f2484b
chore(deps): update amannn/action-semantic-pull-request action to v5.5.3 (#2898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-01 02:43:41 +00:00
Ediz Baha
83de5da08a
fix(i18n): Update tr-TR.json (#2894) 2024-06-25 00:24:54 +00:00
renovate[bot]
108db77a9d
chore(deps): update all non-major dependencies (#2783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:11:24 +00:00
renovate[bot]
385f218e7b
fix(deps): update dependency @vueuse/motion to v2.2.3 (#2881)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:05:38 +00:00
renovate[bot]
f224acb4e2
chore(deps): update docker/build-push-action action to v6 (#2892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 03:00:20 +00:00
Sebastian Di Luzio
0d84257ac0
docs: add crab.bumscode.com to list of community elk deployments (#2887) 2024-06-17 17:34:59 +00:00
renovate[bot]
b4886fa135
chore(deps): update dependency vitest to v1.6.0 (#2822)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-14 08:19:42 +00:00
Daniel Roe
16a09cd959
fix: use correct meta attribute for twitter info 2024-06-10 22:20:54 +01:00
TAKAHASHI Shuuji
97ce2fc819
feat: keyboard status navigation with j/k (#2739) 2024-05-31 10:35:04 +00:00
Lixou
9a864e8bcb
chore(deps): Update masto.js (#2876) 2024-05-30 19:40:17 +00:00
Francesco
ca34d3df70
feat(i18n): Update it-IT locale (#2879) 2024-05-30 01:16:21 +00:00
Joaquín Sánchez
2c889a39b8
chore: fix invalid html markup in SettingsToggleItem (#2810) 2024-05-29 03:42:58 +00:00
Joaquín Sánchez
7047968cfc
feat(a11y): add semantic markup to language settings (#2812) 2024-05-29 03:42:54 +00:00
Shinigami
0b207c3bb5
chore: set package-manager-strict to false (#2873) 2024-05-28 14:23:45 +02:00
Shinigami
6f7efc9f32
fix(i18n): update de-DE (#2874) 2024-05-28 00:21:00 +00:00
renovate[bot]
a88d51b60b
chore(deps): update pnpm to v9 (#2841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-27 23:27:17 +00:00
Lefteris T
65557fab5e
feat(i18n): added greek translation (#2831)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-05-11 15:26:21 +00:00
Valtteri Laitinen
09b5dd6ac9
feat(i18n): update Finnish localization (#2867) 2024-05-09 10:15:01 +00:00
Alex
a1b5cbc12e
feat(i18n): update zh-CN translations (#2868) 2024-05-08 11:34:34 +00:00
Xabi
bd950af9cf
feat(i18n): update eu-ES.json (#2866) 2024-05-07 23:58:56 +00:00
lazzzis
04befd6138
feat(i18n): update zh-CN.json (#2865) 2024-05-05 18:25:29 +00:00
Kevin Pliester
0b53dfc89f
feat(i18n): update German translations (#2861) 2024-05-03 20:32:24 +00:00
lzh
c39b60d448
feat(i18n): update zh-CN.json (#2858) 2024-05-02 19:50:19 +00:00
lzh
50481af19e
docs(i18n): Update dev path in the contribution guide (#2857) 2024-05-02 13:40:15 +00:00
Dohány Tamás
6c2e5849ef
feat(i18n): update hu-HU.json (#2856) 2024-05-02 13:40:08 +00:00
pt
9496ffc3e6
feat(i18n): update uk-UA.json (#2854) 2024-04-28 08:18:37 +00:00
pt
ab92fd696c
feat(i18n): update uk-UA.json (#2852) 2024-04-26 04:39:42 +00:00
Francesco
7d4b84fda8
feat(i18n): Update it-IT locale (#2851) 2024-04-25 03:27:21 +00:00
Xabi
a67b3efde2
feat(i18n): update eu-ES.json (#2840) 2024-04-24 03:17:03 +00:00
Duy
e546e665d8
feat(i18n): Update vi-VN.json (#2838) 2024-04-24 03:17:00 +00:00
Emanuel Pina
d1ae45de14
feat(i18n): update pt-PT translation (#2850) 2024-04-24 03:16:55 +00:00
Joaquín Sánchez
8ad05dfd47
feat(i18n): add open image preview dialog spanish translation (#2839) 2024-04-22 15:38:06 +00:00
TAKAHASHI Shuuji
09cae9f924
fix(ui): fix publish dialog layout (#2842) 2024-04-22 12:54:20 +00:00
TAKAHASHI Shuuji
bd8cfc7b57
fix(i18n,a11y): fix missing or incorrect translations in aria-label strings (#2837) 2024-04-21 10:26:35 +00:00
Joaquín Sánchez
77f0e2c2f8
feat(a11y): add semantic markup to preference settings (#2811) 2024-04-21 07:14:12 +00:00
lazzzis
57ff04853b
fix(ui): show custom emoji in spoiler text (#2836) 2024-04-21 05:25:40 +00:00
Joaquín Sánchez
1eaaa6ce9a
feat(i18n): add manage lists spanish translation (#2832) 2024-04-18 19:39:08 +00:00
patak-dev
1526847a18 chore: release v0.14.0
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-04-18 14:53:14 +02:00
Duy
cc1d149ac8
feat(i18n): Update vi-VN.json (#2830) 2024-04-18 07:26:04 +00:00
Duy
569604646d
feat(i18n): Update vi-VN.json (#2825) 2024-04-18 04:20:15 +00:00
Dohány Tamás
6f47d1aeff
feat(i18n): update hu-HU.json (#2828) 2024-04-18 04:20:10 +00:00
Francesco
9d62edf295
feat(i18n): Update it-IT locale (#2827) 2024-04-18 04:20:06 +00:00
Xabi
7f4d8c04c6
feat(i18n): update eu-ES.json (#2826) 2024-04-18 04:20:01 +00:00
Emanuel Pina
79c6714bac
feat(i18n): Update pt-PT language (#2829) 2024-04-18 04:19:57 +00:00
lazzzis
ecd7a6f8cb
feat(ui): add manage list at the end of the lists (#2824) 2024-04-16 17:51:27 +00:00
Andy Maloney
4ed97dab55
feat(i18n): add en-CA for Canadian English (#2820) 2024-04-15 03:07:07 +00:00
Andy Maloney
d4eeb7441d
feat(i18n): update en-GB.json (#2821) 2024-04-15 03:01:47 +00:00
Joaquín Sánchez
c504e14ff5
feat(a11y): add semantic markup to interface settings (#2809)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-04-14 18:06:25 +00:00
Joaquín Sánchez
f78ce97f05
chore(ui): publish widget using computed ref without .value inside computed (#2816) 2024-04-14 16:17:16 +00:00
TAKAHASHI Shuuji
c1f8e3efb5
feat: support more than 4 media attachments with 3 columns grid (#2802) 2024-04-14 11:04:28 +00:00
Dohány Tamás
e4c7124d28
feat(i18n): update hu-HU.json (#2813) 2024-04-14 08:21:27 +00:00
Joaquín Sánchez
6bb9ad0511
fix(a11y): add aria-* entries to interface settings (#2799)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-04-13 10:39:59 +00:00
Emanuel Pina
8697cc44e4
feat(i18n): Update portuguese from Portugal translation (#2806) 2024-04-13 10:14:31 +00:00
Alan Ye
8e5a801ef9
fix(i18n): correct the spelling of Favorite in the US (#2807) 2024-04-13 08:07:01 +00:00
TAKAHASHI Shuuji
876ae4098c
feat(i18n): update en-GB localization (#2808) 2024-04-13 08:06:37 +00:00
TAKAHASHI Shuuji
9c916e0932
fix: remove nav buttons from initial selection on setting page (#2803) 2024-04-12 17:22:34 +00:00
Joaquín Sánchez
14162f8bcb
feat(ui): add font size outline when focused (#2798) 2024-04-12 17:19:37 +00:00
Xabi
9fa8149f68
feat(i18n): update eu-ES.json (#2804) 2024-04-12 17:17:54 +00:00
Joaquín Sánchez
e3979c61e7
feat(i18n): add spanish bottom navigation translations (#2801) 2024-04-12 17:17:29 +00:00
Francesco
1d817a8b69
feat(i18n): Update it-IT locale (#2800) 2024-04-12 17:17:08 +00:00
TAKAHASHI Shuuji
2cb070c83c
feat: allow choosing favorite buttons in bottom navigation bar (#2761) 2024-04-12 09:38:43 +00:00
lazzzis
2a6a994da1
fix: list name is not up-to-date after modification (#2797) 2024-04-12 04:14:54 +00:00
Dohány Tamás
706cffe209
feat(i18n): update hu-HU.json, thread related strings (#2795) 2024-04-11 13:41:47 +00:00
Joaquín Sánchez
dde907f4bb
feat(i18n): add spanish threads translations (#2794) 2024-04-10 20:23:30 +00:00
Xabi
81143de09b
feat(i18n): update eu-ES.json (#2792) 2024-04-09 19:09:05 +00:00
Dohány Tamás
8fdac7f79e
feat(i18n): update hu-HU.json (#2789) 2024-04-09 03:06:58 +00:00
Duy
7b819d116c
feat(i18n): Update vi-VN.json (#2791) 2024-04-09 03:01:48 +00:00
Francesco
bda2df2192
feat(i18n): Update it-IT locale (#2790) 2024-04-09 03:01:45 +00:00
Emanuel Pina
2cada8a75c
feat(i18n): Update portuguese from Portugal translation (#2788) 2024-04-09 03:01:40 +00:00
TAKAHASHI Shuuji
e0280ad8c4
fix(ui): fix regression where editor is expanded before composing (#2787) 2024-04-08 15:30:55 +00:00
Sebastian Di Luzio
1234fb2dd1
feat: add threaded drafts & posts (#2715)
Co-authored-by: Sebastian Di Luzio <sebastian.di-luzio@iu.org>
Co-authored-by: Emanuel Pina <contacto@emanuelpina.pt>
Co-authored-by: lazzzis <lazzzis@outlook.com>
Co-authored-by: Joaquín Sánchez <userquin@gmail.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
Co-authored-by: Francesco <129339155+katullo11@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: patak-dev <matias.capeletto@gmail.com>
2024-04-08 09:53:26 +00:00
Joaquín Sánchez
0538f97ada
chore: update i18n to 8.3.0 (#2765) 2024-04-08 07:30:17 +00:00
Tamas
61265a792f
feat(i18n): update hu-HU.json - review (#2780) 2024-04-08 07:29:45 +00:00
lazzzis
2599c85047
fix(ui): make display name clickable in grouped follow notification (#2776) 2024-04-07 08:29:38 +00:00
Francesco
ab2201f94d
feat(i18n): Update it-IT locale (#2774) 2024-04-07 08:28:26 +00:00
Tamas
80a8f58611
feat(i18n): update hu-HU.json (#2773) 2024-04-06 18:25:23 +00:00
Joaquín Sánchez
e53f651fbb
fix(ui,a11y): focus lost when navigating using the keyboard (tab) (#2766) 2024-04-06 03:58:50 +00:00
patak-dev
25fb7c1c97 chore: release v0.13.2
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-04-05 18:29:15 +02:00
TAKAHASHI Shuuji
839aa52e86
fix: adjust background spacing in direct message (#2764) 2024-04-05 16:23:52 +00:00
TAKAHASHI Shuuji
9ff55289ea
ci(ci.yml): limit maximum execution time of ci test (#2763) 2024-04-05 16:19:53 +00:00
Joaquín Sánchez
73293fbcd3
chore: update nuxt to 3.11.2 (#2755) 2024-04-05 14:34:42 +00:00
TAKAHASHI Shuuji
a27c218802
chore: update github avatar images (#2762) 2024-04-05 14:34:19 +00:00
Emanuel Pina
f8fc0efadc
feat(i18n): Update portuguese from Portugal translation (#2756) 2024-04-05 09:16:30 +00:00
Joaquín Sánchez
618a5b2df3
chore(ui): use full width in settings toggle items (#2754) 2024-04-05 09:16:11 +00:00
lazzzis
1146dca5f6
fix(ui): media preview card is misaligned (#2751) 2024-04-05 09:15:44 +00:00
Joaquín Sánchez
f86e856ee6
feat(i18n): add missing spanish translations (gifs, docs and contributing) (#2753) 2024-04-04 18:36:03 +00:00
renovate[bot]
6d13d61227
chore(deps): update devdependencies (#2725)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-04-04 16:47:27 +00:00
Francesco
0de9825bf2
feat(i18n): Update it-IT locale (#2750) 2024-04-04 13:25:09 +00:00
Joaquín Sánchez
3f0b234cc4
feat(ui): add max. file size check before upload attachment (#2709)
Co-authored-by: TAKAHASHI Shuuji <shuuji3@gmail.com>
2024-04-04 10:28:18 +00:00
lazzzis
8f04ea8eee
feat(ui): improve gif support (#2752) 2024-04-04 10:27:52 +00:00
Emanuel Pina
7dcafa3fe0
feat(i18n): Update portuguese from Portugal translation (#2747) 2024-04-04 05:17:03 +00:00
Joaquín Sánchez
bead2183b2
fix(ui): don't scroll on settings item click when external or _blank target link (#2742) 2024-04-03 13:59:42 +00:00
patak
59dda09cd4
fix: notifications in update timeline (#2740) 2024-04-03 13:59:24 +00:00
lazzzis
d0b115751f
feat(ui): style blockquote (#2744) 2024-04-03 04:17:52 +00:00
lazzzis
c6787aae3f
fix(ui): clicking on custom emoji does not navigate to status detail (#2743) 2024-04-03 04:17:30 +00:00
patak
9025416ab3
feat: update info dialog (#2741) 2024-04-02 03:17:45 +00:00
TAKAHASHI Shuuji
aa28257754
feat: add "Documentation" link to "About" page (#2734) 2024-04-01 14:57:11 +00:00
TAKAHASHI Shuuji
d807e06fa0
refactor: various typo fixes (#2735) 2024-04-01 14:56:30 +00:00
TAKAHASHI Shuuji
611d556936
feat: put sign-in icon to default "Sign in" button (#2736) 2024-04-01 14:55:31 +00:00
Xabi
4313002950
feat(i18n): update eu-ES.json (#2737) 2024-04-01 14:54:37 +00:00
TAKAHASHI Shuuji
de11a60b17
feat: add "How to contribute?" link next to language status (#2733) 2024-04-01 05:27:47 +00:00
TAKAHASHI Shuuji
5064b269e7
feat: show background color for direct post to reduce mistake (#2732) 2024-04-01 05:26:51 +00:00
TAKAHASHI Shuuji
d8d9975756
fix: hide duplicated status actions items on details page in zen mode (#2731) 2024-04-01 05:25:53 +00:00
TAKAHASHI Shuuji
eee671cdc3
fix: improve keyboard operability especially on search page and editor (#2730)
Co-authored-by: patak <583075+patak-dev@users.noreply.github.com>
2024-04-01 05:24:42 +00:00
lazzzis
587c063aba
fix(ui): remove a duplicated command (#2718) 2024-03-30 04:19:22 +00:00
lazzzis
28514e956d
fix(ui): wrong polls are removed (#2720) 2024-03-30 04:18:33 +00:00
lazzzis
42aeb8fa35
fix(ui): prevent from navigating to search page when opening command panel (#2719) 2024-03-30 04:15:58 +00:00
Joaquín Sánchez
f6f50a582e
fix(ui): change status actions title (#2717) 2024-03-29 20:04:55 +00:00
patak-dev
f86818867b chore: release v0.13.1
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-03-29 16:37:28 +01:00
Sma11X
82d962a54b
fix: add missing notification event type (#2714) 2024-03-29 15:31:53 +00:00
renovate[bot]
1b189043e4
chore(deps): update devdependencies (major) (#2400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 08:51:07 +00:00
renovate[bot]
a4867566d9
chore(deps): update devdependencies (#2697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 08:34:06 +00:00
renovate[bot]
0757db69b2
chore(deps): update dependency @types/prettier to v3 (#2712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 08:33:11 +00:00
renovate[bot]
f0de25c992
chore(deps): update dependency @antfu/eslint-config to ^2.9.0 (#2711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 08:32:33 +00:00
TAKAHASHI Shuuji
660549b08b
chore: update masto to v6.7.0 (#2708) 2024-03-21 15:18:53 +00:00
Joaquín Sánchez
7807730118
feat(i18n): add missing spanish mute duration dialog entries (#2696) 2024-03-21 12:37:57 +00:00
Joaquín Sánchez
b526db0860
chore: update i18n module to 8.2.0 (#2703) 2024-03-21 12:13:28 +00:00
Sma11X
0133324ded
fix: correct local timeline stream (#2707) 2024-03-21 10:08:51 +00:00
TAKAHASHI Shuuji
e9ab0cd40b
fix: prevent showing notification errors for dev for known emoji reaction types (#2704) 2024-03-19 15:04:16 +00:00
Joaquín Sánchez
9251ec496b
chore: add ofetch to typescript.hoist (#2693)
Co-authored-by: Daniel Roe <daniel@roe.dev>
2024-03-19 12:56:14 +00:00
renovate[bot]
bd4cd02b2b
chore(deps): update pnpm to v8.15.5 (#2698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 12:40:13 +00:00
Joaquín Sánchez
74ccfece5d
chore: update nuxt to 3.11.1 (#2702) 2024-03-19 12:36:25 +00:00
Sma11X
c89e499f96
fix: pre tag overwritten by default style (#2699) 2024-03-18 11:34:03 +00:00
Dohány Tamás
89e3582dd7
feat(i18n): Update hu-HU.json (#2694) 2024-03-17 19:11:42 +00:00
TAKAHASHI Shuuji
48c013709a
ci(docker.yml): support linux/arm64 container (#2691) 2024-03-17 15:15:04 +00:00
renovate[bot]
f90f0a2e61
chore(deps): update pnpm to v8.15.4 (#2627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-17 15:14:19 +00:00
renovate[bot]
c58b585855
chore(deps): update lint (#2399)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-17 15:14:04 +00:00
Joaquín Sánchez
ded2e0f3d7
chore: update nuxt to 3.11.0 (#2692) 2024-03-17 14:32:02 +00:00
Joaquín Sánchez
21d5633233
chore: bump to eslint-config to 2.8.1 (#2685) 2024-03-13 06:39:28 +00:00
Joaquín Sánchez
7703565c75
fix(ui): hashtags not working when composing (#2686) 2024-03-12 20:47:05 +00:00
cuithon
5a9546ec0a
chore: fix typo (#2681)
Signed-off-by: cuithon <dscs@outlook.com>
2024-03-12 07:58:20 +00:00
patak
bc30a8bd82 chore: release v0.13.0
Some checks failed
build & push docker container / docker (push) Has been cancelled
Release / release (push) Has been cancelled
2024-03-11 12:08:52 +01:00
Duy
c432c2bd0d
feat(i18n): Update vi-VN.json (#2664) 2024-03-11 10:55:18 +00:00
Francesco
364fbd350b
feat(i18n): Update it-IT locale (#2666) 2024-03-11 10:55:05 +00:00
Xabi
c64580f782
feat(i18n): update eu-ES.json (#2670) 2024-03-11 10:54:53 +00:00
Emanuel Pina
e7dfdafd59
feat(i18n): Update portuguese from Portugal translation (#2671) 2024-03-11 10:54:38 +00:00
Ayo Ayco
b06ec9356d
feat(i18n): update Tagalog translations (#2677) 2024-03-11 10:54:20 +00:00
TAKAHASHI Shuuji
3b1a66c93c
fix: fix vue/no-ref-as-operand and vue/return-in-computed-property ESLint errors (#2679) 2024-03-11 10:53:25 +00:00
TAKAHASHI Shuuji
ed8a1811cc
chore: upgrade @vueuse/core from 10.8.0 to 10.9.0 (#2674) 2024-03-10 18:38:37 +00:00
TAKAHASHI Shuuji
dfbe2e080d
fix: prevent empty search keyword to send invalid request (#2676) 2024-03-10 18:37:32 +00:00
TAKAHASHI Shuuji
0fd9374e8c
fix: fix incorrect follow status on followers and following pages (#2669) 2024-03-09 19:31:40 +00:00
TAKAHASHI Shuuji
1c8e48bee4
fix: show loading spinner on follow button while fetching account relationship (#2667)
Co-authored-by: patak <583075+patak-dev@users.noreply.github.com>
2024-03-09 18:44:44 +00:00
TAKAHASHI Shuuji
3448335356
feat: allow to set mute duration and notifications mute option (#2665) 2024-03-09 09:52:41 +00:00
Joaquín Sánchez
4954473f50
chore: extract bg and theme colors to constants (#2662) 2024-03-07 19:15:35 +00:00
TAKAHASHI Shuuji
efa17caf5e
fix: consistent hover highlight styling in mobile bottom navigation menus (#2661) 2024-03-07 19:14:20 +00:00
Joaquín Sánchez
df165f0023
fix(pwa): wrong web manifest colors (#2659) 2024-03-07 14:55:27 +00:00
TAKAHASHI Shuuji
0f583ece28
feat: remember last accessed explore tab (#2658) 2024-03-07 14:33:25 +00:00
Ivan Demchuk
d579977790
feat(i18n): update Ukrainian translations (#2660) 2024-03-07 13:41:24 +00:00
TAKAHASHI Shuuji
8786c83db7
fix: remember last accessed notification tab (#2654) 2024-03-06 22:00:07 +00:00
459 changed files with 25682 additions and 14537 deletions

View file

@ -40,7 +40,6 @@
"groupName": "lint",
"matchPackageNames": [
"@antfu/eslint-config",
"@types/prettier",
"eslint",
"prettier"
]

View file

@ -18,11 +18,13 @@ jobs:
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/setup-node@v4
# workaround for npm registry key change
# ref. `pnpm@10.1.0` / `pnpm@9.15.4` cannot be installed due to key id mismatch · Issue #612 · nodejs/corepack
# - https://github.com/nodejs/corepack/issues/612#issuecomment-2629496091
- run: npm i -g corepack@latest && corepack enable
- uses: actions/setup-node@v4.4.0
with:
node-version: 20
cache: pnpm
node-version-file: .nvmrc
- name: 📦 Install dependencies
run: pnpm install --frozen-lockfile
@ -32,6 +34,7 @@ jobs:
- name: 🧪 Test project
run: pnpm test:ci
timeout-minutes: 10
- name: 📝 Lint
run: pnpm lint

View file

@ -35,10 +35,10 @@ jobs:
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.metal.outputs.tags }}
labels: ${{ steps.metal.outputs.labels }}

View file

@ -19,7 +19,7 @@ jobs:
- name: Set node
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: .nvmrc
- run: npx changelogithub
env:

View file

@ -19,6 +19,6 @@ jobs:
name: Semantic Pull Request
steps:
- name: Validate PR title
uses: amannn/action-semantic-pull-request@v5.4.0
uses: amannn/action-semantic-pull-request@v5.5.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1
.npmrc
View file

@ -1,3 +1,4 @@
shamefully-hoist=true
shell-emulator=true
ignore-workspace-root-check=true
package-manager-strict=false

2
.nvmrc
View file

@ -1 +1 @@
20
22

View file

@ -6,22 +6,16 @@ Refer also to https://github.com/antfu/contribute.
For guidelines on contributing to the documentation, refer to the [docs README](./docs/README.md).
### Online
You can use [StackBlitz Codeflow](https://stackblitz.com/codeflow) to fix bugs or implement features. You'll also see a Codeflow button on PRs to review them without a local setup. Once the elk repo has been cloned in Codeflow, the dev server will start automatically and print the URL to open the App. You should receive a prompt in the bottom-right suggesting to open it in the Editor or in another Tab. To learn more, check out the [Codeflow docs](https://developer.stackblitz.com/codeflow/what-is-codeflow).
[![Open in Codeflow](https://developer.stackblitz.com/img/open_in_codeflow.svg)](https://pr.new/elk-zone/elk)
### Local Setup
To develop and test the Elk package:
1. Fork the Elk repository to your own GitHub account and then clone it to your local device.
2. Ensure using the latest Node.js (16.x).
2. Ensure using the LTS version of Node.js.
If you have [nvm](https://github.com/nvm-sh/nvm), you can run `nvm i` to install the required version.
3. The package manager used to install and link dependencies must be [pnpm](https://pnpm.io/) v7. To use it you must first enable [Corepack](https://github.com/nodejs/corepack) by running `corepack enable`. (Note: on Linux in a standard Node 16+ environment, you should follow the instructions to install via Node's `corepack` rather than using the `curl` command)
3. The package manager used to install and link dependencies must be [pnpm](https://pnpm.io/) v9. To use it you must first enable [Corepack](https://github.com/nodejs/corepack) by running `corepack enable`. (Note: on Linux in a standard Node 20+ environment, you should follow the instructions to install via Node's `corepack` rather than using the `curl` command)
4. Check out a branch where you can work and commit your changes:
```shell
@ -83,21 +77,21 @@ Simple approach used by most websites of relying on direction set in HTML elemen
We've added some `UnoCSS` utilities styles to help you with that:
- Do not use `left/right` padding and margin: for example `pl-1`. Use `padding-inline-start/end` instead. So `pl-1` should be `ps-1`, `pr-1` should be `pe-1`. The same rules apply to margin.
- Do not use `rtl-` classes, such as `rtl-left-0`.
- For icons that should be rotated for RTL, add `class="rtl-flip"`. This can only be used for icons outside of elements with `dir="auto"`, such as timeline, and is the only exception from the rule above. For icons inside the timeline, it might not work as expected.
- For icons that should be rotated for RTL, add `class="rtl-flip"`. This can only be used for icons outside of elements with `dir="auto"`, such as timeline, and is the only exception to the rule above. For icons inside the timeline, it might not work as expected.
- For absolute positioned elements, don't use `left/right`: for example `left-0`. Use `inset-inline-start/end` instead. `UnoCSS` shortcuts are `inset-is` for `inset-inline-start` and `inset-ie` for `inset-inline-end`. Example: `left-0` should be replaced with `inset-is-0`.
- If you need to change the border radius for an entire left or right side, use `border-inline-start/end`. `UnoCSS` shortcuts are `rounded-is` for left side, `rounded-ie` for right side. Example: `rounded-l-5` should be replaced with `rounded-ie-5`.
- If you need to change the border radius for one corner, use `border-start-end-radius` and similar rules. `UnoCSS` shortcuts are `rounded` + top/bottom as either `-bs` (top) or `-be` (bottom) + left/right as either `-is` (left) or `-ie` (right). Example: `rounded-tl-0` should be replaced with `rounded-bs-is-0`.
## Internationalization
We are using [vue-i18n](https://vue-i18n.intlify.dev/) via [nuxt-i18n](https://v8.i18n.nuxtjs.org/) to handle internationalization.
We are using [vue-i18n](https://vue-i18n.intlify.dev/) via [nuxt-i18n](https://i18n.nuxtjs.org/) to handle internationalization.
You can check the current [translation status](https://docs.elk.zone/docs/guide/contributing#translation-status): more instructions on the table caption.
You can check the current [translation status](https://docs.elk.zone/guide/contributing#translation-status): more instructions on the table caption.
If you are updating a translation in your local environment, you can run the following commands to check the status:
- from root folder: `nr prepare-translation-status`
- change to `docs` folder and run docs dev server `nr dev`
- open `http://localhost:3000/docs/guide/contributing#translation-status` in your browser
- open `http://localhost:3000/guide/contributing#translation-status` in your browser
### Adding a new language

View file

@ -6,7 +6,10 @@ WORKDIR /elk
FROM base AS builder
# Prepare pnpm https://pnpm.io/installation#using-corepack
RUN corepack enable
# workaround for npm registry key change
# ref. `pnpm@10.1.0` / `pnpm@9.15.4` cannot be installed due to key id mismatch · Issue #612 · nodejs/corepack
# - https://github.com/nodejs/corepack/issues/612#issuecomment-2629496091
RUN npm i -g corepack@latest && corepack enable
# Prepare deps
RUN apk update

View file

@ -1,28 +1,16 @@
<p align="center">
<a href="https://elk.zone" target="_blank" rel="noopener noreferrer">
<img width="160" height="160" src="./public/logo.svg" alt="Elk logo">
</a>
</p>
# Yolk
<h1 align="center"/>Elk <sup><em>alpha</em></sup></h1>
Hi! Yolk is my custom fork of [Elk](https://github.com/elk-zon/elk), a nimble Mastodon client.
<p align="center">
A nimble Mastodon web client
</p>
I [decided](https://social.ayco.io/@ayo/114921112446517000) to have a personal fork of Elk because I really like the cross-account functionalities I use it for (e.g., I can open the Explore tab of my fosstodon account, then engage in a post with my self-hosted account, etc)... but I find sometimes I want to change little things which will make the app a bit more opinionated on my tastes (e.g., icons, colors, spacing, etc)... and some behavioral features.
<br/>
<p align="center">
<a href="https://chat.elk.zone"><img src="https://img.shields.io/badge/chat-discord-blue?style=flat&logo=discord" alt="discord chat"></a>
<a href="https://pr.new/elk-zone/elk"><img src="https://developer.stackblitz.com/img/start_pr_dark_small.svg" alt="Start new PR in StackBlitz Codeflow"></a>
<a href="https://volta.net/elk-zone/elk?utm_source=elk_readme"><img src="https://user-images.githubusercontent.com/904724/209143798-32345f6c-3cf8-4e06-9659-f4ace4a6acde.svg" alt="Open board on Volta"></a>
</p>
<br/>
I think doing this will make me use it as my main app daily. I have been switching between multiple apps because each one have strengths & weaknesses of their own.
<p align="center">
<a href="https://elk.zone/" target="_blank" rel="noopener noreferrer" >
<img src="./public/elk-og.png" alt="Elk screenshots" width="600" height="auto">
</a>
</p>
Crucial fixes (if I find them), quality of life improvements, and mastodon API feature parity will still go upstream to the main Elk project.
~ Ayo Ayco
---
## ⚠️ Elk is in Alpha
@ -44,72 +32,19 @@ One could put Elk behind popular reverse proxies with SSL Handling like Traefik,
1. checkout source ```git clone https://github.com/elk-zone/elk.git```
1. got into new source dir: ```cd elk```
1. build Docker image: ```docker build .```
1. create local storage directory for settings: ```mkdir elk-storage```
1. adjust permissions of storage dir: ```sudo chown 911:911 ./elk-storage```
1. start container: ```docker-compose up -d```
1. start container: ```docker-compose up --build -d```
> [!NOTE]
> The provided Dockerfile creates a container which will eventually run Elk as non-root user and create a persistent named Docker volume upon first start (if that volume does not yet exist). This volume is always created with root permission. Failing to change the permissions of ```/elk/data``` inside this volume to UID:GID 911 (as specified for Elk in the Dockerfile) will prevent Elk from storing it's config for user accounts. You either have to fix the permission in the created named volume, or mount a directory with the correct permission to ```/elk/data``` into the container.
### Ecosystem
These are known deployments using Elk as an alternative Web client for Mastodon servers or as a base for other projects in the fediverse:
- [elk.fedified.com](https://elk.fedified.com) - Use Elk to log into any compatible instance
- [elk.me.uk](https://elk.me.uk) - Use Elk to log into any compatible instance, hosted on Google Cloud Run with no Cloudflare proxy
- [elk.h4.io](https://elk.h4.io) - Use Elk for the `h4.io` Server
- [elk.universeodon.com](https://elk.universeodon.com) - Use Elk for the Universeodon Server
- [elk.vmst.io](https://elk.vmst.io) - Use Elk for the `vmst.io` Server
- [elk.hostux.social](https://elk.hostux.social) - Use Elk for the `hostux.social` Server
- [elk.cupoftea.social](https://elk.cupoftea.social) - Use Elk for the `cupoftea.social` Server
- [elk.aus.social](https://elk.aus.social) - Use Elk for the `aus.social` Server
- [elk.mstdn.ca](https://elk.mstdn.ca) - Use Elk for the `mstdn.ca` Server
- [elk.mastodonapp.uk](https://elk.mastodonapp.uk) - Use Elk for the `mastodonapp.uk` Server
- [elk.bolha.us](https://elk.bolha.us) - Use Elk for the `bolha.us` Server
> **Note**: Community deployments are **NOT** maintained by the Elk team. It may not be synced with Elk's source code. Please do your own research about the host servers before using them.
## 💖 Sponsors
We are grateful for the generous sponsorship and help of:
<a href="https://nuxtlabs.com/" target="_blank" rel="noopener noreferrer" >
<img src="./images/nuxtlabs.svg" alt="NuxtLabs" height="85">
</a>
<br><br>
<a href="https://stackblitz.com/" target="_blank" rel="noopener noreferrer" >
<img src="./images/stackblitz.svg" alt="StackBlitz" height="85">
</a>
<br><br>
And all the companies and individuals sponsoring Elk Team and the members. If you're enjoying the app, consider sponsoring us:
- [Elk Team's GitHub Sponsors](https://github.com/sponsors/elk-zone)
Or you can sponsor our core team members individually:
- [Anthony Fu](https://github.com/sponsors/antfu)
- [Daniel Roe](https://github.com/sponsors/danielroe)
- [三咲智子 Kevin Deng](https://github.com/sponsors/sxzz)
- [Patak](https://github.com/sponsors/patak-dev)
We would also appreciate sponsoring other contributors to the Elk project. If someone helps you solve an issue or implement a feature you wanted, supporting them would help make this project and OS more sustainable.
## 📍 Roadmap
[Open board on Volta](https://volta.net/elk-zone/elk)
## 🧑‍💻 Contributing
We're really excited that you're interested in contributing to Elk! Before submitting your contribution, please read through the following guide.
### Online
You can use [StackBlitz Codeflow](https://stackblitz.com/codeflow) to fix bugs or implement features. You'll also see a Codeflow button on PRs to review them without a local setup. Once the elk repo has been cloned in Codeflow, the dev server will start automatically and print the URL to open the App. You should receive a prompt in the bottom-right suggesting to open it in the Editor or in another Tab. To learn more, check out the [Codeflow docs](https://developer.stackblitz.com/codeflow/what-is-codeflow).
[![Open in Codeflow](https://developer.stackblitz.com/img/open_in_codeflow.svg)](https://pr.new/elk-zone/elk)
### Local Setup
Clone the repository and run on the root folder:

View file

@ -1,13 +1,18 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
defineProps<{
const { account } = defineProps<{
account: mastodon.v1.Account
square?: boolean
}>()
const loaded = ref(false)
const error = ref(false)
const preferredMotion = usePreferredReducedMotion()
const accountAvatarSrc = computed(() => {
return preferredMotion.value === 'reduce' ? (account?.avatarStatic ?? account.avatar) : account.avatar
})
</script>
<template>
@ -16,10 +21,10 @@ const error = ref(false)
width="400"
height="400"
select-none
:src="(error || !loaded) ? 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' : account.avatar"
:src="(error || !loaded) ? 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' : accountAvatarSrc"
:alt="$t('account.avatar_description', [account.username])"
loading="lazy"
class="account-avatar"
class="account-avatar object-cover"
:class="(loaded ? 'bg-base' : 'bg-gray:10') + (square ? ' ' : ' rounded-full')"
:style="{ 'clip-path': square ? `url(#avatar-mask)` : 'none' }"
v-bind="$attrs"

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
import type { mastodon } from 'masto'
defineOptions({

View file

@ -11,7 +11,7 @@ defineProps<{
text-secondary-light
>
<slot name="prepend" />
<CommonTooltip no-auto-focus :content="$t('account.bot')" :disabled="showLabel">
<CommonTooltip :content="$t('account.bot')" :disabled="showLabel">
<div i-mdi:robot-outline />
</CommonTooltip>
<div v-if="showLabel">

View file

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const { account, hideEmojis = false } = defineProps<{
const { hideEmojis = false } = defineProps<{
account: mastodon.v1.Account
hideEmojis?: boolean
}>()

View file

@ -1,8 +1,8 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
import { toggleFollowAccount, useRelationship } from '~~/composables/masto/relationship'
import { toggleFollowAccount, useRelationship } from '~/composables/masto/relationship'
const { account, command, context, ...props } = defineProps<{
const { account, context, command, ...props } = defineProps<{
account: mastodon.v1.Account
relationship?: mastodon.v1.Relationship
context?: 'followedBy' | 'following'
@ -13,6 +13,7 @@ const { t } = useI18n()
const isSelf = useSelfAccount(() => account)
const enable = computed(() => !isSelf.value && currentUser.value)
const relationship = computed(() => props.relationship || useRelationship(account).value)
const isLoading = computed(() => relationship.value === undefined)
const { client } = useMasto()
@ -62,6 +63,10 @@ const buttonStyle = computed(() => {
if (relationship.value ? relationship.value.following : context === 'following')
return `text-base ${relationship.value?.followedBy ? 'border-strong' : 'border-base'}`
// If loading, use a plain style
if (isLoading.value)
return 'text-base border-base'
// If not following, use a button style
return 'text-inverted bg-primary border-primary'
})
@ -77,28 +82,33 @@ const buttonStyle = computed(() => {
:hover="!relationship?.blocking && !relationship?.muting && relationship?.following ? 'border-red text-red' : 'bg-base border-primary text-primary'"
@click="relationship?.blocking ? unblock() : relationship?.muting ? unmute() : toggleFollowAccount(relationship!, account)"
>
<template v-if="relationship?.blocking">
<span elk-group-hover="hidden">{{ $t('account.blocking') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unblock') }}</span>
</template>
<template v-if="relationship?.muting">
<span elk-group-hover="hidden">{{ $t('account.muting') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unmute') }}</span>
</template>
<template v-else-if="relationship ? relationship.following : context === 'following'">
<span elk-group-hover="hidden">{{ relationship?.followedBy ? $t('account.mutuals') : $t('account.following') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unfollow') }}</span>
</template>
<template v-else-if="relationship?.requested">
<span elk-group-hover="hidden">{{ $t('account.follow_requested') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.withdraw_follow_request') }}</span>
</template>
<template v-else-if="relationship ? relationship.followedBy : context === 'followedBy'">
<span elk-group-hover="hidden">{{ $t('account.follows_you') }}</span>
<span hidden elk-group-hover="inline">{{ account.locked ? $t('account.request_follow') : $t('account.follow_back') }}</span>
<template v-if="isLoading">
<span i-svg-spinners-180-ring-with-bg />
</template>
<template v-else>
<span>{{ account.locked ? $t('account.request_follow') : $t('account.follow') }}</span>
<template v-if="relationship?.blocking">
<span elk-group-hover="hidden">{{ $t('account.blocking') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unblock') }}</span>
</template>
<template v-if="relationship?.muting">
<span elk-group-hover="hidden">{{ $t('account.muting') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unmute') }}</span>
</template>
<template v-else-if="relationship ? relationship.following : context === 'following'">
<span elk-group-hover="hidden">{{ relationship?.followedBy ? $t('account.mutuals') : $t('account.following') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.unfollow') }}</span>
</template>
<template v-else-if="relationship?.requested">
<span elk-group-hover="hidden">{{ $t('account.follow_requested') }}</span>
<span hidden elk-group-hover="inline">{{ $t('account.withdraw_follow_request') }}</span>
</template>
<template v-else-if="relationship ? relationship.followedBy : context === 'followedBy'">
<span elk-group-hover="hidden">{{ $t('account.follows_you') }}</span>
<span hidden elk-group-hover="inline">{{ account.locked ? $t('account.request_follow') : $t('account.follow_back') }}</span>
</template>
<template v-else>
<span>{{ account.locked ? $t('account.request_follow') : $t('account.follow') }}</span>
</template>
</template>
</button>
</template>

View file

@ -38,7 +38,7 @@ async function rejectFollowRequest() {
<template>
<div flex gap-4>
<template v-if="relationship?.requestedBy">
<CommonTooltip :content="$t('account.authorize')" no-auto-focus>
<CommonTooltip :content="$t('account.authorize')">
<button
type="button"
rounded-full text-sm p2 border-1
@ -48,7 +48,7 @@ async function rejectFollowRequest() {
<span block text-current i-ri:check-fill />
</button>
</CommonTooltip>
<CommonTooltip :content="$t('account.reject')" no-auto-focus>
<CommonTooltip :content="$t('account.reject')">
<button
type="button"
rounded-full text-sm p2 border-1

View file

@ -189,19 +189,21 @@ async function copyAccountName() {
<div flex="~ col gap1" pt2>
<div flex gap2 items-center flex-wrap>
<AccountDisplayName :account="account" font-bold sm:text-2xl text-xl />
<AccountRolesIndicator v-if="account.roles?.length" :account="account" />
<AccountLockIndicator v-if="account.locked" show-label />
<AccountBotIndicator v-if="account.bot" show-label />
</div>
<div flex items-center gap-1>
<AccountHandle :account="account" overflow-unset line-clamp-unset />
<CommonTooltip placement="bottom" :content="$t('account.copy_account_name')" no-auto-focus flex>
<CommonTooltip placement="bottom" :content="$t('account.copy_account_name')" flex>
<button text-secondary-light text-sm :class="isCopied ? 'i-ri:check-fill text-green' : 'i-ri:file-copy-line'" @click="copyAccountName">
<span sr-only>{{ $t('account.copy_account_name') }}</span>
</button>
</CommonTooltip>
</div>
<div self-start mt-1>
<AccountRolesIndicator v-if="account.roles?.length" :account="account" />
</div>
</div>
</div>
<label

View file

@ -12,7 +12,7 @@ const relationship = useRelationship(account)
<div v-show="relationship" flex="~ col gap2" rounded min-w-90 max-w-120 z-100 overflow-hidden p-4>
<div flex="~ gap2" items-center>
<NuxtLink :to="getAccountRoute(account)" flex-auto rounded-full hover:bg-active transition-100 pe5 me-a>
<AccountInfo :account="account" />
<AccountInfo :account="account" :hover-card="false" />
</NuxtLink>
<AccountFollowButton text-sm :account="account" :relationship="relationship" />
</div>

View file

@ -58,6 +58,7 @@ const userSettings = useUserSettings()
:delay="{ show: 500, hide: 100 }"
v-bind="$attrs"
:close-on-content-click="false"
no-auto-focus
>
<slot />
<template #popper>

View file

@ -5,7 +5,7 @@ defineOptions({
inheritAttrs: false,
})
const { account, as = 'div' } = defineProps<{
const { as = 'div' } = defineProps<{
account: mastodon.v1.Account
as?: string
hoverCard?: boolean
@ -16,18 +16,20 @@ const { account, as = 'div' } = defineProps<{
<!-- TODO: Make this work for both buttons and links -->
<!-- This is sometimes (like in the sidebar) used directly as a button, and sometimes, like in follow notifications, as a link. I think this component may need a second refactor that either lets an implementation pass in a link or an action and adapt to what's passed in, or the implementations need to be updated to wrap in the action they want to take and this be just the layout for these items -->
<template>
<component :is="as" flex gap-3 v-bind="$attrs">
<component :is="as" flex items-center gap-3 v-bind="$attrs">
<AccountHoverWrapper :disabled="!hoverCard" :account="account">
<AccountBigAvatar :account="account" shrink-0 :square="square" />
</AccountHoverWrapper>
<div flex="~ col" shrink pt-1 h-full overflow-hidden justify-center leading-none select-none>
<div flex="~ col" shrink h-full overflow-hidden justify-center leading-none select-none p-1>
<div flex="~" gap-2>
<AccountDisplayName :account="account" font-bold line-clamp-1 ws-pre-wrap break-all text-lg />
<AccountRolesIndicator v-if="account.roles?.length" :account="account" :limit="1" />
<AccountLockIndicator v-if="account.locked" text-xs />
<AccountBotIndicator v-if="account.bot" text-xs />
</div>
<AccountHandle :account="account" text-secondary-light />
<div self-start mt-1>
<AccountRolesIndicator v-if="account.roles?.length" :account="account" :limit="1" />
</div>
</div>
</component>
</template>

View file

@ -13,7 +13,7 @@ const { t } = useI18n()
text-secondary-light
>
<slot name="prepend" />
<CommonTooltip no-auto-focus content="Lock" :disabled="showLabel">
<CommonTooltip content="Lock" :disabled="showLabel">
<div i-ri:lock-line />
</CommonTooltip>
<div v-if="showLabel">

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
import { toggleBlockAccount, toggleBlockDomain, toggleMuteAccount } from '~~/composables/masto/relationship'
import { toggleBlockAccount, toggleBlockDomain, toggleMuteAccount } from '~/composables/masto/relationship'
const { account } = defineProps<{
account: mastodon.v1.Account
@ -25,13 +25,16 @@ function shareAccount() {
}
async function toggleReblogs() {
if (!relationship.value!.showingReblogs && await openConfirmDialog({
title: t('confirm.show_reblogs.title'),
description: t('confirm.show_reblogs.description', [account.acct]),
confirm: t('confirm.show_reblogs.confirm'),
cancel: t('confirm.show_reblogs.cancel'),
}) !== 'confirm')
return
if (!relationship.value!.showingReblogs) {
const dialogChoice = await openConfirmDialog({
title: t('confirm.show_reblogs.title'),
description: t('confirm.show_reblogs.description', [account.acct]),
confirm: t('confirm.show_reblogs.confirm'),
cancel: t('confirm.show_reblogs.cancel'),
})
if (dialogChoice.choice !== 'confirm')
return
}
const showingReblogs = !relationship.value?.showingReblogs
relationship.value = await client.value.v1.accounts.$select(account.id).follow({ reblogs: showingReblogs })
@ -53,7 +56,7 @@ async function removeUserNote() {
<template>
<CommonDropdown :eager-mount="command">
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group aria-label="More actions">
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group :aria-label="t('actions.more')">
<div rounded-5 p2 elk-group-hover="bg-purple/10">
<div i-ri:more-2-fill />
</div>
@ -68,6 +71,7 @@ async function removeUserNote() {
/>
</NuxtLink>
<CommonDropdownItem
is="button"
v-if="isShareSupported"
:text="$t('menu.share_account', [`@${account.acct}`])"
icon="i-ri:share-line"
@ -78,12 +82,14 @@ async function removeUserNote() {
<template v-if="currentUser">
<template v-if="!isSelf">
<CommonDropdownItem
is="button"
:text="$t('menu.mention_account', [`@${account.acct}`])"
icon="i-ri:at-line"
:command="command"
@click="mentionUser(account)"
/>
<CommonDropdownItem
is="button"
:text="$t('menu.direct_message_account', [`@${account.acct}`])"
icon="i-ri:message-3-line"
:command="command"
@ -91,6 +97,7 @@ async function removeUserNote() {
/>
<CommonDropdownItem
is="button"
v-if="!relationship?.showingReblogs"
icon="i-ri:repeat-line"
:text="$t('menu.show_reblogs', [`@${account.acct}`])"
@ -98,6 +105,7 @@ async function removeUserNote() {
@click="toggleReblogs()"
/>
<CommonDropdownItem
is="button"
v-else
:text="$t('menu.hide_reblogs', [`@${account.acct}`])"
icon="i-ri:repeat-line"
@ -106,6 +114,7 @@ async function removeUserNote() {
/>
<CommonDropdownItem
is="button"
v-if="!relationship?.note || relationship?.note?.length === 0"
:text="$t('menu.add_personal_note', [`@${account.acct}`])"
icon="i-ri-edit-2-line"
@ -113,6 +122,7 @@ async function removeUserNote() {
@click="addUserNote()"
/>
<CommonDropdownItem
is="button"
v-else
:text="$t('menu.remove_personal_note', [`@${account.acct}`])"
icon="i-ri-edit-2-line"
@ -121,6 +131,7 @@ async function removeUserNote() {
/>
<CommonDropdownItem
is="button"
v-if="!relationship?.muting"
:text="$t('menu.mute_account', [`@${account.acct}`])"
icon="i-ri:volume-mute-line"
@ -128,6 +139,7 @@ async function removeUserNote() {
@click="toggleMuteAccount (relationship!, account)"
/>
<CommonDropdownItem
is="button"
v-else
:text="$t('menu.unmute_account', [`@${account.acct}`])"
icon="i-ri:volume-up-fill"
@ -136,6 +148,7 @@ async function removeUserNote() {
/>
<CommonDropdownItem
is="button"
v-if="!relationship?.blocking"
:text="$t('menu.block_account', [`@${account.acct}`])"
icon="i-ri:forbid-2-line"
@ -143,6 +156,7 @@ async function removeUserNote() {
@click="toggleBlockAccount (relationship!, account)"
/>
<CommonDropdownItem
is="button"
v-else
:text="$t('menu.unblock_account', [`@${account.acct}`])"
icon="i-ri:checkbox-circle-line"
@ -152,6 +166,7 @@ async function removeUserNote() {
<template v-if="getServerName(account) !== currentServer">
<CommonDropdownItem
is="button"
v-if="!relationship?.domainBlocking"
:text="$t('menu.block_domain', [getServerName(account)])"
icon="i-ri:shut-down-line"
@ -159,6 +174,7 @@ async function removeUserNote() {
@click="toggleBlockDomain(relationship!, account)"
/>
<CommonDropdownItem
is="button"
v-else
:text="$t('menu.unblock_domain', [getServerName(account)])"
icon="i-ri:restart-line"
@ -168,6 +184,7 @@ async function removeUserNote() {
</template>
<CommonDropdownItem
is="button"
:text="$t('menu.report_account', [`@${account.acct}`])"
icon="i-ri:flag-2-line"
:command="command"

View file

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const { paginator, account, context } = defineProps<{
const { account, context } = defineProps<{
paginator: mastodon.Paginator<mastodon.v1.Account[], mastodon.DefaultPaginationParams | undefined>
context?: 'following' | 'followers'
account?: mastodon.v1.Account

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import type { CommonRouteTabOption } from '~/types'
import type { CommonRouteTabOption } from '#shared/types'
const { t } = useI18n()
const route = useRoute()

View file

@ -5,7 +5,7 @@ defineOptions({
inheritAttrs: false,
})
const { tagName, disabled } = defineProps<{
const { tagName } = defineProps<{
tagName?: string
disabled?: boolean
}>()
@ -33,6 +33,7 @@ const userSettings = useUserSettings()
:delay="{ show: 500, hide: 100 }"
v-bind="$attrs"
:close-on-content-click="false"
no-auto-focus
>
<slot />
<template #popper>

View file

@ -38,12 +38,14 @@ onMounted(() => {
announce(t('a11y.loading_page'))
})
router.afterEach((to, from) => {
from && setTimeout(() => {
requestAnimationFrame(() => {
const title = document.title.trim().split('|')
announce(t('a11y.route_loaded', [title[0]]))
})
}, 512)
if (from) {
setTimeout(() => {
requestAnimationFrame(() => {
const title = document.title.trim().split('|')
announce(t('a11y.route_loaded', [title[0]]))
})
}, 512)
}
})
})
</script>

View file

@ -1,17 +1,16 @@
<script setup lang="ts">
import type { AriaLive } from '~/composables/aria'
// tsc complaining when using $defineProps
withDefaults(defineProps<{
title: string
const {
ariaLive = 'polite',
heading = 'h2',
messageKey = (message: any) => message,
} = defineProps<{
ariaLive?: AriaLive
messageKey?: (message: any) => any
heading?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
}>(), {
heading: 'h2',
messageKey: (message: any) => message,
ariaLive: 'polite',
})
title: string
messageKey?: (message: any) => any
}>()
const { announceLogs, appendLogs, clearLogs, logs } = useAriaLog()

View file

@ -1,12 +1,9 @@
<script setup lang="ts">
import type { AriaLive } from '~/composables/aria'
// tsc complaining when using $defineProps
withDefaults(defineProps<{
const { ariaLive = 'polite' } = defineProps<{
ariaLive?: AriaLive
}>(), {
ariaLive: 'polite',
})
}>()
const { announceStatus, clearStatus, status } = useAriaStatus()

View file

@ -1,11 +1,7 @@
<script lang="ts" setup>
<script setup lang="ts">
import type { ResolvedCommand } from '~/composables/command'
const {
cmd,
index,
active = false,
} = defineProps<{
const { active = false } = defineProps<{
cmd: ResolvedCommand
index: number
active?: boolean

View file

@ -1,11 +1,11 @@
<script setup lang="ts">
const props = defineProps<{
const { name } = defineProps<{
name: string
}>()
const isMac = useIsMac()
const keys = computed(() => props.name.toLowerCase().split('+'))
const keys = computed(() => name.toLowerCase().split('+'))
</script>
<template>

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
import type { SearchResult as SearchResultType } from '~/composables/masto/search'
import type { CommandScope, QueryResult, QueryResultItem } from '~/composables/command'
import type { SearchResult as SearchResultType } from '~/composables/masto/search'
const emit = defineEmits<{
(event: 'close'): void
@ -22,7 +22,7 @@ onMounted(() => {
const commandMode = computed(() => input.value.startsWith('>'))
const query = computed(() => commandMode ? '' : input.value.trim())
const query = computed(() => commandMode.value ? '' : input.value.trim())
const { accounts, hashtags, loading } = useSearch(query)
@ -61,7 +61,7 @@ const searchResult = computed<QueryResult>(() => {
}
})
const result = computed<QueryResult>(() => commandMode
const result = computed<QueryResult>(() => commandMode.value
? registry.query(scopes.value.map(s => s.id).join('.'), input.value.slice(1).trim())
: searchResult.value,
)

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
const emit = defineEmits<{
(event: 'close'): void
}>()

View file

@ -3,7 +3,7 @@ defineOptions({
inheritAttrs: false,
})
const { blurhash = '', src, srcset, shouldLoadImage = true } = defineProps<{
const { blurhash = '', shouldLoadImage = true } = defineProps<{
blurhash?: string
src: string
srcset?: string

View file

@ -4,6 +4,8 @@ defineProps<{
hover?: boolean
iconChecked?: string
iconUnchecked?: string
checkedIconColor?: string
prependCheckbox?: boolean
}>()
const modelValue = defineModel<boolean | null>()
</script>
@ -15,9 +17,12 @@ const modelValue = defineModel<boolean | null>()
v-bind="$attrs"
@click.prevent="modelValue = !modelValue"
>
<span v-if="label" flex-1 ms-2 pointer-events-none>{{ label }}</span>
<span v-if="label && !prependCheckbox" flex-1 ms-2 pointer-events-none>{{ label }}</span>
<span
:class="modelValue ? (iconChecked ?? 'i-ri:checkbox-line') : (iconUnchecked ?? 'i-ri:checkbox-blank-line')"
:class="[
modelValue ? (iconChecked ?? 'i-ri:checkbox-line') : (iconUnchecked ?? 'i-ri:checkbox-blank-line'),
modelValue && checkedIconColor,
]"
text-lg
aria-hidden="true"
/>
@ -26,6 +31,7 @@ const modelValue = defineModel<boolean | null>()
type="checkbox"
sr-only
>
<span v-if="label && prependCheckbox" flex-1 ms-2 pointer-events-none>{{ label }}</span>
</label>
</template>

View file

@ -1,27 +1,20 @@
<script lang="ts" setup>
<script setup lang="ts">
import type { Boundaries } from 'vue-advanced-cropper'
import { Cropper } from 'vue-advanced-cropper'
import 'vue-advanced-cropper/dist/style.css'
export interface Props {
const { stencilAspectRatio = 1 / 1, stencilSizePercentage = 0.9 } = defineProps<{
/** Crop frame aspect ratio (width/height), default 1/1 */
stencilAspectRatio?: number
/** The ratio of the longest edge of the cut box to the length of the cut screen, default 0.9, not more than 1 */
stencilSizePercentage?: number
}
const props = withDefaults(defineProps<Props>(), {
stencilAspectRatio: 1 / 1,
stencilSizePercentage: 0.9,
})
}>()
const file = defineModel<File | null>()
const cropperDialog = ref(false)
const cropper = ref<InstanceType<typeof Cropper>>()
const cropperFlag = ref(false)
const cropperImage = reactive({
src: '',
type: 'image/jpg',
@ -29,8 +22,8 @@ const cropperImage = reactive({
function stencilSize({ boundaries }: { boundaries: Boundaries }) {
return {
width: boundaries.width * props.stencilSizePercentage,
height: boundaries.height * props.stencilSizePercentage,
width: boundaries.width * stencilSizePercentage,
height: boundaries.height * stencilSizePercentage,
}
}
@ -82,7 +75,7 @@ function cropImage() {
}"
:stencil-size="stencilSize"
:stencil-props="{
aspectRatio: props.stencilAspectRatio,
aspectRatio: stencilAspectRatio,
movable: false,
resizable: false,
handlers: {},

View file

@ -1,22 +1,22 @@
<script lang="ts" setup>
import { fileOpen } from 'browser-fs-access'
<script setup lang="ts">
import type { FileWithHandle } from 'browser-fs-access'
import { fileOpen } from 'browser-fs-access'
const props = withDefaults(defineProps<{
const {
original,
allowedFileTypes = ['image/jpeg', 'image/png'],
allowedFileSize = 1024 * 1024 * 5, // 5 MB
} = defineProps<{
/** The image src before change */
original?: string
/** Allowed file types */
allowedFileTypes?: string[]
/** Allowed file size */
allowedFileSize?: number
imgClass?: string
loading?: boolean
}>(), {
allowedFileTypes: () => ['image/jpeg', 'image/png'],
allowedFileSize: 1024 * 1024 * 5, // 5 MB
})
}>()
const emit = defineEmits<{
(event: 'pick', value: FileWithHandle): void
(event: 'error', code: number, message: string): void
@ -26,7 +26,7 @@ const file = defineModel<FileWithHandle | null>()
const { t } = useI18n()
const defaultImage = computed(() => props.original || '')
const defaultImage = computed(() => original || '')
/** Preview of selected images */
const previewImage = ref('')
/** The current images on display */
@ -37,14 +37,14 @@ async function pickImage() {
return
const image = await fileOpen({
description: 'Image',
mimeTypes: props.allowedFileTypes,
mimeTypes: allowedFileTypes,
})
if (!props.allowedFileTypes.includes(image.type)) {
if (!allowedFileTypes.includes(image.type)) {
emit('error', 1, t('error.unsupported_file_format'))
return
}
else if (image.size > props.allowedFileSize) {
else if (image.size > allowedFileSize) {
emit('error', 2, t('error.file_size_cannot_exceed_n_mb', [5]))
return
}

View file

@ -2,7 +2,7 @@
const {
zIndex = 100,
background = 'transparent',
} = $defineProps<{
} = defineProps<{
zIndex?: number
background?: string
}>()

View file

@ -1,15 +1,15 @@
<script setup lang="ts" generic="T, O, U = T">
import type { mastodon } from 'masto'
// @ts-expect-error missing types
import { DynamicScroller } from 'vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import type { mastodon } from 'masto'
import type { UnwrapRef } from 'vue'
const {
paginator,
stream,
keyProp = 'id',
virtualScroller = false,
stream,
eventType,
preprocess,
endMessage = true,
} = defineProps<{
@ -17,6 +17,7 @@ const {
keyProp?: keyof T
virtualScroller?: boolean
stream?: mastodon.streaming.Subscription
eventType?: 'update' | 'notification'
preprocess?: (items: (U | T)[]) => U[]
endMessage?: boolean | string
}>()
@ -31,7 +32,7 @@ defineSlots<{
newer: U // newer is undefined when index === 0
}) => void
items: (props: {
items: UnwrapRef<U[]>
items: U[]
}) => void
updater: (props: {
number: number
@ -44,7 +45,7 @@ defineSlots<{
const { t } = useI18n()
const nuxtApp = useNuxtApp()
const { items, prevItems, update, state, endAnchor, error } = usePaginator(paginator, toRef(() => stream), preprocess)
const { items, prevItems, update, state, endAnchor, error } = usePaginator(paginator, toRef(() => stream), eventType, preprocess)
nuxtApp.hook('elk-logo:click', () => {
update()
@ -72,7 +73,7 @@ defineExpose({ createEntry, removeEntry, updateEntry })
<template>
<div>
<slot v-if="prevItems.length" name="updater" v-bind="{ number: prevItems.length, update }" />
<slot name="items" :items="items">
<slot name="items" :items="items as U[]">
<template v-if="virtualScroller">
<DynamicScroller
v-slot="{ item, active, index }"

View file

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { CommonRouteTabMoreOption, CommonRouteTabOption } from '~/types'
import type { CommonRouteTabMoreOption, CommonRouteTabOption } from '#shared/types'
const { options, command, replace, preventScrollTop = false, moreOptions } = defineProps<{
const { options, command, preventScrollTop = false } = defineProps<{
options: CommonRouteTabOption[]
moreOptions?: CommonRouteTabMoreOption
command?: boolean
@ -14,11 +14,11 @@ const router = useRouter()
useCommands(() => command
? options.map(tab => ({
scope: 'Tabs',
name: tab.display,
icon: tab.icon ?? 'i-ri:file-list-2-line',
onActivate: () => router.replace(tab.to),
}))
scope: 'Tabs',
name: tab.display,
icon: tab.icon ?? 'i-ri:file-list-2-line',
onActivate: () => router.replace(tab.to),
}))
: [])
</script>
@ -46,7 +46,7 @@ useCommands(() => command
</template>
<template v-if="isHydrated && moreOptions?.options?.length">
<CommonDropdown placement="bottom" flex cursor-pointer mx-1.25rem>
<CommonTooltip placement="top" no-auto-focus :content="moreOptions.tooltip || t('action.more')">
<CommonTooltip placement="top" :content="moreOptions.tooltip || t('action.more')">
<button
cursor-pointer
flex

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
const { as = 'div', active } = defineProps<{
as: any
as?: string
active: boolean
}>()

View file

@ -19,19 +19,19 @@ const tabs = computed(() => {
})
})
function toValidName(otpion: string) {
return otpion.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-')
function toValidName(option: string) {
return option.toLowerCase().replace(/[^a-z0-9]/gi, '-')
}
useCommands(() => command
? tabs.value.map(tab => ({
scope: 'Tabs',
scope: 'Tabs',
name: tab.display,
icon: tab.icon ?? 'i-ri:file-list-2-line',
name: tab.display,
icon: tab.icon ?? 'i-ri:file-list-2-line',
onActivate: () => modelValue.value = tab.name,
}))
onActivate: () => modelValue.value = tab.name,
}))
: [])
</script>

View file

@ -13,6 +13,7 @@ defineProps<Props>()
v-if="isHydrated"
v-bind="$attrs"
auto-hide
no-auto-focus
>
<slot />
<template #popper>

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
import type { mastodon } from 'masto'
const {

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
import type { mastodon } from 'masto'
import sparkline from '@fnando/sparkline'

View file

@ -3,16 +3,16 @@ defineOptions({
inheritAttrs: false,
})
const props = defineProps<{
const { count } = defineProps<{
count: number
keypath: string
}>()
const { formatHumanReadableNumber, formatNumber, forSR } = useHumanReadableNumber()
const useSR = computed(() => forSR(props.count))
const rawNumber = computed(() => formatNumber(props.count))
const humanReadableNumber = computed(() => formatHumanReadableNumber(props.count))
const useSR = computed(() => forSR(count))
const rawNumber = computed(() => formatNumber(count))
const humanReadableNumber = computed(() => formatHumanReadableNumber(count))
</script>
<template>

View file

@ -1,16 +1,23 @@
<script setup lang="ts">
const props = withDefaults(defineProps<{
const {
is = 'div',
text,
description,
icon,
command,
} = defineProps<{
is?: string
text?: string
description?: string
icon?: string
checked?: boolean
command?: boolean
}>(), {
is: 'div',
})
}>()
const emit = defineEmits(['click'])
const type = computed(() => is === 'button' ? 'button' : null)
const { hide } = useDropdownContext() || {}
const el = ref<HTMLDivElement>()
@ -24,11 +31,11 @@ useCommand({
scope: 'Actions',
order: -1,
visible: () => props.command && props.text,
visible: () => command && text,
name: () => props.text!,
icon: () => props.icon ?? 'i-ri:question-line',
description: () => props.description,
name: () => text!,
icon: () => icon ?? 'i-ri:question-line',
description: () => description,
onActivate() {
const clickEvent = new MouseEvent('click', {
@ -46,6 +53,7 @@ useCommand({
v-bind="$attrs"
:is="is"
ref="el"
:type="type"
w-full
flex gap-3 items-center cursor-pointer px4 py3
select-none

View file

@ -1,10 +1,10 @@
<script setup lang="ts">
const props = defineProps<{
const { code, lang } = defineProps<{
code: string
lang?: string
}>()
const raw = computed(() => decodeURIComponent(props.code).replace(/&#39;/g, '\''))
const raw = computed(() => decodeURIComponent(code).replace(/&#39;/g, '\''))
const langMap: Record<string, string> = {
js: 'javascript',
@ -13,7 +13,7 @@ const langMap: Record<string, string> = {
}
const highlighted = computed(() => {
return props.lang ? highlightCode(raw.value, (langMap[props.lang] || props.lang) as any) : raw
return lang ? highlightCode(raw.value, (langMap[lang] || lang) as any) : raw
})
</script>

View file

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const { paginator } = defineProps<{
defineProps<{
paginator: mastodon.Paginator<mastodon.v1.Conversation[], mastodon.DefaultPaginationParams>
}>()

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
const { as, alt, dataEmojiId } = defineProps<{
const { alt, dataEmojiId } = defineProps<{
as: string
alt?: string
dataEmojiId?: string

View file

@ -8,7 +8,7 @@ const vAutoFocus = (el: HTMLElement) => el.focus()
<template>
<div my-8 px-3 sm:px-8 md:max-w-200 flex="~ col gap-4" relative>
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 aria-label="Close" @click="emit('close')">
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 :aria-label="$t('action.close')" @click="emit('close')">
<span i-ri:close-line />
</button>
@ -30,10 +30,12 @@ const vAutoFocus = (el: HTMLElement) => el.focus()
</NuxtLink>
{{ $t('help.desc_para6') }}
</p>
{{ $t('help.desc_para3') }}
<p flex="~ gap-2 wrap" mxa>
<NuxtLink hover:text-primary href="https://github.com/sponsors/elk-zone" target="_blank">
{{ $t('help.desc_para3') }}
</NuxtLink>
<p flex="~ gap-2 wrap justify-center" mxa>
<template v-for="team of elkTeamMembers" :key="team.github">
<NuxtLink :href="`https://github.com/sponsors/${team.github}`" target="_blank" external rounded-full transition duration-300 border="~ transparent" hover="scale-105 border-primary">
<NuxtLink :href="team.link" target="_blank" external rounded-full transition duration-300 border="~ transparent" hover="scale-105 border-primary">
<img :src="`/avatars/${team.github}-100x100.png`" :alt="team.display" rounded-full w-15 h-15 height="60" width="60">
</NuxtLink>
</template>

View file

@ -15,9 +15,10 @@ const isRemoved = ref(false)
async function edit() {
try {
isRemoved.value
? await client.v1.lists.$select(list).accounts.create({ accountIds: [account.id] })
: await client.v1.lists.$select(list).accounts.remove({ accountIds: [account.id] })
if (isRemoved.value)
await client.v1.lists.$select(list).accounts.create({ accountIds: [account.id] })
else
await client.v1.lists.$select(list).accounts.remove({ accountIds: [account.id] })
isRemoved.value = !isRemoved.value
}
catch (err) {
@ -39,11 +40,11 @@ async function edit() {
<CommonTooltip
:content="isRemoved ? $t('list.add_account') : $t('list.remove_account')"
:hover="isRemoved ? 'text-green' : 'text-red'"
no-auto-focus
>
<button
text-sm p2 border-1 transition-colors
border-dark
bg-base
btn-action-icon
@click="edit"
>

View file

@ -0,0 +1,23 @@
<script setup lang="ts">
import type { SearchResult } from '~/composables/masto/search'
defineProps<{
result: SearchResult
active: boolean
}>()
</script>
<template>
<CommonScrollIntoView
as="div"
:active="active"
py2 block px2
:aria-selected="active"
:class="{ 'bg-active': active }"
>
<AccountInfo
v-if="result.type === 'account'"
:account="result.data"
/>
</CommonScrollIntoView>
</template>

View file

@ -32,9 +32,9 @@ async function prepareEdit() {
async function cancelEdit() {
isEditing.value = false
actionError.value = undefined
reset()
await nextTick()
reset()
editBtn.value?.focus()
}
@ -68,7 +68,7 @@ async function removeList() {
actionError.value = undefined
await nextTick()
if (confirmDelete === 'confirm') {
if (confirmDelete.choice === 'confirm') {
await nextTick()
try {
await client.v1.lists.$select(list.value.id).remove()
@ -92,7 +92,7 @@ async function removeList() {
async function clearError() {
actionError.value = undefined
await nextTick()
if (isEditing)
if (isEditing.value)
input.value?.focus()
else
deleteBtn.value?.focus()
@ -113,7 +113,7 @@ onDeactivated(cancelEdit)
bg-base border="~ base" h10 m2 ps-1 pe-4 rounded-3 w-full flex="~ row"
items-center relative focus-within:box-shadow-outline gap-3
>
<CommonTooltip v-if="isEditing" :content="$t('list.cancel_edit')" no-auto-focus>
<CommonTooltip v-if="isEditing" :content="$t('list.cancel_edit')">
<button
type="button"
rounded-full text-sm p2 transition-colors
@ -136,7 +136,7 @@ onDeactivated(cancelEdit)
{{ form.title }}
</NuxtLink>
<div mr4 flex gap2>
<CommonTooltip v-if="isEditing" :content="$t('list.save')" no-auto-focus>
<CommonTooltip v-if="isEditing" :content="$t('list.save')">
<button
type="submit"
text-sm p2 border-1 transition-colors
@ -152,7 +152,7 @@ onDeactivated(cancelEdit)
</template>
</button>
</CommonTooltip>
<CommonTooltip v-else :content="$t('list.edit')" no-auto-focus>
<CommonTooltip v-else :content="$t('list.edit')">
<button
ref="editBtn"
type="button"
@ -164,7 +164,7 @@ onDeactivated(cancelEdit)
<span block text-current i-ri:edit-2-line class="rtl-flip" />
</button>
</CommonTooltip>
<CommonTooltip :content="$t('list.delete')" no-auto-focus>
<CommonTooltip :content="$t('list.delete')">
<button
type="button"
text-sm p2 border-1 transition-colors
@ -192,7 +192,7 @@ onDeactivated(cancelEdit)
<div aria-hidden="true" i-ri:error-warning-fill />
<p>{{ $t(`list.${isEditing ? 'edit_error' : 'delete_error'}`) }}</p>
</div>
<CommonTooltip placement="bottom" :content="$t('list.clear_error')" no-auto-focus>
<CommonTooltip placement="bottom" :content="$t('list.clear_error')">
<button
flex rounded-4 p1 hover:bg-active cursor-pointer transition-100 :aria-label="$t('list.clear_error')"
@click="clearError"

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
const { userId } = defineProps<{
userId: string
}>()
@ -30,7 +30,7 @@ async function edit(listId: string) {
</script>
<template>
<CommonPaginator :end-message="false" :paginator="paginator">
<CommonPaginator :paginator="paginator">
<template #default="{ item }">
<div p4 hover:bg-active block w="100%" flex justify-between items-center gap-4>
<p>{{ item.title }}</p>
@ -49,5 +49,13 @@ async function edit(listId: string) {
</CommonTooltip>
</div>
</template>
<template #done>
<NuxtLink
p4 hover:bg-active block w="100%" flex justify-between items-center gap-4
to="/lists"
>
<p>{{ $t('list.manage') }}</p>
</NuxtLink>
</template>
</CommonPaginator>
</template>

View file

@ -32,14 +32,14 @@ const shortcutItemGroups = computed<ShortcutItemGroup[]>(() => [
description: t('magic_keys.groups.navigation.shortcut_help'),
shortcut: { keys: ['?'], isSequence: false },
},
// {
// description: t('magic_keys.groups.navigation.next_status'),
// shortcut: { keys: ['j'], isSequence: false },
// },
// {
// description: t('magic_keys.groups.navigation.previous_status'),
// shortcut: { keys: ['k'], isSequence: false },
// },
{
description: t('magic_keys.groups.navigation.next_status'),
shortcut: { keys: ['j'], isSequence: false },
},
{
description: t('magic_keys.groups.navigation.previous_status'),
shortcut: { keys: ['k'], isSequence: false },
},
{
description: t('magic_keys.groups.navigation.go_to_search'),
shortcut: { keys: ['/'], isSequence: false },

View file

@ -27,7 +27,7 @@ const containerClass = computed(() => {
<template>
<div ref="container" :class="containerClass">
<div
sticky top-0 z10
sticky top-0 z-20
pt="[env(safe-area-inset-top,0)]"
bg="[rgba(var(--rgb-bg-base),0.7)]"
class="native:lg:w-[calc(100vw-5rem)] native:xl:w-[calc(135%+(100vw-1200px)/2)]"
@ -35,15 +35,16 @@ const containerClass = computed(() => {
'backdrop-blur': !getPreferences(userSettings, 'optimizeForLowPerformanceDevice'),
}"
>
<div flex justify-between px5 py2 :class="{ 'xl:hidden': $route.name !== 'tag' }" class="native:xl:flex" border="b base">
<div flex gap-3 items-center :overflow-hidden="!noOverflowHidden ? '' : false" py2 w-full>
<NuxtLink
v-if="backOnSmallScreen || back" flex="~ gap1" items-center btn-text p-0 xl:hidden
<div flex justify-between gap-2 min-h-53px px5 py1 :class="{ 'xl:hidden': $route.name !== 'tag' }" class="native:xl:flex" border="b base">
<div flex gap-2 items-center :overflow-hidden="!noOverflowHidden ? '' : false" w-full>
<button
v-if="backOnSmallScreen || back"
btn-text flex items-center ms="-3" p-3 xl:hidden
:aria-label="$t('nav.back')"
@click="$router.go(-1)"
>
<div i-ri:arrow-left-line class="rtl-flip" />
</NuxtLink>
<div text-lg i-ri:arrow-left-line class="rtl-flip" />
</button>
<div :truncate="!noOverflowHidden ? '' : false" flex w-full data-tauri-drag-region class="native-mac:justify-start native-mac:text-center">
<slot name="title" />
</div>

View file

@ -0,0 +1,45 @@
<script setup lang="ts">
const model = defineModel<number>()
const isValid = defineModel<boolean>('isValid')
const days = ref<number | ''>(0)
const hours = ref<number | ''>(1)
const minutes = ref<number | ''>(0)
watchEffect(() => {
if (days.value === '' || hours.value === '' || minutes.value === '') {
isValid.value = false
return
}
const duration
= days.value * 24 * 60 * 60
+ hours.value * 60 * 60
+ minutes.value * 60
if (duration <= 0) {
isValid.value = false
return
}
isValid.value = true
model.value = duration
})
</script>
<template>
<div flex flex-grow-0 gap-2>
<label flex items-center gap-2>
<input v-model="days" type="number" min="0" max="1999" input-base :class="!isValid ? 'input-error' : null">
{{ $t('confirm.mute_account.days', days === '' ? 0 : days) }}
</label>
<label flex items-center gap-2>
<input v-model="hours" type="number" min="0" max="24" input-base :class="!isValid ? 'input-error' : null">
{{ $t('confirm.mute_account.hours', hours === '' ? 0 : hours) }}
</label>
<label flex items-center gap-2>
<input v-model="minutes" type="number" min="0" max="59" step="5" input-base :class="!isValid ? 'input-error' : null">
{{ $t('confirm.mute_account.minute', minutes === '' ? 0 : minutes) }}
</label>
</div>
</template>

View file

@ -0,0 +1,56 @@
<script setup lang="ts">
import type { ConfirmDialogChoice, ConfirmDialogOptions } from '#shared/types'
const { extraOptionType } = defineProps<ConfirmDialogOptions>()
const emit = defineEmits<{
(evt: 'choice', choice: ConfirmDialogChoice): void
}>()
const hasDuration = ref(false)
const isValidDuration = ref(true)
const duration = ref(60 * 60) // default to 1 hour
const shouldMuteNotifications = ref(true)
const isMute = computed(() => extraOptionType === 'mute')
function handleChoice(choice: ConfirmDialogChoice['choice']) {
const dialogChoice = {
choice,
...isMute.value && {
extraOptions: {
mute: {
duration: hasDuration.value ? duration.value : 0,
notifications: shouldMuteNotifications.value,
},
},
},
}
emit('choice', dialogChoice)
}
</script>
<template>
<div flex="~ col" gap-6>
<div font-bold text-lg>
{{ title }}
</div>
<div v-if="description">
{{ description }}
</div>
<div v-if="isMute" flex-col flex gap-4>
<CommonCheckbox v-model="hasDuration" :label="$t('confirm.mute_account.specify_duration')" prepend-checkbox checked-icon-color="text-primary" />
<ModalDurationPicker v-if="hasDuration" v-model="duration" v-model:is-valid="isValidDuration" />
<CommonCheckbox v-model="shouldMuteNotifications" :label="$t('confirm.mute_account.notifications')" prepend-checkbox checked-icon-color="text-primary" />
</div>
<div flex justify-end gap-2>
<button btn-text @click="handleChoice('cancel')">
{{ cancel || $t('confirm.common.cancel') }}
</button>
<button btn-solid :disabled="!isValidDuration" @click="handleChoice('confirm')">
{{ confirm || $t('confirm.common.confirm') }}
</button>
</div>
</div>
</template>

View file

@ -1,6 +1,6 @@
<script setup lang="ts">
import type { ConfirmDialogChoice } from '#shared/types'
import type { mastodon } from 'masto'
import type { ConfirmDialogChoice } from '~/types'
import {
isCommandPanelOpen,
isConfirmDialogOpen,
@ -63,13 +63,14 @@ function handleFavouritedBoostedByClose() {
</ModalDialog>
<ModalDialog
v-model="isPublishDialogOpen"
max-w-180 flex
max-w-180 flex w-full
@close="handlePublishClose"
>
<!-- This `w-0` style is used to avoid overflow problems in flex layoutsso don't remove it unless you know what you're doing -->
<PublishWidget
<PublishWidgetList
v-if="dialogDraftKey"
:draft-key="dialogDraftKey" expanded flex-1 w-0
:draft-key="dialogDraftKey"
expanded
class="flex-1"
@published="handlePublished"
/>
</ModalDialog>

View file

@ -1,51 +1,27 @@
<script lang="ts" setup>
<script setup lang="ts">
import { useFocusTrap } from '@vueuse/integrations/useFocusTrap'
export interface Props {
/**
* level of depth
*
* @default 100
*/
zIndex?: number
/**
* whether to allow close dialog by clicking mask layer
*
* @default true
*/
closeByMask?: boolean
/**
* use v-if, destroy all the internal elements after closed
*
* @default true
*/
useVIf?: boolean
/**
* keep the dialog opened even when in other views
*
* @default false
*/
keepAlive?: boolean
/**
* The aria-labelledby id for the dialog.
*/
dialogLabelledBy?: string
}
defineOptions({
inheritAttrs: false,
})
const props = withDefaults(defineProps<Props>(), {
zIndex: 100,
closeByMask: true,
useVIf: true,
keepAlive: false,
})
const {
zIndex = 100,
closeByMask = true,
useVIf = true,
keepAlive = false,
} = defineProps<{
// level of depth
zIndex?: number
// whether to allow close dialog by clicking mask layer
closeByMask?: boolean
// use v-if, destroy all the internal elements after closed
useVIf?: boolean
// keep the dialog opened even when in other views
keepAlive?: boolean
// The aria-labelledby id for the dialog.
dialogLabelledBy?: string
}>()
const emit = defineEmits<{
/** v-model dialog visibility */
@ -85,7 +61,7 @@ function close() {
}
function clickMask() {
if (props.closeByMask)
if (closeByMask)
close()
}
@ -97,7 +73,7 @@ watch(visible, (value) => {
const notInCurrentPage = computed(() => deactivated.value || routePath.value !== route.path)
watch(notInCurrentPage, (value) => {
if (props.keepAlive)
if (keepAlive)
return
if (value)
close()
@ -106,7 +82,7 @@ watch(notInCurrentPage, (value) => {
// controls the state of v-if.
// when useVIf is toggled, v-if has the same state as modelValue, otherwise v-if is true
const isVIf = computed(() => {
return props.useVIf
return useVIf
? visible.value
: true
})
@ -114,7 +90,7 @@ const isVIf = computed(() => {
// controls the state of v-show.
// when useVIf is toggled, v-show is true, otherwise it has the same state as modelValue
const isVShow = computed(() => {
return !props.useVIf
return !useVIf
? visible.value
: true
})

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import type { ErrorDialogData } from '~/types'
import type { ErrorDialogData } from '#shared/types'
defineProps<ErrorDialogData>()
</script>

View file

@ -37,16 +37,16 @@ onUnmounted(() => locked.value = false)
</script>
<template>
<div relative h-full w-full flex pt-12 w-100vh @click="onClick">
<div relative h-full w-full flex pt-12 @click="onClick">
<button
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.previous')"
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.next')"
hover:bg="black/40" dark:bg="white/30" dark-hover:bg="white/20" absolute top="1/2" right-1 z5
:title="$t('action.next')" @click="next"
>
<div i-ri:arrow-right-s-line text-white />
</button>
<button
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" aria-label="action.next"
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.prev')"
hover:bg="black/40" dark:bg="white/30" dark:hover-bg="white/20" absolute top="1/2" left-1 z5
:title="$t('action.prev')" @click="prev"
>
@ -71,7 +71,7 @@ onUnmounted(() => locked.value = false)
<div absolute top-0 w-full flex justify-end>
<button
btn-action-icon bg="black/30" aria-label="action.close" hover:bg="black/40" dark:bg="white/30"
btn-action-icon bg="black/30" :aria-label="$t('action.close')" hover:bg="black/40" dark:bg="white/30"
dark:hover-bg="white/20" pointer-events-auto shrink-0 @click="emit('close')"
>
<div i-ri:close-line text-white />

View file

@ -1,8 +1,8 @@
<script setup lang="ts">
import type { Vector2 } from '@vueuse/gesture'
import type { mastodon } from 'masto'
import { useGesture } from '@vueuse/gesture'
import { useReducedMotion } from '@vueuse/motion'
import type { mastodon } from 'masto'
const { media = [] } = defineProps<{
media?: mastodon.v1.MediaAttachment[]
@ -15,7 +15,7 @@ const emit = defineEmits<{
const modelValue = defineModel<number>({ required: true })
const slideGap = 20
const doubleTapTreshold = 250
const doubleTapThreshold = 250
const view = ref()
const slider = ref()
@ -36,6 +36,8 @@ const isPinching = ref(false)
const maxZoomOut = ref(1)
const isZoomedIn = computed(() => scale.value > 1)
const enableAutoplay = usePreferences('enableAutoplay')
function goToFocusedSlide() {
scale.value = 1
x.value = slide.value[modelValue.value].offsetLeft * scale.value
@ -147,7 +149,7 @@ function handleLastDrag(tap: boolean, swipe: Vector2, movement: Vector2, positio
let lastTapAt = 0
function handleTap([positionX, positionY]: Vector2) {
const now = Date.now()
const isDoubleTap = now - lastTapAt < doubleTapTreshold
const isDoubleTap = now - lastTapAt < doubleTapThreshold
lastTapAt = now
if (!isDoubleTap)
@ -218,7 +220,7 @@ function handleZoomDrag([deltaX, deltaY]: Vector2) {
function handleSlideDrag([movementX, movementY]: Vector2) {
goToFocusedSlide()
if (Math.abs(movementY) > Math.abs(movementX)) // vertical movement is more then horizontal
if (Math.abs(movementY) > Math.abs(movementX)) // vertical movement is more than horizontal
y.value -= movementY / scale.value
else
x.value -= movementX / scale.value
@ -264,8 +266,12 @@ const imageStyle = computed(() => ({
items-center
justify-center
>
<img
<component
:is="item.type === 'gifv' ? 'video' : 'img'"
ref="image"
:autoplay="enableAutoplay"
controls
loop
select-none
max-w-full
max-h-full
@ -273,7 +279,7 @@ const imageStyle = computed(() => ({
:draggable="false"
:src="item.url || item.previewUrl"
:alt="item.description || ''"
>
/>
</div>
</div>
</div>

View file

@ -0,0 +1,64 @@
<script setup lang="ts">
import type { Component } from 'vue'
import type { NavButtonName } from '../../composables/settings'
import {
NavButtonBookmark,
NavButtonCompose,
NavButtonExplore,
NavButtonFavorite,
NavButtonFederated,
NavButtonHashtag,
NavButtonHome,
NavButtonList,
NavButtonLocal,
NavButtonMention,
NavButtonMoreMenu,
NavButtonNotification,
NavButtonSearch,
} from '#components'
import { STORAGE_KEY_BOTTOM_NAV_BUTTONS } from '~/constants'
interface NavButton {
name: string
component: Component
}
const navButtons: NavButton[] = [
{ name: 'home', component: NavButtonHome },
{ name: 'search', component: NavButtonSearch },
{ name: 'notification', component: NavButtonNotification },
{ name: 'mention', component: NavButtonMention },
{ name: 'favorite', component: NavButtonFavorite },
{ name: 'bookmark', component: NavButtonBookmark },
{ name: 'compose', component: NavButtonCompose },
{ name: 'explore', component: NavButtonExplore },
{ name: 'local', component: NavButtonLocal },
{ name: 'federated', component: NavButtonFederated },
{ name: 'list', component: NavButtonList },
{ name: 'hashtag', component: NavButtonHashtag },
{ name: 'moreMenu', component: NavButtonMoreMenu },
]
const defaultSelectedNavButtonNames: NavButtonName[] = currentUser.value
? ['home', 'search', 'notification', 'mention', 'moreMenu']
: ['explore', 'local', 'federated', 'moreMenu']
const selectedNavButtonNames = useLocalStorage<NavButtonName[]>(STORAGE_KEY_BOTTOM_NAV_BUTTONS, defaultSelectedNavButtonNames)
const selectedNavButtons = computed(() => selectedNavButtonNames.value.map(name => navButtons.find(navButton => navButton.name === name)))
// only one icon can be lit up at the same time
const moreMenuVisible = ref(false)
</script>
<template>
<!-- This weird styles above are used for scroll locking, don't change it unless you know exactly what you're doing. -->
<nav
h-14 border="t base" flex flex-row text-xl
of-y-scroll scrollbar-hide overscroll-none
class="after-content-empty after:(h-[calc(100%+0.5px)] w-0.1px pointer-events-none)"
>
<Component :is="navButton!.component" v-for="navButton in selectedNavButtons" :key="navButton!.name" :active-class="moreMenuVisible ? '' : 'text-primary'" />
</nav>
</template>

View file

@ -1,4 +1,4 @@
<script lang="ts" setup>
<script setup lang="ts">
import { invoke } from '@vueuse/core'
const modelValue = defineModel<boolean>({ required: true })

View file

@ -0,0 +1,23 @@
<script setup lang="ts">
</script>
<template>
<span shrink-0 aspect="1/1" sm:h-8 xl:h-10 class="rtl-flip">
<!-- <svg
xmlns="http://www.w3.org/2000/svg" w-full
aspect="1/1" sm:h-8 xl:h-10 sm:w-8 xl:w-10 viewBox="0 0 250 250" fill="none"
> -->
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"><defs><mask id="ipTEgg0"><g fill="none" stroke="#fff" stroke-width="4"><circle cx="24" cy="24" r="10" fill="#555555" stroke-linecap="round" stroke-linejoin="round" /><path d="M44 24c0 2.633-.508 5.146-1.433 7.448c-.936 2.331-4.129.071-7.346 3.521c-3.216 3.45-.71 6.267-3.204 7.36A19.9 19.9 0 0 1 24 44C12.954 44 4 35.046 4 24S12.954 4 24 4s20 8.954 20 20Z" /><path stroke-linecap="round" d="M20 25s.21 1.21 1 2s2 1 2 1" /></g></mask></defs><path fill="#ff8d00" d="M0 0h48v48H0z" mask="url(#ipTEgg0)" /></svg>
</span>
</template>
<style scoped>
svg path.wood {
fill: var(--c-primary);
}
svg path.body {
fill: var(--c-text-secondary);
}
</style>

View file

@ -1,9 +1,38 @@
<script setup lang="ts">
const { command } = defineProps<{
import { STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE } from '~/constants'
defineProps<{
command?: boolean
}>()
const { notifications } = useNotifications()
const useStarFavoriteIcon = usePreferences('useStarFavoriteIcon')
const lastAccessedNotificationRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE, '')
const lastAccessedExploreRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, '')
const notificationsLink = computed(() => {
const hydrated = isHydrated.value
const user = currentUser.value
const lastRoute = lastAccessedNotificationRoute.value
if (!hydrated || !user || !lastRoute) {
return '/notifications'
}
return `/notifications/${lastRoute}`
})
const exploreLink = computed(() => {
const hydrated = isHydrated.value
const server = currentServer.value
let lastRoute = lastAccessedExploreRoute.value
if (!hydrated) {
return '/explore'
}
if (lastRoute.length) {
lastRoute = `/${lastRoute}`
}
return server ? `/${server}/explore${lastRoute}` : `/explore${lastRoute}`
})
</script>
<template>
@ -12,7 +41,7 @@ const useStarFavoriteIcon = usePreferences('useStarFavoriteIcon')
<div class="spacer" shrink xl:hidden />
<NavSideItem :text="$t('nav.home')" to="/home" icon="i-ri:home-5-line" user-only :command="command" />
<NavSideItem :text="$t('nav.notifications')" to="/notifications" icon="i-ri:notification-4-line" user-only :command="command">
<NavSideItem :text="$t('nav.notifications')" :to="notificationsLink" icon="i-ri:notification-4-line" user-only :command="command">
<template #icon>
<div flex relative>
<div class="i-ri:notification-4-line" text-xl />
@ -30,7 +59,7 @@ const useStarFavoriteIcon = usePreferences('useStarFavoriteIcon')
<NavSideItem :text="$t('action.compose')" to="/compose" icon="i-ri:quill-pen-line" user-only :command="command" />
<div class="spacer" shrink hidden sm:block />
<NavSideItem :text="$t('nav.explore')" :to="isHydrated ? `/${currentServer}/explore` : '/explore'" icon="i-ri:compass-3-line" :command="command" />
<NavSideItem :text="$t('nav.explore')" :to="exploreLink" icon="i-ri:compass-3-line" :command="command" />
<NavSideItem :text="$t('nav.local')" :to="isHydrated ? `/${currentServer}/public/local` : '/public/local'" icon="i-ri:group-2-line " :command="command" />
<NavSideItem :text="$t('nav.federated')" :to="isHydrated ? `/${currentServer}/public` : '/public'" icon="i-ri:earth-line" :command="command" />
<NavSideItem :text="$t('nav.lists')" :to="isHydrated ? `/${currentServer}/lists` : '/lists'" icon="i-ri:list-check" user-only :command="command" />

View file

@ -1,13 +1,11 @@
<script setup lang="ts">
const props = withDefaults(defineProps<{
const { text, icon, to, userOnly = false, command } = defineProps<{
text?: string
icon: string
to: string | Record<string, string>
userOnly?: boolean
command?: boolean
}>(), {
userOnly: false,
})
}>()
defineSlots<{
icon: (props: object) => void
@ -19,12 +17,12 @@ const router = useRouter()
useCommand({
scope: 'Navigation',
name: () => props.text ?? (typeof props.to === 'string' ? props.to as string : props.to.name),
icon: () => props.icon,
visible: () => props.command,
name: () => text ?? (typeof to === 'string' ? to as string : to.name),
icon: () => icon,
visible: () => command,
onActivate() {
router.push(props.to)
router.push(to)
},
})
@ -39,8 +37,8 @@ onHydrated(async () => {
// Optimize rendering for the common case of being logged in, only show visual feedback for disabled user-only items
// when we know there is no user.
const noUserDisable = computed(() => !isHydrated.value || (props.userOnly && !currentUser.value))
const noUserVisual = computed(() => isHydrated.value && props.userOnly && !currentUser.value)
const noUserDisable = computed(() => !isHydrated.value || (userOnly && !currentUser.value))
const noUserVisual = computed(() => isHydrated.value && userOnly && !currentUser.value)
</script>
<template>
@ -57,11 +55,21 @@ const noUserVisual = computed(() => isHydrated.value && props.userOnly && !curre
<div
class="item"
flex items-center gap4
w-fit rounded-3
px2 mx3 sm:mxa
xl="ml0 mr5 px5 w-auto"
transition-100
elk-group-hover="bg-active" group-focus-visible:ring="2 current"
:class="isSmallScreen
? `
w-full
px5 sm:mxa
transition-colors duration-200 transform
hover-bg-gray-100 hover-dark:(bg-gray-700 text-white)
` : `
w-fit rounded-3
px2 mx3 sm:mxa
transition-100
elk-group-hover-bg-active
group-focus-visible:ring-2
group-focus-visible:ring-current
`"
>
<slot name="icon">
<div :class="icon" text-xl />

View file

@ -29,21 +29,21 @@ router.afterEach(() => {
@click.prevent="onClickLogo"
>
<NavLogo shrink-0 aspect="1/1" sm:h-8 xl:h-10 class="rtl-flip" />
<div v-show="isHydrated" hidden xl:block text-secondary>
{{ $t('app_name') }} <sup text-sm italic mt-1>{{ env === 'release' ? 'alpha' : env }}</sup>
<div v-show="isHydrated" hidden xl:block>
<span pr-1>{{ $t('app_name') }}</span>
<sup text-sm italic mt-1>{{ env === 'release' ? 'alpha' : env }}</sup>
</div>
</NuxtLink>
<div
hidden xl:flex items-center me-8 mt-2 gap-1
>
<CommonTooltip :content="$t('nav.back')">
<NuxtLink
<div hidden xl:flex items-center me-6 mt-2 gap-1>
<CommonTooltip :content="$t('nav.back')" :distance="0">
<button
type="button"
:aria-label="$t('nav.back')"
:class="{ 'pointer-events-none op0': !back || back === '/', 'xl:flex': $route.name !== 'tag' }"
btn-text p-3 :class="{ 'pointer-events-none op0': !back || back === '/', 'xl:flex': $route.name !== 'tag' }"
@click="$router.go(-1)"
>
<div text-xl i-ri:arrow-left-line class="rtl-flip" btn-text />
</NuxtLink>
<div text-xl i-ri:arrow-left-line class="rtl-flip" />
</button>
</CommonTooltip>
</div>
</div>

View file

@ -1,4 +1,4 @@
<script setup>
<script setup lang="ts">
const { busy, oauth, singleInstanceServer } = useSignIn()
</script>
@ -34,7 +34,13 @@ const { busy, oauth, singleInstanceServer } = useSignIn()
<strong>{{ currentServer }}</strong>
</i18n-t>
</button>
<button v-else btn-solid text-sm px-2 py-1 text-center xl:hidden @click="openSigninDialog()">
<button
v-else
flex="~ row"
gap-x-1 items-center justify-center btn-solid text-sm px-2 py-1 xl:hidden
@click="openSigninDialog()"
>
<span aria-hidden="true" block i-ri:login-circle-line class="rtl-flip" />
{{ $t('action.sign_in') }}
</button>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink to="/bookmarks" :aria-label="$t('nav.bookmarks')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:bookmark-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink to="/compose" :aria-label="$t('nav.favourites')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:quill-pen-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,15 @@
<script setup lang="ts">
import { STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE } from '~/constants'
defineProps<{
activeClass: string
}>()
const lastAccessedExploreRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, '')
</script>
<template>
<NuxtLink :to="`/${currentServer}/explore/${lastAccessedExploreRoute}`" :aria-label="$t('nav.explore')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:compass-3-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink to="/favourites" :aria-label="$t('nav.favourites')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:heart-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink :to="`/${currentServer}/public`" :aria-label="$t('nav.federated')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:earth-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink to="/hashtags" :aria-label="$t('nav.hashtags')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:hashtag />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink to="/home" :aria-label="$t('nav.home')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:home-5-line />
</NuxtLink>
</template>

View file

@ -0,0 +1,17 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink
to="/lists"
:aria-label="$t('nav.lists')"
:active-class="activeClass"
flex flex-row items-center place-content-center h-full flex-1
class="coarse-pointer:select-none" @click="$scrollToTop"
>
<div i-ri:list-check />
</NuxtLink>
</template>

View file

@ -0,0 +1,11 @@
<script setup lang="ts">
defineProps<{
activeClass: string
}>()
</script>
<template>
<NuxtLink group :to="`/${currentServer}/public/local`" :aria-label="$t('nav.local')" :active-class="activeClass" flex flex-row items-center place-content-center h-full flex-1 class="coarse-pointer:select-none" @click="$scrollToTop">
<div i-ri:group-2-line />
</NuxtLink>
</template>

Some files were not shown because too many files have changed in this diff Show more