@mdguggenbichler/slugbase-core 0.0.4 → 0.0.6

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.
Files changed (120) hide show
  1. package/frontend/index.tsx +3 -3
  2. package/frontend/public/favicon.svg +1 -0
  3. package/frontend/public/slugbase_icon_blue.svg +1 -0
  4. package/frontend/public/slugbase_icon_white.png +0 -0
  5. package/frontend/public/slugbase_icon_white.svg +1 -0
  6. package/frontend/src/App.tsx +179 -0
  7. package/frontend/src/api/client.ts +134 -0
  8. package/frontend/src/components/AppSidebar.tsx +214 -0
  9. package/frontend/src/components/EmptyState.tsx +33 -0
  10. package/frontend/src/components/Favicon.tsx +76 -0
  11. package/frontend/src/components/FilterChips.tsx +60 -0
  12. package/frontend/src/components/FolderIcon.tsx +207 -0
  13. package/frontend/src/components/GlobalSearch.tsx +275 -0
  14. package/frontend/src/components/Layout.tsx +60 -0
  15. package/frontend/src/components/PageHeader.tsx +31 -0
  16. package/frontend/src/components/ScopeSegmentedControl.tsx +42 -0
  17. package/frontend/src/components/SentryDebug.tsx +32 -0
  18. package/frontend/src/components/StatCard.tsx +66 -0
  19. package/frontend/src/components/TopBar.tsx +63 -0
  20. package/frontend/src/components/UserDropdown.tsx +86 -0
  21. package/frontend/src/components/admin/AdminAI.tsx +207 -0
  22. package/frontend/src/components/admin/AdminOIDCProviders.tsx +183 -0
  23. package/frontend/src/components/admin/AdminSettings.tsx +413 -0
  24. package/frontend/src/components/admin/AdminTeams.tsx +177 -0
  25. package/frontend/src/components/admin/AdminUsers.tsx +225 -0
  26. package/frontend/src/components/bookmarks/BookmarkCard.tsx +312 -0
  27. package/frontend/src/components/bookmarks/BookmarkListItem.tsx +159 -0
  28. package/frontend/src/components/bookmarks/BookmarkTableView.tsx +419 -0
  29. package/frontend/src/components/bookmarks/BulkActionModals.tsx +162 -0
  30. package/frontend/src/components/bookmarks/FilterChips.tsx +5 -0
  31. package/frontend/src/components/modals/BookmarkModal.tsx +493 -0
  32. package/frontend/src/components/modals/FolderModal.tsx +306 -0
  33. package/frontend/src/components/modals/ImportModal.tsx +232 -0
  34. package/frontend/src/components/modals/OIDCProviderModal.tsx +284 -0
  35. package/frontend/src/components/modals/SharingModal.tsx +96 -0
  36. package/frontend/src/components/modals/TagModal.tsx +101 -0
  37. package/frontend/src/components/modals/TeamAssignmentModal.tsx +354 -0
  38. package/frontend/src/components/modals/TeamModal.tsx +117 -0
  39. package/frontend/src/components/modals/UserModal.tsx +225 -0
  40. package/frontend/src/components/profile/CreateTokenModal.tsx +172 -0
  41. package/frontend/src/components/sharing/ShareResourceDialog.tsx +422 -0
  42. package/frontend/src/components/ui/Autocomplete.tsx +155 -0
  43. package/frontend/src/components/ui/Button.tsx +68 -0
  44. package/frontend/src/components/ui/ConfirmDialog.tsx +79 -0
  45. package/frontend/src/components/ui/FormFieldWrapper.tsx +36 -0
  46. package/frontend/src/components/ui/ModalFooterActions.tsx +49 -0
  47. package/frontend/src/components/ui/ModalSection.tsx +34 -0
  48. package/frontend/src/components/ui/PageLoadingSkeleton.tsx +24 -0
  49. package/frontend/src/components/ui/Select.tsx +61 -0
  50. package/frontend/src/components/ui/SharingField.tsx +298 -0
  51. package/frontend/src/components/ui/Toast.tsx +47 -0
  52. package/frontend/src/components/ui/Tooltip.tsx +21 -0
  53. package/frontend/src/components/ui/alert-dialog.tsx +139 -0
  54. package/frontend/src/components/ui/badge.tsx +36 -0
  55. package/frontend/src/components/ui/button-base.tsx +57 -0
  56. package/frontend/src/components/ui/card.tsx +76 -0
  57. package/frontend/src/components/ui/command.tsx +161 -0
  58. package/frontend/src/components/ui/dialog.tsx +120 -0
  59. package/frontend/src/components/ui/dropdown-menu.tsx +199 -0
  60. package/frontend/src/components/ui/input.tsx +22 -0
  61. package/frontend/src/components/ui/label.tsx +24 -0
  62. package/frontend/src/components/ui/popover.tsx +33 -0
  63. package/frontend/src/components/ui/progress.tsx +26 -0
  64. package/frontend/src/components/ui/scroll-area.tsx +48 -0
  65. package/frontend/src/components/ui/select-base.tsx +159 -0
  66. package/frontend/src/components/ui/separator.tsx +29 -0
  67. package/frontend/src/components/ui/sheet.tsx +140 -0
  68. package/frontend/src/components/ui/sidebar.tsx +783 -0
  69. package/frontend/src/components/ui/skeleton.tsx +15 -0
  70. package/frontend/src/components/ui/sonner.tsx +46 -0
  71. package/frontend/src/components/ui/switch.tsx +28 -0
  72. package/frontend/src/components/ui/table.tsx +120 -0
  73. package/frontend/src/components/ui/tooltip-base.tsx +30 -0
  74. package/frontend/src/config/api.ts +16 -0
  75. package/frontend/src/config/mode.ts +6 -0
  76. package/frontend/src/contexts/AppConfigContext.tsx +39 -0
  77. package/frontend/src/contexts/AuthContext.tsx +137 -0
  78. package/frontend/src/contexts/SearchCommandContext.tsx +28 -0
  79. package/frontend/src/hooks/use-mobile.tsx +19 -0
  80. package/frontend/src/hooks/useConfirmDialog.ts +63 -0
  81. package/frontend/src/hooks/useMarketingTheme.ts +47 -0
  82. package/frontend/src/i18n.ts +39 -0
  83. package/frontend/src/index.css +117 -0
  84. package/frontend/src/instrument.ts +20 -0
  85. package/frontend/src/lib/utils.ts +6 -0
  86. package/frontend/src/locales/de.json +899 -0
  87. package/frontend/src/locales/en.json +937 -0
  88. package/frontend/src/locales/es.json +884 -0
  89. package/frontend/src/locales/fr.json +550 -0
  90. package/frontend/src/locales/it.json +535 -0
  91. package/frontend/src/locales/ja.json +535 -0
  92. package/frontend/src/locales/nl.json +550 -0
  93. package/frontend/src/locales/pl.json +535 -0
  94. package/frontend/src/locales/pt.json +535 -0
  95. package/frontend/src/locales/ru.json +535 -0
  96. package/frontend/src/locales/zh.json +535 -0
  97. package/frontend/src/main.tsx +44 -0
  98. package/frontend/src/pages/Bookmarks.tsx +1004 -0
  99. package/frontend/src/pages/Dashboard.tsx +427 -0
  100. package/frontend/src/pages/Folders.tsx +578 -0
  101. package/frontend/src/pages/GoPreferences.tsx +134 -0
  102. package/frontend/src/pages/Login.tsx +196 -0
  103. package/frontend/src/pages/PasswordReset.tsx +242 -0
  104. package/frontend/src/pages/Profile.tsx +593 -0
  105. package/frontend/src/pages/SearchEngineGuide.tsx +135 -0
  106. package/frontend/src/pages/Setup.tsx +210 -0
  107. package/frontend/src/pages/Signup.tsx +199 -0
  108. package/frontend/src/pages/Tags.tsx +421 -0
  109. package/frontend/src/pages/VerifyEmail.tsx +254 -0
  110. package/frontend/src/pages/admin/AdminAIPage.tsx +5 -0
  111. package/frontend/src/pages/admin/AdminLayout.tsx +40 -0
  112. package/frontend/src/pages/admin/AdminMembersPage.tsx +5 -0
  113. package/frontend/src/pages/admin/AdminOIDCPage.tsx +5 -0
  114. package/frontend/src/pages/admin/AdminSettingsPage.tsx +5 -0
  115. package/frontend/src/pages/admin/AdminTeamsPage.tsx +5 -0
  116. package/frontend/src/utils/favicon.ts +36 -0
  117. package/frontend/src/utils/formatRelativeTime.ts +37 -0
  118. package/frontend/src/utils/safeHref.ts +31 -0
  119. package/frontend/src/vite-env.d.ts +10 -0
  120. package/package.json +9 -1
@@ -0,0 +1,535 @@
1
+ {
2
+ "app": {
3
+ "name": "SlugBase",
4
+ "tagline": "Os seus links. A sua estrutura. O seu idioma. As suas regras."
5
+ },
6
+ "auth": {
7
+ "login": "Entrar",
8
+ "logout": "Sair",
9
+ "loginWith": "Entrar com {{provider}}",
10
+ "notAuthenticated": "Não autenticado",
11
+ "authFailed": "Autenticação falhou",
12
+ "loginFailed": "Login falhou",
13
+ "oidcAuthFailed": "Autenticação OIDC falhou. Por favor, tente novamente.",
14
+ "oidcAutoCreateDisabled": "A criação automática de usuários está desabilitada para este provedor OIDC. Por favor, entre em contato com um administrador.",
15
+ "noProviders": "Nenhum provedor OIDC configurado",
16
+ "noProvidersDescription": "Por favor, configure um provedor OIDC nas configurações de administração para habilitar o login OIDC.",
17
+ "email": "Email",
18
+ "emailPlaceholder": "seu@email.com",
19
+ "password": "Senha",
20
+ "passwordPlaceholder": "Digite sua senha",
21
+ "forgotPassword": "Esqueceu a senha?",
22
+ "or": "Ou continue com"
23
+ },
24
+ "setup": {
25
+ "title": "Configuração inicial",
26
+ "description": "Bem-vindo ao SlugBase! Crie seu primeiro usuário administrador para começar.",
27
+ "email": "Email",
28
+ "emailPlaceholder": "admin@example.com",
29
+ "name": "Nome",
30
+ "namePlaceholder": "Usuário administrador",
31
+ "password": "Senha",
32
+ "passwordPlaceholder": "Mínimo 8 caracteres",
33
+ "confirmPassword": "Confirmar senha",
34
+ "confirmPasswordPlaceholder": "Digite sua senha novamente",
35
+ "passwordMismatch": "As senhas não coincidem",
36
+ "passwordTooShort": "A senha deve ter pelo menos 8 caracteres",
37
+ "adminNote": "Este usuário será criado como administrador. Você pode configurar provedores OIDC posteriormente nas configurações de administração.",
38
+ "submit": "Criar usuário administrador",
39
+ "alreadyInitialized": "Sistema já inicializado",
40
+ "success": "Configuração concluída com sucesso!",
41
+ "redirecting": "Redirecionando para o login...",
42
+ "redirectingToDashboard": "Redirecionando para o painel..."
43
+ },
44
+ "bookmarks": {
45
+ "title": "Favoritos",
46
+ "create": "Criar favorito",
47
+ "edit": "Editar favorito",
48
+ "delete": "Excluir favorito",
49
+ "deleteBookmark": "Excluir favorito",
50
+ "sharingSummary": "{{teamCount}} {{teams}}, {{userCount}} {{users}}",
51
+ "name": "Título",
52
+ "url": "URL",
53
+ "slug": "Slug",
54
+ "slugOptionalHint": "Deixe vazio se você não precisar de um slug personalizado",
55
+ "forwardingEnabled": "Habilitar redirecionamento",
56
+ "forwardingUrl": "URL de redirecionamento",
57
+ "copyUrl": "Copiar URL",
58
+ "copied": "Copiado!",
59
+ "folder": "Pasta",
60
+ "folders": "Pastas",
61
+ "tags": "Tags",
62
+ "noFolder": "Sem pasta",
63
+ "noFoldersAvailable": "Nenhuma pasta disponível. Crie pastas para organizar seus favoritos.",
64
+ "foldersDescription": "Selecione uma ou mais pastas para organizar este favorito",
65
+ "noTags": "Sem tags",
66
+ "save": "Salvar",
67
+ "cancel": "Cancelar",
68
+ "deleteConfirm": "Tem certeza de que deseja excluir este favorito?",
69
+ "deleteConfirmWithName": "Tem certeza de que deseja excluir \"{{name}}\"?",
70
+ "empty": "Ainda não há favoritos. Crie seu primeiro favorito!",
71
+ "emptyDescription": "Comece criando seu primeiro favorito ou importando favoritos existentes.",
72
+ "emptyCreateFirst": "Crie seu primeiro favorito",
73
+ "emptyImport": "Importar favoritos",
74
+ "emptyLearnForwarding": "Aprenda como funciona o redirecionamento",
75
+ "filterByFolder": "Filtrar por pasta",
76
+ "filterByTag": "Filtrar por tag",
77
+ "allFolders": "Todas as pastas",
78
+ "allTags": "Todas as tags",
79
+ "open": "Abrir",
80
+ "shareWithTeams": "Compartilhar com equipes",
81
+ "shareWithTeamsDescription": "Selecione equipes para compartilhar este favorito. Todos os membros das equipes selecionadas poderão visualizar este favorito.",
82
+ "shareAllTeams": "Compartilhar com todas as minhas equipes",
83
+ "shareAllTeamsDescription": "Compartilhar com todas as equipes das quais você é membro",
84
+ "shareWithUsers": "Compartilhar com usuários",
85
+ "shareWithUsersDescription": "Selecione usuários específicos para compartilhar",
86
+ "sharedWith": "Compartilhado com:",
87
+ "users": "usuários",
88
+ "shared": "Compartilhado",
89
+ "sharedWithTeam": "Compartilhado com equipe",
90
+ "sharedWithTeams": "Compartilhado · {{count}} {{teams}}",
91
+ "teams": "equipes",
92
+ "optional": "Opcional",
93
+ "slugRequired": "O slug é obrigatório quando o redirecionamento está habilitado",
94
+ "slugAlreadyExists": "O slug já existe. Os slugs devem ser únicos em todos os favoritos.",
95
+ "searchEngineNote": "Quer acessar rapidamente seus favoritos da barra de endereços do navegador?",
96
+ "searchEngineGuideLink": "Aprenda como configurar um mecanismo de pesquisa personalizado",
97
+ "viewMode": "Modo de visualização",
98
+ "viewCard": "Visualização em cards",
99
+ "viewList": "Visualização em lista",
100
+ "compactMode": "Modo compacto",
101
+ "sortBy": "Ordenar por",
102
+ "sortRecentlyAdded": "Adicionados recentemente",
103
+ "sortAlphabetical": "Alfabético",
104
+ "sortMostUsed": "Mais usados",
105
+ "sortRecentlyAccessed": "Acessados recentemente",
106
+ "resetFilters": "Limpar filtros",
107
+ "forwardingPreview": "URL de redirecionamento",
108
+ "forwardingPreviewDescription": "Esta é a URL que redirecionará para seu favorito",
109
+ "bulkSelect": "Selecionar múltiplos",
110
+ "bulkActions": "Ações em massa",
111
+ "bulkMoveToFolder": "Mover para pasta",
112
+ "bulkAddTags": "Adicionar tags",
113
+ "bulkShare": "Compartilhar com equipes",
114
+ "bulkDelete": "Excluir selecionados",
115
+ "selectedCount": "{{count}} selecionados",
116
+ "selectAll": "Selecionar tudo",
117
+ "deselectAll": "Desmarcar tudo",
118
+ "paginationShowing": "Mostrando {{from}}-{{to}} de {{total}}",
119
+ "paginationPrevious": "Anterior",
120
+ "paginationNext": "Próximo",
121
+ "pinned": "Fixado",
122
+ "favorites": "Favoritos",
123
+ "import": "Importar",
124
+ "export": "Exportar",
125
+ "importBrowser": "Importar favoritos do navegador",
126
+ "importJson": "Importar JSON",
127
+ "importHtml": "Importar HTML",
128
+ "exportJson": "Exportar como JSON",
129
+ "exportHtml": "Exportar como HTML",
130
+ "importDescription": "Importe favoritos de um arquivo JSON ou HTML. Arquivos JSON devem conter um array de objetos de favorito com campos title e url.",
131
+ "selectFile": "Selecionar arquivo",
132
+ "supportedFormats": "Formatos suportados: JSON, HTML (formato de favoritos Netscape)",
133
+ "importSuccess": "Importados {{success}} favorito(s), {{failed}} falharam"
134
+ },
135
+ "folders": {
136
+ "title": "Pastas",
137
+ "create": "Criar pasta",
138
+ "edit": "Editar pasta",
139
+ "delete": "Excluir pasta",
140
+ "deleteFolder": "Excluir pasta",
141
+ "name": "Nome da pasta",
142
+ "icon": "Ícone",
143
+ "searchIcons": "Pesquisar ícones por nome...",
144
+ "noIcon": "Sem ícone",
145
+ "selectedIcon": "Ícone selecionado",
146
+ "clearIcon": "Remover ícone",
147
+ "showingPopular": "Mostrando {{count}} ícones populares",
148
+ "showingAllIcons": "Mostrando todos os {{count}} ícones",
149
+ "showAllIcons": "Mostrar todos os ícones",
150
+ "showPopularOnly": "Mostrar apenas populares",
151
+ "noIconsFound": "Nenhum ícone encontrado correspondendo à sua pesquisa",
152
+ "useIcon": "Usar ícone",
153
+ "typeIconName": "Digite um nome de ícone para usar qualquer ícone Lucide",
154
+ "empty": "Ainda não há pastas",
155
+ "deleteConfirm": "Tem certeza de que deseja excluir esta pasta?",
156
+ "deleteConfirmWithName": "Tem certeza de que deseja excluir \"{{name}}\"?",
157
+ "sharedWith": "Compartilhado com:",
158
+ "shareWithTeams": "Compartilhar com equipes",
159
+ "shareWithTeamsDescription": "Selecione equipes para compartilhar esta pasta. Todos os favoritos desta pasta serão compartilhados com as equipes selecionadas.",
160
+ "shared": "Compartilhado"
161
+ },
162
+ "tags": {
163
+ "title": "Tags",
164
+ "create": "Criar tag",
165
+ "edit": "Editar tag",
166
+ "delete": "Excluir tag",
167
+ "deleteTag": "Excluir tag",
168
+ "name": "Nome da tag",
169
+ "empty": "Ainda não há tags",
170
+ "deleteConfirm": "Tem certeza de que deseja excluir esta tag?",
171
+ "deleteConfirmWithName": "Tem certeza de que deseja excluir \"{{name}}\"?"
172
+ },
173
+ "profile": {
174
+ "title": "Perfil",
175
+ "description": "Gerencie as configurações e preferências da sua conta",
176
+ "accountInformation": "Informações da conta",
177
+ "preferences": "Preferências",
178
+ "userKey": "Chave do usuário",
179
+ "userKeyDescription": "Seu identificador único para redirecionamento de favoritos. Compartilhe isso com outros para permitir que acessem seus favoritos compartilhados.",
180
+ "email": "Email",
181
+ "emailPlaceholder": "seu@email.com",
182
+ "name": "Nome",
183
+ "namePlaceholder": "Seu nome",
184
+ "language": "Idioma",
185
+ "theme": "Tema",
186
+ "themeAuto": "Automático",
187
+ "themeLight": "Claro",
188
+ "themeDark": "Escuro",
189
+ "save": "Salvar configurações",
190
+ "languageEnglish": "Inglês",
191
+ "languageGerman": "Alemão",
192
+ "languageFrench": "Francês",
193
+ "languageSpanish": "Espanhol",
194
+ "languageItalian": "Italiano",
195
+ "languagePortuguese": "Português",
196
+ "languageDutch": "Holandês",
197
+ "languageRussian": "Russo",
198
+ "languageJapanese": "Japonês",
199
+ "languageChinese": "Chinês",
200
+ "languagePolish": "Polonês",
201
+ "emailManagedByOIDC": "O email é gerenciado pelo seu provedor de identidade e não pode ser alterado aqui.",
202
+ "apiAccess": "Acesso API",
203
+ "apiAccessDescription": "Crie e gerencie tokens de API pessoais para autenticação REST API.",
204
+ "apiTokenWarning": "Tokens de API concedem acesso total à sua conta. Guarde-os com segurança e nunca os compartilhe.",
205
+ "createToken": "Criar token",
206
+ "tokenName": "Nome do token",
207
+ "tokenNamePlaceholder": "ex. CLI, CI/CD",
208
+ "tokenCreated": "Token criado",
209
+ "tokenRevealWarning": "Este token não será mostrado novamente. Copie-o agora.",
210
+ "copyToken": "Copiar token",
211
+ "revokeToken": "Revogar",
212
+ "revokeTokenConfirm": "Tem certeza de que deseja revogar este token? Ele deixará de funcionar imediatamente.",
213
+ "lastUsed": "Último uso",
214
+ "neverUsed": "Nunca usado",
215
+ "createdAt": "Criado",
216
+ "viewApiDocs": "Ver documentação da API",
217
+ "noTokens": "Nenhum token de API",
218
+ "noTokensDescription": "Crie um token para se autenticar na API REST a partir de scripts, CLI ou CI/CD.",
219
+ "yourTokens": "Seus tokens"
220
+ },
221
+ "common": {
222
+ "loading": "Carregando...",
223
+ "error": "Ocorreu um erro",
224
+ "success": "Sucesso",
225
+ "close": "Fechar",
226
+ "delete": "Excluir",
227
+ "edit": "Editar",
228
+ "create": "Criar",
229
+ "save": "Salvar",
230
+ "cancel": "Cancelar",
231
+ "clearFilter": "Limpar filtro",
232
+ "yes": "Sim",
233
+ "no": "Não",
234
+ "view": "Visualizar",
235
+ "confirm": "Confirmar",
236
+ "back": "Voltar",
237
+ "bookmark": "favorito",
238
+ "bookmarks": "favoritos",
239
+ "tag": "tag",
240
+ "tags": "tags",
241
+ "folder": "pasta",
242
+ "folders": "pastas",
243
+ "user": "usuário",
244
+ "users": "usuários",
245
+ "team": "equipe",
246
+ "teams": "equipes",
247
+ "setting": "configuração",
248
+ "settings": "configurações",
249
+ "provider": "provedor",
250
+ "providers": "provedores",
251
+ "search": "Pesquisar",
252
+ "searchPlaceholder": "Pesquisar favoritos, pastas, tags...",
253
+ "searchShortcut": "Ctrl+K",
254
+ "searchShortcutHint": "Pesquisar (Ctrl+K)",
255
+ "noResults": "Nenhum resultado encontrado",
256
+ "copy": "Copiar",
257
+ "copied": "Copiado!",
258
+ "goTo": "Ir para",
259
+ "actions": "Ações",
260
+ "navigation": "Navegação",
261
+ "quickActions": "Ações rápidas",
262
+ "collapseSidebar": "Recolher barra lateral",
263
+ "expandSidebar": "Expandir barra lateral"
264
+ },
265
+ "dashboard": {
266
+ "bookmarksDescription": "Gerencie seus favoritos",
267
+ "foldersDescription": "Organize com pastas",
268
+ "tagsDescription": "Etiquete seus favoritos",
269
+ "overview": "Visão geral",
270
+ "totalBookmarks": "Total de favoritos",
271
+ "totalFolders": "Total de pastas",
272
+ "totalTags": "Total de tags",
273
+ "sharedBookmarks": "Favoritos compartilhados",
274
+ "sharedFolders": "Pastas compartilhadas",
275
+ "recentBookmarks": "Favoritos recentes",
276
+ "topTags": "Tags mais usadas",
277
+ "noRecentBookmarks": "Ainda não há favoritos",
278
+ "noTags": "Ainda não há tags",
279
+ "searchPlaceholder": "Pesquisar um favorito ou navegar pelo SlugBase",
280
+ "quickAccess": "Acesso rápido",
281
+ "viewAll": "Ver tudo",
282
+ "noQuickAccessBookmarks": "Ainda não há favoritos com atalhos",
283
+ "noQuickAccessBookmarksHint": "Adicione um slug a um favorito para vê-lo aqui e usar go/slug no navegador.",
284
+ "statsBookmarks": "favoritos",
285
+ "statsFolders": "pastas",
286
+ "statsTags": "tags",
287
+ "proTipBody": "Dica: Configure o SlugBase como mecanismo de pesquisa no navegador e digite go github na barra de endereços para abrir favoritos.",
288
+ "proTipLink": "Configurar mecanismo de pesquisa",
289
+ "dismiss": "Fechar",
290
+ "onboardingTitle": "Começar",
291
+ "onboardingImport": "Importar favoritos do navegador",
292
+ "onboardingSearchEngine": "Configurar atalho de pesquisa",
293
+ "onboardingFolder": "Criar sua primeira pasta",
294
+ "onboardingTag": "Etiquetar um favorito",
295
+ "onboardingDismiss": "Ocultar lista"
296
+ },
297
+ "apiDocs": {
298
+ "title": "Documentação da API",
299
+ "description": "Referência completa da API para SlugBase. Todos os endpoints requerem autenticação via tokens JWT, exceto onde indicado."
300
+ },
301
+ "admin": {
302
+ "title": "Administrador",
303
+ "description": "Gerencie usuários, grupos, provedores OIDC e configurações do sistema",
304
+ "users": "Usuários",
305
+ "teams": "Equipes",
306
+ "userGroups": "Equipes",
307
+ "oidcProviders": "Provedores OIDC",
308
+ "settings": "Configurações",
309
+ "addUser": "Adicionar usuário",
310
+ "editUser": "Editar usuário",
311
+ "addTeam": "Adicionar equipe",
312
+ "editTeam": "Editar equipe",
313
+ "addGroup": "Adicionar equipe",
314
+ "editGroup": "Editar equipe",
315
+ "addProvider": "Adicionar provedor",
316
+ "editProvider": "Editar provedor",
317
+ "addSetting": "Adicionar configuração",
318
+ "admin": "Administrador",
319
+ "user": "Usuário",
320
+ "oidcUser": "Usuário OIDC",
321
+ "teamName": "Nome da equipe",
322
+ "groupName": "Nome da equipe",
323
+ "description": "Descrição",
324
+ "providerKey": "Chave do provedor",
325
+ "issuerUrl": "URL do emissor",
326
+ "clientId": "ID do cliente",
327
+ "clientIdRequired": "O ID do cliente é obrigatório ao criar um novo provedor",
328
+ "clientSecret": "Segredo do cliente",
329
+ "scopes": "Escopos",
330
+ "callbackUrl": "URL de callback",
331
+ "customEndpoints": "Endpoints OIDC personalizados",
332
+ "customEndpointsDescription": "Substitua os caminhos de endpoint OIDC padrão. Deixe vazio para usar caminhos padrão baseados na URL do emissor.",
333
+ "authorizationUrl": "URL de autorização",
334
+ "tokenUrl": "URL do token",
335
+ "userinfoUrl": "URL de informações do usuário",
336
+ "autoCreate": "Criar usuários automaticamente",
337
+ "defaultRole": "Função padrão",
338
+ "settingKey": "Chave",
339
+ "settingValue": "Valor",
340
+ "leaveBlank": "Deixe em branco para manter o atual",
341
+ "leaveBlankToKeep": "Deixe em branco para manter o valor atual",
342
+ "confirmDeleteUser": "Tem certeza de que deseja excluir este usuário?",
343
+ "confirmDeleteTeam": "Tem certeza de que deseja excluir esta equipe?",
344
+ "confirmDeleteGroup": "Tem certeza de que deseja excluir esta equipe?",
345
+ "confirmDeleteProvider": "Tem certeza de que deseja excluir este provedor?",
346
+ "confirmDeleteSetting": "Tem certeza de que deseja excluir esta configuração?",
347
+ "manageMembers": "Gerenciar membros",
348
+ "currentMembers": "Membros atuais",
349
+ "currentTeams": "Equipes atuais",
350
+ "addMembers": "Adicionar membros",
351
+ "addTeams": "Adicionar equipes",
352
+ "noMembers": "Nenhum membro nesta equipe",
353
+ "noTeams": "Nenhuma equipe atribuída a este usuário",
354
+ "noTeamsYet": "Ainda não há equipes",
355
+ "add": "Adicionar",
356
+ "members": "Membros",
357
+ "manageTeams": "Gerenciar equipes",
358
+ "searchTeams": "Pesquisar equipes por nome ou descrição...",
359
+ "createUserWith": "Criar usuário com",
360
+ "sendInviteEmail": "Enviar convite por e-mail",
361
+ "setPassword": "Definir senha",
362
+ "inviteSent": "Convite enviado",
363
+ "userCreatedInviteSent": "Usuário criado; convite enviado.",
364
+ "userCreatedInviteNotSent": "Usuário criado; o convite não pôde ser enviado (verifique o SMTP).",
365
+ "searchUsers": "Pesquisar usuários por nome ou email...",
366
+ "noTeamsAvailable": "Todas as equipes já estão atribuídas",
367
+ "noUsersAvailable": "Todos os usuários já são membros",
368
+ "noSearchResults": "Nenhum resultado corresponde à sua pesquisa",
369
+ "apiDocsNote": "A documentação da API está disponível como uma página independente",
370
+ "viewApiDocs": "Visualizar documentação da API",
371
+ "noUserEmailAvailable": "Nenhum email de usuário disponível",
372
+ "manageTeamsTitle": "Gerenciar equipes - {{userName}}",
373
+ "manageMembersTitle": "Gerenciar membros - {{teamName}}"
374
+ },
375
+ "passwordReset": {
376
+ "title": "Redefinir senha",
377
+ "description": "Digite seu endereço de email para receber um link de redefinição de senha",
378
+ "email": "Email",
379
+ "emailPlaceholder": "seu@email.com",
380
+ "requestReset": "Enviar link de redefinição",
381
+ "resetToken": "Token de redefinição",
382
+ "newPassword": "Nova senha",
383
+ "confirmPassword": "Confirmar senha",
384
+ "resetPassword": "Redefinir senha",
385
+ "requestSent": "Se existir uma conta com este email, um link de redefinição de senha foi enviado.",
386
+ "resetSuccess": "Senha redefinida com sucesso! Agora você pode fazer login com sua nova senha.",
387
+ "invalidToken": "Token de redefinição inválido ou expirado",
388
+ "passwordMismatch": "As senhas não coincidem",
389
+ "backToLogin": "Voltar ao login"
390
+ },
391
+ "emailVerification": {
392
+ "verifying": "Verificando email",
393
+ "verifyingDescription": "Aguarde enquanto verificamos seu endereço de email...",
394
+ "success": "Email verificado",
395
+ "successDescription": "Seu endereço de email foi alterado com sucesso para {{email}}.",
396
+ "error": "Verificação falhou",
397
+ "errorDescription": "O link de verificação é inválido ou expirou.",
398
+ "tokenRequired": "Token de verificação é obrigatório",
399
+ "invalidToken": "Token de verificação inválido ou expirado",
400
+ "verifyFailed": "Falha ao verificar o token",
401
+ "confirmFailed": "Falha ao confirmar a verificação de email",
402
+ "redirecting": "Redirecionando para o perfil...",
403
+ "backToProfile": "Voltar ao perfil",
404
+ "emailSent": "Email de verificação enviado! Por favor, verifique seu novo endereço de email.",
405
+ "pendingTitle": "Verificação de email pendente",
406
+ "pendingDescription": "Um email de verificação foi enviado para {{email}}. Por favor, verifique sua caixa de entrada e clique no link de verificação para concluir a alteração."
407
+ },
408
+ "smtp": {
409
+ "title": "Configuração de email SMTP",
410
+ "description": "Configure as configurações SMTP para enviar emails (por exemplo, emails de redefinição de senha)",
411
+ "enabled": "Habilitar SMTP",
412
+ "host": "Servidor SMTP",
413
+ "hostPlaceholder": "smtp.gmail.com",
414
+ "port": "Porta",
415
+ "portPlaceholder": "587",
416
+ "secure": "Usar TLS/SSL",
417
+ "user": "Nome de usuário/Email",
418
+ "userPlaceholder": "seu-email@gmail.com",
419
+ "password": "Senha",
420
+ "passwordPlaceholder": "Digite a senha para definir ou alterar",
421
+ "passwordChangeHint": "Digite uma nova senha para alterá-la ou deixe em branco para manter a senha atual",
422
+ "from": "Email remetente",
423
+ "fromPlaceholder": "noreply@example.com",
424
+ "fromName": "Nome do remetente",
425
+ "fromNamePlaceholder": "SlugBase",
426
+ "testEmail": "Email de teste",
427
+ "testEmailPlaceholder": "test@example.com",
428
+ "sendTest": "Enviar email de teste",
429
+ "testSent": "Email de teste enviado com sucesso!",
430
+ "testFailed": "Falha ao enviar email de teste",
431
+ "save": "Salvar configurações SMTP"
432
+ },
433
+ "shared": {
434
+ "title": "Compartilhado",
435
+ "description": "Favoritos e pastas compartilhados com você",
436
+ "bookmarks": "Favoritos",
437
+ "folders": "Pastas",
438
+ "noBookmarks": "Ainda não há favoritos compartilhados",
439
+ "noFolders": "Ainda não há pastas compartidas",
440
+ "unknownUser": "Usuário desconhecido"
441
+ },
442
+ "searchEngineGuide": {
443
+ "title": "Guia de configuração de mecanismo de pesquisa personalizado",
444
+ "description": "Aprenda como configurar um mecanismo de pesquisa personalizado no seu navegador para acessar rapidamente seus favoritos",
445
+ "howItWorks": "Como funciona",
446
+ "howItWorksDescription": "Ao configurar um mecanismo de pesquisa personalizado, você pode digitar uma palavra-chave (como 'go') seguida de um slug de favorito na barra de endereços do navegador para navegar instantaneamente para esse favorito.",
447
+ "yourSearchUrl": "Sua URL de pesquisa",
448
+ "urlNote": "Use este modelo de URL ao configurar seu mecanismo de pesquisa personalizado. O %s será substituído pelo slug do seu favorito.",
449
+ "chromiumTitle": "Navegadores baseados em Chromium (Chrome, Edge, Brave, etc.)",
450
+ "chromiumDescription": "Siga estes passos para adicionar SlugBase como mecanismo de pesquisa personalizado:",
451
+ "chromiumStep1": "Abra as configurações do navegador",
452
+ "chromiumStep2": "Navegue até as configurações de 'Mecanismo de pesquisa' ou 'Pesquisa'",
453
+ "chromiumStep3": "Clique em 'Gerenciar mecanismos de pesquisa' ou 'Adicionar'",
454
+ "chromiumStep4": "Preencha o formulário com:",
455
+ "chromiumStep4a": "Nome: SlugBase (ou qualquer nome que você preferir)",
456
+ "chromiumStep4b": "Palavra-chave: go (ou qualquer palavra-chave que você preferir)",
457
+ "chromiumStep4c": "URL: Use a URL de pesquisa mostrada acima",
458
+ "chromiumStep5": "Clique em 'Adicionar' ou 'Salvar' para concluir a configuração",
459
+ "firefoxTitle": "Firefox",
460
+ "firefoxDescription": "Siga estes passos para adicionar SlugBase como mecanismo de pesquisa personalizado:",
461
+ "firefoxStep1": "Abra as configurações do Firefox",
462
+ "firefoxStep2": "Navegue até 'Pesquisa' no menu de configurações",
463
+ "firefoxStep3": "Role para baixo e clique em 'Adicionar' em 'Mecanismos de pesquisa com um clique'",
464
+ "firefoxStep4": "Preencha o formulário com:",
465
+ "firefoxStep4a": "Nome: SlugBase (ou qualquer nome que você preferir)",
466
+ "firefoxStep4b": "Palavra-chave: go (ou qualquer palavra-chave que você preferir)",
467
+ "firefoxStep4c": "URL: Use a URL de pesquisa mostrada acima",
468
+ "firefoxStep5": "Clique em 'Adicionar' para concluir a configuração",
469
+ "usageExample": "Exemplo de uso",
470
+ "usageStep1": "Após a configuração, digite na barra de endereços do navegador:",
471
+ "usageStep2": "Pressione Enter e você será redirecionado para o favorito com o slug 'test'",
472
+ "usageNote": "Substitua 'test' por qualquer slug de favorito que você criou no SlugBase!"
473
+ },
474
+ "legal": {
475
+ "imprintTitle": "Aviso legal",
476
+ "imprintProviderTitle": "Prestador de serviços (ECG §5)",
477
+ "imprintChamber": "Membro de {{chamber}}",
478
+ "imprintCourtTitle": "Tribunal competente",
479
+ "imprintCourtBody": "Foro competente para disputas: Landesgericht Linz, Áustria. Aplica-se a lei austríaca.",
480
+ "imprintOdrTitle": "Resolução de litígios online da UE",
481
+ "imprintOdrBody": "A Comissão Europeia disponibiliza uma plataforma de resolução de litígios online. Os consumidores podem aceder em",
482
+ "uid": "UID",
483
+ "backToHome": "Voltar ao início",
484
+ "termsTitle": "Termos e condições",
485
+ "termsScopeTitle": "Âmbito",
486
+ "termsScopeBody": "Estes Termos e Condições aplicam-se ao seu uso do SlugBase Cloud (o \"Serviço\") em slugbase.app. Ao registar-se ou usar o Serviço, concorda com estes termos. Se for consumidor, os seus direitos legais imperativos mantêm-se.",
487
+ "termsServiceTitle": "Descrição do serviço",
488
+ "termsServiceBody": "SlugBase Cloud é um serviço de gestão de marcadores e reencaminhamento de links. Permite guardar, organizar e partilhar marcadores; criar pastas e tags; e opcionalmente expor marcadores como URLs curtas. O serviço é fornecido como SaaS em https://slugbase.app.",
489
+ "termsPlansTitle": "Planos",
490
+ "termsPlansBody": "SlugBase Cloud oferece planos Free, Personal, Team e Early Supporter Lifetime. Detalhes atuais na página de Preços.",
491
+ "termsAccountTitle": "Conta e elegibilidade",
492
+ "termsAccountBody": "Deve fornecer informações corretas ao criar uma conta. É responsável por manter as suas credenciais seguras. O Serviço destina-se a uso lícito por indivíduos e equipas.",
493
+ "termsUseTitle": "Uso do Serviço",
494
+ "termsUseBody": "Pode usar o SlugBase para guardar, organizar e partilhar marcadores e para usar links curtos (redirecionamento). Não deve usar o Serviço para fins ilegais, distribuir malware ou assediar outros.",
495
+ "termsShortLinksTitle": "Links curtos e redirecionamento",
496
+ "termsShortLinksBody": "Os links curtos (ex.: /go/seu-slug) redirecionam para o URL que definir. Não deve usá-los para phishing, spam ou outro abuso. Podemos suspender ou remover links que violem estes termos.",
497
+ "termsBillingTitle": "Faturação e pagamento",
498
+ "termsBillingBody": "Os planos pagos são faturados antecipadamente. O pagamento é devido à emissão da fatura. O plano Early Supporter Lifetime é pagamento único.",
499
+ "termsCancellationTitle": "Cancelamento e renovação",
500
+ "termsCancellationBody": "Pode cancelar a sua subscrição a qualquer momento. O cancelamento tem efeito no final do período de faturação atual. Sem período mínimo. Para subscrições de renovação automática, pode cancelar antes de cada data de renovação.",
501
+ "termsWithdrawalTitle": "Direito de desistência (consumidores)",
502
+ "termsWithdrawalBody": "Se for consumidor ao abrigo da lei austríaca, tem direito de desistência de 14 dias sem indicação de motivos. O prazo começa na data da conclusão do contrato. Contacte-nos em hello@slugbase.app.",
503
+ "termsLiabilityTitle": "Limitação de responsabilidade",
504
+ "termsLiabilityBody": "O Serviço é fornecido \"tal como está\". Não somos responsáveis por danos indiretos ou consequenciais, exceto em caso de dolo ou negligência grave. A nossa responsabilidade está limitada.",
505
+ "termsTerminationTitle": "Suspensão e rescisão por nossa parte",
506
+ "termsTerminationBody": "Podemos suspender ou rescindir a sua conta em caso de violação grave destes termos ou incumprimento de pagamento. Com a rescisão, termina o seu direito de utilização.",
507
+ "termsLawTitle": "Lei aplicável",
508
+ "termsLawBody": "Estes termos são regidos pela lei austríaca. Qualquer litígio será da competência dos tribunais austríacos.",
509
+ "termsContactTitle": "Contacto",
510
+ "termsContactBody": "Para questões sobre estes termos, contacte-nos em hello@slugbase.app ou através do endereço no Aviso legal.",
511
+ "privacyTitle": "Política de privacidade",
512
+ "privacyScopeTitle": "Âmbito",
513
+ "privacyScopeBody": "Esta política aplica-se ao SlugBase Cloud em https://slugbase.app. Descreve como processamos os seus dados pessoais. Não se aplica se alojar o SlugBase você mesmo. Baseada no RGPD e na lei austríaca (DSG).",
514
+ "privacyControllerTitle": "Responsável",
515
+ "privacyControllerBody": "O responsável pelo tratamento de dados é Guggernbichler Michael David, Linzer Str. 17, 4100 Ottensheim, Áustria (ver Aviso legal).",
516
+ "privacyDataTitle": "Dados que processamos",
517
+ "privacyDataBody": "Processamos: dados de conta; conteúdo (marcadores, pastas, etiquetas); utilização (sessão, IP, logs); dados de contacto se usar o formulário. Não vendemos dados nem os usamos para publicidade.",
518
+ "privacyRecipientsTitle": "Destinatários",
519
+ "privacyRecipientsBody": "Os dados são processados na nossa infraestrutura e por subcontratados conformes ao RGPD. Não partilhamos os seus dados com terceiros para os seus fins.",
520
+ "privacyBasisTitle": "Base legal",
521
+ "privacyBasisBody": "Processamos dados com base na execução do contrato (fornecimento do Serviço), no seu consentimento quando aplicável e em interesses legítimos (segurança, prevenção de abusos).",
522
+ "privacyRetentionTitle": "Conservação",
523
+ "privacyRetentionBody": "Conservamos dados de conta e marcadores enquanto a sua conta existir. Após eliminação, removemos ou anonimizamos os dados num prazo razoável. Os logs podem ser conservados por mais tempo quando a lei o exija.",
524
+ "privacyRightsTitle": "Os seus direitos",
525
+ "privacyRightsBody": "Tem direito de acesso, retificação, eliminação, limitação, portabilidade e oposição. Pode retirar o consentimento a qualquer momento. Contacto: hello@slugbase.app. Pode apresentar reclamação à autoridade austríaca (ver abaixo).",
526
+ "privacyCookiesTitle": "Cookies e autenticação",
527
+ "privacyCookiesBody": "Utilizamos cookies de sessão e meios semelhantes para autenticação e segurança. Não utilizamos cookies de publicidade de terceiros.",
528
+ "privacyHostingTitle": "Alojamento (CLOUD vs self-hosted)",
529
+ "privacyHostingBody": "Em slugbase.app (CLOUD) alojamos os seus dados na nossa infraestrutura na UE/EEE. Se alojar o SlugBase você mesmo, é o responsável e controla o armazenamento.",
530
+ "privacySupervisoryTitle": "Autoridade de controlo",
531
+ "privacySupervisoryBody": "Pode apresentar reclamação à Österreichische Datenschutzbehörde, Barichgasse 40-42, 1030 Viena, Áustria (dsb@dsb.gv.at). Segundo o DSG austríaco, as reclamações devem geralmente ser apresentadas no prazo de um ano após o conhecimento.",
532
+ "privacyChangesTitle": "Alterações",
533
+ "privacyChangesBody": "Podemos atualizar esta política. Alterações relevantes serão comunicadas. A versão atual está disponível nesta página. A utilização continuada após alterações constitui aceitação."
534
+ }
535
+ }