From 75100df67476272e4142673f2cc94ccbe74ca1dc Mon Sep 17 00:00:00 2001
From: kolaente
Date: Thu, 19 Feb 2026 15:10:33 +0100
Subject: [PATCH] feat: migrate view pages from FontAwesome to Phosphor Icons
---
frontend/src/views/filters/FilterEdit.vue | 2 +-
frontend/src/views/labels/ListLabels.vue | 14 ++--
frontend/src/views/project/ListProjects.vue | 8 +-
.../settings/ProjectSettingsDuplicate.vue | 3 +-
.../project/settings/ProjectSettingsEdit.vue | 2 +-
.../project/settings/ProjectSettingsViews.vue | 13 ++--
.../settings/ProjectSettingsWebhooks.vue | 10 ++-
frontend/src/views/tasks/ShowTasks.vue | 4 +-
frontend/src/views/tasks/TaskDetailView.vue | 76 ++++++++++---------
frontend/src/views/teams/EditTeam.vue | 18 +++--
frontend/src/views/teams/ListTeams.vue | 4 +-
frontend/src/views/user/Settings.vue | 5 +-
.../src/views/user/settings/ApiTokens.vue | 3 +-
frontend/src/views/user/settings/Caldav.vue | 8 +-
14 files changed, 97 insertions(+), 73 deletions(-)
diff --git a/frontend/src/views/filters/FilterEdit.vue b/frontend/src/views/filters/FilterEdit.vue
index 60eb83039..a0f9fe20c 100644
--- a/frontend/src/views/filters/FilterEdit.vue
+++ b/frontend/src/views/filters/FilterEdit.vue
@@ -2,7 +2,7 @@
+
{{ $t('label.create.header') }}
@@ -42,10 +43,7 @@
class="label-edit-button is-small"
@click.stop.prevent="editLabel(label)"
>
-
+
@@ -87,10 +85,11 @@
@@ -122,6 +121,7 @@ import {computed, nextTick, ref} from 'vue'
import {useI18n} from 'vue-i18n'
import BaseButton from '@/components/base/BaseButton.vue'
+import {PhPencilSimple, PhPlus, PhTrash} from '@phosphor-icons/vue'
import Editor from '@/components/input/AsyncEditor'
import ColorPicker from '@/components/input/ColorPicker.vue'
import FormField from '@/components/input/FormField.vue'
diff --git a/frontend/src/views/project/ListProjects.vue b/frontend/src/views/project/ListProjects.vue
index 2a2192537..2e0a6054f 100644
--- a/frontend/src/views/project/ListProjects.vue
+++ b/frontend/src/views/project/ListProjects.vue
@@ -15,15 +15,17 @@
@@ -41,6 +43,8 @@ import {computed} from 'vue'
import {useI18n} from 'vue-i18n'
import FancyCheckbox from '@/components/input/FancyCheckbox.vue'
+
+import {PhFunnel, PhPlus} from '@phosphor-icons/vue'
import ProjectCardGrid from '@/components/project/partials/ProjectCardGrid.vue'
import {useTitle} from '@/composables/useTitle'
diff --git a/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue b/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue
index 764a44803..7f832df2c 100644
--- a/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue
+++ b/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue
@@ -2,10 +2,10 @@
+
{{ $t('project.duplicate.text') }}
@@ -17,6 +17,7 @@ import {useRoute} from 'vue-router'
import {useI18n} from 'vue-i18n'
import CreateEdit from '@/components/misc/CreateEdit.vue'
+import {PhClipboard} from '@phosphor-icons/vue'
import ProjectSearch from '@/components/tasks/partials/ProjectSearch.vue'
import {success} from '@/message'
diff --git a/frontend/src/views/project/settings/ProjectSettingsEdit.vue b/frontend/src/views/project/settings/ProjectSettingsEdit.vue
index 41e65a830..e814f6a81 100644
--- a/frontend/src/views/project/settings/ProjectSettingsEdit.vue
+++ b/frontend/src/views/project/settings/ProjectSettingsEdit.vue
@@ -2,7 +2,7 @@
{
viewIdToDelete = v.id
showDeleteModal = true
}"
- />
+ >
+
+
+ >
+
+
-
+
diff --git a/frontend/src/views/project/settings/ProjectSettingsWebhooks.vue b/frontend/src/views/project/settings/ProjectSettingsWebhooks.vue
index 6e5def93a..ad2ab0c38 100644
--- a/frontend/src/views/project/settings/ProjectSettingsWebhooks.vue
+++ b/frontend/src/views/project/settings/ProjectSettingsWebhooks.vue
@@ -9,6 +9,7 @@ import ProjectModel from '@/models/project'
import type {IProject} from '@/modelTypes/IProject'
import CreateEdit from '@/components/misc/CreateEdit.vue'
+import {PhPlus, PhTrash} from '@phosphor-icons/vue'
import {useBaseStore} from '@/stores/base'
import type {IWebhook} from '@/modelTypes/IWebhook'
@@ -128,10 +129,10 @@ function validateSelectedEvents() {
>
+
{{ $t('project.webhooks.create') }}
@@ -239,9 +240,9 @@ function validateSelectedEvents() {
+
{{ $t('project.webhooks.create') }}
@@ -277,9 +278,10 @@ function validateSelectedEvents() {
{showDeleteModal = true;webhookIdToDelete = w.id}"
- />
+ >
+
+
|
diff --git a/frontend/src/views/tasks/ShowTasks.vue b/frontend/src/views/tasks/ShowTasks.vue
index 4ca0c80a8..051dfec69 100644
--- a/frontend/src/views/tasks/ShowTasks.vue
+++ b/frontend/src/views/tasks/ShowTasks.vue
@@ -28,7 +28,7 @@
class="clear-filter-button"
@click="clearLabelFilter"
>
-
+
-
+
{{ $t('task.detail.back') }}
-
+
{{ $t('task.attributes.assignees') }}
-
+
{{ $t('task.attributes.priority') }}
-
+
{{ $t('task.attributes.dueDate') }}
@@ -153,7 +153,7 @@
>
-
+
{{ $t('task.attributes.percentDone') }}
-
+
{{ $t('task.attributes.startDate') }}
@@ -207,7 +207,7 @@
>
-
+
{{ $t('task.attributes.endDate') }}
@@ -240,7 +240,7 @@
>
-
+
{{ $t('task.attributes.reminders') }}
-
+
{{ $t('task.attributes.repeat') }}
-
+
@@ -293,7 +293,7 @@
>
-
+
{{ $t('task.attributes.color') }}
-
+
{{ $t('task.attributes.labels') }}
@@ -365,7 +365,7 @@
>
-
+
{{ $t('task.attributes.relatedTasks') }}
@@ -386,7 +386,7 @@
>
-
+
{{ $t('task.detail.move') }}
@@ -426,10 +426,10 @@
v-shortcut="'t'"
:class="{'is-pending': !task.done}"
class="button--mark-done"
- icon="check-double"
variant="secondary"
@click="toggleTaskDone()"
>
+
{{ task.done ? $t('task.detail.undone') : $t('task.detail.done') }}
+
{{
task.isFavorite ? $t('task.detail.actions.unfavorite') : $t('task.detail.actions.favorite')
}}
@@ -454,33 +454,32 @@
+
{{ $t('task.detail.actions.label') }}
+
{{ $t('task.detail.actions.priority') }}
+
{{ $t('task.detail.actions.percentDone') }}
+
{{ $t('task.detail.actions.color') }}
@@ -490,33 +489,33 @@
v-shortcut="'a'"
v-cy="'taskDetail.assign'"
variant="secondary"
- icon="users"
@click="setFieldActive('assignees')"
>
+
{{ $t('task.detail.actions.assign') }}
+
{{ $t('task.detail.actions.attachments') }}
+
{{ $t('task.detail.actions.relatedTasks') }}
+
{{ $t('task.detail.actions.moveProject') }}
@@ -525,47 +524,47 @@
+
{{ $t('task.detail.actions.dueDate') }}
+
{{ $t('task.detail.actions.startDate') }}
+
{{ $t('task.detail.actions.endDate') }}
+
{{ $t('task.detail.actions.reminders') }}
+
{{ $t('task.detail.actions.repeatAfter') }}
+
{{ $t('task.detail.actions.delete') }}
@@ -588,7 +587,7 @@
:aria-label="$t('task.detail.scrollToBottom')"
@click="scrollToBottom"
>
-
+
+ >
+
+
@@ -95,9 +96,9 @@
+
{{ $t('team.edit.addUser') }}
@@ -130,13 +131,13 @@
-
+
{{ $t('team.attributes.admin') }}
-
+
{{ $t('team.attributes.member') }}
@@ -157,9 +158,10 @@
v-if="m.id !== userInfo.id"
:loading="teamMemberService.loading"
danger
- icon="trash-alt"
@click="() => {memberToDelete = m; showUserDeleteModal = true}"
- />
+ >
+
+
|
@@ -236,6 +238,8 @@ import {useI18n} from 'vue-i18n'
import {useRoute, useRouter} from 'vue-router'
import Editor from '@/components/input/AsyncEditor'
+
+import {PhLock, PhPlus, PhTrash, PhUser} from '@phosphor-icons/vue'
import FancyCheckbox from '@/components/input/FancyCheckbox.vue'
import FormField from '@/components/input/FormField.vue'
import Multiselect from '@/components/input/Multiselect.vue'
diff --git a/frontend/src/views/teams/ListTeams.vue b/frontend/src/views/teams/ListTeams.vue
index e4b1ee8b5..f2c81e757 100644
--- a/frontend/src/views/teams/ListTeams.vue
+++ b/frontend/src/views/teams/ListTeams.vue
@@ -6,8 +6,9 @@
+
{{ $t('team.create.title') }}
@@ -44,6 +45,7 @@ import {ref, shallowReactive} from 'vue'
import { useI18n } from 'vue-i18n'
import TeamService from '@/services/team'
+import {PhPlus} from '@phosphor-icons/vue'
import { useTitle } from '@/composables/useTitle'
const { t } = useI18n({useScope: 'global'})
diff --git a/frontend/src/views/user/Settings.vue b/frontend/src/views/user/Settings.vue
index 7f6870aaf..d24f41454 100644
--- a/frontend/src/views/user/Settings.vue
+++ b/frontend/src/views/user/Settings.vue
@@ -27,9 +27,7 @@
{{ text }}
-
+
@@ -51,6 +49,7 @@ import { useAuthStore } from '@/stores/auth'
import {useRoute} from 'vue-router'
import BaseButton from '@/components/base/BaseButton.vue'
+import {PhArrowSquareOut} from '@phosphor-icons/vue'
const { t } = useI18n({useScope: 'global'})
useTitle(() => t('user.settings.title'))
diff --git a/frontend/src/views/user/settings/ApiTokens.vue b/frontend/src/views/user/settings/ApiTokens.vue
index 712ab8be2..0ae029410 100644
--- a/frontend/src/views/user/settings/ApiTokens.vue
+++ b/frontend/src/views/user/settings/ApiTokens.vue
@@ -6,6 +6,7 @@ import {parseScopesFromQuery} from '@/helpers/parseScopesFromQuery'
import {useFlatpickrLanguage} from '@/helpers/useFlatpickrLanguage'
import {formatDateSince, formatDisplayDate} from '@/helpers/time/formatDate'
import XButton from '@/components/input/Button.vue'
+import {PhPlus} from '@phosphor-icons/vue'
import BaseButton from '@/components/base/BaseButton.vue'
import ApiTokenModel from '@/models/apiTokenModel'
import FancyCheckbox from '@/components/input/FancyCheckbox.vue'
@@ -381,11 +382,11 @@ function toggleGroupPermissionsFromChild(group: string, checked: boolean) {
showCreateForm = true"
>
+
{{ $t('user.settings.apiTokens.createAToken') }}
diff --git a/frontend/src/views/user/settings/Caldav.vue b/frontend/src/views/user/settings/Caldav.vue
index bc79e6972..137a24bb4 100644
--- a/frontend/src/views/user/settings/Caldav.vue
+++ b/frontend/src/views/user/settings/Caldav.vue
@@ -15,9 +15,10 @@
+ >
+
+
@@ -75,11 +76,11 @@
+
{{ $t('user.settings.caldav.createToken') }}
@@ -103,6 +104,7 @@ import {useTitle} from '@/composables/useTitle'
import {useCopyToClipboard} from '@/composables/useCopyToClipboard'
import {success} from '@/message'
import BaseButton from '@/components/base/BaseButton.vue'
+import {PhClipboard, PhPlus} from '@phosphor-icons/vue'
import Message from '@/components/misc/Message.vue'
import FormField from '@/components/input/FormField.vue'
import CaldavTokenService from '@/services/caldavToken'