From b492e2aa895eefe52771c4532212924ea863666b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Tue, 5 May 2026 09:38:20 +0200 Subject: [PATCH] Add dropdown component, photo actions menu --- app/components/dropdown-menu.gjs | 53 ++++++++++++++++++++++++++++ app/components/photo-gallery.gjs | 21 +++++++++-- app/styles/app.css | 60 ++++++++++++++++++++++++++++++++ app/utils/icons.js | 12 +++---- 4 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 app/components/dropdown-menu.gjs diff --git a/app/components/dropdown-menu.gjs b/app/components/dropdown-menu.gjs new file mode 100644 index 0000000..db1319a --- /dev/null +++ b/app/components/dropdown-menu.gjs @@ -0,0 +1,53 @@ +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; +import { action } from '@ember/object'; +import { on } from '@ember/modifier'; +import Icon from '#components/icon'; + +export default class DropdownMenu extends Component { + @tracked isOpen = false; + + @action + toggleMenu(e) { + e?.stopPropagation(); + this.isOpen = !this.isOpen; + } + + @action + closeMenu(e) { + e?.stopPropagation(); + this.isOpen = false; + } + + get triggerIcon() { + return this.args.triggerIcon || 'more-vertical'; + } + + +} diff --git a/app/components/photo-gallery.gjs b/app/components/photo-gallery.gjs index 1cb1909..1354f3d 100644 --- a/app/components/photo-gallery.gjs +++ b/app/components/photo-gallery.gjs @@ -2,8 +2,9 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; import { on } from '@ember/modifier'; -import Icon from './icon'; +import Icon from '#components/icon'; import PhotoCarousel from './photo-carousel'; +import DropdownMenu from '#components/dropdown-menu'; export default class PhotoGallery extends Component { @tracked currentPhoto = this.args.selectedPhoto || this.args.photos?.[0]; @@ -21,7 +22,8 @@ export default class PhotoGallery extends Component { if ( e.target.closest('.thumbnail-strip-container') || e.target.closest('.carousel-nav-btn') || - e.target.closest('.close-btn') + e.target.closest('.close-btn') || + e.target.closest('.actions-btn-container') ) { return; } @@ -50,6 +52,21 @@ export default class PhotoGallery extends Component { > {{! template-lint-disable no-invalid-interactive }}