@rnaga/wp-next-admin 1.0.1
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/README.md +292 -0
- package/client/components/RootLayout.d.ts +13 -0
- package/client/components/RootLayout.d.ts.map +1 -0
- package/client/components/RootLayout.js +13 -0
- package/client/components/WrapperRootLayout.d.ts +9 -0
- package/client/components/WrapperRootLayout.d.ts.map +1 -0
- package/client/components/WrapperRootLayout.js +5 -0
- package/client/components/contents/blogs/Create.d.ts +2 -0
- package/client/components/contents/blogs/Create.d.ts.map +1 -0
- package/client/components/contents/blogs/Create.js +67 -0
- package/client/components/contents/blogs/Edit.d.ts +2 -0
- package/client/components/contents/blogs/Edit.d.ts.map +1 -0
- package/client/components/contents/blogs/Edit.js +144 -0
- package/client/components/contents/blogs/List.d.ts +2 -0
- package/client/components/contents/blogs/List.d.ts.map +1 -0
- package/client/components/contents/blogs/List.js +56 -0
- package/client/components/contents/blogs/index.d.ts +6 -0
- package/client/components/contents/blogs/index.d.ts.map +1 -0
- package/client/components/contents/blogs/index.js +8 -0
- package/client/components/contents/comments/ActionLink.d.ts +5 -0
- package/client/components/contents/comments/ActionLink.d.ts.map +1 -0
- package/client/components/contents/comments/ActionLink.js +67 -0
- package/client/components/contents/comments/List/Reply.d.ts +5 -0
- package/client/components/contents/comments/List/Reply.d.ts.map +1 -0
- package/client/components/contents/comments/List/Reply.js +33 -0
- package/client/components/contents/comments/List/Row.d.ts +5 -0
- package/client/components/contents/comments/List/Row.d.ts.map +1 -0
- package/client/components/contents/comments/List/Row.js +30 -0
- package/client/components/contents/comments/List/Toolbar.d.ts +8 -0
- package/client/components/contents/comments/List/Toolbar.d.ts.map +1 -0
- package/client/components/contents/comments/List/Toolbar.js +14 -0
- package/client/components/contents/comments/List/index.d.ts +5 -0
- package/client/components/contents/comments/List/index.d.ts.map +1 -0
- package/client/components/contents/comments/List/index.js +38 -0
- package/client/components/contents/comments/index.d.ts +7 -0
- package/client/components/contents/comments/index.d.ts.map +1 -0
- package/client/components/contents/comments/index.js +6 -0
- package/client/components/contents/dashboard/index.d.ts +2 -0
- package/client/components/contents/dashboard/index.d.ts.map +1 -0
- package/client/components/contents/dashboard/index.js +123 -0
- package/client/components/contents/index.d.ts +46 -0
- package/client/components/contents/index.d.ts.map +1 -0
- package/client/components/contents/index.js +28 -0
- package/client/components/contents/media/Edit.d.ts +2 -0
- package/client/components/contents/media/Edit.d.ts.map +1 -0
- package/client/components/contents/media/Edit.js +86 -0
- package/client/components/contents/media/List/ActionLink.d.ts +5 -0
- package/client/components/contents/media/List/ActionLink.d.ts.map +1 -0
- package/client/components/contents/media/List/ActionLink.js +24 -0
- package/client/components/contents/media/List/Table.d.ts +5 -0
- package/client/components/contents/media/List/Table.d.ts.map +1 -0
- package/client/components/contents/media/List/Table.js +38 -0
- package/client/components/contents/media/List/Thumbnail.d.ts +5 -0
- package/client/components/contents/media/List/Thumbnail.d.ts.map +1 -0
- package/client/components/contents/media/List/Thumbnail.js +28 -0
- package/client/components/contents/media/List/index.d.ts +2 -0
- package/client/components/contents/media/List/index.d.ts.map +1 -0
- package/client/components/contents/media/List/index.js +66 -0
- package/client/components/contents/media/index.d.ts +5 -0
- package/client/components/contents/media/index.d.ts.map +1 -0
- package/client/components/contents/media/index.js +6 -0
- package/client/components/contents/pages/Edit/Settings.d.ts +2 -0
- package/client/components/contents/pages/Edit/Settings.d.ts.map +1 -0
- package/client/components/contents/pages/Edit/Settings.js +17 -0
- package/client/components/contents/pages/Edit/Toolbar.d.ts +2 -0
- package/client/components/contents/pages/Edit/Toolbar.d.ts.map +1 -0
- package/client/components/contents/pages/Edit/Toolbar.js +72 -0
- package/client/components/contents/pages/Edit/index.d.ts +2 -0
- package/client/components/contents/pages/Edit/index.d.ts.map +1 -0
- package/client/components/contents/pages/Edit/index.js +43 -0
- package/client/components/contents/pages/List/ActionLink.d.ts +5 -0
- package/client/components/contents/pages/List/ActionLink.d.ts.map +1 -0
- package/client/components/contents/pages/List/ActionLink.js +12 -0
- package/client/components/contents/pages/List/Statuses.d.ts +2 -0
- package/client/components/contents/pages/List/Statuses.d.ts.map +1 -0
- package/client/components/contents/pages/List/Statuses.js +24 -0
- package/client/components/contents/pages/List/Toolbar.d.ts +8 -0
- package/client/components/contents/pages/List/Toolbar.d.ts.map +1 -0
- package/client/components/contents/pages/List/Toolbar.js +14 -0
- package/client/components/contents/pages/List/index.d.ts +2 -0
- package/client/components/contents/pages/List/index.d.ts.map +1 -0
- package/client/components/contents/pages/List/index.js +45 -0
- package/client/components/contents/pages/index.d.ts +5 -0
- package/client/components/contents/pages/index.d.ts.map +1 -0
- package/client/components/contents/pages/index.js +6 -0
- package/client/components/contents/posts/Edit/Settings.d.ts +2 -0
- package/client/components/contents/posts/Edit/Settings.d.ts.map +1 -0
- package/client/components/contents/posts/Edit/Settings.js +19 -0
- package/client/components/contents/posts/Edit/Toolbar.d.ts +2 -0
- package/client/components/contents/posts/Edit/Toolbar.d.ts.map +1 -0
- package/client/components/contents/posts/Edit/Toolbar.js +72 -0
- package/client/components/contents/posts/Edit/index.d.ts +2 -0
- package/client/components/contents/posts/Edit/index.d.ts.map +1 -0
- package/client/components/contents/posts/Edit/index.js +43 -0
- package/client/components/contents/posts/List/ActionLink.d.ts +5 -0
- package/client/components/contents/posts/List/ActionLink.d.ts.map +1 -0
- package/client/components/contents/posts/List/ActionLink.js +12 -0
- package/client/components/contents/posts/List/Statuses.d.ts +2 -0
- package/client/components/contents/posts/List/Statuses.d.ts.map +1 -0
- package/client/components/contents/posts/List/Statuses.js +32 -0
- package/client/components/contents/posts/List/Toolbar.d.ts +8 -0
- package/client/components/contents/posts/List/Toolbar.d.ts.map +1 -0
- package/client/components/contents/posts/List/Toolbar.js +14 -0
- package/client/components/contents/posts/List/index.d.ts +2 -0
- package/client/components/contents/posts/List/index.d.ts.map +1 -0
- package/client/components/contents/posts/List/index.js +46 -0
- package/client/components/contents/posts/index.d.ts +5 -0
- package/client/components/contents/posts/index.d.ts.map +1 -0
- package/client/components/contents/posts/index.js +6 -0
- package/client/components/contents/profile/index.d.ts +2 -0
- package/client/components/contents/profile/index.d.ts.map +1 -0
- package/client/components/contents/profile/index.js +7 -0
- package/client/components/contents/revisions/List/History.d.ts +7 -0
- package/client/components/contents/revisions/List/History.d.ts.map +1 -0
- package/client/components/contents/revisions/List/History.js +37 -0
- package/client/components/contents/revisions/List/diff2html.css +11 -0
- package/client/components/contents/revisions/List/index.d.ts +9 -0
- package/client/components/contents/revisions/List/index.d.ts.map +1 -0
- package/client/components/contents/revisions/List/index.js +145 -0
- package/client/components/contents/revisions/index.d.ts +2 -0
- package/client/components/contents/revisions/index.d.ts.map +1 -0
- package/client/components/contents/revisions/index.js +1 -0
- package/client/components/contents/roles/List/EditModal.d.ts +8 -0
- package/client/components/contents/roles/List/EditModal.d.ts.map +1 -0
- package/client/components/contents/roles/List/EditModal.js +153 -0
- package/client/components/contents/roles/List/index.d.ts +7 -0
- package/client/components/contents/roles/List/index.d.ts.map +1 -0
- package/client/components/contents/roles/List/index.js +111 -0
- package/client/components/contents/roles/index.d.ts +2 -0
- package/client/components/contents/roles/index.d.ts.map +1 -0
- package/client/components/contents/roles/index.js +1 -0
- package/client/components/contents/settings/index.d.ts +2 -0
- package/client/components/contents/settings/index.d.ts.map +1 -0
- package/client/components/contents/settings/index.js +67 -0
- package/client/components/contents/sites/Create.d.ts +2 -0
- package/client/components/contents/sites/Create.d.ts.map +1 -0
- package/client/components/contents/sites/Create.js +53 -0
- package/client/components/contents/sites/Delete.d.ts +2 -0
- package/client/components/contents/sites/Delete.d.ts.map +1 -0
- package/client/components/contents/sites/Delete.js +125 -0
- package/client/components/contents/sites/Edit.d.ts +2 -0
- package/client/components/contents/sites/Edit.d.ts.map +1 -0
- package/client/components/contents/sites/Edit.js +120 -0
- package/client/components/contents/sites/List.d.ts +2 -0
- package/client/components/contents/sites/List.d.ts.map +1 -0
- package/client/components/contents/sites/List.js +33 -0
- package/client/components/contents/sites/index.d.ts +7 -0
- package/client/components/contents/sites/index.d.ts.map +1 -0
- package/client/components/contents/sites/index.js +10 -0
- package/client/components/contents/terms/List/ActionLink.d.ts +5 -0
- package/client/components/contents/terms/List/ActionLink.d.ts.map +1 -0
- package/client/components/contents/terms/List/ActionLink.js +44 -0
- package/client/components/contents/terms/List/Toolbar.d.ts +8 -0
- package/client/components/contents/terms/List/Toolbar.d.ts.map +1 -0
- package/client/components/contents/terms/List/Toolbar.js +20 -0
- package/client/components/contents/terms/List/index.d.ts +18 -0
- package/client/components/contents/terms/List/index.d.ts.map +1 -0
- package/client/components/contents/terms/List/index.js +94 -0
- package/client/components/contents/terms/index.d.ts +2 -0
- package/client/components/contents/terms/index.d.ts.map +1 -0
- package/client/components/contents/terms/index.js +1 -0
- package/client/components/contents/users/Create.d.ts +2 -0
- package/client/components/contents/users/Create.d.ts.map +1 -0
- package/client/components/contents/users/Create.js +47 -0
- package/client/components/contents/users/Delete.d.ts +2 -0
- package/client/components/contents/users/Delete.d.ts.map +1 -0
- package/client/components/contents/users/Delete.js +113 -0
- package/client/components/contents/users/Edit/Profile/GenerateResetLinkModal.d.ts +6 -0
- package/client/components/contents/users/Edit/Profile/GenerateResetLinkModal.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Profile/GenerateResetLinkModal.js +40 -0
- package/client/components/contents/users/Edit/Profile/ResetPasswordModal.d.ts +6 -0
- package/client/components/contents/users/Edit/Profile/ResetPasswordModal.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Profile/ResetPasswordModal.js +41 -0
- package/client/components/contents/users/Edit/Profile/index.d.ts +4 -0
- package/client/components/contents/users/Edit/Profile/index.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Profile/index.js +111 -0
- package/client/components/contents/users/Edit/Roles/ActionLink.d.ts +6 -0
- package/client/components/contents/users/Edit/Roles/ActionLink.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/ActionLink.js +63 -0
- package/client/components/contents/users/Edit/Roles/Add.d.ts +5 -0
- package/client/components/contents/users/Edit/Roles/Add.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/Add.js +60 -0
- package/client/components/contents/users/Edit/Roles/Edit.d.ts +8 -0
- package/client/components/contents/users/Edit/Roles/Edit.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/Edit.js +53 -0
- package/client/components/contents/users/Edit/Roles/Roles.d.ts +4 -0
- package/client/components/contents/users/Edit/Roles/Roles.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/Roles.js +41 -0
- package/client/components/contents/users/Edit/Roles/context.d.ts +9 -0
- package/client/components/contents/users/Edit/Roles/context.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/context.js +2 -0
- package/client/components/contents/users/Edit/Roles/index.d.ts +3 -0
- package/client/components/contents/users/Edit/Roles/index.d.ts.map +1 -0
- package/client/components/contents/users/Edit/Roles/index.js +2 -0
- package/client/components/contents/users/Edit/index.d.ts +4 -0
- package/client/components/contents/users/Edit/index.d.ts.map +1 -0
- package/client/components/contents/users/Edit/index.js +66 -0
- package/client/components/contents/users/List/CountRoles.d.ts +2 -0
- package/client/components/contents/users/List/CountRoles.d.ts.map +1 -0
- package/client/components/contents/users/List/CountRoles.js +68 -0
- package/client/components/contents/users/List/Toolbar.d.ts +10 -0
- package/client/components/contents/users/List/Toolbar.d.ts.map +1 -0
- package/client/components/contents/users/List/Toolbar.js +32 -0
- package/client/components/contents/users/List/index.d.ts +2 -0
- package/client/components/contents/users/List/index.d.ts.map +1 -0
- package/client/components/contents/users/List/index.js +30 -0
- package/client/components/contents/users/index.d.ts +9 -0
- package/client/components/contents/users/index.d.ts.map +1 -0
- package/client/components/contents/users/index.js +10 -0
- package/client/components/layout/Layout.d.ts +3 -0
- package/client/components/layout/Layout.d.ts.map +1 -0
- package/client/components/layout/Layout.js +69 -0
- package/client/components/layout/Main.d.ts +2 -0
- package/client/components/layout/Main.d.ts.map +1 -0
- package/client/components/layout/Main.js +12 -0
- package/client/components/layout/Overlay.d.ts +2 -0
- package/client/components/layout/Overlay.d.ts.map +1 -0
- package/client/components/layout/Overlay.js +49 -0
- package/client/components/layout/Title.d.ts +2 -0
- package/client/components/layout/Title.d.ts.map +1 -0
- package/client/components/layout/Title.js +19 -0
- package/client/components/layout/WrapperLayout.d.ts +2 -0
- package/client/components/layout/WrapperLayout.d.ts.map +1 -0
- package/client/components/layout/WrapperLayout.js +5 -0
- package/client/components/layout/header/Profile.d.ts +2 -0
- package/client/components/layout/header/Profile.d.ts.map +1 -0
- package/client/components/layout/header/Profile.js +66 -0
- package/client/components/layout/header/index.d.ts +2 -0
- package/client/components/layout/header/index.d.ts.map +1 -0
- package/client/components/layout/header/index.js +176 -0
- package/client/components/layout/sidebar/Collapse.d.ts +4 -0
- package/client/components/layout/sidebar/Collapse.d.ts.map +1 -0
- package/client/components/layout/sidebar/Collapse.js +53 -0
- package/client/components/layout/sidebar/Menus.d.ts +5 -0
- package/client/components/layout/sidebar/Menus.d.ts.map +1 -0
- package/client/components/layout/sidebar/Menus.js +76 -0
- package/client/components/layout/sidebar/index.d.ts +2 -0
- package/client/components/layout/sidebar/index.d.ts.map +1 -0
- package/client/components/layout/sidebar/index.js +86 -0
- package/client/components/utils/ErrorFallback.d.ts +6 -0
- package/client/components/utils/ErrorFallback.d.ts.map +1 -0
- package/client/components/utils/ErrorFallback.js +36 -0
- package/client/components/utils/dropdown/SelectWPAvailableSite.d.ts +7 -0
- package/client/components/utils/dropdown/SelectWPAvailableSite.d.ts.map +1 -0
- package/client/components/utils/dropdown/SelectWPAvailableSite.js +58 -0
- package/client/components/utils/dropdown/SelectWPSite.d.ts +5 -0
- package/client/components/utils/dropdown/SelectWPSite.d.ts.map +1 -0
- package/client/components/utils/dropdown/SelectWPSite.js +27 -0
- package/client/components/utils/dropdown/index.d.ts +2 -0
- package/client/components/utils/dropdown/index.d.ts.map +1 -0
- package/client/components/utils/dropdown/index.js +1 -0
- package/client/components/utils/index.d.ts +2 -0
- package/client/components/utils/index.d.ts.map +1 -0
- package/client/components/utils/index.js +1 -0
- package/client/components/utils/link/AdminLink.d.ts +46 -0
- package/client/components/utils/link/AdminLink.d.ts.map +1 -0
- package/client/components/utils/link/AdminLink.js +61 -0
- package/client/components/utils/link/index.d.ts +2 -0
- package/client/components/utils/link/index.d.ts.map +1 -0
- package/client/components/utils/link/index.js +2 -0
- package/client/components/utils/modal/CommentModal.d.ts +2 -0
- package/client/components/utils/modal/CommentModal.d.ts.map +1 -0
- package/client/components/utils/modal/CommentModal.js +53 -0
- package/client/components/utils/modal/TermModal.d.ts +10 -0
- package/client/components/utils/modal/TermModal.d.ts.map +1 -0
- package/client/components/utils/modal/TermModal.js +70 -0
- package/client/components/utils/modal/index.d.ts +3 -0
- package/client/components/utils/modal/index.d.ts.map +1 -0
- package/client/components/utils/modal/index.js +2 -0
- package/client/components/utils/post/PostPanel.d.ts +15 -0
- package/client/components/utils/post/PostPanel.d.ts.map +1 -0
- package/client/components/utils/post/PostPanel.js +70 -0
- package/client/components/utils/post/index.d.ts +4 -0
- package/client/components/utils/post/index.d.ts.map +1 -0
- package/client/components/utils/post/index.js +3 -0
- package/client/components/utils/post/link/PostActionLink.d.ts +9 -0
- package/client/components/utils/post/link/PostActionLink.d.ts.map +1 -0
- package/client/components/utils/post/link/PostActionLink.js +90 -0
- package/client/components/utils/post/link/PostRowLinks.d.ts +8 -0
- package/client/components/utils/post/link/PostRowLinks.d.ts.map +1 -0
- package/client/components/utils/post/link/PostRowLinks.js +30 -0
- package/client/components/utils/post/link/index.d.ts +3 -0
- package/client/components/utils/post/link/index.d.ts.map +1 -0
- package/client/components/utils/post/link/index.js +2 -0
- package/client/components/utils/post/settings/Categories.d.ts +2 -0
- package/client/components/utils/post/settings/Categories.d.ts.map +1 -0
- package/client/components/utils/post/settings/Categories.js +23 -0
- package/client/components/utils/post/settings/Discussion.d.ts +2 -0
- package/client/components/utils/post/settings/Discussion.d.ts.map +1 -0
- package/client/components/utils/post/settings/Discussion.js +25 -0
- package/client/components/utils/post/settings/Excerpt.d.ts +2 -0
- package/client/components/utils/post/settings/Excerpt.d.ts.map +1 -0
- package/client/components/utils/post/settings/Excerpt.js +9 -0
- package/client/components/utils/post/settings/FeaturedImage.d.ts +2 -0
- package/client/components/utils/post/settings/FeaturedImage.d.ts.map +1 -0
- package/client/components/utils/post/settings/FeaturedImage.js +63 -0
- package/client/components/utils/post/settings/PageAttributes.d.ts +2 -0
- package/client/components/utils/post/settings/PageAttributes.d.ts.map +1 -0
- package/client/components/utils/post/settings/PageAttributes.js +23 -0
- package/client/components/utils/post/settings/Revisions.d.ts +2 -0
- package/client/components/utils/post/settings/Revisions.d.ts.map +1 -0
- package/client/components/utils/post/settings/Revisions.js +44 -0
- package/client/components/utils/post/settings/Summary.d.ts +2 -0
- package/client/components/utils/post/settings/Summary.d.ts.map +1 -0
- package/client/components/utils/post/settings/Summary.js +58 -0
- package/client/components/utils/post/settings/Tags.d.ts +2 -0
- package/client/components/utils/post/settings/Tags.d.ts.map +1 -0
- package/client/components/utils/post/settings/Tags.js +11 -0
- package/client/components/utils/post/settings/index.d.ts +9 -0
- package/client/components/utils/post/settings/index.d.ts.map +1 -0
- package/client/components/utils/post/settings/index.js +8 -0
- package/client/hooks/index.d.ts +6 -0
- package/client/hooks/index.d.ts.map +1 -0
- package/client/hooks/index.js +5 -0
- package/client/hooks/use-admin-navigation.d.ts +39 -0
- package/client/hooks/use-admin-navigation.d.ts.map +1 -0
- package/client/hooks/use-admin-navigation.js +61 -0
- package/client/hooks/use-admin-server-actions.d.ts +49 -0
- package/client/hooks/use-admin-server-actions.d.ts.map +1 -0
- package/client/hooks/use-admin-server-actions.js +13 -0
- package/client/hooks/use-admin-user.d.ts +130 -0
- package/client/hooks/use-admin-user.d.ts.map +1 -0
- package/client/hooks/use-admin-user.js +19 -0
- package/client/hooks/use-current-menu.d.ts +3 -0
- package/client/hooks/use-current-menu.d.ts.map +1 -0
- package/client/hooks/use-current-menu.js +37 -0
- package/client/hooks/use-sidebar.d.ts +27 -0
- package/client/hooks/use-sidebar.d.ts.map +1 -0
- package/client/hooks/use-sidebar.js +51 -0
- package/client/hooks/use-sites.d.ts +136 -0
- package/client/hooks/use-sites.d.ts.map +1 -0
- package/client/hooks/use-sites.js +43 -0
- package/client/utils/get-default-admin-hooks.d.ts +3 -0
- package/client/utils/get-default-admin-hooks.d.ts.map +1 -0
- package/client/utils/get-default-admin-hooks.js +3 -0
- package/client/utils/index.d.ts +2 -0
- package/client/utils/index.d.ts.map +1 -0
- package/client/utils/index.js +1 -0
- package/client/wp-admin/initial-global-state.d.ts +5 -0
- package/client/wp-admin/initial-global-state.d.ts.map +1 -0
- package/client/wp-admin/initial-global-state.js +46 -0
- package/client/wp-admin/use-comment.d.ts +55 -0
- package/client/wp-admin/use-comment.d.ts.map +1 -0
- package/client/wp-admin/use-comment.js +32 -0
- package/client/wp-admin/use-overlay.d.ts +28 -0
- package/client/wp-admin/use-overlay.d.ts.map +1 -0
- package/client/wp-admin/use-overlay.js +89 -0
- package/client/wp-admin.d.ts +27 -0
- package/client/wp-admin.d.ts.map +1 -0
- package/client/wp-admin.js +49 -0
- package/client/wp-hooks/index.d.ts +5 -0
- package/client/wp-hooks/index.d.ts.map +1 -0
- package/client/wp-hooks/index.js +5 -0
- package/client/wp-hooks/menu-blog.hook.d.ts +11 -0
- package/client/wp-hooks/menu-blog.hook.d.ts.map +1 -0
- package/client/wp-hooks/menu-blog.hook.js +236 -0
- package/client/wp-hooks/menu-site.hook.d.ts +11 -0
- package/client/wp-hooks/menu-site.hook.d.ts.map +1 -0
- package/client/wp-hooks/menu-site.hook.js +171 -0
- package/client/wp-hooks/preload-modal.hook.d.ts +10 -0
- package/client/wp-hooks/preload-modal.hook.d.ts.map +1 -0
- package/client/wp-hooks/preload-modal.hook.js +45 -0
- package/client/wp-hooks/themes.hook.d.ts +9 -0
- package/client/wp-hooks/themes.hook.d.ts.map +1 -0
- package/client/wp-hooks/themes.hook.js +32 -0
- package/package.json +64 -0
- package/server/actions/dashboard.d.ts +141 -0
- package/server/actions/dashboard.d.ts.map +1 -0
- package/server/actions/dashboard.js +52 -0
- package/server/components/Page.d.ts +2 -0
- package/server/components/Page.d.ts.map +1 -0
- package/server/components/Page.js +3 -0
- package/server/components/RootLayout.d.ts +5 -0
- package/server/components/RootLayout.d.ts.map +1 -0
- package/server/components/RootLayout.js +57 -0
- package/server/components/RootPage.d.ts +2 -0
- package/server/components/RootPage.d.ts.map +1 -0
- package/server/components/RootPage.js +19 -0
- package/server/utils/get-default-admin-hooks.d.ts +3 -0
- package/server/utils/get-default-admin-hooks.d.ts.map +1 -0
- package/server/utils/get-default-admin-hooks.js +4 -0
- package/server/utils/index.d.ts +2 -0
- package/server/utils/index.d.ts.map +1 -0
- package/server/utils/index.js +1 -0
- package/server/wp-admin.d.ts +40 -0
- package/server/wp-admin.d.ts.map +1 -0
- package/server/wp-admin.js +58 -0
- package/server/wp-hooks/index.d.ts +3 -0
- package/server/wp-hooks/index.d.ts.map +1 -0
- package/server/wp-hooks/index.js +3 -0
- package/server/wp-hooks/next-admin-init.hook.d.ts +15 -0
- package/server/wp-hooks/next-admin-init.hook.d.ts.map +1 -0
- package/server/wp-hooks/next-admin-init.hook.js +65 -0
- package/types/client/form-data.d.ts +27 -0
- package/types/client/global-ref.d.ts +7 -0
- package/types/client/global-state.d.ts +78 -0
- package/types/client/index.d.ts +5 -0
- package/types/client/menus.d.ts +39 -0
- package/types/client.d.ts +40 -0
- package/types/hooks/actions.d.ts +4 -0
- package/types/hooks/filters.d.ts +39 -0
- package/types/hooks/index.d.ts +2 -0
- package/types/index.d.ts +4 -0
- package/types/server-actions.d.ts +21 -0
- package/types/theme.d.ts +33 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { Box } from "@mui/material";
|
|
4
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
5
|
+
import { AdminLink } from "../../../../components/utils/link";
|
|
6
|
+
import { useAdminNavigation } from "../../../../hooks/use-admin-navigation";
|
|
7
|
+
import { useWPAdmin } from "../../../../wp-admin";
|
|
8
|
+
import { TermsContext } from "./";
|
|
9
|
+
export const ActionLink = (props) => {
|
|
10
|
+
const { term } = props;
|
|
11
|
+
const { overlay } = useWPAdmin();
|
|
12
|
+
const { refresh } = useAdminNavigation();
|
|
13
|
+
const { actions, safeParse } = useServerActions();
|
|
14
|
+
const { edit, setEdit, permissions, taxonomy } = useContext(TermsContext);
|
|
15
|
+
const handleEditOpen = (term) => () => {
|
|
16
|
+
setEdit({
|
|
17
|
+
...edit,
|
|
18
|
+
open: true,
|
|
19
|
+
selectedTerm: term,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const handleDelete = (term) => () => {
|
|
23
|
+
if (!taxonomy) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const message = "This action cannot be undone. This will permanently delete your item.";
|
|
27
|
+
const title = "Are you absolutely sure?";
|
|
28
|
+
overlay.confirm.open(message, async (confirm) => {
|
|
29
|
+
if (!confirm) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const result = await overlay.circular
|
|
33
|
+
.promise(actions.term.del(term.term_id, taxonomy.name))
|
|
34
|
+
.then(safeParse);
|
|
35
|
+
if (!result.success) {
|
|
36
|
+
overlay.snackbar.open("error", result.error);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
overlay.snackbar.open("success", "Item has been deleted Permanently");
|
|
40
|
+
refresh(["content"]);
|
|
41
|
+
}, title);
|
|
42
|
+
};
|
|
43
|
+
return (_jsxs(Box, { sx: { display: "flex", gap: 0.5 }, children: [permissions?.edit_terms && (_jsx(AdminLink, { onClick: handleEditOpen(term), children: "Edit" })), permissions?.delete_terms && (_jsx(AdminLink, { color: "error", onClick: handleDelete(term), children: "Delete" }))] }));
|
|
44
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import type * as wpCoreTypes from "@rnaga/wp-next-core/types";
|
|
3
|
+
export declare const Toolbar: (props: {
|
|
4
|
+
terms?: wpCoreTypes.actions.Terms;
|
|
5
|
+
info?: wpCoreTypes.actions.TermsInfo;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=Toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../../../src/client/components/contents/terms/List/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAU9C,OAAO,KAAK,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAE9D,eAAO,MAAM,OAAO,GAAI,OAAO;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,4CAiCA,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { Box } from "@mui/material";
|
|
4
|
+
import { Button } from "@rnaga/wp-next-ui/Button";
|
|
5
|
+
import { InputSearch } from "@rnaga/wp-next-ui/InputSearch";
|
|
6
|
+
import { Pagination } from "@rnaga/wp-next-ui/list/Pagination";
|
|
7
|
+
import { useWPAdmin } from "../../../../wp-admin";
|
|
8
|
+
import { TermsContext } from "./";
|
|
9
|
+
export const Toolbar = (props) => {
|
|
10
|
+
const { info, children } = props;
|
|
11
|
+
const { wp: { viewport }, } = useWPAdmin();
|
|
12
|
+
const { edit: { addNew }, permissions, taxonomy, } = useContext(TermsContext);
|
|
13
|
+
const canCreate = (true === taxonomy?.hierarchical && permissions?.edit_terms) ||
|
|
14
|
+
(false === taxonomy?.hierarchical && permissions?.assign_terms);
|
|
15
|
+
return (_jsxs(_Fragment, { children: [_jsx(Box, { sx: { display: "flex", justifyContent: "flex-end" }, children: canCreate && _jsx(Button, { onClick: () => addNew(), children: "Create New Term" }) }), _jsxs(Box, { sx: {
|
|
16
|
+
display: "grid",
|
|
17
|
+
gap: 1,
|
|
18
|
+
gridTemplateColumns: viewport.isMobile ? "1fr" : "repeat(2, 1fr) 2fr",
|
|
19
|
+
}, children: [children, " ", _jsx(InputSearch, { size: "medium" }), _jsx(Pagination, { pagination: info?.pagination })] })] }));
|
|
20
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction } from "react";
|
|
2
|
+
import type * as wpCoreTypes from "@rnaga/wp-next-core/types";
|
|
3
|
+
import type * as wpTypes from "@rnaga/wp-node/types";
|
|
4
|
+
type Permissions = Record<wpTypes.TaxonomyCapability, boolean>;
|
|
5
|
+
type EditState = {
|
|
6
|
+
open: boolean;
|
|
7
|
+
addNew: () => void;
|
|
8
|
+
selectedTerm?: wpCoreTypes.actions.Terms[number];
|
|
9
|
+
};
|
|
10
|
+
export declare const TermsContext: import("react").Context<{
|
|
11
|
+
edit: EditState;
|
|
12
|
+
setEdit: Dispatch<SetStateAction<EditState>>;
|
|
13
|
+
taxonomy?: wpCoreTypes.actions.Taxonomies[number];
|
|
14
|
+
permissions?: Permissions;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const List: () => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/client/components/contents/terms/List/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,cAAc,EAKf,MAAM,OAAO,CAAC;AA2Bf,OAAO,KAAK,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAErD,KAAK,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AAE/D,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,YAAY;UACjB,SAAS;aACN,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;eACjC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;kBACnC,WAAW;EACd,CAAC;AAEd,eAAO,MAAM,IAAI,+CAwLhB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useEffect, useState, useTransition, } from "react";
|
|
3
|
+
import { AccordionDetails, Stack } from "@mui/material";
|
|
4
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
5
|
+
import { Accordion } from "@rnaga/wp-next-ui/Accordion";
|
|
6
|
+
import { ActionTd, ListGrid, ListGridItem, ListGridTitle, SortableTh, Table, Td, Th, THead, Tr, } from "@rnaga/wp-next-ui/list";
|
|
7
|
+
import { Loading } from "@rnaga/wp-next-ui/Loading";
|
|
8
|
+
import { SelectWPTaxonomy } from "@rnaga/wp-next-ui/SelectWPTaxonomy";
|
|
9
|
+
import { Typography } from "@rnaga/wp-next-ui/Typography";
|
|
10
|
+
import { TermModal } from "../../../../components/utils/modal";
|
|
11
|
+
import { useAdminNavigation } from "../../../../hooks/use-admin-navigation";
|
|
12
|
+
import { useWPAdmin } from "../../../../wp-admin";
|
|
13
|
+
import { ActionLink } from "./ActionLink";
|
|
14
|
+
import { Toolbar } from "./Toolbar";
|
|
15
|
+
export const TermsContext = createContext({});
|
|
16
|
+
export const List = () => {
|
|
17
|
+
const { overlay } = useWPAdmin();
|
|
18
|
+
const { refresh, pushRouter } = useAdminNavigation();
|
|
19
|
+
const { actions, parse, safeParse } = useServerActions();
|
|
20
|
+
const { queryObject, navigationStatus, refreshValue } = useAdminNavigation();
|
|
21
|
+
const { taxonomy: taxonomyName = "category", ...listQueryObject } = queryObject;
|
|
22
|
+
const [{ terms, info }, setTerms] = useState({
|
|
23
|
+
terms: undefined,
|
|
24
|
+
info: undefined,
|
|
25
|
+
});
|
|
26
|
+
const [taxonomy, setTaxonomy] = useState();
|
|
27
|
+
const [permissions, setPermissions] = useState();
|
|
28
|
+
const [edit, setEdit] = useState({
|
|
29
|
+
open: false,
|
|
30
|
+
addNew: () => {
|
|
31
|
+
setEdit({ ...edit, open: true, selectedTerm: undefined });
|
|
32
|
+
},
|
|
33
|
+
selectedTerm: undefined,
|
|
34
|
+
});
|
|
35
|
+
const [loading, startTransition] = useTransition();
|
|
36
|
+
const fetchTerms = useCallback(async () => {
|
|
37
|
+
if (!taxonomy) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const [terms, info] = await actions.term
|
|
41
|
+
.list(taxonomyName, {
|
|
42
|
+
orderby: "term_id",
|
|
43
|
+
order: "desc",
|
|
44
|
+
...listQueryObject,
|
|
45
|
+
})
|
|
46
|
+
.then(parse);
|
|
47
|
+
setTerms({ terms, info });
|
|
48
|
+
}, [taxonomy, navigationStatus, refreshValue().content]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
startTransition(fetchTerms);
|
|
51
|
+
}, [taxonomy, navigationStatus]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
fetchTerms();
|
|
54
|
+
}, [refreshValue().content]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!taxonomy) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const fetchPermissions = async () => {
|
|
60
|
+
let permissions = {
|
|
61
|
+
manage_terms: false,
|
|
62
|
+
assign_terms: false,
|
|
63
|
+
edit_terms: false,
|
|
64
|
+
delete_terms: false,
|
|
65
|
+
};
|
|
66
|
+
if (!taxonomy.capabilities) {
|
|
67
|
+
return permissions;
|
|
68
|
+
}
|
|
69
|
+
for (const key of Object.keys(permissions)) {
|
|
70
|
+
permissions[key] = (await actions.user.can(taxonomy.capabilities[key]).then(safeParse)).data;
|
|
71
|
+
}
|
|
72
|
+
return permissions;
|
|
73
|
+
};
|
|
74
|
+
fetchPermissions().then(setPermissions);
|
|
75
|
+
}, [taxonomy]);
|
|
76
|
+
const handleEditClose = () => {
|
|
77
|
+
setEdit({ ...edit, open: false, selectedTerm: undefined });
|
|
78
|
+
};
|
|
79
|
+
const handleOnSave = () => {
|
|
80
|
+
overlay.snackbar.open("success", "Term has been saved");
|
|
81
|
+
refresh(["content"]);
|
|
82
|
+
};
|
|
83
|
+
const handleClickTaxonomy = (taxonomy) => {
|
|
84
|
+
setTaxonomy(taxonomy);
|
|
85
|
+
pushRouter({ taxonomy: taxonomy.name });
|
|
86
|
+
};
|
|
87
|
+
const handleInitTaxonomy = (taxonomy) => {
|
|
88
|
+
setTaxonomy(taxonomy);
|
|
89
|
+
};
|
|
90
|
+
return (_jsxs(TermsContext.Provider, { value: { edit, setEdit, taxonomy, permissions }, children: [_jsx(TermModal, { open: edit.open, onClose: handleEditClose, onSave: handleOnSave, taxonomy: taxonomy, selected: edit.selectedTerm }), _jsxs(Stack, { spacing: 1, children: [_jsx(Toolbar, { terms: terms, info: info, children: _jsx(SelectWPTaxonomy, { size: "medium", onClick: handleClickTaxonomy, onInit: handleInitTaxonomy, defaultValue: taxonomyName }) }), _jsx(Loading, { loading: loading || !taxonomy, children: _jsxs(Table, { children: [_jsxs(THead, { children: [_jsx(SortableTh, { name: "Name", orderby: "name" }), _jsx(SortableTh, { viewport: "desktop", name: "Description", orderby: "description" }), _jsx(SortableTh, { viewport: "desktop", name: "Slug", orderby: "slug" }), _jsx(Th, { viewport: "desktop", style: { width: "80px" }, children: "Count" })] }), _jsx("tbody", { children: terms &&
|
|
91
|
+
terms.map((term) => {
|
|
92
|
+
return (_jsxs(Tr, { style: { paddingTop: "1em" }, children: [_jsxs(ActionTd, { viewport: "desktop", children: [_jsx(Typography, { size: "medium", bold: true, children: term.name }), _jsx(ActionLink, { term: term })] }), _jsx(Td, { viewport: "mobile", children: _jsxs(Accordion, { children: [_jsx(ListGridTitle, { title: term.name }), _jsxs(AccordionDetails, { children: [_jsx(ActionLink, { term: term }), _jsxs(ListGrid, { children: [_jsx(ListGridItem, { title: "Slug", children: term.slug }), _jsx(ListGridItem, { title: "Description", children: term.description })] })] })] }) }), _jsx(Td, { viewport: "desktop", children: term.description }), _jsx(Td, { viewport: "desktop", children: term.slug }), _jsx(Td, { viewport: "desktop", children: term.count })] }, `${term.term_id}`));
|
|
93
|
+
}) })] }) })] })] }));
|
|
94
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/client/components/contents/terms/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { List as Terms } from "./List";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Create.d.ts","sourceRoot":"","sources":["../../../../../src/client/components/contents/users/Create.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,MAAM,+CA8ElB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { FormControl, FormLabel, Stack } from "@mui/material";
|
|
4
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
5
|
+
import { Button } from "@rnaga/wp-next-ui/Button";
|
|
6
|
+
import { useFormData } from "@rnaga/wp-next-ui/hooks/use-form-data";
|
|
7
|
+
import { Input } from "@rnaga/wp-next-ui/Input";
|
|
8
|
+
import { Modal, ModalContent } from "@rnaga/wp-next-ui/Modal";
|
|
9
|
+
import { Typography } from "@rnaga/wp-next-ui/Typography";
|
|
10
|
+
import { useAdminNavigation } from "../../../hooks";
|
|
11
|
+
import { useWPAdmin } from "../../../wp-admin";
|
|
12
|
+
import { useState } from "react";
|
|
13
|
+
export const Create = () => {
|
|
14
|
+
const { overlay, wp: { globalState }, } = useWPAdmin();
|
|
15
|
+
const { gotoPath } = useAdminNavigation();
|
|
16
|
+
const { actions, safeParse } = useServerActions();
|
|
17
|
+
const [loading, setLoading] = useState(false);
|
|
18
|
+
const { formData, submit } = useFormData("user");
|
|
19
|
+
const open = globalState.get("user-create-user-modal")?.open;
|
|
20
|
+
const onClose = () => {
|
|
21
|
+
globalState.set("user-create-user-modal", { open: false });
|
|
22
|
+
};
|
|
23
|
+
const handleSubmit = async (data) => {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
const result = await actions.user
|
|
26
|
+
.create({
|
|
27
|
+
user_login: data.user_login,
|
|
28
|
+
user_email: data.user_email,
|
|
29
|
+
nickname: data.nickname,
|
|
30
|
+
})
|
|
31
|
+
.then(safeParse);
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
overlay.snackbar.open("error", result.error);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
gotoPath("/users/edit", {
|
|
37
|
+
queryParams: {
|
|
38
|
+
id: result.data.ID,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
setLoading(false);
|
|
42
|
+
onClose();
|
|
43
|
+
};
|
|
44
|
+
return (_jsx(Modal, { open: !!open, onClose: onClose, sx: { zIndex: 2 }, children: _jsxs(ModalContent, { sx: {
|
|
45
|
+
minWidth: "30%",
|
|
46
|
+
}, children: [_jsx(Typography, { bold: true, fontSize: 20, children: "New User" }), _jsx("form", { onSubmit: submit(handleSubmit), children: _jsxs(Stack, { spacing: 2, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Username" }), _jsx(Input, { size: "medium", name: "user_login", required: true })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Email " }), _jsx(Input, { size: "medium", name: "user_email", required: true })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Nickname" }), _jsx(Input, { size: "medium", name: "nickname", required: true })] }), _jsx(Button, { size: "medium", type: "submit", loading: loading, children: "Submit" })] }) })] }) }));
|
|
47
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Delete.d.ts","sourceRoot":"","sources":["../../../../../src/client/components/contents/users/Delete.tsx"],"names":[],"mappings":"AAwBA,eAAO,MAAM,MAAM,sDAgNlB,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { Alert, Box, FormControl, List, ListItem, Radio, RadioGroup, Stack, } from "@mui/material";
|
|
5
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
6
|
+
import { Button } from "@rnaga/wp-next-ui/Button";
|
|
7
|
+
import { SelectWPUser } from "@rnaga/wp-next-ui/SelectWPUser";
|
|
8
|
+
import { useWPTheme } from "@rnaga/wp-next-ui/ThemeRegistry";
|
|
9
|
+
import { Typography } from "@rnaga/wp-next-ui/Typography";
|
|
10
|
+
import { useAdminNavigation } from "../../../hooks/use-admin-navigation";
|
|
11
|
+
import { useWPAdmin } from "../../../wp-admin";
|
|
12
|
+
export const Delete = () => {
|
|
13
|
+
const { searchParams, gotoPath } = useAdminNavigation();
|
|
14
|
+
const { wp: { error }, overlay, } = useWPAdmin();
|
|
15
|
+
const { actions, parse } = useServerActions();
|
|
16
|
+
const { wpTheme } = useWPTheme();
|
|
17
|
+
const [author, setAuthor] = useState();
|
|
18
|
+
const [blogs, setBlogs] = useState();
|
|
19
|
+
const [disabledRecord, setDisabledRecord] = useState({});
|
|
20
|
+
const userIdMap = useRef(new Map());
|
|
21
|
+
const reassignMap = useRef(new Map());
|
|
22
|
+
const [selectRadioValue, setSelectRadioValue] = useState({});
|
|
23
|
+
const userId = z
|
|
24
|
+
.string()
|
|
25
|
+
.transform((v) => parseInt(v))
|
|
26
|
+
.parse(searchParams.get("id"));
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
actions.user.get(userId).then((response) => {
|
|
29
|
+
const [user] = parse(response);
|
|
30
|
+
setAuthor(user);
|
|
31
|
+
});
|
|
32
|
+
}, []);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const fetchBlogs = async () => {
|
|
35
|
+
const [result] = await actions.user
|
|
36
|
+
.can("delete_user", userId)
|
|
37
|
+
.then(parse);
|
|
38
|
+
if (!result) {
|
|
39
|
+
error.throw("Not permitted");
|
|
40
|
+
}
|
|
41
|
+
const [blogs] = await actions.user.getBlogs(userId).then(parse);
|
|
42
|
+
return blogs;
|
|
43
|
+
};
|
|
44
|
+
fetchBlogs().then((blogs) => {
|
|
45
|
+
setBlogs(blogs);
|
|
46
|
+
});
|
|
47
|
+
}, [userId]);
|
|
48
|
+
const handleReassign = (reassign, blogId) => (e) => {
|
|
49
|
+
if (!reassign) {
|
|
50
|
+
reassignMap.current.delete(blogId);
|
|
51
|
+
setDisabledRecord({ ...disabledRecord, [blogId]: true });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const userId = userIdMap.current.get(blogId);
|
|
55
|
+
if (userId) {
|
|
56
|
+
reassignMap.current.set(blogId, userId);
|
|
57
|
+
}
|
|
58
|
+
setDisabledRecord({ ...disabledRecord, [blogId]: false });
|
|
59
|
+
}
|
|
60
|
+
setSelectRadioValue({ ...selectRadioValue, [blogId]: e.target.value });
|
|
61
|
+
};
|
|
62
|
+
const hanldeUserIdChange = (blogId) => (user) => {
|
|
63
|
+
reassignMap.current.set(blogId, user.ID);
|
|
64
|
+
userIdMap.current.set(blogId, user.ID);
|
|
65
|
+
};
|
|
66
|
+
const handleSubmit = () => {
|
|
67
|
+
overlay.confirm.open("This action cannot be undone. This will permanently delete the user.", async (confirm) => {
|
|
68
|
+
if (!confirm) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const [result] = await overlay.circular.promise(actions.user
|
|
72
|
+
.del(userId, {
|
|
73
|
+
reassignList: Object.fromEntries(reassignMap.current),
|
|
74
|
+
})
|
|
75
|
+
.then(parse));
|
|
76
|
+
if (result) {
|
|
77
|
+
gotoPath("/users");
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const isDisabled = (blogId) => {
|
|
82
|
+
return typeof disabledRecord?.[blogId] !== "boolean"
|
|
83
|
+
? true
|
|
84
|
+
: disabledRecord?.[blogId];
|
|
85
|
+
};
|
|
86
|
+
if (!blogs || !author) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return (_jsxs(Stack, { sx: { pb: 10 }, children: [_jsx(Alert, { variant: "outlined", severity: "error", sx: { mb: 2 }, children: _jsx(Typography, { size: "medium", color: "error", bold: true, children: "You have chosen to delete the user from all networks and sites." }) }), 0 == blogs.length ? (_jsxs(Typography, { size: "medium", children: [_jsx("b", { children: author.display_name }), " has no sites or content and will be deleted."] })) : (_jsxs(_Fragment, { children: [_jsxs(Typography, { size: "medium", children: ["What should be done with content owned by", " ", _jsx("b", { children: author.display_name }), "?"] }), _jsx(Box, { sx: {
|
|
90
|
+
// Set opacity to 0.5 on border
|
|
91
|
+
border: "1px solid",
|
|
92
|
+
borderColor: wpTheme.colorScale[400],
|
|
93
|
+
borderRadius: 1,
|
|
94
|
+
p: 2,
|
|
95
|
+
display: "flex",
|
|
96
|
+
flexDirection: "column",
|
|
97
|
+
gap: 2,
|
|
98
|
+
}, children: blogs.map((blog) => (_jsxs(FormControl, { children: [_jsxs(Typography, { size: "medium", children: ["Blog: ", blog.blogname] }), _jsx(RadioGroup, { defaultValue: "delete", name: blog.blogname, children: _jsxs(List, { children: [_jsx(ListItem, { children: _jsxs(Typography, { size: "medium", component: "div", children: [_jsx(Radio, { value: "delete", checked: !selectRadioValue[blog.blog_id] ||
|
|
99
|
+
selectRadioValue[blog.blog_id] === "delete", onChange: handleReassign(false, blog.blog_id) }), "Delete all content."] }) }), _jsx(ListItem, { children: _jsxs(Typography, { size: "medium", component: "div", children: [_jsx(Radio, { value: "inherit", checked: selectRadioValue[blog.blog_id] === "inherit", onChange: handleReassign(true, blog.blog_id) }), "Inherit all content to another user."] }) }), selectRadioValue[blog.blog_id] === "inherit" && (_jsxs(ListItem, { sx: {
|
|
100
|
+
pl: 7,
|
|
101
|
+
display: "grid",
|
|
102
|
+
gridTemplate: `
|
|
103
|
+
auto
|
|
104
|
+
1fr`,
|
|
105
|
+
alignItems: "center",
|
|
106
|
+
gap: 1,
|
|
107
|
+
py: 0,
|
|
108
|
+
}, children: [_jsx(Typography, { size: "medium", children: "Attribute all content to:" }), _jsx(SelectWPUser, { size: "medium", blogId: blog.blog_id, defaultValue: 1, onChange: hanldeUserIdChange(blog.blog_id), slotSxProps: {
|
|
109
|
+
input: {
|
|
110
|
+
minWidth: 250,
|
|
111
|
+
},
|
|
112
|
+
} })] }))] }) })] }, `${blog.blog_id}`))) })] })), _jsx(Box, { sx: { mt: 2 }, children: _jsx(Button, { size: "medium", sx: { mt: 2 }, onClick: handleSubmit, children: "Confirm Deletion" }) })] }));
|
|
113
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerateResetLinkModal.d.ts","sourceRoot":"","sources":["../../../../../../../src/client/components/contents/users/Edit/Profile/GenerateResetLinkModal.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB,GAAI,OAAO;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,mDAgEA,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { Box } from "@mui/material";
|
|
4
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
5
|
+
import { Modal, ModalContent } from "@rnaga/wp-next-ui/Modal";
|
|
6
|
+
import { Typography } from "@rnaga/wp-next-ui/Typography";
|
|
7
|
+
import { LinkCopy } from "@rnaga/wp-next-ui/LinkCopy";
|
|
8
|
+
import { useWPAdmin } from "../../../../../wp-admin";
|
|
9
|
+
export const GenerateResetLinkModal = (props) => {
|
|
10
|
+
const { open, onClose, userLogin } = props;
|
|
11
|
+
const { site, overlay, wp: { viewport }, } = useWPAdmin();
|
|
12
|
+
const { actions, safeParse } = useServerActions();
|
|
13
|
+
const [resetKey, setResetKey] = useState();
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!open || !userLogin) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
overlay.circular
|
|
19
|
+
.promise(actions.password.requestResetKey(userLogin))
|
|
20
|
+
.then((response) => {
|
|
21
|
+
const result = safeParse(response);
|
|
22
|
+
if (!result.success || typeof result.data !== "string") {
|
|
23
|
+
overlay.snackbar.open("error", result.error);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setResetKey(result.data);
|
|
27
|
+
});
|
|
28
|
+
}, [open, userLogin]);
|
|
29
|
+
const resetLink = `${site.baseUrl}/auth/reset?key=${resetKey}&user_login=${userLogin}`;
|
|
30
|
+
if (!open || !resetKey) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return (_jsx(Modal, { open: true, onClose: onClose, sx: { zIndex: 2 }, children: _jsxs(ModalContent, { sx: { minWidth: "50%" }, children: [_jsx(Typography, { component: "h2", size: "large", bold: true, children: "Reset link" }), _jsxs(Box, { children: [_jsxs(Typography, { component: "div", size: "medium", color: "primary", sx: {
|
|
34
|
+
display: "flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
gap: 1,
|
|
37
|
+
verticalAlign: "middle",
|
|
38
|
+
my: 2,
|
|
39
|
+
}, children: [_jsx(LinkCopy, { link: resetLink, showIcon: true }), " ", resetLink] }), _jsx(Typography, { bold: true, size: "medium", children: "The same link might have been sent out to the email." })] })] }) }));
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResetPasswordModal.d.ts","sourceRoot":"","sources":["../../../../../../../src/client/components/contents/users/Edit/Profile/ResetPasswordModal.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;CAChC,4CAmFA,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import VisibilityIcon from "@mui/icons-material/Visibility";
|
|
4
|
+
import VisibilityOffIcon from "@mui/icons-material/VisibilityOff";
|
|
5
|
+
import { FormControl, FormLabel, IconButton, Stack } from "@mui/material";
|
|
6
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
7
|
+
import { Button } from "@rnaga/wp-next-ui/Button";
|
|
8
|
+
import { useFormData } from "@rnaga/wp-next-ui/hooks/use-form-data";
|
|
9
|
+
import { Input } from "@rnaga/wp-next-ui/Input";
|
|
10
|
+
import { Modal, ModalContent } from "@rnaga/wp-next-ui/Modal";
|
|
11
|
+
import { Typography } from "@rnaga/wp-next-ui/Typography";
|
|
12
|
+
import { useWPAdmin } from "../../../../../wp-admin";
|
|
13
|
+
export const ResetPasswordModal = (props) => {
|
|
14
|
+
const { open, userId, onClose } = props;
|
|
15
|
+
const { wp: { viewport }, overlay, } = useWPAdmin();
|
|
16
|
+
const { actions, safeParse } = useServerActions();
|
|
17
|
+
const { formData, submit, validation } = useFormData("reset-password");
|
|
18
|
+
const [visibility, setVisibility] = useState(false);
|
|
19
|
+
const validator = (data) => {
|
|
20
|
+
if (0 >= data.password.length ||
|
|
21
|
+
0 >= data.confirmed.length ||
|
|
22
|
+
data.password !== data.confirmed) {
|
|
23
|
+
return [false, "Confirmed password does not match"];
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
};
|
|
27
|
+
const handleSubmit = async (data) => {
|
|
28
|
+
const newPassword = data.password.trim();
|
|
29
|
+
const result = await overlay.circular
|
|
30
|
+
.promise(actions.user.updatePassword(userId, newPassword))
|
|
31
|
+
.then(safeParse);
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
overlay.snackbar.open("error", result.error);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
onClose();
|
|
37
|
+
};
|
|
38
|
+
return (_jsx(Modal, { open: open, onClose: onClose, sx: { zIndex: 2 }, children: _jsx("form", { onSubmit: submit(handleSubmit, validator), children: _jsxs(ModalContent, { children: [_jsx(Typography, { size: "large", bold: true, children: "Reset Password" }), _jsxs(Stack, { spacing: 1.5, children: [!validation?.valid && (_jsx(Typography, { color: "danger", children: validation?.error })), _jsxs(FormControl, { focused: false, children: [_jsx(FormLabel, { children: "New Password" }), _jsx(Input, { name: "password", size: "large", autoFocus: true, required: true, type: visibility ? "text" : "password", endAdornment: _jsx(IconButton, { onClick: () => {
|
|
39
|
+
setVisibility(!visibility);
|
|
40
|
+
}, children: visibility ? _jsx(VisibilityOffIcon, {}) : _jsx(VisibilityIcon, {}) }) })] }), _jsxs(FormControl, { focused: false, children: [_jsx(FormLabel, { children: "Confirm Password" }), _jsx(Input, { type: "password", name: "confirmed", required: true, size: "large" })] }), _jsx(Button, { type: "submit", size: "large", children: "Submit" })] })] }) }) }));
|
|
41
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/client/components/contents/users/Edit/Profile/index.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,OAAO,GAAI,OAAO;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,4CAyOhD,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState, useTransition } from "react";
|
|
4
|
+
import { Box, FormControl, FormLabel, Stack } from "@mui/material";
|
|
5
|
+
import { useServerActions } from "@rnaga/wp-next-core/client/hooks/use-server-actions";
|
|
6
|
+
import { BasicMenuButton } from "@rnaga/wp-next-ui/BasicMenuButton";
|
|
7
|
+
import { Button } from "@rnaga/wp-next-ui/Button";
|
|
8
|
+
import { useFormData } from "@rnaga/wp-next-ui/hooks/use-form-data";
|
|
9
|
+
import { IconButtonDelete } from "@rnaga/wp-next-ui/IconButtonDelete";
|
|
10
|
+
import { Input } from "@rnaga/wp-next-ui/Input";
|
|
11
|
+
import { Loading } from "@rnaga/wp-next-ui/Loading";
|
|
12
|
+
import { useAdminNavigation } from "../../../../../hooks/use-admin-navigation";
|
|
13
|
+
import { useAdminUser } from "../../../../../hooks/use-admin-user";
|
|
14
|
+
import { useWPAdmin } from "../../../../../wp-admin";
|
|
15
|
+
import { GenerateResetLinkModal } from "./GenerateResetLinkModal";
|
|
16
|
+
import { ResetPasswordModal } from "./ResetPasswordModal";
|
|
17
|
+
export const Profile = (props) => {
|
|
18
|
+
const { userId } = props;
|
|
19
|
+
const { overlay, wp: { error }, } = useWPAdmin();
|
|
20
|
+
const { user, updateAdminUser } = useAdminUser();
|
|
21
|
+
const { goto } = useAdminNavigation();
|
|
22
|
+
const { actions, safeParse } = useServerActions();
|
|
23
|
+
const [loading, startTransition] = useTransition();
|
|
24
|
+
const [state, setState] = useState({
|
|
25
|
+
passwordModal: false,
|
|
26
|
+
showResetLink: false,
|
|
27
|
+
canDeleteUser: false,
|
|
28
|
+
});
|
|
29
|
+
const { formData, setFormData, submit } = useFormData("user");
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
startTransition(async () => {
|
|
32
|
+
const response = await actions.user.get(userId).then(safeParse);
|
|
33
|
+
if (!response.success || !response.data) {
|
|
34
|
+
error.throw(response.error ?? "Failed to get user data");
|
|
35
|
+
}
|
|
36
|
+
const { user_pass, ...formData } = response.data;
|
|
37
|
+
const canDeleteUser = !!(await actions.user.can("delete_user", userId))
|
|
38
|
+
.data;
|
|
39
|
+
setFormData(formData);
|
|
40
|
+
setState({ ...state, canDeleteUser });
|
|
41
|
+
});
|
|
42
|
+
}, [userId]);
|
|
43
|
+
const toggleGenerateResetLink = (value) => {
|
|
44
|
+
setState({ ...state, showResetLink: value });
|
|
45
|
+
};
|
|
46
|
+
const toggleResetPassword = (value) => {
|
|
47
|
+
setState({ ...state, passwordModal: value });
|
|
48
|
+
};
|
|
49
|
+
const handleDelete = () => {
|
|
50
|
+
goto(`delete?id=${userId}`);
|
|
51
|
+
};
|
|
52
|
+
const handleSubmit = async (data) => {
|
|
53
|
+
data = {
|
|
54
|
+
...data,
|
|
55
|
+
role: undefined, // Not to update role via profile page
|
|
56
|
+
meta_input: {
|
|
57
|
+
nickname: data.nickname,
|
|
58
|
+
last_name: data.last_name,
|
|
59
|
+
first_name: data.first_name,
|
|
60
|
+
description: data.description,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const result = await overlay.circular
|
|
64
|
+
.promise(actions.user.update(userId, data))
|
|
65
|
+
.then(safeParse);
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
overlay.snackbar.open("error", result.error);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (userId == user?.ID) {
|
|
71
|
+
updateAdminUser();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return (_jsxs(_Fragment, { children: [_jsx(GenerateResetLinkModal, { open: state.showResetLink, onClose: () => toggleGenerateResetLink(false), userLogin: formData.user_login }), _jsx(ResetPasswordModal, { open: state.passwordModal, userId: userId, onClose: () => toggleResetPassword(false) }), _jsx(Loading, { loading: loading, sx: {
|
|
75
|
+
mt: 2,
|
|
76
|
+
}, children: _jsxs("form", { onSubmit: submit(handleSubmit), children: [_jsxs(Box, { sx: {
|
|
77
|
+
display: "flex",
|
|
78
|
+
justifyContent: "flex-end",
|
|
79
|
+
gap: 1.5,
|
|
80
|
+
height: 36,
|
|
81
|
+
mt: 1,
|
|
82
|
+
}, children: [_jsx(Button, { size: "medium", type: "submit", children: "Save" }), state.canDeleteUser && (_jsx(IconButtonDelete, { title: "Delete User", onClick: handleDelete })), _jsx(BasicMenuButton, { size: "medium", label: "Reset Password", showArrowIcon: false, items: [
|
|
83
|
+
{
|
|
84
|
+
label: "Generate Reset Link",
|
|
85
|
+
value: "generate",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
label: "Set New Password",
|
|
89
|
+
value: "set",
|
|
90
|
+
},
|
|
91
|
+
], onChange: (value) => {
|
|
92
|
+
if (value === "generate") {
|
|
93
|
+
toggleGenerateResetLink(true);
|
|
94
|
+
}
|
|
95
|
+
else if (value === "set") {
|
|
96
|
+
toggleResetPassword(true);
|
|
97
|
+
}
|
|
98
|
+
}, sx: {
|
|
99
|
+
minWidth: 200,
|
|
100
|
+
height: "100%",
|
|
101
|
+
backgroundColor: (theme) => theme.palette.background.paper,
|
|
102
|
+
} })] }), _jsxs(Stack, { spacing: 2, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Username" }), _jsx(Input, { size: "large", name: "user_login", value: formData.user_login || "", disabled: true })] }), _jsxs(Box, { sx: {
|
|
103
|
+
display: "grid",
|
|
104
|
+
gap: 1.5,
|
|
105
|
+
gridTemplateColumns: "1fr 1fr",
|
|
106
|
+
}, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { required: true, children: "Nickname (required)" }), _jsx(Input, { size: "large", name: "nickname", value: formData.nickname })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Display Name" }), _jsx(Input, { size: "large", name: "display_name", value: formData.display_name })] })] }), _jsxs(Box, { sx: {
|
|
107
|
+
display: "grid",
|
|
108
|
+
gap: 1.5,
|
|
109
|
+
gridTemplateColumns: "1fr 1fr",
|
|
110
|
+
}, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { children: "First Name" }), _jsx(Input, { size: "large", name: "first_name", value: formData.first_name, placeholder: "First Name" })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Last Name" }), _jsx(Input, { size: "large", name: "last_name", value: formData.last_name, placeholder: "Last Name" })] })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { required: true, children: "Email (required)" }), _jsx(Input, { size: "large", name: "user_email", value: formData.user_email })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Website" }), _jsx(Input, { size: "large", name: "user_url", value: formData.user_url })] }), _jsxs(FormControl, { children: [_jsx(FormLabel, { children: "Biographical Info" }), _jsx(Input, { multiline: true, size: "large", name: "description", value: formData.description, minRows: 4, maxRows: 10 })] })] })] }) })] }));
|
|
111
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type * as wpCoreTypes from "@rnaga/wp-next-core/types";
|
|
2
|
+
export declare const ActionLink: (props: {
|
|
3
|
+
blog: wpCoreTypes.actions.RoleEditableBlogs[number];
|
|
4
|
+
blogIndex: number;
|
|
5
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
6
|
+
//# sourceMappingURL=ActionLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionLink.d.ts","sourceRoot":"","sources":["../../../../../../../src/client/components/contents/users/Edit/Roles/ActionLink.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,KAAK,WAAW,MAAM,2BAA2B,CAAC;AAG9D,eAAO,MAAM,UAAU,GAAI,OAAO;IAChC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB,mDAkHA,CAAC"}
|