feat: Enhance card actions menu with separators and action bar

This commit is contained in:
Maksim Eltyshev
2025-12-09 20:30:05 +01:00
parent 9e6e38fcf7
commit 6da5c7aaca
36 changed files with 291 additions and 21 deletions

View File

@@ -114,6 +114,103 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
const [t] = useTranslation();
const [step, openStep, handleBack] = useSteps(defaultStep || null);
const withActionBar = useMemo(() => {
let menuItemsTotal = 0;
let actionBarItemsTotal = 0;
if (card.type === CardTypes.PROJECT && canUseMembers) menuItemsTotal += 1;
if (canUseLabels) menuItemsTotal += 1;
if (card.type !== CardTypes.PROJECT && canUseMembers) menuItemsTotal += 1;
if (card.type === CardTypes.PROJECT && canEditDueDate) menuItemsTotal += 1;
if (card.type === CardTypes.PROJECT && canEditStopwatch) menuItemsTotal += 1;
if (canEditName) menuItemsTotal += 1;
if (!board.limitCardTypesToDefaultOne && canEditType) menuItemsTotal += 1;
if (canDuplicate) menuItemsTotal += 1;
if (canMove) menuItemsTotal += 1;
if (prevList && canRestore) menuItemsTotal += 1;
if (canCopy) {
menuItemsTotal += 1;
actionBarItemsTotal += 1;
}
if (canCut) {
menuItemsTotal += 1;
actionBarItemsTotal += 1;
}
if (list.type !== ListTypes.ARCHIVE && canArchive) {
menuItemsTotal += 1;
actionBarItemsTotal += 1;
}
if (canDelete) {
menuItemsTotal += 1;
actionBarItemsTotal += 1;
}
return menuItemsTotal > 4 && actionBarItemsTotal > 1;
}, [
board.limitCardTypesToDefaultOne,
card.type,
list.type,
prevList,
canEditType,
canEditName,
canEditDueDate,
canEditStopwatch,
canCopy,
canCut,
canDuplicate,
canMove,
canRestore,
canArchive,
canDelete,
canUseMembers,
canUseLabels,
]);
const hasTopSection = useMemo(() => {
return (
(card.type === CardTypes.PROJECT && canUseMembers) ||
canUseLabels ||
(card.type !== CardTypes.PROJECT && canUseMembers) ||
(card.type === CardTypes.PROJECT && canEditDueDate) ||
(card.type === CardTypes.PROJECT && canEditStopwatch) ||
canEditName ||
(!board.limitCardTypesToDefaultOne && canEditType)
);
}, [
board.limitCardTypesToDefaultOne,
card.type,
canEditType,
canEditName,
canEditDueDate,
canEditStopwatch,
canUseMembers,
canUseLabels,
]);
const hasBottomSection = useMemo(() => {
return (
(canCopy && !withActionBar) ||
(canCut && !withActionBar) ||
canDuplicate ||
canMove ||
(prevList && canRestore) ||
(list.type !== ListTypes.ARCHIVE && canArchive && !withActionBar) ||
(canDelete && !withActionBar)
);
}, [
list.type,
prevList,
canCopy,
canCut,
canDuplicate,
canMove,
canRestore,
canArchive,
canDelete,
withActionBar,
]);
const handleTypeSelect = useCallback(
(type) => {
dispatch(
@@ -299,22 +396,6 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
</Popup.Header>
<Popup.Content>
<Menu secondary vertical className={styles.menu}>
{canEditName && (
<Menu.Item className={styles.menuItem} onClick={handleEditNameClick}>
<Icon name="edit outline" className={styles.menuItemIcon} />
{t('action.editTitle', {
context: 'title',
})}
</Menu.Item>
)}
{!board.limitCardTypesToDefaultOne && canEditType && (
<Menu.Item className={styles.menuItem} onClick={handleEditTypeClick}>
<Icon name="map outline" className={styles.menuItemIcon} />
{t('action.editType', {
context: 'title',
})}
</Menu.Item>
)}
{card.type === CardTypes.PROJECT && canUseMembers && (
<Menu.Item className={styles.menuItem} onClick={handleMembersClick}>
<Icon name="user outline" className={styles.menuItemIcon} />
@@ -331,7 +412,7 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{card.type === CardTypes.STORY && canUseMembers && (
{card.type !== CardTypes.PROJECT && canUseMembers && (
<Menu.Item className={styles.menuItem} onClick={handleMembersClick}>
<Icon name="user outline" className={styles.menuItemIcon} />
{t('common.members', {
@@ -355,7 +436,24 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{canCopy && (
{canEditName && (
<Menu.Item className={styles.menuItem} onClick={handleEditNameClick}>
<Icon name="edit outline" className={styles.menuItemIcon} />
{t('action.editTitle', {
context: 'title',
})}
</Menu.Item>
)}
{!board.limitCardTypesToDefaultOne && canEditType && (
<Menu.Item className={styles.menuItem} onClick={handleEditTypeClick}>
<Icon name="map outline" className={styles.menuItemIcon} />
{t('action.editType', {
context: 'title',
})}
</Menu.Item>
)}
{hasTopSection && hasBottomSection && <hr className={styles.divider} />}
{canCopy && !withActionBar && (
<Menu.Item className={styles.menuItem} onClick={handleCopyClick}>
<Icon name="copy outline" className={styles.menuItemIcon} />
{t('action.copyCard', {
@@ -363,7 +461,7 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{canCut && (
{canCut && !withActionBar && (
<Menu.Item className={styles.menuItem} onClick={handleCutClick}>
<Icon name="cut" className={styles.menuItemIcon} />
{t('action.cutCard', {
@@ -396,7 +494,7 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{list.type !== ListTypes.ARCHIVE && canArchive && (
{list.type !== ListTypes.ARCHIVE && canArchive && !withActionBar && (
<Menu.Item className={styles.menuItem} onClick={handleArchiveClick}>
<Icon name="folder open outline" className={styles.menuItemIcon} />
{t('action.archiveCard', {
@@ -404,7 +502,7 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{canDelete && (
{canDelete && !withActionBar && (
<Menu.Item className={styles.menuItem} onClick={handleDeleteClick}>
<Icon name="trash alternate outline" className={styles.menuItemIcon} />
{isInTrashList
@@ -416,6 +514,69 @@ const CardActionsStep = React.memo(({ cardId, defaultStep, onNameEdit, onClose }
})}
</Menu.Item>
)}
{withActionBar && (
<>
<hr className={styles.divider} />
<div className={styles.actionBar}>
{canCopy && (
/* eslint-disable-next-line jsx-a11y/anchor-is-valid,
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions */
<a className={styles.actionBarItem} onClick={handleCopyClick}>
<Icon fitted name="copy outline" />
<span className={styles.actionBarItemText}>
{t('action.copy', {
context: 'title',
})}
</span>
</a>
)}
{canCut && (
/* eslint-disable-next-line jsx-a11y/anchor-is-valid,
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions */
<a className={styles.actionBarItem} onClick={handleCutClick}>
<Icon fitted name="cut" />
<span className={styles.actionBarItemText}>
{t('action.cut', {
context: 'title',
})}
</span>
</a>
)}
{list.type !== ListTypes.ARCHIVE && canArchive && (
/* eslint-disable-next-line jsx-a11y/anchor-is-valid,
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions */
<a className={styles.actionBarItem} onClick={handleArchiveClick}>
<Icon fitted name="archive" />
<span className={styles.actionBarItemText}>
{t('action.archive', {
context: 'title',
})}
</span>
</a>
)}
{canDelete && (
/* eslint-disable-next-line jsx-a11y/anchor-is-valid,
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions */
<a className={styles.actionBarItem} onClick={handleDeleteClick}>
<Icon fitted name="trash alternate outline" />
<span className={styles.actionBarItemText}>
{isInTrashList
? t('action.deleteForever', {
context: 'title',
})
: t('action.delete', {
context: 'title',
})}
</span>
</a>
)}
</div>
</>
)}
</Menu>
</Popup.Content>
</>

View File

@@ -4,6 +4,47 @@
*/
:global(#app) {
.actionBar {
display: flex;
margin: -7px 0;
}
.actionBarItem {
color: rgba(0, 0, 0, 0.87);
cursor: pointer;
display: flex;
flex: 1;
flex-direction: column;
font-size: 13px;
padding: 6px;
row-gap: 6px;
user-select: none;
&:not(:last-child) {
border-right: 1px solid #eee;
}
&:hover {
background: rgba(0, 0, 0, 0.05);
color: rgba(0, 0, 0, 0.95);
}
}
.actionBarItemText {
display: -webkit-box;
line-clamp: 2;
-webkit-line-clamp: 2;
overflow: hidden;
text-align: center;
-webkit-box-orient: vertical;
}
.divider {
background: #eee;
border: 0;
height: 1px;
}
.menu {
margin: 0 -12px -5px;
width: calc(100% + 24px);

View File

@@ -386,6 +386,7 @@ export default {
archiveCards_title: 'أرشفة البطاقات',
assignAsOwner: 'تعيين كمالك',
cancel: 'إلغاء',
copy: 'نسخ',
copyCard_title: 'نسخ البطاقة',
createApiKey: 'إنشاء مفتاح API',
createBoard: 'إنشاء لوحة',
@@ -394,6 +395,7 @@ export default {
createLabel: 'إنشاء ملصق',
createNewLabel: 'إنشاء ملصق جديد',
createProject: 'إنشاء مشروع',
cut: 'قص',
cutCard_title: 'قص البطاقة',
deactivateUser: 'إلغاء تفعيل المستخدم',
deactivateUser_title: 'إلغاء تفعيل المستخدم',

View File

@@ -401,6 +401,7 @@ export default {
archiveCards_title: 'Архивиране на карти',
assignAsOwner: 'Назначаване като собственик',
cancel: 'Отказ',
copy: 'Копиране',
copyCard_title: 'Копиране на карта',
createApiKey: 'Създаване на API ключ',
createBoard: 'Създаване на табло',
@@ -409,6 +410,7 @@ export default {
createLabel: 'Създаване на етикет',
createNewLabel: 'Създаване на нов етикет',
createProject: 'Създаване на проект',
cut: 'Изрязване',
cutCard_title: 'Изрязване на карта',
deactivateUser: 'Деактивиране на потребител',
deactivateUser_title: 'Деактивиране на потребител',

View File

@@ -403,6 +403,7 @@ export default {
archiveCards_title: 'Arxivar targetes',
assignAsOwner: 'Assignar com a propietari',
cancel: 'Cancel·lar',
copy: 'Copiar',
copyCard_title: 'Copiar targeta',
createApiKey: 'Crear clau API',
createBoard: 'Crear tauler',
@@ -411,6 +412,7 @@ export default {
createLabel: 'Crear etiqueta',
createNewLabel: 'Crear nova etiqueta',
createProject: 'Crear projecte',
cut: 'Tallar',
cutCard_title: 'Tallar targeta',
deactivateUser: 'Desactivar usuari',
deactivateUser_title: 'Desactivar usuari',

View File

@@ -391,6 +391,7 @@ export default {
archiveCards_title: 'Archiv karet',
assignAsOwner: 'Přiřadit jako vlastníka',
cancel: 'Zrušit',
copy: 'Kopírovat',
copyCard_title: 'Kopírovat kartu',
createApiKey: 'Vytvořit API klíč',
createBoard: 'Vytvořit nástěnku',
@@ -399,6 +400,7 @@ export default {
createLabel: 'Vytvořit štítek',
createNewLabel: 'Vytvořit nový štítek',
createProject: 'Vytvořit projekt',
cut: 'Vyjmout',
cutCard_title: 'Vyjmout kartu',
deactivateUser: 'Deaktivace uživatele',
deactivateUser_title: 'Deaktivace uživatele',

View File

@@ -397,6 +397,7 @@ export default {
archiveCards_title: 'Arkivér kort',
assignAsOwner: 'Sæt som ejer',
cancel: 'Annuller',
copy: 'Kopiér',
copyCard_title: 'Kopiér kort',
createApiKey: 'Opret API-nøgle',
createBoard: 'Opret tavle',
@@ -405,6 +406,7 @@ export default {
createLabel: 'Opret label',
createNewLabel: 'Opret ny label',
createProject: 'Opret projekt',
cut: 'Klip',
cutCard_title: 'Klip kort',
deactivateUser: 'Deaktivér bruger',
deactivateUser_title: 'Deaktivér bruger',

View File

@@ -413,6 +413,7 @@ export default {
archiveCards_title: 'Karten archivieren',
assignAsOwner: 'Als Eigentümer zuweisen',
cancel: 'Abbrechen',
copy: 'Kopieren',
copyCard_title: 'Karte Kopieren',
createApiKey: 'API-Schlüssel erstellen',
createBoard: 'Arbeitsbereich erstellen',
@@ -421,6 +422,7 @@ export default {
createLabel: 'Label erstellen',
createNewLabel: 'Neues Label erstellen',
createProject: 'Projekt erstellen',
cut: 'Ausschneiden',
cutCard_title: 'Karte Ausschneiden',
deactivateUser: 'Benutzer deaktivieren',
deactivateUser_title: 'Benutzer deaktivieren',

View File

@@ -417,6 +417,7 @@ export default {
archiveCards_title: 'Αρχειοθέτηση καρτών',
assignAsOwner: 'Ορισμός ως ιδιοκτήτης',
cancel: 'Ακύρωση',
copy: 'Αντιγραφή',
copyCard_title: 'Αντιγραφή κάρτας',
createApiKey: 'Δημιουργία κλειδιού API',
createBoard: 'Δημιουργία πίνακα',
@@ -425,6 +426,7 @@ export default {
createLabel: 'Δημιουργία ετικέτας',
createNewLabel: 'Δημιουργία νέας ετικέτας',
createProject: 'Δημιουργία έργου',
cut: 'Αποκοπή',
cutCard_title: 'Αποκοπή κάρτας',
deactivateUser: 'Απενεργοποίηση χρήστη',
deactivateUser_title: 'Απενεργοποίηση χρήστη',

View File

@@ -393,6 +393,7 @@ export default {
archiveCards_title: 'Archive Cards',
assignAsOwner: 'Assign as owner',
cancel: 'Cancel',
copy: 'Copy',
copyCard_title: 'Copy Card',
createApiKey: 'Create API key',
createBoard: 'Create board',
@@ -401,6 +402,7 @@ export default {
createLabel: 'Create label',
createNewLabel: 'Create new label',
createProject: 'Create project',
cut: 'Cut',
cutCard_title: 'Cut Card',
deactivateUser: 'Deactivate user',
deactivateUser_title: 'Deactivate User',

View File

@@ -388,6 +388,7 @@ export default {
archiveCards_title: 'Archive Cards',
assignAsOwner: 'Assign as owner',
cancel: 'Cancel',
copy: 'Copy',
copyCard_title: 'Copy Card',
createApiKey: 'Create API key',
createBoard: 'Create board',
@@ -396,6 +397,7 @@ export default {
createLabel: 'Create label',
createNewLabel: 'Create new label',
createProject: 'Create project',
cut: 'Cut',
cutCard_title: 'Cut Card',
deactivateUser: 'Deactivate user',
deactivateUser_title: 'Deactivate User',

View File

@@ -403,6 +403,7 @@ export default {
archiveCards_title: 'Archivar tarjetas',
assignAsOwner: 'Asignar como propietario',
cancel: 'Cancelar',
copy: 'Copiar',
copyCard_title: 'Copiar tarjeta',
createApiKey: 'Crear clave API',
createBoard: 'Crear tablero',
@@ -411,6 +412,7 @@ export default {
createLabel: 'Crear etiqueta',
createNewLabel: 'Crear nueva etiqueta',
createProject: 'Crear proyecto',
cut: 'Cortar',
cutCard_title: 'Cortar tarjeta',
deactivateUser: 'Desactivar usuario',
deactivateUser_title: 'Desactivar usuario',

View File

@@ -395,6 +395,7 @@ export default {
archiveCards_title: 'Arhiveeri kaardid',
assignAsOwner: 'Määra omanikuks',
cancel: 'Tühista',
copy: 'Kopeeri',
copyCard_title: 'Kopeeri kaart',
createApiKey: 'Loo API võti',
createBoard: 'Loo tahvel',
@@ -403,6 +404,7 @@ export default {
createLabel: 'Loo silt',
createNewLabel: 'Loo uus silt',
createProject: 'Loo projekt',
cut: 'Lõika',
cutCard_title: 'Lõika kaart',
deactivateUser: 'Deaktiveeri kasutaja',
deactivateUser_title: 'Deaktiveeri kasutaja',

View File

@@ -397,6 +397,7 @@ export default {
archiveCards_title: 'آرشیو کارت‌ها',
assignAsOwner: 'تعیین به عنوان مالک',
cancel: 'لغو',
copy: 'کپی',
copyCard_title: 'کپی کارت',
createApiKey: 'ایجاد کلید API',
createBoard: 'ایجاد برد',
@@ -405,6 +406,7 @@ export default {
createLabel: 'ایجاد برچسب',
createNewLabel: 'ایجاد برچسب جدید',
createProject: 'ایجاد پروژه',
cut: 'برش',
cutCard_title: 'برش کارت',
deactivateUser: 'غیرفعال کردن کاربر',
deactivateUser_title: 'غیرفعال کردن کاربر',

View File

@@ -396,6 +396,7 @@ export default {
archiveCards_title: 'Arkistoi kortit',
assignAsOwner: 'Aseta omistajaksi',
cancel: 'Peruuta',
copy: 'Kopioi',
copyCard_title: 'Kopioi kortti',
createApiKey: 'Luo API-avain',
createBoard: 'Luo taulu',
@@ -404,6 +405,7 @@ export default {
createLabel: 'Luo tunniste',
createNewLabel: 'Luo uusi tunniste',
createProject: 'Luo projekti',
cut: 'Leikkaa',
cutCard_title: 'Leikkaa kortti',
deactivateUser: 'Poista käyttäjä käytöstä',
deactivateUser_title: 'Poista käyttäjä käytöstä',

View File

@@ -401,6 +401,7 @@ export default {
archiveCards_title: 'Archiver les cartes',
assignAsOwner: 'Assigner comme propriétaire',
cancel: 'Annuler',
copy: 'Copier',
copyCard_title: 'Copier la carte',
createApiKey: 'Créer une clé API',
createBoard: 'Créer un tableau',
@@ -409,6 +410,7 @@ export default {
createLabel: 'Créer une étiquette',
createNewLabel: 'Créer une nouvelle étiquette',
createProject: 'Créer un projet',
cut: 'Couper',
cutCard_title: 'Couper la carte',
deactivateUser: 'Désactiver lutilisateur',
deactivateUser_title: 'Désactiver lutilisateur',

View File

@@ -395,6 +395,7 @@ export default {
archiveCards_title: 'Archív kártyák',
assignAsOwner: 'Hozzárendelés tulajdonosnak',
cancel: 'Mégsem',
copy: 'Másolás',
copyCard_title: 'Kártya másolása',
createApiKey: 'API kulcs létrehozása',
createBoard: 'Tábla létrehozása',
@@ -403,6 +404,7 @@ export default {
createLabel: 'Címke létrehozása',
createNewLabel: 'Új címke létrehozása',
createProject: 'Projekt létrehozása',
cut: 'Kivágás',
cutCard_title: 'Kártya kivágása',
deactivateUser: 'Felhasználó inaktiválása',
deactivateUser_title: 'Felhasználó inaktiválása',

View File

@@ -396,6 +396,7 @@ export default {
archiveCards_title: 'Arsipkan kartu',
assignAsOwner: 'Tetapkan sebagai pemilik',
cancel: 'Batal',
copy: 'Salin',
copyCard_title: 'Salin Kartu',
createApiKey: 'Buat kunci API',
createBoard: 'Tambah papan',
@@ -404,6 +405,7 @@ export default {
createLabel: 'Tambah label',
createNewLabel: 'Tambah label baru',
createProject: 'Tambah proyek',
cut: 'Potong',
cutCard_title: 'Potong Kartu',
deactivateUser: 'Nonaktifkan pengguna',
deactivateUser_title: 'Nonaktifkan pengguna',

View File

@@ -399,6 +399,7 @@ export default {
archiveCards_title: 'Archivia schede',
assignAsOwner: 'Assegna come proprietario',
cancel: 'Annulla',
copy: 'Copia',
copyCard_title: 'Copia scheda',
createApiKey: 'Crea chiave API',
createBoard: 'Crea bacheca',
@@ -407,6 +408,7 @@ export default {
createLabel: 'Crea etichetta',
createNewLabel: 'Crea nuova etichetta',
createProject: 'Crea progetto',
cut: 'Taglia',
cutCard_title: 'Taglia scheda',
deactivateUser: 'Disattiva utente',
deactivateUser_title: 'Disattiva utente',

View File

@@ -393,6 +393,7 @@ export default {
archiveCards_title: 'カードをアーカイブ',
assignAsOwner: 'オーナーとして割り当て',
cancel: 'キャンセル',
copy: 'コピー',
copyCard_title: 'カードをコピー',
createApiKey: 'APIキーを作成',
createBoard: 'ボードを作成',
@@ -401,6 +402,7 @@ export default {
createLabel: 'ラベルを作成',
createNewLabel: '新しいラベルを作成',
createProject: 'プロジェクトを作成',
cut: '切り取り',
cutCard_title: 'カードを切り取り',
deactivateUser: 'ユーザーを非アクティブにする',
deactivateUser_title: 'ユーザーを非アクティブにする',

View File

@@ -390,6 +390,7 @@ export default {
archiveCards_title: '카드들 보관',
assignAsOwner: '소유자로 지정',
cancel: '취소',
copy: '복사',
copyCard_title: '카드 복사',
createApiKey: 'API 키 생성',
createBoard: '보드 생성',
@@ -398,6 +399,7 @@ export default {
createLabel: '라벨 생성',
createNewLabel: '새 라벨 생성',
createProject: '프로젝트 생성',
cut: '잘라내기',
cutCard_title: '카드 잘라내기',
deactivateUser: '사용자 비활성화',
deactivateUser_title: '사용자 비활성화',

View File

@@ -399,6 +399,7 @@ export default {
archiveCards_title: 'Kaarten archiveren',
assignAsOwner: 'Toewijzen als eigenaar',
cancel: 'Annuleren',
copy: 'Kopiëren',
copyCard_title: 'Kaart kopiëren',
createApiKey: 'API-sleutel aanmaken',
createBoard: 'Bord aanmaken',
@@ -407,6 +408,7 @@ export default {
createLabel: 'Label aanmaken',
createNewLabel: 'Nieuw label aanmaken',
createProject: 'Project aanmaken',
cut: 'Knippen',
cutCard_title: 'Kaart knippen',
deactivateUser: 'Gebruiker deactiveren',
deactivateUser_title: 'Gebruiker deactiveren',

View File

@@ -396,6 +396,7 @@ export default {
archiveCards_title: 'Archiwizuj karty',
assignAsOwner: 'Przypisz jako właściciela',
cancel: 'Anuluj',
copy: 'Kopiuj',
copyCard_title: 'Kopiuj kartę',
createApiKey: 'Utwórz klucz API',
createBoard: 'Utwórz tablicę',
@@ -404,6 +405,7 @@ export default {
createLabel: 'Utwórz oznaczenie',
createNewLabel: 'Utwórz nowe oznaczenie',
createProject: 'Utwórz projekt',
cut: 'Wytnij',
cutCard_title: 'Wytnij kartę',
deactivateUser: 'Dezaktywuj użytkownika',
deactivateUser_title: 'Dezaktywuj użytkownika',

View File

@@ -399,6 +399,7 @@ export default {
archiveCards_title: 'Arquivar cartões',
assignAsOwner: 'Atribuir como proprietário',
cancel: 'Cancelar',
copy: 'Copiar',
copyCard_title: 'Copiar cartão',
createApiKey: 'Criar chave API',
createBoard: 'Criar quadro',
@@ -407,6 +408,7 @@ export default {
createLabel: 'Criar rótulo',
createNewLabel: 'Criar novo rótulo',
createProject: 'Criar projeto',
cut: 'Cortar',
cutCard_title: 'Cortar cartão',
deactivateUser: 'Desativar usuário',
deactivateUser_title: 'Desativar usuário',

View File

@@ -402,6 +402,7 @@ export default {
archiveCards_title: 'Arquivar cartões',
assignAsOwner: 'Atribuir como proprietário',
cancel: 'Cancelar',
copy: 'Copiar',
copyCard_title: 'Copiar cartão',
createApiKey: 'Criar chave API',
createBoard: 'Criar quadro',
@@ -410,6 +411,7 @@ export default {
createLabel: 'Criar etiqueta',
createNewLabel: 'Criar nova etiqueta',
createProject: 'Criar projeto',
cut: 'Cortar',
cutCard_title: 'Cortar cartão',
deactivateUser: 'Desativar utilizador',
deactivateUser_title: 'Desativar utilizador',

View File

@@ -396,6 +396,7 @@ export default {
archiveCards_title: 'Arhivează cardurile',
assignAsOwner: 'Atribuie ca proprietar',
cancel: 'Anulează',
copy: 'Copiază',
copyCard_title: 'Copiază cardul',
createApiKey: 'Creează cheie API',
createBoard: 'Creați tablă',
@@ -404,6 +405,7 @@ export default {
createLabel: 'Creați eticheta',
createNewLabel: 'Creați o nouă etichetă',
createProject: 'Creați proiect',
cut: 'Taie',
cutCard_title: 'Taie cardul',
deactivateUser: 'Dezactivați utilizatorul',
deactivateUser_title: 'Dezactivați utilizatorul',

View File

@@ -398,6 +398,7 @@ export default {
archiveCards_title: 'Архивировать карточки',
assignAsOwner: 'Назначить владельцем',
cancel: 'Отменить',
copy: 'Копировать',
copyCard_title: 'Копировать карточку',
createApiKey: 'Создать ключ API',
createBoard: 'Создать доску',
@@ -406,6 +407,7 @@ export default {
createLabel: 'Создать метку',
createNewLabel: 'Создать новую метку',
createProject: 'Создать проект',
cut: 'Вырезать',
cutCard_title: 'Вырезать карточку',
deactivateUser: 'Деактивировать пользователя',
deactivateUser_title: 'Деактивировать пользователя',

View File

@@ -389,6 +389,7 @@ export default {
archiveCards_title: 'Archivovať karty',
assignAsOwner: 'Prideliť ako vlastníka',
cancel: 'Zrušiť',
copy: 'Kopírovať',
copyCard_title: 'Kopírovať kartu',
createApiKey: 'Vytvoriť API kľúč',
createBoard: 'Vytvoriť tabuľu',
@@ -397,6 +398,7 @@ export default {
createLabel: 'Vytvoriť štítok',
createNewLabel: 'Vytvoriť nový štítok',
createProject: 'Vytvoriť projekt',
cut: 'Vystrihnúť',
cutCard_title: 'Vystrihnúť kartu',
deactivateUser: 'Deaktivovať používateľa',
deactivateUser_title: 'Deaktivovať používateľa',

View File

@@ -392,6 +392,7 @@ export default {
archiveCards_title: 'Архивирај картице',
assignAsOwner: 'Додели као власника',
cancel: 'Откажи',
copy: 'Копирај',
copyCard_title: 'Копирај картицу',
createApiKey: 'Креирај API кључ',
createBoard: 'Направи таблу',
@@ -400,6 +401,7 @@ export default {
createLabel: 'Направи ознаку',
createNewLabel: 'Направи нову ознаку',
createProject: 'Направи пројекат',
cut: 'Исеци',
cutCard_title: 'Исеци картицу',
deactivateUser: 'Деактивирај корисника',
deactivateUser_title: 'Деактивирај корисника',

View File

@@ -394,6 +394,7 @@ export default {
archiveCards_title: 'Arhiviraj kartice',
assignAsOwner: 'Dodeli kao vlasnika',
cancel: 'Otkaži',
copy: 'Kopiraj',
copyCard_title: 'Kopiraj karticu',
createApiKey: 'Kreiraj API ključ',
createBoard: 'Napravi tablu',
@@ -402,6 +403,7 @@ export default {
createLabel: 'Napravi oznaku',
createNewLabel: 'Napravi novu oznaku',
createProject: 'Napravi projekat',
cut: 'Iseci',
cutCard_title: 'Iseci karticu',
deactivateUser: 'Deaktiviraj korisnika',
deactivateUser_title: 'Deaktiviraj korisnika',

View File

@@ -403,6 +403,7 @@ export default {
archiveCards_title: 'Arkivera kort',
assignAsOwner: 'Tilldela som ägare',
cancel: 'Avbryt',
copy: 'Kopiera',
copyCard_title: 'Kopiera kort',
createApiKey: 'Skapa API-nyckel',
createBoard: 'Skapa tavla',
@@ -411,6 +412,7 @@ export default {
createLabel: 'Skapa etikett',
createNewLabel: 'Skapa ny etikett',
createProject: 'Skapa projekt',
cut: 'Klipp ut',
cutCard_title: 'Klipp ut kort',
deactivateUser: 'Inaktivera användare',
deactivateUser_title: 'Inaktivera användare',

View File

@@ -399,6 +399,7 @@ export default {
archiveCards_title: 'Kartları arşivle',
assignAsOwner: 'Sahip olarak ata',
cancel: 'İptal',
copy: 'Kopyala',
copyCard_title: 'Kartı kopyala',
createApiKey: 'API anahtarı oluştur',
createBoard: 'Pano oluştur',
@@ -407,6 +408,7 @@ export default {
createLabel: 'Etiket oluştur',
createNewLabel: 'Yeni etiket oluştur',
createProject: 'Proje oluştur',
cut: 'Kes',
cutCard_title: 'Kartı kes',
deactivateUser: 'Kullanıcıyı devre dışı bırak',
deactivateUser_title: 'Kullanıcıyı devre dışı bırak',

View File

@@ -394,6 +394,7 @@ export default {
archiveCards_title: 'Архівувати картки',
assignAsOwner: 'Призначити власником',
cancel: 'Скасувати',
copy: 'Копіювати',
copyCard_title: 'Копіювати картку',
createApiKey: 'Створити ключ API',
createBoard: 'Створити дошку',
@@ -402,6 +403,7 @@ export default {
createLabel: 'Створити мітку',
createNewLabel: 'Створити нову мітку',
createProject: 'Створити проект',
cut: 'Вирізати',
cutCard_title: 'Вирізати картку',
deactivateUser: 'Деактивувати користувача',
deactivateUser_title: 'Деактивувати користувача',

View File

@@ -392,6 +392,7 @@ export default {
archiveCards_title: 'Kartalarni arxivlash',
assignAsOwner: 'Egasi sifatida tayinlash',
cancel: 'Bekor qilish',
copy: 'Nusxalash',
copyCard_title: 'Kartani nusxalash',
createApiKey: 'API kalitini yaratish',
createBoard: 'Doska yaratish',
@@ -400,6 +401,7 @@ export default {
createLabel: 'Yorliq yaratish',
createNewLabel: 'Yangi yorliq yaratish',
createProject: 'Loyiha yaratish',
cut: 'Kesish',
cutCard_title: 'Kartani kesish',
deactivateUser: 'Foydalanuvchini faolsizlantirish',
deactivateUser_title: 'Foydalanuvchini faolsizlantirish',

View File

@@ -369,6 +369,7 @@ export default {
archiveCards_title: '归档多个卡片',
assignAsOwner: '指定为所有者',
cancel: '取消',
copy: '复制',
copyCard_title: '复制卡片',
createApiKey: '创建API密钥',
createBoard: '创建面板',
@@ -377,6 +378,7 @@ export default {
createLabel: '创建标签',
createNewLabel: '创建新标签',
createProject: '创建项目',
cut: '剪切',
cutCard_title: '剪切卡片',
deactivateUser: '停用用户',
deactivateUser_title: '停用用户',

View File

@@ -369,6 +369,7 @@ export default {
archiveCards_title: '封存卡片',
assignAsOwner: '指派為擁有者',
cancel: '取消',
copy: '複製',
copyCard_title: '複製卡片',
createApiKey: '建立API金鑰',
createBoard: '創建看板',
@@ -377,6 +378,7 @@ export default {
createLabel: '創建標籤',
createNewLabel: '創建新標籤',
createProject: '創建專案',
cut: '剪下',
cutCard_title: '剪下卡片',
deactivateUser: '停用使用者',
deactivateUser_title: '停用使用者',