Compare commits

..

148 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
405 changed files with 10597 additions and 9713 deletions

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

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:

2
.nvmrc
View file

@ -1 +1 @@
20
22

View file

@ -6,19 +6,13 @@ 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 (20.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/) 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)
@ -92,7 +86,7 @@ We've added some `UnoCSS` utilities styles to help you with that:
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`

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
@ -51,65 +39,12 @@ One could put Elk behind popular reverse proxies with SSL Handling like Traefik,
> [!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
- [crab.bumscode.com](https://crab.bumscode.com) - Use [crab](https://github.com/maybeanerd/crab) - a soft fork of Elk - for the `bumscode.com` 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,7 +1,7 @@
<script setup lang="ts">
import type { mastodon } from 'masto'
const props = defineProps<{
const { account } = defineProps<{
account: mastodon.v1.Account
square?: boolean
}>()
@ -11,22 +11,22 @@ const error = ref(false)
const preferredMotion = usePreferredReducedMotion()
const accountAvatarSrc = computed(() => {
return preferredMotion.value === 'reduce' ? (props.account?.avatarStatic ?? props.account.avatar) : props.account.avatar
return preferredMotion.value === 'reduce' ? (account?.avatarStatic ?? account.avatar) : account.avatar
})
</script>
<template>
<img
:key="props.account.avatar"
:key="account.avatar"
width="400"
height="400"
select-none
:src="(error || !loaded) ? 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' : accountAvatarSrc"
:alt="$t('account.avatar_description', [props.account.username])"
:alt="$t('account.avatar_description', [account.username])"
loading="lazy"
class="account-avatar"
:class="(loaded ? 'bg-base' : 'bg-gray:10') + (props.square ? ' ' : ' rounded-full')"
:style="{ 'clip-path': props.square ? `url(#avatar-mask)` : 'none' }"
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"
@load="loaded = true"
@error="error = true"

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'

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

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

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
}>()

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 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

@ -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

@ -3,25 +3,18 @@ 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

@ -2,21 +2,21 @@
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

@ -6,10 +6,10 @@ import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
const {
paginator,
stream,
eventType,
keyProp = 'id',
virtualScroller = false,
stream,
eventType,
preprocess,
endMessage = true,
} = defineProps<{

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

View file

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

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

@ -4,7 +4,6 @@ const {
text,
description,
icon,
checked,
command,
} = defineProps<{
is?: string

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

@ -44,6 +44,7 @@ async function edit() {
<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

@ -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

@ -1,7 +1,7 @@
<script setup lang="ts">
import type { ConfirmDialogChoice, ConfirmDialogOptions } from '~/types'
import type { ConfirmDialogChoice, ConfirmDialogOptions } from '#shared/types'
const props = defineProps<ConfirmDialogOptions>()
const { extraOptionType } = defineProps<ConfirmDialogOptions>()
const emit = defineEmits<{
(evt: 'choice', choice: ConfirmDialogChoice): void
@ -11,7 +11,7 @@ const hasDuration = ref(false)
const isValidDuration = ref(true)
const duration = ref(60 * 60) // default to 1 hour
const shouldMuteNotifications = ref(true)
const isMute = computed(() => props.extraOptionType === 'mute')
const isMute = computed(() => extraOptionType === 'mute')
function handleChoice(choice: ConfirmDialogChoice['choice']) {
const dialogChoice = {
@ -40,7 +40,7 @@ function handleChoice(choice: ConfirmDialogChoice['choice']) {
</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" />
<DurationPicker v-if="hasDuration" v-model="duration" v-model:is-valid="isValidDuration" />
<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>

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,

View file

@ -1,51 +1,27 @@
<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

@ -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,7 +1,7 @@
<script setup lang="ts">
import { STORAGE_KEY_LAST_ACCESSED_EXPLORE_ROUTE, STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE } from '~/constants'
const { command } = defineProps<{
defineProps<{
command?: boolean
}>()
const { notifications } = useNotifications()

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>

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

@ -4,6 +4,7 @@ import { STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE } from '~/constants'
defineProps<{
activeClass: string
}>()
const { notifications } = useNotifications()
const lastAccessedNotificationRoute = useLocalStorage(STORAGE_KEY_LAST_ACCESSED_NOTIFICATION_ROUTE, '')
</script>

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