@payloadcms/next 3.69.0-internal.5029b68 → 3.70.0-canary.0

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 (146) hide show
  1. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
  2. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +19 -24
  3. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
  4. package/dist/elements/Nav/index.client.d.ts.map +1 -1
  5. package/dist/elements/Nav/index.client.js +15 -21
  6. package/dist/elements/Nav/index.client.js.map +1 -1
  7. package/dist/prod/styles.css +1 -1
  8. package/dist/routes/graphql/playground.d.ts.map +1 -1
  9. package/dist/routes/graphql/playground.js +6 -1
  10. package/dist/routes/graphql/playground.js.map +1 -1
  11. package/dist/routes/rest/index.d.ts.map +1 -1
  12. package/dist/routes/rest/index.js +5 -1
  13. package/dist/routes/rest/index.js.map +1 -1
  14. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  15. package/dist/utilities/handleAuthRedirect.js +1 -2
  16. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  17. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  18. package/dist/utilities/handleServerFunctions.js +4 -0
  19. package/dist/utilities/handleServerFunctions.js.map +1 -1
  20. package/dist/views/API/index.client.d.ts.map +1 -1
  21. package/dist/views/API/index.client.js +7 -5
  22. package/dist/views/API/index.client.js.map +1 -1
  23. package/dist/views/Account/ResetPreferences/index.d.ts +0 -1
  24. package/dist/views/Account/ResetPreferences/index.d.ts.map +1 -1
  25. package/dist/views/Account/ResetPreferences/index.js +32 -25
  26. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  27. package/dist/views/Account/Settings/index.d.ts.map +1 -1
  28. package/dist/views/Account/Settings/index.js +0 -3
  29. package/dist/views/Account/Settings/index.js.map +1 -1
  30. package/dist/views/Account/index.d.ts.map +1 -1
  31. package/dist/views/Account/index.js +5 -1
  32. package/dist/views/Account/index.js.map +1 -1
  33. package/dist/views/BrowseByFolder/buildView.d.ts.map +1 -1
  34. package/dist/views/BrowseByFolder/buildView.js +1 -2
  35. package/dist/views/BrowseByFolder/buildView.js.map +1 -1
  36. package/dist/views/CollectionFolders/buildView.d.ts.map +1 -1
  37. package/dist/views/CollectionFolders/buildView.js +1 -2
  38. package/dist/views/CollectionFolders/buildView.js.map +1 -1
  39. package/dist/views/CreateFirstUser/index.client.d.ts.map +1 -1
  40. package/dist/views/CreateFirstUser/index.client.js +4 -6
  41. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  42. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts +19 -0
  43. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -0
  44. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +147 -0
  45. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -0
  46. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts +21 -0
  47. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -0
  48. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +431 -0
  49. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -0
  50. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts +5 -0
  51. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -0
  52. package/dist/views/Dashboard/Default/ModularDashboard/index.js +87 -0
  53. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -0
  54. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.d.ts +14 -0
  55. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.d.ts.map +1 -0
  56. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +99 -0
  57. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -0
  58. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts +12 -0
  59. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -0
  60. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +58 -0
  61. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -0
  62. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts +20 -0
  63. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -0
  64. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +72 -0
  65. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -0
  66. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts +20 -0
  67. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.d.ts.map +1 -0
  68. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +158 -0
  69. package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -0
  70. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.d.ts +7 -0
  71. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.d.ts.map +1 -0
  72. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +38 -0
  73. package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -0
  74. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.d.ts +2 -0
  75. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.d.ts.map +1 -0
  76. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +264 -0
  77. package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -0
  78. package/dist/views/Dashboard/Default/index.d.ts +0 -1
  79. package/dist/views/Dashboard/Default/index.d.ts.map +1 -1
  80. package/dist/views/Dashboard/Default/index.js +35 -149
  81. package/dist/views/Dashboard/Default/index.js.map +1 -1
  82. package/dist/views/Dashboard/index.d.ts.map +1 -1
  83. package/dist/views/Dashboard/index.js +3 -52
  84. package/dist/views/Dashboard/index.js.map +1 -1
  85. package/dist/views/Document/getVersions.d.ts.map +1 -1
  86. package/dist/views/Document/getVersions.js +2 -1
  87. package/dist/views/Document/getVersions.js.map +1 -1
  88. package/dist/views/Document/index.d.ts.map +1 -1
  89. package/dist/views/Document/index.js +5 -8
  90. package/dist/views/Document/index.js.map +1 -1
  91. package/dist/views/ForgotPassword/index.d.ts.map +1 -1
  92. package/dist/views/ForgotPassword/index.js +3 -6
  93. package/dist/views/ForgotPassword/index.js.map +1 -1
  94. package/dist/views/List/index.d.ts.map +1 -1
  95. package/dist/views/List/index.js +1 -2
  96. package/dist/views/List/index.js.map +1 -1
  97. package/dist/views/Login/LoginForm/index.d.ts.map +1 -1
  98. package/dist/views/Login/LoginForm/index.js +18 -22
  99. package/dist/views/Login/LoginForm/index.js.map +1 -1
  100. package/dist/views/Logout/LogoutClient.d.ts.map +1 -1
  101. package/dist/views/Logout/LogoutClient.js +36 -40
  102. package/dist/views/Logout/LogoutClient.js.map +1 -1
  103. package/dist/views/NotFound/index.d.ts.map +1 -1
  104. package/dist/views/NotFound/index.js +3 -3
  105. package/dist/views/NotFound/index.js.map +1 -1
  106. package/dist/views/ResetPassword/ResetPasswordForm/index.d.ts.map +1 -1
  107. package/dist/views/ResetPassword/ResetPasswordForm/index.js +17 -22
  108. package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -1
  109. package/dist/views/ResetPassword/index.d.ts.map +1 -1
  110. package/dist/views/ResetPassword/index.js +2 -4
  111. package/dist/views/ResetPassword/index.js.map +1 -1
  112. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  113. package/dist/views/Root/getRouteData.js +1 -2
  114. package/dist/views/Root/getRouteData.js.map +1 -1
  115. package/dist/views/Root/index.d.ts.map +1 -1
  116. package/dist/views/Root/index.js +7 -8
  117. package/dist/views/Root/index.js.map +1 -1
  118. package/dist/views/Root/isPathMatchingRoute.d.ts.map +1 -1
  119. package/dist/views/Root/isPathMatchingRoute.js.map +1 -1
  120. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  121. package/dist/views/Unauthorized/index.js +2 -4
  122. package/dist/views/Unauthorized/index.js.map +1 -1
  123. package/dist/views/Verify/index.js +1 -2
  124. package/dist/views/Verify/index.js.map +1 -1
  125. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  126. package/dist/views/Version/Default/SetStepNav.js +7 -14
  127. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  128. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +1 -0
  129. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
  130. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +1 -0
  131. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -1
  132. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +1 -0
  133. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
  134. package/dist/views/Version/Restore/index.js +7 -6
  135. package/dist/views/Version/Restore/index.js.map +1 -1
  136. package/dist/views/Versions/cells/CreatedAt/index.d.ts.map +1 -1
  137. package/dist/views/Versions/cells/CreatedAt/index.js +3 -6
  138. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  139. package/dist/views/Versions/index.d.ts.map +1 -1
  140. package/dist/views/Versions/index.js +3 -4
  141. package/dist/views/Versions/index.js.map +1 -1
  142. package/package.json +10 -8
  143. package/dist/utilities/getVisibleEntities.d.ts +0 -5
  144. package/dist/utilities/getVisibleEntities.d.ts.map +0 -1
  145. package/dist/utilities/getVisibleEntities.js +0 -26
  146. package/dist/utilities/getVisibleEntities.js.map +0 -1
@@ -0,0 +1,431 @@
1
+ 'use client';
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core';
6
+ import { snapCenterToCursor } from '@dnd-kit/modifiers';
7
+ import { ChevronIcon, Popup, PopupList, useTranslation, XIcon } from '@payloadcms/ui';
8
+ import React, { useMemo, useState } from 'react';
9
+ /**
10
+ * Custom modifier that only applies snapCenterToCursor for pointer events.
11
+ * During keyboard navigation, we handle positioning ourselves via the coordinate getter.
12
+ */
13
+ const snapCenterToCursorOnlyForPointer = args => {
14
+ const {
15
+ activatorEvent
16
+ } = args;
17
+ // Only apply snap for pointer events (mouse/touch), not keyboard
18
+ // Check activatorEvent.type since KeyboardEvent may not exist on server
19
+ if (activatorEvent && 'key' in activatorEvent) {
20
+ return args.transform;
21
+ }
22
+ return snapCenterToCursor(args);
23
+ };
24
+ import { DashboardStepNav } from './DashboardStepNav.js';
25
+ import { useDashboardLayout } from './useDashboardLayout.js';
26
+ import { closestInXAxis } from './utils/collisionDetection.js';
27
+ import { useDashboardSensors } from './utils/sensors.js';
28
+ /* eslint-disable perfectionist/sort-objects */
29
+ const WIDTH_TO_PERCENTAGE = {
30
+ 'x-small': 25,
31
+ small: 1 / 3 * 100,
32
+ medium: 50,
33
+ large: 2 / 3 * 100,
34
+ 'x-large': 75,
35
+ full: 100
36
+ };
37
+ export function ModularDashboardClient(t0) {
38
+ const $ = _c(21);
39
+ const {
40
+ clientLayout: initialLayout,
41
+ widgets
42
+ } = t0;
43
+ const {
44
+ t
45
+ } = useTranslation();
46
+ const {
47
+ addWidget,
48
+ cancel,
49
+ cancelModal,
50
+ currentLayout,
51
+ deleteWidget,
52
+ isEditing,
53
+ moveWidget,
54
+ resetLayout,
55
+ resizeWidget,
56
+ saveLayout,
57
+ setIsEditing
58
+ } = useDashboardLayout(initialLayout);
59
+ const [activeDragId, setActiveDragId] = useState(null);
60
+ const sensors = useDashboardSensors();
61
+ let t1;
62
+ if ($[0] !== activeDragId || $[1] !== addWidget || $[2] !== cancel || $[3] !== cancelModal || $[4] !== currentLayout || $[5] !== deleteWidget || $[6] !== isEditing || $[7] !== moveWidget || $[8] !== resetLayout || $[9] !== resizeWidget || $[10] !== saveLayout || $[11] !== sensors || $[12] !== setIsEditing || $[13] !== t || $[14] !== widgets) {
63
+ let t2;
64
+ if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
65
+ t2 = () => {
66
+ setActiveDragId(null);
67
+ };
68
+ $[16] = t2;
69
+ } else {
70
+ t2 = $[16];
71
+ }
72
+ let t3;
73
+ if ($[17] !== currentLayout || $[18] !== moveWidget) {
74
+ t3 = event => {
75
+ if (!event.over) {
76
+ setActiveDragId(null);
77
+ return;
78
+ }
79
+ const droppableId = event.over.id;
80
+ const i = droppableId.lastIndexOf("-");
81
+ const slug = droppableId.slice(0, i);
82
+ const position = droppableId.slice(i + 1);
83
+ if (slug === event.active.id) {
84
+ return;
85
+ }
86
+ const moveFromIndex = currentLayout?.findIndex(widget => widget.item.id === event.active.id);
87
+ let moveToIndex = currentLayout?.findIndex(widget_0 => widget_0.item.id === slug);
88
+ if (moveFromIndex < moveToIndex) {
89
+ moveToIndex--;
90
+ }
91
+ if (position === "after") {
92
+ moveToIndex++;
93
+ }
94
+ moveWidget({
95
+ moveFromIndex,
96
+ moveToIndex
97
+ });
98
+ setActiveDragId(null);
99
+ };
100
+ $[17] = currentLayout;
101
+ $[18] = moveWidget;
102
+ $[19] = t3;
103
+ } else {
104
+ t3 = $[19];
105
+ }
106
+ let t4;
107
+ if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
108
+ t4 = event_0 => {
109
+ setActiveDragId(event_0.active.id);
110
+ };
111
+ $[20] = t4;
112
+ } else {
113
+ t4 = $[20];
114
+ }
115
+ t1 = _jsxs("div", {
116
+ children: [_jsx(DndContext, {
117
+ autoScroll: {
118
+ enabled: true,
119
+ threshold: {
120
+ x: 0,
121
+ y: 0.2
122
+ }
123
+ },
124
+ collisionDetection: closestInXAxis,
125
+ id: "dashboard-dnd-context",
126
+ onDragCancel: t2,
127
+ onDragEnd: t3,
128
+ onDragStart: t4,
129
+ sensors,
130
+ children: _jsxs("div", {
131
+ className: `modular-dashboard ${isEditing ? "editing" : ""}`,
132
+ style: {
133
+ display: "flex",
134
+ flexWrap: "wrap"
135
+ },
136
+ children: [currentLayout?.length === 0 && _jsx("div", {
137
+ className: "modular-dashboard__empty",
138
+ children: _jsx("p", {
139
+ children: "There are no widgets on your dashboard. You can add them from the \"Dashboard\" menu located in the top bar."
140
+ })
141
+ }), currentLayout?.map((widget_1, _index) => _jsx(React.Fragment, {
142
+ children: _jsx(DraggableItem, {
143
+ disabled: !isEditing,
144
+ id: widget_1.item.id,
145
+ style: {
146
+ width: `${WIDTH_TO_PERCENTAGE[widget_1.item.width]}%`,
147
+ padding: "6px"
148
+ },
149
+ width: widget_1.item.width,
150
+ children: _jsxs("div", {
151
+ className: `widget-wrapper ${isEditing ? "widget-wrapper--editing" : ""}`,
152
+ children: [_jsx("div", {
153
+ "aria-hidden": isEditing,
154
+ className: "widget-content",
155
+ inert: isEditing,
156
+ children: widget_1.component
157
+ }), isEditing && _jsxs("div", {
158
+ className: "widget-wrapper__controls",
159
+ onPointerDown: _temp,
160
+ children: [_jsx(WidgetWidthDropdown, {
161
+ currentWidth: widget_1.item.width,
162
+ maxWidth: widget_1.item.maxWidth,
163
+ minWidth: widget_1.item.minWidth,
164
+ onResize: width => resizeWidget(widget_1.item.id, width)
165
+ }), _jsxs("button", {
166
+ className: "widget-wrapper__delete-btn",
167
+ onClick: () => deleteWidget(widget_1.item.id),
168
+ type: "button",
169
+ children: [_jsx("span", {
170
+ className: "sr-only",
171
+ children: t("dashboard:deleteWidget", {
172
+ id: widget_1.item.id
173
+ })
174
+ }), _jsx(XIcon, {})]
175
+ })]
176
+ })]
177
+ })
178
+ })
179
+ }, widget_1.item.id)), _jsx(DragOverlay, {
180
+ className: "drag-overlay",
181
+ dropAnimation: {
182
+ duration: 100
183
+ },
184
+ modifiers: [snapCenterToCursorOnlyForPointer],
185
+ children: activeDragId ? (() => {
186
+ const draggedWidget = currentLayout?.find(widget_2 => widget_2.item.id === activeDragId);
187
+ return draggedWidget ? _jsx("div", {
188
+ style: {
189
+ transform: "scale(0.25)"
190
+ },
191
+ children: _jsx("div", {
192
+ className: `widget-wrapper ${isEditing ? "widget-wrapper--editing" : ""}`,
193
+ children: _jsx("div", {
194
+ className: "widget-content",
195
+ children: draggedWidget.component
196
+ })
197
+ })
198
+ }) : null;
199
+ })() : null
200
+ })]
201
+ })
202
+ }), _jsx(DashboardStepNav, {
203
+ addWidget,
204
+ cancel,
205
+ isEditing,
206
+ resetLayout,
207
+ saveLayout,
208
+ setIsEditing,
209
+ widgets
210
+ }), cancelModal]
211
+ });
212
+ $[0] = activeDragId;
213
+ $[1] = addWidget;
214
+ $[2] = cancel;
215
+ $[3] = cancelModal;
216
+ $[4] = currentLayout;
217
+ $[5] = deleteWidget;
218
+ $[6] = isEditing;
219
+ $[7] = moveWidget;
220
+ $[8] = resetLayout;
221
+ $[9] = resizeWidget;
222
+ $[10] = saveLayout;
223
+ $[11] = sensors;
224
+ $[12] = setIsEditing;
225
+ $[13] = t;
226
+ $[14] = widgets;
227
+ $[15] = t1;
228
+ } else {
229
+ t1 = $[15];
230
+ }
231
+ return t1;
232
+ }
233
+ function _temp(e) {
234
+ return e.stopPropagation();
235
+ }
236
+ function WidgetWidthDropdown({
237
+ currentWidth,
238
+ maxWidth,
239
+ minWidth,
240
+ onResize
241
+ }) {
242
+ // Filter options based on minWidth and maxWidth
243
+ const validOptions = useMemo(() => {
244
+ const minPercentage = WIDTH_TO_PERCENTAGE[minWidth];
245
+ const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth];
246
+ return Object.entries(WIDTH_TO_PERCENTAGE).map(([key, value]) => ({
247
+ width: key,
248
+ percentage: value
249
+ })).filter(option => option.percentage >= minPercentage && option.percentage <= maxPercentage);
250
+ }, [minWidth, maxWidth]);
251
+ const isDisabled = validOptions.length <= 1;
252
+ return /*#__PURE__*/_jsx(Popup, {
253
+ button: /*#__PURE__*/_jsxs("button", {
254
+ className: "widget-wrapper__size-btn",
255
+ disabled: isDisabled,
256
+ onPointerDown: e => e.stopPropagation(),
257
+ type: "button",
258
+ children: [/*#__PURE__*/_jsx("span", {
259
+ className: "widget-wrapper__size-btn-text",
260
+ children: currentWidth
261
+ }), /*#__PURE__*/_jsx(ChevronIcon, {
262
+ className: "widget-wrapper__size-btn-icon"
263
+ })]
264
+ }),
265
+ buttonType: "custom",
266
+ disabled: isDisabled,
267
+ render: ({
268
+ close
269
+ }) => /*#__PURE__*/_jsx(PopupList.ButtonGroup, {
270
+ children: validOptions.map(option_0 => {
271
+ const isSelected = option_0.width === currentWidth;
272
+ return /*#__PURE__*/_jsxs(PopupList.Button, {
273
+ active: isSelected,
274
+ onClick: () => {
275
+ onResize(option_0.width);
276
+ close();
277
+ },
278
+ children: [/*#__PURE__*/_jsx("span", {
279
+ className: "widget-wrapper__size-btn-label",
280
+ children: option_0.width
281
+ }), /*#__PURE__*/_jsxs("span", {
282
+ className: "widget-wrapper__size-btn-percentage",
283
+ children: [option_0.percentage.toFixed(0), "%"]
284
+ })]
285
+ }, option_0.width);
286
+ })
287
+ }),
288
+ size: "small",
289
+ verticalAlign: "bottom"
290
+ });
291
+ }
292
+ function DraggableItem(props) {
293
+ const $ = _c(13);
294
+ let t0;
295
+ if ($[0] !== props.disabled || $[1] !== props.id) {
296
+ t0 = {
297
+ id: props.id,
298
+ disabled: props.disabled
299
+ };
300
+ $[0] = props.disabled;
301
+ $[1] = props.id;
302
+ $[2] = t0;
303
+ } else {
304
+ t0 = $[2];
305
+ }
306
+ const {
307
+ attributes,
308
+ isDragging,
309
+ listeners,
310
+ setNodeRef
311
+ } = useDraggable(t0);
312
+ const t1 = isDragging ? 0.3 : 1;
313
+ let t2;
314
+ if ($[3] !== attributes || $[4] !== listeners || $[5] !== props.children || $[6] !== props.disabled || $[7] !== props.id || $[8] !== props.style || $[9] !== props.width || $[10] !== setNodeRef || $[11] !== t1) {
315
+ const mergedStyles = {
316
+ ...props.style,
317
+ opacity: t1,
318
+ position: "relative"
319
+ };
320
+ const draggableProps = props.disabled ? {} : {
321
+ ...listeners,
322
+ ...attributes
323
+ };
324
+ t2 = _jsxs("div", {
325
+ className: "widget",
326
+ "data-slug": props.id,
327
+ "data-width": props.width,
328
+ style: mergedStyles,
329
+ children: [_jsx(DroppableItem, {
330
+ id: props.id,
331
+ position: "before"
332
+ }), _jsx("div", {
333
+ className: "draggable",
334
+ id: props.id,
335
+ ref: setNodeRef,
336
+ ...draggableProps,
337
+ style: {
338
+ width: "100%",
339
+ height: "100%"
340
+ },
341
+ children: props.children
342
+ }), _jsx(DroppableItem, {
343
+ id: props.id,
344
+ position: "after"
345
+ })]
346
+ });
347
+ $[3] = attributes;
348
+ $[4] = listeners;
349
+ $[5] = props.children;
350
+ $[6] = props.disabled;
351
+ $[7] = props.id;
352
+ $[8] = props.style;
353
+ $[9] = props.width;
354
+ $[10] = setNodeRef;
355
+ $[11] = t1;
356
+ $[12] = t2;
357
+ } else {
358
+ t2 = $[12];
359
+ }
360
+ return t2;
361
+ }
362
+ function DroppableItem(t0) {
363
+ const $ = _c(11);
364
+ const {
365
+ id,
366
+ position
367
+ } = t0;
368
+ const t1 = `${id}-${position}`;
369
+ let t2;
370
+ if ($[0] !== position) {
371
+ t2 = {
372
+ position
373
+ };
374
+ $[0] = position;
375
+ $[1] = t2;
376
+ } else {
377
+ t2 = $[1];
378
+ }
379
+ let t3;
380
+ if ($[2] !== t1 || $[3] !== t2) {
381
+ t3 = {
382
+ id: t1,
383
+ data: t2
384
+ };
385
+ $[2] = t1;
386
+ $[3] = t2;
387
+ $[4] = t3;
388
+ } else {
389
+ t3 = $[4];
390
+ }
391
+ const {
392
+ setNodeRef,
393
+ isOver
394
+ } = useDroppable(t3);
395
+ const t4 = `${id}-${position}`;
396
+ const t5 = position === "before" ? -2 : "auto";
397
+ const t6 = position === "after" ? -2 : "auto";
398
+ const t7 = isOver ? "var(--theme-success-400)" : "transparent";
399
+ let t8;
400
+ if ($[5] !== setNodeRef || $[6] !== t4 || $[7] !== t5 || $[8] !== t6 || $[9] !== t7) {
401
+ t8 = _jsx("div", {
402
+ className: "droppable-widget",
403
+ "data-testid": t4,
404
+ ref: setNodeRef,
405
+ style: {
406
+ position: "absolute",
407
+ left: t5,
408
+ right: t6,
409
+ top: 0,
410
+ bottom: 0,
411
+ borderRadius: "1000px",
412
+ width: "4px",
413
+ backgroundColor: t7,
414
+ marginBottom: "10px",
415
+ marginTop: "10px",
416
+ pointerEvents: "none",
417
+ zIndex: 1000
418
+ }
419
+ });
420
+ $[5] = setNodeRef;
421
+ $[6] = t4;
422
+ $[7] = t5;
423
+ $[8] = t6;
424
+ $[9] = t7;
425
+ $[10] = t8;
426
+ } else {
427
+ t8 = $[10];
428
+ }
429
+ return t8;
430
+ }
431
+ //# sourceMappingURL=index.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","ChevronIcon","Popup","PopupList","useTranslation","XIcon","React","useMemo","useState","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","activeDragId","setActiveDragId","sensors","t1","t2","Symbol","for","t3","event","over","droppableId","id","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","widget_0","t4","event_0","_jsxs","children","_jsx","autoScroll","enabled","threshold","x","y","collisionDetection","onDragCancel","onDragEnd","onDragStart","className","style","display","flexWrap","length","map","widget_1","_index","Fragment","DraggableItem","disabled","width","padding","inert","component","onPointerDown","_temp","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onResize","onClick","type","dropAnimation","duration","modifiers","draggedWidget","find","widget_2","e","stopPropagation","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","filter","option","isDisabled","button","buttonType","render","close","ButtonGroup","isSelected","Button","toFixed","size","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","DroppableItem","ref","height","data","isOver","t5","t6","t7","t8","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Modifier } from '@dnd-kit/core'\nimport type { ClientWidget, WidgetWidth } from 'payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport { ChevronIcon, Popup, PopupList, useTranslation, XIcon } from '@payloadcms/ui'\nimport React, { useMemo, useState } from 'react'\n\n/**\n * Custom modifier that only applies snapCenterToCursor for pointer events.\n * During keyboard navigation, we handle positioning ourselves via the coordinate getter.\n */\nconst snapCenterToCursorOnlyForPointer: Modifier = (args) => {\n const { activatorEvent } = args\n\n // Only apply snap for pointer events (mouse/touch), not keyboard\n // Check activatorEvent.type since KeyboardEvent may not exist on server\n if (activatorEvent && 'key' in activatorEvent) {\n return args.transform\n }\n\n return snapCenterToCursor(args)\n}\n\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\n\nexport type WidgetItem = {\n id: string\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n width: WidgetWidth\n}\n\nexport type WidgetInstanceClient = {\n component: React.ReactNode\n item: WidgetItem\n}\n\nexport type DropTargetWidget = {\n position: 'after' | 'before'\n widget: WidgetInstanceClient\n} | null\n\n/* eslint-disable perfectionist/sort-objects */\nconst WIDTH_TO_PERCENTAGE = {\n 'x-small': 25,\n small: (1 / 3) * 100,\n medium: 50,\n large: (2 / 3) * 100,\n 'x-large': 75,\n full: 100,\n} as const\n\nexport function ModularDashboardClient({\n clientLayout: initialLayout,\n widgets,\n}: {\n clientLayout: WidgetInstanceClient[]\n widgets: ClientWidget[]\n}) {\n const { t } = useTranslation()\n const {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const sensors = useDashboardSensors()\n\n return (\n <div>\n <DndContext\n autoScroll={{\n enabled: true,\n threshold: {\n x: 0, // No horizontal scroll\n y: 0.2, // Allow vertical scroll at 20% from edge\n },\n }}\n collisionDetection={closestInXAxis}\n // https://github.com/clauderic/dnd-kit/issues/926#issuecomment-1640115665\n id=\"dashboard-dnd-context\"\n onDragCancel={() => {\n setActiveDragId(null)\n }}\n onDragEnd={(event) => {\n if (!event.over) {\n setActiveDragId(null)\n return\n }\n const droppableId = event.over.id as string\n const i = droppableId.lastIndexOf('-')\n const slug = droppableId.slice(0, i)\n const position = droppableId.slice(i + 1)\n\n if (slug === event.active.id) {\n return\n }\n\n const moveFromIndex = currentLayout?.findIndex(\n (widget) => widget.item.id === event.active.id,\n )\n let moveToIndex = currentLayout?.findIndex((widget) => widget.item.id === slug)\n if (moveFromIndex < moveToIndex) {\n moveToIndex--\n }\n if (position === 'after') {\n moveToIndex++\n }\n moveWidget({ moveFromIndex, moveToIndex })\n setActiveDragId(null)\n }}\n onDragStart={(event) => {\n setActiveDragId(event.active.id as string)\n }}\n sensors={sensors}\n >\n <div\n className={`modular-dashboard ${isEditing ? 'editing' : ''}`}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n // Don't add gap here! We need to use padding on the widgets instead\n // to make sure all rows have the same width always.\n }}\n >\n {currentLayout?.length === 0 && (\n <div className=\"modular-dashboard__empty\">\n <p>\n There are no widgets on your dashboard. You can add them from the \"Dashboard\" menu\n located in the top bar.\n </p>\n </div>\n )}\n {currentLayout?.map((widget, _index) => (\n <React.Fragment key={widget.item.id}>\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n padding: '6px',\n }}\n width={widget.item.width}\n >\n <div className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}>\n <div aria-hidden={isEditing} className=\"widget-content\" inert={isEditing}>\n {widget.component}\n </div>\n {isEditing && (\n <div\n className=\"widget-wrapper__controls\"\n onPointerDown={(e) => e.stopPropagation()}\n >\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n />\n <button\n className=\"widget-wrapper__delete-btn\"\n onClick={() => deleteWidget(widget.item.id)}\n type=\"button\"\n >\n <span className=\"sr-only\">\n {t('dashboard:deleteWidget', { id: widget.item.id })}\n </span>\n <XIcon />\n </button>\n </div>\n )}\n </div>\n </DraggableItem>\n </React.Fragment>\n ))}\n <DragOverlay\n className=\"drag-overlay\"\n dropAnimation={{\n duration: 100,\n }}\n // Uses custom modifier that only applies for pointer, not keyboard navigation.\n modifiers={[snapCenterToCursorOnlyForPointer]}\n >\n {activeDragId\n ? (() => {\n const draggedWidget = currentLayout?.find(\n (widget) => widget.item.id === activeDragId,\n )\n return draggedWidget ? (\n <div\n style={{\n transform: 'scale(0.25)',\n }}\n >\n <div\n className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}\n >\n <div className=\"widget-content\">{draggedWidget.component}</div>\n </div>\n </div>\n ) : null\n })()\n : null}\n </DragOverlay>\n </div>\n </DndContext>\n <DashboardStepNav\n addWidget={addWidget}\n cancel={cancel}\n isEditing={isEditing}\n resetLayout={resetLayout}\n saveLayout={saveLayout}\n setIsEditing={setIsEditing}\n widgets={widgets}\n />\n {cancelModal}\n </div>\n )\n}\n\nfunction WidgetWidthDropdown({\n currentWidth,\n maxWidth,\n minWidth,\n onResize,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onResize: (width: WidgetWidth) => void\n}) {\n // Filter options based on minWidth and maxWidth\n const validOptions = useMemo(() => {\n const minPercentage = WIDTH_TO_PERCENTAGE[minWidth]\n const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth]\n\n return Object.entries(WIDTH_TO_PERCENTAGE)\n .map(([key, value]) => ({\n width: key as WidgetWidth,\n percentage: value,\n }))\n .filter((option) => option.percentage >= minPercentage && option.percentage <= maxPercentage)\n }, [minWidth, maxWidth])\n\n const isDisabled = validOptions.length <= 1\n\n return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\n disabled={isDisabled}\n onPointerDown={(e) => e.stopPropagation()}\n type=\"button\"\n >\n <span className=\"widget-wrapper__size-btn-text\">{currentWidth}</span>\n <ChevronIcon className=\"widget-wrapper__size-btn-icon\" />\n </button>\n }\n buttonType=\"custom\"\n disabled={isDisabled}\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {validOptions.map((option) => {\n const isSelected = option.width === currentWidth\n return (\n <PopupList.Button\n active={isSelected}\n key={option.width}\n onClick={() => {\n onResize(option.width)\n close()\n }}\n >\n <span className=\"widget-wrapper__size-btn-label\">{option.width}</span>\n <span className=\"widget-wrapper__size-btn-percentage\">\n {option.percentage.toFixed(0)}%\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: React.ReactNode\n disabled?: boolean\n id: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { attributes, isDragging, listeners, setNodeRef } = useDraggable({\n id: props.id,\n disabled: props.disabled,\n })\n\n const mergedStyles: React.CSSProperties = {\n ...props.style,\n opacity: isDragging ? 0.3 : 1,\n position: 'relative',\n }\n\n // Only apply draggable attributes and listeners when not disabled\n // to prevent disabling interactive elements inside the widget\n const draggableProps = props.disabled ? {} : { ...listeners, ...attributes }\n\n return (\n <div className=\"widget\" data-slug={props.id} data-width={props.width} style={mergedStyles}>\n <DroppableItem id={props.id} position=\"before\" />\n <div\n className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n {...draggableProps}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n {props.children}\n </div>\n <DroppableItem id={props.id} position=\"after\" />\n </div>\n )\n}\n\nfunction DroppableItem({ id, position }: { id: string; position: 'after' | 'before' }) {\n const { setNodeRef, isOver } = useDroppable({ id: `${id}-${position}`, data: { position } })\n\n return (\n <div\n className=\"droppable-widget\"\n data-testid={`${id}-${position}`}\n ref={setNodeRef}\n style={{\n position: 'absolute',\n left: position === 'before' ? -2 : 'auto',\n right: position === 'after' ? -2 : 'auto',\n top: 0,\n bottom: 0,\n borderRadius: '1000px',\n width: '4px',\n backgroundColor: isOver ? 'var(--theme-success-400)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAKA,SAASC,UAAU,EAAEC,WAAW,EAAEC,YAAY,EAAEC,YAAY,QAAQ;AACpE,SAASC,kBAAkB,QAAQ;AACnC,SAASC,WAAW,EAAEC,KAAK,EAAEC,SAAS,EAAEC,cAAc,EAAEC,KAAK,QAAQ;AACrE,OAAOC,KAAA,IAASC,OAAO,EAAEC,QAAQ,QAAQ;AAEzC;;;;AAIA,MAAMC,gCAAA,GAA8CC,IAAA;EAClD,MAAM;IAAEC;EAAc,CAAE,GAAGD,IAAA;EAE3B;EACA;EACA,IAAIC,cAAA,IAAkB,SAASA,cAAA,EAAgB;IAC7C,OAAOD,IAAA,CAAKE,SAAS;EACvB;EAEA,OAAOZ,kBAAA,CAAmBU,IAAA;AAC5B;AAEA,SAASG,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,mBAAmB,QAAQ;AAmBpC;AACA,MAAMC,mBAAA,GAAsB;EAC1B,WAAW;EACXC,KAAA,EAAO,CAAC,GAAI,IAAK;EACjBC,MAAA,EAAQ;EACRC,KAAA,EAAO,CAAC,GAAI,IAAK;EACjB,WAAW;EACXC,IAAA,EAAM;AACR;AAEA,OAAO,SAAAC,uBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAA7B,EAAA;EAAgC;IAAA8B,YAAA,EAAAC,aAAA;IAAAC;EAAA,IAAAJ,EAMtC;EACC;IAAAK;EAAA,IAAcxB,cAAA;EACd;IAAAyB,SAAA;IAAAC,MAAA;IAAAC,WAAA;IAAAC,aAAA;IAAAC,YAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,WAAA;IAAAC,YAAA;IAAAC,UAAA;IAAAC;EAAA,IAYIzB,kBAAA,CAAmBY,aAAA;EAEvB,OAAAc,YAAA,EAAAC,eAAA,IAAwCjC,QAAA,KAAwB;EAChE,MAAAkC,OAAA,GAAgB1B,mBAAA;EAAA,IAAA2B,EAAA;EAAA,IAAAnB,CAAA,QAAAgB,YAAA,IAAAhB,CAAA,QAAAK,SAAA,IAAAL,CAAA,QAAAM,MAAA,IAAAN,CAAA,QAAAO,WAAA,IAAAP,CAAA,QAAAQ,aAAA,IAAAR,CAAA,QAAAS,YAAA,IAAAT,CAAA,QAAAU,SAAA,IAAAV,CAAA,QAAAW,UAAA,IAAAX,CAAA,QAAAY,WAAA,IAAAZ,CAAA,QAAAa,YAAA,IAAAb,CAAA,SAAAc,UAAA,IAAAd,CAAA,SAAAkB,OAAA,IAAAlB,CAAA,SAAAe,YAAA,IAAAf,CAAA,SAAAI,CAAA,IAAAJ,CAAA,SAAAG,OAAA;IAAA,IAAAiB,EAAA;IAAA,IAAApB,CAAA,SAAAqB,MAAA,CAAAC,GAAA;MAeIF,EAAA,GAAAA,CAAA;QACZH,eAAA,KAAgB;MAAA;MAClBjB,CAAA,OAAAoB,EAAA;IAAA;MAAAA,EAAA,GAAApB,CAAA;IAAA;IAAA,IAAAuB,EAAA;IAAA,IAAAvB,CAAA,SAAAQ,aAAA,IAAAR,CAAA,SAAAW,UAAA;MACWY,EAAA,GAAAC,KAAA;QAAA,KACJA,KAAA,CAAAC,IAAA;UACHR,eAAA,KAAgB;UAAA;QAAA;QAGlB,MAAAS,WAAA,GAAoBF,KAAA,CAAAC,IAAA,CAAAE,EAAA;QACpB,MAAAC,CAAA,GAAUF,WAAA,CAAAG,WAAA,CAAwB;QAClC,MAAAC,IAAA,GAAaJ,WAAA,CAAAK,KAAA,IAAqBH,CAAA;QAClC,MAAAI,QAAA,GAAiBN,WAAA,CAAAK,KAAA,CAAkBH,CAAA,IAAI;QAAA,IAEnCE,IAAA,KAASN,KAAA,CAAAS,MAAA,CAAAN,EAAe;UAAA;QAAA;QAI5B,MAAAO,aAAA,GAAsB1B,aAAA,EAAA2B,SAAA,CAAAC,MAAA,IACRA,MAAA,CAAAC,IAAA,CAAAV,EAAA,KAAmBH,KAAA,CAAAS,MAAA,CAAAN,EAAe;QAEhD,IAAAW,WAAA,GAAkB9B,aAAA,EAAA2B,SAAA,CAAAI,QAAA,IAAqCH,QAAA,CAAAC,IAAA,CAAAV,EAAA,KAAmBG,IAAA;QAAA,IACtEI,aAAA,GAAgBI,WAAA;UAClBA,WAAA;QAAA;QAAA,IAEEN,QAAA,KAAa;UACfM,WAAA;QAAA;QAEF3B,UAAA;UAAAuB,aAAA;UAAAI;QAAA,CAAwC;QACxCrB,eAAA,KAAgB;MAAA;MAClBjB,CAAA,OAAAQ,aAAA;MAAAR,CAAA,OAAAW,UAAA;MAAAX,CAAA,OAAAuB,EAAA;IAAA;MAAAA,EAAA,GAAAvB,CAAA;IAAA;IAAA,IAAAwC,EAAA;IAAA,IAAAxC,CAAA,SAAAqB,MAAA,CAAAC,GAAA;MACakB,EAAA,GAAAC,OAAA;QACXxB,eAAA,CAAgBO,OAAA,CAAAS,MAAA,CAAAN,EAAe;MAAA;MACjC3B,CAAA,OAAAwC,EAAA;IAAA;MAAAA,EAAA,GAAAxC,CAAA;IAAA;IA5CJmB,EAAA,GAAAuB,KAAA,CAAC;MAAAC,QAAA,GACCC,IAAA,CAAAxE,UAAA;QAAAyE,UAAA;UAAAC,OAAA;UAAAC,SAAA;YAAAC,CAAA;YAAAC,CAAA;UAAA;QAAA;QAAAC,kBAAA,EAAA3D,cAAA;QAAAoC,EAAA,EAUK;QAAAwB,YAAA,EACW/B,EAEd;QAAAgC,SAAA,EACW7B,EA0BX;QAAA8B,WAAA,EACab,EAEb;QAAAtB,OAAA;QAAAyB,QAAA,EAGAD,KAAA,CAAC;UAAAY,SAAA,EACY,qBAAqB5C,SAAA,GAAY,YAAY,IAAI;UAAA6C,KAAA;YAAAC,OAAA,EAEjD;YAAAC,QAAA,EACC;UAAA;UAAAd,QAAA,GAKXnC,aAAA,EAAAkD,MAAA,MAA0B,IACzBd,IAAA,CAAC;YAAAU,SAAA,EAAc;YAAAX,QAAA,EACbC,IAAA,CAAC;cAAAD,QAAA,EAAE;YAAA,C;cAMNnC,aAAA,EAAAmD,GAAA,EAAAC,QAAA,EAAAC,MAAA,KACCjB,IAAA,CAAA9D,KAAA,CAAAgF,QAAA;YAAAnB,QAAA,EACEC,IAAA,CAAAmB,aAAA;cAAAC,QAAA,GACatD,SAAA;cAAAiB,EAAA,EACPS,QAAA,CAAAC,IAAA,CAAAV,EAAA;cAAA4B,KAAA;gBAAAU,KAAA,EAEK,GAAAxE,mBAAA,CAAuB2C,QAAA,CAAAC,IAAA,CAAA4B,KAAA,IAAqB;gBAAAC,OAAA,EAC1C;cAAA;cAAAD,KAAA,EAEJ7B,QAAA,CAAAC,IAAA,CAAA4B,KAAA;cAAAtB,QAAA,EAEPD,KAAA,CAAC;gBAAAY,SAAA,EAAe,kBAAkB5C,SAAA,GAAY,4BAA4B,IAAI;gBAAAiC,QAAA,GAC5EC,IAAA,CAAC;kBAAA,eAAiBlC,SAAA;kBAAA4C,SAAA,EAAqB;kBAAAa,KAAA,EAAwBzD,SAAA;kBAAAiC,QAAA,EAC5DP,QAAA,CAAAgC;gBAAA,C,GAEF1D,SAAA,IACCgC,KAAA,CAAC;kBAAAY,SAAA,EACW;kBAAAe,aAAA,EAAAC,KAAA;kBAAA3B,QAAA,GAGVC,IAAA,CAAA2B,mBAAA;oBAAAC,YAAA,EACgBpC,QAAA,CAAAC,IAAA,CAAA4B,KAAA;oBAAAQ,QAAA,EACJrC,QAAA,CAAAC,IAAA,CAAAoC,QAAA;oBAAAC,QAAA,EACAtC,QAAA,CAAAC,IAAA,CAAAqC,QAAA;oBAAAC,QAAA,EAAAV,KAAA,IACWpD,YAAA,CAAauB,QAAA,CAAAC,IAAA,CAAAV,EAAA,EAAgBsC,KAAA;kBAAA,C,GAEpDvB,KAAA,CAAC;oBAAAY,SAAA,EACW;oBAAAsB,OAAA,EAAAA,CAAA,KACKnE,YAAA,CAAa2B,QAAA,CAAAC,IAAA,CAAAV,EAAc;oBAAAkD,IAAA,EACrC;oBAAAlC,QAAA,GAELC,IAAA,CAAC;sBAAAU,SAAA,EAAe;sBAAAX,QAAA,EACbvC,CAAA,CAAE;wBAAAuB,EAAA,EAAgCS,QAAA,CAAAC,IAAA,CAAAV;sBAAA,CAAe;oBAAA,C,GAEpDiB,IAAA,CAAA/D,KAAA,IAAC;kBAAA,C;;;;aAjCQuD,QAAA,CAAAC,IAAA,CAAAV,EAAc,IAyCrCiB,IAAA,CAAAvE,WAAA;YAAAiF,SAAA,EACY;YAAAwB,aAAA;cAAAC,QAAA;YAAA;YAAAC,SAAA,GAAA/F,gCAAA;YAAA0D,QAAA,EAOT3B,YAAA,GACG;cACE,MAAAiE,aAAA,GAAsBzE,aAAA,EAAA0E,IAAA,CAAAC,QAAA,IACR/C,QAAA,CAAAC,IAAA,CAAAV,EAAA,KAAmBX,YAAA;cAAA,OAE1BiE,aAAA,GACLrC,IAAA,CAAC;gBAAAW,KAAA;kBAAAnE,SAAA,EAEc;gBAAA;gBAAAuD,QAAA,EAGbC,IAAA,CAAC;kBAAAU,SAAA,EACY,kBAAkB5C,SAAA,GAAY,4BAA4B,IAAI;kBAAAiC,QAAA,EAEzEC,IAAA,CAAC;oBAAAU,SAAA,EAAc;oBAAAX,QAAA,EAAkBsC,aAAA,CAAAb;kBAAA,C;;uBAGnC;YAAA,GACN;UACA,C;;UAIVxB,IAAA,CAAAvD,gBAAA;QAAAgB,SAAA;QAAAC,MAAA;QAAAI,SAAA;QAAAE,WAAA;QAAAE,UAAA;QAAAC,YAAA;QAAAZ;MAAA,C,GASCI,WAAA;IAAA,C;;;;;;;;;;;;;;;;;;;;SAlJHY,E;;AA1BG,SAAAmD,MAAAc,CAAA;EAAA,OA4GqCA,CAAA,CAAAC,eAAA,CAAiB;AAAA;AAqE7D,SAASd,oBAAoB;EAC3BC,YAAY;EACZC,QAAQ;EACRC,QAAQ;EACRC;AAAQ,CAMT;EACC;EACA,MAAMW,YAAA,GAAevG,OAAA,CAAQ;IAC3B,MAAMwG,aAAA,GAAgB9F,mBAAmB,CAACiF,QAAA,CAAS;IACnD,MAAMc,aAAA,GAAgB/F,mBAAmB,CAACgF,QAAA,CAAS;IAEnD,OAAOgB,MAAA,CAAOC,OAAO,CAACjG,mBAAA,EACnBkE,GAAG,CAAC,CAAC,CAACgC,GAAA,EAAKC,KAAA,CAAM,MAAM;MACtB3B,KAAA,EAAO0B,GAAA;MACPE,UAAA,EAAYD;IACd,IACCE,MAAM,CAAEC,MAAA,IAAWA,MAAA,CAAOF,UAAU,IAAIN,aAAA,IAAiBQ,MAAA,CAAOF,UAAU,IAAIL,aAAA;EACnF,GAAG,CAACd,QAAA,EAAUD,QAAA,CAAS;EAEvB,MAAMuB,UAAA,GAAaV,YAAA,CAAa5B,MAAM,IAAI;EAE1C,oBACEd,IAAA,CAAClE,KAAA;IACCuH,MAAA,eACEvD,KAAA,CAAC;MACCY,SAAA,EAAU;MACVU,QAAA,EAAUgC,UAAA;MACV3B,aAAA,EAAgBe,CAAA,IAAMA,CAAA,CAAEC,eAAe;MACvCR,IAAA,EAAK;8BAELjC,IAAA,CAAC;QAAKU,SAAA,EAAU;kBAAiCkB;uBACjD5B,IAAA,CAACnE,WAAA;QAAY6E,SAAA,EAAU;;;IAG3B4C,UAAA,EAAW;IACXlC,QAAA,EAAUgC,UAAA;IACVG,MAAA,EAAQA,CAAC;MAAEC;IAAK,CAAE,kBAChBxD,IAAA,CAACjE,SAAA,CAAU0H,WAAW;gBACnBf,YAAA,CAAa3B,GAAG,CAAEoC,QAAA;QACjB,MAAMO,UAAA,GAAaP,QAAA,CAAO9B,KAAK,KAAKO,YAAA;QACpC,oBACE9B,KAAA,CAAC/D,SAAA,CAAU4H,MAAM;UACftE,MAAA,EAAQqE,UAAA;UAER1B,OAAA,EAASA,CAAA;YACPD,QAAA,CAASoB,QAAA,CAAO9B,KAAK;YACrBmC,KAAA;UACF;kCAEAxD,IAAA,CAAC;YAAKU,SAAA,EAAU;sBAAkCyC,QAAA,CAAO9B;2BACzDvB,KAAA,CAAC;YAAKY,SAAA,EAAU;uBACbyC,QAAA,CAAOF,UAAU,CAACW,OAAO,CAAC,IAAG;;WAR3BT,QAAA,CAAO9B,KAAK;MAYvB;;IAGJwC,IAAA,EAAK;IACLC,aAAA,EAAc;;AAGpB;AAEA,SAAA3C,cAAA4C,KAAA;EAAA,MAAA3G,CAAA,GAAA7B,EAAA;EAAA,IAAA4B,EAAA;EAAA,IAAAC,CAAA,QAAA2G,KAAA,CAAA3C,QAAA,IAAAhE,CAAA,QAAA2G,KAAA,CAAAhF,EAAA;IAOyE5B,EAAA;MAAA4B,EAAA,EACjEgF,KAAA,CAAAhF,EAAA;MAAAqC,QAAA,EACM2C,KAAA,CAAA3C;IAAA;IACZhE,CAAA,MAAA2G,KAAA,CAAA3C,QAAA;IAAAhE,CAAA,MAAA2G,KAAA,CAAAhF,EAAA;IAAA3B,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAHA;IAAA4G,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC;EAAA,IAA0DzI,YAAA,CAAayB,EAGvE;EAIW,MAAAoB,EAAA,GAAA0F,UAAA,UAAmB;EAAA,IAAAzF,EAAA;EAAA,IAAApB,CAAA,QAAA4G,UAAA,IAAA5G,CAAA,QAAA8G,SAAA,IAAA9G,CAAA,QAAA2G,KAAA,CAAAhE,QAAA,IAAA3C,CAAA,QAAA2G,KAAA,CAAA3C,QAAA,IAAAhE,CAAA,QAAA2G,KAAA,CAAAhF,EAAA,IAAA3B,CAAA,QAAA2G,KAAA,CAAApD,KAAA,IAAAvD,CAAA,QAAA2G,KAAA,CAAA1C,KAAA,IAAAjE,CAAA,SAAA+G,UAAA,IAAA/G,CAAA,SAAAmB,EAAA;IAF9B,MAAA6F,YAAA;MAAA,GACKL,KAAA,CAAApD,KAAA;MAAA0D,OAAA,EACM9F,EAAmB;MAAAa,QAAA,EAClB;IAAA;IAKZ,MAAAkF,cAAA,GAAuBP,KAAA,CAAA3C,QAAA;MAAA,GAA2B8C,SAAS;MAAA,GAAKF;IAAU,CAAC;IAGzExF,EAAA,GAAAsB,KAAA,CAAC;MAAAY,SAAA,EAAc;MAAA,aAAoBqD,KAAA,CAAAhF,EAAA;MAAA,cAAsBgF,KAAA,CAAA1C,KAAA;MAAAV,KAAA,EAAoByD,YAAA;MAAArE,QAAA,GAC3EC,IAAA,CAAAuE,aAAA;QAAAxF,EAAA,EAAmBgF,KAAA,CAAAhF,EAAA;QAAAK,QAAA,EAAmB;MAAA,C,GACtCY,IAAA,CAAC;QAAAU,SAAA,EACW;QAAA3B,EAAA,EACNgF,KAAA,CAAAhF,EAAA;QAAAyF,GAAA,EACCL,UAAA;QAAA,GACDG,cAAc;QAAA3D,KAAA;UAAAU,KAAA,EAET;UAAAoD,MAAA,EACC;QAAA;QAAA1E,QAAA,EAGTgE,KAAA,CAAAhE;MAAA,C,GAEHC,IAAA,CAAAuE,aAAA;QAAAxF,EAAA,EAAmBgF,KAAA,CAAAhF,EAAA;QAAAK,QAAA,EAAmB;MAAA,C;;;;;;;;;;;;;;;SAdxCZ,E;;AAmBJ,SAAA+F,cAAApH,EAAA;EAAA,MAAAC,CAAA,GAAA7B,EAAA;EAAuB;IAAAwD,EAAA;IAAAK;EAAA,IAAAjC,EAA8D;EACjC,MAAAoB,EAAA,MAAGQ,EAAA,IAAMK,QAAA,EAAU;EAAA,IAAAZ,EAAA;EAAA,IAAApB,CAAA,QAAAgC,QAAA;IAAQZ,EAAA;MAAAY;IAAA;IAAWhC,CAAA,MAAAgC,QAAA;IAAAhC,CAAA,MAAAoB,EAAA;EAAA;IAAAA,EAAA,GAAApB,CAAA;EAAA;EAAA,IAAAuB,EAAA;EAAA,IAAAvB,CAAA,QAAAmB,EAAA,IAAAnB,CAAA,QAAAoB,EAAA;IAA5CG,EAAA;MAAAI,EAAA,EAAMR,EAAmB;MAAAmG,IAAA,EAAQlG;IAAW;IAAEpB,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAAoB,EAAA;IAAApB,CAAA,MAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAA1F;IAAA+G,UAAA;IAAAQ;EAAA,IAA+BhJ,YAAA,CAAagD,EAA8C;EAKzE,MAAAiB,EAAA,MAAGb,EAAA,IAAMK,QAAA,EAAU;EAIxB,MAAAwF,EAAA,GAAAxF,QAAA,KAAa,gBAAgB;EAC5B,MAAAyF,EAAA,GAAAzF,QAAA,KAAa,eAAe;EAKlB,MAAA0F,EAAA,GAAAH,MAAA,GAAS,6BAA6B;EAAA,IAAAI,EAAA;EAAA,IAAA3H,CAAA,QAAA+G,UAAA,IAAA/G,CAAA,QAAAwC,EAAA,IAAAxC,CAAA,QAAAwH,EAAA,IAAAxH,CAAA,QAAAyH,EAAA,IAAAzH,CAAA,QAAA0H,EAAA;IAZ3DC,EAAA,GAAA/E,IAAA,CAAC;MAAAU,SAAA,EACW;MAAA,eACGd,EAAmB;MAAA4E,GAAA,EAC3BL,UAAA;MAAAxD,KAAA;QAAAvB,QAAA,EAEO;QAAA4F,IAAA,EACJJ,EAA6B;QAAAK,KAAA,EAC5BJ,EAA4B;QAAAK,GAAA;QAAAC,MAAA;QAAAC,YAAA,EAGrB;QAAA/D,KAAA,EACP;QAAAgE,eAAA,EACUP,EAAsC;QAAAQ,YAAA,EACzC;QAAAC,SAAA,EACH;QAAAC,aAAA,EACI;QAAAC,MAAA;MAAA;IAAA,C;;;;;;;;;;SAfnBV,E","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { DashboardViewServerProps } from '../index.js';
3
+ import './index.scss';
4
+ export declare function ModularDashboard(props: DashboardViewServerProps): Promise<React.JSX.Element>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAK3D,OAAO,cAAc,CAAA;AAIrB,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,8BA0CrE"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
3
+ import React from 'react';
4
+ import { getPreferences } from '../../../../utilities/getPreferences.js';
5
+ import { ModularDashboardClient } from './index.client.js';
6
+ export async function ModularDashboard(props) {
7
+ const {
8
+ defaultLayout = [],
9
+ widgets = []
10
+ } = props.payload.config.admin.dashboard || {};
11
+ const {
12
+ importMap
13
+ } = props.payload;
14
+ const {
15
+ user
16
+ } = props;
17
+ const {
18
+ req
19
+ } = props.initPageResult;
20
+ const {
21
+ i18n
22
+ } = req;
23
+ const layout = (await getItemsFromPreferences(props.payload, user)) ?? (await getItemsFromConfig(defaultLayout, req, widgets));
24
+ const serverLayout = layout.map(layoutItem => {
25
+ const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
26
+ return {
27
+ component: RenderServerComponent({
28
+ Component: widgets.find(widget => widget.slug === widgetSlug)?.ComponentPath,
29
+ importMap,
30
+ serverProps: {
31
+ req,
32
+ widgetSlug
33
+ }
34
+ }),
35
+ item: layoutItem
36
+ };
37
+ });
38
+ // Resolve function labels to static labels for client components
39
+ const clientWidgets = widgets.map(widget => {
40
+ const {
41
+ ComponentPath: _,
42
+ label,
43
+ ...rest
44
+ } = widget;
45
+ return {
46
+ ...rest,
47
+ label: typeof label === 'function' ? label({
48
+ i18n,
49
+ t: i18n.t
50
+ }) : label
51
+ };
52
+ });
53
+ return /*#__PURE__*/_jsx("div", {
54
+ children: /*#__PURE__*/_jsx(ModularDashboardClient, {
55
+ clientLayout: serverLayout,
56
+ widgets: clientWidgets
57
+ })
58
+ });
59
+ }
60
+ async function getItemsFromPreferences(payload, user) {
61
+ const savedPreferences = await getPreferences('dashboard-layout', payload, user.id, user.collection);
62
+ if (!savedPreferences?.value || typeof savedPreferences.value !== 'object' || !('layouts' in savedPreferences.value)) {
63
+ return null;
64
+ }
65
+ return savedPreferences.value.layouts;
66
+ }
67
+ async function getItemsFromConfig(defaultLayout, req, widgets) {
68
+ // Handle function format
69
+ let widgetInstances;
70
+ if (typeof defaultLayout === 'function') {
71
+ widgetInstances = await defaultLayout({
72
+ req
73
+ });
74
+ } else {
75
+ widgetInstances = defaultLayout;
76
+ }
77
+ return widgetInstances.map((widgetInstance, index) => {
78
+ const widget = widgets.find(widget => widget.slug === widgetInstance.widgetSlug);
79
+ return {
80
+ id: `${widgetInstance.widgetSlug}-${index}`,
81
+ maxWidth: widget?.maxWidth ?? 'full',
82
+ minWidth: widget?.minWidth ?? 'x-small',
83
+ width: widgetInstance.width || 'x-small'
84
+ };
85
+ });
86
+ }
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["RenderServerComponent","React","getPreferences","ModularDashboardClient","ModularDashboard","props","defaultLayout","widgets","payload","config","admin","dashboard","importMap","user","req","initPageResult","i18n","layout","getItemsFromPreferences","getItemsFromConfig","serverLayout","map","layoutItem","widgetSlug","id","slice","lastIndexOf","component","Component","find","widget","slug","ComponentPath","serverProps","item","clientWidgets","_","label","rest","t","_jsx","clientLayout","savedPreferences","collection","value","layouts","widgetInstances","widgetInstance","index","maxWidth","minWidth","width"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.tsx"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type {\n BasePayload,\n ClientWidget,\n DashboardConfig,\n PayloadRequest,\n TypedUser,\n Widget,\n WidgetInstance,\n WidgetServerProps,\n} from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport React from 'react'\n\nimport type { DashboardViewServerProps } from '../index.js'\nimport type { WidgetInstanceClient, WidgetItem } from './index.client.js'\n\nimport { getPreferences } from '../../../../utilities/getPreferences.js'\nimport { ModularDashboardClient } from './index.client.js'\nimport './index.scss'\n\ntype ServerLayout = WidgetInstanceClient[]\n\nexport async function ModularDashboard(props: DashboardViewServerProps) {\n const { defaultLayout = [], widgets = [] } = props.payload.config.admin.dashboard || {}\n const { importMap } = props.payload\n const { user } = props\n const { req } = props.initPageResult\n const { i18n } = req\n\n const layout =\n (await getItemsFromPreferences(props.payload, user)) ??\n (await getItemsFromConfig(defaultLayout, req, widgets))\n\n const serverLayout: ServerLayout = layout.map((layoutItem) => {\n const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'))\n return {\n component: RenderServerComponent({\n Component: widgets.find((widget) => widget.slug === widgetSlug)?.ComponentPath,\n importMap,\n serverProps: {\n req,\n widgetSlug,\n // TODO: widgets will support state in the future\n // widgetData: layoutItem.data,\n } satisfies WidgetServerProps,\n }),\n item: layoutItem,\n }\n })\n\n // Resolve function labels to static labels for client components\n const clientWidgets: ClientWidget[] = widgets.map((widget) => {\n const { ComponentPath: _, label, ...rest } = widget\n return {\n ...rest,\n label: typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n })\n\n return (\n <div>\n <ModularDashboardClient clientLayout={serverLayout} widgets={clientWidgets} />\n </div>\n )\n}\n\nasync function getItemsFromPreferences(\n payload: BasePayload,\n user: TypedUser,\n): Promise<null | WidgetItem[]> {\n const savedPreferences = await getPreferences(\n 'dashboard-layout',\n payload,\n user.id,\n user.collection,\n )\n if (\n !savedPreferences?.value ||\n typeof savedPreferences.value !== 'object' ||\n !('layouts' in savedPreferences.value)\n ) {\n return null\n }\n return savedPreferences.value.layouts as null | WidgetItem[]\n}\n\nasync function getItemsFromConfig(\n defaultLayout: NonNullable<DashboardConfig['defaultLayout']>,\n req: PayloadRequest,\n widgets: Widget[],\n): Promise<WidgetItem[]> {\n // Handle function format\n let widgetInstances: WidgetInstance[]\n if (typeof defaultLayout === 'function') {\n widgetInstances = await defaultLayout({ req })\n } else {\n widgetInstances = defaultLayout\n }\n\n return widgetInstances.map((widgetInstance, index) => {\n const widget = widgets.find((widget) => widget.slug === widgetInstance.widgetSlug)\n return {\n id: `${widgetInstance.widgetSlug}-${index}`,\n maxWidth: widget?.maxWidth ?? 'full',\n minWidth: widget?.minWidth ?? 'x-small',\n width: widgetInstance.width || 'x-small',\n }\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ /**
3
+ * Utility to render a widget on-demand on the client.
4
+ */
5
+ export declare const RenderWidget: React.FC<{
6
+ /**
7
+ * Instance-specific data for this widget
8
+ */
9
+ /**
10
+ * Unique ID for this widget instance (format: "slug-timestamp")
11
+ */
12
+ widgetId: string;
13
+ }>;
14
+ //# sourceMappingURL=RenderWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderWidget.d.ts","sourceRoot":"","sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAO7D;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC;;OAEG;IAEH;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB,CA2DA,CAAA"}