From 65f28c322af691840f239d9442e1ca490013f80a Mon Sep 17 00:00:00 2001 From: Adam Obuchowicz Date: Mon, 20 May 2024 14:59:03 +0200 Subject: [PATCH] Icon highlight and SvgButton (#10002) Fixes #9904 Refactored our button: the common logic of "button being an SVG icon" moved to new `SvgButton` component. Simplified and unified CSS. Added hover highlight. ![image](https://github.com/enso-org/enso/assets/3919101/40aa628c-4181-487c-a0f7-b49e06d274b8) --- app/gui2/e2e/componentBrowser.spec.ts | 4 +- app/gui2/src/assets/icons.svg | 4 +- app/gui2/src/components/CircularMenu.vue | 49 +++++++---------- app/gui2/src/components/ComponentBrowser.vue | 8 +-- app/gui2/src/components/ExtendedMenu.vue | 54 +++++-------------- .../src/components/GraphEditor/GraphNode.vue | 2 +- app/gui2/src/components/NavBar.vue | 2 +- app/gui2/src/components/RecordControl.vue | 13 +++-- app/gui2/src/components/SelectionMenu.vue | 24 ++------- app/gui2/src/components/SmallPlusButton.vue | 1 - app/gui2/src/components/SvgButton.vue | 47 ++++++++++++++++ app/gui2/src/components/SvgIcon.vue | 21 ++------ app/gui2/src/components/ToggleIcon.vue | 22 +++++--- .../src/components/VisualizationContainer.vue | 52 +++++------------- .../src/components/VisualizationSelector.vue | 4 ++ .../visualizations/GeoMapVisualization.vue | 18 ++----- .../visualizations/HistogramVisualization.vue | 10 ++-- .../ScatterplotVisualization.vue | 15 +++--- .../visualizations/WarningsVisualization.vue | 17 +++--- 19 files changed, 160 insertions(+), 207 deletions(-) create mode 100644 app/gui2/src/components/SvgButton.vue diff --git a/app/gui2/e2e/componentBrowser.spec.ts b/app/gui2/e2e/componentBrowser.spec.ts index 33e9c4203bb6..a01ea2aced15 100644 --- a/app/gui2/e2e/componentBrowser.spec.ts +++ b/app/gui2/e2e/componentBrowser.spec.ts @@ -274,7 +274,7 @@ test('Component browser handling of overridden record-mode', async ({ page }) => // Enable record mode for the node. await locate.graphNodeIcon(node).hover() - await expect(recordModeToggle).not.toHaveClass(/recording-overridden/) + await expect(recordModeToggle).toHaveClass(/toggledOff/) await recordModeToggle.click() // TODO[ao]: The simple move near top-left corner not always works i.e. not always // `pointerleave` event is emitted. Investigated in https://github.com/enso-org/enso/issues/9478 @@ -283,7 +283,7 @@ test('Component browser handling of overridden record-mode', async ({ page }) => await page.mouse.move(700, 1200, { steps: 20 }) await expect(recordModeIndicator).toBeVisible() await locate.graphNodeIcon(node).hover() - await expect(recordModeToggle).toHaveClass(/recording-overridden/) + await expect(recordModeToggle).toHaveClass(/toggledOn/) // Ensure editing in the component browser doesn't display the override expression. await locate.graphNodeIcon(node).click({ modifiers: [CONTROL_KEY] }) await expect(locate.componentBrowser(page)).toBeVisible() diff --git a/app/gui2/src/assets/icons.svg b/app/gui2/src/assets/icons.svg index 44593f53f0dc..969933b05e31 100644 --- a/app/gui2/src/assets/icons.svg +++ b/app/gui2/src/assets/icons.svg @@ -287,9 +287,7 @@ - - - + diff --git a/app/gui2/src/components/CircularMenu.vue b/app/gui2/src/components/CircularMenu.vue index b6787f3b3cbf..170026586312 100644 --- a/app/gui2/src/components/CircularMenu.vue +++ b/app/gui2/src/components/CircularMenu.vue @@ -2,7 +2,7 @@ import ColorRing from '@/components/ColorRing.vue' import type { NodeCreationOptions } from '@/components/GraphEditor/nodeCreation' import SmallPlusButton from '@/components/SmallPlusButton.vue' -import SvgIcon from '@/components/SvgIcon.vue' +import SvgButton from '@/components/SvgButton.vue' import ToggleIcon from '@/components/ToggleIcon.vue' import { ref } from 'vue' @@ -37,45 +37,44 @@ const showColorPicker = ref(false) :class="`${props.isFullMenuVisible ? 'full' : 'partial'}`" >
- - - - svg.toggledOn { + & > .toggledOn { color: rgba(0, 0, 0, 0.6); } - - & > svg:not(.toggledOn):hover { - color: rgba(0, 0, 0, 0.3); - } } .bottom-panel { diff --git a/app/gui2/src/components/ExtendedMenu.vue b/app/gui2/src/components/ExtendedMenu.vue index 387bc030254a..c77182b76a7b 100644 --- a/app/gui2/src/components/ExtendedMenu.vue +++ b/app/gui2/src/components/ExtendedMenu.vue @@ -4,6 +4,7 @@ import SvgIcon from '@/components/SvgIcon.vue' import { injectInteractionHandler, type Interaction } from '@/providers/interactionHandler' import { targetIsOutside } from '@/util/autoBlur' import { ref } from 'vue' +import SvgButton from './SvgButton.vue' const showCodeEditor = defineModel('showCodeEditor', { required: true }) const showDocumentationEditor = defineModel('showDocumentationEditor', { required: true }) @@ -55,20 +56,19 @@ const toggleDocumentationEditorShortcut = documentationEditorBindings.bindings.t
Zoom
-
- -
+ -
- -
+
-
- -
+
dragPointer.dragging && significantMove) +const isDragged = computed(() => dragPointer.dragging && significantMove.value) const isRecordingOverridden = computed({ get() { diff --git a/app/gui2/src/components/NavBar.vue b/app/gui2/src/components/NavBar.vue index e1d7c07bb960..d21329e84019 100644 --- a/app/gui2/src/components/NavBar.vue +++ b/app/gui2/src/components/NavBar.vue @@ -12,7 +12,7 @@ const emit = defineEmits<{ back: []; forward: []; breadcrumbClick: [index: numbe @@ -34,7 +34,7 @@ const emit = defineEmits<{ recordOnce: []; 'update:recordMode': [enabled: boolea .control { background: var(--color-frame-bg); backdrop-filter: var(--blur-app-bg); - padding: 8px 8px; + padding: 4px 4px; width: 42px; cursor: pointer; } @@ -43,7 +43,7 @@ const emit = defineEmits<{ recordOnce: []; 'update:recordMode': [enabled: boolea border-radius: var(--radius-full) 0 0 var(--radius-full); .button { - margin: 0 4px 0 auto; + margin: 0 0 0 auto; } } @@ -52,8 +52,11 @@ const emit = defineEmits<{ recordOnce: []; 'update:recordMode': [enabled: boolea .button { position: relative; - top: -4px; margin: 0 auto 0 0; + width: 32px; + height: 24px; + --icon-transform: scale(1.5) translateY(calc(-4px / 1.5)); + --icon-transform-origin: left top; } } diff --git a/app/gui2/src/components/SelectionMenu.vue b/app/gui2/src/components/SelectionMenu.vue index 8574652b8263..f54922604725 100644 --- a/app/gui2/src/components/SelectionMenu.vue +++ b/app/gui2/src/components/SelectionMenu.vue @@ -2,6 +2,7 @@ import ColorPickerMenu from '@/components/ColorPickerMenu.vue' import SvgIcon from '@/components/SvgIcon.vue' import ToggleIcon from '@/components/ToggleIcon.vue' +import SvgButton from './SvgButton.vue' const showColorPicker = defineModel('showColorPicker', { required: true }) const _props = defineProps<{ selectedComponents: number }>() @@ -16,31 +17,18 @@ const emit = defineEmits<{ - + - +
@@ -69,14 +57,10 @@ const emit = defineEmits<{ backdrop-filter: var(--blur-app-bg); } -.toggle { +.toggledOff { opacity: 0.6; } -.toggledOn { - opacity: unset; -} - .disableInput { pointer-events: none; } diff --git a/app/gui2/src/components/SmallPlusButton.vue b/app/gui2/src/components/SmallPlusButton.vue index bb5d99d9e3d9..b191eb6d50ba 100644 --- a/app/gui2/src/components/SmallPlusButton.vue +++ b/app/gui2/src/components/SmallPlusButton.vue @@ -40,6 +40,5 @@ function addNode() { margin: 8px; padding: 0; border: none; - opacity: 30%; } diff --git a/app/gui2/src/components/SvgButton.vue b/app/gui2/src/components/SvgButton.vue new file mode 100644 index 000000000000..3d1a93144ad3 --- /dev/null +++ b/app/gui2/src/components/SvgButton.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/app/gui2/src/components/SvgIcon.vue b/app/gui2/src/components/SvgIcon.vue index f432105c53e7..d1254400aab6 100644 --- a/app/gui2/src/components/SvgIcon.vue +++ b/app/gui2/src/components/SvgIcon.vue @@ -10,31 +10,20 @@ import type { Icon } from '@/util/iconName' const props = defineProps<{ name: Icon | URLString - width?: number - height?: number - scale?: number }>() diff --git a/app/gui2/src/components/ToggleIcon.vue b/app/gui2/src/components/ToggleIcon.vue index 2cd0f410907a..7dc441bca128 100644 --- a/app/gui2/src/components/ToggleIcon.vue +++ b/app/gui2/src/components/ToggleIcon.vue @@ -1,13 +1,12 @@ + + diff --git a/app/gui2/src/components/VisualizationContainer.vue b/app/gui2/src/components/VisualizationContainer.vue index 3d3f2828bc6b..c2a036e0ce60 100644 --- a/app/gui2/src/components/VisualizationContainer.vue +++ b/app/gui2/src/components/VisualizationContainer.vue @@ -1,7 +1,7 @@