diff --git a/main.py b/main.py index c85943b..3e21e78 100644 --- a/main.py +++ b/main.py @@ -848,7 +848,6 @@ class FlutterStyleDashboard: self._search_field.value = self.explorer_state.query self.search_overlay.visible = True self.page.update() - self.page.set_focus(self._search_field) def close_search_overlay(self, _=None): if not hasattr(self, "search_overlay"): @@ -869,7 +868,56 @@ class FlutterStyleDashboard: return self._search_field.value = keyword self.page.update() - self.page.set_focus(self._search_field) + + def _clear_search_query(self, _=None): + self._search_field.value = "" + self.explorer_state.query = "" + self.explorer_state.offset = 0 + self.close_search_overlay() + self.update_main_content() + + def _build_search_overlay(self) -> ft.Container: + command_palette = ft.Container( + width=420, + padding=ft.Padding.symmetric(horizontal=12, vertical=8), + bgcolor=ft.Colors.WHITE, + border_radius=12, + shadow=[ft.BoxShadow(blur_radius=20, color=ft.Colors.BLACK26)], + content=ft.Column( + [ + ft.Row( + [ + ft.Icon(ft.Icons.SEARCH, size=22, color=ft.Colors.BLUE_GREY_500), + ft.Container(expand=True, content=self._search_field), + ft.IconButton(ft.Icons.CLOSE, tooltip="閉じる", on_click=self.close_search_overlay), + ], + vertical_alignment=ft.CrossAxisAlignment.CENTER, + ), + ft.Text( + "Enterで検索、ESCで閉じる", + size=11, + color=ft.Colors.BLUE_GREY_400, + ), + ft.Row( + [ + ft.TextButton("すべて表示に戻す", on_click=self._clear_search_query), + ft.TextButton("閉じる", on_click=self.close_search_overlay), + ], + alignment=ft.MainAxisAlignment.END, + ), + ], + spacing=6, + ), + ) + + return ft.Container( + visible=False, + expand=True, + bgcolor=ft.Colors.BLACK54, + alignment=ft.Alignment(0, 0), + content=command_palette, + on_click=lambda _: self.close_search_overlay(), + ) @log_wrap("_build_invoice_detail_screen") def _build_invoice_detail_screen(self) -> ft.Column: