@payloadcms/next 3.80.0-canary.4 → 3.80.0-internal-debug.daef79f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/login.js +52 -58
- package/dist/auth/login.js.map +1 -1
- package/dist/auth/logout.js +39 -44
- package/dist/auth/logout.js.map +1 -1
- package/dist/auth/refresh.js +45 -47
- package/dist/auth/refresh.js.map +1 -1
- package/dist/cjs/withPayload.cjs +65 -24
- package/dist/cjs/withPayload.cjs.map +2 -2
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +9 -15
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +40 -71
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +65 -59
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.scss +38 -0
- package/dist/elements/DocumentHeader/Tabs/index.js +80 -70
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.scss +54 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +16 -23
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss +10 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +61 -69
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.js +48 -28
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.scss +64 -0
- package/dist/elements/FormHeader/index.js +30 -16
- package/dist/elements/FormHeader/index.js.map +1 -1
- package/dist/elements/FormHeader/index.scss +8 -0
- package/dist/elements/Logo/index.js +19 -34
- package/dist/elements/Logo/index.js.map +1 -1
- package/dist/elements/Nav/NavHamburger/index.js +23 -44
- package/dist/elements/Nav/NavHamburger/index.js.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.js +28 -54
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.scss +27 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js +33 -39
- package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
- package/dist/elements/Nav/SettingsMenuButton/index.scss +11 -0
- package/dist/elements/Nav/getNavPrefs.js +27 -22
- package/dist/elements/Nav/getNavPrefs.js.map +1 -1
- package/dist/elements/Nav/index.client.js +97 -118
- package/dist/elements/Nav/index.client.js.map +1 -1
- package/dist/elements/Nav/index.js +191 -170
- package/dist/elements/Nav/index.js.map +1 -1
- package/dist/elements/Nav/index.scss +173 -0
- package/dist/esbuildEntry.d.ts +5 -0
- package/dist/esbuildEntry.d.ts.map +1 -0
- package/dist/esbuildEntry.js +6 -0
- package/dist/esbuildEntry.js.map +1 -0
- package/dist/exports/auth.js +1 -0
- package/dist/exports/auth.js.map +1 -1
- package/dist/exports/client.js +1 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/layouts.js +1 -0
- package/dist/exports/layouts.js.map +1 -1
- package/dist/exports/routes.js +1 -0
- package/dist/exports/routes.js.map +1 -1
- package/dist/exports/rsc.js +1 -0
- package/dist/exports/rsc.js.map +1 -1
- package/dist/exports/templates.js +1 -0
- package/dist/exports/templates.js.map +1 -1
- package/dist/exports/utilities.js +7 -12
- package/dist/exports/utilities.js.map +1 -1
- package/dist/exports/views.js +1 -0
- package/dist/exports/views.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/layouts/Root/NestProviders.js +21 -20
- package/dist/layouts/Root/NestProviders.js.map +1 -1
- package/dist/layouts/Root/checkDependencies.js +49 -41
- package/dist/layouts/Root/checkDependencies.js.map +1 -1
- package/dist/layouts/Root/index.js +128 -103
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/prod/styles.css +5 -1
- package/dist/routes/graphql/handler.js +114 -122
- package/dist/routes/graphql/handler.js.map +1 -1
- package/dist/routes/graphql/index.js +1 -0
- package/dist/routes/graphql/index.js.map +1 -1
- package/dist/routes/graphql/playground.js +28 -27
- package/dist/routes/graphql/playground.js.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/rest/index.js +23 -22
- package/dist/routes/rest/index.js.map +1 -1
- package/dist/routes/rest/og/image.js +103 -79
- package/dist/routes/rest/og/image.js.map +1 -1
- package/dist/routes/rest/og/index.js +59 -54
- package/dist/routes/rest/og/index.js.map +1 -1
- package/dist/templates/Default/NavHamburger/index.js +12 -20
- package/dist/templates/Default/NavHamburger/index.js.map +1 -1
- package/dist/templates/Default/Wrapper/index.js +20 -44
- package/dist/templates/Default/Wrapper/index.js.map +1 -1
- package/dist/templates/Default/Wrapper/index.scss +58 -0
- package/dist/templates/Default/index.js +147 -116
- package/dist/templates/Default/index.js.map +1 -1
- package/dist/templates/Default/index.scss +79 -0
- package/dist/templates/Minimal/index.js +26 -17
- package/dist/templates/Minimal/index.js.map +1 -1
- package/dist/templates/Minimal/index.scss +30 -0
- package/dist/utilities/getExistingAuthToken.js +3 -2
- package/dist/utilities/getExistingAuthToken.js.map +1 -1
- package/dist/utilities/getNextRequestI18n.js +12 -13
- package/dist/utilities/getNextRequestI18n.js.map +1 -1
- package/dist/utilities/getPayloadHMR.js +5 -5
- package/dist/utilities/getPayloadHMR.js.map +1 -1
- package/dist/utilities/getPreferences.js +27 -22
- package/dist/utilities/getPreferences.js.map +1 -1
- package/dist/utilities/getRequestLocale.js +13 -14
- package/dist/utilities/getRequestLocale.js.map +1 -1
- package/dist/utilities/getRequestTheme.js +19 -19
- package/dist/utilities/getRequestTheme.js.map +1 -1
- package/dist/utilities/getRouteWithoutAdmin.js +3 -5
- package/dist/utilities/getRouteWithoutAdmin.js.map +1 -1
- package/dist/utilities/handleAuthRedirect.js +22 -36
- package/dist/utilities/handleAuthRedirect.js.map +1 -1
- package/dist/utilities/handleServerFunctions.js +33 -43
- package/dist/utilities/handleServerFunctions.js.map +1 -1
- package/dist/utilities/initReq.js +78 -96
- package/dist/utilities/initReq.js.map +1 -1
- package/dist/utilities/isCustomAdminView.js +22 -26
- package/dist/utilities/isCustomAdminView.js.map +1 -1
- package/dist/utilities/isPublicAdminRoute.js +26 -20
- package/dist/utilities/isPublicAdminRoute.js.map +1 -1
- package/dist/utilities/meta.js +68 -63
- package/dist/utilities/meta.js.map +1 -1
- package/dist/utilities/selectiveCache.js +25 -26
- package/dist/utilities/selectiveCache.js.map +1 -1
- package/dist/utilities/setPayloadAuthCookie.js +19 -22
- package/dist/utilities/setPayloadAuthCookie.js.map +1 -1
- package/dist/utilities/slugify.js +24 -33
- package/dist/utilities/slugify.js.map +1 -1
- package/dist/utilities/timestamp.js +7 -6
- package/dist/utilities/timestamp.js.map +1 -1
- package/dist/views/API/LocaleSelector/index.js +17 -39
- package/dist/views/API/LocaleSelector/index.js.map +1 -1
- package/dist/views/API/RenderJSON/index.js +171 -126
- package/dist/views/API/RenderJSON/index.js.map +1 -1
- package/dist/views/API/RenderJSON/index.scss +129 -0
- package/dist/views/API/index.client.js +291 -199
- package/dist/views/API/index.client.js.map +1 -1
- package/dist/views/API/index.js +7 -2
- package/dist/views/API/index.js.map +1 -1
- package/dist/views/API/index.scss +119 -0
- package/dist/views/API/metadata.js +18 -23
- package/dist/views/API/metadata.js.map +1 -1
- package/dist/views/Account/ResetPreferences/index.js +78 -102
- package/dist/views/Account/ResetPreferences/index.js.map +1 -1
- package/dist/views/Account/Settings/LanguageSelector.js +18 -47
- package/dist/views/Account/Settings/LanguageSelector.js.map +1 -1
- package/dist/views/Account/Settings/index.js +60 -25
- package/dist/views/Account/Settings/index.js.map +1 -1
- package/dist/views/Account/Settings/index.scss +48 -0
- package/dist/views/Account/ToggleTheme/index.js +38 -55
- package/dist/views/Account/ToggleTheme/index.js.map +1 -1
- package/dist/views/Account/index.client.js +16 -32
- package/dist/views/Account/index.client.js.map +1 -1
- package/dist/views/Account/index.js +149 -162
- package/dist/views/Account/index.js.map +1 -1
- package/dist/views/Account/metadata.js +8 -12
- package/dist/views/Account/metadata.js.map +1 -1
- package/dist/views/BrowseByFolder/buildView.js +138 -157
- package/dist/views/BrowseByFolder/buildView.js.map +1 -1
- package/dist/views/BrowseByFolder/index.js +16 -16
- package/dist/views/BrowseByFolder/index.js.map +1 -1
- package/dist/views/BrowseByFolder/metadata.js +13 -15
- package/dist/views/BrowseByFolder/metadata.js.map +1 -1
- package/dist/views/CollectionFolders/buildView.js +122 -142
- package/dist/views/CollectionFolders/buildView.js.map +1 -1
- package/dist/views/CollectionFolders/index.js +16 -16
- package/dist/views/CollectionFolders/index.js.map +1 -1
- package/dist/views/CollectionFolders/metadata.js +18 -21
- package/dist/views/CollectionFolders/metadata.js.map +1 -1
- package/dist/views/CollectionFolders/renderFolderViewSlots.js +58 -61
- package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -1
- package/dist/views/CollectionTrash/index.js +17 -17
- package/dist/views/CollectionTrash/index.js.map +1 -1
- package/dist/views/CollectionTrash/metadata.js +18 -21
- package/dist/views/CollectionTrash/metadata.js.map +1 -1
- package/dist/views/CreateFirstUser/index.client.js +117 -103
- package/dist/views/CreateFirstUser/index.client.js.map +1 -1
- package/dist/views/CreateFirstUser/index.js +87 -81
- package/dist/views/CreateFirstUser/index.js.map +1 -1
- package/dist/views/CreateFirstUser/index.scss +21 -0
- package/dist/views/CreateFirstUser/metadata.js +8 -12
- package/dist/views/CreateFirstUser/metadata.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +145 -170
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js +144 -118
- package/dist/views/Dashboard/Default/ModularDashboard/WidgetConfigDrawer.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +59 -72
- package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +435 -414
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.js +54 -63
- package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/index.scss +318 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +65 -96
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +44 -54
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +65 -72
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +193 -175
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +31 -30
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js +18 -17
- package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromConfig.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js +6 -5
- package/dist/views/Dashboard/Default/ModularDashboard/utils/getItemsFromPreferences.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js +69 -74
- package/dist/views/Dashboard/Default/ModularDashboard/utils/localeUtils.js.map +1 -1
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +228 -234
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -1
- package/dist/views/Dashboard/Default/index.js +59 -45
- package/dist/views/Dashboard/Default/index.js.map +1 -1
- package/dist/views/Dashboard/index.js +46 -42
- package/dist/views/Dashboard/index.js.map +1 -1
- package/dist/views/Dashboard/metadata.js +10 -14
- package/dist/views/Dashboard/metadata.js.map +1 -1
- package/dist/views/Document/getCustomDocumentViewByKey.js +3 -2
- package/dist/views/Document/getCustomDocumentViewByKey.js.map +1 -1
- package/dist/views/Document/getCustomViewByRoute.js +27 -30
- package/dist/views/Document/getCustomViewByRoute.js.map +1 -1
- package/dist/views/Document/getDocPreferences.js +40 -41
- package/dist/views/Document/getDocPreferences.js.map +1 -1
- package/dist/views/Document/getDocumentData.js +44 -55
- package/dist/views/Document/getDocumentData.js.map +1 -1
- package/dist/views/Document/getDocumentPermissions.js +114 -117
- package/dist/views/Document/getDocumentPermissions.js.map +1 -1
- package/dist/views/Document/getDocumentView.js +313 -283
- package/dist/views/Document/getDocumentView.js.map +1 -1
- package/dist/views/Document/getIsLocked.js +73 -73
- package/dist/views/Document/getIsLocked.js.map +1 -1
- package/dist/views/Document/getMetaBySegment.js +130 -136
- package/dist/views/Document/getMetaBySegment.js.map +1 -1
- package/dist/views/Document/getVersions.js +220 -213
- package/dist/views/Document/getVersions.js.map +1 -1
- package/dist/views/Document/handleServerFunction.js +100 -127
- package/dist/views/Document/handleServerFunction.js.map +1 -1
- package/dist/views/Document/index.js +319 -359
- package/dist/views/Document/index.js.map +1 -1
- package/dist/views/Document/metadata.js +2 -1
- package/dist/views/Document/metadata.js.map +1 -1
- package/dist/views/Document/renderDocumentSlots.js +141 -155
- package/dist/views/Document/renderDocumentSlots.js.map +1 -1
- package/dist/views/Edit/index.js +10 -6
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/Edit/metadata.js +36 -46
- package/dist/views/Edit/metadata.js.map +1 -1
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +130 -164
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
- package/dist/views/ForgotPassword/index.js +79 -62
- package/dist/views/ForgotPassword/index.js.map +1 -1
- package/dist/views/ForgotPassword/metadata.js +8 -12
- package/dist/views/ForgotPassword/metadata.js.map +1 -1
- package/dist/views/List/createSerializableValue.js +12 -11
- package/dist/views/List/createSerializableValue.js.map +1 -1
- package/dist/views/List/enrichDocsWithVersionStatus.js +86 -86
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
- package/dist/views/List/extractRelationshipDisplayValue.js +15 -14
- package/dist/views/List/extractRelationshipDisplayValue.js.map +1 -1
- package/dist/views/List/extractValueOrRelationshipID.js +16 -15
- package/dist/views/List/extractValueOrRelationshipID.js.map +1 -1
- package/dist/views/List/handleGroupBy.js +133 -150
- package/dist/views/List/handleGroupBy.js.map +1 -1
- package/dist/views/List/handleServerFunction.js +96 -122
- package/dist/views/List/handleServerFunction.js.map +1 -1
- package/dist/views/List/index.js +306 -325
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/List/metadata.js +17 -20
- package/dist/views/List/metadata.js.map +1 -1
- package/dist/views/List/renderListViewSlots.js +82 -75
- package/dist/views/List/renderListViewSlots.js.map +1 -1
- package/dist/views/List/resolveAllFilterOptions.js +43 -45
- package/dist/views/List/resolveAllFilterOptions.js.map +1 -1
- package/dist/views/List/transformColumnsToSelect.js +9 -8
- package/dist/views/List/transformColumnsToSelect.js.map +1 -1
- package/dist/views/Login/LoginField/index.js +57 -89
- package/dist/views/Login/LoginField/index.js.map +1 -1
- package/dist/views/Login/LoginForm/index.js +107 -160
- package/dist/views/Login/LoginForm/index.js.map +1 -1
- package/dist/views/Login/LoginForm/index.scss +10 -0
- package/dist/views/Login/index.js +82 -85
- package/dist/views/Login/index.js.map +1 -1
- package/dist/views/Login/index.scss +10 -0
- package/dist/views/Login/metadata.js +8 -12
- package/dist/views/Login/metadata.js.map +1 -1
- package/dist/views/Logout/LogoutClient.js +84 -120
- package/dist/views/Logout/LogoutClient.js.map +1 -1
- package/dist/views/Logout/index.js +29 -29
- package/dist/views/Logout/index.js.map +1 -1
- package/dist/views/Logout/index.scss +25 -0
- package/dist/views/Logout/metadata.js +7 -11
- package/dist/views/Logout/metadata.js.map +1 -1
- package/dist/views/NotFound/index.client.js +71 -82
- package/dist/views/NotFound/index.client.js.map +1 -1
- package/dist/views/NotFound/index.js +72 -73
- package/dist/views/NotFound/index.js.map +1 -1
- package/dist/views/NotFound/index.scss +57 -0
- package/dist/views/NotFound/metadata.js +7 -9
- package/dist/views/NotFound/metadata.js.map +1 -1
- package/dist/views/ResetPassword/ResetPasswordForm/index.js +97 -108
- package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -1
- package/dist/views/ResetPassword/index.js +93 -73
- package/dist/views/ResetPassword/index.js.map +1 -1
- package/dist/views/ResetPassword/index.scss +11 -0
- package/dist/views/ResetPassword/metadata.js +8 -12
- package/dist/views/ResetPassword/metadata.js.map +1 -1
- package/dist/views/Root/attachViewActions.js +18 -23
- package/dist/views/Root/attachViewActions.js.map +1 -1
- package/dist/views/Root/generateCustomViewMetadata.js +19 -21
- package/dist/views/Root/generateCustomViewMetadata.js.map +1 -1
- package/dist/views/Root/getCustomViewByKey.js +12 -14
- package/dist/views/Root/getCustomViewByKey.js.map +1 -1
- package/dist/views/Root/getCustomViewByRoute.js +31 -42
- package/dist/views/Root/getCustomViewByRoute.js.map +1 -1
- package/dist/views/Root/getDocumentViewInfo.js +24 -23
- package/dist/views/Root/getDocumentViewInfo.js.map +1 -1
- package/dist/views/Root/getRouteData.js +333 -325
- package/dist/views/Root/getRouteData.js.map +1 -1
- package/dist/views/Root/index.js +248 -270
- package/dist/views/Root/index.js.map +1 -1
- package/dist/views/Root/isPathMatchingRoute.js +21 -26
- package/dist/views/Root/isPathMatchingRoute.js.map +1 -1
- package/dist/views/Root/metadata.js +176 -181
- package/dist/views/Root/metadata.js.map +1 -1
- package/dist/views/Unauthorized/index.js +54 -46
- package/dist/views/Unauthorized/index.js.map +1 -1
- package/dist/views/Unauthorized/index.scss +14 -0
- package/dist/views/Unauthorized/metadata.js +8 -12
- package/dist/views/Unauthorized/metadata.js.map +1 -1
- package/dist/views/Verify/index.client.js +25 -43
- package/dist/views/Verify/index.client.js.map +1 -1
- package/dist/views/Verify/index.js +69 -64
- package/dist/views/Verify/index.js.map +1 -1
- package/dist/views/Verify/index.scss +16 -0
- package/dist/views/Verify/metadata.js +8 -12
- package/dist/views/Verify/metadata.js.map +1 -1
- package/dist/views/Version/Default/SelectedLocalesContext.js +4 -4
- package/dist/views/Version/Default/SelectedLocalesContext.js.map +1 -1
- package/dist/views/Version/Default/SetStepNav.js +86 -127
- package/dist/views/Version/Default/SetStepNav.js.map +1 -1
- package/dist/views/Version/Default/index.js +380 -236
- package/dist/views/Version/Default/index.js.map +1 -1
- package/dist/views/Version/Default/index.scss +170 -0
- package/dist/views/Version/Default/types.js +2 -1
- package/dist/views/Version/Default/types.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +102 -119
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.scss +81 -0
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js +78 -73
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +363 -408
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +40 -51
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +38 -70
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.scss +12 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +59 -56
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.scss +9 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +139 -117
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.scss +59 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +56 -61
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +224 -206
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.scss +91 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js +17 -11
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +49 -74
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.scss +4 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +135 -146
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.scss +9 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +57 -82
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.scss +4 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +252 -211
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.scss +121 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js +23 -22
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.js +12 -9
- package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.scss +24 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +213 -228
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +1005 -826
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js +2 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +44 -43
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +32 -36
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +145 -129
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
- package/dist/views/Version/Restore/index.js +117 -92
- package/dist/views/Version/Restore/index.js.map +1 -1
- package/dist/views/Version/Restore/index.scss +84 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js +33 -50
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -1
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js +170 -226
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
- package/dist/views/Version/SelectComparison/VersionDrawer/index.scss +18 -0
- package/dist/views/Version/SelectComparison/index.js +73 -50
- package/dist/views/Version/SelectComparison/index.js.map +1 -1
- package/dist/views/Version/SelectComparison/index.scss +9 -0
- package/dist/views/Version/SelectComparison/types.js +2 -1
- package/dist/views/Version/SelectComparison/types.js.map +1 -1
- package/dist/views/Version/SelectLocales/index.js +34 -32
- package/dist/views/Version/SelectLocales/index.js.map +1 -1
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js +106 -100
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -1
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js +30 -35
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js.map +1 -1
- package/dist/views/Version/VersionPillLabel/index.scss +26 -0
- package/dist/views/Version/fetchVersions.js +113 -138
- package/dist/views/Version/fetchVersions.js.map +1 -1
- package/dist/views/Version/index.js +328 -326
- package/dist/views/Version/index.js.map +1 -1
- package/dist/views/Version/metadata.js +43 -50
- package/dist/views/Version/metadata.js.map +1 -1
- package/dist/views/Versions/buildColumns.js +95 -79
- package/dist/views/Versions/buildColumns.js.map +1 -1
- package/dist/views/Versions/cells/AutosaveCell/index.js +34 -38
- package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
- package/dist/views/Versions/cells/AutosaveCell/index.scss +9 -0
- package/dist/views/Versions/cells/CreatedAt/index.js +32 -53
- package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
- package/dist/views/Versions/cells/ID/index.js +10 -8
- package/dist/views/Versions/cells/ID/index.js.map +1 -1
- package/dist/views/Versions/index.client.js +106 -83
- package/dist/views/Versions/index.client.js.map +1 -1
- package/dist/views/Versions/index.js +164 -164
- package/dist/views/Versions/index.js.map +1 -1
- package/dist/views/Versions/index.scss +110 -0
- package/dist/views/Versions/metadata.js +37 -44
- package/dist/views/Versions/metadata.js.map +1 -1
- package/dist/views/Versions/types.js +2 -1
- package/dist/views/Versions/types.js.map +1 -1
- package/dist/withPayload/withPayload.js +236 -177
- package/dist/withPayload/withPayload.js.map +1 -1
- package/dist/withPayload/withPayload.spec.js +36 -35
- package/dist/withPayload/withPayload.spec.js.map +1 -1
- package/dist/withPayload/withPayload.utils.js +65 -73
- package/dist/withPayload/withPayload.utils.js.map +1 -1
- package/dist/withPayload/withPayloadLegacy.js +41 -40
- package/dist/withPayload/withPayloadLegacy.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +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","WidgetEditControl","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","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","onSave","data","widgetData","widgetID","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","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'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\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 updateWidgetData,\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>{t('dashboard:noItems')}</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 <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\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 if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\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 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":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"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'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\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 updateWidgetData,\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>{t('dashboard:noItems')}</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 <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\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 if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\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 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"],"names":["DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","ChevronIcon","Popup","PopupList","useTranslation","XIcon","React","useMemo","useState","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WidgetEditControl","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","activeDragId","setActiveDragId","sensors","div","autoScroll","enabled","threshold","x","y","collisionDetection","id","onDragCancel","onDragEnd","event","over","droppableId","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","onDragStart","className","style","display","flexWrap","length","p","map","_index","Fragment","DraggableItem","disabled","width","padding","aria-hidden","inert","component","onPointerDown","e","stopPropagation","onSave","data","widgetData","widgetID","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onResize","button","onClick","type","span","dropAnimation","duration","modifiers","draggedWidget","find","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","filter","option","isDisabled","buttonType","render","close","ButtonGroup","isSelected","Button","toFixed","size","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","data-slug","data-width","DroppableItem","ref","height","children","isOver","data-testid","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"mappings":"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"}
|
|
@@ -1,72 +1,63 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
|
2
2
|
import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { ModularDashboardClient } from './index.client.js';
|
|
5
5
|
import { getItemsFromConfig } from './utils/getItemsFromConfig.js';
|
|
6
6
|
import { getItemsFromPreferences } from './utils/getItemsFromPreferences.js';
|
|
7
7
|
import { extractLocaleData } from './utils/localeUtils.js';
|
|
8
|
+
import './index.scss';
|
|
8
9
|
export async function ModularDashboard(props) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
i18n,
|
|
61
|
-
t: i18n.t
|
|
62
|
-
}) : label
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
return /*#__PURE__*/_jsx("div", {
|
|
66
|
-
children: /*#__PURE__*/_jsx(ModularDashboardClient, {
|
|
67
|
-
clientLayout: serverLayout,
|
|
68
|
-
widgets: clientWidgets
|
|
69
|
-
})
|
|
70
|
-
});
|
|
10
|
+
const { defaultLayout = [], widgets = [] } = props.payload.config.admin.dashboard || {};
|
|
11
|
+
const { importMap } = props.payload;
|
|
12
|
+
const { user } = props;
|
|
13
|
+
const { cookies, locale, permissions, req } = props.initPageResult;
|
|
14
|
+
const { i18n } = req;
|
|
15
|
+
const layout = await getItemsFromPreferences(props.payload, user) ?? await getItemsFromConfig(defaultLayout, req, widgets);
|
|
16
|
+
const serverLayout = layout.map((layoutItem)=>{
|
|
17
|
+
const widgetSlug = layoutItem.id.slice(0, layoutItem.id.lastIndexOf('-'));
|
|
18
|
+
const widgetConfig = widgets.find((widget)=>widget.slug === widgetSlug);
|
|
19
|
+
const widgetData = widgetConfig?.fields?.length ? extractLocaleData(layoutItem.data || {}, req.locale || 'en', widgetConfig.fields) : layoutItem.data || {};
|
|
20
|
+
return {
|
|
21
|
+
component: RenderServerComponent({
|
|
22
|
+
Component: widgetConfig?.Component,
|
|
23
|
+
importMap,
|
|
24
|
+
serverProps: {
|
|
25
|
+
cookies,
|
|
26
|
+
locale,
|
|
27
|
+
permissions,
|
|
28
|
+
req,
|
|
29
|
+
widgetData,
|
|
30
|
+
widgetSlug
|
|
31
|
+
}
|
|
32
|
+
}),
|
|
33
|
+
item: layoutItem
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
// Resolve function labels to static labels for client components
|
|
37
|
+
const clientWidgets = widgets.map((widget)=>{
|
|
38
|
+
const { Component: _, fields: __, label, ...rest } = widget;
|
|
39
|
+
return {
|
|
40
|
+
...rest,
|
|
41
|
+
label: typeof label === 'function' ? label({
|
|
42
|
+
i18n,
|
|
43
|
+
t: i18n.t
|
|
44
|
+
}) : label
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
return /*#__PURE__*/ _jsxDEV("div", {
|
|
48
|
+
children: /*#__PURE__*/ _jsxDEV(ModularDashboardClient, {
|
|
49
|
+
clientLayout: serverLayout,
|
|
50
|
+
widgets: clientWidgets
|
|
51
|
+
}, void 0, false, {
|
|
52
|
+
fileName: "src/views/Dashboard/Default/ModularDashboard/index.tsx",
|
|
53
|
+
lineNumber: 64,
|
|
54
|
+
columnNumber: 7
|
|
55
|
+
}, this)
|
|
56
|
+
}, void 0, false, {
|
|
57
|
+
fileName: "src/views/Dashboard/Default/ModularDashboard/index.tsx",
|
|
58
|
+
lineNumber: 63,
|
|
59
|
+
columnNumber: 5
|
|
60
|
+
}, this);
|
|
71
61
|
}
|
|
62
|
+
|
|
72
63
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.tsx"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type { ClientWidget, Field, WidgetServerProps } from 'payload'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\nimport React from 'react'\n\nimport type { DashboardViewServerProps } from '../index.js'\nimport type { WidgetInstanceClient } from './index.client.js'\n\nimport { ModularDashboardClient } from './index.client.js'\nimport { getItemsFromConfig } from './utils/getItemsFromConfig.js'\nimport { getItemsFromPreferences } from './utils/getItemsFromPreferences.js'\nimport { extractLocaleData } from './utils/localeUtils.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 { cookies, locale, permissions, 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 const widgetConfig = widgets.find((widget) => widget.slug === widgetSlug)\n const widgetData = widgetConfig?.fields?.length\n ? extractLocaleData(layoutItem.data || {}, req.locale || 'en', widgetConfig.fields as Field[])\n : layoutItem.data || {}\n\n return {\n component: RenderServerComponent({\n Component: widgetConfig?.Component,\n importMap,\n serverProps: {\n cookies,\n locale,\n permissions,\n req,\n widgetData,\n widgetSlug,\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 { Component: _, fields: __, 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"],"names":["RenderServerComponent","React","ModularDashboardClient","getItemsFromConfig","getItemsFromPreferences","extractLocaleData","ModularDashboard","props","defaultLayout","widgets","payload","config","admin","dashboard","importMap","user","cookies","locale","permissions","req","initPageResult","i18n","layout","serverLayout","map","layoutItem","widgetSlug","id","slice","lastIndexOf","widgetConfig","find","widget","slug","widgetData","fields","length","data","component","Component","serverProps","item","clientWidgets","_","__","label","rest","t","div","clientLayout"],"mappings":";AAGA,SAASA,qBAAqB,QAAQ,gDAA+C;AACrF,OAAOC,WAAW,QAAO;AAKzB,SAASC,sBAAsB,QAAQ,oBAAmB;AAC1D,SAASC,kBAAkB,QAAQ,gCAA+B;AAClE,SAASC,uBAAuB,QAAQ,qCAAoC;AAC5E,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,OAAO,eAAc;AAIrB,OAAO,eAAeC,iBAAiBC,KAA+B;IACpE,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,UAAU,EAAE,EAAE,GAAGF,MAAMG,OAAO,CAACC,MAAM,CAACC,KAAK,CAACC,SAAS,IAAI,CAAC;IACtF,MAAM,EAAEC,SAAS,EAAE,GAAGP,MAAMG,OAAO;IACnC,MAAM,EAAEK,IAAI,EAAE,GAAGR;IACjB,MAAM,EAAES,OAAO,EAAEC,MAAM,EAAEC,WAAW,EAAEC,GAAG,EAAE,GAAGZ,MAAMa,cAAc;IAClE,MAAM,EAAEC,IAAI,EAAE,GAAGF;IAEjB,MAAMG,SACJ,AAAC,MAAMlB,wBAAwBG,MAAMG,OAAO,EAAEK,SAC7C,MAAMZ,mBAAmBK,eAAeW,KAAKV;IAEhD,MAAMc,eAA6BD,OAAOE,GAAG,CAAC,CAACC;QAC7C,MAAMC,aAAaD,WAAWE,EAAE,CAACC,KAAK,CAAC,GAAGH,WAAWE,EAAE,CAACE,WAAW,CAAC;QACpE,MAAMC,eAAerB,QAAQsB,IAAI,CAAC,CAACC,SAAWA,OAAOC,IAAI,KAAKP;QAC9D,MAAMQ,aAAaJ,cAAcK,QAAQC,SACrC/B,kBAAkBoB,WAAWY,IAAI,IAAI,CAAC,GAAGlB,IAAIF,MAAM,IAAI,MAAMa,aAAaK,MAAM,IAChFV,WAAWY,IAAI,IAAI,CAAC;QAExB,OAAO;YACLC,WAAWtC,sBAAsB;gBAC/BuC,WAAWT,cAAcS;gBACzBzB;gBACA0B,aAAa;oBACXxB;oBACAC;oBACAC;oBACAC;oBACAe;oBACAR;gBACF;YACF;YACAe,MAAMhB;QACR;IACF;IAEA,iEAAiE;IACjE,MAAMiB,gBAAgCjC,QAAQe,GAAG,CAAC,CAACQ;QACjD,MAAM,EAAEO,WAAWI,CAAC,EAAER,QAAQS,EAAE,EAAEC,KAAK,EAAE,GAAGC,MAAM,GAAGd;QACrD,OAAO;YACL,GAAGc,IAAI;YACPD,OAAO,OAAOA,UAAU,aAAaA,MAAM;gBAAExB;gBAAM0B,GAAG1B,KAAK0B,CAAC;YAAc,KAAKF;QACjF;IACF;IAEA,qBACE,QAACG;kBACC,cAAA,QAAC9C;YAAuB+C,cAAc1B;YAAcd,SAASiC;;;;;;;;;;;AAGnE"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
@import '~@payloadcms/ui/scss';
|
|
2
|
+
|
|
3
|
+
@layer payload-default {
|
|
4
|
+
.modular-dashboard {
|
|
5
|
+
.widget-content {
|
|
6
|
+
height: 100%;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// In mobile, make the widget full width and hide the size button.
|
|
10
|
+
@media (max-width: 768px) {
|
|
11
|
+
.widget {
|
|
12
|
+
width: 100% !important;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.widget-wrapper__size-btn {
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.editing {
|
|
21
|
+
.widget-content {
|
|
22
|
+
user-select: none;
|
|
23
|
+
-webkit-user-select: none;
|
|
24
|
+
pointer-events: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.draggable {
|
|
28
|
+
cursor: grab;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.drag-overlay {
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
user-select: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&__empty {
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
height: 100%;
|
|
42
|
+
width: 100%;
|
|
43
|
+
padding: 24px;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Apply grabbing cursor to body when drag-overlay is present
|
|
48
|
+
body:has(.drag-overlay) * {
|
|
49
|
+
cursor: grabbing;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.widget-wrapper__controls {
|
|
53
|
+
opacity: 0;
|
|
54
|
+
transition: opacity 0.2s ease;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.widget:focus-visible,
|
|
58
|
+
.widget:has(:focus-visible) {
|
|
59
|
+
.widget-wrapper__controls {
|
|
60
|
+
opacity: 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// This is used to highlight a newly added widget.
|
|
65
|
+
@keyframes widget-highlight {
|
|
66
|
+
0% {
|
|
67
|
+
box-shadow: 0 0 0 3px rgba(255, 208, 0, 0.9);
|
|
68
|
+
}
|
|
69
|
+
100% {
|
|
70
|
+
box-shadow: 0 0 0 3px rgba(255, 208, 0, 0);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.widget {
|
|
75
|
+
&--highlight {
|
|
76
|
+
animation: widget-highlight 1.5s ease-out forwards;
|
|
77
|
+
border-radius: 8px;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.widget-wrapper {
|
|
82
|
+
position: relative;
|
|
83
|
+
height: 100%;
|
|
84
|
+
width: 100%;
|
|
85
|
+
|
|
86
|
+
&--editing {
|
|
87
|
+
.widget-wrapper__controls {
|
|
88
|
+
// opacity: 0;
|
|
89
|
+
transition: opacity 0.2s ease;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
&:hover {
|
|
93
|
+
.widget-wrapper__controls {
|
|
94
|
+
opacity: 1;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
&__controls {
|
|
100
|
+
position: absolute;
|
|
101
|
+
top: 16px;
|
|
102
|
+
right: 16px;
|
|
103
|
+
z-index: 10;
|
|
104
|
+
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: 8px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
&__delete-btn,
|
|
111
|
+
&__edit-btn {
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: center;
|
|
115
|
+
|
|
116
|
+
width: 28px;
|
|
117
|
+
height: 28px;
|
|
118
|
+
|
|
119
|
+
background: var(--theme-text);
|
|
120
|
+
border: none;
|
|
121
|
+
border-radius: 4px;
|
|
122
|
+
cursor: pointer;
|
|
123
|
+
|
|
124
|
+
transition: all 0.2s ease;
|
|
125
|
+
|
|
126
|
+
.icon {
|
|
127
|
+
width: 16px;
|
|
128
|
+
height: 16px;
|
|
129
|
+
|
|
130
|
+
.stroke {
|
|
131
|
+
stroke: var(--theme-elevation-0);
|
|
132
|
+
stroke-width: 2;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&:hover {
|
|
137
|
+
background: var(--theme-elevation-800);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
&:active {
|
|
141
|
+
background: var(--theme-elevation-900);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
svg {
|
|
145
|
+
pointer-events: none;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
&__size-btn {
|
|
150
|
+
display: flex;
|
|
151
|
+
align-items: center;
|
|
152
|
+
gap: 6px;
|
|
153
|
+
padding: 6px 10px;
|
|
154
|
+
min-width: auto;
|
|
155
|
+
height: 28px;
|
|
156
|
+
|
|
157
|
+
background: var(--theme-text);
|
|
158
|
+
border: none;
|
|
159
|
+
border-radius: 4px;
|
|
160
|
+
cursor: pointer;
|
|
161
|
+
|
|
162
|
+
transition: all 0.2s ease;
|
|
163
|
+
|
|
164
|
+
font-size: 12px;
|
|
165
|
+
font-weight: 500;
|
|
166
|
+
color: var(--theme-elevation-0);
|
|
167
|
+
white-space: nowrap;
|
|
168
|
+
|
|
169
|
+
.icon {
|
|
170
|
+
width: 12px;
|
|
171
|
+
height: 12px;
|
|
172
|
+
flex-shrink: 0;
|
|
173
|
+
|
|
174
|
+
.stroke {
|
|
175
|
+
stroke: var(--theme-elevation-0);
|
|
176
|
+
stroke-width: 2;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
&:hover {
|
|
181
|
+
background: var(--theme-elevation-800);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&:active {
|
|
185
|
+
background: var(--theme-elevation-900);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
&:disabled {
|
|
189
|
+
opacity: 0.5;
|
|
190
|
+
cursor: not-allowed;
|
|
191
|
+
|
|
192
|
+
&:hover {
|
|
193
|
+
background: var(--theme-text);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
svg {
|
|
198
|
+
pointer-events: none;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
&__size-btn-percentage {
|
|
203
|
+
font-size: 12px;
|
|
204
|
+
margin-left: auto;
|
|
205
|
+
color: var(--theme-elevation-500);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Since popup uses portal and renders to body, we need global styles
|
|
210
|
+
// for the size selection buttons in widget wrappers
|
|
211
|
+
.popup-button-list:has(.widget-wrapper__size-btn-label) {
|
|
212
|
+
.popup__scroll-container {
|
|
213
|
+
padding: 0;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.popup__content:has(.widget-wrapper__size-btn-label) {
|
|
218
|
+
padding: 5px;
|
|
219
|
+
box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.popup-button-list__button:has(.widget-wrapper__size-btn-label) {
|
|
223
|
+
display: flex !important;
|
|
224
|
+
align-items: center !important;
|
|
225
|
+
gap: 20px;
|
|
226
|
+
|
|
227
|
+
.widget-wrapper__size-btn-label {
|
|
228
|
+
flex: 0 0 auto;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.widget-wrapper__size-btn-percentage {
|
|
232
|
+
margin-left: auto !important;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.step-nav {
|
|
237
|
+
.dashboard-breadcrumb-dropdown {
|
|
238
|
+
&__editing {
|
|
239
|
+
align-items: center;
|
|
240
|
+
display: flex !important;
|
|
241
|
+
gap: 12px;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
&__actions {
|
|
245
|
+
display: flex !important;
|
|
246
|
+
gap: 8px;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.dashboard-breadcrumb-select {
|
|
251
|
+
position: relative;
|
|
252
|
+
z-index: 10;
|
|
253
|
+
|
|
254
|
+
.rs__control {
|
|
255
|
+
background: transparent;
|
|
256
|
+
border: none;
|
|
257
|
+
box-shadow: none;
|
|
258
|
+
padding: 0;
|
|
259
|
+
cursor: pointer;
|
|
260
|
+
|
|
261
|
+
&:hover {
|
|
262
|
+
background: transparent;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.rs__indicator-separator {
|
|
267
|
+
display: none;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.rs__dropdown-indicator {
|
|
271
|
+
padding: 0 4px;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.rs__menu {
|
|
275
|
+
position: absolute;
|
|
276
|
+
top: 100%;
|
|
277
|
+
left: 0;
|
|
278
|
+
min-width: max-content;
|
|
279
|
+
width: max-content;
|
|
280
|
+
z-index: 9999;
|
|
281
|
+
border-radius: 4px;
|
|
282
|
+
padding: 5px;
|
|
283
|
+
box-shadow:
|
|
284
|
+
0 4px 6px -1px rgba(0, 0, 0, 0.1),
|
|
285
|
+
0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.rs__menu-list {
|
|
289
|
+
padding: 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.rs__option {
|
|
293
|
+
padding: 4px 8px;
|
|
294
|
+
border-radius: 3px;
|
|
295
|
+
margin: 0;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.rs__control {
|
|
300
|
+
box-shadow: none !important;
|
|
301
|
+
cursor: pointer !important;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.drawer-toggler--unstyled {
|
|
305
|
+
background: transparent;
|
|
306
|
+
border: none;
|
|
307
|
+
margin: 0;
|
|
308
|
+
padding: 0;
|
|
309
|
+
outline: none;
|
|
310
|
+
box-shadow: none;
|
|
311
|
+
|
|
312
|
+
&:hover,
|
|
313
|
+
&:focus {
|
|
314
|
+
background: transparent;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|