@mdguggenbichler/slugbase-core 0.0.31 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/frontend/src/components/FilterChips.tsx +5 -3
- package/frontend/src/components/StatCard.tsx +82 -5
- package/frontend/src/components/bookmarks/BookmarkCard.tsx +317 -210
- package/frontend/src/components/bookmarks/BookmarkTableView.tsx +47 -23
- package/frontend/src/components/collections/CollectionToolbar.tsx +294 -0
- package/frontend/src/components/collections/README.md +44 -0
- package/frontend/src/components/collections/index.ts +2 -0
- package/frontend/src/components/dashboard/DashboardHeader.tsx +16 -0
- package/frontend/src/components/dashboard/MostUsedTagsSection.tsx +49 -0
- package/frontend/src/components/dashboard/PinnedSection.tsx +110 -0
- package/frontend/src/components/dashboard/QuickAccessSection.tsx +120 -0
- package/frontend/src/components/dashboard/README.md +35 -0
- package/frontend/src/components/dashboard/StatsCardsRow.tsx +78 -0
- package/frontend/src/components/dashboard/index.ts +17 -0
- package/frontend/src/locales/de.json +2 -0
- package/frontend/src/locales/en.json +1 -0
- package/frontend/src/locales/es.json +2 -0
- package/frontend/src/locales/fr.json +2 -0
- package/frontend/src/locales/it.json +2 -0
- package/frontend/src/locales/ja.json +2 -0
- package/frontend/src/locales/nl.json +2 -0
- package/frontend/src/locales/pl.json +2 -0
- package/frontend/src/locales/pt.json +2 -0
- package/frontend/src/locales/ru.json +2 -0
- package/frontend/src/locales/zh.json +2 -0
- package/frontend/src/pages/Bookmarks.tsx +97 -214
- package/frontend/src/pages/Dashboard.tsx +99 -216
- package/frontend/src/pages/Folders.tsx +181 -251
- package/frontend/src/pages/Tags.tsx +87 -145
- package/package.json +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Link, useNavigate } from 'react-router-dom';
|
|
2
|
+
import { ArrowRight, Bookmark, Plus } from 'lucide-react';
|
|
3
|
+
import { Card, CardContent } from '../ui/card';
|
|
4
|
+
import { EmptyState } from '../EmptyState';
|
|
5
|
+
import Button from '../ui/Button';
|
|
6
|
+
import BookmarkCard from '../bookmarks/BookmarkCard';
|
|
7
|
+
|
|
8
|
+
export interface QuickAccessSectionBookmark {
|
|
9
|
+
id: string;
|
|
10
|
+
title: string;
|
|
11
|
+
url: string;
|
|
12
|
+
slug: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function toBookmarkCardItem(
|
|
16
|
+
b: QuickAccessSectionBookmark,
|
|
17
|
+
pinned: boolean
|
|
18
|
+
): Parameters<typeof BookmarkCard>[0]['bookmark'] {
|
|
19
|
+
return {
|
|
20
|
+
id: b.id,
|
|
21
|
+
title: b.title,
|
|
22
|
+
url: b.url,
|
|
23
|
+
slug: b.slug || '',
|
|
24
|
+
forwarding_enabled: !!b.slug,
|
|
25
|
+
folders: [],
|
|
26
|
+
tags: [],
|
|
27
|
+
shared_teams: [],
|
|
28
|
+
shared_users: [],
|
|
29
|
+
bookmark_type: 'own',
|
|
30
|
+
pinned,
|
|
31
|
+
access_count: undefined,
|
|
32
|
+
last_accessed_at: null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface QuickAccessSectionProps {
|
|
37
|
+
items: QuickAccessSectionBookmark[];
|
|
38
|
+
pathPrefix: string;
|
|
39
|
+
maxItems?: number;
|
|
40
|
+
/** Optional subtitle (e.g. "Most opened with shortcuts") */
|
|
41
|
+
subtitle?: string;
|
|
42
|
+
t: (key: string) => string;
|
|
43
|
+
onOpen: (id: string, url: string) => void;
|
|
44
|
+
onCopyUrl: (url: string) => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Quick access section: title, optional subtitle, "View all" link, grid (limited to maxItems), empty state.
|
|
49
|
+
*/
|
|
50
|
+
export function QuickAccessSection({
|
|
51
|
+
items,
|
|
52
|
+
pathPrefix,
|
|
53
|
+
maxItems = 6,
|
|
54
|
+
subtitle,
|
|
55
|
+
t,
|
|
56
|
+
onOpen,
|
|
57
|
+
onCopyUrl,
|
|
58
|
+
}: QuickAccessSectionProps) {
|
|
59
|
+
const navigate = useNavigate();
|
|
60
|
+
const prefix = pathPrefix.replace(/\/+/g, '/') || '';
|
|
61
|
+
const displayItems = items.slice(0, maxItems);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<section className="space-y-3">
|
|
65
|
+
<div className="flex items-center justify-between flex-wrap gap-2">
|
|
66
|
+
<div>
|
|
67
|
+
<h2 className="text-sm font-medium uppercase tracking-wide text-muted-foreground">
|
|
68
|
+
{t('dashboard.quickAccess')}
|
|
69
|
+
</h2>
|
|
70
|
+
{subtitle && (
|
|
71
|
+
<p className="mt-0.5 text-xs text-muted-foreground">{subtitle}</p>
|
|
72
|
+
)}
|
|
73
|
+
</div>
|
|
74
|
+
<Link
|
|
75
|
+
to={prefix + '/bookmarks'}
|
|
76
|
+
className="text-sm font-medium text-primary hover:underline inline-flex items-center gap-1"
|
|
77
|
+
>
|
|
78
|
+
{t('dashboard.viewAll')}
|
|
79
|
+
<ArrowRight className="h-4 w-4" />
|
|
80
|
+
</Link>
|
|
81
|
+
</div>
|
|
82
|
+
{displayItems.length > 0 ? (
|
|
83
|
+
<div className="grid gap-3 items-stretch [grid-template-columns:repeat(auto-fill,minmax(300px,1fr))]">
|
|
84
|
+
{displayItems.map((b) => (
|
|
85
|
+
<BookmarkCard
|
|
86
|
+
key={b.id}
|
|
87
|
+
bookmark={toBookmarkCardItem(b, false)}
|
|
88
|
+
compact={false}
|
|
89
|
+
selected={false}
|
|
90
|
+
onSelect={() => {}}
|
|
91
|
+
onEdit={() => navigate(prefix + '/bookmarks')}
|
|
92
|
+
onDelete={() => {}}
|
|
93
|
+
onCopyUrl={() => onCopyUrl(b.url)}
|
|
94
|
+
onOpen={() => onOpen(b.id, b.url)}
|
|
95
|
+
bulkMode={false}
|
|
96
|
+
t={t}
|
|
97
|
+
/>
|
|
98
|
+
))}
|
|
99
|
+
</div>
|
|
100
|
+
) : (
|
|
101
|
+
<Card className="border border-border bg-card shadow-sm">
|
|
102
|
+
<CardContent className="p-6">
|
|
103
|
+
<EmptyState
|
|
104
|
+
icon={Bookmark}
|
|
105
|
+
title={t('dashboard.noQuickAccessBookmarks')}
|
|
106
|
+
description={t('dashboard.noQuickAccessBookmarksHint')}
|
|
107
|
+
action={
|
|
108
|
+
<Link to={`${prefix}/bookmarks?create=true`}>
|
|
109
|
+
<Button variant="primary" icon={Plus}>
|
|
110
|
+
{t('bookmarks.create')}
|
|
111
|
+
</Button>
|
|
112
|
+
</Link>
|
|
113
|
+
}
|
|
114
|
+
/>
|
|
115
|
+
</CardContent>
|
|
116
|
+
</Card>
|
|
117
|
+
)}
|
|
118
|
+
</section>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Dashboard components
|
|
2
|
+
|
|
3
|
+
Reusable sections for the Overview/Dashboard page.
|
|
4
|
+
|
|
5
|
+
## Component structure
|
|
6
|
+
|
|
7
|
+
| Component | File | Responsibility |
|
|
8
|
+
|-----------|------|----------------|
|
|
9
|
+
| **DashboardHeader** | `DashboardHeader.tsx` | Page title, optional subtitle, optional actions (uses shared `PageHeader`). |
|
|
10
|
+
| **StatsCardsRow** | `StatsCardsRow.tsx` | Row of three stat cards (bookmarks, folders, tags) with optional per-card usage/limit/CTA for cloud. |
|
|
11
|
+
| **PinnedSection** | `PinnedSection.tsx` | "Pinned" section: title, "View all" link, grid of bookmark cards (max 6), empty state. |
|
|
12
|
+
| **QuickAccessSection** | `QuickAccessSection.tsx` | "Quick access" section: title, optional subtitle, "View all" link, grid (max 6), empty state. |
|
|
13
|
+
| **MostUsedTagsSection** | `MostUsedTagsSection.tsx` | "Most Used Tags" section: clickable tag chips linking to `bookmarks?tag_id=<id>`. |
|
|
14
|
+
|
|
15
|
+
## StatCard usage-display API (cloud-ready)
|
|
16
|
+
|
|
17
|
+
In `StatCard` (and via `StatsCardsRow` → `StatItem.usage`), optional props for plan/usage display:
|
|
18
|
+
|
|
19
|
+
- **`secondaryLine?: string`** — Text below the main value (e.g. "+12 this week").
|
|
20
|
+
- **`used?: number`** — When set with `limit`, shows usage (e.g. "42 / 50").
|
|
21
|
+
- **`limit?: number`** — When set with `used`, enables usage line and optional progress bar.
|
|
22
|
+
- **`labelOverride?: string`** — Label for the usage line (e.g. "Bookmarks used").
|
|
23
|
+
- **`showProgress?: boolean`** — Show progress bar when `used` and `limit` are set (default `true`).
|
|
24
|
+
- **`progressVariant?: 'normal' | 'warning' | 'danger'`** — Bar color (primary / amber / destructive).
|
|
25
|
+
- **`cta?: { label: string; onClick: () => void }`** — Optional button (e.g. "Upgrade"); only pass in cloud.
|
|
26
|
+
|
|
27
|
+
In slugbase-core the dashboard does **not** pass `used`, `limit`, or `cta`. slugbase-cloud can pass these to show plan usage and upgrade CTA without changing layout.
|
|
28
|
+
|
|
29
|
+
## Visual / UX improvements
|
|
30
|
+
|
|
31
|
+
- **Header**: Dashboard now has a clear title ("Overview") and subtitle ("Quick access and recent activity").
|
|
32
|
+
- **Stats row**: Typography hierarchy (label secondary, value prominent); optional secondary line and usage/progress/CTA supported.
|
|
33
|
+
- **Section spacing**: Tighter vertical rhythm (`space-y-6`), consistent section headers (uppercase, muted).
|
|
34
|
+
- **Pinned / Quick Access**: Limited to 6 items on overview with "View all →"; Quick Access has subtitle "Most opened with shortcuts".
|
|
35
|
+
- **Most Used Tags**: Improved spacing (`gap-2.5`), same click-to-filter behavior.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Bookmark, Folder, Tag } from 'lucide-react';
|
|
2
|
+
import { StatCard, type StatCardUsageProps } from '../StatCard';
|
|
3
|
+
|
|
4
|
+
export interface StatItem {
|
|
5
|
+
label: string;
|
|
6
|
+
value: number;
|
|
7
|
+
href: string;
|
|
8
|
+
secondaryLine?: string;
|
|
9
|
+
/** Optional usage/limit for cloud; in core leave undefined */
|
|
10
|
+
usage?: StatCardUsageProps;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface StatsCardsRowProps {
|
|
14
|
+
bookmarks: StatItem;
|
|
15
|
+
folders: StatItem;
|
|
16
|
+
tags: StatItem;
|
|
17
|
+
/** Optional; for denser layouts */
|
|
18
|
+
dense?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Row of three stat cards: bookmarks, folders, tags.
|
|
23
|
+
* Supports optional usage/limit/CTA per card for slugbase-cloud (pass usage in cloud only).
|
|
24
|
+
*/
|
|
25
|
+
export function StatsCardsRow({ bookmarks, folders, tags, dense }: StatsCardsRowProps) {
|
|
26
|
+
return (
|
|
27
|
+
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
|
|
28
|
+
<StatCard
|
|
29
|
+
label={bookmarks.label}
|
|
30
|
+
value={bookmarks.value}
|
|
31
|
+
icon={Bookmark}
|
|
32
|
+
href={bookmarks.href}
|
|
33
|
+
dense={dense}
|
|
34
|
+
iconContainerClassName="bg-primary/20"
|
|
35
|
+
iconColorClassName="text-primary"
|
|
36
|
+
secondaryLine={bookmarks.secondaryLine}
|
|
37
|
+
used={bookmarks.usage?.used}
|
|
38
|
+
limit={bookmarks.usage?.limit}
|
|
39
|
+
labelOverride={bookmarks.usage?.labelOverride}
|
|
40
|
+
showProgress={bookmarks.usage?.showProgress}
|
|
41
|
+
progressVariant={bookmarks.usage?.progressVariant}
|
|
42
|
+
cta={bookmarks.usage?.cta}
|
|
43
|
+
/>
|
|
44
|
+
<StatCard
|
|
45
|
+
label={folders.label}
|
|
46
|
+
value={folders.value}
|
|
47
|
+
icon={Folder}
|
|
48
|
+
href={folders.href}
|
|
49
|
+
dense={dense}
|
|
50
|
+
iconContainerClassName="bg-primary/20"
|
|
51
|
+
iconColorClassName="text-primary"
|
|
52
|
+
secondaryLine={folders.secondaryLine}
|
|
53
|
+
used={folders.usage?.used}
|
|
54
|
+
limit={folders.usage?.limit}
|
|
55
|
+
labelOverride={folders.usage?.labelOverride}
|
|
56
|
+
showProgress={folders.usage?.showProgress}
|
|
57
|
+
progressVariant={folders.usage?.progressVariant}
|
|
58
|
+
cta={folders.usage?.cta}
|
|
59
|
+
/>
|
|
60
|
+
<StatCard
|
|
61
|
+
label={tags.label}
|
|
62
|
+
value={tags.value}
|
|
63
|
+
icon={Tag}
|
|
64
|
+
href={tags.href}
|
|
65
|
+
dense={dense}
|
|
66
|
+
iconContainerClassName="bg-primary/20"
|
|
67
|
+
iconColorClassName="text-primary"
|
|
68
|
+
secondaryLine={tags.secondaryLine}
|
|
69
|
+
used={tags.usage?.used}
|
|
70
|
+
limit={tags.usage?.limit}
|
|
71
|
+
labelOverride={tags.usage?.labelOverride}
|
|
72
|
+
showProgress={tags.usage?.showProgress}
|
|
73
|
+
progressVariant={tags.usage?.progressVariant}
|
|
74
|
+
cta={tags.usage?.cta}
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { DashboardHeader } from './DashboardHeader';
|
|
2
|
+
export type { DashboardHeaderProps } from './DashboardHeader';
|
|
3
|
+
|
|
4
|
+
export { StatsCardsRow } from './StatsCardsRow';
|
|
5
|
+
export type { StatsCardsRowProps, StatItem } from './StatsCardsRow';
|
|
6
|
+
|
|
7
|
+
export { PinnedSection } from './PinnedSection';
|
|
8
|
+
export type { PinnedSectionProps, PinnedSectionBookmark } from './PinnedSection';
|
|
9
|
+
|
|
10
|
+
export { QuickAccessSection } from './QuickAccessSection';
|
|
11
|
+
export type {
|
|
12
|
+
QuickAccessSectionProps,
|
|
13
|
+
QuickAccessSectionBookmark,
|
|
14
|
+
} from './QuickAccessSection';
|
|
15
|
+
|
|
16
|
+
export { MostUsedTagsSection } from './MostUsedTagsSection';
|
|
17
|
+
export type { MostUsedTagsSectionProps, MostUsedTagsSectionTag } from './MostUsedTagsSection';
|
|
@@ -162,6 +162,7 @@
|
|
|
162
162
|
"forwardingPreview": "Weiterleitungs-URL",
|
|
163
163
|
"forwardingPreviewDescription": "Diese URL leitet zu deinem Lesezeichen weiter",
|
|
164
164
|
"bulkSelect": "Mehrere auswählen",
|
|
165
|
+
"moreActions": "Weitere Aktionen",
|
|
165
166
|
"bulkActions": "Massenaktionen",
|
|
166
167
|
"bulkMoveToFolder": "In Ordner verschieben",
|
|
167
168
|
"bulkAddTags": "Tags hinzufügen",
|
|
@@ -393,6 +394,7 @@
|
|
|
393
394
|
"createTag": "Tag erstellen",
|
|
394
395
|
"searchPlaceholder": "Lesezeichen suchen oder durch SlugBase navigieren",
|
|
395
396
|
"quickAccess": "Schnellzugriff",
|
|
397
|
+
"quickAccessSubtitle": "Am häufigsten mit Shortcuts geöffnet",
|
|
396
398
|
"viewAll": "Alle anzeigen",
|
|
397
399
|
"noQuickAccessBookmarks": "Noch keine Lesezeichen mit Shortcuts",
|
|
398
400
|
"noQuickAccessBookmarksHint": "Weise einem Lesezeichen einen Slug zu, um es hier zu sehen und go/slug im Browser zu nutzen.",
|
|
@@ -436,6 +436,7 @@
|
|
|
436
436
|
"createFolder": "Create Folder",
|
|
437
437
|
"createTag": "Create Tag",
|
|
438
438
|
"quickAccess": "Quick access",
|
|
439
|
+
"quickAccessSubtitle": "Most opened with shortcuts",
|
|
439
440
|
"pinned": "Pinned",
|
|
440
441
|
"noPinnedBookmarks": "No pinned bookmarks",
|
|
441
442
|
"pinFromBookmarks": "Pin bookmarks from the Bookmarks page to see them here.",
|
|
@@ -161,6 +161,7 @@
|
|
|
161
161
|
"forwardingPreview": "URL de reenvío",
|
|
162
162
|
"forwardingPreviewDescription": "Esta es la URL que redirigirá a tu marcador",
|
|
163
163
|
"bulkSelect": "Seleccionar múltiples",
|
|
164
|
+
"moreActions": "Más acciones",
|
|
164
165
|
"bulkActions": "Acciones en masa",
|
|
165
166
|
"bulkMoveToFolder": "Mover a carpeta",
|
|
166
167
|
"bulkAddTags": "Agregar etiquetas",
|
|
@@ -404,6 +405,7 @@
|
|
|
404
405
|
"createFolder": "Crear carpeta",
|
|
405
406
|
"createTag": "Crear etiqueta",
|
|
406
407
|
"quickAccess": "Acceso rápido",
|
|
408
|
+
"quickAccessSubtitle": "Más abiertos con atajos",
|
|
407
409
|
"viewAll": "Ver todo",
|
|
408
410
|
"noQuickAccessBookmarks": "Aún no hay marcadores con atajos",
|
|
409
411
|
"noQuickAccessBookmarksHint": "Añade un slug a un marcador para verlo aquí y usar go/slug en el navegador.",
|
|
@@ -122,6 +122,7 @@
|
|
|
122
122
|
"forwardingPreview": "URL de redirection",
|
|
123
123
|
"forwardingPreviewDescription": "C'est l'URL qui redirigera vers votre favori",
|
|
124
124
|
"bulkSelect": "Sélectionner plusieurs",
|
|
125
|
+
"moreActions": "Plus d'actions",
|
|
125
126
|
"bulkActions": "Actions groupées",
|
|
126
127
|
"bulkMoveToFolder": "Déplacer vers un dossier",
|
|
127
128
|
"bulkAddTags": "Ajouter des tags",
|
|
@@ -293,6 +294,7 @@
|
|
|
293
294
|
"noRecentBookmarks": "Aucun favori pour le moment",
|
|
294
295
|
"noTags": "Aucun tag pour le moment",
|
|
295
296
|
"quickAccess": "Accès rapide",
|
|
297
|
+
"quickAccessSubtitle": "Plus ouverts avec raccourcis",
|
|
296
298
|
"viewAll": "Tout voir",
|
|
297
299
|
"noQuickAccessBookmarks": "Aucun favori avec raccourci",
|
|
298
300
|
"noQuickAccessBookmarksHint": "Ajoutez un slug à un favori pour le voir ici et utiliser go/slug dans le navigateur.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "URL di reindirizzamento",
|
|
108
108
|
"forwardingPreviewDescription": "Questo è l'URL che reindirizzerà al tuo segnalibro",
|
|
109
109
|
"bulkSelect": "Seleziona multipli",
|
|
110
|
+
"moreActions": "Altre azioni",
|
|
110
111
|
"bulkActions": "Azioni di gruppo",
|
|
111
112
|
"bulkMoveToFolder": "Sposta in cartella",
|
|
112
113
|
"bulkAddTags": "Aggiungi tag",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noRecentBookmarks": "Ancora nessun segnalibro",
|
|
279
280
|
"noTags": "Ancora nessun tag",
|
|
280
281
|
"quickAccess": "Accesso rapido",
|
|
282
|
+
"quickAccessSubtitle": "Più aperti con scorciatoie",
|
|
281
283
|
"viewAll": "Vedi tutto",
|
|
282
284
|
"noQuickAccessBookmarks": "Nessun segnalibro con scorciatoia",
|
|
283
285
|
"noQuickAccessBookmarksHint": "Aggiungi uno slug a un segnalibro per vederlo qui e usare go/slug nel browser.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "転送URL",
|
|
108
108
|
"forwardingPreviewDescription": "これはブックマークに転送されるURLです",
|
|
109
109
|
"bulkSelect": "複数選択",
|
|
110
|
+
"moreActions": "その他の操作",
|
|
110
111
|
"bulkActions": "一括操作",
|
|
111
112
|
"bulkMoveToFolder": "フォルダに移動",
|
|
112
113
|
"bulkAddTags": "タグを追加",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noTags": "まだタグがありません",
|
|
279
280
|
"searchPlaceholder": "ブックマークを検索するか、SlugBase内を移動",
|
|
280
281
|
"quickAccess": "クイックアクセス",
|
|
282
|
+
"quickAccessSubtitle": "ショートカットでよく開くもの",
|
|
281
283
|
"viewAll": "すべて表示",
|
|
282
284
|
"noQuickAccessBookmarks": "ショートカット付きブックマークはまだありません",
|
|
283
285
|
"noQuickAccessBookmarksHint": "ブックマークにスラグを追加するとここに表示され、ブラウザで go/スラグ が使えます。",
|
|
@@ -122,6 +122,7 @@
|
|
|
122
122
|
"forwardingPreview": "Doorstuur-URL",
|
|
123
123
|
"forwardingPreviewDescription": "Dit is de URL die doorverwijst naar je bladwijzer",
|
|
124
124
|
"bulkSelect": "Meerdere selecteren",
|
|
125
|
+
"moreActions": "Meer acties",
|
|
125
126
|
"bulkActions": "Bulkacties",
|
|
126
127
|
"bulkMoveToFolder": "Verplaatsen naar map",
|
|
127
128
|
"bulkAddTags": "Tags toevoegen",
|
|
@@ -293,6 +294,7 @@
|
|
|
293
294
|
"noTags": "Nog geen tags",
|
|
294
295
|
"searchPlaceholder": "Zoek een bladwijzer of navigeer door SlugBase",
|
|
295
296
|
"quickAccess": "Snelle toegang",
|
|
297
|
+
"quickAccessSubtitle": "Meest geopend met snelkoppelingen",
|
|
296
298
|
"viewAll": "Alles bekijken",
|
|
297
299
|
"noQuickAccessBookmarks": "Nog geen bladwijzers met snelkoppeling",
|
|
298
300
|
"noQuickAccessBookmarksHint": "Voeg een slug toe aan een bladwijzer om die hier te zien en go/slug in de browser te gebruiken.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "URL przekierowania",
|
|
108
108
|
"forwardingPreviewDescription": "To jest URL, który przekieruje do Twojej zakładki",
|
|
109
109
|
"bulkSelect": "Wybierz wiele",
|
|
110
|
+
"moreActions": "Więcej akcji",
|
|
110
111
|
"bulkActions": "Akcje grupowe",
|
|
111
112
|
"bulkMoveToFolder": "Przenieś do folderu",
|
|
112
113
|
"bulkAddTags": "Dodaj tagi",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noTags": "Brak tagów",
|
|
279
280
|
"searchPlaceholder": "Szukaj zakładki lub nawiguj po SlugBase",
|
|
280
281
|
"quickAccess": "Szybki dostęp",
|
|
282
|
+
"quickAccessSubtitle": "Najczęściej otwierane ze skrótami",
|
|
281
283
|
"viewAll": "Zobacz wszystko",
|
|
282
284
|
"noQuickAccessBookmarks": "Brak zakładek ze skrótami",
|
|
283
285
|
"noQuickAccessBookmarksHint": "Dodaj slug do zakładki, aby zobaczyć ją tutaj i używać go/slug w przeglądarce.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "URL de redirecionamento",
|
|
108
108
|
"forwardingPreviewDescription": "Esta é a URL que redirecionará para seu favorito",
|
|
109
109
|
"bulkSelect": "Selecionar múltiplos",
|
|
110
|
+
"moreActions": "Mais ações",
|
|
110
111
|
"bulkActions": "Ações em massa",
|
|
111
112
|
"bulkMoveToFolder": "Mover para pasta",
|
|
112
113
|
"bulkAddTags": "Adicionar tags",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noTags": "Ainda não há tags",
|
|
279
280
|
"searchPlaceholder": "Pesquisar um favorito ou navegar pelo SlugBase",
|
|
280
281
|
"quickAccess": "Acesso rápido",
|
|
282
|
+
"quickAccessSubtitle": "Mais abertos com atalhos",
|
|
281
283
|
"viewAll": "Ver tudo",
|
|
282
284
|
"noQuickAccessBookmarks": "Ainda não há favoritos com atalhos",
|
|
283
285
|
"noQuickAccessBookmarksHint": "Adicione um slug a um favorito para vê-lo aqui e usar go/slug no navegador.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "URL переадресации",
|
|
108
108
|
"forwardingPreviewDescription": "Это URL, который будет перенаправлять на вашу закладку",
|
|
109
109
|
"bulkSelect": "Выбрать несколько",
|
|
110
|
+
"moreActions": "Ещё действия",
|
|
110
111
|
"bulkActions": "Массовые действия",
|
|
111
112
|
"bulkMoveToFolder": "Переместить в папку",
|
|
112
113
|
"bulkAddTags": "Добавить теги",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noTags": "Пока нет тегов",
|
|
279
280
|
"searchPlaceholder": "Поиск закладки или навигация по SlugBase",
|
|
280
281
|
"quickAccess": "Быстрый доступ",
|
|
282
|
+
"quickAccessSubtitle": "Наиболее открываемые по ярлыкам",
|
|
281
283
|
"viewAll": "Показать все",
|
|
282
284
|
"noQuickAccessBookmarks": "Пока нет закладок с ярлыками",
|
|
283
285
|
"noQuickAccessBookmarksHint": "Добавьте слаг к закладке, чтобы видеть её здесь и использовать go/слаг в браузере.",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"forwardingPreview": "转发URL",
|
|
108
108
|
"forwardingPreviewDescription": "这是将转发到您的书签的URL",
|
|
109
109
|
"bulkSelect": "选择多个",
|
|
110
|
+
"moreActions": "更多操作",
|
|
110
111
|
"bulkActions": "批量操作",
|
|
111
112
|
"bulkMoveToFolder": "移动到文件夹",
|
|
112
113
|
"bulkAddTags": "添加标签",
|
|
@@ -278,6 +279,7 @@
|
|
|
278
279
|
"noTags": "还没有标签",
|
|
279
280
|
"searchPlaceholder": "搜索书签或在 SlugBase 中导航",
|
|
280
281
|
"quickAccess": "快速访问",
|
|
282
|
+
"quickAccessSubtitle": "最常通过快捷方式打开",
|
|
281
283
|
"viewAll": "查看全部",
|
|
282
284
|
"noQuickAccessBookmarks": "暂无带快捷方式的书签",
|
|
283
285
|
"noQuickAccessBookmarksHint": "为书签添加 slug 即可在此显示,并在浏览器中使用 go/slug。",
|