diff --git a/app/components/app-menu/about.gjs b/app/components/app-menu/about.gjs
new file mode 100644
index 0000000..b6d793e
--- /dev/null
+++ b/app/components/app-menu/about.gjs
@@ -0,0 +1,63 @@
+import { on } from '@ember/modifier';
+import Icon from '#components/icon';
+
+
+
+
+
+
diff --git a/app/components/app-menu/home.gjs b/app/components/app-menu/home.gjs
new file mode 100644
index 0000000..031980e
--- /dev/null
+++ b/app/components/app-menu/home.gjs
@@ -0,0 +1,32 @@
+import { on } from '@ember/modifier';
+import { fn } from '@ember/helper';
+import Icon from '#components/icon';
+
+
+
+
+
+
diff --git a/app/components/app-menu/index.gjs b/app/components/app-menu/index.gjs
new file mode 100644
index 0000000..2d60be8
--- /dev/null
+++ b/app/components/app-menu/index.gjs
@@ -0,0 +1,38 @@
+import Component from '@glimmer/component';
+import { action } from '@ember/object';
+import { tracked } from '@glimmer/tracking';
+import { fn } from '@ember/helper';
+import eq from 'ember-truth-helpers/helpers/eq';
+
+import AppMenuHome from './home';
+import AppMenuSettings from './settings';
+import AppMenuAbout from './about';
+
+export default class AppMenu extends Component {
+ @tracked currentView = 'menu'; // 'menu', 'settings', 'about'
+
+ @action
+ setView(view) {
+ this.currentView = view;
+ }
+
+
+
+
+}
diff --git a/app/components/app-menu/settings.gjs b/app/components/app-menu/settings.gjs
new file mode 100644
index 0000000..f85b7c7
--- /dev/null
+++ b/app/components/app-menu/settings.gjs
@@ -0,0 +1,78 @@
+import Component from '@glimmer/component';
+import { on } from '@ember/modifier';
+import { service } from '@ember/service';
+import { action } from '@ember/object';
+import Icon from '#components/icon';
+import eq from 'ember-truth-helpers/helpers/eq';
+
+export default class AppMenuSettings extends Component {
+ @service settings;
+
+ @action
+ updateApi(event) {
+ this.settings.updateOverpassApi(event.target.value);
+ }
+
+ @action
+ toggleKinetic(event) {
+ this.settings.updateMapKinetic(event.target.value === 'true');
+ }
+
+
+
+
+
+
+}
diff --git a/app/components/settings-pane.gjs b/app/components/settings-pane.gjs
deleted file mode 100644
index c3230db..0000000
--- a/app/components/settings-pane.gjs
+++ /dev/null
@@ -1,128 +0,0 @@
-import Component from '@glimmer/component';
-import { on } from '@ember/modifier';
-import { service } from '@ember/service';
-import { action } from '@ember/object';
-import Icon from '#components/icon';
-import eq from 'ember-truth-helpers/helpers/eq';
-
-export default class SettingsPane extends Component {
- @service settings;
-
- @action
- updateApi(event) {
- this.settings.updateOverpassApi(event.target.value);
- }
-
- @action
- toggleKinetic(event) {
- this.settings.updateMapKinetic(event.target.value === 'true');
- }
-
-
-
-
-}
diff --git a/app/styles/app.css b/app/styles/app.css
index f7dcb77..94da2a3 100644
--- a/app/styles/app.css
+++ b/app/styles/app.css
@@ -2,6 +2,7 @@
:root {
--default-list-color: #fc3;
+ --hover-bg: #f8f9fa;
}
html,
@@ -251,10 +252,43 @@ body {
overscroll-behavior: contain;
}
+.app-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0 -1rem;
+}
+
+.app-menu button {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ gap: 0.8rem;
+ padding: 1rem;
+ padding-left: 1.4rem;
+ background: none;
+ border: none;
+ color: #333;
+ cursor: pointer;
+ text-align: left;
+ font-size: 0.95rem;
+ font-family: inherit;
+ transition: background-color 0.2s;
+}
+
+.app-menu button:hover {
+ background-color: var(--hover-bg);
+}
+
+.app-menu .icon {
+ color: #666;
+ width: 20px;
+ height: 20px;
+}
+
.edit-form {
margin: -1rem;
margin-bottom: 1rem;
- background: #f8f9fa;
+ background: var(--hover-bg);
padding: 1rem;
border-bottom: 1px solid #eee;
}
@@ -276,7 +310,7 @@ body {
border: 1px solid #ddd;
border-radius: 4px;
font-family: inherit;
- font-size: 1rem;
+ font-size: 0.95rem;
box-sizing: border-box; /* Ensure padding doesn't overflow width */
}
@@ -294,15 +328,7 @@ body {
.settings-section {
margin-bottom: 2rem;
-}
-
-.settings-section h3 {
- font-size: 1rem;
- font-weight: bold;
- color: #666;
- margin: 0 0 0.5rem;
- text-transform: uppercase;
- letter-spacing: 0.5px;
+ font-size: 0.95rem;
}
.settings-section .form-group {
@@ -400,7 +426,7 @@ body {
}
.place-item:hover {
- background: #eee;
+ background: var(--hover-bg);
}
.place-name {
@@ -946,7 +972,7 @@ button.create-place {
.search-result-item:hover,
.search-result-item:focus {
- background: #f5f5f5;
+ background: var(--hover-bg);
outline: none;
}
@@ -1011,7 +1037,7 @@ button.create-place {
}
.place-lists-manager .list-item:hover {
- background: #f8f9fa;
+ background: var(--hover-bg);
}
.place-lists-manager label {
diff --git a/app/templates/application.gjs b/app/templates/application.gjs
index 1e99a01..8dae51b 100644
--- a/app/templates/application.gjs
+++ b/app/templates/application.gjs
@@ -2,7 +2,7 @@ import Component from '@glimmer/component';
import { pageTitle } from 'ember-page-title';
import Map from '#components/map';
import AppHeader from '#components/app-header';
-import SettingsPane from '#components/settings-pane';
+import AppMenu from '#components/app-menu/index';
import { service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
@@ -14,7 +14,7 @@ export default class ApplicationComponent extends Component {
@service mapUi;
@service router;
- @tracked isSettingsOpen = false;
+ @tracked isAppMenuOpen = false;
get isSidebarOpen() {
// We consider the sidebar "open" if we are in search or place routes.
@@ -34,19 +34,19 @@ export default class ApplicationComponent extends Component {
}
@action
- toggleSettings() {
- this.isSettingsOpen = !this.isSettingsOpen;
+ toggleAppMenu() {
+ this.isAppMenuOpen = !this.isAppMenuOpen;
}
@action
- closeSettings() {
- this.isSettingsOpen = false;
+ closeAppMenu() {
+ this.isAppMenuOpen = false;
}
@action
handleOutsideClick() {
- if (this.isSettingsOpen) {
- this.closeSettings();
+ if (this.isAppMenuOpen) {
+ this.closeAppMenu();
} else if (this.router.currentRouteName === 'search') {
this.router.transitionTo('index');
} else if (this.router.currentRouteName === 'place') {
@@ -65,7 +65,7 @@ export default class ApplicationComponent extends Component {
{{pageTitle "Marco"}}
-
+
- {{#if this.isSettingsOpen}}
-
+ {{#if this.isAppMenuOpen}}
+
{{/if}}
{{outlet}}
diff --git a/app/utils/icons.js b/app/utils/icons.js
index c5458c5..83e0cf8 100644
--- a/app/utils/icons.js
+++ b/app/utils/icons.js
@@ -7,6 +7,7 @@ import edit from 'feather-icons/dist/icons/edit.svg?raw';
import facebook from 'feather-icons/dist/icons/facebook.svg?raw';
import globe from 'feather-icons/dist/icons/globe.svg?raw';
import home from 'feather-icons/dist/icons/home.svg?raw';
+import info from 'feather-icons/dist/icons/info.svg?raw';
import instagram from 'feather-icons/dist/icons/instagram.svg?raw';
import logIn from 'feather-icons/dist/icons/log-in.svg?raw';
import logOut from 'feather-icons/dist/icons/log-out.svg?raw';
@@ -36,6 +37,7 @@ const ICONS = {
facebook,
globe,
home,
+ info,
instagram,
'log-in': logIn,
'log-out': logOut,