@burdenoff/microfe-planmagnet 2026.928.8 → 2026.928.9

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.
@@ -0,0 +1,257 @@
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { WORK_ITEM_PRIORITIES as n, WorkItemAssigneeSelect as r, WorkItemDueDateInput as i, WorkItemEnumSelect as a, WorkItemStatusSelect as o } from "../controls/WorkItemControls.js";
3
+ import { rowLinkProps as s, stopRowActivation as c } from "../utils/rowNavigation.js";
4
+ import { useState as l } from "react";
5
+ import { CalendarClock as u, ListChecks as d } from "lucide-react";
6
+ import { gql as f } from "@apollo/client";
7
+ import { useQuery as p } from "@apollo/client/react";
8
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ import { useI18n as g } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { Badge as _, Card as v, CardContent as y, Switch as b } from "@burdenoff/fe-libs/ui";
11
+ //#region src/planmagnet/pages/TasksMyWorkPagePage.tsx
12
+ var x = f`
13
+ query GetMyWorkItems(
14
+ $workspaceId: ID!
15
+ $filter: PlanmagnetMyWorkItemFilter
16
+ $pagination: PlanmagnetPaginationInput
17
+ ) {
18
+ planmagnetMyWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {
19
+ items {
20
+ id
21
+ key
22
+ title
23
+ status
24
+ priority
25
+ dueDate
26
+ storyPoints
27
+ isOverdue
28
+ dueGroup
29
+ assigneeId
30
+ project {
31
+ id
32
+ name
33
+ }
34
+ sprint {
35
+ id
36
+ name
37
+ }
38
+ }
39
+ pageInfo {
40
+ hasNextPage
41
+ endCursor
42
+ }
43
+ totalCount
44
+ }
45
+ }
46
+ `, S = 50, C = [
47
+ "OVERDUE",
48
+ "DUE_TODAY",
49
+ "DUE_THIS_WEEK",
50
+ "DUE_LATER",
51
+ "NO_DUE_DATE"
52
+ ], w = {
53
+ OVERDUE: "destructive",
54
+ DUE_TODAY: "warning",
55
+ DUE_THIS_WEEK: "info",
56
+ DUE_LATER: "secondary",
57
+ NO_DUE_DATE: "secondary"
58
+ };
59
+ function T(e, t) {
60
+ switch (t) {
61
+ case "OVERDUE": return e("planmagnet.myWork.group.overdue", "Overdue");
62
+ case "DUE_TODAY": return e("planmagnet.myWork.group.dueToday", "Due today");
63
+ case "DUE_THIS_WEEK": return e("planmagnet.myWork.group.dueThisWeek", "Due this week");
64
+ case "DUE_LATER": return e("planmagnet.myWork.group.dueLater", "Due later");
65
+ default: return e("planmagnet.myWork.group.noDueDate", "No due date");
66
+ }
67
+ }
68
+ function E() {
69
+ let { workspaceId: f } = e(), E = t(), { t: D } = g(), [O, k] = l(!1), [A, j] = l(!1), { data: M, loading: N, error: P, fetchMore: F } = p(x, {
70
+ variables: {
71
+ workspaceId: f,
72
+ filter: { includeClosed: O },
73
+ pagination: { first: S }
74
+ },
75
+ skip: !f
76
+ }), I = async () => {
77
+ let e = M?.planmagnetMyWorkItems?.pageInfo?.endCursor;
78
+ if (e) {
79
+ j(!0);
80
+ try {
81
+ await F({
82
+ variables: { pagination: {
83
+ first: S,
84
+ after: e
85
+ } },
86
+ updateQuery: (e, { fetchMoreResult: t }) => ({ planmagnetMyWorkItems: {
87
+ ...t.planmagnetMyWorkItems,
88
+ items: [...e.planmagnetMyWorkItems.items, ...t.planmagnetMyWorkItems.items]
89
+ } })
90
+ });
91
+ } finally {
92
+ j(!1);
93
+ }
94
+ }
95
+ };
96
+ if (N && !M) return /* @__PURE__ */ m("div", {
97
+ className: "flex items-center justify-center p-12",
98
+ children: /* @__PURE__ */ m("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
99
+ });
100
+ if (P) return /* @__PURE__ */ h("div", {
101
+ className: "p-6 text-destructive",
102
+ children: [
103
+ D("planmagnet.myWork.errorLoading", "My work could not be loaded"),
104
+ ": ",
105
+ P.message
106
+ ]
107
+ });
108
+ let L = M?.planmagnetMyWorkItems?.items ?? [], R = M?.planmagnetMyWorkItems?.totalCount ?? L.length, z = M?.planmagnetMyWorkItems?.pageInfo?.hasNextPage ?? !1, B = C.map((e) => ({
109
+ group: e,
110
+ items: L.filter((t) => t.dueGroup === e)
111
+ })).filter((e) => e.items.length > 0);
112
+ return /* @__PURE__ */ h("div", {
113
+ className: "space-y-4 p-6",
114
+ children: [/* @__PURE__ */ h("div", {
115
+ className: "flex flex-wrap items-center justify-between gap-3",
116
+ children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("h1", {
117
+ className: "text-2xl font-semibold flex items-center gap-2",
118
+ children: [/* @__PURE__ */ m(d, { className: "h-6 w-6" }), D("planmagnet.myWork.title", "My Work")]
119
+ }), /* @__PURE__ */ m("p", {
120
+ className: "text-sm text-muted-foreground",
121
+ "data-testid": "my-work-total",
122
+ children: D("planmagnet.myWork.subtitle", "{{count}} item(s) assigned to you across every project", { count: R })
123
+ })] }), /* @__PURE__ */ h("label", {
124
+ className: "flex items-center gap-2 text-sm text-muted-foreground",
125
+ children: [/* @__PURE__ */ m(b, {
126
+ checked: O,
127
+ onCheckedChange: k,
128
+ "aria-label": D("planmagnet.myWork.includeClosed", "Show completed"),
129
+ "data-testid": "my-work-include-closed"
130
+ }), D("planmagnet.myWork.includeClosed", "Show completed")]
131
+ })]
132
+ }), L.length === 0 ? /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
133
+ className: "flex flex-col items-center gap-2 py-12 text-center",
134
+ children: [
135
+ /* @__PURE__ */ m(u, { className: "h-8 w-8 text-muted-foreground" }),
136
+ /* @__PURE__ */ m("p", {
137
+ className: "text-sm font-medium",
138
+ children: D("planmagnet.myWork.empty", "No work assigned to you")
139
+ }),
140
+ /* @__PURE__ */ m("p", {
141
+ className: "text-xs text-muted-foreground",
142
+ children: O ? D("planmagnet.myWork.emptyHintClosed", "Nothing is assigned to you in any project yet.") : D("planmagnet.myWork.emptyHint", "Nothing open is assigned to you. Toggle \"Show completed\" to see recently finished work.")
143
+ })
144
+ ]
145
+ }) }) : /* @__PURE__ */ h("div", {
146
+ className: "space-y-6",
147
+ children: [B.map(({ group: e, items: t }) => /* @__PURE__ */ h("section", {
148
+ className: "space-y-2",
149
+ "data-testid": `my-work-group-${e}`,
150
+ children: [/* @__PURE__ */ h("div", {
151
+ className: "flex items-center gap-2",
152
+ children: [/* @__PURE__ */ m(_, {
153
+ variant: w[e],
154
+ children: T(D, e)
155
+ }), /* @__PURE__ */ h("span", {
156
+ className: "text-xs text-muted-foreground",
157
+ children: [
158
+ t.length,
159
+ " ",
160
+ t.length === 1 ? "item" : "items"
161
+ ]
162
+ })]
163
+ }), /* @__PURE__ */ m("div", {
164
+ className: "space-y-2",
165
+ children: t.map((e) => /* @__PURE__ */ m(v, {
166
+ ...s(() => E(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`), e.title),
167
+ children: /* @__PURE__ */ h(y, {
168
+ className: "flex flex-wrap items-center gap-3 p-3",
169
+ children: [/* @__PURE__ */ h("div", {
170
+ className: "min-w-[12rem] flex-1 space-y-1",
171
+ children: [/* @__PURE__ */ m("p", {
172
+ className: "text-sm font-medium leading-tight",
173
+ children: e.title
174
+ }), /* @__PURE__ */ h("div", {
175
+ className: "flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground",
176
+ children: [
177
+ /* @__PURE__ */ m("span", { children: e.key }),
178
+ e.project && /* @__PURE__ */ m(_, {
179
+ variant: "outline",
180
+ children: e.project.name
181
+ }),
182
+ e.sprint && /* @__PURE__ */ m(_, {
183
+ variant: "secondary",
184
+ children: e.sprint.name
185
+ }),
186
+ e.dueDate && /* @__PURE__ */ h("span", {
187
+ className: e.isOverdue ? "text-destructive font-medium" : void 0,
188
+ children: ["Due ", new Date(e.dueDate).toLocaleDateString()]
189
+ }),
190
+ e.storyPoints != null && /* @__PURE__ */ h("span", { children: [e.storyPoints, " pts"] })
191
+ ]
192
+ })]
193
+ }), /* @__PURE__ */ h("div", {
194
+ className: "flex flex-wrap items-center gap-2",
195
+ onClick: c,
196
+ onKeyDown: (e) => e.stopPropagation(),
197
+ children: [
198
+ e.project ? /* @__PURE__ */ m(o, {
199
+ workItemId: e.id,
200
+ projectId: e.project.id,
201
+ value: e.status
202
+ }) : /* @__PURE__ */ m(a, {
203
+ workItemId: e.id,
204
+ field: "status",
205
+ value: e.status,
206
+ options: [
207
+ "BACKLOG",
208
+ "TODO",
209
+ "IN_PROGRESS",
210
+ "IN_REVIEW",
211
+ "TESTING",
212
+ "DONE",
213
+ "CANCELLED"
214
+ ],
215
+ label: "Status"
216
+ }),
217
+ /* @__PURE__ */ m(a, {
218
+ workItemId: e.id,
219
+ field: "priority",
220
+ value: e.priority,
221
+ options: n,
222
+ label: "Priority"
223
+ }),
224
+ /* @__PURE__ */ m(r, {
225
+ workItemId: e.id,
226
+ assigneeId: e.assigneeId
227
+ }),
228
+ /* @__PURE__ */ m(i, {
229
+ workItemId: e.id,
230
+ dueDate: e.dueDate
231
+ })
232
+ ]
233
+ })]
234
+ })
235
+ }, e.id))
236
+ })]
237
+ }, e)), z && /* @__PURE__ */ m("div", {
238
+ className: "flex justify-center",
239
+ children: /* @__PURE__ */ m("button", {
240
+ type: "button",
241
+ onClick: () => void I(),
242
+ disabled: A,
243
+ className: "px-3 py-1.5 text-sm rounded-md bg-muted text-foreground hover:bg-muted/80 disabled:opacity-50",
244
+ "data-testid": "my-work-load-more",
245
+ children: A ? D("planmagnet.myWork.loadingMore", "Loading…") : D("planmagnet.myWork.loadMore", "Load more ({{shown}} of {{total}})", {
246
+ shown: L.length,
247
+ total: R
248
+ })
249
+ })
250
+ })]
251
+ })]
252
+ });
253
+ }
254
+ //#endregion
255
+ export { E as TasksMyWorkPagePage };
256
+
257
+ //# sourceMappingURL=TasksMyWorkPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TasksMyWorkPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksMyWorkPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Badge, Card, CardContent, Switch } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { CalendarClock, ListChecks } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, stopRowActivation } from '../utils/rowNavigation';\nimport {\n WORK_ITEM_PRIORITIES,\n WorkItemAssigneeSelect,\n WorkItemDueDateInput,\n WorkItemEnumSelect,\n WorkItemStatusSelect,\n} from '../controls/WorkItemControls';\n\n/**\n * My Work (BOFF-8048): the caller's own assigned work items across every project in the workspace, grouped by\n * due-date bucket (overdue first) and sorted the way `planmagnetMyWorkItems` returns them — server-computed, so\n * two clients (or two loads of the same client) never disagree on the grouping. See §3.2 of the BOFF-8048 design.\n *\n * Identity is implicit: there is no `actorId` argument on the query (it reads `x-actor-id` like every other\n * self-filtered list here), so there is nothing for this page to pass or fake.\n *\n * NOTE: `planmagnetMyWorkItems`, and the `isOverdue`/`dueGroup` fields on WorkItem, ship with the BOFF-8048 backend\n * PR. Until that PR deploys and the Hive CDN reconciles, this page's query will 400 in a live environment and\n * `bun run validate:schema` will fail on it locally (graphql/wspace.graphql has not been re-pulled with the new\n * fields yet) — expected, not a bug in this page. Re-run `schema-pull.sh` after the backend ships.\n */\n\nconst GET_MY_WORK_ITEMS = gql`\n query GetMyWorkItems(\n $workspaceId: ID!\n $filter: PlanmagnetMyWorkItemFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetMyWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n key\n title\n status\n priority\n dueDate\n storyPoints\n isOverdue\n dueGroup\n assigneeId\n project {\n id\n name\n }\n sprint {\n id\n name\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n totalCount\n }\n }\n`;\n\nconst PAGE_SIZE = 50;\n\ninterface MyWorkItemNode {\n id: string;\n key: string;\n title: string;\n status: string;\n priority: string;\n dueDate: string | null;\n storyPoints: number | null;\n isOverdue: boolean;\n dueGroup: 'OVERDUE' | 'DUE_TODAY' | 'DUE_THIS_WEEK' | 'DUE_LATER' | 'NO_DUE_DATE';\n assigneeId: string | null;\n project: { id: string; name: string } | null;\n sprint: { id: string; name: string } | null;\n}\n\ninterface MyWorkData {\n planmagnetMyWorkItems: {\n items: MyWorkItemNode[];\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n totalCount: number;\n };\n}\n\n// Server order already IS the group order (bucketRank, then due date, then priority, then key) — this list only\n// says how to label/style each bucket and which buckets to render as sections, never re-sorts.\nconst DUE_GROUP_ORDER = [\n 'OVERDUE',\n 'DUE_TODAY',\n 'DUE_THIS_WEEK',\n 'DUE_LATER',\n 'NO_DUE_DATE',\n] as const;\n\nconst DUE_GROUP_BADGE: Record<\n (typeof DUE_GROUP_ORDER)[number],\n 'destructive' | 'warning' | 'info' | 'secondary'\n> = {\n OVERDUE: 'destructive',\n DUE_TODAY: 'warning',\n DUE_THIS_WEEK: 'info',\n DUE_LATER: 'secondary',\n NO_DUE_DATE: 'secondary',\n};\n\nfunction dueGroupLabel(t: (key: string, fallback: string) => string, group: string): string {\n switch (group) {\n case 'OVERDUE':\n return t('planmagnet.myWork.group.overdue', 'Overdue');\n case 'DUE_TODAY':\n return t('planmagnet.myWork.group.dueToday', 'Due today');\n case 'DUE_THIS_WEEK':\n return t('planmagnet.myWork.group.dueThisWeek', 'Due this week');\n case 'DUE_LATER':\n return t('planmagnet.myWork.group.dueLater', 'Due later');\n default:\n return t('planmagnet.myWork.group.noDueDate', 'No due date');\n }\n}\n\nexport function TasksMyWorkPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const [includeClosed, setIncludeClosed] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n\n const { data, loading, error, fetchMore } = useQuery<MyWorkData>(GET_MY_WORK_ITEMS, {\n variables: { workspaceId, filter: { includeClosed }, pagination: { first: PAGE_SIZE } },\n skip: !workspaceId,\n });\n\n const loadMore = async () => {\n const after = data?.planmagnetMyWorkItems?.pageInfo?.endCursor;\n if (!after) return;\n setLoadingMore(true);\n try {\n await fetchMore({\n variables: { pagination: { first: PAGE_SIZE, after } },\n updateQuery: (prev, { fetchMoreResult }) => ({\n planmagnetMyWorkItems: {\n ...fetchMoreResult.planmagnetMyWorkItems,\n items: [\n ...prev.planmagnetMyWorkItems.items,\n ...fetchMoreResult.planmagnetMyWorkItems.items,\n ],\n },\n }),\n });\n } finally {\n setLoadingMore(false);\n }\n };\n\n // Only before the first load: a refetch (toggling \"Show completed\", or an inline edit's own list refetch) must\n // not blank the page — that would also wipe out any row-level refusal message still showing (BOFF-8043).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.myWork.errorLoading', 'My work could not be loaded')}: {error.message}\n </div>\n );\n }\n\n const items = data?.planmagnetMyWorkItems?.items ?? [];\n const total = data?.planmagnetMyWorkItems?.totalCount ?? items.length;\n const hasMore = data?.planmagnetMyWorkItems?.pageInfo?.hasNextPage ?? false;\n\n const groups = DUE_GROUP_ORDER.map((group) => ({\n group,\n items: items.filter((item) => item.dueGroup === group),\n })).filter((g) => g.items.length > 0);\n\n return (\n <div className=\"space-y-4 p-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <ListChecks className=\"h-6 w-6\" />\n {t('planmagnet.myWork.title', 'My Work')}\n </h1>\n <p className=\"text-sm text-muted-foreground\" data-testid=\"my-work-total\">\n {t(\n 'planmagnet.myWork.subtitle',\n '{{count}} item(s) assigned to you across every project',\n {\n count: total,\n }\n )}\n </p>\n </div>\n <label className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Switch\n checked={includeClosed}\n onCheckedChange={setIncludeClosed}\n aria-label={t('planmagnet.myWork.includeClosed', 'Show completed')}\n data-testid=\"my-work-include-closed\"\n />\n {t('planmagnet.myWork.includeClosed', 'Show completed')}\n </label>\n </div>\n\n {items.length === 0 ? (\n <Card>\n <CardContent className=\"flex flex-col items-center gap-2 py-12 text-center\">\n <CalendarClock className=\"h-8 w-8 text-muted-foreground\" />\n <p className=\"text-sm font-medium\">\n {t('planmagnet.myWork.empty', 'No work assigned to you')}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {includeClosed\n ? t(\n 'planmagnet.myWork.emptyHintClosed',\n 'Nothing is assigned to you in any project yet.'\n )\n : t(\n 'planmagnet.myWork.emptyHint',\n 'Nothing open is assigned to you. Toggle \"Show completed\" to see recently finished work.'\n )}\n </p>\n </CardContent>\n </Card>\n ) : (\n <div className=\"space-y-6\">\n {groups.map(({ group, items: groupItems }) => (\n <section key={group} className=\"space-y-2\" data-testid={`my-work-group-${group}`}>\n <div className=\"flex items-center gap-2\">\n <Badge variant={DUE_GROUP_BADGE[group]}>{dueGroupLabel(t, group)}</Badge>\n <span className=\"text-xs text-muted-foreground\">\n {groupItems.length} {groupItems.length === 1 ? 'item' : 'items'}\n </span>\n </div>\n <div className=\"space-y-2\">\n {groupItems.map((item) => (\n <Card\n key={item.id}\n {...rowLinkProps(\n () =>\n navigate(`/tasks/task-detail-page?taskId=${encodeURIComponent(item.id)}`),\n item.title\n )}\n >\n <CardContent className=\"flex flex-wrap items-center gap-3 p-3\">\n <div className=\"min-w-[12rem] flex-1 space-y-1\">\n <p className=\"text-sm font-medium leading-tight\">{item.title}</p>\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground\">\n <span>{item.key}</span>\n {item.project && <Badge variant=\"outline\">{item.project.name}</Badge>}\n {item.sprint && <Badge variant=\"secondary\">{item.sprint.name}</Badge>}\n {item.dueDate && (\n <span\n className={\n item.isOverdue ? 'text-destructive font-medium' : undefined\n }\n >\n Due {new Date(item.dueDate).toLocaleDateString()}\n </span>\n )}\n {item.storyPoints != null && <span>{item.storyPoints} pts</span>}\n </div>\n </div>\n <div\n className=\"flex flex-wrap items-center gap-2\"\n onClick={stopRowActivation}\n onKeyDown={(e) => e.stopPropagation()}\n >\n {item.project ? (\n <WorkItemStatusSelect\n workItemId={item.id}\n projectId={item.project.id}\n value={item.status}\n />\n ) : (\n <WorkItemEnumSelect\n workItemId={item.id}\n field=\"status\"\n value={item.status}\n options={[\n 'BACKLOG',\n 'TODO',\n 'IN_PROGRESS',\n 'IN_REVIEW',\n 'TESTING',\n 'DONE',\n 'CANCELLED',\n ]}\n label=\"Status\"\n />\n )}\n <WorkItemEnumSelect\n workItemId={item.id}\n field=\"priority\"\n value={item.priority}\n options={WORK_ITEM_PRIORITIES}\n label=\"Priority\"\n />\n <WorkItemAssigneeSelect workItemId={item.id} assigneeId={item.assigneeId} />\n <WorkItemDueDateInput workItemId={item.id} dueDate={item.dueDate} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </section>\n ))}\n {hasMore && (\n <div className=\"flex justify-center\">\n <button\n type=\"button\"\n onClick={() => void loadMore()}\n disabled={loadingMore}\n className=\"px-3 py-1.5 text-sm rounded-md bg-muted text-foreground hover:bg-muted/80 disabled:opacity-50\"\n data-testid=\"my-work-load-more\"\n >\n {loadingMore\n ? t('planmagnet.myWork.loadingMore', 'Loading…')\n : t('planmagnet.myWork.loadMore', 'Load more ({{shown}} of {{total}})', {\n shown: items.length,\n total,\n })}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-planmagnet",
3
- "version": "2026.928.8",
3
+ "version": "2026.928.9",
4
4
  "description": "Burdenoff PlanMagnet Microfrontend",
5
5
  "type": "module",
6
6
  "files": [