@lokalise/harmony 1.28.0 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/harmony.cjs +4 -1
- package/dist/harmony.cjs.map +1 -1
- package/dist/harmony.mjs +5 -2
- package/dist/harmony100.cjs +4 -59
- package/dist/harmony100.cjs.map +1 -1
- package/dist/harmony100.mjs +5 -60
- package/dist/harmony100.mjs.map +1 -1
- package/dist/harmony101.cjs +39 -6
- package/dist/harmony101.cjs.map +1 -1
- package/dist/harmony101.mjs +39 -6
- package/dist/harmony101.mjs.map +1 -1
- package/dist/harmony102.cjs +60 -18
- package/dist/harmony102.cjs.map +1 -1
- package/dist/harmony102.mjs +60 -18
- package/dist/harmony102.mjs.map +1 -1
- package/dist/harmony103.cjs +6 -13
- package/dist/harmony103.cjs.map +1 -1
- package/dist/harmony103.mjs +6 -13
- package/dist/harmony103.mjs.map +1 -1
- package/dist/harmony104.cjs +7 -17
- package/dist/harmony104.cjs.map +1 -1
- package/dist/harmony104.mjs +6 -16
- package/dist/harmony104.mjs.map +1 -1
- package/dist/harmony105.cjs +99 -6
- package/dist/harmony105.cjs.map +1 -1
- package/dist/harmony105.mjs +81 -5
- package/dist/harmony105.mjs.map +1 -1
- package/dist/harmony106.cjs +63 -6
- package/dist/harmony106.cjs.map +1 -1
- package/dist/harmony106.mjs +62 -5
- package/dist/harmony106.mjs.map +1 -1
- package/dist/harmony107.cjs +89 -6
- package/dist/harmony107.cjs.map +1 -1
- package/dist/harmony107.mjs +88 -5
- package/dist/harmony107.mjs.map +1 -1
- package/dist/harmony108.cjs +19 -63
- package/dist/harmony108.cjs.map +1 -1
- package/dist/harmony108.mjs +18 -62
- package/dist/harmony108.mjs.map +1 -1
- package/dist/harmony109.cjs +6 -89
- package/dist/harmony109.cjs.map +1 -1
- package/dist/harmony109.mjs +5 -88
- package/dist/harmony109.mjs.map +1 -1
- package/dist/harmony110.cjs +5 -18
- package/dist/harmony110.cjs.map +1 -1
- package/dist/harmony110.mjs +5 -18
- package/dist/harmony110.mjs.map +1 -1
- package/dist/harmony117.cjs +1 -1
- package/dist/harmony117.mjs +1 -1
- package/dist/harmony127.cjs +1 -1
- package/dist/harmony127.mjs +1 -1
- package/dist/harmony15.cjs +1 -1
- package/dist/harmony15.mjs +1 -1
- package/dist/harmony22.cjs +1 -1
- package/dist/harmony22.mjs +1 -1
- package/dist/harmony23.cjs +1 -1
- package/dist/harmony23.mjs +1 -1
- package/dist/harmony30.cjs +1 -1
- package/dist/harmony30.mjs +1 -1
- package/dist/harmony60.cjs +63 -29
- package/dist/harmony60.cjs.map +1 -1
- package/dist/harmony60.mjs +63 -29
- package/dist/harmony60.mjs.map +1 -1
- package/dist/harmony65.cjs +1 -1
- package/dist/harmony65.mjs +1 -1
- package/dist/harmony75.cjs +6 -6
- package/dist/harmony75.mjs +6 -6
- package/dist/harmony83.cjs +1 -1
- package/dist/harmony83.mjs +1 -1
- package/dist/harmony84.cjs +3 -2
- package/dist/harmony84.cjs.map +1 -1
- package/dist/harmony84.mjs +3 -2
- package/dist/harmony84.mjs.map +1 -1
- package/dist/harmony89.cjs +1 -1
- package/dist/harmony89.mjs +1 -1
- package/dist/harmony93.cjs +18 -99
- package/dist/harmony93.cjs.map +1 -1
- package/dist/harmony93.mjs +18 -82
- package/dist/harmony93.mjs.map +1 -1
- package/dist/harmony94.cjs +14 -21
- package/dist/harmony94.cjs.map +1 -1
- package/dist/harmony94.mjs +13 -20
- package/dist/harmony94.mjs.map +1 -1
- package/dist/harmony95.cjs +16 -5
- package/dist/harmony95.cjs.map +1 -1
- package/dist/harmony95.mjs +16 -5
- package/dist/harmony95.mjs.map +1 -1
- package/dist/harmony96.cjs +21 -132
- package/dist/harmony96.cjs.map +1 -1
- package/dist/harmony96.mjs +20 -131
- package/dist/harmony96.mjs.map +1 -1
- package/dist/harmony97.cjs +6 -12
- package/dist/harmony97.cjs.map +1 -1
- package/dist/harmony97.mjs +5 -11
- package/dist/harmony97.mjs.map +1 -1
- package/dist/harmony98.cjs +132 -5
- package/dist/harmony98.cjs.map +1 -1
- package/dist/harmony98.mjs +132 -5
- package/dist/harmony98.mjs.map +1 -1
- package/dist/harmony99.cjs +12 -40
- package/dist/harmony99.cjs.map +1 -1
- package/dist/harmony99.mjs +11 -39
- package/dist/harmony99.mjs.map +1 -1
- package/dist/types/src/features/publicApi/hooks/useListTeamsQuery.d.ts +7 -9
- package/dist/types/src/features/publicApi/hooks/useRetrieveTeamQuery.d.ts +24 -11
- package/dist/types/src/features/publicApi/team.d.ts +187 -108
- package/dist/types/src/features/publicApi/types/teamTypes.d.ts +272 -115
- package/package.json +1 -1
package/dist/harmony107.mjs
CHANGED
@@ -1,8 +1,91 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
2
|
+
import { Tag, Button, Menu, MenuList, MenuItem, Link } from "@lokalise/louis";
|
3
|
+
import { convertNewLineToBreakTag } from "./harmony8.mjs";
|
4
|
+
import { makeUrlClickable } from "./harmony9.mjs";
|
5
|
+
import { formatDate } from "./harmony10.mjs";
|
6
|
+
import { parseISO } from "date-fns";
|
7
|
+
import { splitFileName } from "./harmony116.mjs";
|
8
|
+
import { TaskLanguage } from "./harmony117.mjs";
|
9
|
+
import { useTasks } from "./harmony100.mjs";
|
10
|
+
import { getTaskLanguages, tagColor } from "./harmony118.mjs";
|
11
|
+
import styles from "./harmony119.mjs";
|
12
|
+
const TaskOverview = ({ task }) => {
|
13
|
+
const { getProjectUrl, taskTitleOnClick } = useTasks();
|
14
|
+
const taskLanguages = getTaskLanguages(task.langs);
|
15
|
+
const handleDownloadStyleGuide = (styleGuide) => {
|
16
|
+
window.open(
|
17
|
+
`/style-guide/${task.team_id}/download/${styleGuide.id}/link`,
|
18
|
+
"_blank",
|
19
|
+
"noopener,noreferrer"
|
20
|
+
);
|
21
|
+
};
|
22
|
+
return /* @__PURE__ */ jsxs("div", { className: styles.taskContainer, children: [
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-row gap-1 items-center", children: [
|
24
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-row gap-1 items-start flex-wrap", children: [
|
25
|
+
/* @__PURE__ */ jsx(Tag, { color: tagColor[task.task_type], variant: "solid", children: task.task_type.toLocaleUpperCase() }),
|
26
|
+
task.due_date && /* @__PURE__ */ jsxs(Tag, { color: "#EAB308", children: [
|
27
|
+
"DUE ",
|
28
|
+
formatDate(parseISO(task.due_date), "yyyy-MM-dd")
|
29
|
+
] })
|
30
|
+
] }),
|
31
|
+
task.style_guides.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex-row", children: task.style_guides.length === 1 ? /* @__PURE__ */ jsx(
|
32
|
+
Button,
|
33
|
+
{
|
34
|
+
size: "sm",
|
35
|
+
variant: "secondary",
|
36
|
+
onClick: () => handleDownloadStyleGuide(task.style_guides[0]),
|
37
|
+
children: "Download style guide"
|
38
|
+
}
|
39
|
+
) : /* @__PURE__ */ jsx(
|
40
|
+
Menu,
|
41
|
+
{
|
42
|
+
menuButton: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", children: "Download style guide" }),
|
43
|
+
children: /* @__PURE__ */ jsx(MenuList, { children: task.style_guides.map((styleGuide) => /* @__PURE__ */ jsx(
|
44
|
+
MenuItem,
|
45
|
+
{
|
46
|
+
onClick: () => handleDownloadStyleGuide(styleGuide),
|
47
|
+
children: splitFileName(styleGuide.name).name
|
48
|
+
},
|
49
|
+
styleGuide.id
|
50
|
+
)) })
|
51
|
+
}
|
52
|
+
) })
|
53
|
+
] }),
|
54
|
+
/* @__PURE__ */ jsx("h4", { className: styles.taskTitle, children: /* @__PURE__ */ jsx(
|
55
|
+
Link,
|
56
|
+
{
|
57
|
+
href: getProjectUrl({ task, view: "multi" }),
|
58
|
+
onClick: () => {
|
59
|
+
taskTitleOnClick == null ? void 0 : taskTitleOnClick({ task });
|
60
|
+
},
|
61
|
+
children: task.title
|
62
|
+
}
|
63
|
+
) }),
|
64
|
+
task.description && /* @__PURE__ */ jsx("div", { className: styles.taskDescription, children: convertNewLineToBreakTag(makeUrlClickable(task.description)) }),
|
65
|
+
/* @__PURE__ */ jsxs("table", { className: styles.languagesTable, children: [
|
66
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
67
|
+
/* @__PURE__ */ jsx("th", { children: "Languages" }),
|
68
|
+
/* @__PURE__ */ jsx("th", { children: "Words to do" }),
|
69
|
+
/* @__PURE__ */ jsx("th", { children: "Progress" }),
|
70
|
+
/* @__PURE__ */ jsx("th", { children: "Status" })
|
71
|
+
] }) }),
|
72
|
+
/* @__PURE__ */ jsx("tbody", { children: taskLanguages.map((language) => /* @__PURE__ */ jsx(TaskLanguage, { language, task }, language.lang_id)) })
|
73
|
+
] }),
|
74
|
+
/* @__PURE__ */ jsxs("div", { "data-testid": "sidebar-task-overview-metadata", className: styles.metadata, children: [
|
75
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
76
|
+
"Source: ",
|
77
|
+
task.source_lang_name
|
78
|
+
] }),
|
79
|
+
/* @__PURE__ */ jsx("span", { children: task.created_by_fullname }),
|
80
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
81
|
+
"In ",
|
82
|
+
task.project_name,
|
83
|
+
task.master_branching_enabled === "1" && /* @__PURE__ */ jsx("div", { className: styles.tag, children: task.branch_name ? task.branch_name : "master" })
|
84
|
+
] })
|
85
|
+
] })
|
86
|
+
] });
|
87
|
+
};
|
5
88
|
export {
|
6
|
-
|
89
|
+
TaskOverview
|
7
90
|
};
|
8
91
|
//# sourceMappingURL=harmony107.mjs.map
|
package/dist/harmony107.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony107.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"harmony107.mjs","sources":["../src/components/Sidebar/Widgets/Tasks/TaskOverview/TaskOverview.tsx"],"sourcesContent":["import { Button, Link, Menu, MenuItem, MenuList, Tag } from '@lokalise/louis'\nimport { convertNewLineToBreakTag, formatDate, makeUrlClickable } from '@utils'\nimport { parseISO } from 'date-fns'\nimport { splitFileName } from '../../../utils'\nimport { TaskLanguage } from '../TaskLanguage/TaskLanguage'\nimport { useTasks } from '../TasksContext'\nimport type { SidebarTask, SidebarTaskStyleGuide } from '../types'\nimport { getTaskLanguages, tagColor } from '../utils/content'\nimport styles from './TaskOverview.module.css'\n\nexport type TaskProps = {\n\ttask: SidebarTask\n}\n\nexport const TaskOverview = ({ task }: TaskProps) => {\n\tconst { getProjectUrl, taskTitleOnClick } = useTasks()\n\n\tconst taskLanguages = getTaskLanguages(task.langs)\n\n\tconst handleDownloadStyleGuide = (styleGuide: SidebarTaskStyleGuide) => {\n\t\twindow.open(\n\t\t\t`/style-guide/${task.team_id}/download/${styleGuide.id}/link`,\n\t\t\t'_blank',\n\t\t\t'noopener,noreferrer',\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className={styles.taskContainer}>\n\t\t\t<div className=\"flex-row gap-1 items-center\">\n\t\t\t\t<div className=\"flex-row gap-1 items-start flex-wrap\">\n\t\t\t\t\t<Tag color={tagColor[task.task_type]} variant=\"solid\">\n\t\t\t\t\t\t{task.task_type.toLocaleUpperCase()}\n\t\t\t\t\t</Tag>\n\t\t\t\t\t{task.due_date && (\n\t\t\t\t\t\t<Tag color={'#EAB308'}>DUE {formatDate(parseISO(task.due_date), 'yyyy-MM-dd')}</Tag>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{task.style_guides.length > 0 && (\n\t\t\t\t\t<div className=\"flex-row\">\n\t\t\t\t\t\t{task.style_guides.length === 1 ? (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tonClick={() => handleDownloadStyleGuide(task.style_guides[0])}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDownload style guide\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Menu\n\t\t\t\t\t\t\t\tmenuButton={\n\t\t\t\t\t\t\t\t\t<Button variant=\"secondary\" size=\"sm\">\n\t\t\t\t\t\t\t\t\t\tDownload style guide\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MenuList>\n\t\t\t\t\t\t\t\t\t{task.style_guides.map((styleGuide) => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={styleGuide.id}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleDownloadStyleGuide(styleGuide)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{splitFileName(styleGuide.name).name}\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t\t</Menu>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<h4 className={styles.taskTitle}>\n\t\t\t\t<Link\n\t\t\t\t\thref={getProjectUrl({ task, view: 'multi' })}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\ttaskTitleOnClick?.({ task })\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{task.title}\n\t\t\t\t</Link>\n\t\t\t</h4>\n\n\t\t\t{task.description && (\n\t\t\t\t<div className={styles.taskDescription}>\n\t\t\t\t\t{convertNewLineToBreakTag(makeUrlClickable(task.description))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<table className={styles.languagesTable}>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Languages</th>\n\t\t\t\t\t\t<th>Words to do</th>\n\t\t\t\t\t\t<th>Progress</th>\n\t\t\t\t\t\t<th>Status</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{taskLanguages.map((language) => (\n\t\t\t\t\t\t<TaskLanguage key={language.lang_id} language={language} task={task} />\n\t\t\t\t\t))}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div data-testid=\"sidebar-task-overview-metadata\" className={styles.metadata}>\n\t\t\t\t<span>Source: {task.source_lang_name}</span>\n\t\t\t\t<span>{task.created_by_fullname}</span>\n\t\t\t\t<span>\n\t\t\t\t\tIn {task.project_name}\n\t\t\t\t\t{task.master_branching_enabled === '1' && (\n\t\t\t\t\t\t<div className={styles.tag}>{task.branch_name ? task.branch_name : 'master'}</div>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":[],"mappings":"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"}
|
package/dist/harmony108.cjs
CHANGED
@@ -1,65 +1,21 @@
|
|
1
1
|
"use strict";
|
2
|
-
Object.
|
3
|
-
const
|
4
|
-
const
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
return {
|
22
|
-
top: 0,
|
23
|
-
right: 0,
|
24
|
-
bottom: 0,
|
25
|
-
left: 0,
|
26
|
-
...padding
|
27
|
-
};
|
28
|
-
}
|
29
|
-
function getPaddingObject(padding) {
|
30
|
-
return typeof padding !== "number" ? expandPaddingObject(padding) : {
|
31
|
-
top: padding,
|
32
|
-
right: padding,
|
33
|
-
bottom: padding,
|
34
|
-
left: padding
|
35
|
-
};
|
36
|
-
}
|
37
|
-
function rectToClientRect(rect) {
|
38
|
-
const {
|
39
|
-
x,
|
40
|
-
y,
|
41
|
-
width,
|
42
|
-
height
|
43
|
-
} = rect;
|
44
|
-
return {
|
45
|
-
width,
|
46
|
-
height,
|
47
|
-
top: y,
|
48
|
-
left: x,
|
49
|
-
right: x + width,
|
50
|
-
bottom: y + height,
|
51
|
-
x,
|
52
|
-
y
|
53
|
-
};
|
54
|
-
}
|
55
|
-
exports.clamp = clamp;
|
56
|
-
exports.evaluate = evaluate;
|
57
|
-
exports.expandPaddingObject = expandPaddingObject;
|
58
|
-
exports.getOppositeAxis = getOppositeAxis;
|
59
|
-
exports.getPaddingObject = getPaddingObject;
|
60
|
-
exports.getSide = getSide;
|
61
|
-
exports.getSideAxis = getSideAxis;
|
62
|
-
exports.max = max;
|
63
|
-
exports.min = min;
|
64
|
-
exports.rectToClientRect = rectToClientRect;
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
3
|
+
const loadingContainer = "_loadingContainer_19d6m_1";
|
4
|
+
const noTasksContainer = "_noTasksContainer_19d6m_7";
|
5
|
+
const noTasksHeading = "_noTasksHeading_19d6m_14";
|
6
|
+
const noTasksText = "_noTasksText_19d6m_18";
|
7
|
+
const tasksContainer = "_tasksContainer_19d6m_23";
|
8
|
+
const styles = {
|
9
|
+
loadingContainer,
|
10
|
+
noTasksContainer,
|
11
|
+
noTasksHeading,
|
12
|
+
noTasksText,
|
13
|
+
tasksContainer
|
14
|
+
};
|
15
|
+
exports.default = styles;
|
16
|
+
exports.loadingContainer = loadingContainer;
|
17
|
+
exports.noTasksContainer = noTasksContainer;
|
18
|
+
exports.noTasksHeading = noTasksHeading;
|
19
|
+
exports.noTasksText = noTasksText;
|
20
|
+
exports.tasksContainer = tasksContainer;
|
65
21
|
//# sourceMappingURL=harmony108.cjs.map
|
package/dist/harmony108.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony108.cjs","sources":[
|
1
|
+
{"version":3,"file":"harmony108.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
package/dist/harmony108.mjs
CHANGED
@@ -1,65 +1,21 @@
|
|
1
|
-
const
|
2
|
-
const
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
return axis === "x" ? "y" : "x";
|
14
|
-
}
|
15
|
-
function getSideAxis(placement) {
|
16
|
-
return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
|
17
|
-
}
|
18
|
-
function expandPaddingObject(padding) {
|
19
|
-
return {
|
20
|
-
top: 0,
|
21
|
-
right: 0,
|
22
|
-
bottom: 0,
|
23
|
-
left: 0,
|
24
|
-
...padding
|
25
|
-
};
|
26
|
-
}
|
27
|
-
function getPaddingObject(padding) {
|
28
|
-
return typeof padding !== "number" ? expandPaddingObject(padding) : {
|
29
|
-
top: padding,
|
30
|
-
right: padding,
|
31
|
-
bottom: padding,
|
32
|
-
left: padding
|
33
|
-
};
|
34
|
-
}
|
35
|
-
function rectToClientRect(rect) {
|
36
|
-
const {
|
37
|
-
x,
|
38
|
-
y,
|
39
|
-
width,
|
40
|
-
height
|
41
|
-
} = rect;
|
42
|
-
return {
|
43
|
-
width,
|
44
|
-
height,
|
45
|
-
top: y,
|
46
|
-
left: x,
|
47
|
-
right: x + width,
|
48
|
-
bottom: y + height,
|
49
|
-
x,
|
50
|
-
y
|
51
|
-
};
|
52
|
-
}
|
1
|
+
const loadingContainer = "_loadingContainer_19d6m_1";
|
2
|
+
const noTasksContainer = "_noTasksContainer_19d6m_7";
|
3
|
+
const noTasksHeading = "_noTasksHeading_19d6m_14";
|
4
|
+
const noTasksText = "_noTasksText_19d6m_18";
|
5
|
+
const tasksContainer = "_tasksContainer_19d6m_23";
|
6
|
+
const styles = {
|
7
|
+
loadingContainer,
|
8
|
+
noTasksContainer,
|
9
|
+
noTasksHeading,
|
10
|
+
noTasksText,
|
11
|
+
tasksContainer
|
12
|
+
};
|
53
13
|
export {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
getSideAxis,
|
61
|
-
max,
|
62
|
-
min,
|
63
|
-
rectToClientRect
|
14
|
+
styles as default,
|
15
|
+
loadingContainer,
|
16
|
+
noTasksContainer,
|
17
|
+
noTasksHeading,
|
18
|
+
noTasksText,
|
19
|
+
tasksContainer
|
64
20
|
};
|
65
21
|
//# sourceMappingURL=harmony108.mjs.map
|
package/dist/harmony108.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony108.mjs","sources":[
|
1
|
+
{"version":3,"file":"harmony108.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/harmony109.cjs
CHANGED
@@ -1,91 +1,8 @@
|
|
1
1
|
"use strict";
|
2
|
-
Object.
|
3
|
-
const
|
4
|
-
const
|
5
|
-
|
6
|
-
const
|
7
|
-
|
8
|
-
const dateFns = require("date-fns");
|
9
|
-
const index = require("./harmony116.cjs");
|
10
|
-
const TaskLanguage = require("./harmony117.cjs");
|
11
|
-
const TasksContext = require("./harmony98.cjs");
|
12
|
-
const content = require("./harmony118.cjs");
|
13
|
-
const TaskOverview_module = require("./harmony119.cjs");
|
14
|
-
const TaskOverview = ({ task }) => {
|
15
|
-
const { getProjectUrl, taskTitleOnClick } = TasksContext.useTasks();
|
16
|
-
const taskLanguages = content.getTaskLanguages(task.langs);
|
17
|
-
const handleDownloadStyleGuide = (styleGuide) => {
|
18
|
-
window.open(
|
19
|
-
`/style-guide/${task.team_id}/download/${styleGuide.id}/link`,
|
20
|
-
"_blank",
|
21
|
-
"noopener,noreferrer"
|
22
|
-
);
|
23
|
-
};
|
24
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TaskOverview_module.default.taskContainer, children: [
|
25
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-row gap-1 items-center", children: [
|
26
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-row gap-1 items-start flex-wrap", children: [
|
27
|
-
/* @__PURE__ */ jsxRuntime.jsx(louis.Tag, { color: content.tagColor[task.task_type], variant: "solid", children: task.task_type.toLocaleUpperCase() }),
|
28
|
-
task.due_date && /* @__PURE__ */ jsxRuntime.jsxs(louis.Tag, { color: "#EAB308", children: [
|
29
|
-
"DUE ",
|
30
|
-
date.formatDate(dateFns.parseISO(task.due_date), "yyyy-MM-dd")
|
31
|
-
] })
|
32
|
-
] }),
|
33
|
-
task.style_guides.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-row", children: task.style_guides.length === 1 ? /* @__PURE__ */ jsxRuntime.jsx(
|
34
|
-
louis.Button,
|
35
|
-
{
|
36
|
-
size: "sm",
|
37
|
-
variant: "secondary",
|
38
|
-
onClick: () => handleDownloadStyleGuide(task.style_guides[0]),
|
39
|
-
children: "Download style guide"
|
40
|
-
}
|
41
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
42
|
-
louis.Menu,
|
43
|
-
{
|
44
|
-
menuButton: /* @__PURE__ */ jsxRuntime.jsx(louis.Button, { variant: "secondary", size: "sm", children: "Download style guide" }),
|
45
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(louis.MenuList, { children: task.style_guides.map((styleGuide) => /* @__PURE__ */ jsxRuntime.jsx(
|
46
|
-
louis.MenuItem,
|
47
|
-
{
|
48
|
-
onClick: () => handleDownloadStyleGuide(styleGuide),
|
49
|
-
children: index.splitFileName(styleGuide.name).name
|
50
|
-
},
|
51
|
-
styleGuide.id
|
52
|
-
)) })
|
53
|
-
}
|
54
|
-
) })
|
55
|
-
] }),
|
56
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: TaskOverview_module.default.taskTitle, children: /* @__PURE__ */ jsxRuntime.jsx(
|
57
|
-
louis.Link,
|
58
|
-
{
|
59
|
-
href: getProjectUrl({ task, view: "multi" }),
|
60
|
-
onClick: () => {
|
61
|
-
taskTitleOnClick == null ? void 0 : taskTitleOnClick({ task });
|
62
|
-
},
|
63
|
-
children: task.title
|
64
|
-
}
|
65
|
-
) }),
|
66
|
-
task.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: TaskOverview_module.default.taskDescription, children: text.convertNewLineToBreakTag(url.makeUrlClickable(task.description)) }),
|
67
|
-
/* @__PURE__ */ jsxRuntime.jsxs("table", { className: TaskOverview_module.default.languagesTable, children: [
|
68
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
69
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { children: "Languages" }),
|
70
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { children: "Words to do" }),
|
71
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { children: "Progress" }),
|
72
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { children: "Status" })
|
73
|
-
] }) }),
|
74
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: taskLanguages.map((language) => /* @__PURE__ */ jsxRuntime.jsx(TaskLanguage.TaskLanguage, { language, task }, language.lang_id)) })
|
75
|
-
] }),
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "sidebar-task-overview-metadata", className: TaskOverview_module.default.metadata, children: [
|
77
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
78
|
-
"Source: ",
|
79
|
-
task.source_lang_name
|
80
|
-
] }),
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: task.created_by_fullname }),
|
82
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
83
|
-
"In ",
|
84
|
-
task.project_name,
|
85
|
-
task.master_branching_enabled === "1" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: TaskOverview_module.default.tag, children: task.branch_name ? task.branch_name : "master" })
|
86
|
-
] })
|
87
|
-
] })
|
88
|
-
] });
|
89
|
-
};
|
90
|
-
exports.TaskOverview = TaskOverview;
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
3
|
+
const _commonjsHelpers = require("./harmony129.cjs");
|
4
|
+
const debounce$1 = require("./harmony111.cjs");
|
5
|
+
var debounceExports = debounce$1.__require();
|
6
|
+
const debounce = /* @__PURE__ */ _commonjsHelpers.getDefaultExportFromCjs(debounceExports);
|
7
|
+
exports.default = debounce;
|
91
8
|
//# sourceMappingURL=harmony109.cjs.map
|
package/dist/harmony109.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony109.cjs","sources":[
|
1
|
+
{"version":3,"file":"harmony109.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
package/dist/harmony109.mjs
CHANGED
@@ -1,91 +1,8 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
import { formatDate } from "./harmony10.mjs";
|
6
|
-
import { parseISO } from "date-fns";
|
7
|
-
import { splitFileName } from "./harmony116.mjs";
|
8
|
-
import { TaskLanguage } from "./harmony117.mjs";
|
9
|
-
import { useTasks } from "./harmony98.mjs";
|
10
|
-
import { getTaskLanguages, tagColor } from "./harmony118.mjs";
|
11
|
-
import styles from "./harmony119.mjs";
|
12
|
-
const TaskOverview = ({ task }) => {
|
13
|
-
const { getProjectUrl, taskTitleOnClick } = useTasks();
|
14
|
-
const taskLanguages = getTaskLanguages(task.langs);
|
15
|
-
const handleDownloadStyleGuide = (styleGuide) => {
|
16
|
-
window.open(
|
17
|
-
`/style-guide/${task.team_id}/download/${styleGuide.id}/link`,
|
18
|
-
"_blank",
|
19
|
-
"noopener,noreferrer"
|
20
|
-
);
|
21
|
-
};
|
22
|
-
return /* @__PURE__ */ jsxs("div", { className: styles.taskContainer, children: [
|
23
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-row gap-1 items-center", children: [
|
24
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-row gap-1 items-start flex-wrap", children: [
|
25
|
-
/* @__PURE__ */ jsx(Tag, { color: tagColor[task.task_type], variant: "solid", children: task.task_type.toLocaleUpperCase() }),
|
26
|
-
task.due_date && /* @__PURE__ */ jsxs(Tag, { color: "#EAB308", children: [
|
27
|
-
"DUE ",
|
28
|
-
formatDate(parseISO(task.due_date), "yyyy-MM-dd")
|
29
|
-
] })
|
30
|
-
] }),
|
31
|
-
task.style_guides.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex-row", children: task.style_guides.length === 1 ? /* @__PURE__ */ jsx(
|
32
|
-
Button,
|
33
|
-
{
|
34
|
-
size: "sm",
|
35
|
-
variant: "secondary",
|
36
|
-
onClick: () => handleDownloadStyleGuide(task.style_guides[0]),
|
37
|
-
children: "Download style guide"
|
38
|
-
}
|
39
|
-
) : /* @__PURE__ */ jsx(
|
40
|
-
Menu,
|
41
|
-
{
|
42
|
-
menuButton: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", children: "Download style guide" }),
|
43
|
-
children: /* @__PURE__ */ jsx(MenuList, { children: task.style_guides.map((styleGuide) => /* @__PURE__ */ jsx(
|
44
|
-
MenuItem,
|
45
|
-
{
|
46
|
-
onClick: () => handleDownloadStyleGuide(styleGuide),
|
47
|
-
children: splitFileName(styleGuide.name).name
|
48
|
-
},
|
49
|
-
styleGuide.id
|
50
|
-
)) })
|
51
|
-
}
|
52
|
-
) })
|
53
|
-
] }),
|
54
|
-
/* @__PURE__ */ jsx("h4", { className: styles.taskTitle, children: /* @__PURE__ */ jsx(
|
55
|
-
Link,
|
56
|
-
{
|
57
|
-
href: getProjectUrl({ task, view: "multi" }),
|
58
|
-
onClick: () => {
|
59
|
-
taskTitleOnClick == null ? void 0 : taskTitleOnClick({ task });
|
60
|
-
},
|
61
|
-
children: task.title
|
62
|
-
}
|
63
|
-
) }),
|
64
|
-
task.description && /* @__PURE__ */ jsx("div", { className: styles.taskDescription, children: convertNewLineToBreakTag(makeUrlClickable(task.description)) }),
|
65
|
-
/* @__PURE__ */ jsxs("table", { className: styles.languagesTable, children: [
|
66
|
-
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
67
|
-
/* @__PURE__ */ jsx("th", { children: "Languages" }),
|
68
|
-
/* @__PURE__ */ jsx("th", { children: "Words to do" }),
|
69
|
-
/* @__PURE__ */ jsx("th", { children: "Progress" }),
|
70
|
-
/* @__PURE__ */ jsx("th", { children: "Status" })
|
71
|
-
] }) }),
|
72
|
-
/* @__PURE__ */ jsx("tbody", { children: taskLanguages.map((language) => /* @__PURE__ */ jsx(TaskLanguage, { language, task }, language.lang_id)) })
|
73
|
-
] }),
|
74
|
-
/* @__PURE__ */ jsxs("div", { "data-testid": "sidebar-task-overview-metadata", className: styles.metadata, children: [
|
75
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
76
|
-
"Source: ",
|
77
|
-
task.source_lang_name
|
78
|
-
] }),
|
79
|
-
/* @__PURE__ */ jsx("span", { children: task.created_by_fullname }),
|
80
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
81
|
-
"In ",
|
82
|
-
task.project_name,
|
83
|
-
task.master_branching_enabled === "1" && /* @__PURE__ */ jsx("div", { className: styles.tag, children: task.branch_name ? task.branch_name : "master" })
|
84
|
-
] })
|
85
|
-
] })
|
86
|
-
] });
|
87
|
-
};
|
1
|
+
import { getDefaultExportFromCjs } from "./harmony129.mjs";
|
2
|
+
import { __require as requireDebounce } from "./harmony111.mjs";
|
3
|
+
var debounceExports = requireDebounce();
|
4
|
+
const debounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports);
|
88
5
|
export {
|
89
|
-
|
6
|
+
debounce as default
|
90
7
|
};
|
91
8
|
//# sourceMappingURL=harmony109.mjs.map
|
package/dist/harmony109.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony109.mjs","sources":[
|
1
|
+
{"version":3,"file":"harmony109.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/harmony110.cjs
CHANGED
@@ -1,21 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
3
|
-
const
|
4
|
-
const
|
5
|
-
|
6
|
-
const
|
7
|
-
|
8
|
-
const styles = {
|
9
|
-
loadingContainer,
|
10
|
-
noTasksContainer,
|
11
|
-
noTasksHeading,
|
12
|
-
noTasksText,
|
13
|
-
tasksContainer
|
14
|
-
};
|
15
|
-
exports.default = styles;
|
16
|
-
exports.loadingContainer = loadingContainer;
|
17
|
-
exports.noTasksContainer = noTasksContainer;
|
18
|
-
exports.noTasksHeading = noTasksHeading;
|
19
|
-
exports.noTasksText = noTasksText;
|
20
|
-
exports.tasksContainer = tasksContainer;
|
3
|
+
const _commonjsHelpers = require("./harmony129.cjs");
|
4
|
+
const throttle$1 = require("./harmony115.cjs");
|
5
|
+
var throttleExports = throttle$1.__require();
|
6
|
+
const throttle = /* @__PURE__ */ _commonjsHelpers.getDefaultExportFromCjs(throttleExports);
|
7
|
+
exports.default = throttle;
|
21
8
|
//# sourceMappingURL=harmony110.cjs.map
|
package/dist/harmony110.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony110.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"harmony110.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
package/dist/harmony110.mjs
CHANGED
@@ -1,21 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
const
|
5
|
-
const tasksContainer = "_tasksContainer_19d6m_23";
|
6
|
-
const styles = {
|
7
|
-
loadingContainer,
|
8
|
-
noTasksContainer,
|
9
|
-
noTasksHeading,
|
10
|
-
noTasksText,
|
11
|
-
tasksContainer
|
12
|
-
};
|
1
|
+
import { getDefaultExportFromCjs } from "./harmony129.mjs";
|
2
|
+
import { __require as requireThrottle } from "./harmony115.mjs";
|
3
|
+
var throttleExports = requireThrottle();
|
4
|
+
const throttle = /* @__PURE__ */ getDefaultExportFromCjs(throttleExports);
|
13
5
|
export {
|
14
|
-
|
15
|
-
loadingContainer,
|
16
|
-
noTasksContainer,
|
17
|
-
noTasksHeading,
|
18
|
-
noTasksText,
|
19
|
-
tasksContainer
|
6
|
+
throttle as default
|
20
7
|
};
|
21
8
|
//# sourceMappingURL=harmony110.mjs.map
|
package/dist/harmony110.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"harmony110.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"harmony110.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/harmony117.cjs
CHANGED
@@ -6,7 +6,7 @@ const content = require("./harmony118.cjs");
|
|
6
6
|
const types = require("./harmony2.cjs");
|
7
7
|
const clsx = require("./harmony63.cjs");
|
8
8
|
const TaskLanguageCompleted = require("./harmony127.cjs");
|
9
|
-
const TasksContext = require("./
|
9
|
+
const TasksContext = require("./harmony100.cjs");
|
10
10
|
const TaskLanguage_module = require("./harmony128.cjs");
|
11
11
|
const TaskLanguage = ({ language, task }) => {
|
12
12
|
const { getProjectUrl, langNameOnClick, langProgressOnClick } = TasksContext.useTasks();
|
package/dist/harmony117.mjs
CHANGED
@@ -4,7 +4,7 @@ import { isLanguageProgressCompleted, getStatusText } from "./harmony118.mjs";
|
|
4
4
|
import { SidebarTaskLanguageStatuses } from "./harmony2.mjs";
|
5
5
|
import { clsx } from "./harmony63.mjs";
|
6
6
|
import { TaskLanguageCompleted } from "./harmony127.mjs";
|
7
|
-
import { useTasks } from "./
|
7
|
+
import { useTasks } from "./harmony100.mjs";
|
8
8
|
import styles from "./harmony128.mjs";
|
9
9
|
const TaskLanguage = ({ language, task }) => {
|
10
10
|
const { getProjectUrl, langNameOnClick, langProgressOnClick } = useTasks();
|