mirror of
https://github.com/plankanban/planka.git
synced 2026-05-04 18:00:55 +03:00
Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a8dcd7cef3 | ||
|
|
6e2e6539d1 | ||
|
|
e429b478ca | ||
|
|
0e5dedd627 | ||
|
|
eb90b12b0e | ||
|
|
cd9ba8ff4f | ||
|
|
4e23f3c8a9 | ||
|
|
a9f28b45f4 | ||
|
|
d44e0dde93 | ||
|
|
20eb57de4c | ||
|
|
4ccc71419f | ||
|
|
0e93111e1b | ||
|
|
11f7814e87 | ||
|
|
9a4241e3d1 | ||
|
|
4fd164c81a | ||
|
|
5331f590a2 | ||
|
|
082b257a50 | ||
|
|
fd0981b5b3 | ||
|
|
9b68d3fc30 | ||
|
|
922d70e289 | ||
|
|
40a3e436ad | ||
|
|
227332768c | ||
|
|
555117912c | ||
|
|
9ba5f86073 | ||
|
|
3bf6e6fa19 | ||
|
|
8cc00ef2ef | ||
|
|
3d3c8f374c | ||
|
|
7a3873cbeb | ||
|
|
512b69080d | ||
|
|
5fa6fe825b | ||
|
|
f61299fde8 | ||
|
|
a55214e617 | ||
|
|
dbad8e976b | ||
|
|
3915536e72 | ||
|
|
3b7cc9c8a7 | ||
|
|
081d0cee1f | ||
|
|
60aaa4ad92 | ||
|
|
dbff5b2b1b | ||
|
|
f9102db1b2 | ||
|
|
9abad91b04 | ||
|
|
2b5921c30d | ||
|
|
03acecc43e | ||
|
|
06bedc1f7d | ||
|
|
e31eca2273 | ||
|
|
d3ff3e2db8 | ||
|
|
952a078aa1 | ||
|
|
4ea0322dc4 | ||
|
|
105b37ef57 | ||
|
|
4fb498667e | ||
|
|
b7d3602dcd | ||
|
|
8009fbacc6 |
@@ -18,9 +18,6 @@ jobs:
|
||||
node-version: '22'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Update npm
|
||||
run: npm install npm --global
|
||||
|
||||
- name: Install server dependencies
|
||||
run: npm install --omit=prod --ignore-scripts
|
||||
working-directory: ./server
|
||||
|
||||
@@ -8,8 +8,7 @@ WORKDIR /app
|
||||
|
||||
COPY server .
|
||||
|
||||
RUN npm install npm --global \
|
||||
&& npm install \
|
||||
RUN npm install \
|
||||
&& npm run build \
|
||||
&& npm prune --production
|
||||
|
||||
@@ -28,8 +27,7 @@ RUN npm install npm --global \
|
||||
FROM node:22-alpine
|
||||
|
||||
RUN apk -U upgrade \
|
||||
&& apk add bash python3 squid --no-cache \
|
||||
&& npm install npm --global
|
||||
&& apk add bash python3 squid --no-cache
|
||||
|
||||
USER node
|
||||
WORKDIR /app
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
FROM node:22-alpine
|
||||
|
||||
RUN apk -U upgrade \
|
||||
&& apk add bash build-base python3 xdg-utils --no-cache \
|
||||
&& npm install npm --global
|
||||
&& apk add bash build-base python3 xdg-utils --no-cache
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
59
client/package-lock.json
generated
59
client/package-lock.json
generated
@@ -45,13 +45,12 @@
|
||||
"history": "^5.3.0",
|
||||
"i18next": "^25.8.18",
|
||||
"i18next-browser-languagedetector": "^8.2.1",
|
||||
"initials": "^3.1.2",
|
||||
"javascript-time-ago": "^2.6.4",
|
||||
"js-cookie": "^3.0.5",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"linkify-react": "^4.3.2",
|
||||
"linkifyjs": "^4.3.2",
|
||||
"lodash": "^4.17.23",
|
||||
"lodash": "^4.18.1",
|
||||
"lowlight": "^3.3.0",
|
||||
"markdown-it": "^13.0.2",
|
||||
"nanoid": "^5.1.7",
|
||||
@@ -85,7 +84,7 @@
|
||||
"semantic-ui-react": "^2.1.5",
|
||||
"socket.io-client": "^4.8.3",
|
||||
"validator": "^13.15.26",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^7.3.2",
|
||||
"vite-plugin-commonjs": "^0.10.4",
|
||||
"vite-plugin-node-polyfills": "^0.25.0",
|
||||
"vite-plugin-svgr": "^4.5.0",
|
||||
@@ -6472,9 +6471,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch/node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -9551,9 +9550,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/flatted": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz",
|
||||
"integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==",
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
|
||||
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
@@ -10586,12 +10585,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/initials": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/initials/-/initials-3.1.2.tgz",
|
||||
"integrity": "sha512-Sltg35nx8+GX1w4U86rmbxFEmqFiSuMJviS6cB2KChB+jcT2/8Td+nlImXD74HkqpZF5PMv8hN57AyrA/7ltXw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/inline-style-prefixer": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz",
|
||||
@@ -12329,15 +12322,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.23",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
"version": "4.17.23",
|
||||
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
|
||||
"integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
|
||||
"integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.debounce": {
|
||||
@@ -12671,9 +12664,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/micromatch/node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
@@ -13663,9 +13656,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
@@ -17485,9 +17478,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
|
||||
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz",
|
||||
"integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.27.0",
|
||||
@@ -17922,9 +17915,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.8.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
|
||||
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
|
||||
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
|
||||
@@ -122,13 +122,12 @@
|
||||
"history": "^5.3.0",
|
||||
"i18next": "^25.8.18",
|
||||
"i18next-browser-languagedetector": "^8.2.1",
|
||||
"initials": "^3.1.2",
|
||||
"javascript-time-ago": "^2.6.4",
|
||||
"js-cookie": "^3.0.5",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"linkify-react": "^4.3.2",
|
||||
"linkifyjs": "^4.3.2",
|
||||
"lodash": "^4.17.23",
|
||||
"lodash": "^4.18.1",
|
||||
"lowlight": "^3.3.0",
|
||||
"markdown-it": "^13.0.2",
|
||||
"nanoid": "^5.1.7",
|
||||
@@ -162,7 +161,7 @@
|
||||
"semantic-ui-react": "^2.1.5",
|
||||
"socket.io-client": "^4.8.3",
|
||||
"validator": "^13.15.26",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^7.3.2",
|
||||
"vite-plugin-commonjs": "^0.10.4",
|
||||
"vite-plugin-node-polyfills": "^0.25.0",
|
||||
"vite-plugin-svgr": "^4.5.0",
|
||||
|
||||
@@ -1,4 +1,22 @@
|
||||
# [2.1.0] - 2026-03-19
|
||||
# [2.1.1] - 2026-04-18
|
||||
|
||||
### Added
|
||||
|
||||
* Allow admins to edit user avatars
|
||||
* Add Pro features discovery banner
|
||||
|
||||
### Changed
|
||||
|
||||
* Remove global npm installation from Dockerfiles
|
||||
|
||||
### Fixed
|
||||
|
||||
* Fix Unicode and emoji characters in user avatar initials
|
||||
* Fix S3 request checksum calculation
|
||||
* Limit proxy file descriptors to prevent excessive memory allocation
|
||||
* Improve security by fixing multiple dependency vulnerabilities
|
||||
|
||||
## [2.1.0] - 2026-03-19
|
||||
|
||||
### Added
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import SelectRoleStep from './SelectRoleStep';
|
||||
import ApiKeyStep from './ApiKeyStep';
|
||||
import ConfirmationStep from '../../ConfirmationStep';
|
||||
import EditUserInformationStep from '../../../users/EditUserInformationStep';
|
||||
import EditUserAvatarStep from '../../../users/EditUserAvatarStep';
|
||||
import EditUserUsernameStep from '../../../users/EditUserUsernameStep';
|
||||
import EditUserEmailStep from '../../../users/EditUserEmailStep';
|
||||
import EditUserPasswordStep from '../../../users/EditUserPasswordStep';
|
||||
@@ -25,6 +26,7 @@ import styles from './ActionsStep.module.scss';
|
||||
|
||||
const StepTypes = {
|
||||
EDIT_INFORMATION: 'EDIT_INFORMATION',
|
||||
EDIT_AVATAR: 'EDIT_AVATAR',
|
||||
EDIT_USERNAME: 'EDIT_USERNAME',
|
||||
EDIT_EMAIL: 'EDIT_EMAIL',
|
||||
EDIT_PASSWORD: 'EDIT_PASSWORD',
|
||||
@@ -97,6 +99,10 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
openStep(StepTypes.EDIT_INFORMATION);
|
||||
}, [openStep]);
|
||||
|
||||
const handleEditAvatarClick = useCallback(() => {
|
||||
openStep(StepTypes.EDIT_AVATAR);
|
||||
}, [openStep]);
|
||||
|
||||
const handleEditUsernameClick = useCallback(() => {
|
||||
openStep(StepTypes.EDIT_USERNAME);
|
||||
}, [openStep]);
|
||||
@@ -137,6 +143,8 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
switch (step.type) {
|
||||
case StepTypes.EDIT_INFORMATION:
|
||||
return <EditUserInformationStep id={userId} onBack={handleBack} onClose={onClose} />;
|
||||
case StepTypes.EDIT_AVATAR:
|
||||
return <EditUserAvatarStep id={userId} onBack={handleBack} onClose={onClose} />;
|
||||
case StepTypes.EDIT_USERNAME:
|
||||
return <EditUserUsernameStep id={userId} onBack={handleBack} onClose={onClose} />;
|
||||
case StepTypes.EDIT_EMAIL:
|
||||
@@ -219,6 +227,12 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
context: 'title',
|
||||
})}
|
||||
</Menu.Item>
|
||||
<Menu.Item className={styles.menuItem} onClick={handleEditAvatarClick}>
|
||||
<Icon name="image outline" className={styles.menuItemIcon} />
|
||||
{t('action.editAvatar', {
|
||||
context: 'title',
|
||||
})}
|
||||
</Menu.Item>
|
||||
{!user.lockedFieldNames.includes('username') && (
|
||||
<Menu.Item className={styles.menuItem} onClick={handleEditUsernameClick}>
|
||||
<Icon name="at" className={styles.menuItemIcon} />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
@@ -8,6 +8,7 @@ import { useSelector } from 'react-redux';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
import Header from '../Header';
|
||||
import PromoBanner from '../PromoBanner/PromoBanner';
|
||||
import Favorites from '../Favorites';
|
||||
import HomeActions from '../HomeActions';
|
||||
import Project from '../../projects/Project';
|
||||
@@ -22,6 +23,7 @@ const Fixed = React.memo(() => {
|
||||
return (
|
||||
<div className={styles.wrapper}>
|
||||
<Header />
|
||||
<PromoBanner />
|
||||
<Favorites />
|
||||
{projectId === undefined && <HomeActions />}
|
||||
{projectId && <Project />}
|
||||
|
||||
111
client/src/components/common/PromoBanner/PromoBanner.jsx
Normal file
111
client/src/components/common/PromoBanner/PromoBanner.jsx
Normal file
@@ -0,0 +1,111 @@
|
||||
/*!
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
|
||||
import styles from './PromoBanner.module.scss';
|
||||
|
||||
const PRO_URL = 'https://planka.app/pro?ref=app-banner';
|
||||
const DISMISS_DURATION_MS = 30 * 24 * 60 * 60 * 1000;
|
||||
const CYCLE_INTERVAL_MS = 8000;
|
||||
const CSS_VAR = '--promo-banner-height';
|
||||
|
||||
const FEATURES = ['proFeatureCalendar', 'proFeatureRecurringCards', 'proFeatureGuestRoles'];
|
||||
|
||||
// Alternates: main, sub1, main, sub2, main, sub3
|
||||
const TEXTS = [
|
||||
'discoverPlankaPro',
|
||||
FEATURES[0],
|
||||
'discoverPlankaPro',
|
||||
FEATURES[1],
|
||||
'discoverPlankaPro',
|
||||
FEATURES[2],
|
||||
];
|
||||
|
||||
function getDismissKey(userId) {
|
||||
return `planka_proBannerDismissed_${userId}`;
|
||||
}
|
||||
|
||||
function isBannerDismissed(userId) {
|
||||
const stored = localStorage.getItem(getDismissKey(userId));
|
||||
if (!stored) return false;
|
||||
return Date.now() - Date.parse(stored) < DISMISS_DURATION_MS;
|
||||
}
|
||||
|
||||
const PromoBanner = React.memo(() => {
|
||||
const userId = useSelector(selectors.selectCurrentUserId);
|
||||
|
||||
const [dismissed, setDismissed] = useState(() => isBannerDismissed(userId));
|
||||
const [textIndex, setTextIndex] = useState(0);
|
||||
const [visible, setVisible] = useState(true);
|
||||
|
||||
const wrapperRef = useRef(null);
|
||||
const [t] = useTranslation();
|
||||
|
||||
useEffect(() => {
|
||||
if (dismissed) {
|
||||
document.documentElement.style.removeProperty(CSS_VAR);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const height = wrapperRef.current ? wrapperRef.current.offsetHeight : 0;
|
||||
document.documentElement.style.setProperty(CSS_VAR, `${height}px`);
|
||||
|
||||
return () => document.documentElement.style.removeProperty(CSS_VAR);
|
||||
}, [dismissed]);
|
||||
|
||||
useEffect(() => {
|
||||
if (dismissed) return undefined;
|
||||
|
||||
const interval = setInterval(() => {
|
||||
setVisible(false);
|
||||
setTimeout(() => {
|
||||
setTextIndex((i) => (i + 1) % TEXTS.length);
|
||||
setVisible(true);
|
||||
}, 400);
|
||||
}, CYCLE_INTERVAL_MS);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, [dismissed]);
|
||||
|
||||
const handleDismiss = useCallback(
|
||||
(e) => {
|
||||
e.preventDefault();
|
||||
localStorage.setItem(getDismissKey(userId), new Date().toISOString());
|
||||
setDismissed(true);
|
||||
},
|
||||
[userId],
|
||||
);
|
||||
|
||||
if (dismissed) return null;
|
||||
|
||||
return (
|
||||
<div ref={wrapperRef} className={styles.wrapper}>
|
||||
<a
|
||||
href={PRO_URL}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className={`${styles.textLink} ${visible ? styles.textVisible : styles.textHidden}`}
|
||||
>
|
||||
{t(`common.${TEXTS[textIndex]}`)}
|
||||
<span className={styles.externalIcon}>↗</span>
|
||||
</a>
|
||||
<button
|
||||
type="button"
|
||||
title={t('common.dismissProBannerFor30Days')}
|
||||
className={styles.closeButton}
|
||||
onClick={handleDismiss}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
|
||||
export default PromoBanner;
|
||||
@@ -0,0 +1,60 @@
|
||||
/*!
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
:global(#app) {
|
||||
.wrapper {
|
||||
align-items: center;
|
||||
background: rgba(0, 0, 0, 0.18);
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
justify-content: center;
|
||||
padding: 5px 16px;
|
||||
}
|
||||
|
||||
.textLink {
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
flex: 1 1 auto;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: #bdff22;
|
||||
}
|
||||
}
|
||||
|
||||
.externalIcon {
|
||||
font-size: 11px;
|
||||
margin-left: 4px;
|
||||
opacity: 0.7;
|
||||
vertical-align: super;
|
||||
}
|
||||
|
||||
.textVisible {
|
||||
opacity: 1;
|
||||
transition: opacity 0.4s ease;
|
||||
}
|
||||
|
||||
.textHidden {
|
||||
opacity: 0;
|
||||
transition: opacity 0.4s ease;
|
||||
}
|
||||
|
||||
.closeButton {
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: rgba(255, 255, 255, 0.45);
|
||||
cursor: pointer;
|
||||
flex: 0 0 auto;
|
||||
font-size: 18px;
|
||||
line-height: 1;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.closeButton:hover {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
@@ -37,15 +37,15 @@
|
||||
|
||||
.wrapper {
|
||||
height: 100%;
|
||||
margin-top: 116px;
|
||||
margin-top: calc(116px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
|
||||
.wrapperBoard {
|
||||
margin-top: 174px;
|
||||
margin-top: calc(174px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
|
||||
.wrapperBoardWithFavorites {
|
||||
margin-top: 264px;
|
||||
margin-top: calc(264px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
|
||||
.wrapperFlex {
|
||||
@@ -57,11 +57,11 @@
|
||||
}
|
||||
|
||||
.wrapperProject {
|
||||
margin-top: 98px;
|
||||
margin-top: calc(98px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
|
||||
.wrapperProjectWithFavorites {
|
||||
margin-top: 188px;
|
||||
margin-top: calc(188px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
|
||||
.wrapperTransitioning {
|
||||
@@ -73,6 +73,6 @@
|
||||
}
|
||||
|
||||
.wrapperWithFavorites {
|
||||
margin-top: 206px;
|
||||
margin-top: calc(206px + var(--promo-banner-height, 0px));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,20 +3,22 @@
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import React, { useCallback, useEffect, useRef } from 'react';
|
||||
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Button } from 'semantic-ui-react';
|
||||
import { FilePicker, Popup } from '../../../../lib/custom-ui';
|
||||
import { FilePicker, Popup } from '../../../lib/custom-ui';
|
||||
|
||||
import selectors from '../../../../selectors';
|
||||
import entryActions from '../../../../entry-actions';
|
||||
import selectors from '../../../selectors';
|
||||
import entryActions from '../../../entry-actions';
|
||||
|
||||
import styles from './EditAvatarStep.module.scss';
|
||||
import styles from './EditUserAvatarStep.module.scss';
|
||||
|
||||
const EditAvatarStep = React.memo(({ onClose }) => {
|
||||
const defaultValue = useSelector((state) => selectors.selectCurrentUser(state).avatar);
|
||||
const EditUserAvatarStep = React.memo(({ id, onBack, onClose }) => {
|
||||
const selectUserById = useMemo(() => selectors.makeSelectUserById(), []);
|
||||
|
||||
const avatar = useSelector((state) => selectUserById(state, id).avatar);
|
||||
|
||||
const dispatch = useDispatch();
|
||||
const [t] = useTranslation();
|
||||
@@ -26,33 +28,33 @@ const EditAvatarStep = React.memo(({ onClose }) => {
|
||||
const handleFileSelect = useCallback(
|
||||
(file) => {
|
||||
dispatch(
|
||||
entryActions.updateCurrentUserAvatar({
|
||||
entryActions.updateUserAvatar(id, {
|
||||
file,
|
||||
}),
|
||||
);
|
||||
|
||||
onClose();
|
||||
},
|
||||
[onClose, dispatch],
|
||||
[dispatch, id, onClose],
|
||||
);
|
||||
|
||||
const handleDeleteClick = useCallback(() => {
|
||||
dispatch(
|
||||
entryActions.updateCurrentUser({
|
||||
entryActions.updateUser(id, {
|
||||
avatar: null,
|
||||
}),
|
||||
);
|
||||
|
||||
onClose();
|
||||
}, [onClose, dispatch]);
|
||||
}, [dispatch, id, onClose]);
|
||||
|
||||
useEffect(() => {
|
||||
fieldRef.current.focus();
|
||||
fieldRef.current?.focus?.();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Popup.Header>
|
||||
<Popup.Header onBack={onBack}>
|
||||
{t('common.editAvatar', {
|
||||
context: 'title',
|
||||
})}
|
||||
@@ -67,7 +69,7 @@ const EditAvatarStep = React.memo(({ onClose }) => {
|
||||
/>
|
||||
</FilePicker>
|
||||
</div>
|
||||
{defaultValue && (
|
||||
{avatar && (
|
||||
<Button negative content={t('action.deleteAvatar')} onClick={handleDeleteClick} />
|
||||
)}
|
||||
</Popup.Content>
|
||||
@@ -75,8 +77,14 @@ const EditAvatarStep = React.memo(({ onClose }) => {
|
||||
);
|
||||
});
|
||||
|
||||
EditAvatarStep.propTypes = {
|
||||
EditUserAvatarStep.propTypes = {
|
||||
id: PropTypes.string.isRequired,
|
||||
onBack: PropTypes.func,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default EditAvatarStep;
|
||||
EditUserAvatarStep.defaultProps = {
|
||||
onBack: undefined,
|
||||
};
|
||||
|
||||
export default EditUserAvatarStep;
|
||||
@@ -3,6 +3,6 @@
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import AccountPane from './AccountPane';
|
||||
import EditUserAvatarStep from './EditUserAvatarStep';
|
||||
|
||||
export default AccountPane;
|
||||
export default EditUserAvatarStep;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
@@ -104,6 +104,17 @@ const UserActionsStep = React.memo(({ onClose }) => {
|
||||
context: 'title',
|
||||
})}
|
||||
</Menu.Item>
|
||||
<Menu.Item
|
||||
href="https://planka.app/pro?ref=app-menu"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className={styles.proMenuItem}
|
||||
>
|
||||
<Icon name="gem" className={styles.proMenuItemIcon} />
|
||||
{withAdministration
|
||||
? t('common.upgradeTeamToPro', { context: 'title' })
|
||||
: t('common.discoverPlankaPro', { context: 'title' })}
|
||||
</Menu.Item>
|
||||
<hr className={styles.divider} />
|
||||
<Menu.Item
|
||||
{...logoutMenuItemProps} // eslint-disable-line react/jsx-props-no-spreading
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Copyright (c) 2026 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
@@ -25,4 +25,14 @@
|
||||
float: left;
|
||||
margin: 0 0.5em 0 0;
|
||||
}
|
||||
|
||||
.proMenuItem {
|
||||
margin: 0;
|
||||
padding-left: 14px;
|
||||
}
|
||||
|
||||
.proMenuItemIcon {
|
||||
float: left;
|
||||
margin: 0 0.5em 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
import upperFirst from 'lodash/upperFirst';
|
||||
import camelCase from 'lodash/camelCase';
|
||||
import initials from 'initials';
|
||||
import React, { useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
@@ -35,6 +34,19 @@ const COLORS = [
|
||||
'midnight-blue',
|
||||
];
|
||||
|
||||
const getInitials = (name) => {
|
||||
const words = name
|
||||
.trim()
|
||||
.split(/[\s-]+/)
|
||||
.filter(Boolean);
|
||||
if (words.length === 0) return '';
|
||||
if (words.length === 1) return [...words[0]].slice(0, 2).join('');
|
||||
return words
|
||||
.slice(0, 2)
|
||||
.map((word) => [...word][0])
|
||||
.join('');
|
||||
};
|
||||
|
||||
const getColor = (name) => {
|
||||
let sum = 0;
|
||||
for (let i = 0; i < name.length; i += 1) {
|
||||
@@ -78,7 +90,7 @@ const UserAvatar = React.memo(
|
||||
background: avatarUrl && `url("${avatarUrl}") center / cover`,
|
||||
}}
|
||||
>
|
||||
{!avatarUrl && <span className={styles.initials}>{initials(user.name).slice(0, 2)}</span>}
|
||||
{!avatarUrl && <span className={styles.initials}>{getInitials(user.name)}</span>}
|
||||
{withCreatorIndicator && <span className={styles.creatorIndicator}>+</span>}
|
||||
</span>
|
||||
);
|
||||
|
||||
@@ -8,16 +8,16 @@ import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Button, Divider, Dropdown, Header, Tab } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../../selectors';
|
||||
import entryActions from '../../../../entry-actions';
|
||||
import { usePopupInClosableContext } from '../../../../hooks';
|
||||
import locales from '../../../../locales';
|
||||
import EditAvatarStep from './EditAvatarStep';
|
||||
import EditUserInformation from '../../EditUserInformation';
|
||||
import EditUserUsernameStep from '../../EditUserUsernameStep';
|
||||
import EditUserEmailStep from '../../EditUserEmailStep';
|
||||
import EditUserPasswordStep from '../../EditUserPasswordStep';
|
||||
import UserAvatar from '../../UserAvatar';
|
||||
import selectors from '../../../selectors';
|
||||
import entryActions from '../../../entry-actions';
|
||||
import { usePopupInClosableContext } from '../../../hooks';
|
||||
import locales from '../../../locales';
|
||||
import EditUserInformation from '../EditUserInformation';
|
||||
import EditUserAvatarStep from '../EditUserAvatarStep';
|
||||
import EditUserUsernameStep from '../EditUserUsernameStep';
|
||||
import EditUserEmailStep from '../EditUserEmailStep';
|
||||
import EditUserPasswordStep from '../EditUserPasswordStep';
|
||||
import UserAvatar from '../UserAvatar';
|
||||
|
||||
import styles from './AccountPane.module.scss';
|
||||
|
||||
@@ -34,7 +34,7 @@ const AccountPane = React.memo(() => {
|
||||
[dispatch],
|
||||
);
|
||||
|
||||
const EditAvatarPopup = usePopupInClosableContext(EditAvatarStep);
|
||||
const EditUserAvatarPopup = usePopupInClosableContext(EditUserAvatarStep);
|
||||
const EditUserUsernamePopup = usePopupInClosableContext(EditUserUsernameStep);
|
||||
const EditUserEmailPopup = usePopupInClosableContext(EditUserEmailStep);
|
||||
const EditUserPasswordPopup = usePopupInClosableContext(EditUserPasswordStep);
|
||||
@@ -45,9 +45,9 @@ const AccountPane = React.memo(() => {
|
||||
|
||||
return (
|
||||
<Tab.Pane attached={false} className={styles.wrapper}>
|
||||
<EditAvatarPopup>
|
||||
<EditUserAvatarPopup id={user.id}>
|
||||
<UserAvatar id={user.id} size="massive" isDisabled={user.isAvatarUpdating} />
|
||||
</EditAvatarPopup>
|
||||
</EditUserAvatarPopup>
|
||||
<br />
|
||||
<br />
|
||||
<EditUserInformation id={user.id} />
|
||||
@@ -75,6 +75,7 @@ export default {
|
||||
CURRENT_USER_USERNAME_UPDATE: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE`,
|
||||
USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_USERNAME_UPDATE_ERROR_CLEAR`,
|
||||
CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR`,
|
||||
USER_AVATAR_UPDATE: `${PREFIX}/USER_AVATAR_UPDATE`,
|
||||
CURRENT_USER_AVATAR_UPDATE: `${PREFIX}/CURRENT_USER_AVATAR_UPDATE`,
|
||||
USER_API_KEY_CREATE: `${PREFIX}/USER_API_KEY_CREATE`,
|
||||
USER_API_KEY_DELETE: `${PREFIX}/USER_API_KEY_DELETE`,
|
||||
|
||||
@@ -139,6 +139,14 @@ const clearCurrentUserUsernameUpdateError = () => ({
|
||||
payload: {},
|
||||
});
|
||||
|
||||
const updateUserAvatar = (id, data) => ({
|
||||
type: EntryActionTypes.USER_AVATAR_UPDATE,
|
||||
payload: {
|
||||
id,
|
||||
data,
|
||||
},
|
||||
});
|
||||
|
||||
const updateCurrentUserAvatar = (data) => ({
|
||||
type: EntryActionTypes.CURRENT_USER_AVATAR_UPDATE,
|
||||
payload: {
|
||||
@@ -271,6 +279,7 @@ export default {
|
||||
updateCurrentUserUsername,
|
||||
clearUserUsernameUpdateError,
|
||||
clearCurrentUserUsernameUpdateError,
|
||||
updateUserAvatar,
|
||||
updateCurrentUserAvatar,
|
||||
createUserApiKey,
|
||||
deleteUserApiKey,
|
||||
|
||||
@@ -138,6 +138,13 @@ export default {
|
||||
customFieldGroups_title: 'مجموعات الحقول المخصصة',
|
||||
customField_title: 'الحقل المخصص',
|
||||
customFields_title: 'الحقول المخصصة',
|
||||
discoverPlankaPro: '✨ المزيد من الميزات لألواحك: اكتشف PLANKA Pro',
|
||||
discoverPlankaPro_title: 'اكتشف PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'ترقية الفريق إلى Pro',
|
||||
proFeatureCalendar: '✨ عرض التقويم للوحاتك',
|
||||
proFeatureRecurringCards: '✨ البطاقات المتكررة والأتمتة',
|
||||
proFeatureGuestRoles: '✨ أدوار الضيف والتعاون الخارجي',
|
||||
dismissProBannerFor30Days: 'إغلاق لمدة 30 يومًا',
|
||||
customerPanel_title: 'لوحة العملاء',
|
||||
dangerZone_title: 'منطقة الخطر',
|
||||
date: 'تاريخ',
|
||||
@@ -436,6 +443,7 @@ export default {
|
||||
download: 'تحميل',
|
||||
duplicateCard_title: 'تكرار البطاقة',
|
||||
edit: 'تعديل',
|
||||
editAvatar_title: 'تعديل الصورة الرمزية',
|
||||
editColor_title: 'تعديل اللون',
|
||||
editDescription_title: 'تعديل الوصف',
|
||||
editDueDate_title: 'تعديل تاريخ الاستحقاق',
|
||||
|
||||
@@ -149,6 +149,13 @@ export default {
|
||||
customFieldGroups_title: 'Групи персонализирани полета',
|
||||
customField_title: 'Персонализирано поле',
|
||||
customFields_title: 'Персонализирани полета',
|
||||
discoverPlankaPro: '✨ Повече функции за вашите дъски: Открийте PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Открийте PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Надградете екипа до Pro',
|
||||
proFeatureCalendar: '✨ Изглед Календар за вашите дъски',
|
||||
proFeatureRecurringCards: '✨ Повтарящи се карти и автоматизация',
|
||||
proFeatureGuestRoles: '✨ Роли за гости и външно сътрудничество',
|
||||
dismissProBannerFor30Days: 'Скрий за 30 дни',
|
||||
customerPanel_title: 'Панел на клиента',
|
||||
dangerZone_title: 'Опасна зона',
|
||||
date: 'Дата',
|
||||
@@ -451,6 +458,7 @@ export default {
|
||||
download: 'Изтегляне',
|
||||
duplicateCard_title: 'Дублирана карта',
|
||||
edit: 'Редактиране',
|
||||
editAvatar_title: 'Редактиране на аватар',
|
||||
editColor_title: 'Редактиране на цвят',
|
||||
editDescription_title: 'Редактиране на описание',
|
||||
editDueDate_title: 'Редактиране на краен срок',
|
||||
|
||||
@@ -148,6 +148,13 @@ export default {
|
||||
customFieldGroups_title: 'Grups de camps personalitzats',
|
||||
customField_title: 'Camp personalitzat',
|
||||
customFields_title: 'Camps personalitzats',
|
||||
discoverPlankaPro: '✨ Més funcions per als vostres taulers: Descobriu PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Descobriu PLANKA Pro',
|
||||
upgradeTeamToPro_title: "Actualitzeu l'equip a Pro",
|
||||
proFeatureCalendar: '✨ Vista de calendari per als vostres taulers',
|
||||
proFeatureRecurringCards: '✨ Targetes recurrents i automatització',
|
||||
proFeatureGuestRoles: '✨ Rols de convidat i col·laboració externa',
|
||||
dismissProBannerFor30Days: 'Tanca durant 30 dies',
|
||||
customerPanel_title: 'Panell del client',
|
||||
dangerZone_title: 'Zona de perill',
|
||||
date: 'Data',
|
||||
@@ -453,6 +460,7 @@ export default {
|
||||
download: 'Descarregar',
|
||||
duplicateCard_title: 'Duplicar targeta',
|
||||
edit: 'Editar',
|
||||
editAvatar_title: 'Editar avatar',
|
||||
editColor_title: 'Editar color',
|
||||
editDescription_title: 'Editar descripció',
|
||||
editDueDate_title: 'Editar data de venciment',
|
||||
|
||||
@@ -140,6 +140,13 @@ export default {
|
||||
customFieldGroups_title: 'Skupina vlastních polí',
|
||||
customField_title: 'Vlastní pole',
|
||||
customFields_title: 'Vlastní pole',
|
||||
discoverPlankaPro: '✨ Více funkcí pro vaše tabule: Objevte PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Objevte PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Upgradovat tým na Pro',
|
||||
proFeatureCalendar: '✨ Zobrazení kalendáře pro vaše tabule',
|
||||
proFeatureRecurringCards: '✨ Opakující se karty a automatizace',
|
||||
proFeatureGuestRoles: '✨ Role hosta a externí spolupráce',
|
||||
dismissProBannerFor30Days: 'Zavřít na 30 dní',
|
||||
customerPanel_title: 'Panel zákazníka',
|
||||
dangerZone_title: 'Nebezpečná zóna',
|
||||
date: 'Datum',
|
||||
@@ -441,6 +448,7 @@ export default {
|
||||
download: 'Stáhnout',
|
||||
duplicateCard_title: 'Duplikovat kartu',
|
||||
edit: 'Upravit',
|
||||
editAvatar_title: 'Upravit avatar',
|
||||
editColor_title: 'Upravit barvu',
|
||||
editDescription_title: 'Upravit popis',
|
||||
editDueDate_title: 'Upravit termín',
|
||||
|
||||
@@ -144,6 +144,13 @@ export default {
|
||||
customFieldGroups_title: 'Brugerdefinerede feltgrupper',
|
||||
customField_title: 'Brugerdefineret felt',
|
||||
customFields_title: 'Brugerdefinerede felter',
|
||||
discoverPlankaPro: '✨ Flere funktioner til dine boards: Opdag PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Opdag PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Opgrader team til Pro',
|
||||
proFeatureCalendar: '✨ Kalendervisning til dine boards',
|
||||
proFeatureRecurringCards: '✨ Tilbagevendende kort og automatisering',
|
||||
proFeatureGuestRoles: '✨ Gæsteroller og eksternt samarbejde',
|
||||
dismissProBannerFor30Days: 'Luk i 30 dage',
|
||||
customerPanel_title: 'Kundepanel',
|
||||
dangerZone_title: 'Farezone',
|
||||
date: 'Dato',
|
||||
@@ -447,6 +454,7 @@ export default {
|
||||
download: 'Download',
|
||||
duplicateCard_title: 'Duplikér kort',
|
||||
edit: 'Rediger',
|
||||
editAvatar_title: 'Rediger profilbillede',
|
||||
editColor_title: 'Rediger farve',
|
||||
editDescription_title: 'Rediger beskrivelse',
|
||||
editDueDate_title: 'Rediger frist',
|
||||
|
||||
@@ -161,6 +161,13 @@ export default {
|
||||
customFields_title: 'Feldgruppen',
|
||||
customerPanel_title: 'Kundenpanel',
|
||||
dangerZone_title: 'Gefahrenbereich',
|
||||
discoverPlankaPro: '✨ Mehr Features für eure Boards: PLANKA Pro entdecken',
|
||||
discoverPlankaPro_title: 'PLANKA Pro entdecken',
|
||||
dismissProBannerFor30Days: 'Für 30 Tage schließen',
|
||||
upgradeTeamToPro_title: 'Team auf Pro upgraden',
|
||||
proFeatureCalendar: '✨ Kalenderansicht für eure Boards',
|
||||
proFeatureRecurringCards: '✨ Wiederkehrende Karten',
|
||||
proFeatureGuestRoles: '✨ Gastrollen & externe Zusammenarbeit',
|
||||
date: 'Datum',
|
||||
deactivateUser_title: 'Benutzer deaktivieren',
|
||||
defaultCardType_title: 'Standard-Kartentyp',
|
||||
@@ -463,6 +470,7 @@ export default {
|
||||
download: 'Herunterladen',
|
||||
duplicateCard_title: 'Karte duplizieren',
|
||||
edit: 'Bearbeiten',
|
||||
editAvatar_title: 'Profilbild bearbeiten',
|
||||
editColor_title: 'Farbe bearbeiten',
|
||||
editDescription_title: 'Beschreibung ändern',
|
||||
editDueDate_title: 'Fälligkeitsdatum bearbeiten',
|
||||
|
||||
@@ -157,6 +157,14 @@ export default {
|
||||
customFieldGroups_title: 'Ομάδες προσαρμοσμένων πεδίων',
|
||||
customField_title: 'Προσαρμοσμένο πεδίο',
|
||||
customFields_title: 'Προσαρμοσμένα πεδία',
|
||||
discoverPlankaPro:
|
||||
'✨ Περισσότερες λειτουργίες για τους πίνακές σας: Ανακαλύψτε το PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Ανακαλύψτε το PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Αναβαθμίστε την ομάδα σε Pro',
|
||||
proFeatureCalendar: '✨ Προβολή ημερολογίου για τους πίνακές σας',
|
||||
proFeatureRecurringCards: '✨ Επαναλαμβανόμενες κάρτες και αυτοματισμός',
|
||||
proFeatureGuestRoles: '✨ Ρόλοι επισκεπτών και εξωτερική συνεργασία',
|
||||
dismissProBannerFor30Days: 'Κλείσιμο για 30 ημέρες',
|
||||
customerPanel_title: 'Πίνακας πελάτη',
|
||||
dangerZone_title: 'Επικίνδυνη ζώνη',
|
||||
date: 'Ημερομηνία',
|
||||
@@ -467,6 +475,7 @@ export default {
|
||||
download: 'Λήψη',
|
||||
duplicateCard_title: 'Διπλασιασμός κάρτας',
|
||||
edit: 'Επεξεργασία',
|
||||
editAvatar_title: 'Επεξεργασία avatar',
|
||||
editColor_title: 'Επεξεργασία χρώματος',
|
||||
editDescription_title: 'Επεξεργασία περιγραφής',
|
||||
editDueDate_title: 'Επεξεργασία ημερομηνίας λήξης',
|
||||
|
||||
@@ -143,6 +143,13 @@ export default {
|
||||
customFieldGroups_title: 'Custom Field Groups',
|
||||
customField_title: 'Custom Field',
|
||||
customFields_title: 'Custom Fields',
|
||||
discoverPlankaPro: '✨ More features for your boards: Discover PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Discover PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Upgrade Team to Pro',
|
||||
proFeatureCalendar: '✨ Calendar View for your boards',
|
||||
proFeatureRecurringCards: '✨ Recurring Cards & Automation',
|
||||
proFeatureGuestRoles: '✨ Guest Roles & External Collaboration',
|
||||
dismissProBannerFor30Days: 'Dismiss for 30 days',
|
||||
customerPanel_title: 'Customer Panel',
|
||||
dangerZone_title: 'Danger Zone',
|
||||
date: 'Date',
|
||||
@@ -443,6 +450,7 @@ export default {
|
||||
download: 'Download',
|
||||
duplicateCard_title: 'Duplicate Card',
|
||||
edit: 'Edit',
|
||||
editAvatar_title: 'Edit Avatar',
|
||||
editColor_title: 'Edit Color',
|
||||
editDescription_title: 'Edit Description',
|
||||
editDueDate_title: 'Edit Due Date',
|
||||
|
||||
@@ -140,6 +140,13 @@ export default {
|
||||
customFields_title: 'Custom Fields',
|
||||
customerPanel_title: 'Customer Panel',
|
||||
dangerZone_title: 'Danger Zone',
|
||||
discoverPlankaPro: '✨ More features for your boards: Discover PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Discover PLANKA Pro',
|
||||
dismissProBannerFor30Days: 'Dismiss for 30 days',
|
||||
upgradeTeamToPro_title: 'Upgrade Team to Pro',
|
||||
proFeatureCalendar: '✨ Calendar View for your boards',
|
||||
proFeatureRecurringCards: '✨ Recurring Cards',
|
||||
proFeatureGuestRoles: '✨ Guest Roles & External Collaboration',
|
||||
date: 'Date',
|
||||
deactivateUser_title: 'Deactivate User',
|
||||
defaultCardType_title: 'Default Card Type',
|
||||
@@ -438,6 +445,7 @@ export default {
|
||||
download: 'Download',
|
||||
duplicateCard_title: 'Duplicate Card',
|
||||
edit: 'Edit',
|
||||
editAvatar_title: 'Edit Avatar',
|
||||
editColor_title: 'Edit Color',
|
||||
editDescription_title: 'Edit Description',
|
||||
editDueDate_title: 'Edit Due Date',
|
||||
|
||||
@@ -149,6 +149,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupos de campos personalizados',
|
||||
customField_title: 'Campo personalizado',
|
||||
customFields_title: 'Campos personalizados',
|
||||
discoverPlankaPro: '✨ Más funciones para tus tableros: Descubre PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Descubre PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Actualizar equipo a Pro',
|
||||
proFeatureCalendar: '✨ Vista de calendario para tus tableros',
|
||||
proFeatureRecurringCards: '✨ Tarjetas recurrentes y automatización',
|
||||
proFeatureGuestRoles: '✨ Roles de invitado y colaboración externa',
|
||||
dismissProBannerFor30Days: 'Cerrar durante 30 días',
|
||||
customerPanel_title: 'Panel del cliente',
|
||||
dangerZone_title: 'Zona de peligro',
|
||||
date: 'Fecha',
|
||||
@@ -453,6 +460,7 @@ export default {
|
||||
download: 'Descargar',
|
||||
duplicateCard_title: 'Duplicar tarjeta',
|
||||
edit: 'Editar',
|
||||
editAvatar_title: 'Editar avatar',
|
||||
editColor_title: 'Editar color',
|
||||
editDescription_title: 'Editar descripción',
|
||||
editDueDate_title: 'Editar fecha de vencimiento',
|
||||
|
||||
@@ -144,6 +144,13 @@ export default {
|
||||
customFieldGroups_title: 'Kohandatud väljade grupid',
|
||||
customField_title: 'Kohandatud väli',
|
||||
customFields_title: 'Kohandatud väljad',
|
||||
discoverPlankaPro: '✨ Rohkem funktsioone oma tahvlite jaoks: Avasta PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Avasta PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Uuenda meeskond Pro-ks',
|
||||
proFeatureCalendar: '✨ Kalendervaade oma tahvlite jaoks',
|
||||
proFeatureRecurringCards: '✨ Korduvad kaardid ja automatiseerimine',
|
||||
proFeatureGuestRoles: '✨ Külalisrollid ja väline koostöö',
|
||||
dismissProBannerFor30Days: 'Sulge 30 päevaks',
|
||||
customerPanel_title: 'Kliendi paneel',
|
||||
dangerZone_title: 'Ohtliku ala',
|
||||
date: 'Kuupäev',
|
||||
@@ -445,6 +452,7 @@ export default {
|
||||
download: 'Laadi alla',
|
||||
duplicateCard_title: 'Duplikaardi loomine',
|
||||
edit: 'Muuda',
|
||||
editAvatar_title: 'Muuda avatar',
|
||||
editColor_title: 'Muuda värvi',
|
||||
editDescription_title: 'Muuda kirjeldust',
|
||||
editDueDate_title: 'Muuda tähtaega',
|
||||
|
||||
@@ -147,6 +147,13 @@ export default {
|
||||
customFieldGroups_title: 'گروههای فیلد سفارشی',
|
||||
customField_title: 'فیلد سفارشی',
|
||||
customFields_title: 'فیلدهای سفارشی',
|
||||
discoverPlankaPro: '✨ ویژگیهای بیشتر برای تابلوهای شما: PLANKA Pro را کشف کنید',
|
||||
discoverPlankaPro_title: 'PLANKA Pro را کشف کنید',
|
||||
upgradeTeamToPro_title: 'ارتقای تیم به Pro',
|
||||
proFeatureCalendar: '✨ نمای تقویم برای تابلوهای شما',
|
||||
proFeatureRecurringCards: '✨ کارتهای تکرارشونده و خودکارسازی',
|
||||
proFeatureGuestRoles: '✨ نقشهای مهمان و همکاری خارجی',
|
||||
dismissProBannerFor30Days: 'بستن برای ۳۰ روز',
|
||||
customerPanel_title: 'پنل مشتری',
|
||||
dangerZone_title: 'منطقه خطر',
|
||||
date: 'تاریخ',
|
||||
@@ -447,6 +454,7 @@ export default {
|
||||
download: 'دانلود',
|
||||
duplicateCard_title: 'تکرار کارت',
|
||||
edit: 'ویرایش',
|
||||
editAvatar_title: 'ویرایش آواتار',
|
||||
editColor_title: 'ویرایش رنگ',
|
||||
editDescription_title: 'ویرایش توضیحات',
|
||||
editDueDate_title: 'ویرایش تاریخ سررسید',
|
||||
|
||||
@@ -140,6 +140,13 @@ export default {
|
||||
customFieldGroups_title: 'Mukautettujen kenttien ryhmät',
|
||||
customField_title: 'Mukautettu kenttä',
|
||||
customFields_title: 'Mukautetut kentät',
|
||||
discoverPlankaPro: '✨ Lisää ominaisuuksia tauluillesi: Tutustu PLANKA Pro:hon',
|
||||
discoverPlankaPro_title: 'Tutustu PLANKA Pro:hon',
|
||||
upgradeTeamToPro_title: 'Päivitä tiimi Pro-versioon',
|
||||
proFeatureCalendar: '✨ Kalenterinäkymä tauluillesi',
|
||||
proFeatureRecurringCards: '✨ Toistuvat kortit ja automaatio',
|
||||
proFeatureGuestRoles: '✨ Vierasroolit ja ulkoinen yhteistyö',
|
||||
dismissProBannerFor30Days: 'Sulje 30 päiväksi',
|
||||
customerPanel_title: 'Asiakaspaneeli',
|
||||
dangerZone_title: 'Vaaravyöhyke',
|
||||
date: 'Päivämäärä',
|
||||
@@ -446,6 +453,7 @@ export default {
|
||||
download: 'Lataa',
|
||||
duplicateCard_title: 'Monista kortti',
|
||||
edit: 'Muokkaa',
|
||||
editAvatar_title: 'Muokkaa avatar',
|
||||
editColor_title: 'Muokkaa väriä',
|
||||
editDescription_title: 'Muokkaa kuvausta',
|
||||
editDueDate_title: 'Muokkaa määräpäivää',
|
||||
|
||||
@@ -148,6 +148,13 @@ export default {
|
||||
customFieldGroups_title: 'Groupes de champs personnalisés',
|
||||
customField_title: 'Champ personnalisé',
|
||||
customFields_title: 'Champs personnalisés',
|
||||
discoverPlankaPro: '✨ Plus de fonctionnalités pour vos tableaux : Découvrez PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Découvrez PLANKA Pro',
|
||||
upgradeTeamToPro_title: "Passer l'équipe à Pro",
|
||||
proFeatureCalendar: '✨ Vue calendrier pour vos tableaux',
|
||||
proFeatureRecurringCards: '✨ Cartes récurrentes et automatisation',
|
||||
proFeatureGuestRoles: '✨ Rôles invités et collaboration externe',
|
||||
dismissProBannerFor30Days: 'Fermer pendant 30 jours',
|
||||
customerPanel_title: 'Panneau client',
|
||||
dangerZone_title: 'Zone dangereuse',
|
||||
date: 'Date',
|
||||
@@ -451,6 +458,7 @@ export default {
|
||||
download: 'Télécharger',
|
||||
duplicateCard_title: 'Dupliquer la carte',
|
||||
edit: 'Modifier',
|
||||
editAvatar_title: "Modifier l'avatar",
|
||||
editColor_title: 'Modifier la couleur',
|
||||
editDescription_title: 'Modifier la description',
|
||||
editDueDate_title: "Modifier la date d'échéance",
|
||||
|
||||
@@ -138,6 +138,13 @@ export default {
|
||||
customFieldGroups_title: 'Egyedi mezőcsoportok',
|
||||
customField_title: 'Egyedi mező',
|
||||
customFields_title: 'Egyedi mezők',
|
||||
discoverPlankaPro: '✨ Több funkció a tábláidhoz: Fedezd fel a PLANKA Pro-t',
|
||||
discoverPlankaPro_title: 'Fedezd fel a PLANKA Pro-t',
|
||||
upgradeTeamToPro_title: 'Csapat frissítése Pro-ra',
|
||||
proFeatureCalendar: '✨ Naptár nézet a tábláidhoz',
|
||||
proFeatureRecurringCards: '✨ Ismétlődő kártyák és automatizálás',
|
||||
proFeatureGuestRoles: '✨ Vendég szerepkörök és külső együttműködés',
|
||||
dismissProBannerFor30Days: 'Bezárás 30 napra',
|
||||
customerPanel_title: 'Ügyfélpanel',
|
||||
dangerZone_title: 'Veszélyzóna',
|
||||
date: 'Dátum',
|
||||
@@ -445,6 +452,7 @@ export default {
|
||||
download: 'Letöltés',
|
||||
duplicateCard_title: 'Kártya másolása',
|
||||
edit: 'Szerkesztés',
|
||||
editAvatar_title: 'Avatar szerkesztése',
|
||||
editColor_title: 'Szín szerkesztése',
|
||||
editDescription_title: 'Leírás szerkesztése',
|
||||
editDueDate_title: 'Esedékesség dátumának szerkesztése',
|
||||
|
||||
@@ -145,6 +145,13 @@ export default {
|
||||
customFieldGroups_title: 'Grup bidang kustom',
|
||||
customField_title: 'Bidang kustom',
|
||||
customFields_title: 'Bidang kustom',
|
||||
discoverPlankaPro: '✨ Lebih banyak fitur untuk papan Anda: Temukan PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Temukan PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Tingkatkan tim ke Pro',
|
||||
proFeatureCalendar: '✨ Tampilan Kalender untuk papan Anda',
|
||||
proFeatureRecurringCards: '✨ Kartu Berulang & Otomatisasi',
|
||||
proFeatureGuestRoles: '✨ Peran Tamu & Kolaborasi Eksternal',
|
||||
dismissProBannerFor30Days: 'Tutup selama 30 hari',
|
||||
customerPanel_title: 'Panel pelanggan',
|
||||
dangerZone_title: 'Zona berbahaya',
|
||||
date: 'Tanggal',
|
||||
@@ -446,6 +453,7 @@ export default {
|
||||
download: 'Unduh',
|
||||
duplicateCard_title: 'Duplikat kartu',
|
||||
edit: 'Ubah',
|
||||
editAvatar_title: 'Ubah avatar',
|
||||
editColor_title: 'Ubah warna',
|
||||
editDescription_title: 'Ubah deskripsi',
|
||||
editDueDate_title: 'Ubah tenggat waktu',
|
||||
|
||||
@@ -145,6 +145,13 @@ export default {
|
||||
customFieldGroups_title: 'Campi personalizzati',
|
||||
customField_title: 'Campo personalizzato',
|
||||
customFields_title: 'Campi personalizzati',
|
||||
discoverPlankaPro: '✨ Più funzionalità per le tue bacheche: Scopri PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Scopri PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Aggiorna il team a Pro',
|
||||
proFeatureCalendar: '✨ Vista calendario per le tue bacheche',
|
||||
proFeatureRecurringCards: '✨ Schede ricorrenti e automazione',
|
||||
proFeatureGuestRoles: '✨ Ruoli ospite e collaborazione esterna',
|
||||
dismissProBannerFor30Days: 'Chiudi per 30 giorni',
|
||||
customerPanel_title: 'Pannello cliente',
|
||||
dangerZone_title: 'Zona pericolosa',
|
||||
date: 'Data',
|
||||
@@ -449,6 +456,7 @@ export default {
|
||||
download: 'Scarica',
|
||||
duplicateCard_title: 'Duplica scheda',
|
||||
edit: 'Modifica',
|
||||
editAvatar_title: 'Modifica avatar',
|
||||
editColor_title: 'Modifica colore',
|
||||
editDescription_title: 'Modifica descrizione',
|
||||
editDueDate_title: 'Modifica data di scadenza',
|
||||
|
||||
@@ -141,6 +141,13 @@ export default {
|
||||
customFieldGroups_title: 'カスタムフィールドグループ',
|
||||
customField_title: 'カスタムフィールド',
|
||||
customFields_title: 'カスタムフィールド',
|
||||
discoverPlankaPro: '✨ ボードのさらなる機能: PLANKA Proを発見',
|
||||
discoverPlankaPro_title: 'PLANKA Proを発見',
|
||||
upgradeTeamToPro_title: 'チームをProにアップグレード',
|
||||
proFeatureCalendar: '✨ ボード用カレンダービュー',
|
||||
proFeatureRecurringCards: '✨ 繰り返しカードと自動化',
|
||||
proFeatureGuestRoles: '✨ ゲストロールと外部コラボレーション',
|
||||
dismissProBannerFor30Days: '30日間閉じる',
|
||||
customerPanel_title: '顧客パネル',
|
||||
dangerZone_title: '危険ゾーン',
|
||||
date: '日付',
|
||||
@@ -443,6 +450,7 @@ export default {
|
||||
download: 'ダウンロード',
|
||||
duplicateCard_title: 'カードを複製',
|
||||
edit: '編集',
|
||||
editAvatar_title: 'アバターを編集',
|
||||
editColor_title: '色を編集',
|
||||
editDescription_title: '説明を編集',
|
||||
editDueDate_title: '期限を編集',
|
||||
|
||||
@@ -136,6 +136,13 @@ export default {
|
||||
customFieldGroups_title: '사용자 정의 필드 그룹들',
|
||||
customField_title: '사용자 정의 필드',
|
||||
customFields_title: '사용자 정의 필드들',
|
||||
discoverPlankaPro: '✨ 보드를 위한 더 많은 기능: PLANKA Pro 알아보기',
|
||||
discoverPlankaPro_title: 'PLANKA Pro 알아보기',
|
||||
upgradeTeamToPro_title: '팀을 Pro로 업그레이드',
|
||||
proFeatureCalendar: '✨ 보드용 캘린더 뷰',
|
||||
proFeatureRecurringCards: '✨ 반복 카드 및 자동화',
|
||||
proFeatureGuestRoles: '✨ 게스트 역할 및 외부 협업',
|
||||
dismissProBannerFor30Days: '30일 동안 닫기',
|
||||
customerPanel_title: '고객 패널',
|
||||
dangerZone_title: '위험 구역',
|
||||
date: '날짜',
|
||||
@@ -440,6 +447,7 @@ export default {
|
||||
download: '다운로드',
|
||||
duplicateCard_title: '카드 복제',
|
||||
edit: '편집',
|
||||
editAvatar_title: '아바타 편집',
|
||||
editColor_title: '색상 편집',
|
||||
editDescription_title: '설명 편집',
|
||||
editDueDate_title: '마감일 편집',
|
||||
|
||||
@@ -144,6 +144,13 @@ export default {
|
||||
customFieldGroups_title: 'Aangepaste veldgroepen',
|
||||
customField_title: 'Aangepast veld',
|
||||
customFields_title: 'Aangepaste velden',
|
||||
discoverPlankaPro: '✨ Meer functies voor uw borden: Ontdek PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Ontdek PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Team upgraden naar Pro',
|
||||
proFeatureCalendar: '✨ Kalenderweergave voor uw borden',
|
||||
proFeatureRecurringCards: '✨ Terugkerende kaarten en automatisering',
|
||||
proFeatureGuestRoles: '✨ Gastrol en externe samenwerking',
|
||||
dismissProBannerFor30Days: 'Sluiten voor 30 dagen',
|
||||
customerPanel_title: 'Klantenpaneel',
|
||||
dangerZone_title: 'Gevaarlijke zone',
|
||||
date: 'Datum',
|
||||
@@ -449,6 +456,7 @@ export default {
|
||||
download: 'Downloaden',
|
||||
duplicateCard_title: 'Kaart dupliceren',
|
||||
edit: 'Bewerken',
|
||||
editAvatar_title: 'Avatar bewerken',
|
||||
editColor_title: 'Kleur bewerken',
|
||||
editDescription_title: 'Beschrijving bewerken',
|
||||
editDueDate_title: 'Vervaldatum bewerken',
|
||||
|
||||
@@ -143,6 +143,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupy pól własnych',
|
||||
customField_title: 'Własne pole',
|
||||
customFields_title: 'Własne pola',
|
||||
discoverPlankaPro: '✨ Więcej funkcji dla Twoich tablic: Odkryj PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Odkryj PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Uaktualnij zespół do Pro',
|
||||
proFeatureCalendar: '✨ Widok kalendarza dla Twoich tablic',
|
||||
proFeatureRecurringCards: '✨ Powtarzające się karty i automatyzacja',
|
||||
proFeatureGuestRoles: '✨ Role gościa i zewnętrzna współpraca',
|
||||
dismissProBannerFor30Days: 'Zamknij na 30 dni',
|
||||
customerPanel_title: 'Panel klienta',
|
||||
dangerZone_title: 'Strefa niebezpieczeństwa',
|
||||
date: 'Data',
|
||||
@@ -446,6 +453,7 @@ export default {
|
||||
download: 'Pobierz',
|
||||
duplicateCard_title: 'Duplikuj kartę',
|
||||
edit: 'Edytuj',
|
||||
editAvatar_title: 'Edytuj awatar',
|
||||
editColor_title: 'Edytuj kolor',
|
||||
editDescription_title: 'Edytuj opis',
|
||||
editDueDate_title: 'Edytuj termin',
|
||||
|
||||
@@ -146,6 +146,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupos de campo personalizado',
|
||||
customField_title: 'Campo personalizado',
|
||||
customFields_title: 'Campos personalizados',
|
||||
discoverPlankaPro: '✨ Mais recursos para seus quadros: Descubra o PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Descubra o PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Atualizar equipe para Pro',
|
||||
proFeatureCalendar: '✨ Visualização de calendário para seus quadros',
|
||||
proFeatureRecurringCards: '✨ Cartões recorrentes e automação',
|
||||
proFeatureGuestRoles: '✨ Funções de convidado e colaboração externa',
|
||||
dismissProBannerFor30Days: 'Fechar por 30 dias',
|
||||
customerPanel_title: 'Painel do cliente',
|
||||
dangerZone_title: 'Zona de perigo',
|
||||
date: 'Data',
|
||||
@@ -449,6 +456,7 @@ export default {
|
||||
download: 'Baixar',
|
||||
duplicateCard_title: 'Duplicar cartão',
|
||||
edit: 'Editar',
|
||||
editAvatar_title: 'Editar avatar',
|
||||
editColor_title: 'Editar cor',
|
||||
editDescription_title: 'Editar descrição',
|
||||
editDueDate_title: 'Editar data de vencimento',
|
||||
|
||||
@@ -148,6 +148,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupos de campos personalizados',
|
||||
customField_title: 'Campo personalizado',
|
||||
customFields_title: 'Campos personalizados',
|
||||
discoverPlankaPro: '✨ Mais funcionalidades para os seus quadros: Descubra o PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Descubra o PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Atualizar equipa para Pro',
|
||||
proFeatureCalendar: '✨ Vista de calendário para os seus quadros',
|
||||
proFeatureRecurringCards: '✨ Cartões recorrentes e automatização',
|
||||
proFeatureGuestRoles: '✨ Funções de convidado e colaboração externa',
|
||||
dismissProBannerFor30Days: 'Fechar durante 30 dias',
|
||||
customerPanel_title: 'Painel do cliente',
|
||||
dangerZone_title: 'Zona perigosa',
|
||||
date: 'Data',
|
||||
@@ -452,6 +459,7 @@ export default {
|
||||
download: 'Transferir',
|
||||
duplicateCard_title: 'Duplicar cartão',
|
||||
edit: 'Editar',
|
||||
editAvatar_title: 'Editar avatar',
|
||||
editColor_title: 'Editar cor',
|
||||
editDescription_title: 'Editar descrição',
|
||||
editDueDate_title: 'Editar data de vencimento',
|
||||
|
||||
@@ -142,6 +142,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupuri de câmpuri personalizate',
|
||||
customField_title: 'Câmp personalizat',
|
||||
customFields_title: 'Câmpuri personalizate',
|
||||
discoverPlankaPro: '✨ Mai multe funcții pentru panourile tale: Descoperă PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Descoperă PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Actualizează echipa la Pro',
|
||||
proFeatureCalendar: '✨ Vizualizare calendar pentru panourile tale',
|
||||
proFeatureRecurringCards: '✨ Carduri recurente și automatizare',
|
||||
proFeatureGuestRoles: '✨ Roluri invitat și colaborare externă',
|
||||
dismissProBannerFor30Days: 'Închide pentru 30 de zile',
|
||||
customerPanel_title: 'Panoul clientului',
|
||||
dangerZone_title: 'Zona periculoasă',
|
||||
date: 'Data',
|
||||
@@ -446,6 +453,7 @@ export default {
|
||||
download: 'Descărcați',
|
||||
duplicateCard_title: 'Duplicați cardul',
|
||||
edit: 'Editați',
|
||||
editAvatar_title: 'Editați avatarul',
|
||||
editColor_title: 'Editați culoarea',
|
||||
editDescription_title: 'Editați descrierea',
|
||||
editDueDate_title: 'Editați data scadentă',
|
||||
|
||||
@@ -145,6 +145,13 @@ export default {
|
||||
customFieldGroups_title: 'Группы настраиваемых полей',
|
||||
customField_title: 'Настраиваемое поле',
|
||||
customFields_title: 'Настраиваемые поля',
|
||||
discoverPlankaPro: '✨ Больше возможностей для ваших досок: Откройте PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Откройте PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Улучшить команду до Pro',
|
||||
proFeatureCalendar: '✨ Вид календаря для ваших досок',
|
||||
proFeatureRecurringCards: '✨ Повторяющиеся карточки и автоматизация',
|
||||
proFeatureGuestRoles: '✨ Роли гостей и внешнее сотрудничество',
|
||||
dismissProBannerFor30Days: 'Закрыть на 30 дней',
|
||||
customerPanel_title: 'Панель клиента',
|
||||
dangerZone_title: 'Опасная зона',
|
||||
date: 'Дата',
|
||||
@@ -448,6 +455,7 @@ export default {
|
||||
download: 'Скачать',
|
||||
duplicateCard_title: 'Дублировать карточку',
|
||||
edit: 'Изменить',
|
||||
editAvatar_title: 'Изменить аватар',
|
||||
editColor_title: 'Изменить цвет',
|
||||
editDescription_title: 'Изменить описание',
|
||||
editDueDate_title: 'Изменить срок',
|
||||
|
||||
@@ -139,6 +139,13 @@ export default {
|
||||
customFieldGroups_title: 'Skupiny vlastných polí',
|
||||
customField_title: 'Vlastné pole',
|
||||
customFields_title: 'Vlastné polia',
|
||||
discoverPlankaPro: '✨ Viac funkcií pre vaše tabule: Objavte PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Objavte PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Inovovať tím na Pro',
|
||||
proFeatureCalendar: '✨ Zobrazenie kalendára pre vaše tabule',
|
||||
proFeatureRecurringCards: '✨ Opakujúce sa karty a automatizácia',
|
||||
proFeatureGuestRoles: '✨ Roly hosťa a externá spolupráca',
|
||||
dismissProBannerFor30Days: 'Zavrieť na 30 dní',
|
||||
customerPanel_title: 'Panel zákazníka',
|
||||
dangerZone_title: 'Nebezpečná zóna',
|
||||
date: 'Dátum',
|
||||
@@ -439,6 +446,7 @@ export default {
|
||||
download: 'Stiahnuť',
|
||||
duplicateCard_title: 'Duplikovať kartu',
|
||||
edit: 'Upraviť',
|
||||
editAvatar_title: 'Upraviť avatar',
|
||||
editColor_title: 'Upraviť farbu',
|
||||
editDescription_title: 'Upraviť popis',
|
||||
editDueDate_title: 'Upraviť termín do',
|
||||
|
||||
@@ -142,6 +142,13 @@ export default {
|
||||
customFieldGroups_title: 'Групе прилагођених поља',
|
||||
customField_title: 'Прилагођено поље',
|
||||
customFields_title: 'Прилагођена поља',
|
||||
discoverPlankaPro: '✨ Више функција за ваше табле: Откријте PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Откријте PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Надоградите тим на Pro',
|
||||
proFeatureCalendar: '✨ Приказ календара за ваше табле',
|
||||
proFeatureRecurringCards: '✨ Понављајуће картице и аутоматизација',
|
||||
proFeatureGuestRoles: '✨ Гостујуће улоге и спољна сарадња',
|
||||
dismissProBannerFor30Days: 'Затвори на 30 дана',
|
||||
customerPanel_title: 'Панел купца',
|
||||
dangerZone_title: 'Опасна зона',
|
||||
date: 'Датум',
|
||||
@@ -442,6 +449,7 @@ export default {
|
||||
download: 'Преузми',
|
||||
duplicateCard_title: 'Клонирај картицу',
|
||||
edit: 'Измени',
|
||||
editAvatar_title: 'Уреди аватара',
|
||||
editColor_title: 'Уреди боју',
|
||||
editDescription_title: 'Измени опис',
|
||||
editDueDate_title: 'Измени рок',
|
||||
|
||||
@@ -143,6 +143,13 @@ export default {
|
||||
customFieldGroups_title: 'Grupe prilagođenih polja',
|
||||
customField_title: 'Prilagođeno polje',
|
||||
customFields_title: 'Prilagođena polja',
|
||||
discoverPlankaPro: '✨ Više funkcija za vaše table: Otkrijte PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Otkrijte PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Nadogradite tim na Pro',
|
||||
proFeatureCalendar: '✨ Prikaz kalendara za vaše table',
|
||||
proFeatureRecurringCards: '✨ Ponavljajuće kartice i automatizacija',
|
||||
proFeatureGuestRoles: '✨ Gostujuće uloge i spoljna saradnja',
|
||||
dismissProBannerFor30Days: 'Zatvori na 30 dana',
|
||||
customerPanel_title: 'Panel kupca',
|
||||
dangerZone_title: 'Opasna zona',
|
||||
date: 'Datum',
|
||||
@@ -444,6 +451,7 @@ export default {
|
||||
download: 'Preuzmi',
|
||||
duplicateCard_title: 'Kloniraj karticu',
|
||||
edit: 'Izmeni',
|
||||
editAvatar_title: 'Uredi avatara',
|
||||
editColor_title: 'Uredi boju',
|
||||
editDescription_title: 'Izmeni opis',
|
||||
editDueDate_title: 'Izmeni rok',
|
||||
|
||||
@@ -149,6 +149,13 @@ export default {
|
||||
customFieldGroups_title: 'Anpassade fältgrupper',
|
||||
customField_title: 'Anpassat fält',
|
||||
customFields_title: 'Anpassade fält',
|
||||
discoverPlankaPro: '✨ Fler funktioner för dina bräden: Upptäck PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Upptäck PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Uppgradera teamet till Pro',
|
||||
proFeatureCalendar: '✨ Kalendervy för dina bräden',
|
||||
proFeatureRecurringCards: '✨ Återkommande kort och automatisering',
|
||||
proFeatureGuestRoles: '✨ Gästroller och externt samarbete',
|
||||
dismissProBannerFor30Days: 'Stäng i 30 dagar',
|
||||
customerPanel_title: 'Kundpanel',
|
||||
dangerZone_title: 'Farozon',
|
||||
date: 'Datum',
|
||||
@@ -453,6 +460,7 @@ export default {
|
||||
download: 'Ladda ner',
|
||||
duplicateCard_title: 'Duplicera kort',
|
||||
edit: 'Redigera',
|
||||
editAvatar_title: 'Redigera avatar',
|
||||
editColor_title: 'Redigera färg',
|
||||
editDescription_title: 'Redigera beskrivning',
|
||||
editDueDate_title: 'Redigera förfallodatum',
|
||||
|
||||
@@ -146,6 +146,13 @@ export default {
|
||||
customFieldGroups_title: 'özel alan grupları',
|
||||
customField_title: 'Özel alan',
|
||||
customFields_title: 'Özel alanlar',
|
||||
discoverPlankaPro: "✨ Panolarınız için daha fazla özellik: PLANKA Pro'yu keşfedin",
|
||||
discoverPlankaPro_title: "PLANKA Pro'yu keşfedin",
|
||||
upgradeTeamToPro_title: "Ekibi Pro'ya yükseltin",
|
||||
proFeatureCalendar: '✨ Panolarınız için takvim görünümü',
|
||||
proFeatureRecurringCards: '✨ Yinelenen kartlar ve otomasyon',
|
||||
proFeatureGuestRoles: '✨ Misafir rolleri ve harici iş birliği',
|
||||
dismissProBannerFor30Days: '30 gün için kapat',
|
||||
customerPanel_title: 'Müşteri paneli',
|
||||
dangerZone_title: 'Tehlikeli bölge',
|
||||
date: 'tarih',
|
||||
@@ -449,6 +456,7 @@ export default {
|
||||
download: 'İndir',
|
||||
duplicateCard_title: 'Kartı kopyala',
|
||||
edit: 'Düzenle',
|
||||
editAvatar_title: 'Avatarı düzenle',
|
||||
editColor_title: 'Rengi düzenle',
|
||||
editDescription_title: 'Açıklamayı düzenle',
|
||||
editDueDate_title: 'Son tarihi düzenle',
|
||||
|
||||
@@ -144,6 +144,13 @@ export default {
|
||||
customFieldGroups_title: 'Користувацькі групи полів',
|
||||
customField_title: 'Користувацьке поле',
|
||||
customFields_title: 'Користувацькі поля',
|
||||
discoverPlankaPro: '✨ Більше можливостей для ваших дощок: Відкрийте PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Відкрийте PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Оновити команду до Pro',
|
||||
proFeatureCalendar: '✨ Вигляд календаря для ваших дощок',
|
||||
proFeatureRecurringCards: '✨ Повторювані картки та автоматизація',
|
||||
proFeatureGuestRoles: '✨ Ролі гостей та зовнішня співпраця',
|
||||
dismissProBannerFor30Days: 'Закрити на 30 днів',
|
||||
customerPanel_title: 'Панель клієнта',
|
||||
dangerZone_title: 'Небезпечна зона',
|
||||
date: 'Дата',
|
||||
@@ -444,6 +451,7 @@ export default {
|
||||
download: 'Завантажити',
|
||||
duplicateCard_title: 'Дублювати картку',
|
||||
edit: 'Редагувати',
|
||||
editAvatar_title: 'Редагувати аватар',
|
||||
editColor_title: 'Редагувати колір',
|
||||
editDescription_title: 'Редагувати опис',
|
||||
editDueDate_title: 'Редагувати термін виконання',
|
||||
|
||||
@@ -140,6 +140,13 @@ export default {
|
||||
customFieldGroups_title: 'Maxsus maydon guruhlari',
|
||||
customField_title: 'Maxsus maydon',
|
||||
customFields_title: 'Maxsus maydonlar',
|
||||
discoverPlankaPro: "✨ Doskalaringiz uchun ko'proq imkoniyatlar: PLANKA Pro ni kashf eting",
|
||||
discoverPlankaPro_title: 'PLANKA Pro ni kashf eting',
|
||||
upgradeTeamToPro_title: 'Jamoani Pro ga yangilash',
|
||||
proFeatureCalendar: "✨ Doskalaringiz uchun kalendar ko'rinishi",
|
||||
proFeatureRecurringCards: '✨ Takrorlanuvchi kartalar va avtomatlashtirish',
|
||||
proFeatureGuestRoles: '✨ Mehmon rollari va tashqi hamkorlik',
|
||||
dismissProBannerFor30Days: '30 kunga yopish',
|
||||
customerPanel_title: 'Mijoz paneli',
|
||||
dangerZone_title: 'Xavfli hudud',
|
||||
date: 'Sana',
|
||||
@@ -442,6 +449,7 @@ export default {
|
||||
download: 'Yuklab olish',
|
||||
duplicateCard_title: 'Kartani nusxalash',
|
||||
edit: 'Tahrirlash',
|
||||
editAvatar_title: 'Avatarni tahrirlash',
|
||||
editColor_title: 'Rangni tahrirlash',
|
||||
editDescription_title: 'Izohni tahrirlash',
|
||||
editDueDate_title: 'Muddatni tahrirlash',
|
||||
|
||||
@@ -145,6 +145,13 @@ export default {
|
||||
customFieldGroups_title: 'Các nhóm trường tùy chỉnh',
|
||||
customField_title: 'Trường tùy chỉnh',
|
||||
customFields_title: 'Các trường tùy chỉnh',
|
||||
discoverPlankaPro: '✨ Nhiều tính năng hơn cho bảng của bạn: Khám phá PLANKA Pro',
|
||||
discoverPlankaPro_title: 'Khám phá PLANKA Pro',
|
||||
upgradeTeamToPro_title: 'Nâng cấp nhóm lên Pro',
|
||||
proFeatureCalendar: '✨ Chế độ xem lịch cho bảng của bạn',
|
||||
proFeatureRecurringCards: '✨ Thẻ định kỳ và tự động hóa',
|
||||
proFeatureGuestRoles: '✨ Vai trò khách và cộng tác bên ngoài',
|
||||
dismissProBannerFor30Days: 'Đóng trong 30 ngày',
|
||||
customerPanel_title: 'Bảng điều khiển khách hàng',
|
||||
dangerZone_title: 'Khu vực nguy hiểm',
|
||||
date: 'Ngày',
|
||||
@@ -444,6 +451,7 @@ export default {
|
||||
download: 'Tải xuống',
|
||||
duplicateCard_title: 'Nhân bản Thẻ',
|
||||
edit: 'Chỉnh sửa',
|
||||
editAvatar_title: 'Chỉnh sửa ảnh đại diện',
|
||||
editColor_title: 'Chỉnh sửa Màu sắc',
|
||||
editDescription_title: 'Chỉnh sửa Mô tả',
|
||||
editDueDate_title: 'Chỉnh sửa Hạn chót',
|
||||
|
||||
@@ -125,6 +125,13 @@ export default {
|
||||
customFieldGroups_title: '自定义字段组',
|
||||
customField_title: '自定义字段',
|
||||
customFields_title: '自定义字段',
|
||||
discoverPlankaPro: '✨ 为您的看板提供更多功能:探索 PLANKA Pro',
|
||||
discoverPlankaPro_title: '探索 PLANKA Pro',
|
||||
upgradeTeamToPro_title: '将团队升级到 Pro',
|
||||
proFeatureCalendar: '✨ 看板的日历视图',
|
||||
proFeatureRecurringCards: '✨ 重复卡片与自动化',
|
||||
proFeatureGuestRoles: '✨ 访客角色与外部协作',
|
||||
dismissProBannerFor30Days: '关闭 30 天',
|
||||
customerPanel_title: '客户面板',
|
||||
dangerZone_title: '危险区域',
|
||||
date: '日期',
|
||||
@@ -419,6 +426,7 @@ export default {
|
||||
download: '下载',
|
||||
duplicateCard_title: '复制卡片',
|
||||
edit: '编辑',
|
||||
editAvatar_title: '编辑头像',
|
||||
editColor_title: '编辑颜色',
|
||||
editDescription_title: '编辑描述',
|
||||
editDueDate_title: '编辑到期时间',
|
||||
|
||||
@@ -125,6 +125,13 @@ export default {
|
||||
customFieldGroups_title: '自定義欄位群組',
|
||||
customField_title: '自定義欄位',
|
||||
customFields_title: '自定義欄位',
|
||||
discoverPlankaPro: '✨ 為您的看板提供更多功能:探索 PLANKA Pro',
|
||||
discoverPlankaPro_title: '探索 PLANKA Pro',
|
||||
upgradeTeamToPro_title: '將團隊升級至 Pro',
|
||||
proFeatureCalendar: '✨ 看板的日曆檢視',
|
||||
proFeatureRecurringCards: '✨ 重複卡片與自動化',
|
||||
proFeatureGuestRoles: '✨ 訪客角色與外部協作',
|
||||
dismissProBannerFor30Days: '關閉 30 天',
|
||||
customerPanel_title: '客戶面板',
|
||||
dangerZone_title: '危險區域',
|
||||
date: '日期',
|
||||
@@ -419,6 +426,7 @@ export default {
|
||||
download: '下載',
|
||||
duplicateCard_title: '複製卡片',
|
||||
edit: '編輯',
|
||||
editAvatar_title: '編輯頭像',
|
||||
editColor_title: '編輯顏色',
|
||||
editDescription_title: '編輯描述',
|
||||
editDueDate_title: '編輯截止時間',
|
||||
|
||||
@@ -64,6 +64,9 @@ export default function* usersWatchers() {
|
||||
takeEvery(EntryActionTypes.CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR, () =>
|
||||
services.clearCurrentUserUsernameUpdateError(),
|
||||
),
|
||||
takeEvery(EntryActionTypes.USER_AVATAR_UPDATE, ({ payload: { id, data } }) =>
|
||||
services.updateUserAvatar(id, data),
|
||||
),
|
||||
takeEvery(EntryActionTypes.CURRENT_USER_AVATAR_UPDATE, ({ payload: { data } }) =>
|
||||
services.updateCurrentUserAvatar(data),
|
||||
),
|
||||
|
||||
@@ -1 +1 @@
|
||||
export default '2.1.0';
|
||||
export default '2.1.1';
|
||||
|
||||
@@ -10,6 +10,8 @@ import svgr from 'vite-plugin-svgr';
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import browserslistToEsbuild from 'browserslist-to-esbuild';
|
||||
|
||||
const PROXY_TARGET = process.env.PROXY_TARGET || 'http://localhost:1337';
|
||||
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
@@ -55,8 +57,8 @@ export default defineConfig({
|
||||
port: 3000,
|
||||
open: true,
|
||||
proxy: {
|
||||
'/api': 'http://localhost:1337',
|
||||
'/socket.io': { target: 'http://localhost:1337', ws: true },
|
||||
'/api': PROXY_TARGET,
|
||||
'/socket.io': { target: PROXY_TARGET, ws: true },
|
||||
},
|
||||
},
|
||||
build: {
|
||||
|
||||
@@ -60,6 +60,7 @@ services:
|
||||
# - S3_SECRET_ACCESS_KEY=
|
||||
# - S3_BUCKET=
|
||||
# - S3_FORCE_PATH_STYLE=true
|
||||
# - S3_REQUEST_CHECKSUM_CALCULATION=
|
||||
|
||||
# - OIDC_ISSUER=
|
||||
# - OIDC_CLIENT_ID=
|
||||
@@ -111,6 +112,8 @@ services:
|
||||
- ./client:/app
|
||||
ports:
|
||||
- 3000:3000
|
||||
environment:
|
||||
- PROXY_TARGET=http://planka-server:1337
|
||||
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
|
||||
@@ -76,6 +76,7 @@ services:
|
||||
# - S3_SECRET_ACCESS_KEY__FILE=/run/secrets/s3_secret_access_key
|
||||
# - S3_BUCKET=
|
||||
# - S3_FORCE_PATH_STYLE=true
|
||||
# - S3_REQUEST_CHECKSUM_CALCULATION=
|
||||
|
||||
# - OIDC_ISSUER=
|
||||
# - OIDC_CLIENT_ID=
|
||||
|
||||
16
package-lock.json
generated
16
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "planka",
|
||||
"version": "2.1.0",
|
||||
"version": "2.1.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "planka",
|
||||
"version": "2.1.0",
|
||||
"version": "2.1.1",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"concurrently": "^9.2.1",
|
||||
@@ -70,9 +70,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
@@ -833,9 +833,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.8.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
|
||||
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
|
||||
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "planka",
|
||||
"version": "2.1.0",
|
||||
"version": "2.1.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"client:build": "npm run build --prefix client",
|
||||
|
||||
@@ -51,6 +51,7 @@ SECRET_KEY=notsecretkey
|
||||
# S3_SECRET_ACCESS_KEY=
|
||||
# S3_BUCKET=
|
||||
# S3_FORCE_PATH_STYLE=true
|
||||
# S3_REQUEST_CHECKSUM_CALCULATION=
|
||||
|
||||
# OIDC_ISSUER=
|
||||
# OIDC_CLIENT_ID=
|
||||
|
||||
@@ -29,7 +29,7 @@ module.exports = function defineS3Hook(sails) {
|
||||
|
||||
sails.log.info('Initializing custom hook (`s3`)');
|
||||
|
||||
client = new S3Client({
|
||||
const config = {
|
||||
endpoint: sails.config.custom.s3Endpoint,
|
||||
region: sails.config.custom.s3Region || 'eu-central-1',
|
||||
credentials: {
|
||||
@@ -37,7 +37,13 @@ module.exports = function defineS3Hook(sails) {
|
||||
secretAccessKey: sails.config.custom.s3SecretAccessKey,
|
||||
},
|
||||
forcePathStyle: sails.config.custom.s3ForcePathStyle,
|
||||
});
|
||||
};
|
||||
|
||||
if (sails.config.custom.s3RequestChecksumCalculation) {
|
||||
config.requestChecksumCalculation = sails.config.custom.s3RequestChecksumCalculation;
|
||||
}
|
||||
|
||||
client = new S3Client(config);
|
||||
},
|
||||
|
||||
getClient() {
|
||||
|
||||
@@ -72,6 +72,7 @@ module.exports.custom = {
|
||||
s3SecretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
|
||||
s3Bucket: process.env.S3_BUCKET,
|
||||
s3ForcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
|
||||
s3RequestChecksumCalculation: process.env.S3_REQUEST_CHECKSUM_CALCULATION,
|
||||
|
||||
oidcIssuer: process.env.OIDC_ISSUER,
|
||||
oidcClientId: process.env.OIDC_CLIENT_ID,
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
"Trash": "Papierkorb",
|
||||
"You Were Added to Card": "Sie wurden zur Karte hinzugefügt",
|
||||
"You Were Mentioned in Comment": "Sie wurden in einem Kommentar erwähnt",
|
||||
"%s added you to %s on %s": "%s hat Sie zu %s am %s hinzugefügt",
|
||||
"%s created %s in %s on %s": "%s hat %s in %s am %s erstellt",
|
||||
"%s left a new comment to %s on %s": "%s hat einen neuen Kommentar zu %s am %s hinterlassen",
|
||||
"%s mentioned you in %s on %s": "%s hat Sie in %s am %s erwähnt",
|
||||
"%s moved %s from %s to %s on %s": "%s hat %s von %s nach %s am %s verschoben"
|
||||
"%s added you to %s on %s": "%s hat Sie zur Karte %s auf dem Board %s hinzugefügt",
|
||||
"%s created %s in %s on %s": "%s hat die Karte %s in der Liste %s auf dem Board %s erstellt",
|
||||
"%s left a new comment to %s on %s": "%s hat einen neuen Kommentar zur Karte %s auf dem Board %s hinterlassen",
|
||||
"%s mentioned you in %s on %s": "%s hat Sie in der Karte %s auf dem Board %s erwähnt",
|
||||
"%s moved %s from %s to %s on %s": "%s hat die Karte %s von der Liste %s in die Liste %s auf dem Board %s verschoben"
|
||||
}
|
||||
|
||||
153
server/package-lock.json
generated
153
server/package-lock.json
generated
@@ -23,10 +23,10 @@
|
||||
"istextorbinary": "^9.5.0",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"knex": "^3.1.0",
|
||||
"lodash": "^4.17.23",
|
||||
"lodash": "^4.18.1",
|
||||
"mime-types": "^3.0.2",
|
||||
"moment": "^2.30.1",
|
||||
"nodemailer": "^7.0.13",
|
||||
"nodemailer": "^8.0.5",
|
||||
"openid-client": "^5.7.1",
|
||||
"patch-package": "^8.0.1",
|
||||
"pg": "^8.20.0",
|
||||
@@ -960,13 +960,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/xml-builder": {
|
||||
"version": "3.972.11",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.11.tgz",
|
||||
"integrity": "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ==",
|
||||
"version": "3.972.17",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.17.tgz",
|
||||
"integrity": "sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^4.13.1",
|
||||
"fast-xml-parser": "5.4.1",
|
||||
"@smithy/types": "^4.14.0",
|
||||
"fast-xml-parser": "5.5.8",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1757,11 +1757,11 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@sailshq/binary-search-tree": {
|
||||
"version": "0.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz",
|
||||
"integrity": "sha512-4q7A4I0cYzRRrPUA/mZYFQ3My26RAyWQ10IfdgHaBC6M1ZNCUpQnT7vRMZd5KgnlUBl8MSlP4JUbL5heeSHMBw==",
|
||||
"version": "0.2.8",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.8.tgz",
|
||||
"integrity": "sha512-D468YMSdHdrnaW2d3eT0MHM443+y/kcb0KuzwdhKnjEy/BLJDo/oqFhhnNYUBXdvOrOC1S8+mLuR82DIgixhFQ==",
|
||||
"dependencies": {
|
||||
"underscore": "1.13.1"
|
||||
"underscore": "1.13.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@sailshq/csurf": {
|
||||
@@ -1792,16 +1792,16 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@sailshq/nedb": {
|
||||
"version": "1.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.3.tgz",
|
||||
"integrity": "sha512-MEvv/O9OalhvzQZpHOLz4EnMS1qMLzdNTjSEKyRY9cbwRfNtN7ENBSI1ftCuSJCNMOU5QXLX0AiUERuMxm1PsQ==",
|
||||
"version": "1.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.4.tgz",
|
||||
"integrity": "sha512-mcLM6lq+a6VLH7vVBogPogHVKwKldenu0jzETOnlu7m+bG6S0RJLgrPZ49r6/7OyykxzxLNJt/zWxJNORqeC/A==",
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"dependencies": {
|
||||
"@sailshq/binary-search-tree": "0.2.7",
|
||||
"@sailshq/binary-search-tree": "^0.2.8",
|
||||
"async": "0.2.10",
|
||||
"localforage": "1.3.0",
|
||||
"mkdirp": "0.5.6",
|
||||
"underscore": "1.13.1"
|
||||
"underscore": "1.13.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@sailshq/nedb/node_modules/async": {
|
||||
@@ -1810,16 +1810,16 @@
|
||||
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
|
||||
},
|
||||
"node_modules/@sailshq/router": {
|
||||
"version": "1.3.10",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/router/-/router-1.3.10.tgz",
|
||||
"integrity": "sha512-6h5IE0PrSEkF03Fze1lUwnDMnYMbBPkUgKaUG/mkthHpiO/VDzbD0QJXyD7xmhlD05dEzuZnGqrrUeY5oZIMAg==",
|
||||
"version": "1.3.11",
|
||||
"resolved": "https://registry.npmjs.org/@sailshq/router/-/router-1.3.11.tgz",
|
||||
"integrity": "sha512-uQSnZnFm8RBO49gyCev27RgQRpBI3KY0qd6Bh4saHMDmRGCA8IdS/SiwnuuXCychjOhovDalT46GhBjHkPIiGA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"array-flatten": "3.0.0",
|
||||
"debug": "2.6.9",
|
||||
"methods": "~1.1.2",
|
||||
"parseurl": "~1.3.3",
|
||||
"path-to-regexp": "0.1.12",
|
||||
"path-to-regexp": "0.1.13",
|
||||
"setprototypeof": "1.2.0",
|
||||
"utils-merge": "1.0.1"
|
||||
},
|
||||
@@ -1852,9 +1852,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sailshq/router/node_modules/path-to-regexp": {
|
||||
"version": "0.1.12",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
||||
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
|
||||
"version": "0.1.13",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
|
||||
"integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@smithy/abort-controller": {
|
||||
@@ -2346,9 +2346,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@smithy/types": {
|
||||
"version": "4.13.1",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz",
|
||||
"integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==",
|
||||
"version": "4.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.0.tgz",
|
||||
"integrity": "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"tslib": "^2.6.2"
|
||||
@@ -3170,9 +3170,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"version": "1.1.13",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
|
||||
"integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
@@ -5015,9 +5015,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/express/node_modules/path-to-regexp": {
|
||||
"version": "0.1.12",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
||||
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
|
||||
"version": "0.1.13",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
|
||||
"integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/express/node_modules/serve-static": {
|
||||
@@ -5103,9 +5103,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz",
|
||||
"integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==",
|
||||
"version": "5.5.8",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz",
|
||||
"integrity": "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -5114,8 +5114,9 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fast-xml-builder": "^1.0.0",
|
||||
"strnum": "^2.1.2"
|
||||
"fast-xml-builder": "^1.1.4",
|
||||
"path-expression-matcher": "^1.2.0",
|
||||
"strnum": "^2.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"fxparser": "src/cli/cli.js"
|
||||
@@ -5187,9 +5188,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/filelist/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
@@ -5373,9 +5374,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/flatted": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz",
|
||||
"integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==",
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
|
||||
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
@@ -5704,9 +5705,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/glob/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -6981,9 +6982,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.23",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.get": {
|
||||
@@ -7506,9 +7507,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mocha/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -7620,9 +7621,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/nodemailer": {
|
||||
"version": "7.0.13",
|
||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.13.tgz",
|
||||
"integrity": "sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==",
|
||||
"version": "8.0.5",
|
||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.5.tgz",
|
||||
"integrity": "sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==",
|
||||
"license": "MIT-0",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
@@ -7668,9 +7669,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/nodemon/node_modules/brace-expansion": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
|
||||
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
|
||||
"version": "5.0.5",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
|
||||
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -8215,9 +8216,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/path-expression-matcher": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz",
|
||||
"integrity": "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==",
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.4.0.tgz",
|
||||
"integrity": "sha512-s4DQMxIdhj3jLFWd9LxHOplj4p9yQ4ffMGowFf3cpEgrrJjEhN0V5nxw4Ye1EViAGDoL4/1AeO6qHpqYPOzE4Q==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -8400,9 +8401,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
@@ -9013,9 +9014,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rimraf/node_modules/brace-expansion": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
|
||||
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
|
||||
"version": "5.0.5",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
|
||||
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^4.0.2"
|
||||
@@ -10770,9 +10771,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/strnum": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz",
|
||||
"integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==",
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz",
|
||||
"integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -11328,9 +11329,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/underscore": {
|
||||
"version": "1.13.1",
|
||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
|
||||
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
|
||||
"version": "1.13.8",
|
||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz",
|
||||
"integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/undici": {
|
||||
@@ -12130,9 +12131,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.8.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
|
||||
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
|
||||
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
|
||||
@@ -65,10 +65,10 @@
|
||||
"istextorbinary": "^9.5.0",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"knex": "^3.1.0",
|
||||
"lodash": "^4.17.23",
|
||||
"lodash": "^4.18.1",
|
||||
"mime-types": "^3.0.2",
|
||||
"moment": "^2.30.1",
|
||||
"nodemailer": "^7.0.13",
|
||||
"nodemailer": "^8.0.5",
|
||||
"openid-client": "^5.7.1",
|
||||
"patch-package": "^8.0.1",
|
||||
"pg": "^8.20.0",
|
||||
|
||||
@@ -42,6 +42,7 @@ start_outgoing_proxy_if_needed() {
|
||||
# Basic settings
|
||||
echo "pid_filename $SQUID_PID" >> "$SQUID_CONF"
|
||||
echo "http_port 127.0.0.1:3128" >> "$SQUID_CONF"
|
||||
echo "max_filedescriptors 4096" >> "$SQUID_CONF"
|
||||
echo "acl all src all" >> "$SQUID_CONF"
|
||||
|
||||
# Disable caching
|
||||
|
||||
@@ -1 +1 @@
|
||||
module.exports = '2.1.0';
|
||||
module.exports = '2.1.1';
|
||||
|
||||
Reference in New Issue
Block a user