@ruya.sa/next 3.71.3
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/LICENSE.md +22 -0
- package/dist/auth/login.js +67 -0
- package/dist/auth/login.js.map +1 -0
- package/dist/auth/logout.js +52 -0
- package/dist/auth/logout.js.map +1 -0
- package/dist/auth/refresh.js +56 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/dummy.css +0 -0
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +19 -0
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +81 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +66 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/index.js +78 -0
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +29 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +72 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -0
- package/dist/elements/DocumentHeader/index.js +36 -0
- package/dist/elements/DocumentHeader/index.js.map +1 -0
- package/dist/elements/FormHeader/index.js +20 -0
- package/dist/elements/FormHeader/index.js.map +1 -0
- package/dist/elements/Logo/index.js +39 -0
- package/dist/elements/Logo/index.js.map +1 -0
- package/dist/elements/Nav/NavHamburger/index.js +51 -0
- package/dist/elements/Nav/NavHamburger/index.js.map +1 -0
- package/dist/elements/Nav/NavWrapper/index.js +61 -0
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js +45 -0
- package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -0
- package/dist/elements/Nav/getNavPrefs.js +26 -0
- package/dist/elements/Nav/getNavPrefs.js.map +1 -0
- package/dist/elements/Nav/index.client.js +133 -0
- package/dist/elements/Nav/index.client.js.map +1 -0
- package/dist/elements/Nav/index.js +145 -0
- package/dist/elements/Nav/index.js.map +1 -0
- package/dist/esbuildEntry.js +5 -0
- package/dist/esbuildEntry.js.map +1 -0
- package/dist/exports/auth.js +4 -0
- package/dist/exports/auth.js.map +1 -0
- package/dist/exports/client.js +6 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/layouts.js +3 -0
- package/dist/exports/layouts.js.map +1 -0
- package/dist/exports/routes.js +3 -0
- package/dist/exports/routes.js.map +1 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/templates.js +3 -0
- package/dist/exports/templates.js.map +1 -0
- package/dist/exports/utilities.js +53 -0
- package/dist/exports/utilities.js.map +1 -0
- package/dist/exports/views.js +10 -0
- package/dist/exports/views.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/Root/NestProviders.js +24 -0
- package/dist/layouts/Root/NestProviders.js.map +1 -0
- package/dist/layouts/Root/checkDependencies.js +49 -0
- package/dist/layouts/Root/checkDependencies.js.map +1 -0
- package/dist/layouts/Root/index.js +120 -0
- package/dist/layouts/Root/index.js.map +1 -0
- package/dist/routes/graphql/handler.js +137 -0
- package/dist/routes/graphql/handler.js.map +1 -0
- package/dist/routes/graphql/index.js +3 -0
- package/dist/routes/graphql/index.js.map +1 -0
- package/dist/routes/graphql/playground.js +31 -0
- package/dist/routes/graphql/playground.js.map +1 -0
- package/dist/routes/index.js +3 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/rest/index.js +33 -0
- package/dist/routes/rest/index.js.map +1 -0
- package/dist/routes/rest/og/image.js +86 -0
- package/dist/routes/rest/og/image.js.map +1 -0
- package/dist/routes/rest/og/index.js +70 -0
- package/dist/routes/rest/og/index.js.map +1 -0
- package/dist/routes/rest/og/roboto-regular.woff +0 -0
- package/dist/templates/Default/NavHamburger/index.js +25 -0
- package/dist/templates/Default/NavHamburger/index.js.map +1 -0
- package/dist/templates/Default/Wrapper/index.js +49 -0
- package/dist/templates/Default/Wrapper/index.js.map +1 -0
- package/dist/templates/Default/index.js +129 -0
- package/dist/templates/Default/index.js.map +1 -0
- package/dist/templates/Minimal/index.js +21 -0
- package/dist/templates/Minimal/index.js.map +1 -0
- package/dist/utilities/getExistingAuthToken.js +6 -0
- package/dist/utilities/getExistingAuthToken.js.map +1 -0
- package/dist/utilities/getNextRequestI18n.js +22 -0
- package/dist/utilities/getNextRequestI18n.js.map +1 -0
- package/dist/utilities/getPayloadHMR.js +15 -0
- package/dist/utilities/getPayloadHMR.js.map +1 -0
- package/dist/utilities/getPreferences.js +26 -0
- package/dist/utilities/getPreferences.js.map +1 -0
- package/dist/utilities/getRequestLocale.js +20 -0
- package/dist/utilities/getRequestLocale.js.map +1 -0
- package/dist/utilities/getRequestTheme.js +22 -0
- package/dist/utilities/getRequestTheme.js.map +1 -0
- package/dist/utilities/getRouteWithoutAdmin.js +7 -0
- package/dist/utilities/getRouteWithoutAdmin.js.map +1 -0
- package/dist/utilities/handleAuthRedirect.js +41 -0
- package/dist/utilities/handleAuthRedirect.js.map +1 -0
- package/dist/utilities/handleServerFunctions.js +57 -0
- package/dist/utilities/handleServerFunctions.js.map +1 -0
- package/dist/utilities/initReq.js +110 -0
- package/dist/utilities/initReq.js.map +1 -0
- package/dist/utilities/isCustomAdminView.js +31 -0
- package/dist/utilities/isCustomAdminView.js.map +1 -0
- package/dist/utilities/isPublicAdminRoute.js +25 -0
- package/dist/utilities/isPublicAdminRoute.js.map +1 -0
- package/dist/utilities/meta.js +69 -0
- package/dist/utilities/meta.js.map +1 -0
- package/dist/utilities/selectiveCache.js +38 -0
- package/dist/utilities/selectiveCache.js.map +1 -0
- package/dist/utilities/setPayloadAuthCookie.js +27 -0
- package/dist/utilities/setPayloadAuthCookie.js.map +1 -0
- package/dist/utilities/slugify.js +47 -0
- package/dist/utilities/slugify.js.map +1 -0
- package/dist/utilities/timestamp.js +8 -0
- package/dist/utilities/timestamp.js.map +1 -0
- package/dist/views/API/LocaleSelector/index.js +44 -0
- package/dist/views/API/LocaleSelector/index.js.map +1 -0
- package/dist/views/API/RenderJSON/index.js +135 -0
- package/dist/views/API/RenderJSON/index.js.map +1 -0
- package/dist/views/API/index.client.js +209 -0
- package/dist/views/API/index.client.js.map +1 -0
- package/dist/views/API/index.js +7 -0
- package/dist/views/API/index.js.map +1 -0
- package/dist/views/API/metadata.js +29 -0
- package/dist/views/API/metadata.js.map +1 -0
- package/dist/views/Account/ResetPreferences/index.js +112 -0
- package/dist/views/Account/ResetPreferences/index.js.map +1 -0
- package/dist/views/Account/Settings/LanguageSelector.js +52 -0
- package/dist/views/Account/Settings/LanguageSelector.js.map +1 -0
- package/dist/views/Account/Settings/index.js +33 -0
- package/dist/views/Account/Settings/index.js.map +1 -0
- package/dist/views/Account/ToggleTheme/index.js +60 -0
- package/dist/views/Account/ToggleTheme/index.js.map +1 -0
- package/dist/views/Account/index.client.js +37 -0
- package/dist/views/Account/index.client.js.map +1 -0
- package/dist/views/Account/index.js +178 -0
- package/dist/views/Account/index.js.map +1 -0
- package/dist/views/Account/metadata.js +14 -0
- package/dist/views/Account/metadata.js.map +1 -0
- package/dist/views/BrowseByFolder/buildView.js +169 -0
- package/dist/views/BrowseByFolder/buildView.js.map +1 -0
- package/dist/views/BrowseByFolder/index.js +20 -0
- package/dist/views/BrowseByFolder/index.js.map +1 -0
- package/dist/views/BrowseByFolder/metadata.js +18 -0
- package/dist/views/BrowseByFolder/metadata.js.map +1 -0
- package/dist/views/CollectionFolders/buildView.js +156 -0
- package/dist/views/CollectionFolders/buildView.js.map +1 -0
- package/dist/views/CollectionFolders/index.js +20 -0
- package/dist/views/CollectionFolders/index.js.map +1 -0
- package/dist/views/CollectionFolders/metadata.js +25 -0
- package/dist/views/CollectionFolders/metadata.js.map +1 -0
- package/dist/views/CollectionFolders/renderFolderViewSlots.js +64 -0
- package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -0
- package/dist/views/CollectionTrash/index.js +21 -0
- package/dist/views/CollectionTrash/index.js.map +1 -0
- package/dist/views/CollectionTrash/metadata.js +25 -0
- package/dist/views/CollectionTrash/metadata.js.map +1 -0
- package/dist/views/CreateFirstUser/index.client.js +112 -0
- package/dist/views/CreateFirstUser/index.client.js.map +1 -0
- package/dist/views/CreateFirstUser/index.js +88 -0
- package/dist/views/CreateFirstUser/index.js.map +1 -0
- package/dist/views/CreateFirstUser/metadata.js +14 -0
- package/dist/views/CreateFirstUser/metadata.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +147 -0
- package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +431 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js +87 -0
- package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +99 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +58 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +72 -0
- package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js +158 -0
- package/dist/views/Dashboard/Default/ModularDashboard/useDashboardLayout.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js +38 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/collisionDetection.js.map +1 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js +264 -0
- package/dist/views/Dashboard/Default/ModularDashboard/utils/sensors.js.map +1 -0
- package/dist/views/Dashboard/Default/index.js +52 -0
- package/dist/views/Dashboard/Default/index.js.map +1 -0
- package/dist/views/Dashboard/index.js +50 -0
- package/dist/views/Dashboard/index.js.map +1 -0
- package/dist/views/Dashboard/metadata.js +16 -0
- package/dist/views/Dashboard/metadata.js.map +1 -0
- package/dist/views/Document/getCustomDocumentViewByKey.js +4 -0
- package/dist/views/Document/getCustomDocumentViewByKey.js.map +1 -0
- package/dist/views/Document/getCustomViewByRoute.js +35 -0
- package/dist/views/Document/getCustomViewByRoute.js.map +1 -0
- package/dist/views/Document/getDocPreferences.js +45 -0
- package/dist/views/Document/getDocPreferences.js.map +1 -0
- package/dist/views/Document/getDocumentData.js +60 -0
- package/dist/views/Document/getDocumentData.js.map +1 -0
- package/dist/views/Document/getDocumentPermissions.js +87 -0
- package/dist/views/Document/getDocumentPermissions.js.map +1 -0
- package/dist/views/Document/getDocumentView.js +310 -0
- package/dist/views/Document/getDocumentView.js.map +1 -0
- package/dist/views/Document/getIsLocked.js +79 -0
- package/dist/views/Document/getIsLocked.js.map +1 -0
- package/dist/views/Document/getMetaBySegment.js +150 -0
- package/dist/views/Document/getMetaBySegment.js.map +1 -0
- package/dist/views/Document/getVersions.js +210 -0
- package/dist/views/Document/getVersions.js.map +1 -0
- package/dist/views/Document/handleServerFunction.js +135 -0
- package/dist/views/Document/handleServerFunction.js.map +1 -0
- package/dist/views/Document/index.js +390 -0
- package/dist/views/Document/index.js.map +1 -0
- package/dist/views/Document/metadata.js +3 -0
- package/dist/views/Document/metadata.js.map +1 -0
- package/dist/views/Document/renderDocumentSlots.js +154 -0
- package/dist/views/Document/renderDocumentSlots.js.map +1 -0
- package/dist/views/Edit/index.js +11 -0
- package/dist/views/Edit/index.js.map +1 -0
- package/dist/views/Edit/metadata.js +52 -0
- package/dist/views/Edit/metadata.js.map +1 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +179 -0
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -0
- package/dist/views/ForgotPassword/index.js +72 -0
- package/dist/views/ForgotPassword/index.js.map +1 -0
- package/dist/views/ForgotPassword/metadata.js +14 -0
- package/dist/views/ForgotPassword/metadata.js.map +1 -0
- package/dist/views/List/createSerializableValue.js +14 -0
- package/dist/views/List/createSerializableValue.js.map +1 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js +96 -0
- package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -0
- package/dist/views/List/extractRelationshipDisplayValue.js +17 -0
- package/dist/views/List/extractRelationshipDisplayValue.js.map +1 -0
- package/dist/views/List/extractValueOrRelationshipID.js +19 -0
- package/dist/views/List/extractValueOrRelationshipID.js.map +1 -0
- package/dist/views/List/handleGroupBy.js +160 -0
- package/dist/views/List/handleGroupBy.js.map +1 -0
- package/dist/views/List/handleServerFunction.js +130 -0
- package/dist/views/List/handleServerFunction.js.map +1 -0
- package/dist/views/List/index.js +356 -0
- package/dist/views/List/index.js.map +1 -0
- package/dist/views/List/metadata.js +24 -0
- package/dist/views/List/metadata.js.map +1 -0
- package/dist/views/List/renderListViewSlots.js +80 -0
- package/dist/views/List/renderListViewSlots.js.map +1 -0
- package/dist/views/List/resolveAllFilterOptions.js +49 -0
- package/dist/views/List/resolveAllFilterOptions.js.map +1 -0
- package/dist/views/List/transformColumnsToSelect.js +11 -0
- package/dist/views/List/transformColumnsToSelect.js.map +1 -0
- package/dist/views/Login/LoginField/index.js +98 -0
- package/dist/views/Login/LoginField/index.js.map +1 -0
- package/dist/views/Login/LoginForm/index.js +177 -0
- package/dist/views/Login/LoginForm/index.js.map +1 -0
- package/dist/views/Login/index.js +95 -0
- package/dist/views/Login/index.js.map +1 -0
- package/dist/views/Login/metadata.js +14 -0
- package/dist/views/Login/metadata.js.map +1 -0
- package/dist/views/Logout/LogoutClient.js +140 -0
- package/dist/views/Logout/LogoutClient.js.map +1 -0
- package/dist/views/Logout/index.js +36 -0
- package/dist/views/Logout/index.js.map +1 -0
- package/dist/views/Logout/metadata.js +13 -0
- package/dist/views/Logout/metadata.js.map +1 -0
- package/dist/views/NotFound/index.client.js +88 -0
- package/dist/views/NotFound/index.client.js.map +1 -0
- package/dist/views/NotFound/index.js +87 -0
- package/dist/views/NotFound/index.js.map +1 -0
- package/dist/views/NotFound/metadata.js +11 -0
- package/dist/views/NotFound/metadata.js.map +1 -0
- package/dist/views/ResetPassword/ResetPasswordForm/index.js +117 -0
- package/dist/views/ResetPassword/ResetPasswordForm/index.js.map +1 -0
- package/dist/views/ResetPassword/index.js +83 -0
- package/dist/views/ResetPassword/index.js.map +1 -0
- package/dist/views/ResetPassword/metadata.js +14 -0
- package/dist/views/ResetPassword/metadata.js.map +1 -0
- package/dist/views/Root/attachViewActions.js +27 -0
- package/dist/views/Root/attachViewActions.js.map +1 -0
- package/dist/views/Root/generateCustomViewMetadata.js +25 -0
- package/dist/views/Root/generateCustomViewMetadata.js.map +1 -0
- package/dist/views/Root/getCustomViewByKey.js +16 -0
- package/dist/views/Root/getCustomViewByKey.js.map +1 -0
- package/dist/views/Root/getCustomViewByRoute.js +48 -0
- package/dist/views/Root/getCustomViewByRoute.js.map +1 -0
- package/dist/views/Root/getDocumentViewInfo.js +28 -0
- package/dist/views/Root/getDocumentViewInfo.js.map +1 -0
- package/dist/views/Root/getRouteData.js +359 -0
- package/dist/views/Root/getRouteData.js.map +1 -0
- package/dist/views/Root/index.js +300 -0
- package/dist/views/Root/index.js.map +1 -0
- package/dist/views/Root/isPathMatchingRoute.js +29 -0
- package/dist/views/Root/isPathMatchingRoute.js.map +1 -0
- package/dist/views/Root/metadata.js +209 -0
- package/dist/views/Root/metadata.js.map +1 -0
- package/dist/views/Unauthorized/index.js +54 -0
- package/dist/views/Unauthorized/index.js.map +1 -0
- package/dist/views/Unauthorized/metadata.js +14 -0
- package/dist/views/Unauthorized/metadata.js.map +1 -0
- package/dist/views/Verify/index.client.js +50 -0
- package/dist/views/Verify/index.client.js.map +1 -0
- package/dist/views/Verify/index.js +71 -0
- package/dist/views/Verify/index.js.map +1 -0
- package/dist/views/Verify/metadata.js +14 -0
- package/dist/views/Verify/metadata.js.map +1 -0
- package/dist/views/Version/Default/SelectedLocalesContext.js +8 -0
- package/dist/views/Version/Default/SelectedLocalesContext.js.map +1 -0
- package/dist/views/Version/Default/SetStepNav.js +135 -0
- package/dist/views/Version/Default/SetStepNav.js.map +1 -0
- package/dist/views/Version/Default/index.js +253 -0
- package/dist/views/Version/Default/index.js.map +1 -0
- package/dist/views/Version/Default/types.js +2 -0
- package/dist/views/Version/Default/types.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +130 -0
- package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js +80 -0
- package/dist/views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +439 -0
- package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js +61 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js +75 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js +66 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +129 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +45 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +188 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js +17 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +87 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +155 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +100 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js +222 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js +35 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/index.js +13 -0
- package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +242 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +861 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js +4 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +47 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +45 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +135 -0
- package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -0
- package/dist/views/Version/Restore/index.js +106 -0
- package/dist/views/Version/Restore/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js +56 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/CreatedAtCell.js.map +1 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js +240 -0
- package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/index.js +57 -0
- package/dist/views/Version/SelectComparison/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/types.js +2 -0
- package/dist/views/Version/SelectComparison/types.js.map +1 -0
- package/dist/views/Version/SelectLocales/index.js +39 -0
- package/dist/views/Version/SelectLocales/index.js.map +1 -0
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js +110 -0
- package/dist/views/Version/VersionPillLabel/VersionPillLabel.js.map +1 -0
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js +34 -0
- package/dist/views/Version/VersionPillLabel/getVersionLabel.js.map +1 -0
- package/dist/views/Version/fetchVersions.js +151 -0
- package/dist/views/Version/fetchVersions.js.map +1 -0
- package/dist/views/Version/index.js +349 -0
- package/dist/views/Version/index.js.map +1 -0
- package/dist/views/Version/metadata.js +58 -0
- package/dist/views/Version/metadata.js.map +1 -0
- package/dist/views/Versions/buildColumns.js +88 -0
- package/dist/views/Versions/buildColumns.js.map +1 -0
- package/dist/views/Versions/cells/AutosaveCell/index.js +45 -0
- package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -0
- package/dist/views/Versions/cells/CreatedAt/index.js +60 -0
- package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -0
- package/dist/views/Versions/cells/ID/index.js +12 -0
- package/dist/views/Versions/cells/ID/index.js.map +1 -0
- package/dist/views/Versions/index.client.js +89 -0
- package/dist/views/Versions/index.client.js.map +1 -0
- package/dist/views/Versions/index.js +157 -0
- package/dist/views/Versions/index.js.map +1 -0
- package/dist/views/Versions/metadata.js +51 -0
- package/dist/views/Versions/metadata.js.map +1 -0
- package/dist/views/Versions/types.js +2 -0
- package/dist/views/Versions/types.js.map +1 -0
- package/dist/withPayload/withPayload.js +162 -0
- package/dist/withPayload/withPayload.js.map +1 -0
- package/dist/withPayload/withPayload.spec.js +40 -0
- package/dist/withPayload/withPayload.spec.js.map +1 -0
- package/dist/withPayload/withPayload.utils.js +133 -0
- package/dist/withPayload/withPayload.utils.js.map +1 -0
- package/dist/withPayload/withPayloadLegacy.js +47 -0
- package/dist/withPayload/withPayloadLegacy.js.map +1 -0
- package/package.json +153 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
5
|
+
import { Button, DrawerToggler, ItemsDrawer, ReactSelect, useStepNav, useTranslation } from '@ruya.sa/ui';
|
|
6
|
+
import { useEffect, useId } from 'react';
|
|
7
|
+
export function DashboardStepNav(t0) {
|
|
8
|
+
const $ = _c(15);
|
|
9
|
+
const {
|
|
10
|
+
addWidget,
|
|
11
|
+
cancel,
|
|
12
|
+
isEditing,
|
|
13
|
+
resetLayout,
|
|
14
|
+
saveLayout,
|
|
15
|
+
setIsEditing,
|
|
16
|
+
widgets
|
|
17
|
+
} = t0;
|
|
18
|
+
const {
|
|
19
|
+
t
|
|
20
|
+
} = useTranslation();
|
|
21
|
+
const {
|
|
22
|
+
setStepNav
|
|
23
|
+
} = useStepNav();
|
|
24
|
+
const uuid = useId();
|
|
25
|
+
const drawerSlug = `widgets-drawer-${uuid}`;
|
|
26
|
+
let t1;
|
|
27
|
+
let t2;
|
|
28
|
+
if ($[0] !== cancel || $[1] !== drawerSlug || $[2] !== isEditing || $[3] !== resetLayout || $[4] !== saveLayout || $[5] !== setIsEditing || $[6] !== setStepNav) {
|
|
29
|
+
t1 = () => {
|
|
30
|
+
setStepNav([{
|
|
31
|
+
label: _jsx(DashboardBreadcrumbDropdown, {
|
|
32
|
+
isEditing,
|
|
33
|
+
onCancel: cancel,
|
|
34
|
+
onEditClick: () => setIsEditing(true),
|
|
35
|
+
onResetLayout: resetLayout,
|
|
36
|
+
onSaveChanges: saveLayout,
|
|
37
|
+
widgetsDrawerSlug: drawerSlug
|
|
38
|
+
})
|
|
39
|
+
}]);
|
|
40
|
+
};
|
|
41
|
+
t2 = [isEditing, drawerSlug, cancel, resetLayout, saveLayout, setIsEditing, setStepNav];
|
|
42
|
+
$[0] = cancel;
|
|
43
|
+
$[1] = drawerSlug;
|
|
44
|
+
$[2] = isEditing;
|
|
45
|
+
$[3] = resetLayout;
|
|
46
|
+
$[4] = saveLayout;
|
|
47
|
+
$[5] = setIsEditing;
|
|
48
|
+
$[6] = setStepNav;
|
|
49
|
+
$[7] = t1;
|
|
50
|
+
$[8] = t2;
|
|
51
|
+
} else {
|
|
52
|
+
t1 = $[7];
|
|
53
|
+
t2 = $[8];
|
|
54
|
+
}
|
|
55
|
+
useEffect(t1, t2);
|
|
56
|
+
let t3;
|
|
57
|
+
if ($[9] !== addWidget || $[10] !== drawerSlug || $[11] !== isEditing || $[12] !== t || $[13] !== widgets) {
|
|
58
|
+
t3 = _jsx(_Fragment, {
|
|
59
|
+
children: isEditing && _jsx(ItemsDrawer, {
|
|
60
|
+
drawerSlug,
|
|
61
|
+
items: widgets,
|
|
62
|
+
onItemClick: widget => addWidget(widget.slug),
|
|
63
|
+
searchPlaceholder: t("dashboard:searchWidgets"),
|
|
64
|
+
title: t("dashboard:addWidget")
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
$[9] = addWidget;
|
|
68
|
+
$[10] = drawerSlug;
|
|
69
|
+
$[11] = isEditing;
|
|
70
|
+
$[12] = t;
|
|
71
|
+
$[13] = widgets;
|
|
72
|
+
$[14] = t3;
|
|
73
|
+
} else {
|
|
74
|
+
t3 = $[14];
|
|
75
|
+
}
|
|
76
|
+
return t3;
|
|
77
|
+
}
|
|
78
|
+
export function DashboardBreadcrumbDropdown(props) {
|
|
79
|
+
const {
|
|
80
|
+
isEditing,
|
|
81
|
+
onCancel,
|
|
82
|
+
onEditClick,
|
|
83
|
+
onResetLayout,
|
|
84
|
+
onSaveChanges,
|
|
85
|
+
widgetsDrawerSlug
|
|
86
|
+
} = props;
|
|
87
|
+
if (isEditing) {
|
|
88
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
89
|
+
className: "dashboard-breadcrumb-dropdown__editing",
|
|
90
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
91
|
+
children: "Editing Dashboard"
|
|
92
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
93
|
+
className: "dashboard-breadcrumb-dropdown__actions",
|
|
94
|
+
children: [/*#__PURE__*/_jsx(DrawerToggler, {
|
|
95
|
+
className: "drawer-toggler--unstyled",
|
|
96
|
+
slug: widgetsDrawerSlug,
|
|
97
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
98
|
+
buttonStyle: "pill",
|
|
99
|
+
el: "span",
|
|
100
|
+
size: "small",
|
|
101
|
+
children: "Add +"
|
|
102
|
+
})
|
|
103
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
104
|
+
buttonStyle: "pill",
|
|
105
|
+
onClick: onSaveChanges,
|
|
106
|
+
size: "small",
|
|
107
|
+
children: "Save Changes"
|
|
108
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
109
|
+
buttonStyle: "pill",
|
|
110
|
+
onClick: onCancel,
|
|
111
|
+
size: "small",
|
|
112
|
+
children: "Cancel"
|
|
113
|
+
})]
|
|
114
|
+
})]
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const options = [{
|
|
118
|
+
label: 'Edit Dashboard',
|
|
119
|
+
value: 'edit'
|
|
120
|
+
}, {
|
|
121
|
+
label: 'Reset Layout',
|
|
122
|
+
value: 'reset'
|
|
123
|
+
}];
|
|
124
|
+
const handleChange = selectedOption => {
|
|
125
|
+
// Since isMulti is false, we expect a single Option
|
|
126
|
+
const option = Array.isArray(selectedOption) ? selectedOption[0] : selectedOption;
|
|
127
|
+
if (option?.value === 'edit') {
|
|
128
|
+
onEditClick();
|
|
129
|
+
} else if (option?.value === 'reset') {
|
|
130
|
+
onResetLayout();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
return /*#__PURE__*/_jsx(ReactSelect, {
|
|
134
|
+
className: "dashboard-breadcrumb-select",
|
|
135
|
+
isClearable: false,
|
|
136
|
+
isSearchable: false,
|
|
137
|
+
menuIsOpen: undefined,
|
|
138
|
+
onChange: handleChange,
|
|
139
|
+
options: options,
|
|
140
|
+
placeholder: "Dashboard",
|
|
141
|
+
value: {
|
|
142
|
+
label: 'Dashboard',
|
|
143
|
+
value: 'dashboard'
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=DashboardStepNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardStepNav.js","names":["c","_c","Button","DrawerToggler","ItemsDrawer","ReactSelect","useStepNav","useTranslation","useEffect","useId","DashboardStepNav","t0","$","addWidget","cancel","isEditing","resetLayout","saveLayout","setIsEditing","widgets","t","setStepNav","uuid","drawerSlug","t1","t2","label","_jsx","DashboardBreadcrumbDropdown","onCancel","onEditClick","onResetLayout","onSaveChanges","widgetsDrawerSlug","t3","_Fragment","children","items","onItemClick","widget","slug","searchPlaceholder","title","props","_jsxs","className","buttonStyle","el","size","onClick","options","value","handleChange","selectedOption","option","Array","isArray","isClearable","isSearchable","menuIsOpen","undefined","onChange","placeholder"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/DashboardStepNav.tsx"],"sourcesContent":["'use client'\nimport type { ClientWidget } from '@ruya.sa/payload'\n\nimport {\n Button,\n DrawerToggler,\n ItemsDrawer,\n type ReactSelectOption as Option,\n ReactSelect,\n useStepNav,\n useTranslation,\n} from '@ruya.sa/ui'\nimport { useEffect, useId } from 'react'\n\nexport function DashboardStepNav({\n addWidget,\n cancel,\n isEditing,\n resetLayout,\n saveLayout,\n setIsEditing,\n widgets,\n}: {\n addWidget: (slug: string) => void\n cancel: () => void\n isEditing: boolean\n resetLayout: () => Promise<void>\n saveLayout: () => Promise<void>\n setIsEditing: (isEditing: boolean) => void\n widgets: ClientWidget[]\n}) {\n const { t } = useTranslation()\n const { setStepNav } = useStepNav()\n const uuid = useId()\n const drawerSlug = `widgets-drawer-${uuid}`\n\n useEffect(() => {\n setStepNav([\n {\n label: (\n <DashboardBreadcrumbDropdown\n isEditing={isEditing}\n onCancel={cancel}\n onEditClick={() => setIsEditing(true)}\n onResetLayout={resetLayout}\n onSaveChanges={saveLayout}\n widgetsDrawerSlug={drawerSlug}\n />\n ),\n },\n ])\n }, [isEditing, drawerSlug, cancel, resetLayout, saveLayout, setIsEditing, setStepNav])\n\n return (\n <>\n {isEditing && (\n <ItemsDrawer\n drawerSlug={drawerSlug}\n items={widgets}\n onItemClick={(widget) => addWidget(widget.slug)}\n searchPlaceholder={t('dashboard:searchWidgets')}\n title={t('dashboard:addWidget')}\n />\n )}\n </>\n )\n}\n\nexport function DashboardBreadcrumbDropdown(props: {\n isEditing: boolean\n onCancel: () => void\n onEditClick: () => void\n onResetLayout: () => void\n onSaveChanges: () => void\n widgetsDrawerSlug: string\n}) {\n const { isEditing, onCancel, onEditClick, onResetLayout, onSaveChanges, widgetsDrawerSlug } =\n props\n if (isEditing) {\n return (\n <div className=\"dashboard-breadcrumb-dropdown__editing\">\n <span>Editing Dashboard</span>\n <div className=\"dashboard-breadcrumb-dropdown__actions\">\n <DrawerToggler className=\"drawer-toggler--unstyled\" slug={widgetsDrawerSlug}>\n <Button buttonStyle=\"pill\" el=\"span\" size=\"small\">\n Add +\n </Button>\n </DrawerToggler>\n <Button buttonStyle=\"pill\" onClick={onSaveChanges} size=\"small\">\n Save Changes\n </Button>\n <Button buttonStyle=\"pill\" onClick={onCancel} size=\"small\">\n Cancel\n </Button>\n </div>\n </div>\n )\n }\n\n const options = [\n { label: 'Edit Dashboard', value: 'edit' },\n { label: 'Reset Layout', value: 'reset' },\n ]\n\n const handleChange = (selectedOption: Option | Option[]) => {\n // Since isMulti is false, we expect a single Option\n const option = Array.isArray(selectedOption) ? selectedOption[0] : selectedOption\n\n if (option?.value === 'edit') {\n onEditClick()\n } else if (option?.value === 'reset') {\n onResetLayout()\n }\n }\n\n return (\n <ReactSelect\n className=\"dashboard-breadcrumb-select\"\n isClearable={false}\n isSearchable={false}\n menuIsOpen={undefined} // Let ReactSelect handle open/close\n onChange={handleChange}\n options={options}\n placeholder=\"Dashboard\"\n value={{ label: 'Dashboard', value: 'dashboard' }}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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 '@ruya.sa/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 '@ruya.sa/payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport { ChevronIcon, Popup, PopupList, useTranslation, XIcon } from '@ruya.sa/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":"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","ignoreList":[]}
|