@lokalise/harmony 1.27.0 → 1.27.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.
Files changed (189) hide show
  1. package/dist/harmony10.cjs +5 -2
  2. package/dist/harmony10.cjs.map +1 -1
  3. package/dist/harmony10.mjs +5 -2
  4. package/dist/harmony10.mjs.map +1 -1
  5. package/dist/harmony100.cjs +60 -18
  6. package/dist/harmony100.cjs.map +1 -1
  7. package/dist/harmony100.mjs +60 -18
  8. package/dist/harmony100.mjs.map +1 -1
  9. package/dist/harmony101.cjs +6 -13
  10. package/dist/harmony101.cjs.map +1 -1
  11. package/dist/harmony101.mjs +6 -13
  12. package/dist/harmony101.mjs.map +1 -1
  13. package/dist/harmony103.cjs +1 -1
  14. package/dist/harmony103.mjs +1 -1
  15. package/dist/harmony104.cjs +1 -1
  16. package/dist/harmony104.mjs +1 -1
  17. package/dist/harmony106.cjs +1 -1
  18. package/dist/harmony106.mjs +1 -1
  19. package/dist/harmony114.cjs +3 -3
  20. package/dist/harmony114.mjs +3 -3
  21. package/dist/harmony117.cjs +1 -1
  22. package/dist/harmony117.mjs +1 -1
  23. package/dist/harmony118.cjs +1 -1
  24. package/dist/harmony118.mjs +1 -1
  25. package/dist/harmony119.cjs +2 -2
  26. package/dist/harmony119.mjs +2 -2
  27. package/dist/harmony120.cjs +46 -11
  28. package/dist/harmony120.cjs.map +1 -1
  29. package/dist/harmony120.mjs +46 -11
  30. package/dist/harmony120.mjs.map +1 -1
  31. package/dist/harmony121.cjs +13 -17
  32. package/dist/harmony121.cjs.map +1 -1
  33. package/dist/harmony121.mjs +12 -16
  34. package/dist/harmony121.mjs.map +1 -1
  35. package/dist/harmony122.cjs +10 -20
  36. package/dist/harmony122.cjs.map +1 -1
  37. package/dist/harmony122.mjs +10 -20
  38. package/dist/harmony122.mjs.map +1 -1
  39. package/dist/harmony123.cjs +14 -10
  40. package/dist/harmony123.cjs.map +1 -1
  41. package/dist/harmony123.mjs +14 -10
  42. package/dist/harmony123.mjs.map +1 -1
  43. package/dist/harmony124.cjs +20 -5
  44. package/dist/harmony124.cjs.map +1 -1
  45. package/dist/harmony124.mjs +20 -5
  46. package/dist/harmony124.mjs.map +1 -1
  47. package/dist/harmony125.cjs +11 -11
  48. package/dist/harmony125.cjs.map +1 -1
  49. package/dist/harmony125.mjs +11 -11
  50. package/dist/harmony125.mjs.map +1 -1
  51. package/dist/harmony126.cjs +5 -31
  52. package/dist/harmony126.cjs.map +1 -1
  53. package/dist/harmony126.mjs +5 -31
  54. package/dist/harmony126.mjs.map +1 -1
  55. package/dist/harmony127.cjs +11 -13
  56. package/dist/harmony127.cjs.map +1 -1
  57. package/dist/harmony127.mjs +11 -13
  58. package/dist/harmony127.mjs.map +1 -1
  59. package/dist/harmony128.cjs +31 -45
  60. package/dist/harmony128.cjs.map +1 -1
  61. package/dist/harmony128.mjs +31 -45
  62. package/dist/harmony128.mjs.map +1 -1
  63. package/dist/harmony129.cjs +15 -13
  64. package/dist/harmony129.cjs.map +1 -1
  65. package/dist/harmony129.mjs +14 -12
  66. package/dist/harmony129.mjs.map +1 -1
  67. package/dist/harmony15.cjs +1 -1
  68. package/dist/harmony15.mjs +1 -1
  69. package/dist/harmony22.cjs +1 -1
  70. package/dist/harmony22.mjs +1 -1
  71. package/dist/harmony23.cjs +1 -1
  72. package/dist/harmony23.mjs +1 -1
  73. package/dist/harmony30.cjs +1 -1
  74. package/dist/harmony30.mjs +1 -1
  75. package/dist/harmony62.cjs +1 -1
  76. package/dist/harmony62.mjs +1 -1
  77. package/dist/harmony64.cjs +1 -1
  78. package/dist/harmony64.mjs +1 -1
  79. package/dist/harmony65.cjs +1 -1
  80. package/dist/harmony65.mjs +1 -1
  81. package/dist/harmony66.cjs +1 -1
  82. package/dist/harmony66.mjs +1 -1
  83. package/dist/harmony67.cjs +2 -2
  84. package/dist/harmony67.mjs +2 -2
  85. package/dist/harmony68.cjs +2 -2
  86. package/dist/harmony68.mjs +2 -2
  87. package/dist/harmony69.cjs +2 -2
  88. package/dist/harmony69.mjs +2 -2
  89. package/dist/harmony70.cjs +2 -2
  90. package/dist/harmony70.mjs +2 -2
  91. package/dist/harmony71.cjs +3 -3
  92. package/dist/harmony71.mjs +3 -3
  93. package/dist/harmony72.cjs +6 -6
  94. package/dist/harmony72.mjs +6 -6
  95. package/dist/harmony75.cjs +2 -2
  96. package/dist/harmony75.mjs +2 -2
  97. package/dist/harmony77.cjs +12 -7
  98. package/dist/harmony77.cjs.map +1 -1
  99. package/dist/harmony77.mjs +11 -6
  100. package/dist/harmony77.mjs.map +1 -1
  101. package/dist/harmony78.cjs +20 -8
  102. package/dist/harmony78.cjs.map +1 -1
  103. package/dist/harmony78.mjs +20 -8
  104. package/dist/harmony78.mjs.map +1 -1
  105. package/dist/harmony79.cjs +3 -6
  106. package/dist/harmony79.cjs.map +1 -1
  107. package/dist/harmony79.mjs +3 -6
  108. package/dist/harmony79.mjs.map +1 -1
  109. package/dist/harmony80.cjs +9 -57
  110. package/dist/harmony80.cjs.map +1 -1
  111. package/dist/harmony80.mjs +8 -56
  112. package/dist/harmony80.mjs.map +1 -1
  113. package/dist/harmony81.cjs +9 -32
  114. package/dist/harmony81.cjs.map +1 -1
  115. package/dist/harmony81.mjs +8 -31
  116. package/dist/harmony81.mjs.map +1 -1
  117. package/dist/harmony82.cjs +57 -5
  118. package/dist/harmony82.cjs.map +1 -1
  119. package/dist/harmony82.mjs +57 -5
  120. package/dist/harmony82.mjs.map +1 -1
  121. package/dist/harmony83.cjs +32 -9
  122. package/dist/harmony83.cjs.map +1 -1
  123. package/dist/harmony83.mjs +31 -8
  124. package/dist/harmony83.mjs.map +1 -1
  125. package/dist/harmony84.cjs +6 -25
  126. package/dist/harmony84.cjs.map +1 -1
  127. package/dist/harmony84.mjs +5 -24
  128. package/dist/harmony84.mjs.map +1 -1
  129. package/dist/harmony85.cjs +6 -3
  130. package/dist/harmony85.cjs.map +1 -1
  131. package/dist/harmony85.mjs +6 -3
  132. package/dist/harmony85.mjs.map +1 -1
  133. package/dist/harmony86.cjs +24 -21
  134. package/dist/harmony86.cjs.map +1 -1
  135. package/dist/harmony86.mjs +23 -20
  136. package/dist/harmony86.mjs.map +1 -1
  137. package/dist/harmony87.cjs +3 -9
  138. package/dist/harmony87.cjs.map +1 -1
  139. package/dist/harmony87.mjs +3 -9
  140. package/dist/harmony87.mjs.map +1 -1
  141. package/dist/harmony88.cjs +19 -9
  142. package/dist/harmony88.cjs.map +1 -1
  143. package/dist/harmony88.mjs +21 -11
  144. package/dist/harmony88.mjs.map +1 -1
  145. package/dist/harmony89.cjs +11 -20
  146. package/dist/harmony89.cjs.map +1 -1
  147. package/dist/harmony89.mjs +11 -20
  148. package/dist/harmony89.mjs.map +1 -1
  149. package/dist/harmony90.cjs +18 -99
  150. package/dist/harmony90.cjs.map +1 -1
  151. package/dist/harmony90.mjs +18 -82
  152. package/dist/harmony90.mjs.map +1 -1
  153. package/dist/harmony91.cjs +14 -16
  154. package/dist/harmony91.cjs.map +1 -1
  155. package/dist/harmony91.mjs +14 -16
  156. package/dist/harmony91.mjs.map +1 -1
  157. package/dist/harmony92.cjs +17 -22
  158. package/dist/harmony92.cjs.map +1 -1
  159. package/dist/harmony92.mjs +16 -21
  160. package/dist/harmony92.mjs.map +1 -1
  161. package/dist/harmony93.cjs +21 -5
  162. package/dist/harmony93.cjs.map +1 -1
  163. package/dist/harmony93.mjs +20 -4
  164. package/dist/harmony93.mjs.map +1 -1
  165. package/dist/harmony94.cjs +4 -131
  166. package/dist/harmony94.cjs.map +1 -1
  167. package/dist/harmony94.mjs +4 -131
  168. package/dist/harmony94.mjs.map +1 -1
  169. package/dist/harmony95.cjs +99 -12
  170. package/dist/harmony95.cjs.map +1 -1
  171. package/dist/harmony95.mjs +81 -11
  172. package/dist/harmony95.mjs.map +1 -1
  173. package/dist/harmony96.cjs +132 -5
  174. package/dist/harmony96.cjs.map +1 -1
  175. package/dist/harmony96.mjs +132 -5
  176. package/dist/harmony96.mjs.map +1 -1
  177. package/dist/harmony97.cjs +12 -40
  178. package/dist/harmony97.cjs.map +1 -1
  179. package/dist/harmony97.mjs +11 -39
  180. package/dist/harmony97.mjs.map +1 -1
  181. package/dist/harmony98.cjs +4 -59
  182. package/dist/harmony98.cjs.map +1 -1
  183. package/dist/harmony98.mjs +5 -60
  184. package/dist/harmony98.mjs.map +1 -1
  185. package/dist/harmony99.cjs +39 -6
  186. package/dist/harmony99.cjs.map +1 -1
  187. package/dist/harmony99.mjs +39 -6
  188. package/dist/harmony99.mjs.map +1 -1
  189. package/package.json +2 -2
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const dateFns = require("date-fns");
4
- const dateFnsTz = require("date-fns-tz");
4
+ const tz = require("@date-fns/tz");
5
5
  const formatDate = (date, format = "PP") => dateFns.format(date, format);
6
- const formatDateTz = (date, timezone, format = "PP") => dateFns.format(dateFnsTz.toZonedTime(date, timezone), format);
6
+ const formatDateTz = (date, timezone, format = "PP") => {
7
+ const tzDate = new tz.TZDate(date, timezone);
8
+ return dateFns.format(tzDate, format);
9
+ };
7
10
  exports.formatDate = formatDate;
8
11
  exports.formatDateTz = formatDateTz;
9
12
  //# sourceMappingURL=harmony10.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony10.cjs","sources":["../src/utils/i18n/date/date.ts"],"sourcesContent":["import { format as dateFnsFormat } from 'date-fns'\nimport { toZonedTime } from 'date-fns-tz'\n\nexport type DateFormat =\n\t| 'PP'\n\t| 'PP H:mm:ss'\n\t| 'PPpp'\n\t| 'LLLL y'\n\t| 'LLLL do'\n\t| 'dd-MM-yyyy'\n\t| 'MMM dd, yyyy HH:mm'\n\t| 'yyyy-MM-dd'\n\t| 'yyyy-MM-dd H:mm:ss'\n\nexport const formatDate = (date: Date, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(date, format)\n\nexport const formatDateTz = (date: Date, timezone: string, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(toZonedTime(date, timezone), format)\n"],"names":["dateFnsFormat","toZonedTime"],"mappings":";;;;AAcO,MAAM,aAAa,CAAC,MAAY,SAAqB,SAC3DA,QAAAA,OAAc,MAAM,MAAM;AAEd,MAAA,eAAe,CAAC,MAAY,UAAkB,SAAqB,SAC/EA,QAAA,OAAcC,sBAAY,MAAM,QAAQ,GAAG,MAAM;;;"}
1
+ {"version":3,"file":"harmony10.cjs","sources":["../src/utils/i18n/date/date.ts"],"sourcesContent":["import { format as dateFnsFormat } from 'date-fns'\nexport type DateFormat =\n\t| 'PP'\n\t| 'PP H:mm:ss'\n\t| 'PPpp'\n\t| 'LLLL y'\n\t| 'LLLL do'\n\t| 'dd-MM-yyyy'\n\t| 'MMM dd, yyyy HH:mm'\n\t| 'yyyy-MM-dd'\n\t| 'yyyy-MM-dd H:mm:ss'\n\nexport const formatDate = (date: Date, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(date, format)\n\nimport { TZDate } from '@date-fns/tz'\n\nexport const formatDateTz = (date: Date, timezone: string, format: DateFormat = 'PP'): string => {\n\tconst tzDate = new TZDate(date, timezone)\n\treturn dateFnsFormat(tzDate, format)\n}\n"],"names":["dateFnsFormat","TZDate"],"mappings":";;;;AAYO,MAAM,aAAa,CAAC,MAAY,SAAqB,SAC3DA,QAAAA,OAAc,MAAM,MAAM;AAIpB,MAAM,eAAe,CAAC,MAAY,UAAkB,SAAqB,SAAiB;AAChG,QAAM,SAAS,IAAIC,UAAO,MAAM,QAAQ;AACjC,SAAAD,QAAA,OAAc,QAAQ,MAAM;AACpC;;;"}
@@ -1,7 +1,10 @@
1
1
  import { format } from "date-fns";
2
- import { toZonedTime } from "date-fns-tz";
2
+ import { TZDate } from "@date-fns/tz";
3
3
  const formatDate = (date, format$1 = "PP") => format(date, format$1);
4
- const formatDateTz = (date, timezone, format$1 = "PP") => format(toZonedTime(date, timezone), format$1);
4
+ const formatDateTz = (date, timezone, format$1 = "PP") => {
5
+ const tzDate = new TZDate(date, timezone);
6
+ return format(tzDate, format$1);
7
+ };
5
8
  export {
6
9
  formatDate,
7
10
  formatDateTz
@@ -1 +1 @@
1
- {"version":3,"file":"harmony10.mjs","sources":["../src/utils/i18n/date/date.ts"],"sourcesContent":["import { format as dateFnsFormat } from 'date-fns'\nimport { toZonedTime } from 'date-fns-tz'\n\nexport type DateFormat =\n\t| 'PP'\n\t| 'PP H:mm:ss'\n\t| 'PPpp'\n\t| 'LLLL y'\n\t| 'LLLL do'\n\t| 'dd-MM-yyyy'\n\t| 'MMM dd, yyyy HH:mm'\n\t| 'yyyy-MM-dd'\n\t| 'yyyy-MM-dd H:mm:ss'\n\nexport const formatDate = (date: Date, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(date, format)\n\nexport const formatDateTz = (date: Date, timezone: string, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(toZonedTime(date, timezone), format)\n"],"names":["format","dateFnsFormat"],"mappings":";;AAcO,MAAM,aAAa,CAAC,MAAYA,WAAqB,SAC3DC,OAAc,MAAMD,QAAM;AAEd,MAAA,eAAe,CAAC,MAAY,UAAkBA,WAAqB,SAC/EC,OAAc,YAAY,MAAM,QAAQ,GAAGD,QAAM;"}
1
+ {"version":3,"file":"harmony10.mjs","sources":["../src/utils/i18n/date/date.ts"],"sourcesContent":["import { format as dateFnsFormat } from 'date-fns'\nexport type DateFormat =\n\t| 'PP'\n\t| 'PP H:mm:ss'\n\t| 'PPpp'\n\t| 'LLLL y'\n\t| 'LLLL do'\n\t| 'dd-MM-yyyy'\n\t| 'MMM dd, yyyy HH:mm'\n\t| 'yyyy-MM-dd'\n\t| 'yyyy-MM-dd H:mm:ss'\n\nexport const formatDate = (date: Date, format: DateFormat = 'PP'): string =>\n\tdateFnsFormat(date, format)\n\nimport { TZDate } from '@date-fns/tz'\n\nexport const formatDateTz = (date: Date, timezone: string, format: DateFormat = 'PP'): string => {\n\tconst tzDate = new TZDate(date, timezone)\n\treturn dateFnsFormat(tzDate, format)\n}\n"],"names":["format","dateFnsFormat"],"mappings":";;AAYO,MAAM,aAAa,CAAC,MAAYA,WAAqB,SAC3DC,OAAc,MAAMD,QAAM;AAIpB,MAAM,eAAe,CAAC,MAAY,UAAkBA,WAAqB,SAAiB;AAChG,QAAM,SAAS,IAAI,OAAO,MAAM,QAAQ;AACjC,SAAAC,OAAc,QAAQD,QAAM;AACpC;"}
@@ -1,21 +1,63 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const zod = require("zod");
4
- const teamRoleTypes = require("./harmony56.cjs");
5
- const JWT_TOKEN_PAYLOAD_SCHEMA = zod.z.object({
6
- userId: zod.z.number(),
7
- userUuid: zod.z.string().uuid(),
8
- teamId: zod.z.number(),
9
- teamUuid: zod.z.string().uuid(),
10
- userTeamRole: teamRoleTypes.TEAM_ROLE_SCHEMA,
11
- userEmail: zod.z.string().email(),
12
- userName: zod.z.string(),
13
- userCurrentTeamId: zod.z.number(),
14
- planId: zod.z.number(),
15
- planName: zod.z.string(),
16
- isProviderAlpha: zod.z.boolean(),
17
- isFullyAuthenticated: zod.z.boolean(),
18
- exp: zod.z.number()
19
- });
20
- exports.JWT_TOKEN_PAYLOAD_SCHEMA = JWT_TOKEN_PAYLOAD_SCHEMA;
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const useEffectOnce = require("./harmony11.cjs");
5
+ const React = require("react");
6
+ const TasksContext = require("./harmony98.cjs");
7
+ const taskEvents = require("./harmony101.cjs");
8
+ const TasksProvider = ({ children, config }) => {
9
+ const [tasks, setTasks] = React.useState([]);
10
+ const [loadingTasks, setLoadingTasks] = React.useState(true);
11
+ const [tasksCount, setTaskCount] = React.useState(0);
12
+ const {
13
+ getProjectUrl,
14
+ onLanguageCompleteConfirm,
15
+ onTasksWidgetOpen,
16
+ langNameOnClick,
17
+ langProgressOnClick,
18
+ taskTitleOnClick
19
+ } = config;
20
+ const { getTasks, getTasksCount } = config;
21
+ const fetchTasks = async () => {
22
+ setLoadingTasks(true);
23
+ const result = await getTasks();
24
+ setTasks(result);
25
+ setLoadingTasks(false);
26
+ return result;
27
+ };
28
+ const fetchTaskCount = async () => {
29
+ const result = await getTasksCount();
30
+ setTaskCount(result);
31
+ };
32
+ useEffectOnce.useEffectOnce(() => {
33
+ fetchTaskCount();
34
+ document.addEventListener(taskEvents.TaskEvents.TaskCompleted, fetchTaskCount);
35
+ document.addEventListener(taskEvents.TaskEvents.TaskClosed, fetchTaskCount);
36
+ document.addEventListener(taskEvents.TaskEvents.Refresh, fetchTaskCount);
37
+ return () => {
38
+ document.removeEventListener(taskEvents.TaskEvents.TaskCompleted, fetchTaskCount);
39
+ document.removeEventListener(taskEvents.TaskEvents.TaskClosed, fetchTaskCount);
40
+ document.removeEventListener(taskEvents.TaskEvents.Refresh, fetchTaskCount);
41
+ };
42
+ });
43
+ const providerValue = {
44
+ fetchTasks,
45
+ tasks,
46
+ tasksCount,
47
+ loadingTasks,
48
+ getProjectUrl,
49
+ onLanguageCompleteConfirm,
50
+ onTasksWidgetOpen,
51
+ langNameOnClick,
52
+ langProgressOnClick,
53
+ taskTitleOnClick
54
+ };
55
+ return /* @__PURE__ */ jsxRuntime.jsx(TasksContext.TasksContext.Provider, { value: providerValue, children });
56
+ };
57
+ const withTasksContext = (WrappedComponent) => function withTasksContextFn(props) {
58
+ const { config, ...rest } = props;
59
+ return /* @__PURE__ */ jsxRuntime.jsx(TasksProvider, { config, children: /* @__PURE__ */ jsxRuntime.jsx(WrappedComponent, { ...rest }) });
60
+ };
61
+ exports.TasksProvider = TasksProvider;
62
+ exports.withTasksContext = withTasksContext;
21
63
  //# sourceMappingURL=harmony100.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony100.cjs","sources":["../src/features/auth/core/types/jwtTokenPayload.ts"],"sourcesContent":["import { z } from 'zod'\nimport { TEAM_ROLE_SCHEMA } from '../../../publicApi/types/teamRoleTypes'\n\nexport const JWT_TOKEN_PAYLOAD_SCHEMA = z.object({\n\tuserId: z.number(),\n\tuserUuid: z.string().uuid(),\n\tteamId: z.number(),\n\tteamUuid: z.string().uuid(),\n\tuserTeamRole: TEAM_ROLE_SCHEMA,\n\tuserEmail: z.string().email(),\n\tuserName: z.string(),\n\tuserCurrentTeamId: z.number(),\n\tplanId: z.number(),\n\tplanName: z.string(),\n\tisProviderAlpha: z.boolean(),\n\tisFullyAuthenticated: z.boolean(),\n\texp: z.number(),\n})\nexport type JwtTokenPayload = z.infer<typeof JWT_TOKEN_PAYLOAD_SCHEMA>\n"],"names":["z","TEAM_ROLE_SCHEMA"],"mappings":";;;;AAGa,MAAA,2BAA2BA,MAAE,OAAO;AAAA,EAChD,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,IAAA,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,IAAA,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,cAAcC,cAAA;AAAA,EACd,WAAWD,IAAA,EAAE,OAAO,EAAE,MAAM;AAAA,EAC5B,UAAUA,MAAE,OAAO;AAAA,EACnB,mBAAmBA,MAAE,OAAO;AAAA,EAC5B,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,MAAE,OAAO;AAAA,EACnB,iBAAiBA,MAAE,QAAQ;AAAA,EAC3B,sBAAsBA,MAAE,QAAQ;AAAA,EAChC,KAAKA,MAAE,OAAO;AACf,CAAC;;"}
1
+ {"version":3,"file":"harmony100.cjs","sources":["../src/components/Sidebar/Widgets/Tasks/TasksProvider.tsx"],"sourcesContent":["import { useEffectOnce } from '@utils'\nimport { type FC, type PropsWithChildren, useState } from 'react'\nimport { TasksContext } from './TasksContext'\nimport type { SidebarTask, SidebarTasksConfig, SidebarTasksContextProps } from './types'\nimport { TaskEvents } from './utils/taskEvents'\n\ntype TasksProviderProps = PropsWithChildren<{\n\tconfig: SidebarTasksConfig\n}>\n\nexport const TasksProvider = ({ children, config }: TasksProviderProps) => {\n\tconst [tasks, setTasks] = useState<SidebarTask[]>([])\n\tconst [loadingTasks, setLoadingTasks] = useState(true)\n\n\tconst [tasksCount, setTaskCount] = useState(0)\n\n\tconst {\n\t\tgetProjectUrl,\n\t\tonLanguageCompleteConfirm,\n\t\tonTasksWidgetOpen,\n\t\tlangNameOnClick,\n\t\tlangProgressOnClick,\n\t\ttaskTitleOnClick,\n\t} = config\n\n\tconst { getTasks, getTasksCount } = config\n\n\tconst fetchTasks = async () => {\n\t\tsetLoadingTasks(true)\n\t\tconst result = await getTasks()\n\t\tsetTasks(result)\n\t\tsetLoadingTasks(false)\n\t\treturn result\n\t}\n\n\tconst fetchTaskCount = async () => {\n\t\tconst result = await getTasksCount()\n\t\tsetTaskCount(result)\n\t}\n\n\tuseEffectOnce(() => {\n\t\tfetchTaskCount()\n\n\t\tdocument.addEventListener(TaskEvents.TaskCompleted, fetchTaskCount)\n\t\tdocument.addEventListener(TaskEvents.TaskClosed, fetchTaskCount)\n\t\tdocument.addEventListener(TaskEvents.Refresh, fetchTaskCount)\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(TaskEvents.TaskCompleted, fetchTaskCount)\n\t\t\tdocument.removeEventListener(TaskEvents.TaskClosed, fetchTaskCount)\n\t\t\tdocument.removeEventListener(TaskEvents.Refresh, fetchTaskCount)\n\t\t}\n\t})\n\n\tconst providerValue: SidebarTasksContextProps = {\n\t\tfetchTasks,\n\t\ttasks,\n\t\ttasksCount,\n\t\tloadingTasks,\n\t\tgetProjectUrl,\n\t\tonLanguageCompleteConfirm,\n\t\tonTasksWidgetOpen,\n\t\tlangNameOnClick,\n\t\tlangProgressOnClick,\n\t\ttaskTitleOnClick,\n\t}\n\n\treturn <TasksContext.Provider value={providerValue}>{children}</TasksContext.Provider>\n}\n\nexport const withTasksContext = <P extends { config: SidebarTasksConfig }>(\n\tWrappedComponent: FC<Omit<P, 'config'>>,\n) =>\n\tfunction withTasksContextFn(props: P) {\n\t\tconst { config, ...rest } = props\n\n\t\treturn (\n\t\t\t<TasksProvider config={config}>\n\t\t\t\t<WrappedComponent {...rest} />\n\t\t\t</TasksProvider>\n\t\t)\n\t}\n"],"names":["useState","useEffectOnce","TaskEvents","TasksContext"],"mappings":";;;;;;;AAUO,MAAM,gBAAgB,CAAC,EAAE,UAAU,aAAiC;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAIA,MAAAA,SAAwB,CAAA,CAAE;AACpD,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA,SAAS,IAAI;AAErD,QAAM,CAAC,YAAY,YAAY,IAAIA,MAAAA,SAAS,CAAC;AAEvC,QAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACG;AAEE,QAAA,EAAE,UAAU,cAAA,IAAkB;AAEpC,QAAM,aAAa,YAAY;AAC9B,oBAAgB,IAAI;AACd,UAAA,SAAS,MAAM,SAAS;AAC9B,aAAS,MAAM;AACf,oBAAgB,KAAK;AACd,WAAA;AAAA,EACR;AAEA,QAAM,iBAAiB,YAAY;AAC5B,UAAA,SAAS,MAAM,cAAc;AACnC,iBAAa,MAAM;AAAA,EACpB;AAEAC,gBAAAA,cAAc,MAAM;AACJ,mBAAA;AAEN,aAAA,iBAAiBC,sBAAW,eAAe,cAAc;AACzD,aAAA,iBAAiBA,sBAAW,YAAY,cAAc;AACtD,aAAA,iBAAiBA,sBAAW,SAAS,cAAc;AAE5D,WAAO,MAAM;AACH,eAAA,oBAAoBA,sBAAW,eAAe,cAAc;AAC5D,eAAA,oBAAoBA,sBAAW,YAAY,cAAc;AACzD,eAAA,oBAAoBA,sBAAW,SAAS,cAAc;AAAA,IAChE;AAAA,EAAA,CACA;AAED,QAAM,gBAA0C;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,wCAAQC,aAAAA,aAAa,UAAb,EAAsB,OAAO,eAAgB,UAAS;AAC/D;AAEO,MAAM,mBAAmB,CAC/B,qBAEA,SAAS,mBAAmB,OAAU;AACrC,QAAM,EAAE,QAAQ,GAAG,KAAA,IAAS;AAE5B,wCACE,eAAc,EAAA,QACd,yCAAC,kBAAkB,EAAA,GAAG,KAAM,CAAA,GAC7B;AAEF;;;"}
@@ -1,21 +1,63 @@
1
- import { z } from "zod";
2
- import { TEAM_ROLE_SCHEMA } from "./harmony56.mjs";
3
- const JWT_TOKEN_PAYLOAD_SCHEMA = z.object({
4
- userId: z.number(),
5
- userUuid: z.string().uuid(),
6
- teamId: z.number(),
7
- teamUuid: z.string().uuid(),
8
- userTeamRole: TEAM_ROLE_SCHEMA,
9
- userEmail: z.string().email(),
10
- userName: z.string(),
11
- userCurrentTeamId: z.number(),
12
- planId: z.number(),
13
- planName: z.string(),
14
- isProviderAlpha: z.boolean(),
15
- isFullyAuthenticated: z.boolean(),
16
- exp: z.number()
17
- });
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useEffectOnce } from "./harmony11.mjs";
3
+ import { useState } from "react";
4
+ import { TasksContext } from "./harmony98.mjs";
5
+ import { TaskEvents } from "./harmony101.mjs";
6
+ const TasksProvider = ({ children, config }) => {
7
+ const [tasks, setTasks] = useState([]);
8
+ const [loadingTasks, setLoadingTasks] = useState(true);
9
+ const [tasksCount, setTaskCount] = useState(0);
10
+ const {
11
+ getProjectUrl,
12
+ onLanguageCompleteConfirm,
13
+ onTasksWidgetOpen,
14
+ langNameOnClick,
15
+ langProgressOnClick,
16
+ taskTitleOnClick
17
+ } = config;
18
+ const { getTasks, getTasksCount } = config;
19
+ const fetchTasks = async () => {
20
+ setLoadingTasks(true);
21
+ const result = await getTasks();
22
+ setTasks(result);
23
+ setLoadingTasks(false);
24
+ return result;
25
+ };
26
+ const fetchTaskCount = async () => {
27
+ const result = await getTasksCount();
28
+ setTaskCount(result);
29
+ };
30
+ useEffectOnce(() => {
31
+ fetchTaskCount();
32
+ document.addEventListener(TaskEvents.TaskCompleted, fetchTaskCount);
33
+ document.addEventListener(TaskEvents.TaskClosed, fetchTaskCount);
34
+ document.addEventListener(TaskEvents.Refresh, fetchTaskCount);
35
+ return () => {
36
+ document.removeEventListener(TaskEvents.TaskCompleted, fetchTaskCount);
37
+ document.removeEventListener(TaskEvents.TaskClosed, fetchTaskCount);
38
+ document.removeEventListener(TaskEvents.Refresh, fetchTaskCount);
39
+ };
40
+ });
41
+ const providerValue = {
42
+ fetchTasks,
43
+ tasks,
44
+ tasksCount,
45
+ loadingTasks,
46
+ getProjectUrl,
47
+ onLanguageCompleteConfirm,
48
+ onTasksWidgetOpen,
49
+ langNameOnClick,
50
+ langProgressOnClick,
51
+ taskTitleOnClick
52
+ };
53
+ return /* @__PURE__ */ jsx(TasksContext.Provider, { value: providerValue, children });
54
+ };
55
+ const withTasksContext = (WrappedComponent) => function withTasksContextFn(props) {
56
+ const { config, ...rest } = props;
57
+ return /* @__PURE__ */ jsx(TasksProvider, { config, children: /* @__PURE__ */ jsx(WrappedComponent, { ...rest }) });
58
+ };
18
59
  export {
19
- JWT_TOKEN_PAYLOAD_SCHEMA
60
+ TasksProvider,
61
+ withTasksContext
20
62
  };
21
63
  //# sourceMappingURL=harmony100.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony100.mjs","sources":["../src/features/auth/core/types/jwtTokenPayload.ts"],"sourcesContent":["import { z } from 'zod'\nimport { TEAM_ROLE_SCHEMA } from '../../../publicApi/types/teamRoleTypes'\n\nexport const JWT_TOKEN_PAYLOAD_SCHEMA = z.object({\n\tuserId: z.number(),\n\tuserUuid: z.string().uuid(),\n\tteamId: z.number(),\n\tteamUuid: z.string().uuid(),\n\tuserTeamRole: TEAM_ROLE_SCHEMA,\n\tuserEmail: z.string().email(),\n\tuserName: z.string(),\n\tuserCurrentTeamId: z.number(),\n\tplanId: z.number(),\n\tplanName: z.string(),\n\tisProviderAlpha: z.boolean(),\n\tisFullyAuthenticated: z.boolean(),\n\texp: z.number(),\n})\nexport type JwtTokenPayload = z.infer<typeof JWT_TOKEN_PAYLOAD_SCHEMA>\n"],"names":[],"mappings":";;AAGa,MAAA,2BAA2B,EAAE,OAAO;AAAA,EAChD,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,cAAc;AAAA,EACd,WAAW,EAAE,OAAO,EAAE,MAAM;AAAA,EAC5B,UAAU,EAAE,OAAO;AAAA,EACnB,mBAAmB,EAAE,OAAO;AAAA,EAC5B,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,iBAAiB,EAAE,QAAQ;AAAA,EAC3B,sBAAsB,EAAE,QAAQ;AAAA,EAChC,KAAK,EAAE,OAAO;AACf,CAAC;"}
1
+ {"version":3,"file":"harmony100.mjs","sources":["../src/components/Sidebar/Widgets/Tasks/TasksProvider.tsx"],"sourcesContent":["import { useEffectOnce } from '@utils'\nimport { type FC, type PropsWithChildren, useState } from 'react'\nimport { TasksContext } from './TasksContext'\nimport type { SidebarTask, SidebarTasksConfig, SidebarTasksContextProps } from './types'\nimport { TaskEvents } from './utils/taskEvents'\n\ntype TasksProviderProps = PropsWithChildren<{\n\tconfig: SidebarTasksConfig\n}>\n\nexport const TasksProvider = ({ children, config }: TasksProviderProps) => {\n\tconst [tasks, setTasks] = useState<SidebarTask[]>([])\n\tconst [loadingTasks, setLoadingTasks] = useState(true)\n\n\tconst [tasksCount, setTaskCount] = useState(0)\n\n\tconst {\n\t\tgetProjectUrl,\n\t\tonLanguageCompleteConfirm,\n\t\tonTasksWidgetOpen,\n\t\tlangNameOnClick,\n\t\tlangProgressOnClick,\n\t\ttaskTitleOnClick,\n\t} = config\n\n\tconst { getTasks, getTasksCount } = config\n\n\tconst fetchTasks = async () => {\n\t\tsetLoadingTasks(true)\n\t\tconst result = await getTasks()\n\t\tsetTasks(result)\n\t\tsetLoadingTasks(false)\n\t\treturn result\n\t}\n\n\tconst fetchTaskCount = async () => {\n\t\tconst result = await getTasksCount()\n\t\tsetTaskCount(result)\n\t}\n\n\tuseEffectOnce(() => {\n\t\tfetchTaskCount()\n\n\t\tdocument.addEventListener(TaskEvents.TaskCompleted, fetchTaskCount)\n\t\tdocument.addEventListener(TaskEvents.TaskClosed, fetchTaskCount)\n\t\tdocument.addEventListener(TaskEvents.Refresh, fetchTaskCount)\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(TaskEvents.TaskCompleted, fetchTaskCount)\n\t\t\tdocument.removeEventListener(TaskEvents.TaskClosed, fetchTaskCount)\n\t\t\tdocument.removeEventListener(TaskEvents.Refresh, fetchTaskCount)\n\t\t}\n\t})\n\n\tconst providerValue: SidebarTasksContextProps = {\n\t\tfetchTasks,\n\t\ttasks,\n\t\ttasksCount,\n\t\tloadingTasks,\n\t\tgetProjectUrl,\n\t\tonLanguageCompleteConfirm,\n\t\tonTasksWidgetOpen,\n\t\tlangNameOnClick,\n\t\tlangProgressOnClick,\n\t\ttaskTitleOnClick,\n\t}\n\n\treturn <TasksContext.Provider value={providerValue}>{children}</TasksContext.Provider>\n}\n\nexport const withTasksContext = <P extends { config: SidebarTasksConfig }>(\n\tWrappedComponent: FC<Omit<P, 'config'>>,\n) =>\n\tfunction withTasksContextFn(props: P) {\n\t\tconst { config, ...rest } = props\n\n\t\treturn (\n\t\t\t<TasksProvider config={config}>\n\t\t\t\t<WrappedComponent {...rest} />\n\t\t\t</TasksProvider>\n\t\t)\n\t}\n"],"names":[],"mappings":";;;;;AAUO,MAAM,gBAAgB,CAAC,EAAE,UAAU,aAAiC;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,CAAA,CAAE;AACpD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AAErD,QAAM,CAAC,YAAY,YAAY,IAAI,SAAS,CAAC;AAEvC,QAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACG;AAEE,QAAA,EAAE,UAAU,cAAA,IAAkB;AAEpC,QAAM,aAAa,YAAY;AAC9B,oBAAgB,IAAI;AACd,UAAA,SAAS,MAAM,SAAS;AAC9B,aAAS,MAAM;AACf,oBAAgB,KAAK;AACd,WAAA;AAAA,EACR;AAEA,QAAM,iBAAiB,YAAY;AAC5B,UAAA,SAAS,MAAM,cAAc;AACnC,iBAAa,MAAM;AAAA,EACpB;AAEA,gBAAc,MAAM;AACJ,mBAAA;AAEN,aAAA,iBAAiB,WAAW,eAAe,cAAc;AACzD,aAAA,iBAAiB,WAAW,YAAY,cAAc;AACtD,aAAA,iBAAiB,WAAW,SAAS,cAAc;AAE5D,WAAO,MAAM;AACH,eAAA,oBAAoB,WAAW,eAAe,cAAc;AAC5D,eAAA,oBAAoB,WAAW,YAAY,cAAc;AACzD,eAAA,oBAAoB,WAAW,SAAS,cAAc;AAAA,IAChE;AAAA,EAAA,CACA;AAED,QAAM,gBAA0C;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,6BAAQ,aAAa,UAAb,EAAsB,OAAO,eAAgB,UAAS;AAC/D;AAEO,MAAM,mBAAmB,CAC/B,qBAEA,SAAS,mBAAmB,OAAU;AACrC,QAAM,EAAE,QAAQ,GAAG,KAAA,IAAS;AAE5B,6BACE,eAAc,EAAA,QACd,8BAAC,kBAAkB,EAAA,GAAG,KAAM,CAAA,GAC7B;AAEF;"}
@@ -1,17 +1,10 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
- const jwtTokenPayload = require("./harmony15.cjs");
7
- const _NewJwtIssuedEvent = class _NewJwtIssuedEvent extends CustomEvent {
8
- constructor(token) {
9
- super(_NewJwtIssuedEvent.eventName, {
10
- detail: { token, payload: jwtTokenPayload.parseJwtTokenPayload(token.accessToken) }
11
- });
12
- }
3
+ const TaskEvents = {
4
+ TaskCompleted: "task_completed",
5
+ TaskClosed: "task_closed",
6
+ Refresh: "refresh",
7
+ ShowDialog: "show_dialog"
13
8
  };
14
- __publicField(_NewJwtIssuedEvent, "eventName", "new-jwt-issued");
15
- let NewJwtIssuedEvent = _NewJwtIssuedEvent;
16
- exports.NewJwtIssuedEvent = NewJwtIssuedEvent;
9
+ exports.TaskEvents = TaskEvents;
17
10
  //# sourceMappingURL=harmony101.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony101.cjs","sources":["../src/features/auth/frontend/events/NewJwtIssuedEvent.ts"],"sourcesContent":["import type { JwtTokenPayload } from '@features/auth/core/types/jwtTokenPayload'\nimport { parseJwtTokenPayload } from '@features/auth/core/utils/jwtTokenPayload'\nimport type { JwtToken } from '@features/publicApi/types/userTokenTypes'\n\ntype NewJwtIssuedEventDetail = {\n\ttoken: JwtToken\n\tpayload: JwtTokenPayload | undefined\n}\n\n/**\n * This event is emitted when a new JWT token is issued or refreshed.\n */\nexport class NewJwtIssuedEvent extends CustomEvent<NewJwtIssuedEventDetail> {\n\tstatic readonly eventName = 'new-jwt-issued' as const\n\n\tconstructor(token: JwtToken) {\n\t\tsuper(NewJwtIssuedEvent.eventName, {\n\t\t\tdetail: { token, payload: parseJwtTokenPayload(token.accessToken) },\n\t\t})\n\t}\n}\n\nexport const isNewJwtIssuedEvent = (event: Event): event is NewJwtIssuedEvent =>\n\tevent.type === NewJwtIssuedEvent.eventName\n\ndeclare global {\n\tinterface WindowEventMap {\n\t\t[NewJwtIssuedEvent.eventName]: NewJwtIssuedEvent\n\t}\n}\n"],"names":["parseJwtTokenPayload"],"mappings":";;;;;;AAYO,MAAM,qBAAN,MAAM,2BAA0B,YAAqC;AAAA,EAG3E,YAAY,OAAiB;AAC5B,UAAM,mBAAkB,WAAW;AAAA,MAClC,QAAQ,EAAE,OAAO,SAASA,gBAAAA,qBAAqB,MAAM,WAAW,EAAE;AAAA,IAAA,CAClE;AAAA,EAAA;AAEH;AAPC,cADY,oBACI,aAAY;AADtB,IAAM,oBAAN;;"}
1
+ {"version":3,"file":"harmony101.cjs","sources":["../src/components/Sidebar/Widgets/Tasks/utils/taskEvents.ts"],"sourcesContent":["import type { TypesFromMap } from '@utils'\n\nexport const TaskEvents = {\n\tTaskCompleted: 'task_completed',\n\tTaskClosed: 'task_closed',\n\tRefresh: 'refresh',\n\tShowDialog: 'show_dialog',\n} as const\n\nexport type TaskEvent = TypesFromMap<typeof TaskEvents>\n\ntype SingleTaskPayload = {\n\ttaskId: string | number\n}\n\ntype DispatchTaskEventPayload =\n\t| {\n\t\t\tname: typeof TaskEvents.TaskCompleted\n\t\t\tdetail: SingleTaskPayload\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.TaskClosed\n\t\t\tdetail: SingleTaskPayload\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.Refresh\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.ShowDialog\n\t }\n\nexport const dispatchTaskEvent = (props: DispatchTaskEventPayload) => {\n\tconst { name } = props\n\tdocument.dispatchEvent(new CustomEvent(name, { detail: 'detail' in props ? props.detail : {} }))\n}\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa;AAAA,EACzB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AACb;;"}
@@ -1,17 +1,10 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { parseJwtTokenPayload } from "./harmony15.mjs";
5
- const _NewJwtIssuedEvent = class _NewJwtIssuedEvent extends CustomEvent {
6
- constructor(token) {
7
- super(_NewJwtIssuedEvent.eventName, {
8
- detail: { token, payload: parseJwtTokenPayload(token.accessToken) }
9
- });
10
- }
1
+ const TaskEvents = {
2
+ TaskCompleted: "task_completed",
3
+ TaskClosed: "task_closed",
4
+ Refresh: "refresh",
5
+ ShowDialog: "show_dialog"
11
6
  };
12
- __publicField(_NewJwtIssuedEvent, "eventName", "new-jwt-issued");
13
- let NewJwtIssuedEvent = _NewJwtIssuedEvent;
14
7
  export {
15
- NewJwtIssuedEvent
8
+ TaskEvents
16
9
  };
17
10
  //# sourceMappingURL=harmony101.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony101.mjs","sources":["../src/features/auth/frontend/events/NewJwtIssuedEvent.ts"],"sourcesContent":["import type { JwtTokenPayload } from '@features/auth/core/types/jwtTokenPayload'\nimport { parseJwtTokenPayload } from '@features/auth/core/utils/jwtTokenPayload'\nimport type { JwtToken } from '@features/publicApi/types/userTokenTypes'\n\ntype NewJwtIssuedEventDetail = {\n\ttoken: JwtToken\n\tpayload: JwtTokenPayload | undefined\n}\n\n/**\n * This event is emitted when a new JWT token is issued or refreshed.\n */\nexport class NewJwtIssuedEvent extends CustomEvent<NewJwtIssuedEventDetail> {\n\tstatic readonly eventName = 'new-jwt-issued' as const\n\n\tconstructor(token: JwtToken) {\n\t\tsuper(NewJwtIssuedEvent.eventName, {\n\t\t\tdetail: { token, payload: parseJwtTokenPayload(token.accessToken) },\n\t\t})\n\t}\n}\n\nexport const isNewJwtIssuedEvent = (event: Event): event is NewJwtIssuedEvent =>\n\tevent.type === NewJwtIssuedEvent.eventName\n\ndeclare global {\n\tinterface WindowEventMap {\n\t\t[NewJwtIssuedEvent.eventName]: NewJwtIssuedEvent\n\t}\n}\n"],"names":[],"mappings":";;;;AAYO,MAAM,qBAAN,MAAM,2BAA0B,YAAqC;AAAA,EAG3E,YAAY,OAAiB;AAC5B,UAAM,mBAAkB,WAAW;AAAA,MAClC,QAAQ,EAAE,OAAO,SAAS,qBAAqB,MAAM,WAAW,EAAE;AAAA,IAAA,CAClE;AAAA,EAAA;AAEH;AAPC,cADY,oBACI,aAAY;AADtB,IAAM,oBAAN;"}
1
+ {"version":3,"file":"harmony101.mjs","sources":["../src/components/Sidebar/Widgets/Tasks/utils/taskEvents.ts"],"sourcesContent":["import type { TypesFromMap } from '@utils'\n\nexport const TaskEvents = {\n\tTaskCompleted: 'task_completed',\n\tTaskClosed: 'task_closed',\n\tRefresh: 'refresh',\n\tShowDialog: 'show_dialog',\n} as const\n\nexport type TaskEvent = TypesFromMap<typeof TaskEvents>\n\ntype SingleTaskPayload = {\n\ttaskId: string | number\n}\n\ntype DispatchTaskEventPayload =\n\t| {\n\t\t\tname: typeof TaskEvents.TaskCompleted\n\t\t\tdetail: SingleTaskPayload\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.TaskClosed\n\t\t\tdetail: SingleTaskPayload\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.Refresh\n\t }\n\t| {\n\t\t\tname: typeof TaskEvents.ShowDialog\n\t }\n\nexport const dispatchTaskEvent = (props: DispatchTaskEventPayload) => {\n\tconst { name } = props\n\tdocument.dispatchEvent(new CustomEvent(name, { detail: 'detail' in props ? props.detail : {} }))\n}\n"],"names":[],"mappings":"AAEO,MAAM,aAAa;AAAA,EACzB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AACb;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const _commonjsHelpers = require("./harmony124.cjs");
3
+ const _commonjsHelpers = require("./harmony126.cjs");
4
4
  const debounce$1 = require("./harmony108.cjs");
5
5
  var debounceExports = debounce$1.__require();
6
6
  const debounce = /* @__PURE__ */ _commonjsHelpers.getDefaultExportFromCjs(debounceExports);
@@ -1,4 +1,4 @@
1
- import { getDefaultExportFromCjs } from "./harmony124.mjs";
1
+ import { getDefaultExportFromCjs } from "./harmony126.mjs";
2
2
  import { __require as requireDebounce } from "./harmony108.mjs";
3
3
  var debounceExports = requireDebounce();
4
4
  const debounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const _commonjsHelpers = require("./harmony124.cjs");
3
+ const _commonjsHelpers = require("./harmony126.cjs");
4
4
  const throttle$1 = require("./harmony112.cjs");
5
5
  var throttleExports = throttle$1.__require();
6
6
  const throttle = /* @__PURE__ */ _commonjsHelpers.getDefaultExportFromCjs(throttleExports);
@@ -1,4 +1,4 @@
1
- import { getDefaultExportFromCjs } from "./harmony124.mjs";
1
+ import { getDefaultExportFromCjs } from "./harmony126.mjs";
2
2
  import { __require as requireThrottle } from "./harmony112.mjs";
3
3
  var throttleExports = requireThrottle();
4
4
  const throttle = /* @__PURE__ */ getDefaultExportFromCjs(throttleExports);
@@ -8,7 +8,7 @@ const date = require("./harmony10.cjs");
8
8
  const dateFns = require("date-fns");
9
9
  const index = require("./harmony113.cjs");
10
10
  const TaskLanguage = require("./harmony114.cjs");
11
- const TasksContext = require("./harmony96.cjs");
11
+ const TasksContext = require("./harmony98.cjs");
12
12
  const content = require("./harmony115.cjs");
13
13
  const TaskOverview_module = require("./harmony116.cjs");
14
14
  const TaskOverview = ({ task }) => {
@@ -6,7 +6,7 @@ import { formatDate } from "./harmony10.mjs";
6
6
  import { parseISO } from "date-fns";
7
7
  import { splitFileName } from "./harmony113.mjs";
8
8
  import { TaskLanguage } from "./harmony114.mjs";
9
- import { useTasks } from "./harmony96.mjs";
9
+ import { useTasks } from "./harmony98.mjs";
10
10
  import { getTaskLanguages, tagColor } from "./harmony115.mjs";
11
11
  import styles from "./harmony116.mjs";
12
12
  const TaskOverview = ({ task }) => {
@@ -5,9 +5,9 @@ const louis = require("@lokalise/louis");
5
5
  const content = require("./harmony115.cjs");
6
6
  const types = require("./harmony2.cjs");
7
7
  const clsx = require("./harmony60.cjs");
8
- const TaskLanguageCompleted = require("./harmony128.cjs");
9
- const TasksContext = require("./harmony96.cjs");
10
- const TaskLanguage_module = require("./harmony129.cjs");
8
+ const TaskLanguageCompleted = require("./harmony120.cjs");
9
+ const TasksContext = require("./harmony98.cjs");
10
+ const TaskLanguage_module = require("./harmony121.cjs");
11
11
  const TaskLanguage = ({ language, task }) => {
12
12
  const { getProjectUrl, langNameOnClick, langProgressOnClick } = TasksContext.useTasks();
13
13
  const progressValue = language.progress ?? 0;
@@ -3,9 +3,9 @@ import { Tooltip, Link } from "@lokalise/louis";
3
3
  import { isLanguageProgressCompleted, getStatusText } from "./harmony115.mjs";
4
4
  import { SidebarTaskLanguageStatuses } from "./harmony2.mjs";
5
5
  import { clsx } from "./harmony60.mjs";
6
- import { TaskLanguageCompleted } from "./harmony128.mjs";
7
- import { useTasks } from "./harmony96.mjs";
8
- import styles from "./harmony129.mjs";
6
+ import { TaskLanguageCompleted } from "./harmony120.mjs";
7
+ import { useTasks } from "./harmony98.mjs";
8
+ import styles from "./harmony121.mjs";
9
9
  const TaskLanguage = ({ language, task }) => {
10
10
  const { getProjectUrl, langNameOnClick, langProgressOnClick } = useTasks();
11
11
  const progressValue = language.progress ?? 0;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _freeGlobal = require("./harmony120.cjs");
3
+ const _freeGlobal = require("./harmony122.cjs");
4
4
  var _root;
5
5
  var hasRequired_root;
6
6
  function require_root() {
@@ -1,4 +1,4 @@
1
- import { __require as require_freeGlobal } from "./harmony120.mjs";
1
+ import { __require as require_freeGlobal } from "./harmony122.mjs";
2
2
  var _root;
3
3
  var hasRequired_root;
4
4
  function require_root() {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _trimmedEndIndex = require("./harmony121.cjs");
3
+ const _trimmedEndIndex = require("./harmony123.cjs");
4
4
  var _baseTrim;
5
5
  var hasRequired_baseTrim;
6
6
  function require_baseTrim() {
@@ -1,4 +1,4 @@
1
- import { __require as require_trimmedEndIndex } from "./harmony121.mjs";
1
+ import { __require as require_trimmedEndIndex } from "./harmony123.mjs";
2
2
  var _baseTrim;
3
3
  var hasRequired_baseTrim;
4
4
  function require_baseTrim() {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _baseGetTag = require("./harmony122.cjs");
4
- const isObjectLike = require("./harmony123.cjs");
3
+ const _baseGetTag = require("./harmony124.cjs");
4
+ const isObjectLike = require("./harmony125.cjs");
5
5
  var isSymbol_1;
6
6
  var hasRequiredIsSymbol;
7
7
  function requireIsSymbol() {
@@ -1,5 +1,5 @@
1
- import { __require as require_baseGetTag } from "./harmony122.mjs";
2
- import { __require as requireIsObjectLike } from "./harmony123.mjs";
1
+ import { __require as require_baseGetTag } from "./harmony124.mjs";
2
+ import { __require as requireIsObjectLike } from "./harmony125.mjs";
3
3
  var isSymbol_1;
4
4
  var hasRequiredIsSymbol;
5
5
  function requireIsSymbol() {
@@ -1,14 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _commonjsHelpers = require("./harmony124.cjs");
4
- var _freeGlobal;
5
- var hasRequired_freeGlobal;
6
- function require_freeGlobal() {
7
- if (hasRequired_freeGlobal) return _freeGlobal;
8
- hasRequired_freeGlobal = 1;
9
- var freeGlobal = typeof _commonjsHelpers.commonjsGlobal == "object" && _commonjsHelpers.commonjsGlobal && _commonjsHelpers.commonjsGlobal.Object === Object && _commonjsHelpers.commonjsGlobal;
10
- _freeGlobal = freeGlobal;
11
- return _freeGlobal;
12
- }
13
- exports.__require = require_freeGlobal;
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const louis = require("@lokalise/louis");
5
+ const React = require("react");
6
+ const TasksContext = require("./harmony98.cjs");
7
+ const TaskLanguageCompleted = ({ task, language }) => {
8
+ const [loading, setLoading] = React.useState(false);
9
+ const [isMarkAsDonePromptShown, setIsMarkAsDonePromptShown] = React.useState(false);
10
+ const { onLanguageCompleteConfirm, fetchTasks } = TasksContext.useTasks();
11
+ const closePrompt = () => {
12
+ setIsMarkAsDonePromptShown(false);
13
+ };
14
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15
+ isMarkAsDonePromptShown && /* @__PURE__ */ jsxRuntime.jsx(
16
+ louis.ConfirmModal,
17
+ {
18
+ opened: true,
19
+ loading,
20
+ title: `Are you finished with ${language.name}?`,
21
+ confirmText: "Mark as done",
22
+ closeText: "Cancel",
23
+ onClose: closePrompt,
24
+ onConfirm: async () => {
25
+ setLoading(true);
26
+ await onLanguageCompleteConfirm({ task, language, closePrompt });
27
+ fetchTasks();
28
+ },
29
+ children: /* @__PURE__ */ jsxRuntime.jsxs(louis.Alert, { status: "info", children: [
30
+ "Make sure you are finished and ",
31
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "mark it as done" }),
32
+ " to notify your team admin. This action cannot be undone, and the language might no longer be available for you to edit."
33
+ ] })
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsxRuntime.jsx(
37
+ louis.Link,
38
+ {
39
+ disabled: loading,
40
+ onClick: () => {
41
+ setIsMarkAsDonePromptShown(true);
42
+ },
43
+ children: "Mark as done"
44
+ }
45
+ )
46
+ ] });
47
+ };
48
+ exports.TaskLanguageCompleted = TaskLanguageCompleted;
14
49
  //# sourceMappingURL=harmony120.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony120.cjs","sources":["../node_modules/lodash/_freeGlobal.js"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n"],"names":["global"],"mappings":";;;;;;;;AACA,MAAI,aAAa,OAAOA,iBAAAA,kBAAU,YAAYA,iBAAM,kBAAIA,gCAAO,WAAW,UAAUA,iBAAM;AAE1F,gBAAiB;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"harmony120.cjs","sources":["../src/components/Sidebar/Widgets/Tasks/TaskLanguageCompleted/TaskLanguageCompleted.tsx"],"sourcesContent":["import { Alert, ConfirmModal, Link } from '@lokalise/louis'\nimport { useState } from 'react'\nimport { useTasks } from '../TasksContext'\nimport type { SidebarTask, SidebarTaskLanguage } from '../types'\n\ntype TaskLanguageCompletedProps = {\n\ttask: SidebarTask\n\tlanguage: SidebarTaskLanguage\n}\n\nexport const TaskLanguageCompleted = ({ task, language }: TaskLanguageCompletedProps) => {\n\tconst [loading, setLoading] = useState(false)\n\n\tconst [isMarkAsDonePromptShown, setIsMarkAsDonePromptShown] = useState(false)\n\n\tconst { onLanguageCompleteConfirm, fetchTasks } = useTasks()\n\n\tconst closePrompt = () => {\n\t\tsetIsMarkAsDonePromptShown(false)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{isMarkAsDonePromptShown && (\n\t\t\t\t<ConfirmModal\n\t\t\t\t\topened\n\t\t\t\t\tloading={loading}\n\t\t\t\t\ttitle={`Are you finished with ${language.name}?`}\n\t\t\t\t\tconfirmText=\"Mark as done\"\n\t\t\t\t\tcloseText=\"Cancel\"\n\t\t\t\t\tonClose={closePrompt}\n\t\t\t\t\tonConfirm={async () => {\n\t\t\t\t\t\tsetLoading(true)\n\t\t\t\t\t\tawait onLanguageCompleteConfirm({ task, language, closePrompt })\n\t\t\t\t\t\tfetchTasks()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Alert status=\"info\">\n\t\t\t\t\t\tMake sure you are finished and <strong>mark it as done</strong> to notify your team\n\t\t\t\t\t\tadmin. This action cannot be undone, and the language might no longer be available for\n\t\t\t\t\t\tyou to edit.\n\t\t\t\t\t</Alert>\n\t\t\t\t</ConfirmModal>\n\t\t\t)}\n\t\t\t<Link\n\t\t\t\tdisabled={loading}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsetIsMarkAsDonePromptShown(true)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tMark as done\n\t\t\t</Link>\n\t\t</>\n\t)\n}\n"],"names":["useState","useTasks","jsxs","Fragment","jsx","ConfirmModal","Alert","Link"],"mappings":";;;;;;AAUO,MAAM,wBAAwB,CAAC,EAAE,MAAM,eAA2C;AACxF,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAS,KAAK;AAE5C,QAAM,CAAC,yBAAyB,0BAA0B,IAAIA,MAAAA,SAAS,KAAK;AAE5E,QAAM,EAAE,2BAA2B,WAAW,IAAIC,sBAAS;AAE3D,QAAM,cAAc,MAAM;AACzB,+BAA2B,KAAK;AAAA,EACjC;AAEA,SAEGC,2BAAA,KAAAC,qBAAA,EAAA,UAAA;AAAA,IACA,2BAAAC,2BAAA;AAAA,MAACC,MAAA;AAAA,MAAA;AAAA,QACA,QAAM;AAAA,QACN;AAAA,QACA,OAAO,yBAAyB,SAAS,IAAI;AAAA,QAC7C,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW,YAAY;AACtB,qBAAW,IAAI;AACf,gBAAM,0BAA0B,EAAE,MAAM,UAAU,aAAa;AACpD,qBAAA;AAAA,QACZ;AAAA,QAEA,UAAAH,2BAAA,KAACI,MAAM,OAAA,EAAA,QAAO,QAAO,UAAA;AAAA,UAAA;AAAA,UACWF,2BAAAA,IAAC,YAAO,UAAe,kBAAA,CAAA;AAAA,UAAS;AAAA,QAAA,EAGhE,CAAA;AAAA,MAAA;AAAA,IACD;AAAA,IAEDA,2BAAA;AAAA,MAACG,MAAA;AAAA,MAAA;AAAA,QACA,UAAU;AAAA,QACV,SAAS,MAAM;AACd,qCAA2B,IAAI;AAAA,QAChC;AAAA,QACA,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACD;AAEF;;"}
@@ -1,14 +1,49 @@
1
- import { commonjsGlobal } from "./harmony124.mjs";
2
- var _freeGlobal;
3
- var hasRequired_freeGlobal;
4
- function require_freeGlobal() {
5
- if (hasRequired_freeGlobal) return _freeGlobal;
6
- hasRequired_freeGlobal = 1;
7
- var freeGlobal = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
8
- _freeGlobal = freeGlobal;
9
- return _freeGlobal;
10
- }
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { ConfirmModal, Alert, Link } from "@lokalise/louis";
3
+ import { useState } from "react";
4
+ import { useTasks } from "./harmony98.mjs";
5
+ const TaskLanguageCompleted = ({ task, language }) => {
6
+ const [loading, setLoading] = useState(false);
7
+ const [isMarkAsDonePromptShown, setIsMarkAsDonePromptShown] = useState(false);
8
+ const { onLanguageCompleteConfirm, fetchTasks } = useTasks();
9
+ const closePrompt = () => {
10
+ setIsMarkAsDonePromptShown(false);
11
+ };
12
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
13
+ isMarkAsDonePromptShown && /* @__PURE__ */ jsx(
14
+ ConfirmModal,
15
+ {
16
+ opened: true,
17
+ loading,
18
+ title: `Are you finished with ${language.name}?`,
19
+ confirmText: "Mark as done",
20
+ closeText: "Cancel",
21
+ onClose: closePrompt,
22
+ onConfirm: async () => {
23
+ setLoading(true);
24
+ await onLanguageCompleteConfirm({ task, language, closePrompt });
25
+ fetchTasks();
26
+ },
27
+ children: /* @__PURE__ */ jsxs(Alert, { status: "info", children: [
28
+ "Make sure you are finished and ",
29
+ /* @__PURE__ */ jsx("strong", { children: "mark it as done" }),
30
+ " to notify your team admin. This action cannot be undone, and the language might no longer be available for you to edit."
31
+ ] })
32
+ }
33
+ ),
34
+ /* @__PURE__ */ jsx(
35
+ Link,
36
+ {
37
+ disabled: loading,
38
+ onClick: () => {
39
+ setIsMarkAsDonePromptShown(true);
40
+ },
41
+ children: "Mark as done"
42
+ }
43
+ )
44
+ ] });
45
+ };
11
46
  export {
12
- require_freeGlobal as __require
47
+ TaskLanguageCompleted
13
48
  };
14
49
  //# sourceMappingURL=harmony120.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony120.mjs","sources":["../node_modules/lodash/_freeGlobal.js"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n"],"names":["global"],"mappings":";;;;;;AACA,MAAI,aAAa,OAAOA,kBAAU,YAAYA,kBAAUA,eAAO,WAAW,UAAUA;AAEpF,gBAAiB;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"harmony120.mjs","sources":["../src/components/Sidebar/Widgets/Tasks/TaskLanguageCompleted/TaskLanguageCompleted.tsx"],"sourcesContent":["import { Alert, ConfirmModal, Link } from '@lokalise/louis'\nimport { useState } from 'react'\nimport { useTasks } from '../TasksContext'\nimport type { SidebarTask, SidebarTaskLanguage } from '../types'\n\ntype TaskLanguageCompletedProps = {\n\ttask: SidebarTask\n\tlanguage: SidebarTaskLanguage\n}\n\nexport const TaskLanguageCompleted = ({ task, language }: TaskLanguageCompletedProps) => {\n\tconst [loading, setLoading] = useState(false)\n\n\tconst [isMarkAsDonePromptShown, setIsMarkAsDonePromptShown] = useState(false)\n\n\tconst { onLanguageCompleteConfirm, fetchTasks } = useTasks()\n\n\tconst closePrompt = () => {\n\t\tsetIsMarkAsDonePromptShown(false)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{isMarkAsDonePromptShown && (\n\t\t\t\t<ConfirmModal\n\t\t\t\t\topened\n\t\t\t\t\tloading={loading}\n\t\t\t\t\ttitle={`Are you finished with ${language.name}?`}\n\t\t\t\t\tconfirmText=\"Mark as done\"\n\t\t\t\t\tcloseText=\"Cancel\"\n\t\t\t\t\tonClose={closePrompt}\n\t\t\t\t\tonConfirm={async () => {\n\t\t\t\t\t\tsetLoading(true)\n\t\t\t\t\t\tawait onLanguageCompleteConfirm({ task, language, closePrompt })\n\t\t\t\t\t\tfetchTasks()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Alert status=\"info\">\n\t\t\t\t\t\tMake sure you are finished and <strong>mark it as done</strong> to notify your team\n\t\t\t\t\t\tadmin. This action cannot be undone, and the language might no longer be available for\n\t\t\t\t\t\tyou to edit.\n\t\t\t\t\t</Alert>\n\t\t\t\t</ConfirmModal>\n\t\t\t)}\n\t\t\t<Link\n\t\t\t\tdisabled={loading}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsetIsMarkAsDonePromptShown(true)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tMark as done\n\t\t\t</Link>\n\t\t</>\n\t)\n}\n"],"names":[],"mappings":";;;;AAUO,MAAM,wBAAwB,CAAC,EAAE,MAAM,eAA2C;AACxF,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,CAAC,yBAAyB,0BAA0B,IAAI,SAAS,KAAK;AAE5E,QAAM,EAAE,2BAA2B,WAAW,IAAI,SAAS;AAE3D,QAAM,cAAc,MAAM;AACzB,+BAA2B,KAAK;AAAA,EACjC;AAEA,SAEG,qBAAA,UAAA,EAAA,UAAA;AAAA,IACA,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,QAAM;AAAA,QACN;AAAA,QACA,OAAO,yBAAyB,SAAS,IAAI;AAAA,QAC7C,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW,YAAY;AACtB,qBAAW,IAAI;AACf,gBAAM,0BAA0B,EAAE,MAAM,UAAU,aAAa;AACpD,qBAAA;AAAA,QACZ;AAAA,QAEA,UAAA,qBAAC,OAAM,EAAA,QAAO,QAAO,UAAA;AAAA,UAAA;AAAA,UACW,oBAAC,YAAO,UAAe,kBAAA,CAAA;AAAA,UAAS;AAAA,QAAA,EAGhE,CAAA;AAAA,MAAA;AAAA,IACD;AAAA,IAED;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,UAAU;AAAA,QACV,SAAS,MAAM;AACd,qCAA2B,IAAI;AAAA,QAChC;AAAA,QACA,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACD;AAEF;"}