sanity 6.4.0-next.21 → 6.4.0-next.22

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 (73) hide show
  1. package/lib/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +1 -1
  2. package/lib/_chunks-es/CalendarFilter.js +3 -1
  3. package/lib/_chunks-es/CalendarFilter.js.map +1 -1
  4. package/lib/_chunks-es/CommentsInspector.js +58 -1
  5. package/lib/_chunks-es/CommentsInspector.js.map +1 -1
  6. package/lib/_chunks-es/PresentationToolGrantsCheck.js +9 -1
  7. package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
  8. package/lib/_chunks-es/ReleasesStudioLayout.js +58 -1
  9. package/lib/_chunks-es/ReleasesStudioLayout.js.map +1 -1
  10. package/lib/_chunks-es/ReleasesTool.js +68 -1
  11. package/lib/_chunks-es/ReleasesTool.js.map +1 -1
  12. package/lib/_chunks-es/StructureToolProvider.js +4 -1
  13. package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
  14. package/lib/_chunks-es/Table.js +2 -1
  15. package/lib/_chunks-es/Table.js.map +1 -1
  16. package/lib/_chunks-es/TasksDocumentInputLayout.js +58 -1
  17. package/lib/_chunks-es/TasksDocumentInputLayout.js.map +1 -1
  18. package/lib/_chunks-es/TasksFooterOpenTasks.js +59 -1
  19. package/lib/_chunks-es/TasksFooterOpenTasks.js.map +1 -1
  20. package/lib/_chunks-es/TasksStudioActiveToolLayout.js +58 -1
  21. package/lib/_chunks-es/TasksStudioActiveToolLayout.js.map +1 -1
  22. package/lib/_chunks-es/TasksStudioLayout.js +58 -1
  23. package/lib/_chunks-es/TasksStudioLayout.js.map +1 -1
  24. package/lib/_chunks-es/TasksStudioNavbar.js +58 -1
  25. package/lib/_chunks-es/TasksStudioNavbar.js.map +1 -1
  26. package/lib/_chunks-es/Tool.js +7 -1
  27. package/lib/_chunks-es/Tool.js.map +1 -1
  28. package/lib/_chunks-es/VariantsStudioNavbar.js +58 -1
  29. package/lib/_chunks-es/VariantsStudioNavbar.js.map +1 -1
  30. package/lib/_chunks-es/VariantsTool.js +59 -1
  31. package/lib/_chunks-es/VariantsTool.js.map +1 -1
  32. package/lib/_chunks-es/index2.js +98 -1
  33. package/lib/_chunks-es/index2.js.map +1 -1
  34. package/lib/_chunks-es/index3.js +58 -1
  35. package/lib/_chunks-es/index3.js.map +1 -1
  36. package/lib/_chunks-es/index4.js +3 -1
  37. package/lib/_chunks-es/index4.js.map +1 -1
  38. package/lib/_chunks-es/index5.js +3 -1
  39. package/lib/_chunks-es/index5.js.map +1 -1
  40. package/lib/_chunks-es/index6.js +60 -1
  41. package/lib/_chunks-es/index6.js.map +1 -1
  42. package/lib/_chunks-es/index7.js +58 -1
  43. package/lib/_chunks-es/index7.js.map +1 -1
  44. package/lib/_chunks-es/index8.js +59 -1
  45. package/lib/_chunks-es/index8.js.map +1 -1
  46. package/lib/_chunks-es/index9.js +8 -1
  47. package/lib/_chunks-es/index9.js.map +1 -1
  48. package/lib/_chunks-es/inputResolver.js +2 -1
  49. package/lib/_chunks-es/inputResolver.js.map +1 -1
  50. package/lib/_chunks-es/presentation.js +7 -1
  51. package/lib/_chunks-es/presentation.js.map +1 -1
  52. package/lib/_chunks-es/resources2.js +58 -1
  53. package/lib/_chunks-es/resources2.js.map +1 -1
  54. package/lib/_chunks-es/resources3.js +58 -1
  55. package/lib/_chunks-es/resources3.js.map +1 -1
  56. package/lib/_chunks-es/resources4.js +58 -1
  57. package/lib/_chunks-es/resources4.js.map +1 -1
  58. package/lib/_chunks-es/resources5.js +58 -1
  59. package/lib/_chunks-es/resources5.js.map +1 -1
  60. package/lib/_chunks-es/resources6.js +58 -1
  61. package/lib/_chunks-es/resources6.js.map +1 -1
  62. package/lib/_chunks-es/resources7.js +58 -1
  63. package/lib/_chunks-es/resources7.js.map +1 -1
  64. package/lib/_chunks-es/structureTool.js +47 -1
  65. package/lib/_chunks-es/structureTool.js.map +1 -1
  66. package/lib/_chunks-es/version.js +2 -2
  67. package/lib/desk.js +4 -1
  68. package/lib/desk.js.map +1 -1
  69. package/lib/index.js +15 -1
  70. package/lib/index.js.map +1 -1
  71. package/lib/structure.js +3 -1
  72. package/lib/structure.js.map +1 -1
  73. package/package.json +11 -11
@@ -15,18 +15,23 @@ import "@sanity/client/csm";
15
15
  import "quick-lru";
16
16
  import "lodash-es/throttle.js";
17
17
  import "lodash-es/isEqual.js";
18
- import "@sanity/icons";
18
+ import "@sanity/icons/Document";
19
+ import "@sanity/icons/Image";
19
20
  import "@sanity/uuid";
20
21
  import "@sanity/color";
21
22
  import "color2k";
22
23
  import "lodash-es/isString.js";
24
+ import "@sanity/icons/Copy";
23
25
  import "react-i18next";
26
+ import "@sanity/icons/Clipboard";
24
27
  import "./createAgentBundlesStore.js";
25
28
  import "@sanity/telemetry/react";
26
29
  import "@portabletext/editor";
27
30
  import "@sanity/util/paths";
28
31
  import "./index.js";
29
32
  import "@sanity/types";
33
+ import "@sanity/icons/ChevronRight";
34
+ import "@sanity/icons/Revert";
30
35
  import "@sanity/diff-match-patch";
31
36
  import "lodash-es/flatten.js";
32
37
  import "lodash-es/orderBy.js";
@@ -34,6 +39,7 @@ import "lodash-es/uniq.js";
34
39
  import "lodash-es/xor.js";
35
40
  import "@sanity/diff-patch";
36
41
  import "./version.js";
42
+ import "@sanity/icons/ErrorOutline";
37
43
  import "date-fns/differenceInDays";
38
44
  import "date-fns/differenceInHours";
39
45
  import "date-fns/differenceInMinutes";
@@ -41,17 +47,36 @@ import "date-fns/differenceInMonths";
41
47
  import "date-fns/differenceInSeconds";
42
48
  import "date-fns/differenceInWeeks";
43
49
  import "date-fns/differenceInYears";
50
+ import "@sanity/icons/AddCircle";
51
+ import "@sanity/icons/Calendar";
52
+ import "@sanity/icons/Circle";
53
+ import "@sanity/icons/Close";
54
+ import "@sanity/icons/Edit";
55
+ import "@sanity/icons/Publish";
56
+ import "@sanity/icons/Timeline";
57
+ import "@sanity/icons/Trash";
58
+ import "@sanity/icons/Unpublish";
44
59
  import "@sanity/diff";
45
60
  import "mendoza";
61
+ import "@sanity/icons/ArrowDown";
62
+ import "@sanity/icons/ArrowRight";
63
+ import "@sanity/icons/InfoOutline";
64
+ import "@sanity/icons/WarningOutline";
46
65
  import "@portabletext/sanity-bridge";
47
66
  import "@sanity/id-utils";
48
67
  import "sanity/router";
68
+ import "@sanity/icons/ChevronDown";
49
69
  import "date-fns/addHours";
50
70
  import "date-fns/startOfHour";
71
+ import "@sanity/icons/Bolt";
72
+ import "@sanity/icons/Clock";
73
+ import "@sanity/icons/Dot";
74
+ import "@sanity/icons/EarthGlobe";
51
75
  import "date-fns/format";
52
76
  import "date-fns/isValid";
53
77
  import "date-fns/parse";
54
78
  import "@sanity/util/legacyDateFormat";
79
+ import "@sanity/icons/Search";
55
80
  import "react-fast-compare";
56
81
  import "lodash-es/pick.js";
57
82
  import "lodash-es/get.js";
@@ -70,6 +95,7 @@ import "lodash-es/toLower.js";
70
95
  import "lodash-es/union.js";
71
96
  import "lodash-es/words.js";
72
97
  import "lodash-es/isFinite.js";
98
+ import "@sanity/icons/Add";
73
99
  import "observable-callback";
74
100
  import "@sanity/util/content";
75
101
  import "lodash-es/isPlainObject.js";
@@ -78,6 +104,9 @@ import "@tanstack/react-virtual";
78
104
  import "lodash-es/startCase.js";
79
105
  import "speakingurl";
80
106
  import "@sanity/asset-utils";
107
+ import "@sanity/icons/AccessDenied";
108
+ import "@sanity/icons/HelpCircle";
109
+ import "@sanity/icons/Launch";
81
110
  import "@sanity/image-url";
82
111
  import "nanoid";
83
112
  import "lodash-es/castArray.js";
@@ -85,8 +114,13 @@ import "rxjs-mergemap-array";
85
114
  import "@sanity/mutator";
86
115
  import "@portabletext/react";
87
116
  import "lodash-es/findIndex.js";
117
+ import "@sanity/icons/EyeOpen";
118
+ import "@sanity/icons/Feedback";
88
119
  import "@xstate/react";
89
120
  import "xstate";
121
+ import "@sanity/icons/FaceHappy";
122
+ import "@sanity/icons/FaceIndifferent";
123
+ import "@sanity/icons/FaceSad";
90
124
  import "@sentry/react";
91
125
  import "@sanity/schema";
92
126
  import "@sanity/util/client";
@@ -96,15 +130,29 @@ import "json-reduce";
96
130
  import "rxjs-exhaustmap-with-trailing";
97
131
  import "date-fns/isBefore";
98
132
  import "date-fns/startOfMinute";
133
+ import "@sanity/icons/Documents";
134
+ import "@sanity/icons/Unknown";
99
135
  import "@portabletext/toolkit";
100
136
  import "lodash-es/debounce.js";
137
+ import "@sanity/icons/CheckmarkCircle";
101
138
  import "polished";
102
139
  import "@sanity/client";
140
+ import "@sanity/icons/Reset";
141
+ import "@sanity/icons/Sync";
103
142
  import "react-is";
104
143
  import "exif-component";
105
144
  import "lodash-es/pickBy.js";
106
145
  import "swr";
146
+ import "@sanity/icons/Download";
147
+ import "@sanity/icons/Upload";
148
+ import "@sanity/icons/BinaryDocument";
149
+ import "@sanity/icons/Lock";
150
+ import "@sanity/icons/AddDocument";
151
+ import "@sanity/icons/InsertAbove";
152
+ import "@sanity/icons/InsertBelow";
107
153
  import "use-hot-module-reload";
154
+ import "@sanity/icons/EllipsisHorizontal";
155
+ import "@sanity/icons/Link";
108
156
  import "react-focus-lock";
109
157
  import "lodash-es/memoize.js";
110
158
  import "lodash-es/sortedIndex.js";
@@ -120,15 +168,24 @@ import "groq-js";
120
168
  import "use-sync-external-store/with-selector";
121
169
  import "is-network-error";
122
170
  import "lodash-es/escapeRegExp.js";
171
+ import "@sanity/icons/Desktop";
172
+ import "@sanity/icons/Moon";
173
+ import "@sanity/icons/Sun";
123
174
  import "lodash-es/isEmpty.js";
124
175
  import "react-dom/server";
125
176
  import "lodash-es/capitalize.js";
126
177
  import "lodash-es/last.js";
127
178
  import "react-dom/client";
179
+ import "@sanity/icons/ArrowLeft";
180
+ import "@sanity/icons/AddUser";
181
+ import "@sanity/icons/Cog";
182
+ import "@sanity/icons/Checkmark";
128
183
  import "date-fns/addWeeks";
129
184
  import "date-fns/isAfter";
130
185
  import "semver";
131
186
  import "lodash-es/isObject.js";
187
+ import "@sanity/icons/User";
188
+ import "@sanity/icons/ChevronLeft";
132
189
  const FULLSCREEN_MEDIA_INDEX = 1, POSITION_ABSOLUTE_MEDIA_INDEX = 3, RootFlex = /* @__PURE__ */ styled(Flex).withConfig({
133
190
  displayName: "RootFlex",
134
191
  componentId: "sc-1y8zfkj-0"
@@ -1 +1 @@
1
- {"version":3,"file":"TasksStudioActiveToolLayout.js","sources":["../../src/core/tasks/plugin/TasksStudioActiveToolLayout.tsx"],"sourcesContent":["import {Box, Flex, Layer, useMediaIndex} from '@sanity/ui'\nimport {AnimatePresence} from 'motion/react'\nimport {css, styled} from 'styled-components'\n\nimport {type ActiveToolLayoutProps} from '../../config'\nimport {TasksStudioSidebar} from '../components'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\n\nconst FULLSCREEN_MEDIA_INDEX = 1\nconst POSITION_ABSOLUTE_MEDIA_INDEX = 3\n\nconst RootFlex = styled(Flex)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n min-height: 100%;\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n position: relative;\n }\n `\n})\nconst SidebarMotionLayer = styled(Layer)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 360px;\n border-left: 1px solid var(--card-border-color);\n box-sizing: border-box;\n overflow: hidden;\n\n box-shadow:\n 0px 6px 8px -4px var(--card-shadow-umbra-color),\n 0px 12px 17px -1px var(--card-shadow-penumbra-color);\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n bottom: 0;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n @media (max-width: ${media[FULLSCREEN_MEDIA_INDEX]}px) {\n border-left: 0;\n min-width: 100%;\n left: 0;\n }\n `\n})\n\nfunction TasksStudioActiveToolLayoutInner(props: ActiveToolLayoutProps) {\n const mediaIndex = useMediaIndex()\n const {\n state: {isOpen},\n } = useTasksNavigation()\n\n // Lock the scroll when the sidebar is open in fullscreen mode\n const scrollLock = mediaIndex <= FULLSCREEN_MEDIA_INDEX && isOpen\n return (\n <RootFlex sizing=\"border\" height=\"fill\">\n <Box flex={1} height=\"fill\" overflow={scrollLock ? 'hidden' : 'auto'}>\n {props.renderDefault(props)}\n </Box>\n\n <AnimatePresence initial={false}>\n {isOpen && (\n <SidebarMotionLayer zOffset={100} height=\"fill\">\n <TasksStudioSidebar />\n </SidebarMotionLayer>\n )}\n </AnimatePresence>\n </RootFlex>\n )\n}\n\nexport function TasksStudioActiveToolLayout(props: ActiveToolLayoutProps) {\n const {enabled} = useTasksEnabled()\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <TasksStudioActiveToolLayoutInner {...props} />\n}\n"],"names":["FULLSCREEN_MEDIA_INDEX","POSITION_ABSOLUTE_MEDIA_INDEX","RootFlex","styled","Flex","withConfig","displayName","componentId","theme","media","sanity","css","SidebarMotionLayer","Layer","TasksStudioActiveToolLayoutInner","props","$","_c","mediaIndex","useMediaIndex","state","t0","useTasksNavigation","isOpen","t1","t2","renderDefault","t3","t4","t5","t6","TasksStudioActiveToolLayout","enabled","useTasksEnabled"],"mappings":"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"}
1
+ {"version":3,"file":"TasksStudioActiveToolLayout.js","sources":["../../src/core/tasks/plugin/TasksStudioActiveToolLayout.tsx"],"sourcesContent":["import {Box, Flex, Layer, useMediaIndex} from '@sanity/ui'\nimport {AnimatePresence} from 'motion/react'\nimport {css, styled} from 'styled-components'\n\nimport {type ActiveToolLayoutProps} from '../../config'\nimport {TasksStudioSidebar} from '../components'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\n\nconst FULLSCREEN_MEDIA_INDEX = 1\nconst POSITION_ABSOLUTE_MEDIA_INDEX = 3\n\nconst RootFlex = styled(Flex)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n min-height: 100%;\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n position: relative;\n }\n `\n})\nconst SidebarMotionLayer = styled(Layer)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 360px;\n border-left: 1px solid var(--card-border-color);\n box-sizing: border-box;\n overflow: hidden;\n\n box-shadow:\n 0px 6px 8px -4px var(--card-shadow-umbra-color),\n 0px 12px 17px -1px var(--card-shadow-penumbra-color);\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n bottom: 0;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n @media (max-width: ${media[FULLSCREEN_MEDIA_INDEX]}px) {\n border-left: 0;\n min-width: 100%;\n left: 0;\n }\n `\n})\n\nfunction TasksStudioActiveToolLayoutInner(props: ActiveToolLayoutProps) {\n const mediaIndex = useMediaIndex()\n const {\n state: {isOpen},\n } = useTasksNavigation()\n\n // Lock the scroll when the sidebar is open in fullscreen mode\n const scrollLock = mediaIndex <= FULLSCREEN_MEDIA_INDEX && isOpen\n return (\n <RootFlex sizing=\"border\" height=\"fill\">\n <Box flex={1} height=\"fill\" overflow={scrollLock ? 'hidden' : 'auto'}>\n {props.renderDefault(props)}\n </Box>\n\n <AnimatePresence initial={false}>\n {isOpen && (\n <SidebarMotionLayer zOffset={100} height=\"fill\">\n <TasksStudioSidebar />\n </SidebarMotionLayer>\n )}\n </AnimatePresence>\n </RootFlex>\n )\n}\n\nexport function TasksStudioActiveToolLayout(props: ActiveToolLayoutProps) {\n const {enabled} = useTasksEnabled()\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <TasksStudioActiveToolLayoutInner {...props} />\n}\n"],"names":["FULLSCREEN_MEDIA_INDEX","POSITION_ABSOLUTE_MEDIA_INDEX","RootFlex","styled","Flex","withConfig","displayName","componentId","theme","media","sanity","css","SidebarMotionLayer","Layer","TasksStudioActiveToolLayoutInner","props","$","_c","mediaIndex","useMediaIndex","state","t0","useTasksNavigation","isOpen","t1","t2","renderDefault","t3","t4","t5","t6","TasksStudioActiveToolLayout","enabled","useTasksEnabled"],"mappings":"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"}
@@ -11,20 +11,25 @@ import { getPublishedId } from "@sanity/client/csm";
11
11
  import "quick-lru";
12
12
  import "lodash-es/throttle.js";
13
13
  import "lodash-es/isEqual.js";
14
- import "@sanity/icons";
14
+ import "@sanity/icons/Document";
15
+ import "@sanity/icons/Image";
15
16
  import { uuid } from "@sanity/uuid";
16
17
  import { useToast } from "@sanity/ui";
17
18
  import "@sanity/color";
18
19
  import "color2k";
19
20
  import "styled-components";
20
21
  import "lodash-es/isString.js";
22
+ import "@sanity/icons/Copy";
21
23
  import "react-i18next";
24
+ import "@sanity/icons/Clipboard";
22
25
  import "./createAgentBundlesStore.js";
23
26
  import { useTelemetry } from "@sanity/telemetry/react";
24
27
  import "@portabletext/editor";
25
28
  import "@sanity/util/paths";
26
29
  import "./index.js";
27
30
  import "@sanity/types";
31
+ import "@sanity/icons/ChevronRight";
32
+ import "@sanity/icons/Revert";
28
33
  import "@sanity/diff-match-patch";
29
34
  import "lodash-es/flatten.js";
30
35
  import "lodash-es/orderBy.js";
@@ -32,18 +37,29 @@ import "lodash-es/uniq.js";
32
37
  import "lodash-es/xor.js";
33
38
  import "@sanity/diff-patch";
34
39
  import "./version.js";
40
+ import "@sanity/icons/ErrorOutline";
35
41
  import "@sanity/id-utils";
36
42
  import { useRouter } from "sanity/router";
43
+ import "@sanity/icons/ChevronDown";
44
+ import "@sanity/icons/InfoOutline";
37
45
  import "date-fns/addHours";
38
46
  import "date-fns/startOfHour";
47
+ import "@sanity/icons/Bolt";
48
+ import "@sanity/icons/Clock";
49
+ import "@sanity/icons/Dot";
50
+ import "@sanity/icons/EarthGlobe";
39
51
  import "date-fns/format";
40
52
  import "date-fns/isValid";
41
53
  import "date-fns/parse";
42
54
  import "@sanity/util/legacyDateFormat";
55
+ import "@sanity/icons/Search";
43
56
  import "@sanity/ui/theme";
57
+ import "@sanity/icons/Sync";
44
58
  import "lodash-es/pick.js";
45
59
  import "react-fast-compare";
60
+ import "@sanity/icons/AccessDenied";
46
61
  import "lodash-es/startCase.js";
62
+ import "@sanity/icons/Close";
47
63
  import "react-focus-lock";
48
64
  import debounce from "lodash-es/debounce.js";
49
65
  import "date-fns/differenceInDays";
@@ -53,8 +69,19 @@ import "date-fns/differenceInMonths";
53
69
  import "date-fns/differenceInSeconds";
54
70
  import "date-fns/differenceInWeeks";
55
71
  import "date-fns/differenceInYears";
72
+ import "@sanity/icons/AddCircle";
73
+ import "@sanity/icons/Calendar";
74
+ import "@sanity/icons/Circle";
75
+ import "@sanity/icons/Edit";
76
+ import "@sanity/icons/Publish";
77
+ import "@sanity/icons/Timeline";
78
+ import "@sanity/icons/Trash";
79
+ import "@sanity/icons/Unpublish";
56
80
  import "@sanity/diff";
57
81
  import "mendoza";
82
+ import "@sanity/icons/ArrowDown";
83
+ import "@sanity/icons/ArrowRight";
84
+ import "@sanity/icons/WarningOutline";
58
85
  import "@portabletext/sanity-bridge";
59
86
  import "motion/react";
60
87
  import "lodash-es/get.js";
@@ -73,6 +100,7 @@ import "lodash-es/toLower.js";
73
100
  import "lodash-es/union.js";
74
101
  import "lodash-es/words.js";
75
102
  import "lodash-es/isFinite.js";
103
+ import "@sanity/icons/Add";
76
104
  import "observable-callback";
77
105
  import "@sanity/util/content";
78
106
  import "lodash-es/isPlainObject.js";
@@ -80,6 +108,8 @@ import "@sanity/insert-menu";
80
108
  import "@tanstack/react-virtual";
81
109
  import "speakingurl";
82
110
  import "@sanity/asset-utils";
111
+ import "@sanity/icons/HelpCircle";
112
+ import "@sanity/icons/Launch";
83
113
  import "@sanity/image-url";
84
114
  import "nanoid";
85
115
  import "lodash-es/castArray.js";
@@ -87,8 +117,13 @@ import "rxjs-mergemap-array";
87
117
  import "@sanity/mutator";
88
118
  import "@portabletext/react";
89
119
  import "lodash-es/findIndex.js";
120
+ import "@sanity/icons/EyeOpen";
121
+ import "@sanity/icons/Feedback";
90
122
  import "@xstate/react";
91
123
  import "xstate";
124
+ import "@sanity/icons/FaceHappy";
125
+ import "@sanity/icons/FaceIndifferent";
126
+ import "@sanity/icons/FaceSad";
92
127
  import "@sentry/react";
93
128
  import "@sanity/schema";
94
129
  import "@sanity/util/client";
@@ -98,14 +133,29 @@ import "json-reduce";
98
133
  import "rxjs-exhaustmap-with-trailing";
99
134
  import "date-fns/isBefore";
100
135
  import "date-fns/startOfMinute";
136
+ import "@sanity/icons/Documents";
137
+ import "@sanity/icons/Unknown";
101
138
  import "@portabletext/toolkit";
139
+ import "@sanity/icons/CheckmarkCircle";
140
+ import "@sanity/icons/User";
141
+ import "@sanity/icons/Link";
142
+ import "@sanity/icons/ChevronLeft";
102
143
  import "polished";
103
144
  import "@sanity/client";
145
+ import "@sanity/icons/Reset";
104
146
  import "react-is";
105
147
  import "exif-component";
106
148
  import "lodash-es/pickBy.js";
107
149
  import "swr";
150
+ import "@sanity/icons/Download";
151
+ import "@sanity/icons/Upload";
152
+ import "@sanity/icons/BinaryDocument";
153
+ import "@sanity/icons/Lock";
154
+ import "@sanity/icons/AddDocument";
155
+ import "@sanity/icons/InsertAbove";
156
+ import "@sanity/icons/InsertBelow";
108
157
  import "use-hot-module-reload";
158
+ import "@sanity/icons/EllipsisHorizontal";
109
159
  import "lodash-es/memoize.js";
110
160
  import "lodash-es/sortedIndex.js";
111
161
  import "lodash-es/difference.js";
@@ -120,11 +170,18 @@ import "groq-js";
120
170
  import "use-sync-external-store/with-selector";
121
171
  import "is-network-error";
122
172
  import "lodash-es/escapeRegExp.js";
173
+ import "@sanity/icons/Desktop";
174
+ import "@sanity/icons/Moon";
175
+ import "@sanity/icons/Sun";
123
176
  import "lodash-es/isEmpty.js";
124
177
  import "react-dom/server";
125
178
  import "lodash-es/capitalize.js";
126
179
  import "lodash-es/last.js";
127
180
  import "react-dom/client";
181
+ import "@sanity/icons/ArrowLeft";
182
+ import "@sanity/icons/AddUser";
183
+ import "@sanity/icons/Cog";
184
+ import "@sanity/icons/Checkmark";
128
185
  import "date-fns/addWeeks";
129
186
  import "date-fns/isAfter";
130
187
  import "semver";
@@ -1 +1 @@
1
- {"version":3,"file":"TasksStudioLayout.js","sources":["../../src/core/tasks/context/enabled/TasksEnabledProvider.tsx","../../src/core/tasks/context/navigation/TasksNavigationProvider.tsx","../../src/core/tasks/store/reducer.ts","../../src/core/tasks/store/useTasksStore.ts","../../src/core/tasks/context/tasks/TasksProvider.tsx","../../src/core/tasks/context/upsell/TasksUpsellProvider.tsx","../../src/core/tasks/plugin/TasksStudioLayout.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {type TasksEnabledContextValue} from './types'\n\ninterface TaksEnabledProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function TasksEnabledProvider({children}: TaksEnabledProviderProps) {\n const {enabled, isLoading, error} = useFeatureEnabled(FEATURES.sanityTasks)\n\n const isWorkspaceEnabled = useWorkspace().tasks?.enabled\n\n const value: TasksEnabledContextValue = useMemo(() => {\n if (!isWorkspaceEnabled || isLoading || error) {\n return {\n enabled: false,\n mode: null,\n }\n }\n return {\n enabled: true,\n mode: enabled ? 'default' : 'upsell',\n }\n }, [enabled, isLoading, isWorkspaceEnabled, error])\n\n return <TasksEnabledContext.Provider value={value}>{children}</TasksEnabledContext.Provider>\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {TaskLinkCopied, TaskLinkOpened} from '../../__telemetry__/tasks.telemetry'\nimport {\n type Action,\n type SidebarTabsIds,\n type State,\n TASKS_SELECTED_TASK_SEARCH_PARAM,\n TASKS_SIDEBAR_SEARCH_PARAM,\n TASKS_VIEW_MODE_SEARCH_PARAM,\n type ViewModeOptions,\n} from './types'\n\nconst initialState: State = {\n viewMode: 'list',\n selectedTask: null,\n activeTabId: 'assigned',\n duplicateTaskValues: null,\n isOpen: false,\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'TOGGLE_TASKS_VIEW': {\n if (!action.payload) {\n return {\n ...initialState,\n isOpen: action.payload,\n }\n }\n return {\n ...state,\n isOpen: action.payload,\n }\n }\n case 'CREATE_TASK':\n return {\n ...state,\n viewMode: 'create',\n selectedTask: uuid(),\n }\n case 'EDIT_TASK':\n return {\n ...state,\n viewMode: 'edit',\n selectedTask: action.payload.id,\n }\n case 'EDIT_DRAFT':\n return {\n ...state,\n viewMode: 'draft',\n selectedTask: action.payload.id,\n }\n case 'DUPLICATE_TASK':\n return {\n ...state,\n viewMode: 'duplicate',\n selectedTask: uuid(),\n duplicateTaskValues: action.payload.duplicateTaskValues,\n }\n case 'SET_ACTIVE_TAB':\n return {\n ...state,\n viewMode: 'list',\n activeTabId: action.payload,\n }\n case 'NAVIGATE_TO_LIST':\n return {\n ...state,\n viewMode: 'list',\n }\n default:\n return state\n }\n}\n\nexport const TasksNavigationProvider = ({children}: {children: ReactNode}) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n const router = useRouter()\n const toast = useToast()\n const telemetry = useTelemetry()\n\n const setViewMode = useCallback((viewMode: ViewModeOptions) => {\n switch (viewMode.type) {\n case 'list':\n dispatch({type: 'NAVIGATE_TO_LIST'})\n break\n case 'create':\n dispatch({type: 'CREATE_TASK'})\n break\n case 'edit':\n dispatch({type: 'EDIT_TASK', payload: {id: viewMode.id}})\n break\n case 'duplicate':\n dispatch({\n type: 'DUPLICATE_TASK',\n payload: {duplicateTaskValues: viewMode.duplicateTaskValues},\n })\n break\n case 'draft':\n dispatch({type: 'EDIT_DRAFT', payload: {id: viewMode.id}})\n break\n default:\n break\n }\n }, [])\n\n const setActiveTab = useCallback((tabId: SidebarTabsIds) => {\n dispatch({type: 'SET_ACTIVE_TAB', payload: tabId})\n }, [])\n\n const handleCloseTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: false})\n\n // Remove task-related query parameters from the URL\n router.navigate({\n stickyParams: {\n ...router.stickyParams,\n [TASKS_SIDEBAR_SEARCH_PARAM]: null,\n [TASKS_VIEW_MODE_SEARCH_PARAM]: null,\n [TASKS_SELECTED_TASK_SEARCH_PARAM]: null,\n },\n })\n }, [router])\n\n const handleOpenTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n }, [])\n\n const handleCopyLinkToTask = useCallback(() => {\n const url = new URL(window.location.href)\n url.searchParams.set(TASKS_SIDEBAR_SEARCH_PARAM, 'tasks')\n url.searchParams.set(TASKS_VIEW_MODE_SEARCH_PARAM, state.viewMode)\n if (state.selectedTask) {\n url.searchParams.set(TASKS_SELECTED_TASK_SEARCH_PARAM, state.selectedTask)\n }\n navigator.clipboard\n .writeText(url.toString())\n .then(() => {\n telemetry.log(TaskLinkCopied)\n })\n .catch(() => {\n toast.push({\n closable: true,\n status: 'error',\n title: 'Failed to copy link to clipboard',\n })\n })\n }, [state.selectedTask, state.viewMode, telemetry, toast])\n\n const sidebar = router.stickyParams[TASKS_SIDEBAR_SEARCH_PARAM]\n const viewMode = router.stickyParams[TASKS_VIEW_MODE_SEARCH_PARAM]\n const selectedTask = router.stickyParams[TASKS_SELECTED_TASK_SEARCH_PARAM]\n\n useEffect(() => {\n // listen to the URL to open the tasks view if the sidebar is set to task.\n if (sidebar !== 'tasks') {\n return\n }\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n if (viewMode === 'edit' && selectedTask) {\n dispatch({type: 'EDIT_TASK', payload: {id: selectedTask}})\n telemetry.log(TaskLinkOpened)\n }\n }, [selectedTask, sidebar, telemetry, viewMode])\n\n const value = useMemo(\n () => ({\n state,\n setViewMode,\n setActiveTab,\n handleCloseTasks,\n handleOpenTasks,\n handleCopyLinkToTask,\n }),\n [handleCloseTasks, handleCopyLinkToTask, handleOpenTasks, setActiveTab, setViewMode, state],\n )\n\n return <TasksNavigationContext.Provider value={value}>{children}</TasksNavigationContext.Provider>\n}\n","import {type TaskDocument, type TaskPostPayload} from '../types'\n\ninterface TaskAddedAction {\n payload: TaskDocument | TaskPostPayload\n type: 'TASK_ADDED'\n}\n\ninterface TaskDeletedAction {\n id: string\n type: 'TASK_DELETED'\n}\n\ninterface TaskUpdatedAction {\n payload: TaskDocument | Partial<TaskPostPayload>\n type: 'TASK_UPDATED'\n}\n\ninterface TasksSetAction {\n tasks: TaskDocument[]\n type: 'TASKS_SET'\n}\n\ninterface TaskReceivedAction {\n payload: TaskDocument\n type: 'TASK_RECEIVED'\n}\n\nexport type TasksReducerAction =\n | TaskAddedAction\n | TaskDeletedAction\n | TaskUpdatedAction\n | TasksSetAction\n | TaskReceivedAction\n\nexport interface TasksReducerState {\n tasks: Record<string, TaskDocument>\n}\n\n/**\n * Transform an array of tasks into an object with the task id as key:\n * ```\n * {\n * 'task-1': { _id: 'task-1', ... },\n * 'task-2': { _id: 'task-2', ... },\n * }\n * ```\n */\nfunction createTasksSet(tasks: TaskDocument[]) {\n const tasksById = tasks.reduce((acc, task) => ({...acc, [task._id]: task}), {})\n return tasksById\n}\n\nexport function tasksReducer(\n state: TasksReducerState,\n action: TasksReducerAction,\n): TasksReducerState {\n switch (action.type) {\n case 'TASKS_SET': {\n // Create an object with the task id as key\n const tasksById = createTasksSet(action.tasks)\n\n return {\n ...state,\n tasks: tasksById,\n }\n }\n\n case 'TASK_ADDED': {\n const nextTaskResult = action.payload as TaskDocument\n const nextTaskValue = nextTaskResult satisfies TaskDocument\n\n const nextTask = {\n [nextTaskResult._id]: {\n ...state.tasks[nextTaskResult._id],\n ...nextTaskValue,\n _state: nextTaskResult._state || undefined,\n // If the task is created optimistically, it won't have a createdAt date as this is set on the server.\n // However, we need to set a createdAt date to be able to sort the tasks correctly.\n // Therefore, we set the createdAt date to the current date here if it's missing while creating the task.\n // Once the task is created and received from the server, the createdAt date will be updated to the correct value.\n _createdAt: nextTaskResult._createdAt || new Date().toISOString(),\n } satisfies TaskDocument,\n }\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n ...nextTask,\n },\n }\n }\n\n case 'TASK_RECEIVED': {\n const nextTaskResult = action.payload\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [nextTaskResult._id]: nextTaskResult,\n },\n }\n }\n\n case 'TASK_DELETED': {\n const {[action.id]: _, ...restTasks} = state.tasks\n\n return {\n ...state,\n tasks: restTasks,\n }\n }\n\n case 'TASK_UPDATED': {\n const updatedTask = action.payload\n const id = updatedTask._id as string\n const task = state.tasks[id]\n\n const nextTask = {\n // Add existing task data\n ...task,\n // Add incoming task data\n ...updatedTask,\n } satisfies TaskDocument\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [id]: nextTask,\n },\n }\n }\n\n default:\n return state\n }\n}\n","import {type ListenEvent, type ListenOptions} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {useAddonDataset} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type Loadable, type TaskDocument} from '../types'\nimport {tasksReducer, type TasksReducerAction, type TasksReducerState} from './reducer'\n\nexport interface TasksStoreOptions {\n documentId?: string\n}\n\ninterface TasksStoreReturnType extends Loadable<TaskDocument[]> {\n dispatch: React.Dispatch<TasksReducerAction>\n}\n\nconst INITIAL_STATE: TasksReducerState = {\n tasks: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n includeAllVersions: true,\n tag: 'tasks-store',\n}\n\nconst SORT_FIELD = '_createdAt'\nconst SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"tasks.task\"`]\n\nconst QUERY_PROJECTION = `{\n ...,\n}`\n\n// Newest tasks first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useTasksStore(opts: TasksStoreOptions): TasksStoreReturnType {\n const {client} = useAddonDataset()\n const {documentId} = opts\n\n const [state, dispatch] = useReducer(tasksReducer, INITIAL_STATE)\n const [isLoading, setIsLoading] = useState<boolean>(client !== null)\n const [error, setError] = useState<Error | null>(null)\n\n const params = useMemo(\n () => ({documentId: documentId ? getPublishedId(documentId) : null}),\n [documentId],\n )\n\n const initialFetch = useCallback(async () => {\n if (!client) {\n setIsLoading(false)\n return\n }\n\n try {\n const res = await client.fetch(QUERY, params)\n dispatch({type: 'TASKS_SET', tasks: res})\n setIsLoading(false)\n } catch (err) {\n setError(err)\n }\n }, [client, params])\n\n const handleListenerEvent = useCallback(\n async (event: ListenEvent<Record<string, TaskDocument>>) => {\n // Fetch all tasks on initial connection\n if (event.type === 'welcome') {\n setIsLoading(true)\n await initialFetch()\n setIsLoading(false)\n }\n\n // The reconnect event means that we are trying to reconnect to the realtime listener.\n // In this case we set loading to true to indicate that we're trying to\n // reconnect. Once a connection has been established, the welcome event\n // will be received and we'll fetch all tasks again (above).\n if (event.type === 'reconnect') {\n setIsLoading(true)\n }\n\n // Handle mutations (create, update, delete) from the realtime listener\n // and update the tasks store accordingly\n if (event.type === 'mutation') {\n if (event.transition === 'appear') {\n const nextTask = event.result as TaskDocument | undefined\n\n if (nextTask) {\n dispatch({\n type: 'TASK_RECEIVED',\n payload: nextTask,\n })\n }\n }\n\n if (event.transition === 'disappear') {\n dispatch({type: 'TASK_DELETED', id: event.documentId})\n }\n\n if (event.transition === 'update') {\n const updatedTask = event.result as TaskDocument | undefined\n\n if (updatedTask) {\n dispatch({\n type: 'TASK_UPDATED',\n payload: updatedTask,\n })\n }\n }\n }\n },\n [initialFetch],\n )\n\n const listener$ = useMemo(() => {\n if (!client) return of()\n\n const events$ = client.observable.listen(QUERY, params, LISTEN_OPTIONS).pipe(\n catchError((err) => {\n setError(err)\n return of(err)\n }),\n )\n\n return events$\n }, [client, params])\n\n useEffect(() => {\n const sub = listener$.subscribe(handleListenerEvent)\n\n return () => {\n sub?.unsubscribe()\n }\n }, [handleListenerEvent, listener$])\n\n // Transform tasks object to array\n const tasksAsArray = useMemo(() => Object.values(state.tasks), [state.tasks])\n\n return {\n data: tasksAsArray,\n dispatch,\n error,\n isLoading,\n }\n}\n","import debounce from 'lodash-es/debounce.js'\nimport {useMemo, useState} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {useTasksStore} from '../../store'\nimport {type ActiveDocument, type TasksContextValue} from './types'\n\ninterface TasksProviderProps {\n children: React.ReactNode\n}\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport function TasksProvider(props: TasksProviderProps) {\n const {children} = props\n const [activeDocument, setActiveDocument] = useState<ActiveDocument | null>(null)\n const {data = EMPTY_ARRAY, isLoading} = useTasksStore({})\n\n // This change is debounced to wait until the next document loads if we are switching between documents.\n const debouncedSetActiveDocument = useMemo(() => debounce(setActiveDocument, 1000), [])\n\n const value: TasksContextValue = useMemo(\n () => ({\n activeDocument,\n setActiveDocument: debouncedSetActiveDocument,\n isLoading,\n data: data ?? [],\n }),\n [activeDocument, data, isLoading, debouncedSetActiveDocument],\n )\n\n return <TasksContext.Provider value={value}>{children}</TasksContext.Provider>\n}\n","import {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function TasksUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/tasks',\n feature: 'tasks',\n })\n\n return (\n <TasksUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </TasksUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../config'\nimport {AddonDatasetProvider} from '../../studio'\nimport {\n TasksEnabledProvider,\n TasksNavigationProvider,\n TasksProvider,\n TasksUpsellProvider,\n useTasksEnabled,\n} from '../context'\n\nconst TasksStudioLayoutInner = (props: LayoutProps) => {\n const {enabled, mode} = useTasksEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n const children = (\n <TasksProvider>\n <TasksNavigationProvider>{props.renderDefault(props)}</TasksNavigationProvider>\n </TasksProvider>\n )\n\n if (mode === 'upsell') {\n return (\n <AddonDatasetProvider>\n <TasksUpsellProvider>{children}</TasksUpsellProvider>\n </AddonDatasetProvider>\n )\n }\n\n return <AddonDatasetProvider>{children}</AddonDatasetProvider>\n}\n\nexport function TasksStudioLayout(props: LayoutProps) {\n return (\n <TasksEnabledProvider>\n <TasksStudioLayoutInner {...props} />\n </TasksEnabledProvider>\n )\n}\n"],"names":["TasksEnabledProvider","t0","$","_c","children","enabled","isLoading","error","useFeatureEnabled","FEATURES","sanityTasks","isWorkspaceEnabled","useWorkspace","tasks","t1","bb0","t2","for","mode","t3","value","initialState","viewMode","selectedTask","activeTabId","duplicateTaskValues","isOpen","reducer","state","action","type","payload","uuid","id","TasksNavigationProvider","dispatch","useReducer","router","useRouter","toast","useToast","telemetry","useTelemetry","Symbol","bb2","setViewMode","tabId","setActiveTab","navigate","stickyParams","TASKS_SIDEBAR_SEARCH_PARAM","TASKS_VIEW_MODE_SEARCH_PARAM","TASKS_SELECTED_TASK_SEARCH_PARAM","handleCloseTasks","t4","handleOpenTasks","t5","url","URL","window","location","href","searchParams","set","navigator","clipboard","writeText","toString","then","log","TaskLinkCopied","catch","push","closable","status","title","handleCopyLinkToTask","sidebar","viewMode_0","t6","t7","TaskLinkOpened","useEffect","t8","t9","createTasksSet","reduce","acc","task","_id","tasksReducer","tasksById","nextTaskResult","nextTaskValue","nextTask","_state","undefined","_createdAt","Date","toISOString","_","restTasks","updatedTask","INITIAL_STATE","LISTEN_OPTIONS","events","includeResult","visibility","includeAllVersions","tag","SORT_FIELD","SORT_ORDER","QUERY_FILTERS","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","join","useTasksStore","opts","client","useAddonDataset","documentId","setIsLoading","useState","setError","getPublishedId","params","res","fetch","err","initialFetch","event","transition","result","handleListenerEvent","of","observable","err_0","listen","pipe","catchError","listener$","sub","subscribe","unsubscribe","Object","values","tasksAsArray","data","EMPTY_ARRAY","TasksProvider","props","activeDocument","setActiveDocument","debounce","debouncedSetActiveDocument","TasksUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","TasksStudioLayoutInner","useTasksEnabled","renderDefault","TasksStudioLayout"],"mappings":"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"}
1
+ {"version":3,"file":"TasksStudioLayout.js","sources":["../../src/core/tasks/context/enabled/TasksEnabledProvider.tsx","../../src/core/tasks/context/navigation/TasksNavigationProvider.tsx","../../src/core/tasks/store/reducer.ts","../../src/core/tasks/store/useTasksStore.ts","../../src/core/tasks/context/tasks/TasksProvider.tsx","../../src/core/tasks/context/upsell/TasksUpsellProvider.tsx","../../src/core/tasks/plugin/TasksStudioLayout.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {type TasksEnabledContextValue} from './types'\n\ninterface TaksEnabledProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function TasksEnabledProvider({children}: TaksEnabledProviderProps) {\n const {enabled, isLoading, error} = useFeatureEnabled(FEATURES.sanityTasks)\n\n const isWorkspaceEnabled = useWorkspace().tasks?.enabled\n\n const value: TasksEnabledContextValue = useMemo(() => {\n if (!isWorkspaceEnabled || isLoading || error) {\n return {\n enabled: false,\n mode: null,\n }\n }\n return {\n enabled: true,\n mode: enabled ? 'default' : 'upsell',\n }\n }, [enabled, isLoading, isWorkspaceEnabled, error])\n\n return <TasksEnabledContext.Provider value={value}>{children}</TasksEnabledContext.Provider>\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {TaskLinkCopied, TaskLinkOpened} from '../../__telemetry__/tasks.telemetry'\nimport {\n type Action,\n type SidebarTabsIds,\n type State,\n TASKS_SELECTED_TASK_SEARCH_PARAM,\n TASKS_SIDEBAR_SEARCH_PARAM,\n TASKS_VIEW_MODE_SEARCH_PARAM,\n type ViewModeOptions,\n} from './types'\n\nconst initialState: State = {\n viewMode: 'list',\n selectedTask: null,\n activeTabId: 'assigned',\n duplicateTaskValues: null,\n isOpen: false,\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'TOGGLE_TASKS_VIEW': {\n if (!action.payload) {\n return {\n ...initialState,\n isOpen: action.payload,\n }\n }\n return {\n ...state,\n isOpen: action.payload,\n }\n }\n case 'CREATE_TASK':\n return {\n ...state,\n viewMode: 'create',\n selectedTask: uuid(),\n }\n case 'EDIT_TASK':\n return {\n ...state,\n viewMode: 'edit',\n selectedTask: action.payload.id,\n }\n case 'EDIT_DRAFT':\n return {\n ...state,\n viewMode: 'draft',\n selectedTask: action.payload.id,\n }\n case 'DUPLICATE_TASK':\n return {\n ...state,\n viewMode: 'duplicate',\n selectedTask: uuid(),\n duplicateTaskValues: action.payload.duplicateTaskValues,\n }\n case 'SET_ACTIVE_TAB':\n return {\n ...state,\n viewMode: 'list',\n activeTabId: action.payload,\n }\n case 'NAVIGATE_TO_LIST':\n return {\n ...state,\n viewMode: 'list',\n }\n default:\n return state\n }\n}\n\nexport const TasksNavigationProvider = ({children}: {children: ReactNode}) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n const router = useRouter()\n const toast = useToast()\n const telemetry = useTelemetry()\n\n const setViewMode = useCallback((viewMode: ViewModeOptions) => {\n switch (viewMode.type) {\n case 'list':\n dispatch({type: 'NAVIGATE_TO_LIST'})\n break\n case 'create':\n dispatch({type: 'CREATE_TASK'})\n break\n case 'edit':\n dispatch({type: 'EDIT_TASK', payload: {id: viewMode.id}})\n break\n case 'duplicate':\n dispatch({\n type: 'DUPLICATE_TASK',\n payload: {duplicateTaskValues: viewMode.duplicateTaskValues},\n })\n break\n case 'draft':\n dispatch({type: 'EDIT_DRAFT', payload: {id: viewMode.id}})\n break\n default:\n break\n }\n }, [])\n\n const setActiveTab = useCallback((tabId: SidebarTabsIds) => {\n dispatch({type: 'SET_ACTIVE_TAB', payload: tabId})\n }, [])\n\n const handleCloseTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: false})\n\n // Remove task-related query parameters from the URL\n router.navigate({\n stickyParams: {\n ...router.stickyParams,\n [TASKS_SIDEBAR_SEARCH_PARAM]: null,\n [TASKS_VIEW_MODE_SEARCH_PARAM]: null,\n [TASKS_SELECTED_TASK_SEARCH_PARAM]: null,\n },\n })\n }, [router])\n\n const handleOpenTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n }, [])\n\n const handleCopyLinkToTask = useCallback(() => {\n const url = new URL(window.location.href)\n url.searchParams.set(TASKS_SIDEBAR_SEARCH_PARAM, 'tasks')\n url.searchParams.set(TASKS_VIEW_MODE_SEARCH_PARAM, state.viewMode)\n if (state.selectedTask) {\n url.searchParams.set(TASKS_SELECTED_TASK_SEARCH_PARAM, state.selectedTask)\n }\n navigator.clipboard\n .writeText(url.toString())\n .then(() => {\n telemetry.log(TaskLinkCopied)\n })\n .catch(() => {\n toast.push({\n closable: true,\n status: 'error',\n title: 'Failed to copy link to clipboard',\n })\n })\n }, [state.selectedTask, state.viewMode, telemetry, toast])\n\n const sidebar = router.stickyParams[TASKS_SIDEBAR_SEARCH_PARAM]\n const viewMode = router.stickyParams[TASKS_VIEW_MODE_SEARCH_PARAM]\n const selectedTask = router.stickyParams[TASKS_SELECTED_TASK_SEARCH_PARAM]\n\n useEffect(() => {\n // listen to the URL to open the tasks view if the sidebar is set to task.\n if (sidebar !== 'tasks') {\n return\n }\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n if (viewMode === 'edit' && selectedTask) {\n dispatch({type: 'EDIT_TASK', payload: {id: selectedTask}})\n telemetry.log(TaskLinkOpened)\n }\n }, [selectedTask, sidebar, telemetry, viewMode])\n\n const value = useMemo(\n () => ({\n state,\n setViewMode,\n setActiveTab,\n handleCloseTasks,\n handleOpenTasks,\n handleCopyLinkToTask,\n }),\n [handleCloseTasks, handleCopyLinkToTask, handleOpenTasks, setActiveTab, setViewMode, state],\n )\n\n return <TasksNavigationContext.Provider value={value}>{children}</TasksNavigationContext.Provider>\n}\n","import {type TaskDocument, type TaskPostPayload} from '../types'\n\ninterface TaskAddedAction {\n payload: TaskDocument | TaskPostPayload\n type: 'TASK_ADDED'\n}\n\ninterface TaskDeletedAction {\n id: string\n type: 'TASK_DELETED'\n}\n\ninterface TaskUpdatedAction {\n payload: TaskDocument | Partial<TaskPostPayload>\n type: 'TASK_UPDATED'\n}\n\ninterface TasksSetAction {\n tasks: TaskDocument[]\n type: 'TASKS_SET'\n}\n\ninterface TaskReceivedAction {\n payload: TaskDocument\n type: 'TASK_RECEIVED'\n}\n\nexport type TasksReducerAction =\n | TaskAddedAction\n | TaskDeletedAction\n | TaskUpdatedAction\n | TasksSetAction\n | TaskReceivedAction\n\nexport interface TasksReducerState {\n tasks: Record<string, TaskDocument>\n}\n\n/**\n * Transform an array of tasks into an object with the task id as key:\n * ```\n * {\n * 'task-1': { _id: 'task-1', ... },\n * 'task-2': { _id: 'task-2', ... },\n * }\n * ```\n */\nfunction createTasksSet(tasks: TaskDocument[]) {\n const tasksById = tasks.reduce((acc, task) => ({...acc, [task._id]: task}), {})\n return tasksById\n}\n\nexport function tasksReducer(\n state: TasksReducerState,\n action: TasksReducerAction,\n): TasksReducerState {\n switch (action.type) {\n case 'TASKS_SET': {\n // Create an object with the task id as key\n const tasksById = createTasksSet(action.tasks)\n\n return {\n ...state,\n tasks: tasksById,\n }\n }\n\n case 'TASK_ADDED': {\n const nextTaskResult = action.payload as TaskDocument\n const nextTaskValue = nextTaskResult satisfies TaskDocument\n\n const nextTask = {\n [nextTaskResult._id]: {\n ...state.tasks[nextTaskResult._id],\n ...nextTaskValue,\n _state: nextTaskResult._state || undefined,\n // If the task is created optimistically, it won't have a createdAt date as this is set on the server.\n // However, we need to set a createdAt date to be able to sort the tasks correctly.\n // Therefore, we set the createdAt date to the current date here if it's missing while creating the task.\n // Once the task is created and received from the server, the createdAt date will be updated to the correct value.\n _createdAt: nextTaskResult._createdAt || new Date().toISOString(),\n } satisfies TaskDocument,\n }\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n ...nextTask,\n },\n }\n }\n\n case 'TASK_RECEIVED': {\n const nextTaskResult = action.payload\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [nextTaskResult._id]: nextTaskResult,\n },\n }\n }\n\n case 'TASK_DELETED': {\n const {[action.id]: _, ...restTasks} = state.tasks\n\n return {\n ...state,\n tasks: restTasks,\n }\n }\n\n case 'TASK_UPDATED': {\n const updatedTask = action.payload\n const id = updatedTask._id as string\n const task = state.tasks[id]\n\n const nextTask = {\n // Add existing task data\n ...task,\n // Add incoming task data\n ...updatedTask,\n } satisfies TaskDocument\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [id]: nextTask,\n },\n }\n }\n\n default:\n return state\n }\n}\n","import {type ListenEvent, type ListenOptions} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {useAddonDataset} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type Loadable, type TaskDocument} from '../types'\nimport {tasksReducer, type TasksReducerAction, type TasksReducerState} from './reducer'\n\nexport interface TasksStoreOptions {\n documentId?: string\n}\n\ninterface TasksStoreReturnType extends Loadable<TaskDocument[]> {\n dispatch: React.Dispatch<TasksReducerAction>\n}\n\nconst INITIAL_STATE: TasksReducerState = {\n tasks: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n includeAllVersions: true,\n tag: 'tasks-store',\n}\n\nconst SORT_FIELD = '_createdAt'\nconst SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"tasks.task\"`]\n\nconst QUERY_PROJECTION = `{\n ...,\n}`\n\n// Newest tasks first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useTasksStore(opts: TasksStoreOptions): TasksStoreReturnType {\n const {client} = useAddonDataset()\n const {documentId} = opts\n\n const [state, dispatch] = useReducer(tasksReducer, INITIAL_STATE)\n const [isLoading, setIsLoading] = useState<boolean>(client !== null)\n const [error, setError] = useState<Error | null>(null)\n\n const params = useMemo(\n () => ({documentId: documentId ? getPublishedId(documentId) : null}),\n [documentId],\n )\n\n const initialFetch = useCallback(async () => {\n if (!client) {\n setIsLoading(false)\n return\n }\n\n try {\n const res = await client.fetch(QUERY, params)\n dispatch({type: 'TASKS_SET', tasks: res})\n setIsLoading(false)\n } catch (err) {\n setError(err)\n }\n }, [client, params])\n\n const handleListenerEvent = useCallback(\n async (event: ListenEvent<Record<string, TaskDocument>>) => {\n // Fetch all tasks on initial connection\n if (event.type === 'welcome') {\n setIsLoading(true)\n await initialFetch()\n setIsLoading(false)\n }\n\n // The reconnect event means that we are trying to reconnect to the realtime listener.\n // In this case we set loading to true to indicate that we're trying to\n // reconnect. Once a connection has been established, the welcome event\n // will be received and we'll fetch all tasks again (above).\n if (event.type === 'reconnect') {\n setIsLoading(true)\n }\n\n // Handle mutations (create, update, delete) from the realtime listener\n // and update the tasks store accordingly\n if (event.type === 'mutation') {\n if (event.transition === 'appear') {\n const nextTask = event.result as TaskDocument | undefined\n\n if (nextTask) {\n dispatch({\n type: 'TASK_RECEIVED',\n payload: nextTask,\n })\n }\n }\n\n if (event.transition === 'disappear') {\n dispatch({type: 'TASK_DELETED', id: event.documentId})\n }\n\n if (event.transition === 'update') {\n const updatedTask = event.result as TaskDocument | undefined\n\n if (updatedTask) {\n dispatch({\n type: 'TASK_UPDATED',\n payload: updatedTask,\n })\n }\n }\n }\n },\n [initialFetch],\n )\n\n const listener$ = useMemo(() => {\n if (!client) return of()\n\n const events$ = client.observable.listen(QUERY, params, LISTEN_OPTIONS).pipe(\n catchError((err) => {\n setError(err)\n return of(err)\n }),\n )\n\n return events$\n }, [client, params])\n\n useEffect(() => {\n const sub = listener$.subscribe(handleListenerEvent)\n\n return () => {\n sub?.unsubscribe()\n }\n }, [handleListenerEvent, listener$])\n\n // Transform tasks object to array\n const tasksAsArray = useMemo(() => Object.values(state.tasks), [state.tasks])\n\n return {\n data: tasksAsArray,\n dispatch,\n error,\n isLoading,\n }\n}\n","import debounce from 'lodash-es/debounce.js'\nimport {useMemo, useState} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {useTasksStore} from '../../store'\nimport {type ActiveDocument, type TasksContextValue} from './types'\n\ninterface TasksProviderProps {\n children: React.ReactNode\n}\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport function TasksProvider(props: TasksProviderProps) {\n const {children} = props\n const [activeDocument, setActiveDocument] = useState<ActiveDocument | null>(null)\n const {data = EMPTY_ARRAY, isLoading} = useTasksStore({})\n\n // This change is debounced to wait until the next document loads if we are switching between documents.\n const debouncedSetActiveDocument = useMemo(() => debounce(setActiveDocument, 1000), [])\n\n const value: TasksContextValue = useMemo(\n () => ({\n activeDocument,\n setActiveDocument: debouncedSetActiveDocument,\n isLoading,\n data: data ?? [],\n }),\n [activeDocument, data, isLoading, debouncedSetActiveDocument],\n )\n\n return <TasksContext.Provider value={value}>{children}</TasksContext.Provider>\n}\n","import {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function TasksUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/tasks',\n feature: 'tasks',\n })\n\n return (\n <TasksUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </TasksUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../config'\nimport {AddonDatasetProvider} from '../../studio'\nimport {\n TasksEnabledProvider,\n TasksNavigationProvider,\n TasksProvider,\n TasksUpsellProvider,\n useTasksEnabled,\n} from '../context'\n\nconst TasksStudioLayoutInner = (props: LayoutProps) => {\n const {enabled, mode} = useTasksEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n const children = (\n <TasksProvider>\n <TasksNavigationProvider>{props.renderDefault(props)}</TasksNavigationProvider>\n </TasksProvider>\n )\n\n if (mode === 'upsell') {\n return (\n <AddonDatasetProvider>\n <TasksUpsellProvider>{children}</TasksUpsellProvider>\n </AddonDatasetProvider>\n )\n }\n\n return <AddonDatasetProvider>{children}</AddonDatasetProvider>\n}\n\nexport function TasksStudioLayout(props: LayoutProps) {\n return (\n <TasksEnabledProvider>\n <TasksStudioLayoutInner {...props} />\n </TasksEnabledProvider>\n )\n}\n"],"names":["TasksEnabledProvider","t0","$","_c","children","enabled","isLoading","error","useFeatureEnabled","FEATURES","sanityTasks","isWorkspaceEnabled","useWorkspace","tasks","t1","bb0","t2","for","mode","t3","value","initialState","viewMode","selectedTask","activeTabId","duplicateTaskValues","isOpen","reducer","state","action","type","payload","uuid","id","TasksNavigationProvider","dispatch","useReducer","router","useRouter","toast","useToast","telemetry","useTelemetry","Symbol","bb2","setViewMode","tabId","setActiveTab","navigate","stickyParams","TASKS_SIDEBAR_SEARCH_PARAM","TASKS_VIEW_MODE_SEARCH_PARAM","TASKS_SELECTED_TASK_SEARCH_PARAM","handleCloseTasks","t4","handleOpenTasks","t5","url","URL","window","location","href","searchParams","set","navigator","clipboard","writeText","toString","then","log","TaskLinkCopied","catch","push","closable","status","title","handleCopyLinkToTask","sidebar","viewMode_0","t6","t7","TaskLinkOpened","useEffect","t8","t9","createTasksSet","reduce","acc","task","_id","tasksReducer","tasksById","nextTaskResult","nextTaskValue","nextTask","_state","undefined","_createdAt","Date","toISOString","_","restTasks","updatedTask","INITIAL_STATE","LISTEN_OPTIONS","events","includeResult","visibility","includeAllVersions","tag","SORT_FIELD","SORT_ORDER","QUERY_FILTERS","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","join","useTasksStore","opts","client","useAddonDataset","documentId","setIsLoading","useState","setError","getPublishedId","params","res","fetch","err","initialFetch","event","transition","result","handleListenerEvent","of","observable","err_0","listen","pipe","catchError","listener$","sub","subscribe","unsubscribe","Object","values","tasksAsArray","data","EMPTY_ARRAY","TasksProvider","props","activeDocument","setActiveDocument","debounce","debouncedSetActiveDocument","TasksUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","TasksStudioLayoutInner","useTasksEnabled","renderDefault","TasksStudioLayout"],"mappings":"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"}