diff --git a/CLAUDE.md b/CLAUDE.md index a250825a..47f0196f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -231,7 +231,7 @@ ## Frontend (Vue/TypeScript) ## Dialogs -- In ``, put the **primary action button first** in the markup, then secondary/cancel (e.g. Save → Cancel). `DialogFooter` uses `flex-col-reverse` on mobile and `sm:flex-row sm:justify-start` on desktop, so the first child is the leftmost action on larger screens. +- In ``, put the **primary action button first** in the markup, then secondary/cancel (e.g. Save → Cancel). `DialogFooter` uses `flex-col` on mobile (primary on top, cancel at the bottom) and `sm:flex-row sm:justify-start` on desktop, so the first child is the leftmost action on larger screens. - Match sibling dialogs in the same feature area before inventing a new footer layout. ## AI agents (`app/Ai/Agents`) diff --git a/app/Http/Controllers/App/AutomationController.php b/app/Http/Controllers/App/AutomationController.php index 474cc140..ee1a9e60 100644 --- a/app/Http/Controllers/App/AutomationController.php +++ b/app/Http/Controllers/App/AutomationController.php @@ -15,6 +15,7 @@ use App\Actions\Automation\Automation\UpdateAutomation; use App\Actions\Automation\Run\RetryRunFromNode; use App\Actions\Automation\Run\TestAutomation; +use App\Enums\Automation\Status; use App\Http\Controllers\Controller; use App\Http\Requests\App\Automations\ActivateAutomationRequest; use App\Http\Requests\App\Automations\InspectFeedRequest; @@ -77,7 +78,11 @@ public function show(Automation $automation): RedirectResponse { $this->authorize('view', $automation); - return redirect()->route('app.automations.workflow', $automation->id); + // A draft opens on the builder to be set up; a live automation (active + // or paused) opens on its metrics, where the user watches it run. + $tab = $automation->status === Status::Draft ? 'workflow' : 'metrics'; + + return redirect()->route("app.automations.{$tab}", $automation->id); } public function workflow(Automation $automation, GetAutomationEditorData $editorData): Response diff --git a/lang/ar/automations.php b/lang/ar/automations.php index 205938bb..229fedbc 100644 --- a/lang/ar/automations.php +++ b/lang/ar/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'يعمل محرر الأتمتة بشكل أفضل على شاشة أكبر. افتحه على جهاز كمبيوتر مكتبي لإنشاء سير عملك.', 'title' => 'الأتمتة', 'default_name' => 'أتمتة جديدة', diff --git a/lang/ar/posts.php b/lang/ar/posts.php index 365d124d..a85c56fc 100644 --- a/lang/ar/posts.php +++ b/lang/ar/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'ألغِ الجدولة للتعديل', 'tabs' => [ + 'compose' => 'الكتابة', 'preview' => 'معاينة', 'channels' => 'القنوات', 'comments' => 'التعليقات', diff --git a/lang/de/automations.php b/lang/de/automations.php index 221ee5e9..69c5ca54 100644 --- a/lang/de/automations.php +++ b/lang/de/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'Der Automatisierungs-Editor funktioniert am besten auf einem größeren Bildschirm. Öffne ihn auf einem Desktop, um deinen Workflow zu erstellen.', 'title' => 'Automatisierungen', 'default_name' => 'Neue Automatisierung', diff --git a/lang/de/posts.php b/lang/de/posts.php index c70ce333..77c50c03 100644 --- a/lang/de/posts.php +++ b/lang/de/posts.php @@ -365,6 +365,7 @@ 'unschedule_cta' => 'Zum Bearbeiten Planung aufheben', 'tabs' => [ + 'compose' => 'Verfassen', 'preview' => 'Vorschau', 'channels' => 'Kanäle', 'comments' => 'Kommentare', diff --git a/lang/el/automations.php b/lang/el/automations.php index 1fb558f1..d40fffbc 100644 --- a/lang/el/automations.php +++ b/lang/el/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'Ο επεξεργαστής αυτοματισμών λειτουργεί καλύτερα σε μεγαλύτερη οθόνη. Άνοιξέ τον σε υπολογιστή για να δημιουργήσεις τη ροή εργασίας σου.', 'title' => 'Αυτοματισμοί', 'default_name' => 'Νέος αυτοματισμός', diff --git a/lang/el/posts.php b/lang/el/posts.php index 991273b6..3fb7a85c 100644 --- a/lang/el/posts.php +++ b/lang/el/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Αναίρεση προγραμματισμού για επεξεργασία', 'tabs' => [ + 'compose' => 'Σύνταξη', 'preview' => 'Προεπισκόπηση', 'channels' => 'Κανάλια', 'comments' => 'Σχόλια', diff --git a/lang/en/automations.php b/lang/en/automations.php index 195fabdc..ecc6b353 100644 --- a/lang/en/automations.php +++ b/lang/en/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'The automation editor works best on a larger screen. Open it on a desktop to build your workflow.', 'title' => 'Automations', 'default_name' => 'New automation', diff --git a/lang/en/posts.php b/lang/en/posts.php index 50822682..35814545 100644 --- a/lang/en/posts.php +++ b/lang/en/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Unschedule to edit', 'tabs' => [ + 'compose' => 'Compose', 'preview' => 'Preview', 'channels' => 'Channels', 'comments' => 'Comments', diff --git a/lang/es/automations.php b/lang/es/automations.php index 9313bf82..33df6255 100644 --- a/lang/es/automations.php +++ b/lang/es/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'El editor de automatizaciones funciona mejor en una pantalla más grande. Ábrelo en un ordenador para crear tu flujo de trabajo.', 'title' => 'Automatizaciones', 'default_name' => 'Nueva automatización', diff --git a/lang/es/posts.php b/lang/es/posts.php index abf2bd31..7bd1e4bd 100644 --- a/lang/es/posts.php +++ b/lang/es/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Cancelar para editar', 'tabs' => [ + 'compose' => 'Redactar', 'preview' => 'Vista previa', 'channels' => 'Canales', 'comments' => 'Comentarios', diff --git a/lang/fr/automations.php b/lang/fr/automations.php index a036d4af..835282c8 100644 --- a/lang/fr/automations.php +++ b/lang/fr/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'L\'éditeur d\'automatisation fonctionne mieux sur un grand écran. Ouvrez-le sur un ordinateur pour créer votre workflow.', 'title' => 'Automatisations', 'default_name' => 'Nouvelle automatisation', diff --git a/lang/fr/posts.php b/lang/fr/posts.php index dd1e1ad9..599f37b4 100644 --- a/lang/fr/posts.php +++ b/lang/fr/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Déprogrammer pour modifier', 'tabs' => [ + 'compose' => 'Rédiger', 'preview' => 'Aperçu', 'channels' => 'Canaux', 'comments' => 'Commentaires', diff --git a/lang/it/automations.php b/lang/it/automations.php index 9ec57a28..37490287 100644 --- a/lang/it/automations.php +++ b/lang/it/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'L\'editor delle automazioni funziona meglio su uno schermo più grande. Aprilo su un desktop per creare il tuo flusso di lavoro.', 'title' => 'Automazioni', 'default_name' => 'Nuova automazione', diff --git a/lang/it/posts.php b/lang/it/posts.php index 74450429..dd525823 100644 --- a/lang/it/posts.php +++ b/lang/it/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Annulla programmazione per modificare', 'tabs' => [ + 'compose' => 'Componi', 'preview' => 'Anteprima', 'channels' => 'Canali', 'comments' => 'Commenti', diff --git a/lang/ja/automations.php b/lang/ja/automations.php index d356c2a3..96f67641 100644 --- a/lang/ja/automations.php +++ b/lang/ja/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'オートメーションエディタは大きな画面での利用に最適です。ワークフローを作成するにはデスクトップで開いてください。', 'title' => 'オートメーション', 'default_name' => '新しいオートメーション', diff --git a/lang/ja/posts.php b/lang/ja/posts.php index 7be94ef1..b1f850be 100644 --- a/lang/ja/posts.php +++ b/lang/ja/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => '予約を解除して編集', 'tabs' => [ + 'compose' => '作成', 'preview' => 'プレビュー', 'channels' => 'チャンネル', 'comments' => 'コメント', diff --git a/lang/ko/automations.php b/lang/ko/automations.php index ba1e31fa..88af31f9 100644 --- a/lang/ko/automations.php +++ b/lang/ko/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => '자동화 편집기는 큰 화면에서 가장 잘 작동합니다. 워크플로를 만들려면 데스크톱에서 열어주세요.', 'title' => '자동화', 'default_name' => '새 자동화', diff --git a/lang/ko/posts.php b/lang/ko/posts.php index d79c8d18..7da6343e 100644 --- a/lang/ko/posts.php +++ b/lang/ko/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => '편집하려면 예약 취소', 'tabs' => [ + 'compose' => '작성', 'preview' => '미리보기', 'channels' => '채널', 'comments' => '댓글', diff --git a/lang/nl/automations.php b/lang/nl/automations.php index 91c42751..8a0c082a 100644 --- a/lang/nl/automations.php +++ b/lang/nl/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'De automatiserings-editor werkt het best op een groter scherm. Open het op een desktop om je workflow te bouwen.', 'title' => 'Automatiseringen', 'default_name' => 'Nieuwe automatisering', diff --git a/lang/nl/posts.php b/lang/nl/posts.php index 0967738d..4b37a488 100644 --- a/lang/nl/posts.php +++ b/lang/nl/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Planning opheffen om te bewerken', 'tabs' => [ + 'compose' => 'Opstellen', 'preview' => 'Voorbeeld', 'channels' => 'Kanalen', 'comments' => 'Reacties', diff --git a/lang/pl/automations.php b/lang/pl/automations.php index dfb8e694..d40b87c8 100644 --- a/lang/pl/automations.php +++ b/lang/pl/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'Edytor automatyzacji działa najlepiej na większym ekranie. Otwórz go na komputerze, aby zbudować swój workflow.', 'title' => 'Automatyzacje', 'default_name' => 'Nowa automatyzacja', diff --git a/lang/pl/posts.php b/lang/pl/posts.php index e07f0361..8a9daddb 100644 --- a/lang/pl/posts.php +++ b/lang/pl/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Anuluj planowanie, aby edytować', 'tabs' => [ + 'compose' => 'Utwórz', 'preview' => 'Podgląd', 'channels' => 'Kanały', 'comments' => 'Komentarze', diff --git a/lang/pt-BR/automations.php b/lang/pt-BR/automations.php index 1b971194..7b4bdfcf 100644 --- a/lang/pt-BR/automations.php +++ b/lang/pt-BR/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'O editor de automações funciona melhor em uma tela maior. Abra no desktop para montar seu fluxo de trabalho.', 'title' => 'Automações', 'default_name' => 'Nova automação', diff --git a/lang/pt-BR/posts.php b/lang/pt-BR/posts.php index 8c4cdeea..e5eb157c 100644 --- a/lang/pt-BR/posts.php +++ b/lang/pt-BR/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Desagendar para editar', 'tabs' => [ + 'compose' => 'Escrever', 'preview' => 'Pré-visualização', 'channels' => 'Canais', 'comments' => 'Comentários', diff --git a/lang/ru/automations.php b/lang/ru/automations.php index ab8a628b..2c059b83 100644 --- a/lang/ru/automations.php +++ b/lang/ru/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'Редактор автоматизаций лучше всего работает на большом экране. Откройте его на компьютере, чтобы создать рабочий процесс.', 'title' => 'Автоматизации', 'default_name' => 'Новая автоматизация', diff --git a/lang/ru/posts.php b/lang/ru/posts.php index febab44f..5e64fb0b 100644 --- a/lang/ru/posts.php +++ b/lang/ru/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => 'Отменить планирование для редактирования', 'tabs' => [ + 'compose' => 'Написать', 'preview' => 'Предпросмотр', 'channels' => 'Каналы', 'comments' => 'Комментарии', diff --git a/lang/tr/automations.php b/lang/tr/automations.php index c541572c..a033f4f9 100644 --- a/lang/tr/automations.php +++ b/lang/tr/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => 'Otomasyon düzenleyicisi daha büyük bir ekranda en iyi şekilde çalışır. İş akışınızı oluşturmak için masaüstünde açın.', 'title' => 'Otomasyonlar', 'default_name' => 'Yeni otomasyon', diff --git a/lang/tr/posts.php b/lang/tr/posts.php index 7d499c6f..418f7e65 100644 --- a/lang/tr/posts.php +++ b/lang/tr/posts.php @@ -365,6 +365,7 @@ 'unschedule_cta' => 'Düzenlemek için zamanlamayı kaldır', 'tabs' => [ + 'compose' => 'Oluştur', 'preview' => 'Önizleme', 'channels' => 'Kanallar', 'comments' => 'Yorumlar', diff --git a/lang/zh/automations.php b/lang/zh/automations.php index f02d6d01..b1643e2d 100644 --- a/lang/zh/automations.php +++ b/lang/zh/automations.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + 'mobile_notice' => '自动化编辑器在更大的屏幕上体验最佳。请在电脑上打开以搭建你的工作流。', 'title' => '自动化', 'default_name' => '新建自动化', diff --git a/lang/zh/posts.php b/lang/zh/posts.php index 77df4cfe..90293186 100644 --- a/lang/zh/posts.php +++ b/lang/zh/posts.php @@ -363,6 +363,7 @@ 'unschedule_cta' => '取消排期以编辑', 'tabs' => [ + 'compose' => '撰写', 'preview' => '预览', 'channels' => '渠道', 'comments' => '评论', diff --git a/resources/js/components/AppSidebar.vue b/resources/js/components/AppSidebar.vue index ec4ade9f..3f316334 100644 --- a/resources/js/components/AppSidebar.vue +++ b/resources/js/components/AppSidebar.vue @@ -17,6 +17,7 @@ import { IconPhoto, IconPencil, IconPlus, + IconSelector, IconSettings, IconTag, } from '@tabler/icons-vue'; @@ -45,6 +46,7 @@ import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, + useSidebar, } from '@/components/ui/sidebar'; import { useActiveUrl } from '@/composables/useActiveUrl'; import { useWorkspaceRole } from '@/composables/useWorkspaceRole'; @@ -70,6 +72,10 @@ const subscriptionPastDue = computed(() => Boolean(page.props.auth.subs const { canCreatePost, canManageAccounts, canManageAutomations, canCreateWorkspace } = useWorkspaceRole(); +// Open the workspace menu to the side on desktop (like the user menu) but keep +// it below the trigger on mobile, where the sidebar is an overlay sheet. +const { isMobile } = useSidebar(); + const mainNavItems = computed(() => [ { title: trans('sidebar.posts.calendar'), @@ -196,11 +202,11 @@ const handleCreateWorkspace = () => { {{ currentWorkspace?.name ?? $t('sidebar.select_workspace') }} - + + align="start" :side="isMobile ? 'bottom' : 'right'" :side-offset="4"> {{ $t('sidebar.workspaces') }} diff --git a/resources/js/components/CommentBody.vue b/resources/js/components/CommentBody.vue index c6d31bfd..a21d1093 100644 --- a/resources/js/components/CommentBody.vue +++ b/resources/js/components/CommentBody.vue @@ -42,7 +42,7 @@ const segments = computed(() => {