Compare commits
2 Commits
fix/lock-n
...
fix/mobile
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91986d5f12 | ||
|
|
ad7e0e89dd |
@@ -1,5 +1,4 @@
|
||||
import { useTheme } from "next-themes";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { useRef, useState } from "react";
|
||||
import {
|
||||
TbLayoutSidebarLeftCollapse,
|
||||
TbLayoutSidebarLeftExpand,
|
||||
@@ -11,7 +10,10 @@ import { authClient } from "@kan/auth/client";
|
||||
|
||||
import { useClickOutside } from "~/hooks/useClickOutside";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { useWorkspace, WorkspaceProvider } from "~/providers/workspace";
|
||||
import { useTheme } from "next-themes";
|
||||
import { WorkspaceProvider } from "~/providers/workspace";
|
||||
import FeedbackModal from "./FeedbackModal";
|
||||
import Modal from "./modal";
|
||||
import SideNavigation from "./SideNavigation";
|
||||
|
||||
interface DashboardProps {
|
||||
@@ -40,8 +42,7 @@ export default function Dashboard({
|
||||
hasRightPanel = false,
|
||||
}: DashboardProps) {
|
||||
const { theme } = useTheme();
|
||||
const { openModal } = useModal();
|
||||
const { availableWorkspaces, hasLoaded } = useWorkspace();
|
||||
const { modalContentType } = useModal();
|
||||
|
||||
const { data: session, isPending: sessionLoading } = authClient.useSession();
|
||||
|
||||
@@ -89,12 +90,6 @@ export default function Dashboard({
|
||||
}
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (hasLoaded && availableWorkspaces.length === 0) {
|
||||
openModal("NEW_WORKSPACE", undefined, undefined, false);
|
||||
}
|
||||
}, [hasLoaded, availableWorkspaces.length, openModal]);
|
||||
|
||||
const isDarkMode = theme === "dark";
|
||||
|
||||
return (
|
||||
|
||||
@@ -8,7 +8,6 @@ interface Props {
|
||||
modalSize?: "sm" | "md" | "lg";
|
||||
positionFromTop?: "sm" | "md" | "lg";
|
||||
isVisible?: boolean;
|
||||
closeOnClickOutside?: boolean;
|
||||
}
|
||||
|
||||
const Modal: React.FC<Props> = ({
|
||||
@@ -16,17 +15,10 @@ const Modal: React.FC<Props> = ({
|
||||
modalSize = "sm",
|
||||
positionFromTop = "md",
|
||||
isVisible,
|
||||
closeOnClickOutside,
|
||||
}) => {
|
||||
const {
|
||||
isOpen,
|
||||
closeModal,
|
||||
closeOnClickOutside: modalCloseOnClickOutside,
|
||||
} = useModal();
|
||||
const { isOpen, closeModal } = useModal();
|
||||
|
||||
const shouldShow = isVisible ?? isOpen;
|
||||
const shouldCloseOnClickOutside =
|
||||
closeOnClickOutside ?? modalCloseOnClickOutside;
|
||||
const shouldShow = isVisible !== undefined ? isVisible : isOpen;
|
||||
|
||||
const modalSizeMap = {
|
||||
sm: "max-w-[400px]",
|
||||
@@ -42,11 +34,7 @@ const Modal: React.FC<Props> = ({
|
||||
|
||||
return (
|
||||
<Transition.Root show={shouldShow} as={Fragment}>
|
||||
<Dialog
|
||||
as="div"
|
||||
className="relative z-50"
|
||||
onClose={shouldCloseOnClickOutside ? closeModal : () => null}
|
||||
>
|
||||
<Dialog as="div" className="relative z-50" onClose={closeModal}>
|
||||
<Transition.Child
|
||||
as={Fragment}
|
||||
enter="ease-out duration-300"
|
||||
|
||||
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern (kostenlos während der Beta-Phase) und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, dieses Angebot zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Kostenlos"
|
||||
|
||||
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de pago en la nube para espacios de trabajo con múltiples usuarios (gratuita durante la beta) y para slugs personalizados de espacios de trabajo. No hay obligación de usarla, y puedes autoalojar el software en tu propia infraestructura sin costo alguno."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs (gratuite pendant la bêta) et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Gratuit"
|
||||
|
||||
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per workspace con più utenti (gratuita durante la beta) e per slug di workspace personalizzati. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Gratuito"
|
||||
|
||||
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers (gratis tijdens de bèta) en voor aangepaste werkruimte-slugs. Je bent niet verplicht om hiervan gebruik te maken en je kunt de software gratis op je eigen infrastructuur hosten."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2025-10-16 20:29+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -78,7 +73,7 @@ msgstr "Konto"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:27
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto zostało usunięte"
|
||||
msgstr "Konto usunięte"
|
||||
|
||||
#: src/views/card/index.tsx:291
|
||||
#: src/views/public/board/CardModal.tsx:143
|
||||
@@ -340,7 +335,7 @@ msgstr "Adres URL tablicy nie może przekraczać 60 znaków"
|
||||
|
||||
#: src/views/public/board/index.tsx:64
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "Adres URL tablicy został skopiowany do schowka"
|
||||
msgstr "Adres URL tablicy skopiowany do schowka"
|
||||
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:41
|
||||
msgid "Board URL must be at least 3 characters long"
|
||||
@@ -353,7 +348,7 @@ msgstr "Widoczność tablicy"
|
||||
|
||||
#: src/views/board/components/VisibilityButton.tsx:45
|
||||
msgid "Board visibility updated"
|
||||
msgstr "Widoczność tablicy została zaktualizowana"
|
||||
msgstr "Widoczność tablicy zaktualizowana"
|
||||
|
||||
#: src/components/SideNavigation.tsx:70
|
||||
msgid "Boards"
|
||||
@@ -388,7 +383,7 @@ msgstr "Anuluj"
|
||||
|
||||
#: src/views/card/index.tsx:262
|
||||
msgid "Card not found"
|
||||
msgstr "Nie można było znaleźć karty"
|
||||
msgstr "Karta nie znaleziona"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:309
|
||||
msgid "Card title"
|
||||
@@ -898,7 +893,7 @@ msgstr "Wszystko w darmowym planie, plus:"
|
||||
#: src/views/pricing/components/Pricing.tsx:33
|
||||
#: src/views/pricing/components/PricingTiers.tsx:31
|
||||
msgid "Everything you need, free forever. Unlimited boards, unlimited lists, unlimited cards. Upgrade any time."
|
||||
msgstr "Wszystko, czego potrzebujesz, za darmo na zawsze. Nielimitowane tablice, nieograniczone listy i nieograniczone karty. Możesz ulepszyć w dowolnym momencie."
|
||||
msgstr "Wszystko, czego potrzebujesz, za darmo na zawsze. Nieograniczone tablice, nieograniczone listy, nieograniczone karty. Możesz zaktualizować w dowolnym momencie."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:79
|
||||
msgid "Execution"
|
||||
@@ -929,7 +924,7 @@ msgstr "FAQ"
|
||||
#: src/views/home/components/Faqs.tsx:143
|
||||
#: src/views/home/components/Footer.tsx:51
|
||||
msgid "FAQs"
|
||||
msgstr "Pytania i Odpowiedzi"
|
||||
msgstr "FAQ"
|
||||
|
||||
#: src/views/pricing/components/FeatureComparisonTable.tsx:168
|
||||
msgid "Fast & lightweight"
|
||||
@@ -975,11 +970,9 @@ msgstr "Znajdź odpowiedzi na często zadawane pytania dotyczące projektu. Nie
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:41
|
||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||
msgstr "Na rzecz długotrwałego rozwoju i utrzymania projektu uznaliśmy, że wszystkie dobre projekty otwartoźródłowe potrzebują źródła dochodu. Nasze środki pochodzą z płatnej oferty chmurowej dla przestrzeni roboczych z wieloma użytkownikami (bezpłatne podczas wersji beta) oraz dla niestandardowych nazw przestrzeni roboczych. Nie ma obowiązku korzystania z niej, a oprogramowanie można hostować samodzielnie na własnej infrastrukturze bez opłat i bez limitów."
|
||||
msgstr "Dla długoterminowej trwałości uznajemy, że wszystkie dobre projekty open source potrzebują źródła dochodu. Nasze pochodzi z płatnej oferty chmurowej dla przestrzeni roboczych z wieloma użytkownikami (bezpłatne podczas wersji beta) oraz dla niestandardowych nazw przestrzeni roboczych. Nie ma obowiązku korzystania z niej, a oprogramowanie można hostować samodzielnie na własnej infrastrukturze bez opłat."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Darmowy"
|
||||
@@ -1190,7 +1183,7 @@ msgstr "Linki zaproszeń"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Linki zaproszeń wymagają subskrypcji Team lub Pro. Proszę ulepszyć swoje środowisko pracy."
|
||||
msgstr "Linki zaproszeń wymagają subskrypcji Team lub Pro. Proszę zaktualizować swoje środowisko pracy."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
@@ -1199,7 +1192,7 @@ msgstr "Zaproś członka"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Zapraszanie członków wymaga planu Team. Zostaniesz przekierowany, aby ulepszyć swoje środowisko pracy."
|
||||
msgstr "Zapraszanie członków wymaga planu Team. Zostaniesz przekierowany, aby zaktualizować swoje środowisko pracy."
|
||||
|
||||
#: src/views/invite/index.tsx:79
|
||||
#: src/views/invite/index.tsx:129
|
||||
@@ -1228,7 +1221,7 @@ msgstr "Kanban jest lepszy w zespole. Idealny dla małych i rozwijających się
|
||||
|
||||
#: src/views/home/components/Features.tsx:136
|
||||
msgid "Kanban reimagined"
|
||||
msgstr "Kanban wymyślony na nowo"
|
||||
msgstr "Kanban na nowo"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:57
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:67
|
||||
@@ -1423,7 +1416,7 @@ msgstr "Nowy szablon"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:44
|
||||
msgid "New Ticket"
|
||||
msgstr "Nowe zgłoszenie"
|
||||
msgstr "Nowy bilet"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
@@ -1476,7 +1469,7 @@ msgstr "Po usunięciu przestrzeni roboczej nie będzie możliwości jej przywró
|
||||
|
||||
#: src/views/pricing/components/FeatureComparisonTable.tsx:150
|
||||
msgid "Open source"
|
||||
msgstr "Otwartoźródłowe"
|
||||
msgstr "Open source"
|
||||
|
||||
#: src/components/AuthForm.tsx:365
|
||||
msgid "or"
|
||||
@@ -1489,7 +1482,7 @@ msgstr "Organizuj i znajduj karty szybko dzięki zaawansowanym narzędziom filtr
|
||||
#: src/views/pricing/components/Pricing.tsx:73
|
||||
#: src/views/pricing/components/PricingTiers.tsx:70
|
||||
msgid "Own your data"
|
||||
msgstr "Ty posiadasz swoje dane"
|
||||
msgstr "Zarządzaj swoimi danymi"
|
||||
|
||||
#: src/views/pricing/components/FeatureComparisonTable.tsx:174
|
||||
msgid "Owned by Atlassian"
|
||||
@@ -1737,7 +1730,7 @@ msgstr "Zasoby"
|
||||
|
||||
#: src/views/pricing/components/FeatureComparisonTable.tsx:144
|
||||
msgid "REST API"
|
||||
msgstr "API REST'owe"
|
||||
msgstr "REST API"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:80
|
||||
msgid "Review"
|
||||
@@ -1747,7 +1740,7 @@ msgstr "Przegląd"
|
||||
#: src/views/home/components/Header.tsx:13
|
||||
#: src/views/home/components/Header.tsx:28
|
||||
msgid "Roadmap"
|
||||
msgstr "Plan ulepszeń"
|
||||
msgstr "Mapa drogowa"
|
||||
|
||||
#: src/views/members/index.tsx:244
|
||||
msgid "Role"
|
||||
@@ -1765,7 +1758,7 @@ msgstr "Zapisz"
|
||||
|
||||
#: src/views/home/components/Features.tsx:116
|
||||
msgid "Save time with reusable board templates."
|
||||
msgstr "Oszczędzaj czas przy tworzeniu powtarzalnych tablic dzięki szablonom."
|
||||
msgstr "Oszczędzaj czas dzięki wielokrotnego użytku szablonom tablic."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:64
|
||||
msgid "Screening"
|
||||
@@ -1786,11 +1779,11 @@ msgstr "Wybierz źródło"
|
||||
#: src/views/pricing/components/Pricing.tsx:64
|
||||
#: src/views/pricing/components/PricingTiers.tsx:61
|
||||
msgid "Self Host"
|
||||
msgstr "Hostuj samodzielnie"
|
||||
msgstr "Samodzielne hostowanie"
|
||||
|
||||
#: src/views/home/index.tsx:79
|
||||
msgid "Self host with Github"
|
||||
msgstr "Hostuj samodzielnie z Github"
|
||||
msgstr "Samodzielne hostowanie z Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
@@ -1960,11 +1953,11 @@ msgstr "Wprowadzone obecne hasło jest nieprawidłowe."
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:33
|
||||
msgid "The main difference between Kan and Trello is that Kan is open source, allowing anyone to view, modify, and contribute to our code. Our cloud offering also offers no restrictions on features for individual use, whereas Trello locks basic features such as the number of boards you can create behind a paywall."
|
||||
msgstr "Główna różnica między Kan a Trello polega na tym, że Kan jest oprogramowaniem otwartoźródłowym, co pozwala każdemu przeglądać, modyfikować i współtworzyć nasz kod. Nasza oferta w chmurze nie nakłada również żadnych ograniczeń na funkcje do użytku indywidualnego, podczas gdy Trello blokuje podstawowe funkcje, takie jak liczba tablic, które można utworzyć, za dodatkowymi kosztami."
|
||||
msgstr "Główna różnica między Kan a Trello polega na tym, że Kan jest oprogramowaniem open source, co pozwala każdemu przeglądać, modyfikować i współtworzyć nasz kod. Nasza oferta w chmurze nie nakłada również żadnych ograniczeń na funkcje do użytku indywidualnego, podczas gdy Trello blokuje podstawowe funkcje, takie jak liczba tablic, które można utworzyć, za paywallem."
|
||||
|
||||
#: src/views/home/index.tsx:63
|
||||
msgid "The open source <0/> alternative to Trello"
|
||||
msgstr "Otwarta alternatywa <0/> dla Trello"
|
||||
msgstr "Alternatywa open source <0/> dla Trello"
|
||||
|
||||
#. placeholder {0}: isPublic ? "public" : "private"
|
||||
#: src/views/board/components/VisibilityButton.tsx:46
|
||||
@@ -2227,11 +2220,11 @@ msgstr "Ulepsz"
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/WorkspaceSettings.tsx:89
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Ulepsz do planu Pro"
|
||||
msgstr "Ulepsz do Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Ulepsz do planu Pro (29 USD/miesiąc)"
|
||||
msgstr "Ulepsz do Pro (29 USD/miesiąc)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
@@ -2245,17 +2238,17 @@ msgstr "Pilne"
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "Adres URL może zawierać tylko litery, cyfry i myślniki"
|
||||
msgstr "URL może zawierać tylko litery, cyfry i myślniki"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "Adres URL nie może przekraczać 24 znaków"
|
||||
msgstr "URL nie może przekraczać 24 znaków"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "Adres URL musi mieć co najmniej 3 znaki"
|
||||
msgstr "URL musi mieć co najmniej 3 znaki"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:154
|
||||
msgid "Use template"
|
||||
@@ -2292,7 +2285,7 @@ msgstr "Tylko podgląd"
|
||||
|
||||
#: src/views/home/components/Features.tsx:154
|
||||
msgid "View our roadmap."
|
||||
msgstr "Zobacz nasz plan ulepszeń."
|
||||
msgstr "Zobacz naszą mapę drogową."
|
||||
|
||||
#: src/views/public/board/index.tsx:154
|
||||
msgid "View workspace"
|
||||
@@ -2308,7 +2301,7 @@ msgstr "Używamy licencji <0>AGPL-3.0</0>."
|
||||
|
||||
#: src/views/home/components/Features.tsx:152
|
||||
msgid "We're just getting started. "
|
||||
msgstr "Dopiero zaczynamy. "
|
||||
msgstr "Dopiero zaczynamy."
|
||||
|
||||
#: src/views/auth/login/index.tsx:43
|
||||
msgid "Welcome back"
|
||||
@@ -2316,7 +2309,7 @@ msgstr "Witamy ponownie"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:91
|
||||
msgid "What license are you using?"
|
||||
msgstr "Jakiej licencji używacie?"
|
||||
msgstr "Jakiej licencji używasz?"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:30
|
||||
msgid "What's the difference between Kan and Trello?"
|
||||
@@ -2324,7 +2317,7 @@ msgstr "Jaka jest różnica między Kan a Trello?"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:25
|
||||
msgid "When Trello launched in 2011, it blew everyone away with its carefully designed simplicity, but over time (and atlassification) it lost its magic and grew into something closer to \"Jira Lite\". This project is our attempt to recapture the original magic of Trello's simplicity, in open source."
|
||||
msgstr "Kiedy Trello zostało uruchomione w 2011 roku, zachwyciło wszystkich swoją starannie zaprojektowaną prostotą, ale z czasem straciło swój urok i stało się czymś bliższym \"Jira Lite\". Ten projekt to nasza próba odzyskania oryginalnej magii prostoty Trello w wersji otwartoźródłowej ."
|
||||
msgstr "Kiedy Trello zostało uruchomione w 2011 roku, zachwyciło wszystkich swoją starannie zaprojektowaną prostotą, ale z czasem (i atlassyfikacją) straciło swój urok i stało się czymś bliższym \"Jira Lite\". Ten projekt to nasza próba odzyskania oryginalnej magii prostoty Trello w wersji open source."
|
||||
|
||||
#: src/views/pricing/components/FeatureComparisonTable.tsx:162
|
||||
msgid "White label"
|
||||
@@ -2332,7 +2325,7 @@ msgstr "Biała etykieta"
|
||||
|
||||
#: src/views/home/components/Faqs.tsx:22
|
||||
msgid "Why make an open source Trello?"
|
||||
msgstr "Dlaczego próbujecie stworzyć Trello w wersji otwartoźródłowej?"
|
||||
msgstr "Dlaczego stworzyć Trello w wersji open source?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
msgid "Workspace"
|
||||
@@ -2480,7 +2473,7 @@ msgstr "Twoje konto Trello jest połączone."
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:49
|
||||
msgid "Your workspace description has been updated."
|
||||
msgstr "Opis twojej przestrzeni roboczej został zaktualizowany."
|
||||
msgstr "Opis Twojego przestrzeni roboczej został zaktualizowany."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:27
|
||||
msgid "Your workspace has been deleted."
|
||||
@@ -2488,8 +2481,8 @@ msgstr "Twoja przestrzeń robocza została usunięta."
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:44
|
||||
msgid "Your workspace name has been updated."
|
||||
msgstr "Nazwa twojej przestrzeni roboczej została zaktualizowana."
|
||||
msgstr "Nazwa Twojej przestrzeni roboczej została zaktualizowana."
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:61
|
||||
msgid "Your workspace slug has been updated."
|
||||
msgstr "Slug twojej przestrzeni roboczej został zaktualizowany."
|
||||
msgstr "Slug Twojej przestrzeni roboczej został zaktualizowany."
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -973,8 +973,6 @@ msgid "For long-term sustainability, we recognise all good open source projects
|
||||
msgstr "Для долгосрочной устойчивости мы признаем, что всем хорошим проектам с открытым исходным кодом нужен источник дохода. Наш доход поступает от платного облачного предложения для рабочих пространств с несколькими пользователями (бесплатно в период бета-тестирования) и для пользовательских адресов рабочих пространств. Нет обязательства использовать это, и вы можете самостоятельно разместить программное обеспечение на своей инфраструктуре бесплатно."
|
||||
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/Pricing.tsx:32
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
#: src/views/pricing/components/PricingTiers.tsx:30
|
||||
msgid "Free"
|
||||
msgstr "Бесплатно"
|
||||
|
||||
@@ -4,7 +4,6 @@ interface ModalState {
|
||||
contentType: string;
|
||||
entityId?: string;
|
||||
entityLabel?: string;
|
||||
closeOnClickOutside?: boolean;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
@@ -17,7 +16,6 @@ interface ModalContextType {
|
||||
contentType: string,
|
||||
entityId?: string,
|
||||
entityLabel?: string,
|
||||
closeOnClickOutside?: boolean,
|
||||
) => void;
|
||||
closeModal: () => void;
|
||||
closeModals: (count: number) => void;
|
||||
@@ -25,7 +23,6 @@ interface ModalContextType {
|
||||
modalContentType: string;
|
||||
entityId: string;
|
||||
entityLabel: string;
|
||||
closeOnClickOutside: boolean;
|
||||
modalStates: Record<string, any>;
|
||||
setModalState: (modalType: string, state: any) => void;
|
||||
getModalState: (modalType: string) => any;
|
||||
@@ -44,21 +41,10 @@ export const ModalProvider: React.FC<Props> = ({ children }) => {
|
||||
const modalContentType = currentModal?.contentType || "";
|
||||
const entityId = currentModal?.entityId || "";
|
||||
const entityLabel = currentModal?.entityLabel || "";
|
||||
const closeOnClickOutside = currentModal?.closeOnClickOutside ?? true;
|
||||
|
||||
const openModal = useCallback(
|
||||
(
|
||||
contentType: string,
|
||||
entityId?: string,
|
||||
entityLabel?: string,
|
||||
closeOnClickOutside?: boolean,
|
||||
) => {
|
||||
const newModal: ModalState = {
|
||||
contentType,
|
||||
entityId,
|
||||
entityLabel,
|
||||
closeOnClickOutside,
|
||||
};
|
||||
(contentType: string, entityId?: string, entityLabel?: string) => {
|
||||
const newModal: ModalState = { contentType, entityId, entityLabel };
|
||||
setModalStack((prev) => [...prev, newModal]);
|
||||
},
|
||||
[],
|
||||
@@ -121,7 +107,6 @@ export const ModalProvider: React.FC<Props> = ({ children }) => {
|
||||
modalContentType,
|
||||
entityId,
|
||||
entityLabel,
|
||||
closeOnClickOutside,
|
||||
modalStates,
|
||||
setModalState,
|
||||
getModalState,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect } from "react";
|
||||
import { HiArrowDownTray, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
@@ -14,12 +15,18 @@ import { NewBoardForm } from "./components/NewBoardForm";
|
||||
|
||||
export default function BoardsPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
const { openModal, modalContentType, isOpen } = useModal();
|
||||
const { workspace } = useWorkspace();
|
||||
const { availableWorkspaces, workspace, hasLoaded } = useWorkspace();
|
||||
|
||||
useEffect(() => {
|
||||
if (hasLoaded && availableWorkspaces.length === 0) {
|
||||
openModal("NEW_WORKSPACE");
|
||||
}
|
||||
}, [hasLoaded, availableWorkspaces.length, openModal]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<PageHead
|
||||
title={t`${isTemplate ? "Templates" : "Boards"} | ${workspace.name || "Workspace"}`}
|
||||
title={t`${isTemplate ? "Templates" : "Boards"} | ${workspace.name ?? "Workspace"}`}
|
||||
/>
|
||||
<div className="m-auto h-full max-w-[1100px] p-6 px-5 md:px-28 md:py-12">
|
||||
<div className="relative z-10 mb-8 flex w-full items-center justify-between">
|
||||
|
||||
@@ -240,14 +240,7 @@ export const initAuth = (db: dbClient) => {
|
||||
]
|
||||
: []),
|
||||
// @todo: hasing is disabled due to a bug in the api key plugin
|
||||
apiKey({
|
||||
disableKeyHashing: true,
|
||||
rateLimit: {
|
||||
enabled: true,
|
||||
timeWindow: 1000 * 60, // 1 minute
|
||||
maxRequests: 100, // 100 requests per minute
|
||||
},
|
||||
}),
|
||||
apiKey({ disableKeyHashing: true }),
|
||||
magicLink({
|
||||
expiresIn: 60 * 60 * 24 * 7, // 7 days
|
||||
sendMagicLink: async ({ email, url }) => {
|
||||
|
||||
Reference in New Issue
Block a user