Recent Activity
diff --git a/frontend/src/pages/device/VersionHistory/index.vue b/frontend/src/pages/device/VersionHistory/index.vue
index 863762717c..5b8df8e15c 100644
--- a/frontend/src/pages/device/VersionHistory/index.vue
+++ b/frontend/src/pages/device/VersionHistory/index.vue
@@ -1,13 +1,13 @@
-
-
+
+
-
+
-
+
The Timeline provides a concise, chronological view of key activities within your Node-RED instance.
It tracks various events such as pipeline stage deployments, snapshot restorations, flow deployments, snapshot creations, and updates to instance settings.
@@ -20,7 +20,7 @@
-
+
- Upload Snapshot
+
+ Upload Snapshot
- Create Snapshot
+
+ Create Snapshot
@@ -128,8 +130,24 @@ export default {
return {
reloadHooks: [],
pageToggle: [
- { title: 'Snapshots', to: { name: 'device-snapshots', params: this.$route.params } },
- { title: 'Timeline', to: { name: 'device-version-history-timeline', params: this.$route.params } }
+ {
+ title: 'Snapshots',
+ to: {
+ name: (() => (this.$route.name.startsWith('device-editor')
+ ? 'device-editor-snapshots'
+ : 'device-snapshots'))(),
+ params: this.$route.params
+ }
+ },
+ {
+ title: 'Timeline',
+ to: {
+ name: (() => (this.$route.name.startsWith('device-editor')
+ ? 'device-editor-version-history-timeline'
+ : 'device-version-history-timeline'))(),
+ params: this.$route.params
+ }
+ }
],
showDeviceSnapshotsOnly: true,
busyMakingSnapshot: false,
@@ -163,6 +181,9 @@ export default {
return 'Instance must be owned by an Application to create a Snapshot'
}
return !this.canCreateSnapshot ? 'Instance must be in \'Developer Mode\' to create a Snapshot' : 'Capture a Snapshot of this Instance.'
+ },
+ isInImmersiveMode () {
+ return this.$route.name.startsWith('device-editor-')
}
},
methods: {
@@ -211,4 +232,41 @@ export default {
.page-fade-enter, .page-fade-leave-to {
opacity: 0;
}
+
+// Viewport-based responsive behavior (matches Tailwind sm: breakpoint)
+// Hide button text on narrow viewports (< 640px)
+@media (max-width: 639px) {
+ .upload-snapshot-text,
+ .create-snapshot-text {
+ display: none;
+ }
+}
+
+// Show button text on wider viewports (>= 640px)
+@media (min-width: 640px) {
+ .upload-snapshot-text,
+ .create-snapshot-text {
+ display: inline;
+ }
+}
+
+// Container query for drawer context - responsive button behavior
+// Breakpoint matches DRAWER_MOBILE_BREAKPOINT constant in Editor/index.vue
+// These override viewport-based rules when inside the drawer
+@container drawer (max-width: 639px) {
+ // Hide text when drawer is narrow - icon-only mode
+ .upload-snapshot-text,
+ .create-snapshot-text {
+ display: none;
+ }
+}
+
+@container drawer (min-width: 640px) {
+ // Show text when drawer is wide enough
+ .upload-snapshot-text,
+ .create-snapshot-text {
+ display: inline;
+ }
+}
+
diff --git a/frontend/src/pages/device/index.vue b/frontend/src/pages/device/index.vue
index 517c409a50..77c32e7c21 100644
--- a/frontend/src/pages/device/index.vue
+++ b/frontend/src/pages/device/index.vue
@@ -427,7 +427,7 @@ export default {
},
openEditor () {
this.$store.dispatch('ux/validateUserAction', 'hasOpenedDeviceEditor')
- window.open(this.deviceEditorURL, `device-editor-${this.device.id}`)
+ this.$router.push({ name: 'device-editor' })
},
async openTunnel (launchEditor = false) {
try {
diff --git a/frontend/src/pages/instance/Editor/index.vue b/frontend/src/pages/instance/Editor/index.vue
index da39875b08..d0fb4be8c7 100644
--- a/frontend/src/pages/instance/Editor/index.vue
+++ b/frontend/src/pages/instance/Editor/index.vue
@@ -19,6 +19,7 @@
@mouseleave="handleDrawerMouseLeave"
>
diff --git a/frontend/src/pages/instance/VersionHistory/index.vue b/frontend/src/pages/instance/VersionHistory/index.vue
index 63bdd9e8c4..2d37768605 100644
--- a/frontend/src/pages/instance/VersionHistory/index.vue
+++ b/frontend/src/pages/instance/VersionHistory/index.vue
@@ -121,8 +121,24 @@ export default {
pageToggle () {
if (this.$route.name.includes('editor')) {
return [
- { title: 'Snapshots', to: { path: './snapshots', params: this.$route.params } },
- { title: 'Timeline', to: { path: './timeline', params: this.$route.params } }
+ {
+ title: 'Snapshots',
+ to: {
+ name: (() => (this.$route.name.startsWith('instance-editor')
+ ? 'instance-editor-snapshots'
+ : 'instance-snapshots'))(),
+ params: this.$route.params
+ }
+ },
+ {
+ title: 'Timeline',
+ to: {
+ name: (() => (this.$route.name.startsWith('instance-editor')
+ ? 'instance-editor-version-history-timeline'
+ : 'instance-version-history-timeline'))(),
+ params: this.$route.params
+ }
+ }
]
}
diff --git a/frontend/src/ui-components/stylesheets/ff-immersive-editor.scss b/frontend/src/ui-components/stylesheets/ff-immersive-editor.scss
index 3cb5b9b664..3b934a51fe 100644
--- a/frontend/src/ui-components/stylesheets/ff-immersive-editor.scss
+++ b/frontend/src/ui-components/stylesheets/ff-immersive-editor.scss
@@ -127,6 +127,10 @@
}
}
+ .resize-bar.resizing {
+ background-color: $ff-blue-500;
+ }
+
&.resizing {
cursor: ew-resize;
user-select: none;
@@ -134,10 +138,6 @@
-webkit-user-select: none;
-ms-user-select: none;
- .resize-bar {
- background-color: $ff-blue-500;
- }
-
.tabs-wrapper {
transition: none;
}