diff --git a/docs/docs/assets/images/part/new_part.png b/docs/docs/assets/images/part/new_part.png
deleted file mode 100644
index 3331a87ca1..0000000000
Binary files a/docs/docs/assets/images/part/new_part.png and /dev/null differ
diff --git a/docs/docs/assets/images/part/new_parts_dropdown.png b/docs/docs/assets/images/part/new_parts_dropdown.png
new file mode 100644
index 0000000000..dfa5cf5aa6
Binary files /dev/null and b/docs/docs/assets/images/part/new_parts_dropdown.png differ
diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md
index 0fc3c7a930..d9b984e0e6 100644
--- a/docs/docs/part/create.md
+++ b/docs/docs/part/create.md
@@ -2,17 +2,20 @@
title: Creating a Part
---
-## Part Creation Form
+## Part Creation
-New parts can be created from the *Part Category* view, by pressing the *New Part* button:
+New parts can be created manually via the web interface, or imported from an external source.
+
+To create or import a part, navigate to the *Parts* view in the user interface, and select the *Add Parts* dropdown menu above the parts table:
+
+{{ image("part/new_parts_dropdown.png", "Add parts dropdown") }}
!!! info "Permissions"
- If the user does not have "create" permission for the *Part* permission group, the *New Part* button will not be available.
+ If the user does not have "create" permission for the *Part* permission group, the *Add Parts* menu will not be available.
-{{ image("part/new_part.png", "New part") }}
+## Create Part Form
-
-A part creation form is opened as shown below:
+New parts can be created manually by selecting the *Create Part* option from the menu. A part creation form is opened as shown below:
{{ image("part/part_create_form.png", "New part form") }}
@@ -31,7 +34,6 @@ If this setting is enabled, the following elements are available in the form:
Checking the *Create Initial Stock* form input then allows the creation of an initial quantity of stock for the new part.
-
### Supplier Options
If the part is marked as *Purchaseable*, the form provides some extra options to initialize the new part with manufacturer and / or supplier information:
@@ -42,9 +44,44 @@ If the *Add Supplier Data* option is checked, then supplier part and manufacture
{{ image("part/part_new_suppliers.png", "Part supplier information") }}
+## Import from File
+
+Parts can be imported from an external file, by selecting the *Import from File* option.
+
+This action opens the [data import wizard](../settings/import.md), which steps the user through the process of importing parts from the selected file.
+
+## Import from Supplier
+
+InvenTree can integrate with external suppliers and import data from them, which helps to setup your system. Currently parts, supplier parts and manufacturer parts can be created automatically.
+
+!!! info "Plugin Required"
+ To import parts from a supplier, you must install a plugin which supports that supplier.
+
+### Requirements
+
+1. Install a supplier mixin plugin for you supplier
+2. Goto "Admin Center > Plugins > [The supplier plugin]" and set the supplier company setting. Some plugins may require additional settings like API tokens.
+
+### Import a part
+
+New parts can be imported from the _Part Category_ view, by pressing the _Import Part_ button:
+
+{{ image("part/import_part.png", "Import part") }}
+
+Then just follow the wizard to confirm the category, select the parameters and create initial stock.
+
+{{ image("part/import_part_wizard.png", "Import part wizard") }}
+
+### Import a supplier part
+
+If you already have the part created, you can also just import the supplier part with it's corresponding manufacturer part. Open the supplier panel for the part and use the "Import supplier part" button:
+
+{{ image("part/import_supplier_part.png", "Import supplier part") }}
+
+
## Other Part Creation Methods
-The following alternative methods for creating parts are supported:
+In addition to the primary methods for creating or importing part data, the following methods are supported:
- [Via the REST API](../api/index.md)
- [Using the Python library](../api/python/index.md)
diff --git a/docs/docs/part/import.md b/docs/docs/part/import.md
deleted file mode 100644
index a8a6626d0c..0000000000
--- a/docs/docs/part/import.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Importing Data from suppliers
----
-
-## Import data from suppliers
-
-InvenTree can integrate with external suppliers and import data from them, which helps to setup your system. Currently parts, supplier parts and manufacturer parts can be created automatically.
-
-### Requirements
-
-1. Install a supplier mixin plugin for you supplier
-2. Goto "Admin Center > Plugins > [The supplier plugin]" and set the supplier company setting. Some plugins may require additional settings like API tokens.
-
-### Import a part
-
-New parts can be imported from the _Part Category_ view, by pressing the _Import Part_ button:
-
-{{ image("part/import_part.png", "Import part") }}
-
-Then just follow the wizard to confirm the category, select the parameters and create initial stock.
-
-{{ image("part/import_part_wizard.png", "Import part wizard") }}
-
-### Import a supplier part
-
-If you already have the part created, you can also just import the supplier part with it's corresponding manufacturer part. Open the supplier panel for the part and use the "Import supplier part" button:
-
-{{ image("part/import_supplier_part.png", "Import supplier part") }}
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index fb6558200c..29e7c93da6 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -146,7 +146,6 @@ nav:
- Parts:
- Parts: part/index.md
- Creating Parts: part/create.md
- - Importing Parts: part/import.md
- Virtual Parts: part/virtual.md
- Part Views: part/views.md
- Tracking: part/trackable.md
diff --git a/src/frontend/src/components/buttons/PrintingActions.tsx b/src/frontend/src/components/buttons/PrintingActions.tsx
index 4cdf081895..dad818e96f 100644
--- a/src/frontend/src/components/buttons/PrintingActions.tsx
+++ b/src/frontend/src/components/buttons/PrintingActions.tsx
@@ -188,6 +188,7 @@ export function PrintingActions({
}
+ position='bottom-start'
disabled={!enabled}
actions={[
{
diff --git a/src/frontend/src/components/items/ActionDropdown.tsx b/src/frontend/src/components/items/ActionDropdown.tsx
index 20cc002f18..f9d5e41ef8 100644
--- a/src/frontend/src/components/items/ActionDropdown.tsx
+++ b/src/frontend/src/components/items/ActionDropdown.tsx
@@ -48,7 +48,8 @@ export function ActionDropdown({
actions,
disabled = false,
hidden = false,
- noindicator = false
+ noindicator = false,
+ position
}: {
icon: ReactNode;
tooltip: string;
@@ -57,6 +58,7 @@ export function ActionDropdown({
disabled?: boolean;
hidden?: boolean;
noindicator?: boolean;
+ position?: FloatingPosition;
}): ReactNode {
const hasActions = useMemo(() => {
return actions.some((action) => !action.hidden);
@@ -71,7 +73,7 @@ export function ActionDropdown({
}, [tooltip]);
return !hidden && hasActions ? (
-