diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 0aa28e0998734..89328d2c8cc7a 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7406,9 +7406,24 @@ Keep your key file in a safe place. You will need it to create new versions of y
{NUM_BOOKMARKS, plural, =1 {1 bookmark} other {# bookmarks}}
+
+ Move to another folder
+
More
+
+ Move to…
+
+
+ New Folder
+
+
+ Cancel
+
+
+ Save
+
{NUM_BOOKMARKS, plural, =1 {1 bookmark deleted} other {# bookmarks deleted}}
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_CANCEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_CANCEL.png.sha1
new file mode 100644
index 0000000000000..f25da2470ebe2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_CANCEL.png.sha1
@@ -0,0 +1 @@
+fe5b327c457d6a3192928c3b35fdd90e5e8e8463
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO.png.sha1
new file mode 100644
index 0000000000000..f25da2470ebe2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO.png.sha1
@@ -0,0 +1 @@
+fe5b327c457d6a3192928c3b35fdd90e5e8e8463
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO_ANOTHER_FOLDER.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO_ANOTHER_FOLDER.png.sha1
new file mode 100644
index 0000000000000..6c6588f8a6e64
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_MOVE_TO_ANOTHER_FOLDER.png.sha1
@@ -0,0 +1 @@
+57c9ca09e43e40316ea3cbea3d011385594deeba
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_NEW_FOLDER.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_NEW_FOLDER.png.sha1
new file mode 100644
index 0000000000000..f25da2470ebe2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_NEW_FOLDER.png.sha1
@@ -0,0 +1 @@
+fe5b327c457d6a3192928c3b35fdd90e5e8e8463
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_SAVE.png.sha1 b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_SAVE.png.sha1
new file mode 100644
index 0000000000000..f25da2470ebe2
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_BOOKMARKS_EDIT_SAVE.png.sha1
@@ -0,0 +1 @@
+fe5b327c457d6a3192928c3b35fdd90e5e8e8463
\ No newline at end of file
diff --git a/chrome/browser/resources/side_panel/bookmarks/BUILD.gn b/chrome/browser/resources/side_panel/bookmarks/BUILD.gn
index abc721aff525a..b4ace9da28d80 100644
--- a/chrome/browser/resources/side_panel/bookmarks/BUILD.gn
+++ b/chrome/browser/resources/side_panel/bookmarks/BUILD.gn
@@ -23,6 +23,7 @@ build_webui("build") {
"commerce/shopping_list.ts",
"power_bookmark_row.ts",
"power_bookmarks_context_menu.ts",
+ "power_bookmarks_edit_dialog.ts",
"power_bookmarks_list.ts",
]
diff --git a/chrome/browser/resources/side_panel/bookmarks/icons.html b/chrome/browser/resources/side_panel/bookmarks/icons.html
index 709ce743270be..fef3e065b8c54 100644
--- a/chrome/browser/resources/side_panel/bookmarks/icons.html
+++ b/chrome/browser/resources/side_panel/bookmarks/icons.html
@@ -19,6 +19,9 @@
+
+
+
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.html b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.html
new file mode 100644
index 0000000000000..a4b42cd6668ff
--- /dev/null
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.html
@@ -0,0 +1,64 @@
+
+
+
+ $i18n{editMoveFolderTo}
+
+
+
+
+
+ TODO: Folder row
+
+
+
+
+
+
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
new file mode 100644
index 0000000000000..baa969f6b3de0
--- /dev/null
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_edit_dialog.ts
@@ -0,0 +1,115 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import '../strings.m.js';
+import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import 'chrome://resources/cr_elements/cr_shared_style.css.js';
+import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
+
+import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import {assertNotReached} from 'chrome://resources/js/assert_ts.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {getTemplate} from './power_bookmarks_edit_dialog.html.js';
+
+export interface PowerBookmarksEditDialogElement {
+ $: {
+ dialog: CrDialogElement,
+ };
+}
+
+function isFolder(node: chrome.bookmarks.BookmarkTreeNode) {
+ return !node.url;
+}
+
+export class PowerBookmarksEditDialogElement extends PolymerElement {
+ static get is() {
+ return 'power-bookmarks-edit-dialog';
+ }
+
+ static get template() {
+ return getTemplate();
+ }
+
+ static get properties() {
+ return {
+ topLevelBookmarks_: {
+ type: Array,
+ value: () => [],
+ },
+
+ selectedBookmarks_: {
+ type: Array,
+ value: () => [],
+ },
+
+ selectedFolder_: {
+ type: Object,
+ value: null,
+ },
+
+ activeFolder_: {
+ type: Object,
+ value: null,
+ },
+ };
+ }
+
+ private topLevelBookmarks_: chrome.bookmarks.BookmarkTreeNode[];
+ private selectedBookmarks_: chrome.bookmarks.BookmarkTreeNode[];
+ private selectedFolder_: chrome.bookmarks.BookmarkTreeNode|undefined;
+ private activeFolder_: chrome.bookmarks.BookmarkTreeNode|undefined;
+
+ showDialog(
+ activeFolder: chrome.bookmarks.BookmarkTreeNode|undefined,
+ topLevelBookmarks: chrome.bookmarks.BookmarkTreeNode[],
+ selectedBookmarks: chrome.bookmarks.BookmarkTreeNode[]) {
+ this.activeFolder_ = activeFolder;
+ this.topLevelBookmarks_ = topLevelBookmarks;
+ this.selectedBookmarks_ = selectedBookmarks;
+ this.$.dialog.showModal();
+ }
+
+ private getActiveFolderTitle_() {
+ if (this.activeFolder_ &&
+ this.activeFolder_.id !== loadTimeData.getString('otherBookmarksId') &&
+ this.activeFolder_.id !== loadTimeData.getString('mobileBookmarksId')) {
+ return this.activeFolder_!.title;
+ } else {
+ return loadTimeData.getString('allBookmarks');
+ }
+ }
+
+ private getShownFolders_(): chrome.bookmarks.BookmarkTreeNode[] {
+ if (this.activeFolder_ && this.activeFolder_.children) {
+ return this.activeFolder_.children!.filter(isFolder);
+ } else if (!this.activeFolder_ && this.topLevelBookmarks_) {
+ return this.topLevelBookmarks_.filter(isFolder);
+ }
+ assertNotReached('No bookmarks to display in edit menu');
+ }
+
+ private onNewFolder_() {
+ // TODO
+ }
+
+ private onCancel_() {
+ this.$.dialog.close();
+ }
+
+ private onSave_() {
+ // TODO
+ this.$.dialog.close();
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'power-bookmarks-edit-dialog': PowerBookmarksEditDialogElement;
+ }
+}
+
+customElements.define(
+ PowerBookmarksEditDialogElement.is, PowerBookmarksEditDialogElement);
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
index 7c1f6143eace8..fffc0478a896c 100644
--- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
+++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.html
@@ -202,6 +202,11 @@
[[getActiveFolderLabel_(activeFolderPath_.*)]]
title="$i18n{tooltipDelete}" aria-label="$i18n{tooltipDelete}"
on-click="onDeleteClicked_">
+
+
[[getActiveFolderLabel_(activeFolderPath_.*)]]
+
+