Compare commits

...

44 Commits

Author SHA1 Message Date
Lago fc902768a1 fix: default to singular Fahrzeug, plural only when >1 2026-05-31 14:25:35 +02:00
Lago 94eac68da4 Merge pull request 'fix: singular Fahrzeug when only 1 car available' (#5) from hotfix/singular-fahrzeug into main 2026-05-31 14:18:34 +02:00
Lago 557528d85a fix: use singular 'Fahrzeug' when only 1 car available 2026-05-31 14:18:27 +02:00
Lago 2f90534877 Merge pull request 'Chore/marco changes' (#3) from chore/marco-changes into main
Reviewed-on: #3
2026-05-31 12:13:55 +02:00
Lago 28db852453 test: add end-to-end booking flow with admin lead disqualification 2026-05-31 11:29:59 +02:00
Lago 331d0557b0 feat: complete Datenschutzerklärung
- Full rewrite from stub to legally compliant privacy policy
- Covers: Server-Logfiles, Buchungsanfragen, Identitätsdokumente, Cookies
- Legal basis: Art. 6 DSGVO (lit. b, c, f)
- Self-hosted infrastructure — no third-party data sharing
- User rights: Art. 15-20, 77 DSGVO (Auskunft, Berichtigung, Löschung, etc.)
- Aufsichtsbehörde: Österreichische Datenschutzbehörde
- No analytics, no Google services, no cloud providers
2026-05-31 11:08:19 +02:00
Lago 287629878b feat: redesign Impressum with Datenschutz section
- Restructure Impressum to match Austrian legal standard
- Add Datenschutz Kurzfassung section (DSGVO, data collection, rights)
- Clean layout: company info → Datenschutz
- No EUID, no personal data (GDPR-safe)
2026-05-31 10:49:51 +02:00
Lago cec51d6c19 feat: update Impressum with correct company data + fix email domain
- Impressum: MC Cars GmbH, Gaisfeld 1/2, 8564 Krottendorf-Gaisfeld
- FN 675751 b, Landesgericht für Zivilrechtssachen Graz
- Geschäftsführer: Christian Leski, Marco Schober
- UID placeholder (wird nachgereicht)
- Email domain: mccars.at → mc-cars.at across all pages
- Social links: mccars → mc-cars
2026-05-31 10:43:47 +02:00
Lago 9bc08d994c feat: unify admin photo gallery with drag-and-drop + arrows
- Merge separate 'Hauptfoto' and 'Weitere Fotos' uploads into single upload zone
- Add drag-and-drop support for photo reorder
- Add ← → arrow buttons for photo reorder
- Increase thumbnail size to 200px
- Show Hauptfoto badge, ★ set primary, × delete on each thumbnail
- Auto-promote next photo when primary is deleted
- Keep vehicle.photo_url synced with primary photo
2026-05-31 10:29:07 +02:00
Lago 8be7d5aad2 feat: implement Marco's customer changes
- Remove 'Flotte ansehen' button from hero section
- Remove '24/7 Support' stat from hero section
- Remove 'Unsere Flotte' eyebrow from fleet section
- Remove ALL 'Warum wir' / 'Why us' references from nav links, i18n keys, and legal pages
- Update reviews: Ferrari references only (removed GT3 mentions)
- Update Impressum with correct company data (MC Cars GmbH)
- Add multi-photo gallery: DB migration (17-vehicle-photos.sql), admin UI for photo management, frontend carousel on cards and dialog
- Update SEO: Ferrari-focused meta tags, title, keywords, JSON-LD
- Clean up dead i18n keys (viewFleet, statSupport, fleetEyebrow, navWhy, why* keys)
- Fix legal page issues: add config.js script, fix logo references to SVG
- Add Playwright E2E tests (26/26 passing)
- Update footer tagline across all pages
2026-05-31 09:53:23 +02:00
Lago e1f6bd56b0 feat: add SQL migration to fix misclassified long rentals and update docker-compose configurations 2026-05-17 23:19:36 +02:00
Lago e4bdd85518 feat: update docker-compose to include N8N webhook URL and remove obsolete SQL migrations 2026-05-17 23:12:24 +02:00
Lago b4c6a47ce8 Merge pull request 'feat: configure n8n webhooks and update related documentation' (#2) from dev into main
Reviewed-on: #2
2026-05-17 23:05:41 +02:00
Lago 597d47f824 feat: add n8n webhook URL configuration and update deployment scripts 2026-05-17 23:05:05 +02:00
Lago 44dbf6b93c feat: configure n8n webhooks and update related documentation 2026-05-17 23:01:57 +02:00
Lago 75b338988d Merge pull request 'feat: Add manual email sending workflow and related database changes' (#1) from dev into main
Reviewed-on: #1
2026-05-17 22:45:47 +02:00
Lago 387d2ba2ab feat: replace toast notifications with a customizable popup for admin messages 2026-05-17 22:41:44 +02:00
Lago 3ec79e1923 fix: update rental type label for consistency in multiple languages 2026-05-17 22:39:00 +02:00
Lago f46ba8cadc feat(i18n): add VAT labels and email sent messages in German and English
style(admin): increase max-width of admin page and adjust table styles

fix(n8n): enhance workflow import and publishing process

fix(workflows): update SQL queries for fetching and updating sales orders

feat(migrations): normalize rental types and enhance email guard for individuell rentals

feat(migrations): add RPC for updating deposit in sales orders

fix(migrations): ensure individuell orders persist net/vat components and backfill existing records

test: update last run status to failed
2026-05-17 22:35:11 +02:00
Lago e34d56e36a feat: Add manual email sending workflow and related database changes
- Implemented a new n8n workflow for manual email sending, including webhook trigger, order data fetching, email building, and sending.
- Added logic to format email content with customer and order details.
- Introduced new columns in the sales_orders table to track email sending status.
- Updated database functions to handle new rental types and email status.
- Created new RPCs for updating email status and retrieving email details for sales orders.
2026-05-17 18:04:36 +02:00
Lago e24bc743e2 docs: add local testing protocol for MC Cars stack verification 2026-05-17 13:41:06 +02:00
Lago 32580781c8 chore: add .playwright-mcp to .gitignore to prevent committing Playwright configuration files 2026-05-17 13:39:26 +02:00
Lago d5a219bd50 chore: remove unused logo and SVG assets from frontend images 2026-05-10 12:14:20 +02:00
Lago d6713e25f9 Refactor code structure for improved readability and maintainability 2026-05-10 12:10:45 +02:00
Lago b21b3937b2 fix: set N8N_SECURE_COOKIE to false in docker-compose files for n8n service 2026-05-10 01:19:23 +02:00
Lago f440f88725 fix: update n8n service configuration for improved user permissions and workflow management 2026-05-10 01:17:12 +02:00
Lago 408a59bd5c chore: remove unused .gitkeep file from data directory 2026-05-10 01:08:14 +02:00
Lago 652131a285 fix: correct SUPABASE_PUBLIC_URL in environment setup for mc-cars.at 2026-05-10 00:56:51 +02:00
Lago e986121240 docs: update README with environment variable setup for mc-cars.at 2026-05-10 00:56:06 +02:00
Lago bd906dbe15 feat: enhance n8n workflows with dynamic credential management and email configuration 2026-05-10 00:52:35 +02:00
Lago 05de6cc9a4 fix: update n8n workflow for payment email and improve SMTP configuration details 2026-05-10 00:23:14 +02:00
Lago fae2c0120e fix: simplify robots.txt to valid standard directives 2026-05-10 00:13:36 +02:00
Lago 54d9cdcdc9 perf: async Google Fonts, extend CSS/JS cache to 1 week 2026-05-10 00:01:22 +02:00
Lago db4001aaa5 fix: optimize vehicle photo URLs and update HTML preconnect and stylesheet links 2026-05-09 23:51:40 +02:00
Lago b4258edb91 fix: update hero image URL and improve preload for styles and fonts 2026-05-09 23:48:47 +02:00
Lago aca60696ae fix: improve accessibility and styling for vehicle selection and review buttons 2026-05-09 23:45:30 +02:00
Lago 926950bd62 Add MC Cars mark SVG logo to frontend images 2026-05-09 23:42:28 +02:00
Lago 9de88a5459 fix: update nginx configuration for caching, gzip compression, security headers, and error handling 2026-05-09 23:37:22 +02:00
Lago 8f5ea34e8b chore: ignore and untrack autogenerated local n8n files 2026-05-09 23:37:02 +02:00
Lago 6a70581ef2 docs: add local dev workflow and ignore local n8n mount 2026-05-09 23:32:16 +02:00
Lago 3fb0369367 Enhance SEO and performance for MC Cars website
- Added meta tags for SEO optimization across multiple pages including descriptions, robots directives, and Open Graph tags.
- Implemented JSON-LD structured data for better search visibility and rich snippets.
- Configured nginx for improved performance with gzip compression, caching strategies, and security headers.
- Created robots.txt and sitemap.xml for better search engine indexing and crawl management.
- Developed comprehensive SEO documentation including a guide and quick reference for ongoing optimization efforts.
2026-05-09 23:12:25 +02:00
LagoESP dbb4c27535 Add favicon and apple-touch-icon to multiple HTML files; implement toast notification feature in app.js; update duration mode handling; enhance footer navigation and styling; create AGB and Mietbedingungen pages; improve Nginx configuration for HTML file handling; add logo images. 2026-05-09 23:04:29 +02:00
LagoESP 3a902e7138 feat: add Mietvertrag workflow and template management in n8n, including email notifications and document handling
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 21:42:17 +02:00
LagoESP 3298efe54b feat: implement server-side pricing calculation and add site settings management
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 20:39:21 +02:00
872 changed files with 7240 additions and 8478 deletions
+26 -5
View File
@@ -36,11 +36,21 @@ ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=true
ENABLE_ANONYMOUS_USERS=false
# ---- SMTP (dummy; real values needed only to send password-reset mail) ----
SMTP_HOST=localhost
SMTP_PORT=2500
SMTP_USER=fake
SMTP_PASS=fake
# ---- SMTP / IMAP (MC Cars mailbox) ----
SMTP_HOST=heracles.mxrouting.net
SMTP_PORT=587
SMTP_USER=office@mc-cars.at
SMTP_PASS=fhXTcjWMRpSLYYzXJsN8
IMAP_HOST=heracles.mxrouting.net
IMAP_PORT=993
IMAP_USER=office@mc-cars.at
IMAP_PASS=fhXTcjWMRpSLYYzXJsN8
POP3_HOST=heracles.mxrouting.net
POP3_PORT=995
POP3_USER=office@mc-cars.at
POP3_PASS=fhXTcjWMRpSLYYzXJsN8
# ---- Admin BOOTSTRAP credentials (seeded on first DB init) ----
# The user is flagged must_change_password=true. The REAL working password
@@ -56,3 +66,14 @@ FILE_SIZE_LIMIT=52428800
N8N_ENCRYPTION_KEY=mc-cars-n8n-encryption-key-change-me
N8N_USER_EMAIL=admin@mccars.local
N8N_USER_PASSWORD=McCars-N8n-Admin1
N8N_WEBHOOK_URL=http://localhost:55521/webhook/manual-email-send
N8N_POSTGRES_CREDENTIAL_ID=AWozEaiOSymMj7JF
N8N_POSTGRES_CREDENTIAL_NAME=Postgres account
N8N_SMTP_CREDENTIAL_ID=nRMemi1sz2C0N4Vu
N8N_SMTP_CREDENTIAL_NAME=SMTP account
N8N_SMTP_HOST=heracles.mxrouting.net
N8N_SMTP_USER=office@mc-cars.at
N8N_SMTP_PASS=fhXTcjWMRpSLYYzXJsN8
N8N_PAYPAL_KAUTION_LINK=https://www.google.at
N8N_PAYPAL_MIETE_LINK=https://www.google.at
N8N_PAYMENT_WORKFLOW_ID=rI1gUpcRXSikxWhh
+7
View File
@@ -5,6 +5,10 @@
# Bind-mounted runtime state (keep folder, ignore contents)
/data/db/
/data/storage/
/data/n8n/
/data/**/.cache/
/data/**/crash.journal
/data/**/n8nEventLog.log
# OS / editor
.DS_Store
@@ -16,3 +20,6 @@ docker-compose.override.yml
# Generated at container start by 99-config.sh — never commit
frontend/config.js
.playwright-mcp
node_modules/
+29 -10
View File
@@ -27,12 +27,15 @@ Postgres' official entrypoint only processes `/docker-entrypoint-initdb.d/` on a
### Post-boot (every time, idempotent)
- `supabase/migrations/post-boot.sql` — seeds the admin `auth.users` row with `must_change_password=true`, creates the `vehicle-photos` bucket row if missing. Parameterized: `psql -v admin_email=... -v admin_password=...`.
- `supabase/migrations/02-leads.sql` — leads + customers + RPCs + `supabase_realtime` publication. Uses `create if not exists`, `create or replace`, and `do $$ ... $$` with exists-checks so every object is idempotent.
- `supabase/migrations/08-backend-pricing-and-security.sql``calculate_price` RPC (public, read-only pricing), refactored `create_lead` RPC (accepts no price params, computes server-side), unique partial indexes on `lead_attachments` (max 1 id_document + 1 income_proof per lead), hardened storage RLS (anon INSERT-only on customer-documents, admin SELECT+INSERT only).
- `supabase/migrations/09-site-settings.sql``site_settings` key-value table + RLS (public SELECT, admin full CRUD) + seed row `hero_image_url = '/images/ferrari-main-car.png'`.
Both are run by the `post-init` service, which gates on `auth.users` and `storage.buckets` being queryable before touching anything.
**Adding a new migration:**
- If it's schema the app can't start without on a fresh DB → extend `01-init.sql`.
- If it's ongoing / idempotent → new file `03-*.sql`, mount it in `post-init`, append one more `psql -f` line to the entrypoint.
- If it's ongoing / idempotent → new file `NN-*.sql`, mount it in `post-init`, append one more `psql -f` line to the entrypoint in `docker-compose.yml`.
- Current numbering: `01`, `02`, `08`, `09`. Use the next available number for new migrations.
---
@@ -40,13 +43,15 @@ Both are run by the `post-init` service, which gates on `auth.users` and `storag
| Role | How obtained | Can do |
| ----------------- | ---------------------------------- | ------------------------------------ |
| `anon` | Anon JWT (shipped to browser) | `select` on active `vehicles`; `insert` on `leads` only |
| `authenticated` | JWT from `signInWithPassword` | Full CRUD on vehicles/leads/customers, `execute` RPCs |
| `anon` | Anon JWT (shipped to browser) | `select` on active `vehicles`; `insert` on `leads` only; `select` on `site_settings`; `insert` on `customer-documents` bucket; execute `calculate_price` and `create_lead` RPCs |
| `authenticated` | JWT from `signInWithPassword` | Full CRUD on vehicles/leads/customers/sales_orders/site_settings, `execute` RPCs, storage uploads |
| `service_role` | Service JWT (never in browser) | Bypasses RLS |
- Anon **cannot** read leads. The booking form is fire-and-forget by design. An abuser submitting with a stolen anon key sees only HTTP 201 with no row data.
- Anon **cannot** read/delete from `customer-documents` bucket — only INSERT (upload). Admin can SELECT + INSERT but not DELETE (prevents evidence destruction).
- RPCs are `SECURITY INVOKER`. They run as the caller, so `auth.uid()` returns the actual admin; RLS still applies.
- `qualify_lead` is idempotent — calling it twice returns the existing customer row instead of raising.
- `create_lead` computes prices server-side via `calculate_price` — no price params accepted from client (prevents price-tampering).
---
@@ -93,6 +98,10 @@ Password min length is enforced server-side by `GOTRUE_PASSWORD_MIN_LENGTH=10`.
- The `web` service uses `nginx:1.27-alpine` directly (no `build:`). Static files and `nginx.conf` are bind-mounted. Updating the frontend is `git pull` + `docker compose up -d --force-recreate web`.
- `frontend/app.js` (public) creates a Supabase client with `persistSession: false` — the public site never needs a session.
- `frontend/admin.js` uses `persistSession: true, storageKey: "mccars.auth"` and a single realtime channel `mccars-admin` that subscribes to leads/customers/vehicles.
- Admin tabs: Aktive Leads, Inaktive Leads, Kunden, Fahrzeuge, **Einstellungen**. The Einstellungen (Settings) tab manages site-wide configuration (currently: hero image upload).
- `app.js` calls `calculate_price` RPC for sidebar pricing display — **no client-side price computation**.
- `app.js` calls `create_lead` RPC for form submission — prices are computed server-side and stored on the lead.
- `app.js` at boot loads `hero_image_url` from `site_settings` and applies it via CSS variable `--hero-bg` on `.hero`. The `styles.css` fallback is `url('images/ferrari-main-car.png')`.
- `app.js` writes `vehicle_id` (uuid) **and** denormalized `vehicle_label` ("BMW M3") into the lead at submit time, so the admin UI renders even if the vehicle is later deleted.
---
@@ -111,6 +120,9 @@ Password min length is enforced server-side by `GOTRUE_PASSWORD_MIN_LENGTH=10`.
| `config.js` not generated, website uses fallback URL | Unraid doesn't preserve execute bits — entrypoint script skipped. Fixed: `config.js` is now written by an inline `entrypoint:` command in docker-compose, no file needed. |
| Website loads but API calls fail ("Failed to fetch") | `config.js` cached by NPM or browser with old `localhost` URL. The `?v=timestamp` cache-buster on the `<script>` tag prevents this. Hard-refresh or check NPM "Cache Assets" toggle. |
| Git pull fails with "Your local changes would be overwritten" | `.env` was modified on the NAS. Use `git checkout -- .env && git pull`, then re-apply the two URL lines with `sed`. |
| `calculate_price` returns PGRST202 "Could not find the function" | Migration `08-backend-pricing-and-security.sql` not applied. Check `post-init` logs or run it manually. |
| Hero image not changing after admin upload | Browser/CDN caching the old image. The URL includes a unique path (`site/hero.ext`) with upsert — hard-refresh the public page. |
| `create_lead` fails with "function does not exist" | Same as calculate_price — migration 08 not applied. |
---
@@ -119,22 +131,29 @@ Password min length is enforced server-side by `GOTRUE_PASSWORD_MIN_LENGTH=10`.
```bash
docker compose ps # all services up (post-init exited 0)
curl http://localhost:55521/rest/v1/vehicles?select=brand -H "apikey: $ANON" # 6 demo cars
curl -X POST http://localhost:55521/rest/v1/rpc/calculate_price \
-H "apikey: $ANON" -H "Content-Type: application/json" \
-d '{"p_vehicle_id":"<uuid>","p_date_from":"2025-01-06","p_date_to":"2025-01-10"}' # pricing JSON
curl http://localhost:55521/rest/v1/site_settings?select=value&key=eq.hero_image_url \
-H "apikey: $ANON" # returns hero image URL
```
In the browser:
1. Open http://\<host\>:55580, submit the booking form.
2. Open http://\<host\>:55580/admin.html, log in with `.env` bootstrap creds.
3. Rotate the password when prompted.
4. The lead you submitted appears in "Aktive Leads" — in real time.
5. Click **Qualifizieren**. Row disappears from active, a new row appears in **Kunden** with the `lead_id` displayed.
6. Open Supabase Studio at http://\<host\>:55530 and confirm the `customers.lead_id` FK matches.
1. Open http://\<host\>:55580, verify the hero image loads (dynamic from settings).
2. Submit the booking form — sidebar shows server-computed pricing.
3. Open http://\<host\>:55580/admin.html, log in with `.env` bootstrap creds.
4. Rotate the password when prompted.
5. The lead you submitted appears in "Aktive Leads" — in real time, with pricing columns.
6. Click **Qualifizieren**. Row disappears from active, a new row appears in **Kunden** with the `lead_id` displayed.
7. Go to **Einstellungen** tab. Upload a new hero image. Verify it appears on the public site after refresh.
8. Open Supabase Studio at http://\<host\>:55530 and confirm `site_settings`, `leads` pricing columns, `customers.lead_id` FK.
---
## 10. Things explicitly NOT in this stack
- No n8n. Email automation is out of scope here; do it downstream.
- No Google Analytics / Google Reviews widget.
- No "Anmelden/Registrieren" on the public site. Admin access is intentionally unlinked.
- No logflare / analytics.
- No edge-functions container — RPCs live in Postgres.
- No client-side price calculation — all pricing is server-side via `calculate_price` RPC.
+134 -25
View File
@@ -58,14 +58,17 @@ No auth header except the anon `apikey`. Kong strips the key and forwards with t
### 2.2 Public visitor submits booking
```
browser → supabase.from('leads').insert({...})
→ :55521/rest/v1/leads (POST, apikey=anon)
→ PostgREST → postgres
RLS "leads_anon_insert": insert allowed, select denied
← 201 (no body returned to anon)
browser → supabase.rpc('create_lead', {p_name, p_email, p_phone, p_vehicle_id,
p_vehicle_label, p_date_from, p_date_to, p_message, p_source,
p_ip_address, p_ip_country})
:55521/rest/v1/rpc/create_lead (POST, apikey=anon)
→ PostgREST → postgres.public.create_lead(...)
→ internally calls calculate_price() → computes pricing
→ INSERT INTO leads (with pricing columns)
← lead uuid
```
The frontend never reads leads back. If the INSERT fails (validation, RLS), the UI shows a localized failure string.
No price parameters are accepted from the client — all pricing is computed server-side. This prevents price-tampering. The frontend never reads leads back. If the RPC fails (validation, RLS), the UI shows a localized failure string.
### 2.3 Admin login
@@ -114,6 +117,53 @@ admin.js → UPDATE vehicles SET photo_url = <public url>
Bucket is public-read, write-authenticated, MIME-restricted to `image/*`, 50 MB cap.
### 2.6 Server-side price calculation
```
app.js → supabase.rpc('calculate_price', {p_vehicle_id, p_date_from, p_date_to})
→ :55521/rest/v1/rpc/calculate_price (POST, apikey=anon)
→ PostgREST → postgres.public.calculate_price(uuid, date, date)
← jsonb {daily_subtotal, weekend_subtotal, subtotal_eur, vat_eur, total_eur,
deposit_eur, total_days, weekday_count, weekend_day_count}
```
Pricing logic lives **only** in the database — the frontend never computes prices. `create_lead` also calls `calculate_price` internally to store an immutable pricing snapshot on the lead row.
### 2.7 Lead submission (server-computed prices)
```
app.js → supabase.rpc('create_lead', {p_name, p_email, p_phone, p_vehicle_id,
p_vehicle_label, p_date_from, p_date_to, p_message, p_source,
p_ip_address, p_ip_country})
→ PostgREST → postgres.public.create_lead(...)
→ internally calls calculate_price → stores pricing on lead row
← lead uuid
```
No price parameters are accepted from the client. This prevents price-tampering attacks.
### 2.8 Site settings & configurable hero image
```
app.js → supabase.from('site_settings').select('value').eq('key','hero_image_url').single()
→ :55521/rest/v1/site_settings?key=eq.hero_image_url&select=value
→ RLS: anon SELECT allowed
← { value: '/images/ferrari-main-car.png' }
→ app.js sets CSS variable --hero-bg on .hero element
```
Admin upload flow:
```
admin.js → supabase.storage.from('vehicle-photos').upload('site/hero.ext', file, {upsert:true})
→ storage API writes to bucket
← public URL
admin.js → supabase.from('site_settings').upsert({key:'hero_image_url', value: publicUrl})
→ PostgREST → UPDATE site_settings
← 200
```
The CSS uses `var(--hero-bg, url('images/ferrari-main-car.png'))` so the default hero image is shown until JavaScript loads and overrides it.
---
## 3. Database layout
@@ -124,13 +174,26 @@ postgres (database = "postgres")
├── storage schema (Storage API)
├── _realtime schema (Realtime bookkeeping)
└── public schema
├── vehicles (fleet)
├── leads (form submissions)
├── customers (spawned from qualified leads)
├── tg_touch_updated_at() trigger fn
├── qualify_lead() RPC
├── disqualify_lead() RPC
── reopen_lead() RPC
├── vehicles (fleet)
├── leads (form submissions, server-computed pricing)
├── lead_attachments (id_document, income_proof per lead)
├── customers (spawned from qualified leads)
├── customer_attachments (admin-uploaded docs for customers)
├── sales_orders (rental orders linked to customer+lead)
── sales_order_attachments
├── site_settings (key-value config, e.g. hero_image_url)
├── tg_touch_updated_at() trigger fn
├── calculate_price() RPC (public, read-only pricing)
├── create_lead() RPC (server-side price computation)
├── qualify_lead() RPC
├── disqualify_lead() RPC
├── reopen_lead() RPC
├── sales_order_toggle_kaution() RPC
├── sales_order_toggle_rental() RPC
├── sales_order_toggle_complete() RPC
├── customer_update_private_notes() RPC
├── sales_order_update_private_notes() RPC
└── sales_order_upload_attachment() RPC
```
### 3.1 `public.vehicles`
@@ -148,10 +211,12 @@ postgres (database = "postgres")
- `vehicle_id → vehicles(id) ON DELETE SET NULL`
- `vehicle_label text` — denormalized at submit; survives vehicle deletion
- `date_from`, `date_to`, `message`
- Pricing (server-computed, immutable): `daily_subtotal`, `weekend_subtotal`, `subtotal_eur`, `vat_eur`, `total_eur`, `deposit_eur`, `total_days`, `weekday_count`, `weekend_day_count`
- `status check in ('new','qualified','disqualified')` default `new`
- `is_active bool` default `true` — filter for Active/Inactive tabs
- `admin_notes text`
- `source text` default `'website'`
- `ip_address inet`, `ip_country text` — geolocation info from submission
- `qualified_at`, `qualified_by → auth.users(id)`
### 3.3 `public.customers`
@@ -159,25 +224,65 @@ postgres (database = "postgres")
- `lead_id → leads(id) ON DELETE RESTRICT` + `unique index` (exactly one customer per lead)
- `name`, `email`, `phone`
- `first_contacted_at`
- `notes`
- `notes`, `private_notes`
- `status check in ('active','inactive')`
- `created_by → auth.users(id)`
### 3.4 RLS matrix
### 3.4 `public.lead_attachments`
- `id uuid pk`
- `lead_id → leads(id) ON DELETE CASCADE`
- `bucket`, `file_path`, `file_name`, `mime_type`
- `kind check in ('id_document', 'income_proof', 'other')`
- Unique partial index: max 1 `id_document` + 1 `income_proof` per lead
| Table | anon | authenticated |
| ---------- | -------- | -------------------- |
| vehicles | SELECT where `is_active=true` | full CRUD |
| leads | INSERT only | full CRUD |
| customers | denied | full CRUD |
### 3.5 `public.sales_orders`
- `id uuid pk`
- `customer_id → customers(id)`, `lead_id → leads(id)`
- `order_number`, `private_notes`
- `kaution_paid`, `rental_paid`, `rental_complete` (booleans + timestamps)
- Pricing snapshot: `daily_subtotal`, `weekend_subtotal`, `subtotal_eur`, `vat_eur`, `total_eur`, `deposit_eur`
- `total_days`, `weekday_count`, `weekend_day_count`, `date_from`, `date_to`, `vehicle_label`
### 3.5 RPCs
### 3.6 `public.site_settings`
- `key text pk` — setting identifier (e.g. `hero_image_url`)
- `value text` — setting value (e.g. a public URL or path)
- `updated_at timestamptz`
- RLS: public SELECT for all, authenticated-only INSERT/UPDATE/DELETE
### 3.7 RLS matrix
| Table | anon | authenticated |
| ------------------ | ------------------ | -------------------- |
| vehicles | SELECT where `is_active=true` | full CRUD |
| leads | INSERT only | full CRUD |
| lead_attachments | INSERT only | SELECT + INSERT |
| customers | denied | full CRUD |
| sales_orders | denied | full CRUD |
| site_settings | SELECT only | full CRUD |
### 3.8 Storage buckets
| Bucket | Public read | anon writes | authenticated writes | Notes |
| ------------------- | ----------- | ----------- | -------------------- | ----- |
| `vehicle-photos` | yes | no | INSERT (MIME `image/*`, 50 MB) | Fleet photos + site hero image |
| `customer-documents`| no | INSERT only | SELECT + INSERT | ID docs, income proofs |
Anon users may only `INSERT` into `customer-documents` (no SELECT/UPDATE/DELETE). Admin can SELECT + INSERT but not DELETE (prevents accidental evidence destruction).
### 3.9 RPCs
| Function | Role required | Semantics |
| --------------------------------- | --------------- | ------------------------------------------------------------------------- |
| `qualify_lead(uuid, text)` | authenticated | Locks lead row, flips to `qualified`+inactive, inserts matching customer. Idempotent: returns existing customer on second call. |
| `calculate_price(uuid, date, date)` | anon | Read-only pricing calculator. Returns jsonb: `{daily_subtotal, weekend_subtotal, subtotal_eur, vat_eur, total_eur, deposit_eur, total_days, weekday_count, weekend_day_count}`. Uses vehicle's `daily_price_eur`, applies 20% weekend surcharge, 19% VAT, 3× daily deposit. |
| `create_lead(...)` | anon | Creates a lead with server-computed pricing (calls `calculate_price` internally). Accepts: name, email, phone, vehicle_id, vehicle_label, date_from, date_to, message, source, ip_address, ip_country. No price params from client. |
| `qualify_lead(uuid, text)` | authenticated | Locks lead row, flips to `qualified`+inactive, inserts matching customer + sales_order with pricing snapshot. Idempotent: returns existing customer on second call. |
| `disqualify_lead(uuid, text)` | authenticated | Marks lead `disqualified`+inactive, stores notes. |
| `reopen_lead(uuid)` | authenticated | Resets lead to `new`+active, deletes the spawned customer if any. |
| `sales_order_toggle_kaution(uuid)` | authenticated | Toggles kaution_paid boolean + timestamp on a sales order. |
| `sales_order_toggle_rental(uuid)` | authenticated | Toggles rental_paid boolean + timestamp. |
| `sales_order_toggle_complete(uuid)` | authenticated | Toggles rental_complete boolean + timestamp. |
| `customer_update_private_notes(uuid, text)` | authenticated | Updates private_notes field on a customer. |
| `sales_order_update_private_notes(uuid, text)` | authenticated | Updates private_notes field on a sales order. |
All three are `SECURITY INVOKER`, so `auth.uid()` is the live admin and RLS applies.
@@ -214,9 +319,9 @@ Host port mapping: `55521:8000` (8000 blocked by Docker Desktop's wslrelay on Wi
frontend/
├── nginx.conf (serves /, gzip, cache headers)
├── index.html app.js (public site, anon key, persistSession:false)
├── admin.html admin.js (admin CRM, persistSession:true)
├── admin.html admin.js (admin CRM + settings, persistSession:true)
├── i18n.js (DE/EN)
├── styles.css (copper/charcoal palette)
├── styles.css (copper/charcoal palette, CSS-variable hero image)
├── impressum.html
└── datenschutz.html
```
@@ -227,7 +332,9 @@ frontend/
- The `web` service uses `nginx:1.27-alpine` directly with bind-mounted files (no `build:` step). This is Portainer-compatible: updating the frontend is `git pull` + `docker compose up -d --force-recreate web`.
- `admin.js` is ES modules, imports `@supabase/supabase-js` from `esm.sh` (CDN, pinned version). One Supabase client per page.
- State lives in a single `state` object. Admin re-renders the active tab on realtime events.
- Admin tabs: Aktive Leads, Inaktive Leads, Kunden, Fahrzeuge, **Einstellungen** (site settings: hero image upload).
- Force-password-change modal is the only state that can preempt the rest of the admin UI after login.
- Public site hero image is loaded dynamically from `site_settings` table at boot and applied via CSS variable `--hero-bg`. Fallback default is baked into `styles.css`.
---
@@ -334,4 +441,6 @@ For real deployments:
- **Bootstrap password is forced out** on first login (`must_change_password` metadata). Frontend refuses to reuse the bootstrap value.
- **RLS is the single source of authorization.** The admin UI calling `.from('leads').select('*')` works only because the authenticated policy allows it; without a valid Bearer JWT the same query returns zero rows.
- **RPCs are `SECURITY INVOKER`** — no role-escalation surface.
- **Storage bucket** is public-read (photos must render on the public site) but writes need authenticated, MIME-restricted, size-limited.
- **Server-side pricing** — `create_lead` computes prices internally via `calculate_price`. No price parameters are accepted from the client, preventing price-tampering.
- **Document security** — `customer-documents` bucket allows anon INSERT only (upload), no SELECT/DELETE. Admin can SELECT + INSERT but not DELETE. Unique partial indexes enforce max 1 `id_document` + 1 `income_proof` per lead.
- **Storage bucket** (`vehicle-photos`) is public-read (photos must render on the public site) but writes need authenticated, MIME-restricted, size-limited.
+137
View File
@@ -0,0 +1,137 @@
# Production Deployment - n8n Webhook Routing
## Prerequisites
Ensure your production environment has:
- `docker-compose.yml` and `docker-compose.local.yml` updated with new n8n webhook routing
- `supabase/kong.yml` updated with n8n webhook service
- `frontend/admin.js` updated with new sendOrderEmailDirect function
- Production domain configured (e.g., `your-domain.com`)
## Deployment Steps
### 1. Update Production Config
Edit `frontend/config.js` and replace `localhost:55521` with your production domain:
```javascript
window.MCCARS_CONFIG={
SUPABASE_URL:"https://your-domain.com",
SUPABASE_ANON_KEY:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
N8N_WEBHOOK_URL:"https://your-domain.com/webhook/manual-email-send"
};
```
Replace:
- `your-domain.com` with your actual production domain
- Keep the same ANON_KEY value
### 2. Optional: Configure WEBHOOK_DOMAIN
If you want n8n to know its public webhook URL (for n8n UI display), set environment variable:
```bash
export WEBHOOK_DOMAIN=https://your-domain.com
```
This tells n8n that webhooks are accessible at `https://your-domain.com/webhook/*` from the internet.
### 3. Deploy Updated Files
Push these files to production:
- `supabase/kong.yml` (updated with n8n webhook service)
- `docker-compose.yml` (updated WEBHOOK_URL variable syntax)
- `frontend/config.js` (updated with production domain)
- `frontend/admin.js` (updated sendOrderEmailDirect function)
### 4. Restart Stack on Production Server
```bash
# On production host
cd /mnt/user/appdata/mc-cars # or your deployment path
# Pull latest code
git pull origin dev # or your deployment branch
# Restart with new config
docker-compose down
docker-compose up -d --build
# Verify services are healthy
docker-compose ps
```
### 5. Verify Webhook Routing
Test webhook from production domain:
```bash
curl 'https://your-domain.com/webhook/manual-email-send' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sales_order_id=YOUR_ORDER_ID'
```
Expected response: 200 OK with n8n workflow result
## Network Setup
Kong must be accessible from the internet:
- **Port 55521** exposed via reverse proxy (nginx/Apache) or firewall rule
- Domain DNS points to production server
- SSL certificate configured (recommended to use Kong's 8443 port with cert)
## Troubleshooting
### "Failed to fetch" on send email button
1. Check Kong is routing webhook:
```bash
docker-compose exec kong curl -v http://n8n:5678/webhook/manual-email-send
```
2. Verify Kong config loaded:
```bash
docker-compose logs kong | grep "n8n-webhooks"
```
3. Check n8n workflow is active:
```bash
docker-compose logs n8n | grep "webhook"
```
### CORS errors
Ensure Kong's CORS plugin is enabled for `/webhook/` routes (should be in kong.yml):
```yaml
plugins:
- name: cors
```
### Webhook not triggering from browser
Verify in browser DevTools:
1. Network tab shows POST to `/webhook/manual-email-send`
2. Response status is 200 (not 404 or 500)
3. Check n8n logs for workflow execution
## Rollback
If issues occur:
```bash
# Rollback config.js to localhost for debugging
git checkout frontend/config.js
docker-compose up -d
# Then fix and redeploy
```
## Verification Checklist
- [ ] Kong routing `/webhook/*` to n8n ✓
- [ ] Frontend config.js has production domain ✓
- [ ] Admin portal can reach Kong on correct port ✓
- [ ] Webhook accepts POST requests ✓
- [ ] n8n workflow triggers and sends email ✓
- [ ] Email appears in order record ✓
+152
View File
@@ -0,0 +1,152 @@
# n8n Webhook Routing Configuration
## Overview
n8n is intentionally kept internal to the Docker network and **not exposed to the internet**. To allow the browser to trigger n8n workflows via webhooks, Kong (the API gateway) proxies webhook requests to the internal n8n service.
## Architecture
```
Browser Kong (Port 55521) n8n (Port 5678, internal)
| | |
| POST /webhook/* | |
|----------------------> | (no strip_path) |
| | POST /webhook/* |
| |--------------------------> |
| | Webhook triggers |
| | workflow |
|<----- Response --------|<---------------------------|
```
## Configuration Changes
### 1. Kong Configuration (`supabase/kong.yml`)
Added a new service to route webhook traffic to internal n8n:
```yaml
- name: n8n-webhooks
url: http://n8n:5678/
routes:
- name: n8n-webhooks-all
strip_path: false
paths:
- /webhook/
plugins:
- name: cors
```
- `strip_path: false` ensures the full `/webhook/...` path is forwarded to n8n
- CORS plugin allows browser cross-origin requests (all origins for internal workflow triggers)
### 2. Docker Compose (`docker-compose.yml`)
**Kong service:**
- Added `n8n` to the `depends_on` list (waits for n8n to start before Kong)
**n8n service:**
- Updated `WEBHOOK_URL` environment variable to use `${WEBHOOK_DOMAIN:http://localhost:55590}/`
- This allows production deployments to override the default localhost URL
### 3. Frontend Configuration (`frontend/config.js`)
Updated the webhook URL configuration:
```javascript
N8N_WEBHOOK_URL: "/webhook/manual-email-send"
```
This is a **same-origin request** path that works for both:
- **Local:** `http://localhost:55521/webhook/manual-email-send` (Kong on port 55521)
- **Production:** `https://your-domain.com/webhook/manual-email-send`
### 4. Admin UI (`frontend/admin.js`)
Updated `sendOrderEmailDirect()` function to use the configured webhook URL directly:
```javascript
const n8nUrl = window.MCCARS_CONFIG?.N8N_WEBHOOK_URL || "/webhook/manual-email-send";
```
## Deployment Steps
### For Production Deployment:
1. **Update Kong configuration** by deploying the modified `supabase/kong.yml`
- Kong will automatically reload the config and start proxying `/webhook/*` requests
2. **Set environment variables** (in your `.env` file):
```bash
# Optional: Override n8n webhook domain (defaults to localhost)
WEBHOOK_DOMAIN=https://your-domain.com
```
If not set, n8n will use the default `http://localhost:55590/` (only works internally)
3. **Deploy the updated code**:
- `frontend/config.js` with the new webhook URL
- `frontend/admin.js` with the updated sendOrderEmailDirect function
- `docker-compose.yml` with Kong n8n dependency
- `supabase/kong.yml` with the new n8n service
4. **Restart the stack**:
```bash
docker-compose up -d
```
### For Local Development:
No special configuration needed:
- Kong is already on port 55521
- Browser requests to `/webhook/manual-email-send` will be proxied to internal n8n
- Works the same as production (same-origin requests)
## How It Works
1. **Browser action**: User clicks "Email senden" button in order dialog
2. **Browser request**: JavaScript POSTs to `/webhook/manual-email-send` (same origin)
3. **Kong routing**: Kong receives request, forwards to `http://n8n:5678/webhook/manual-email-send`
4. **n8n webhook**: n8n webhook listener triggers the manual-email-send workflow
5. **Workflow execution**: n8n fetches order data, builds email, sends via SMTP
6. **Response**: Workflow returns success/error response to browser
## Security
- **Network isolation**: n8n remains internal, not exposed to internet
- **No authentication required**: Webhook path is open (can be restricted later if needed)
- **CORS enabled**: Allows browser requests to Kong
- **Kong isolation**: Kong is the only service exposed; internal services hidden behind it
## Troubleshooting
### "Failed to fetch" error in browser
1. Check Kong is routing properly:
```bash
# Test from inside docker network
docker-compose exec kong curl -v http://n8n:5678/webhook/manual-email-send
```
2. Verify Kong config loaded:
```bash
docker-compose logs kong | grep "n8n-webhooks"
```
3. Check n8n is running:
```bash
docker-compose logs n8n
```
### n8n workflow not triggering
1. Verify webhook path in n8n workflow (should be exactly `/webhook/manual-email-send`)
2. Check n8n logs for webhook errors:
```bash
docker-compose logs n8n | grep webhook
```
## References
- Kong configuration format: https://docs.konghq.com/deck/latest/
- n8n webhooks: https://docs.n8n.io/nodes/n8n-nodes-base.Webhook/
- Docker networking: https://docs.docker.com/engine/reference/commandline/network_connect/
+88 -17
View File
@@ -16,15 +16,52 @@ Self-hosted Supabase stack + bilingual (DE/EN) public website + lead-management
| `post-init` | `postgres:15-alpine` | Idempotent bootstrap: seed admin + migrations |
| `kong` | `kong:2.8.1` | Single API gateway at `:55521` |
| `studio` | `supabase/studio` | Supabase dashboard (`:55530`) |
| `web` | `nginx:1.27-alpine` | Public site + admin panel (`:55580`) |
| `web` | `nginx:1.27-alpine` | Public website (`:55580`) |
| `web-admin` | `nginx:1.27-alpine` | Admin web entrypoint (`:55581`) |
| `n8n` | `n8nio/n8n:latest` | Automation UI/API (`:55590`) |
| `gotenberg` | `gotenberg/gotenberg:8` | DOCX/PDF conversion (internal only) |
## Requirements
- Docker Engine with Compose v2 (or Portainer with Stacks)
- Free ports: `55521`, `55530`, `55532`, `55543`, `55580`
- Free ports: `55521`, `55530`, `55532`, `55543`, `55580`, `55581`, `55590`
## Run
### Local Dev (Windows/macOS/Linux)
Use the local override so bind mounts point to this repository (for example `./data/db`, `./data/storage`, `./data/n8n`).
Start local stack:
```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build
```
Stop local stack:
```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml down
```
Delete local mounts and recreate from scratch:
```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml down -v --remove-orphans
rm -rf ./data/db ./data/storage ./data/n8n
mkdir -p ./data/db ./data/storage ./data/n8n
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build
```
PowerShell equivalent for cleanup:
```powershell
docker compose -f docker-compose.yml -f docker-compose.local.yml down -v --remove-orphans
Remove-Item .\data\db,.\data\storage,.\data\n8n -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Path .\data\db,.\data\storage,.\data\n8n -Force | Out-Null
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build
```
### Via Portainer (recommended)
1. Clone the repo onto the host: `git clone <repo> /mnt/user/appdata/mc-cars`
@@ -41,7 +78,7 @@ cd /mnt/user/appdata/mc-cars
docker compose up -d
```
First boot pulls ~1.5 GB of images and runs migrations (`01-init.sql`, `post-boot.sql`, `02-leads.sql`). Give it 3060 s to settle.
First boot pulls ~1.5 GB of images and runs migrations (`01-init.sql`, `post-boot.sql`, `02-leads.sql`, `08-backend-pricing-and-security.sql`, `09-site-settings.sql`). Give it 3060 s to settle.
### Stop / reset
@@ -55,9 +92,11 @@ rm -rf /mnt/user/appdata/mc-cars/data/db # FULL DB wipe (re-runs fir
| Purpose | URL |
| ------------------------------- | --------------------------------- |
| Public website | http://\<host\>:55580 |
| Admin panel | http://\<host\>:55580/admin.html |
| Admin web (dedicated nginx) | http://\<host\>:55581 |
| Admin page | http://\<host\>:55581/admin.html |
| Supabase Studio | http://\<host\>:55530 |
| API gateway (Kong) | http://\<host\>:55521 |
| n8n | http://\<host\>:55590 |
| Postgres | `<host>:55532` |
> Admin access is deliberately **not** linked from the public site. Bookmark it.
@@ -74,29 +113,59 @@ The admin is seeded with `must_change_password = true` in `raw_user_meta_data`.
## Data model
- `public.vehicles` — fleet, public-readable where `is_active`.
- `public.leads` — booking form submissions. `anon` may `INSERT` only; `authenticated` has full CRUD. Status: `new | qualified | disqualified`.
- `public.leads` — booking form submissions with server-computed pricing. `anon` may `INSERT` only (via `create_lead` RPC); `authenticated` has full CRUD. Status: `new | qualified | disqualified`.
- `public.lead_attachments` — ID documents and income proofs per lead. Max 1 of each enforced by unique partial index.
- `public.customers` — created **only** by qualifying a lead. Hard FK `lead_id` preserves the audit link to the originating lead.
- RPCs: `qualify_lead(uuid, text)`, `disqualify_lead(uuid, text)`, `reopen_lead(uuid)` — transactional, `SECURITY INVOKER`, `authenticated` only.
- `public.sales_orders` — rental orders created during qualification, contain pricing snapshot.
- `public.site_settings` — key-value settings table (e.g. `hero_image_url`). Publicly readable, admin-writable.
- RPCs: `calculate_price(uuid, date, date)` (public pricing), `create_lead(...)` (server-side submission), `qualify_lead(uuid, text)`, `disqualify_lead(uuid, text)`, `reopen_lead(uuid)` — transactional, `SECURITY INVOKER`, `authenticated` only (except calculate_price and create_lead which are anon-accessible).
- Realtime: `supabase_realtime` publication broadcasts inserts/updates on leads, customers, vehicles.
## Environment: two variables per deployment
## Environment: three variables per deployment
Only two lines in `.env` need changing between environments:
Three variables in `.env` need changing between environments:
| Variable | Local dev | Production |
|---|---|---|
| `SITE_URL` | `http://localhost:55580` | `https://your.domain.com` |
| `SUPABASE_PUBLIC_URL` | `http://localhost:55521` | `https://your.domain.com` |
| `N8N_WEBHOOK_URL` | `http://localhost:55521/webhook/manual-email-send` | `https://your.domain.com/webhook/manual-email-send` |
All other GoTrue URLs (`API_EXTERNAL_URL`, `GOTRUE_SITE_URL`, `GOTRUE_URI_ALLOW_LIST`) are derived automatically in `docker-compose.yml`.
On the NAS:
### Quick setup with deploy-setup.sh
Use the included deployment script to update all environment variables at once:
```bash
sed -i 's|SITE_URL=.*|SITE_URL=https://your.domain.com|' .env
sed -i 's|SUPABASE_PUBLIC_URL=.*|SUPABASE_PUBLIC_URL=https://your.domain.com|' .env
docker compose up -d --force-recreate web
./deploy-setup.sh https://www.mc-cars.at
```
This updates `.env` and outputs the configuration. Then restart:
```bash
docker compose down
docker compose up -d --build
```
### Manual setup (legacy sed method)
```bash
sed -i 's|SITE_URL=.*|SITE_URL=https://www.mc-cars.at|' .env
sed -i 's|SUPABASE_PUBLIC_URL=.*|SUPABASE_PUBLIC_URL=https://www.mc-cars.at|' .env
sed -i 's|N8N_WEBHOOK_URL=.*|N8N_WEBHOOK_URL=https://www.mc-cars.at/webhook/manual-email-send|' .env
docker compose up -d --build
```
### How n8n webhooks work
- n8n runs internally (not exposed to the internet)
- Kong API gateway proxies `/webhook/*` traffic to internal n8n
- Browser requests to `https://your.domain.com/webhook/manual-email-send` route through Kong → n8n
- Frontend config is generated at container startup from `N8N_WEBHOOK_URL` environment variable
See [N8N_WEBHOOK_ROUTING.md](N8N_WEBHOOK_ROUTING.md) for full architecture details.
## Deployment & portability
Runtime state under `/mnt/user/appdata/mc-cars/data/`:
@@ -166,16 +235,18 @@ MC Cars/
│ ├── 00-run-init.sh # creates supabase service roles
│ ├── 01-init.sql # vehicles + bucket + seed cars
│ ├── post-boot.sql # admin user (must_change_password) + bucket row
── 02-leads.sql # leads, customers, RPCs, realtime publication
── 02-leads.sql # leads, customers, RPCs, realtime publication
│ ├── 08-backend-pricing-and-security.sql # calculate_price RPC, refactored create_lead, document security
│ └── 09-site-settings.sql # site_settings table + hero_image_url seed
├── frontend/
│ ├── nginx.conf
│ ├── index.html # public DE/EN site, booking form -> leads
│ ├── admin.html # auth-gated CRM
│ ├── app.js
│ ├── admin.js # realtime + qualify/disqualify + password change
│ ├── admin.html # auth-gated CRM + settings panel
│ ├── app.js # dynamic hero image, server-side pricing sidebar
│ ├── admin.js # realtime + qualify/disqualify + password change + settings
│ ├── config.js # generated at container start (git-ignored)
│ ├── i18n.js
│ ├── styles.css
│ ├── styles.css # CSS-variable hero image with fallback
│ ├── impressum.html
│ └── datenschutz.html
├── .gitattributes # enforces LF on .sh files
+471
View File
@@ -0,0 +1,471 @@
# MC Cars SEO & Positioning Guide
**For demo.lago.dev Domain**
---
## 1. Overview
MC Cars is a premium sports car rental service in Styria (Steiermark), Austria. The SEO strategy focuses on:
- **Geographic Targeting**: Steiermark/Austria region with German market focus
- **Keyword Focus**: Sports car rentals, luxury car rentals, premium vehicles
- **Target Audience**: High-net-worth individuals looking for premium driving experiences
- **Languages**: German (DE) primary, English (EN) secondary
---
## 2. Technical SEO Implementation
### 2.1 Implemented Features
**Canonical Tags**
- Each page has a canonical tag pointing to `https://demo.lago.dev/[page]`
- Prevents duplicate content issues
**hreflang Tags**
- Bilingual support with proper hreflang declarations
- German (de) and English (en) language variants
- x-default fallback to German homepage
**Meta Tags**
- **Title Tags**: 50-60 characters, includes brand name and location
- **Meta Descriptions**: 155-160 characters, compelling and action-oriented
- **Keywords**: Relevant German keywords for sports car rental
- **Robots**: Proper directives (index/follow for public pages, noindex for admin)
- **Language**: `lang="de"` attribute on HTML element
- **Theme Color**: Brand color for mobile browsers
**Open Graph (OG) Tags**
- `og:type`: website/article as appropriate
- `og:title`, `og:description`, `og:url`, `og:image`
- `og:locale`: de_AT for Austrian German
- Enables rich sharing on Facebook, LinkedIn, etc.
**Twitter Card Tags**
- `twitter:card`: summary_large_image
- Enables rich previews on Twitter/X
- Uses same images as OG tags
**JSON-LD Structured Data**
- LocalBusiness schema for MC Cars
- Organization schema for company info
- BreadcrumbList for each page
- Service area (Steiermark, Austria)
- ContactPoint information
**Robots.txt**
- Location: `/robots.txt`
- Allows public pages, disallows admin panel
- Blocks known bad bots (Ahrefs, Semrush, etc.)
- Sitemap declaration
**XML Sitemap**
- Location: `/sitemap.xml`
- All public pages listed with priorities
- Change frequency and last modified dates
- hreflang annotations for language variants
- Homepage priority: 1.0 (highest)
- Legal pages: 0.6-0.7
### 2.2 Performance Optimizations
**Gzip Compression**
- Enabled for: text/css, text/javascript, application/json
- Minimum 1KB threshold
- Compression level 5 (balanced speed/ratio)
**Caching Strategy**
- **HTML Pages**: No-store (always fresh)
- **config.js**: No-store (runtime configuration)
- **Images/Fonts**: 7 days cache
- **CSS/JS**: No-cache (browser validates)
- **Robots.txt/Sitemap**: 1 week cache
**Security Headers**
- X-Frame-Options: SAMEORIGIN (clickjacking protection)
- X-Content-Type-Options: nosniff (MIME type sniffing)
- X-XSS-Protection: 1; mode=block (XSS protection)
- Referrer-Policy: strict-origin-when-cross-origin
- Content-Security-Policy: Balanced for dynamic content
- Permissions-Policy: Restrict unnecessary APIs
**HTTP Keep-Alive**
- Enabled for persistent connections
- Improves performance for multiple requests
---
## 3. On-Page SEO Best Practices
### 3.1 Current Implementation
**Title Tags**
- Homepage: "MC Cars · Sportwagenvermietung Steiermark" (54 chars)
- Legal pages: Descriptive with brand name
**Meta Descriptions**
- All pages have unique descriptions
- Include primary keywords naturally
- Action-oriented language ("Premium", "Transparent", "Immediate")
**Heading Hierarchy**
- H1: Main page title
- H2: Section headings (Fleet, Why Us, Reviews, Booking)
- Proper semantic structure
**Content Structure**
- Clear section organization
- Call-to-action (CTA) buttons prominent
- User engagement elements (filters, reviews)
**Accessibility (ARIA)**
- `aria-label` attributes on buttons and links
- `aria-live` regions for dynamic content
- Semantic nav elements
### 3.2 Recommendations for Content Improvement
📌 **Add ALT Text to Images**
- Vehicle images: "[Brand] [Model] [Year] Sports Car"
- Logo: "MC Cars logo"
- Screenshots: Descriptive purpose
📌 **Optimize Image Files**
- Use WebP format with JPEG fallback
- Compress images to <100KB each
- Use responsive images (srcset)
📌 **Create More Landing Pages**
- Per-vehicle-model pages (Porsche, Ferrari, Lamborghini, etc.)
- Per-region pages if expanding (Graz, Salzburg, Wien)
- Guide pages ("How to book", "Insurance explained", etc.)
📌 **Add FAQ Schema**
- Common questions about rentals
- Booking process
- Insurance and deposits
- Helps with Rich Snippets in SERPs
---
## 4. Keyword Strategy
### 4.1 Target Keywords (German)
| Keyword | Search Vol | Competition | Focus |
|---------|-----------|------------|-------|
| Sportwagenvermietung Steiermark | Medium | Low | Primary |
| Luxusauto mieten Graz | Medium | Low | Primary |
| Porsche mieten Österreich | High | Medium | Secondary |
| Ferrari Vermietung | Low | High | Tertiary |
| Sportwagenverleih | High | High | Secondary |
| Kaution Autovermietung | Medium | Medium | Secondary |
| Weekend Sportwagen | Low | Low | Tertiary |
| Premium Fahrzeug Verleih | Medium | Low | Primary |
### 4.2 Keyword Placement
- **Title Tags**: Include primary keyword
- **Meta Descriptions**: Natural inclusion (1-2x)
- **H1/H2**: Primary keyword in main heading
- **First 100 words**: Include target keyword naturally
- **Body Content**: 1-2% keyword density (natural)
- **Internal Links**: Keyword-rich anchor text
---
## 5. Link Building Strategy
### 5.1 Internal Linking
**Current Structure**
- Navigation links to all main sections
- Footer links to legal pages
- Home link in header
📌 **Recommendations**
- Add contextual links between related content
- Create "Related Articles" section if blog added
- Link from legal pages back to homepage
### 5.2 External Linking (Backlinks)
📌 **High-Value Link Opportunities**
- Local Steiermark business directories
- Austrian tourism websites
- Premium car enthusiast forums
- Regional automotive publications
- Local event sponsorships (car shows, races)
- University alumni networks (target demographic)
📌 **Link Building Tactics**
- Guest posts on automotive blogs
- Local chamber of commerce listing
- Sponsorship of local events
- PR mentions in local media
- Partnerships with luxury brands
---
## 6. Technical Configuration for demo.lago.dev
### 6.1 DNS Configuration
```
demo.lago.dev A record → [server IP]
demo.lago.dev AAAA record → [IPv6 if available]
```
### 6.2 SSL/TLS
✅ HTTPS enabled (required by Google)
- Ensure valid SSL certificate for demo.lago.dev
- Auto-redirect HTTP → HTTPS
### 6.3 Server Configuration
✅ Nginx optimizations applied:
- Gzip compression enabled
- Security headers configured
- Proper cache directives
- robots.txt served at root
- sitemap.xml served at root
### 6.4 Google Search Console Setup
📌 **Required Steps**
1. Add property: https://demo.lago.dev
2. Verify ownership (DNS/HTML tag/GSC file)
3. Submit sitemap.xml
4. Monitor coverage, clicks, impressions
5. Check Core Web Vitals
6. Review security issues
### 6.5 Bing Webmaster Tools
📌 **Setup**
1. Add property
2. Verify ownership
3. Submit sitemap.xml
4. Monitor crawl stats
---
## 7. Content Strategy for Growth
### 7.1 Blog/Resources (Future)
📌 **Content Ideas**
- "Guide to Renting a Sports Car in Austria"
- "Porsche 911 vs Ferrari F8 Tributo: Comparison"
- "Insurance Explained: Full Coverage for Luxury Rentals"
- "Top 5 Scenic Drives in Steiermark"
- "How to Prepare for Your Sports Car Experience"
- "Deposit Types Explained: Cash vs PayPal"
### 7.2 Video Content
📌 **YouTube Strategy**
- Vehicle showcase videos (4K, cinematic)
- Customer testimonials
- "How to Book" tutorial
- Road trip videos from Steiermark
- Racing track experience highlights
### 7.3 Social Media Signals
📌 **Platforms to Optimize**
- Instagram: Vehicle photos, customer experiences
- Facebook: Local community engagement
- LinkedIn: B2B partnerships, corporate rentals
- TikTok: Trendy content for younger audience (short clips)
---
## 8. Local SEO Optimization
### 8.1 Local Business Schema
**Implemented**
- LocalBusiness with service area (Steiermark)
- Geo coordinates included
- Service area bounding box
### 8.2 Google My Business
📌 **Setup Recommendations**
- Create GMB profile for MC Cars GmbH
- Add address (if available for demo)
- Add phone and email
- Add business photos
- Respond to reviews quickly
- Post regular updates
### 8.3 Local Directories
📌 **List Presence**
- Austrian business registries
- Steiermark tourism boards
- Local automotive directories
- Premium rental marketplaces
---
## 9. Mobile SEO
### 9.1 Current Implementation
✅ Responsive design with viewport meta tag
✅ Touch-friendly buttons and navigation
✅ Mobile-optimized forms
### 9.2 Mobile Best Practices
📌 **Core Web Vitals Targets**
- Largest Contentful Paint (LCP): < 2.5s
- First Input Delay (FID): < 100ms
- Cumulative Layout Shift (CLS): < 0.1
📌 **Mobile Optimization**
- Test with Google PageSpeed Insights
- Optimize image loading
- Minimize CSS/JS blocking
- Use lazy loading for images below fold
---
## 10. Monitoring & Analytics
### 10.1 Tools Setup
📌 **Essential Tools**
- Google Analytics 4 (GA4)
- Google Search Console (GSC)
- Bing Webmaster Tools
- Lighthouse (Chrome DevTools)
### 10.2 KPIs to Track
| Metric | Target | Frequency |
|--------|--------|-----------|
| Organic traffic | +50% quarterly | Weekly |
| Keyword rankings | Top 5 for primary KWs | Bi-weekly |
| Click-through rate (CTR) | 3-5% | Weekly |
| Average session duration | >2 minutes | Weekly |
| Conversion rate | 2-5% | Daily |
| Bounce rate | <40% | Weekly |
| Core Web Vitals | All "Good" | Bi-weekly |
### 10.3 Monthly Review Checklist
- [ ] Review GSC - new keywords, impressions, CTR
- [ ] Check rankings for target keywords
- [ ] Analyze traffic sources and user behavior
- [ ] Review bounce rate by page
- [ ] Check for crawl errors or coverage issues
- [ ] Update sitemap if new pages added
- [ ] Monitor backlinks (free tools: Ahrefs free, Moz free)
- [ ] Test mobile performance (PageSpeed Insights)
---
## 11. Quick Implementation Checklist
### ✅ Completed
- [x] Meta tags (title, description, robots)
- [x] Open Graph tags
- [x] Twitter Card tags
- [x] hreflang tags for bilingual
- [x] JSON-LD structured data
- [x] robots.txt with sitemap reference
- [x] sitemap.xml
- [x] Nginx security headers
- [x] Gzip compression
- [x] Proper cache directives
### 📌 Next Steps (Priority Order)
1. **Immediate**
- [ ] Submit sitemap to Google Search Console
- [ ] Add domain to GSC
- [ ] Set up Google Analytics 4
- [ ] Verify SSL certificate is valid
2. **This Week**
- [ ] Create Google My Business profile
- [ ] Verify in Bing Webmaster Tools
- [ ] Test mobile experience with Google PageSpeed Insights
- [ ] Fix any Core Web Vitals issues
3. **This Month**
- [ ] Add ALT text to all images
- [ ] Create FAQ page with structured data
- [ ] Build 3-5 blog posts targeting long-tail keywords
- [ ] Set up Google Ads (optional for quick wins)
4. **This Quarter**
- [ ] Guest post on 3-5 relevant sites
- [ ] Get listed in 10+ Austrian business directories
- [ ] Create YouTube channel with 5+ videos
- [ ] Analyze backlink profile, identify opportunities
---
## 12. Advanced SEO Tactics
### 12.1 Schema Markup Enhancements
📌 **Future Additions**
- Product schema for each vehicle
- Review schema for customer testimonials
- AggregateRating schema
- Event schema for special promotions
- Offer schema for rental pricing
### 12.2 International SEO (English Version)
📌 **For /en/ Pages**
- Duplicate all pages with English translations
- Separate hreflang annotations
- English-language keywords
- English meta descriptions
### 12.3 Rich Snippets Optimization
📌 **Eligible Snippets**
- FAQ results (with FAQ schema)
- Review/Rating rich snippets
- Product rich snippets
- Local business rich snippets
---
## 13. Troubleshooting Guide
### Issue: Pages not indexed
**Solution**: Check GSC for manual actions, verify robots.txt not blocking, submit URL directly in GSC
### Issue: Low click-through rate
**Solution**: Improve title/meta description, add rich snippets, improve query matching
### Issue: High bounce rate
**Solution**: Improve page load speed, better content-query match, improve UX/CTA placement
### Issue: Slow rankings
**Solution**: Build quality backlinks, improve content depth, increase content freshness
---
## 14. References & Resources
- [Google Search Central](https://developers.google.com/search)
- [Google E-E-A-T Guidelines](https://developers.google.com/search/docs/appearance/eeat)
- [Schema.org Documentation](https://schema.org)
- [Web Vitals Guide](https://web.dev/vitals/)
- [SEMrush Keyword Tool](https://www.semrush.com/)
- [German SEO Community](https://www.seo-united.de/)
---
**Last Updated**: May 9, 2026
**Domain**: demo.lago.dev
**Status**: ✅ SEO Implementation Complete - Monitoring Phase Ready
+243
View File
@@ -0,0 +1,243 @@
# MC Cars SEO & Positioning - Implementation Summary
**Domain**: demo.lago.dev
**Completed**: May 9, 2026
**Status**: ✅ Ready for Production
---
## 🎯 Strategic Positioning
**Market Focus**: Premium sports car rental in Steiermark (Austria)
**Target Keywords**: Sportwagenvermietung, Luxusauto mieten, Premium Fahrzeugverleih
**Languages**: German (Primary), English (Secondary)
**Target Audience**: High-net-worth individuals (25-65 years old)
---
## 📋 What Was Implemented
### 1. Enhanced HTML Meta Tags ✅
All pages updated with:
- **Canonical tags** - Prevent duplicate content issues
- **Open Graph tags** - Rich previews on Facebook, LinkedIn, WhatsApp
- **Twitter Card tags** - Rich previews on Twitter/X
- **hreflang tags** - Proper bilingual language declaration
- **JSON-LD structured data**:
- LocalBusiness (with Steiermark service area)
- Organization schema
- BreadcrumbList for navigation
**Pages Updated**:
- index.html (Homepage) - **Priority 1.0**
- agb.html (Terms)
- datenschutz.html (Privacy)
- impressum.html (Imprint)
- mietbedingungen.html (Rental Terms)
- admin.html (noindex applied - won't be indexed)
### 2. Critical SEO Files Created ✅
**robots.txt**
- Path: `/robots.txt`
- Allows all public content
- Blocks admin panel and scrapers
- Includes sitemap reference
- Specific rules for Google, Bing
**sitemap.xml**
- Path: `/sitemap.xml`
- All public pages listed
- Priority values set (1.0 for homepage, 0.6-0.7 for others)
- Change frequency indicated
- hreflang annotations for language variants
### 3. Web Server Optimization ✅
**Nginx Configuration Enhanced** with:
**Performance**:
- ✅ Gzip compression (5x-10x smaller files)
- ✅ Browser caching (7 days for images/fonts)
- ✅ HTTP Keep-Alive enabled
- ✅ Proper cache headers
**Security Headers**:
- ✅ X-Frame-Options: SAMEORIGIN (clickjacking protection)
- ✅ X-Content-Type-Options: nosniff (MIME sniffing prevention)
- ✅ Content-Security-Policy (XSS protection)
- ✅ Referrer-Policy (privacy-preserving)
- ✅ Permissions-Policy (restrict unnecessary APIs)
**Caching Strategy**:
- HTML/config.js: No-store (always fresh)
- Images/Fonts: 7 days
- CSS/JS: No-cache (validate)
- robots.txt/sitemap: 1 week
### 4. Keyword Optimization ✅
**Primary Keywords**:
- Sportwagenvermietung Steiermark (main search term)
- Luxusauto mieten (high intent)
- Premium Fahrzeugverleih (brand differentiator)
**Secondary Keywords**:
- Porsche mieten Österreich
- Sportwagenverleih Graz
- Kaution Autovermietung transparent
Keywords integrated naturally in:
- Title tags
- Meta descriptions
- H1/H2 headings
- First 100 words of content
### 5. Technical SEO Infrastructure ✅
| Feature | Status | Impact |
|---------|--------|--------|
| Canonical URLs | ✅ | Duplicate content prevention |
| hreflang Tags | ✅ | Bilingual SEO |
| XML Sitemap | ✅ | Faster indexing |
| robots.txt | ✅ | Crawl efficiency |
| Structured Data | ✅ | Rich snippets potential |
| HTTPS | ✅ | Ranking boost + security |
| Mobile Responsive | ✅ | Mobile-first indexing |
| Gzip Compression | ✅ | Faster load times |
| Security Headers | ✅ | User trust + compliance |
---
## 📊 SEO Benefits by Implementation
### Immediate (1-4 weeks)
1. ✅ Faster site indexing via sitemap submission
2. ✅ Cleaner crawl with robots.txt
3. ✅ Reduced server bandwidth (gzip compression)
4. ✅ Improved security posture
5. ✅ Better social media sharing
### Short-term (1-3 months)
1. ✅ Indexed pages appear in Google search results
2. ✅ Rich snippets begin showing in SERPs
3. ✅ Improved click-through rates from better titles/descriptions
4. ✅ Better mobile experience rankings
5. ✅ Faster page load = ranking boost
### Long-term (3-12 months)
1. ✅ Established domain authority
2. ✅ Top 3-5 rankings for primary keywords (with backlinks)
3. ✅ Increased organic traffic (30-50% growth potential)
4. ✅ Better conversion rate from qualified traffic
5. ✅ Local market dominance
---
## 🚀 Next Steps (Priority Order)
### Week 1 - Critical
- [ ] Submit sitemap to Google Search Console
- [ ] Add property to GSC (demo.lago.dev)
- [ ] Verify domain ownership
- [ ] Set up Google Analytics 4 (GA4)
- [ ] Check HTTPS/SSL certificate validity
### Week 2-4 - Important
- [ ] Submit sitemap to Bing Webmaster Tools
- [ ] Create Google My Business profile
- [ ] Run PageSpeed Insights test
- [ ] Fix any Core Web Vitals issues
- [ ] Add ALT text to images
### Month 2 - Strategic
- [ ] Build 3-5 blog posts (long-tail keywords)
- [ ] Create FAQ page with schema
- [ ] Submit to 5+ business directories
- [ ] Reach out for guest post opportunities
- [ ] Create YouTube channel (vehicle videos)
### Month 3+ - Growth
- [ ] Build high-quality backlinks
- [ ] Guest posts on automotive blogs
- [ ] Local sponsorships and PR
- [ ] Monitor rankings and adjust strategy
- [ ] Consider Google Ads for quick wins
---
## 📁 Files Modified/Created
### Created:
- `frontend/robots.txt` - Search engine crawl directives
- `frontend/sitemap.xml` - Complete site structure
- `SEO-GUIDE.md` - Comprehensive SEO documentation
### Modified:
- `frontend/index.html` - Enhanced with 20+ meta tags + JSON-LD
- `frontend/agb.html` - Added SEO meta tags
- `frontend/datenschutz.html` - Added SEO meta tags
- `frontend/impressum.html` - Added SEO meta tags
- `frontend/mietbedingungen.html` - Added SEO meta tags
- `frontend/admin.html` - Added noindex directive
- `frontend/nginx.conf` - Security headers, gzip, cache config
---
## 🔍 Verification Checklist
Before going live, verify:
- [ ] **robots.txt**: Accessible at demo.lago.dev/robots.txt
- [ ] **sitemap.xml**: Valid XML at demo.lago.dev/sitemap.xml
- [ ] **HTTP Headers**: Check with curl/browser dev tools
```bash
curl -I https://demo.lago.dev/
# Should show Cache-Control, Security headers
```
- [ ] **Mobile Test**: Test on actual mobile devices
- [ ] **Title/Meta**: Check each page has unique title and description
- [ ] **Canonical Tags**: Verify canonical URLs are correct
- [ ] **SSL**: Ensure HTTPS works and redirects HTTP
---
## 💡 Key Positioning Messages
1. **Premium Quality**: "Handverlesene Premium-Sportwagen"
2. **Transparency**: "Faire Kaution, transparent, sofort startklar"
3. **Accessibility**: "24/7 Support, Vollkasko, kein Überziehen"
4. **Local Expertise**: "Die beste Sportwagenvermietung in der Steiermark"
These messages should be reinforced across:
- Homepage hero section
- Social media posts
- Blog content
- Google My Business profile
- Local directory listings
---
## 📞 Support & Maintenance
For ongoing SEO success:
1. **Weekly**: Monitor GSC for issues, check rankings
2. **Monthly**: Analyze GA4 data, review traffic sources
3. **Quarterly**: Audit technical SEO, update content
4. **Annually**: Comprehensive SEO audit, strategy review
---
## 📚 Resources for Team
- **SEO Guide**: See [SEO-GUIDE.md](./SEO-GUIDE.md) in this repository
- **Google Search Central**: https://developers.google.com/search
- **Google Analytics Academy**: https://analytics.google.com/analytics/academy/
- **Schema.org**: https://schema.org/LocalBusiness
---
**Implementation completed successfully!**
**Status**: ✅ Ready to submit to search engines
**Estimated Traffic Growth**: 30-50% in first 6 months (with backlinks)
+107
View File
@@ -0,0 +1,107 @@
# MC Cars SEO - Quick Reference Card
## 🎯 Domain
**demo.lago.dev**
## 📊 Key Metrics to Track
- Organic traffic growth
- Keyword rankings (target: top 5)
- Click-through rate (target: 3-5%)
- Core Web Vitals (all "Good")
## 🔧 Technical Checklist
### ✅ Implemented
```
✓ Canonical tags on all pages
✓ Open Graph tags (Facebook sharing)
✓ Twitter Card tags (Twitter sharing)
✓ hreflang bilingual tags (de/en)
✓ JSON-LD structured data (LocalBusiness, Organization, BreadcrumbList)
✓ robots.txt with sitemap reference
✓ sitemap.xml (all public pages)
✓ Gzip compression enabled
✓ Security headers configured
✓ Proper cache directives
```
## 📁 Key Files
| File | Purpose | Path |
|------|---------|------|
| robots.txt | Search engine crawl rules | `/frontend/robots.txt` |
| sitemap.xml | Site structure for search engines | `/frontend/sitemap.xml` |
| SEO-GUIDE.md | Comprehensive SEO documentation | `/SEO-GUIDE.md` |
| nginx.conf | Web server optimization | `/frontend/nginx.conf` |
## 🎯 Target Keywords
**Primary**:
- Sportwagenvermietung Steiermark
- Luxusauto mieten
- Premium Fahrzeugverleih
**Secondary**:
- Porsche mieten Österreich
- Sportwagenverleih Graz
- Kaution Autovermietung
## 📋 First Week To-Do
1. [ ] Submit sitemap to Google Search Console
2. [ ] Add demo.lago.dev to GSC
3. [ ] Set up Google Analytics 4
4. [ ] Verify SSL certificate
5. [ ] Test mobile experience
## 📈 Expected Growth (6 months)
| Metric | Current | Target |
|--------|---------|--------|
| Indexed Pages | 6 | 20+ |
| Ranked Keywords | 0 | 10+ |
| Organic Traffic | 0 | 200-500 visitors/month |
| Conversion Rate | - | 2-5% |
## 🔗 Important URLs
```
Homepage: https://demo.lago.dev/
Robots file: https://demo.lago.dev/robots.txt
Sitemap: https://demo.lago.dev/sitemap.xml
Admin panel: https://demo.lago.dev/admin.html (noindex)
Privacy policy: https://demo.lago.dev/datenschutz.html
Terms: https://demo.lago.dev/agb.html
Imprint: https://demo.lago.dev/impressum.html
Rental terms: https://demo.lago.dev/mietbedingungen.html
```
## 🛠️ Configuration Changes
### Nginx Performance
- Gzip: Enabled (5-10x compression)
- Cache: Images 7 days, CSS/JS no-cache
- Headers: Security headers + performance headers
### Search Crawlers Blocked
- Ahrefs Bot
- Semrush Bot
- Low-quality scrapers
## 💡 Quick Tips
1. **Update Content Regularly**: Fresh content = better rankings
2. **Mobile First**: 60%+ traffic will be mobile
3. **Link Building**: Quality > Quantity (focus on 5-10 high-authority links)
4. **User Experience**: Page speed impacts ranking (use PageSpeed Insights)
5. **Social Signals**: Share on Instagram, Facebook for visibility boost
## 📞 Support
- **Technical Issues**: Check nginx.conf, server logs
- **Ranking Issues**: Review keyword relevance, backlinks
- **Indexing Issues**: Check GSC for manual actions, check robots.txt
---
**Ready for submission to search engines!**
-1
View File
@@ -1 +0,0 @@
# Bind-mounted service data lives here (db, storage, n8n). Keep tree, ignore contents.
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._header_yy3nz_125{margin-bottom:var(--spacing--xs)}._content_yy3nz_129{flex-direction:column;display:flex}._selectionContent_yy3nz_134{gap:var(--spacing--md);flex-direction:column;display:flex}._radioGroup_yy3nz_140{gap:var(--spacing--xs);flex-direction:column;display:flex}._radioGroup_yy3nz_140 .el-radio{height:auto;margin-right:0}._radioGroup_yy3nz_140 .el-radio__input.is-checked .el-radio__inner{background-color:var(--color--primary);border-color:var(--color--primary)}._radioGroup_yy3nz_140 .el-radio__inner{width:16px;height:16px}._radioGroup_yy3nz_140 .el-radio__input:hover .el-radio__inner{border-color:var(--color--foreground)}._radioGroup_yy3nz_140 .el-radio__input.is-checked:hover .el-radio__inner{border-color:var(--color--primary)}._radioGroup_yy3nz_140 .el-radio__label{font-size:var(--font-size--sm);padding-left:var(--spacing--xs);color:var(--color--text)!important}._radioGroup_yy3nz_140 .el-radio.is-checked .el-radio__label{color:var(--color--text)!important}._uploadSection_yy3nz_172{gap:var(--spacing--sm);flex-direction:column;display:flex}._uploadingMessage_yy3nz_178{padding:var(--spacing--lg);text-align:center;color:var(--color--text--tint-1)}._importContent_yy3nz_184{gap:var(--spacing--md);flex-direction:column;display:flex}._successNotice_yy3nz_190{padding:var(--spacing--sm) var(--spacing--md);background-color:var(--color--success--tint-4);border-radius:var(--radius);color:var(--color--success--shade-1);font-size:var(--font-size--sm);line-height:var(--line-height--lg)}._columnHeaders_yy3nz_199{grid-template-columns:var(--spacing--sm) 1fr 1fr;gap:var(--spacing--md);padding:0 var(--spacing--2xs);align-items:baseline;display:grid}._columnHeaderLabel_yy3nz_207{font-size:var(--font-size--sm);font-weight:var(--font-weight--regular);color:var(--color--text--tint-1)}._columnsContainer_yy3nz_213{gap:var(--spacing--md);max-height:400px;padding:var(--spacing--2xs);flex-direction:column;display:flex;overflow-y:auto}._columnItem_yy3nz_222{grid-template-columns:var(--spacing--sm) 1fr 1fr;gap:var(--spacing--md);align-items:start;display:grid}._columnCheckboxWrapper_yy3nz_229{height:var(--spacing--xl);justify-content:center;align-items:center;display:flex}._columnInputWrapper_yy3nz_236{gap:var(--spacing--4xs);flex-direction:column;display:flex}._columnTypeWrapper_yy3nz_242{align-items:center;display:flex}._columnTypeWrapper_yy3nz_242 .column-type-excluded.n8n-select{--el-disabled-bg-color:var(--color--background--light-3);--input--color--background--disabled:var(--color--background--light-3);pointer-events:none;cursor:not-allowed;opacity:.6}._inputError_yy3nz_255{border-color:var(--color--danger)!important}._inputError_yy3nz_255:focus{box-shadow:0 0 0 2px var(--color--danger--tint-3)!important}._columnErrorMessage_yy3nz_262{font-size:var(--font-size--3xs);color:var(--color--danger);line-height:var(--line-height--sm)}._footer_yy3nz_268{gap:var(--spacing--2xs);margin-top:var(--spacing--lg);justify-content:flex-end;display:flex}._fileSelectedContainer_yy3nz_275{gap:var(--spacing--lg);padding:var(--spacing--lg) 0;flex-direction:column;display:flex}._uploadDemo_yy3nz_282{width:100%}._uploadDemo_yy3nz_282 .el-upload{border-radius:var(--radius--lg);width:100%}._uploadDemo_yy3nz_282 .el-upload-dragger{width:100%;padding:var(--spacing--2xl) var(--spacing--lg);border:1px solid var(--color--foreground);background-color:var(--color--background-base);border-radius:var(--radius--lg);flex-direction:column;justify-content:center;align-items:center;transition:all .2s;display:flex}._uploadDemo_yy3nz_282 .el-upload-dragger:hover{background-color:var(--color--background)}._uploadDemo_yy3nz_282 input[type=file]{display:none!important}._uploadIcon_yy3nz_308{margin-bottom:var(--spacing--sm)}._fileName_yy3nz_312{font-weight:var(--font-weight--regular)}
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._container_kc4ev_125{gap:var(--spacing--2xs);flex-direction:column;display:flex}._row_kc4ev_131{align-items:center;gap:var(--spacing--xs);display:flex}._input_kc4ev_137{flex:1}.suggested-prompts-editor [data-test-id=icon-picker-popup]{margin-top:0;margin-bottom:var(--spacing--4xs);bottom:100%}._fileRow_17tdo_125{align-items:center;gap:var(--spacing--sm);padding:var(--spacing--xs) var(--spacing--sm);border-bottom:var(--border);background-color:var(--color--background--light-2);display:flex}._fileRow_17tdo_125:last-child{border-bottom:none}._fileName_17tdo_137{gap:var(--spacing--5xs);flex-direction:column;flex:1;min-width:0;display:flex}._fileName_17tdo_137 ._fileNameText_17tdo_144{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size--sm);line-height:var(--line-height--xl);overflow:hidden}._createdAt_17tdo_152{font-size:var(--font-size--2xs);color:var(--color--text--tint-1);line-height:var(--line-height--lg)}._indexedCell_17tdo_158{align-items:center;gap:var(--spacing--4xs);flex-shrink:0;display:flex}._iconWarning_17tdo_165{color:var(--color--warning)}._iconIndexing_17tdo_169{color:var(--color--text--tint-1);flex-shrink:0;animation:1s linear infinite _spin_17tdo_1}@keyframes _spin_17tdo_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._statusText_17tdo_183{gap:var(--spacing--4xs);align-items:center;display:flex}._header_c3h8p_125{justify-content:space-between;align-items:center;gap:var(--spacing--s);padding-right:var(--spacing--xl);display:flex}._deleteButton_c3h8p_133{margin-top:calc(-1 * var(--spacing--xs))}._contentWrapper_c3h8p_137{position:relative}._content_c3h8p_137{gap:var(--spacing--md);padding:var(--spacing--sm) 0;padding-right:var(--spacing--lg);max-height:60vh;margin-right:calc(-1 * var(--spacing--lg));flex-direction:column;display:flex;overflow-y:auto}._vectorStoreCallout_c3h8p_152{margin-bottom:var(--spacing--xs)}._settingsLink_c3h8p_156{color:inherit;text-decoration:underline}._isDraggingFile_c3h8p_161{border-color:var(--color--secondary)}._dropOverlay_c3h8p_165{z-index:9999;background-color:color-mix(in srgb, var(--color--background--light-2) 95%, transparent);pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._input_c3h8p_179{width:100%}._agentName_c3h8p_183{align-items:center;gap:var(--spacing--xs);display:flex}._agentNameInput_c3h8p_189{flex:1}._row_c3h8p_193{gap:var(--spacing--sm);flex-direction:row;display:flex}._modelSelector_c3h8p_199{width:fit-content}._footer_c3h8p_203{justify-content:flex-end;gap:var(--spacing--2xs);display:flex}._fileInput_c3h8p_209{display:none}._addFileButton_c3h8p_213{width:fit-content;margin-top:var(--spacing--2xs)}._fileList_c3h8p_218{border:var(--border);border-radius:var(--radius);overflow:hidden}._credentialPickerRow_c3h8p_224{align-items:center;gap:var(--spacing--2xs);display:flex}._credentialPicker_c3h8p_224{flex:1}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`eb108850-f336-406b-acf2-9335b0be799e`,e._sentryDebugIdIdentifier=`sentry-dbid-eb108850-f336-406b-acf2-9335b0be799e`)})()}catch{}import{$ as e,E as t,k as n}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{t as r}from"./_plugin-vue_export-helper-CRKuwEII.js";var i={},a={width:`14`,height:`14`,viewBox:`0 0 14 14`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`};function o(r,i){return e(),t(`svg`,a,[...i[0]||=[n(`<g data-v-5d3fc1df><path d="M7 0L7 3" stroke="currentColor" stroke-width="2" class="line one" data-v-5d3fc1df></path><path d="M11.9497 2.05031L9.82837 4.17163" stroke="currentColor" stroke-width="2" class="line two" data-v-5d3fc1df></path><path d="M14 7L11 7" stroke="currentColor" stroke-width="2" class="line three" data-v-5d3fc1df></path><path d="M11.9497 11.9497L9.82839 9.82839" stroke="currentColor" stroke-width="2" class="line four" data-v-5d3fc1df></path><path d="M7 14L7 11" stroke="currentColor" stroke-width="2" class="line five" data-v-5d3fc1df></path><path d="M0 7L3 7" stroke="currentColor" stroke-width="2" class="line seven" data-v-5d3fc1df></path><path d="M2.05031 2.05031L4.17163 4.17163" stroke="currentColor" stroke-width="2" class="line eight" data-v-5d3fc1df></path><path d="M2.05029 11.9497L4.17161 9.82839" stroke="currentColor" stroke-width="2" class="line six" data-v-5d3fc1df></path></g>`,1)]])}var s=r(i,[[`render`,o],[`__scopeId`,`data-v-5d3fc1df`]]);export{s as t};
//# sourceMappingURL=AnimatedSpinner-B4VPhPuM.js.map
@@ -1 +0,0 @@
@keyframes fade-5d3fc1df{0%{opacity:100}20%{opacity:0}40%{opacity:100}}.line[data-v-5d3fc1df]{animation:1.6s infinite fade-5d3fc1df}.one[data-v-5d3fc1df]{animation-delay:0s}.two[data-v-5d3fc1df]{animation-delay:.2s}.three[data-v-5d3fc1df]{animation-delay:.4s}.four[data-v-5d3fc1df]{animation-delay:.6s}.five[data-v-5d3fc1df]{animation-delay:.8s}.six[data-v-5d3fc1df]{animation-delay:1s}.seven[data-v-5d3fc1df]{animation-delay:1.2s}.eight[data-v-5d3fc1df]{animation-delay:1.4s}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js"],(function(e,t){var d,a,n,f,o,i;function s(e,t){return d(),a("svg",i,[...t[0]||(t[0]=[n('<g data-v-5d3fc1df><path d="M7 0L7 3" stroke="currentColor" stroke-width="2" class="line one" data-v-5d3fc1df></path><path d="M11.9497 2.05031L9.82837 4.17163" stroke="currentColor" stroke-width="2" class="line two" data-v-5d3fc1df></path><path d="M14 7L11 7" stroke="currentColor" stroke-width="2" class="line three" data-v-5d3fc1df></path><path d="M11.9497 11.9497L9.82839 9.82839" stroke="currentColor" stroke-width="2" class="line four" data-v-5d3fc1df></path><path d="M7 14L7 11" stroke="currentColor" stroke-width="2" class="line five" data-v-5d3fc1df></path><path d="M0 7L3 7" stroke="currentColor" stroke-width="2" class="line seven" data-v-5d3fc1df></path><path d="M2.05031 2.05031L4.17163 4.17163" stroke="currentColor" stroke-width="2" class="line eight" data-v-5d3fc1df></path><path d="M2.05029 11.9497L4.17161 9.82839" stroke="currentColor" stroke-width="2" class="line six" data-v-5d3fc1df></path></g>',1)])])}return{setters:[function(e){d=e.$,a=e.E,n=e.k},function(e){f=e.t}],execute:function(){(o=document.createElement("style")).textContent="@keyframes fade-5d3fc1df{0%{opacity:100}20%{opacity:0}40%{opacity:100}}.line[data-v-5d3fc1df]{animation:1.6s infinite fade-5d3fc1df}.one[data-v-5d3fc1df]{animation-delay:0s}.two[data-v-5d3fc1df]{animation-delay:.2s}.three[data-v-5d3fc1df]{animation-delay:.4s}.four[data-v-5d3fc1df]{animation-delay:.6s}.five[data-v-5d3fc1df]{animation-delay:.8s}.six[data-v-5d3fc1df]{animation-delay:1s}.seven[data-v-5d3fc1df]{animation-delay:1.2s}.eight[data-v-5d3fc1df]{animation-delay:1.4s}\n/*$vite$:1*/",document.head.appendChild(o);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(d=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[d]="d224efee-1cc8-4bbf-a794-c40af466f10d",t._sentryDebugIdIdentifier="sentry-dbid-d224efee-1cc8-4bbf-a794-c40af466f10d")}catch(t){}var t,d;i={width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("t",f({},[["render",s],["__scopeId","data-v-5d3fc1df"]]))}}}));
//# sourceMappingURL=AnimatedSpinner-legacy-bohXODP6.js.map
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`20d07a64-8f95-4909-9895-d39d9a4d9ff0`,e._sentryDebugIdIdentifier=`sentry-dbid-20d07a64-8f95-4909-9895-d39d9a4d9ff0`)})()}catch{}import{$ as e,N as t,S as n,w as r}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{lo as i,or as a,r as o}from"./users.store-Dxl3e12e.js";import{t as s}from"./TagsDropdown-CBLgdu52.js";var c=t({__name:`AnnotationTagsDropdown.ee`,props:{placeholder:{default:``},modelValue:{default:()=>[]},createEnabled:{type:Boolean,default:!1},eventBus:{default:null}},emits:[`update:modelValue`,`esc`,`blur`],setup(t,{emit:c}){let l=t,u=c,d=a(),f=o(),p=n({get:()=>l.modelValue,set:e=>u(`update:modelValue`,e)}),m=n(()=>d.allTags),h=n(()=>d.isLoading),g=n(()=>d.tagsById);async function _(e){return await d.create(e)}function v(){f.openModal(i)}function y(){u(`esc`)}function b(){u(`blur`)}return d.fetchAll(),(n,i)=>(e(),r(s,{modelValue:p.value,"onUpdate:modelValue":i[0]||=e=>p.value=e,placeholder:t.placeholder,"create-enabled":t.createEnabled,"event-bus":t.eventBus,"all-tags":m.value,"is-loading":h.value,"tags-by-id":g.value,"create-tag":_,onManageTags:v,onEsc:y,onBlur:b},null,8,[`modelValue`,`placeholder`,`create-enabled`,`event-bus`,`all-tags`,`is-loading`,`tags-by-id`]))}});export{c as t};
//# sourceMappingURL=AnnotationTagsDropdown.ee-4LnzVD7V.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./users.store-legacy-CRNFiy1R.js","./TagsDropdown-legacy-DK7aPHIW.js"],(function(e,n){var l,a,t,o,d,u,s,i,r;return{setters:[function(e){l=e.$,a=e.N,t=e.S,o=e.w},function(e){d=e.lo,u=e.or,s=e.r},function(e){i=e.t}],execute:function(){try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(c=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[c]="b95228c3-59c1-473c-9893-e537ae27d2f7",n._sentryDebugIdIdentifier="sentry-dbid-b95228c3-59c1-473c-9893-e537ae27d2f7")}catch(n){}var n,c;r=a({__name:"AnnotationTagsDropdown.ee",props:{placeholder:{default:""},modelValue:{default:()=>[]},createEnabled:{type:Boolean,default:!1},eventBus:{default:null}},emits:["update:modelValue","esc","blur"],setup(e,{emit:n}){const a=e,r=n,c=u(),f=s(),g=t({get:()=>a.modelValue,set:e=>r("update:modelValue",e)}),b=t((()=>c.allTags)),y=t((()=>c.isLoading)),p=t((()=>c.tagsById));async function m(e){return await c.create(e)}function w(){f.openModal(d)}function v(){r("esc")}function h(){r("blur")}return c.fetchAll(),(n,a)=>(l(),o(i,{modelValue:g.value,"onUpdate:modelValue":a[0]||(a[0]=e=>g.value=e),placeholder:e.placeholder,"create-enabled":e.createEnabled,"event-bus":e.eventBus,"all-tags":b.value,"is-loading":y.value,"tags-by-id":p.value,"create-tag":m,onManageTags:w,onEsc:v,onBlur:h},null,8,["modelValue","placeholder","create-enabled","event-bus","all-tags","is-loading","tags-by-id"]))}}),e("t",r)}}}));
//# sourceMappingURL=AnnotationTagsDropdown.ee-legacy-CHWTk3iC.js.map
@@ -1 +0,0 @@
._sync_pfkpq_125{display:flex}._sync_pfkpq_125 button{font-size:var(--font-size--2xs);border-radius:0}._sync_pfkpq_125._collapsed_pfkpq_132{padding:var(--spacing--2xs) 0 0}._icon_pfkpq_136{padding:var(--spacing--4xs) var(--spacing--xs);justify-content:center;align-items:center;gap:var(--spacing--3xs);width:100%;height:100%;display:flex}._buttonContainer_pfkpq_146{justify-content:center;align-items:center;display:flex}._connected_pfkpq_152{border-top:var(--border);justify-content:center;align-items:center;width:100%;display:flex}._branchName_pfkpq_160{white-space:normal;line-break:anywhere;margin-top:-1px}._collapsed_pfkpq_132{text-align:center;padding-top:var(--spacing--4xs);flex-direction:column-reverse}._collapsed_pfkpq_132 ._connected_pfkpq_152{flex-direction:column-reverse;padding-right:0}._collapsed_pfkpq_132 ._connected_pfkpq_152 span[data-grace-area-trigger]{width:100%}._collapsed_pfkpq_132 ._connected_pfkpq_152 button{width:100%!important}._collapsed_pfkpq_132 ._connected_pfkpq_152 ._icon_pfkpq_136{width:100%;padding:var(--spacing--3xs) 0;justify-content:center}._collapsed_pfkpq_132 ._buttonContainer_pfkpq_146{flex-flow:column;justify-content:stretch;align-items:center;width:100%}._projects_14k04_125{align-items:start;gap:var(--spacing--3xs);width:100%}._projects_14k04_125:hover ._plusBtn_14k04_130{display:block}._projectItems_14k04_134{padding:var(--spacing--2xs) var(--spacing--3xs)}._upgradeLink_14k04_138{color:var(--color--primary);cursor:pointer}._sectionHeader_14k04_143{align-items:center;gap:var(--spacing--4xs);width:calc(100% - var(--spacing--3xs) * 2);box-sizing:border-box;padding:var(--spacing--4xs) var(--spacing--3xs);margin:var(--spacing--4xs) var(--spacing--3xs) 0;border-radius:var(--spacing--4xs);cursor:pointer;color:inherit;background:0 0;border:none;display:flex}._sectionHeader_14k04_143:hover{background-color:var(--color--background--light-1);color:var(--color--text--shade-1)}._sectionHeader_14k04_143:hover ._chevron_14k04_161{color:var(--color--text--shade-1)}._sectionHeader_14k04_143:focus-visible{outline:1px solid var(--color--secondary);outline-offset:-1px}._chevron_14k04_161{color:var(--color--text--tint-1);flex-shrink:0;transition:transform .15s}._chevronCollapsed_14k04_175{transform:rotate(-90deg)}._projectsLabel_14k04_179{text-overflow:ellipsis;box-sizing:border-box;padding:0 var(--spacing--xs);margin-top:var(--spacing--2xs);justify-content:space-between;display:flex;overflow:hidden}._projectsLabel_14k04_179._collapsed_14k04_189{justify-content:center;margin-left:0;padding:0}._plusBtn_14k04_130{color:var(--color--text--tint-1);margin:0;padding:0;display:none}._addFirstProjectBtn_14k04_202{font-size:var(--font-size--xs);margin:0 var(--spacing--xs);width:calc(100% - var(--spacing--xs) * 2)}._addFirstProjectBtn_14k04_202._collapsed_14k04_189{display:none}._home_14k04_211{padding:0 var(--spacing--3xs) var(--spacing--2xs)}._home_14k04_211._collapsed_14k04_189{border-bottom:var(--border)}._groupSpacer_14k04_218{height:var(--spacing--5xs)}._favoriteItem_14k04_222{position:relative}._favoriteItem_14k04_222:hover ._unpinButton_14k04_225{opacity:1;pointer-events:auto}._favoriteItem_14k04_222 ._unpinButton_14k04_225:focus-visible{opacity:1;pointer-events:auto}._favoriteItem_14k04_222:not(._collapsed_14k04_189):hover a[role=menuitem]{background-color:var(--color--background--light-1);color:var(--color--text--shade-1);padding-right:var(--spacing--lg)}._unpinButton_14k04_225{right:var(--spacing--4xs);padding:var(--spacing--5xs);color:var(--color--text--tint-2);cursor:pointer;opacity:0;pointer-events:none;background:0 0;border:none;justify-content:center;align-items:center;transition:opacity .15s;display:flex;position:absolute;top:50%;transform:translateY(-50%)}._unpinButton_14k04_225:hover{color:var(--color--text)}._unpinButton_14k04_225:focus-visible{color:var(--color--text)}._triggerContainer_vqbgd_125{z-index:9999;pointer-events:auto}._tooltipTrigger_vqbgd_130{opacity:0;width:1px;height:1px}._tooltipContent_vqbgd_136{align-items:flex-start;gap:var(--spacing--2xs);display:flex}._text_vqbgd_142{font-size:var(--font-size--2xs);line-height:var(--line-height--md);flex:1}._dismissButton_vqbgd_148{cursor:pointer;color:var(--color--text--tint-1);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;display:flex}._dismissButton_vqbgd_148:hover{color:var(--color--text)}._sideMenu_oveah_125{border-right:var(--border);background-color:var(--menu--color--background,var(--color--background--light-2));flex-direction:column;height:100%;display:flex;position:relative}._sideMenu_oveah_125._sideMenuCollapsed_oveah_133{width:42px;min-width:auto}._scrollAreaWrapper_oveah_138{min-height:0;padding-top:var(--spacing--2xs);flex-direction:column;flex:1;display:flex;position:relative}._scrollAreaWrapperWithBottomBorder_oveah_147{border-bottom:var(--border)}._scrollAreaWrapperWithTopBorder_oveah_151{border-top:var(--border)}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`0ed3b876-a406-4b9a-a3c7-b2e2ed5da60c`,e._sentryDebugIdIdentifier=`sentry-dbid-0ed3b876-a406-4b9a-a3c7-b2e2ed5da60c`)})()}catch{}import{$ as e,N as t,at as n,j as r,w as i,yt as a}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{t as o}from"./BaseLayout-QW5lwQG8.js";var s=t({__name:`AuthLayout`,setup(t){return(t,s)=>{let c=n(`RouterView`);return e(),i(o,null,{default:a(()=>[r(c)]),_:1})}}});export{s as default};
//# sourceMappingURL=AuthLayout-DyPBLdYV.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./BaseLayout-legacy-B-1bClfM.js"],(function(e,n){var t,f,d,u,o,i,l;return{setters:[function(e){t=e.$,f=e.N,d=e.at,u=e.j,o=e.w,i=e.yt},function(e){l=e.t}],execute:function(){try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(s=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[s]="2f8f8ccd-9022-4955-9f84-61a65016b93a",n._sentryDebugIdIdentifier="sentry-dbid-2f8f8ccd-9022-4955-9f84-61a65016b93a")}catch(n){}var n,s;e("default",f({__name:"AuthLayout",setup:e=>(e,n)=>{const f=d("RouterView");return t(),o(l,null,{default:i((()=>[u(f)])),_:1})}}))}}}));
//# sourceMappingURL=AuthLayout-legacy-C0sXzKGO.js.map
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`93dbee0e-18ce-428d-82f2-f15b9dcfcb08`,e._sentryDebugIdIdentifier=`sentry-dbid-93dbee0e-18ce-428d-82f2-f15b9dcfcb08`)})()}catch{}import{$ as e,A as t,C as n,E as r,N as i,Sn as a,T as o,U as s,Wt as c,_n as l,j as u,w as d,yt as f}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as p}from"./core-DF2nhIlg.js";import{$ as m,Qi as h,Zi as g,lt as _,q as v}from"./src-uxLNA16N.js";import{t as y}from"./_plugin-vue_export-helper-CRKuwEII.js";import{Pn as b}from"./users.store-Dxl3e12e.js";import{t as x}from"./settings.store-CpKucf5G.js";import{n as S}from"./sso.store--gKiWf-r.js";var C=y(i({__name:`SSOLogin`,setup(t){let i=p(),s=S(),d=b(),f=_(),m=async()=>{try{let e=s.isDefaultAuthenticationSaml?await s.getSSORedirectUrl(typeof f.query?.redirect==`string`?f.query.redirect:``):s.oidc.loginUrl;window.location.href=e??``}catch(e){d.showError(e,`Error`,{message:e.message})}};return(t,d)=>c(s).showSsoLoginButton?(e(),r(`div`,{key:0,class:l(t.$style.ssoLogin)},[n(`div`,{class:l(t.$style.divider)},[n(`span`,null,a(c(i).baseText(`sso.login.divider`)),1)],2),u(c(h),{variant:`outline`,size:`large`,label:c(i).baseText(`sso.login.button`),onClick:m},null,8,[`label`])],2)):o(``,!0)}}),[[`__cssModules`,{$style:{ssoLogin:`_ssoLogin_16f3z_125`,divider:`_divider_16f3z_133`}}]]),w=y(i({__name:`AuthView`,props:{form:{},formLoading:{type:Boolean,default:!1},subtitle:{},withSso:{type:Boolean,default:!1}},emits:[`update`,`submit`,`secondaryClick`],setup(i,{emit:p}){let h=p,_=e=>{h(`update`,e)},y=e=>{h(`submit`,e)},b=()=>{h(`secondaryClick`)},{settings:{releaseChannel:S}}=x();return(p,h)=>(e(),r(`div`,{class:l(p.$style.container)},[u(c(v),{size:`large`,"release-channel":c(S)},null,8,[`release-channel`]),i.subtitle?(e(),r(`div`,{key:0,class:l(p.$style.textContainer)},[u(c(g),{size:`large`},{default:f(()=>[t(a(i.subtitle),1)]),_:1})],2)):o(``,!0),n(`div`,{class:l(p.$style.formContainer)},[u(c(m),s(i.form,{"data-test-id":`auth-form`,"button-loading":i.formLoading,onSecondaryClick:b,onSubmit:y,onUpdate:_}),{default:f(()=>[i.withSso?(e(),d(C,{key:0})):o(``,!0)]),_:1},16,[`button-loading`])],2)],2))}}),[[`__cssModules`,{$style:{container:`_container_fdp0w_129`,textContainer:`_textContainer_fdp0w_139`,formContainer:`_formContainer_fdp0w_143`}}]]);export{w as t};
//# sourceMappingURL=AuthView-BuSGHbUy.js.map
@@ -1 +0,0 @@
._ssoLogin_16f3z_125{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}._divider_16f3z_133{text-transform:uppercase;width:100%;position:relative}._divider_16f3z_133:before{content:"";background-color:var(--color--foreground);width:100%;height:1px;position:absolute;top:50%;left:0}._divider_16f3z_133 span{margin:var(--spacing--2xs) auto;padding:var(--spacing--lg);background:var(--color--background--light-3);display:inline-block;position:relative}body{background-color:var(--color--background--light-2)}._container_fdp0w_129{padding-top:var(--spacing--2xl);flex-direction:column;align-items:center;display:flex}._container_fdp0w_129>*{width:352px}._textContainer_fdp0w_139{text-align:center}._formContainer_fdp0w_143{padding-bottom:var(--spacing--xl)}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./settings.store-legacy-BTMFVQ6D.js","./sso.store-legacy-Dsci_s-Y.js"],(function(e,t){var n,o,i,s,a,r,l,d,c,u,f,g,_,p,y,b,m,h,v,w,x,C,k,S,$,j;return{setters:[function(e){n=e.$,o=e.A,i=e.C,s=e.E,a=e.N,r=e.Sn,l=e.T,d=e.U,c=e.Wt,u=e._n,f=e.j,g=e.w,_=e.yt},function(e){p=e.at},function(e){y=e.$,b=e.Qi,m=e.Zi,h=e.lt,v=e.q},function(e){w=e.t},function(e){x=e.Pn},function(e){C=e.t},function(e){k=e.n}],execute:function(){(S=document.createElement("style")).textContent='._ssoLogin_16f3z_125{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}._divider_16f3z_133{text-transform:uppercase;width:100%;position:relative}._divider_16f3z_133:before{content:"";background-color:var(--color--foreground);width:100%;height:1px;position:absolute;top:50%;left:0}._divider_16f3z_133 span{margin:var(--spacing--2xs) auto;padding:var(--spacing--lg);background:var(--color--background--light-3);display:inline-block;position:relative}body{background-color:var(--color--background--light-2)}._container_fdp0w_129{padding-top:var(--spacing--2xl);flex-direction:column;align-items:center;display:flex}._container_fdp0w_129>*{width:352px}._textContainer_fdp0w_139{text-align:center}._formContainer_fdp0w_143{padding-bottom:var(--spacing--xl)}\n/*$vite$:1*/',document.head.appendChild(S);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(z=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[z]="9443fa8e-e1bd-4a24-971f-848baf78c622",t._sentryDebugIdIdentifier="sentry-dbid-9443fa8e-e1bd-4a24-971f-848baf78c622")}catch(t){}var t,z;$=w(a({__name:"SSOLogin",setup(e){const t=p(),o=k(),a=x(),d=h(),g=async()=>{try{const e=o.isDefaultAuthenticationSaml?await o.getSSORedirectUrl("string"==typeof d.query?.redirect?d.query.redirect:""):o.oidc.loginUrl;window.location.href=e??""}catch(e){a.showError(e,"Error",{message:e.message})}};return(e,a)=>c(o).showSsoLoginButton?(n(),s("div",{key:0,class:u(e.$style.ssoLogin)},[i("div",{class:u(e.$style.divider)},[i("span",null,r(c(t).baseText("sso.login.divider")),1)],2),f(c(b),{variant:"outline",size:"large",label:c(t).baseText("sso.login.button"),onClick:g},null,8,["label"])],2)):l("",!0)}}),[["__cssModules",{$style:{ssoLogin:"_ssoLogin_16f3z_125",divider:"_divider_16f3z_133"}}]]),j=a({__name:"AuthView",props:{form:{},formLoading:{type:Boolean,default:!1},subtitle:{},withSso:{type:Boolean,default:!1}},emits:["update","submit","secondaryClick"],setup(e,{emit:t}){const a=t,p=e=>{a("update",e)},b=e=>{a("submit",e)},h=()=>{a("secondaryClick")},{settings:{releaseChannel:w}}=C();return(t,a)=>(n(),s("div",{class:u(t.$style.container)},[f(c(v),{size:"large","release-channel":c(w)},null,8,["release-channel"]),e.subtitle?(n(),s("div",{key:0,class:u(t.$style.textContainer)},[f(c(m),{size:"large"},{default:_((()=>[o(r(e.subtitle),1)])),_:1})],2)):l("",!0),i("div",{class:u(t.$style.formContainer)},[f(c(y),d(e.form,{"data-test-id":"auth-form","button-loading":e.formLoading,onSecondaryClick:h,onSubmit:b,onUpdate:p}),{default:_((()=>[e.withSso?(n(),g($,{key:0})):l("",!0)])),_:1},16,["button-loading"])],2)],2))}}),e("t",w(j,[["__cssModules",{$style:{container:"_container_fdp0w_129",textContainer:"_textContainer_fdp0w_139",formContainer:"_formContainer_fdp0w_143"}}]]))}}}));
//# sourceMappingURL=AuthView-legacy-Cef4Fo78.js.map
@@ -1 +0,0 @@
._appGrid_1rsn5_125{grid-template:"banners banners banners""sidebar header aside""sidebar content aside"1fr/auto 1fr auto;grid-area:layout;width:100%;height:100%;display:grid;position:relative}._banners_1rsn5_136{grid-area:banners;min-width:0;min-height:0}._header_1rsn5_142{grid-area:header;min-width:0;min-height:0}._sidebar_1rsn5_148{grid-area:sidebar}._aside_1rsn5_152{grid-area:aside;min-width:0;min-height:0;position:relative;overflow:hidden}._content_1rsn5_160{flex-direction:column;grid-area:content;align-items:center;display:flex;overflow:auto}._contentWrapper_1rsn5_168{grid-area:content;justify-content:center;width:100%;height:100%;display:flex;position:relative;overflow:auto}._contentWrapper_1rsn5_168 main{width:100%;height:100%}._contentFooter_1rsn5_182{z-index:10;width:100%;height:auto;display:none}._contentFooter_1rsn5_182:has(*){display:block}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`af93f1c4-31e4-4fce-a375-df0f67e089e6`,e._sentryDebugIdIdentifier=`sentry-dbid-af93f1c4-31e4-4fce-a375-df0f67e089e6`)})()}catch{}import{$ as e,C as t,E as n,N as r,T as i,X as a,_n as o,it as s,pt as c}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{t as l}from"./_plugin-vue_export-helper-CRKuwEII.js";var u=l(r({__name:`BaseLayout`,emits:[`mounted`],setup(r,{emit:l}){let u=c(`layout`),d=l;return a(()=>{u.value&&d(`mounted`,u.value)}),(r,a)=>(e(),n(`div`,{ref:`layout`,class:o([`app-grid`,r.$style.appGrid])},[r.$slots.banners?(e(),n(`div`,{key:0,id:`banners`,class:o(r.$style.banners)},[s(r.$slots,`banners`)],2)):i(``,!0),r.$slots.header?(e(),n(`header`,{key:1,id:`header`,class:o(r.$style.header)},[s(r.$slots,`header`)],2)):i(``,!0),r.$slots.sidebar?(e(),n(`aside`,{key:2,id:`sidebar`,class:o(r.$style.sidebar)},[s(r.$slots,`sidebar`)],2)):i(``,!0),t(`main`,{id:`content`,class:o(r.$style.content)},[t(`div`,{class:o(r.$style.contentWrapper)},[s(r.$slots,`default`)],2),r.$slots.footer?(e(),n(`div`,{key:0,class:o(r.$style.contentFooter)},[s(r.$slots,`footer`)],2)):i(``,!0)],2),r.$slots.aside?(e(),n(`aside`,{key:3,id:`aside`,class:o(r.$style.aside)},[s(r.$slots,`aside`)],2)):i(``,!0),s(r.$slots,`overlays`)],2))}}),[[`__cssModules`,{$style:{appGrid:`_appGrid_1rsn5_125`,banners:`_banners_1rsn5_136`,header:`_header_1rsn5_142`,sidebar:`_sidebar_1rsn5_148`,aside:`_aside_1rsn5_152`,content:`_content_1rsn5_160`,contentWrapper:`_contentWrapper_1rsn5_168`,contentFooter:`_contentFooter_1rsn5_182`}}]]);export{u as t};
//# sourceMappingURL=BaseLayout-QW5lwQG8.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js"],(function(e,t){var n,s,r,a,i,d,o,l,_,c,u;return{setters:[function(e){n=e.$,s=e.C,r=e.E,a=e.N,i=e.T,d=e.X,o=e._n,l=e.it,_=e.pt},function(e){c=e.t}],execute:function(){(u=document.createElement("style")).textContent='._appGrid_1rsn5_125{grid-template:"banners banners banners""sidebar header aside""sidebar content aside"1fr/auto 1fr auto;grid-area:layout;width:100%;height:100%;display:grid;position:relative}._banners_1rsn5_136{grid-area:banners;min-width:0;min-height:0}._header_1rsn5_142{grid-area:header;min-width:0;min-height:0}._sidebar_1rsn5_148{grid-area:sidebar}._aside_1rsn5_152{grid-area:aside;min-width:0;min-height:0;position:relative;overflow:hidden}._content_1rsn5_160{flex-direction:column;grid-area:content;align-items:center;display:flex;overflow:auto}._contentWrapper_1rsn5_168{grid-area:content;justify-content:center;width:100%;height:100%;display:flex;position:relative;overflow:auto}._contentWrapper_1rsn5_168 main{width:100%;height:100%}._contentFooter_1rsn5_182{z-index:10;width:100%;height:auto;display:none}._contentFooter_1rsn5_182:has(*){display:block}\n/*$vite$:1*/',document.head.appendChild(u);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(b=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[b]="96b30d5d-2325-4b6b-bc18-fd7392478ac2",t._sentryDebugIdIdentifier="sentry-dbid-96b30d5d-2325-4b6b-bc18-fd7392478ac2")}catch(t){}var t,b;e("t",c(a({__name:"BaseLayout",emits:["mounted"],setup(e,{emit:t}){const a=_("layout"),c=t;return d((()=>{a.value&&c("mounted",a.value)})),(e,t)=>(n(),r("div",{ref:"layout",class:o(["app-grid",e.$style.appGrid])},[e.$slots.banners?(n(),r("div",{key:0,id:"banners",class:o(e.$style.banners)},[l(e.$slots,"banners")],2)):i("",!0),e.$slots.header?(n(),r("header",{key:1,id:"header",class:o(e.$style.header)},[l(e.$slots,"header")],2)):i("",!0),e.$slots.sidebar?(n(),r("aside",{key:2,id:"sidebar",class:o(e.$style.sidebar)},[l(e.$slots,"sidebar")],2)):i("",!0),s("main",{id:"content",class:o(e.$style.content)},[s("div",{class:o(e.$style.contentWrapper)},[l(e.$slots,"default")],2),e.$slots.footer?(n(),r("div",{key:0,class:o(e.$style.contentFooter)},[l(e.$slots,"footer")],2)):i("",!0)],2),e.$slots.aside?(n(),r("aside",{key:3,id:"aside",class:o(e.$style.aside)},[l(e.$slots,"aside")],2)):i("",!0),l(e.$slots,"overlays")],2))}}),[["__cssModules",{$style:{appGrid:"_appGrid_1rsn5_125",banners:"_banners_1rsn5_136",header:"_header_1rsn5_142",sidebar:"_sidebar_1rsn5_148",aside:"_aside_1rsn5_152",content:"_content_1rsn5_160",contentWrapper:"_contentWrapper_1rsn5_168",contentFooter:"_contentFooter_1rsn5_182"}}]]))}}}));
//# sourceMappingURL=BaseLayout-legacy-B-1bClfM.js.map
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`a4f20e12-ec3b-4547-ab72-b765b1d4c9df`,e._sentryDebugIdIdentifier=`sentry-dbid-a4f20e12-ec3b-4547-ab72-b765b1d4c9df`)})()}catch{}import{$ as e,A as t,C as n,E as r,Ft as i,N as a,Sn as o,Wt as s,_n as c,gt as l,j as u,w as d,yt as f}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as p}from"./core-DF2nhIlg.js";import{Qi as m,Yi as h,Zi as g}from"./src-uxLNA16N.js";import{t as _}from"./_plugin-vue_export-helper-CRKuwEII.js";import{t as v}from"./Modal-BltzC-8Z.js";import{t as y}from"./instanceAiSettings.store-xvAHzaqF.js";import{n as b,t as x}from"./ComputerUseSetupContent-MeWasFab.js";var S=_(a({__name:`BrowserUseSetupModal`,props:{modalName:{}},setup(a){let _=a,S=p(),C=y(),w=i(C.isGatewayConnected?`extension`:`gateway`);return l(()=>C.isGatewayConnected,e=>{e&&w.value===`gateway`&&(w.value=`extension`)}),(i,a)=>(e(),d(v,{name:_.modalName,"show-close":!0,"custom-class":`instance-ai-browser-use-setup-modal`,width:`540`},{content:f(()=>[w.value===`gateway`?(e(),d(x,{key:0})):(e(),r(`div`,{key:1,class:c(i.$style.body)},[n(`div`,{class:c(i.$style.header)},[u(s(h),{tag:`h2`,size:`large`,class:c(i.$style.title)},{default:f(()=>[t(o(s(S).baseText(`instanceAi.browserUse.step.extension.title`)),1)]),_:1},8,[`class`])],2),u(s(g),{color:`text-light`,class:c(i.$style.description)},{default:f(()=>[t(o(s(S).baseText(`instanceAi.browserUse.step.extension.description`)),1)]),_:1},8,[`class`]),u(s(m),{label:s(S).baseText(`instanceAi.browserUse.step.extension.cta`),href:s(b),target:`_blank`,variant:`solid`,size:`large`,icon:`external-link`,"data-test-id":`browser-use-install-extension`},null,8,[`label`,`href`])],2))]),_:1},8,[`name`]))}}),[[`__cssModules`,{$style:{body:`_body_l1v0x_125`,header:`_header_l1v0x_132`,title:`_title_l1v0x_139`,description:`_description_l1v0x_144`,waitingRow:`_waitingRow_l1v0x_149`}}]]);export{S as default};
//# sourceMappingURL=BrowserUseSetupModal-DpRMxTHa.js.map
@@ -1 +0,0 @@
._body_l1v0x_125{gap:var(--spacing--sm);padding:var(--spacing--md);flex-direction:column;display:flex}._header_l1v0x_132{justify-content:space-between;align-items:center;gap:var(--spacing--xs);display:flex}._title_l1v0x_139{font-size:var(--font-size--xl);margin:0}._description_l1v0x_144{font-size:var(--font-size--sm);line-height:var(--line-height--xl)}._waitingRow_l1v0x_149{font-size:var(--font-size--2xs);align-items:center;gap:var(--spacing--2xs);background:var(--color--background--light-2);color:var(--color--text--tint-1);font-weight:var(--font-weight--bold);border-radius:var(--radius);padding:10px 14px;display:flex}.instance-ai-browser-use-setup-modal .el-dialog__header{margin:0;padding:0}.instance-ai-browser-use-setup-modal .el-dialog__body{padding:0}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./Modal-legacy-BQTvvzeX.js","./instanceAiSettings.store-legacy-CAfweq-D.js","./ComputerUseSetupContent-legacy-Ck9KsqZz.js"],(function(e,t){var n,s,a,i,l,o,d,r,c,g,u,f,_,p,y,b,x,w,v,h,m,j,k;return{setters:[function(e){n=e.$,s=e.A,a=e.C,i=e.E,l=e.Ft,o=e.N,d=e.Sn,r=e.Wt,c=e._n,g=e.gt,u=e.j,f=e.w,_=e.yt},function(e){p=e.at},function(e){y=e.Qi,b=e.Yi,x=e.Zi},function(e){w=e.t},function(e){v=e.t},function(e){h=e.t},function(e){m=e.n,j=e.t}],execute:function(){(k=document.createElement("style")).textContent="._body_l1v0x_125{gap:var(--spacing--sm);padding:var(--spacing--md);flex-direction:column;display:flex}._header_l1v0x_132{justify-content:space-between;align-items:center;gap:var(--spacing--xs);display:flex}._title_l1v0x_139{font-size:var(--font-size--xl);margin:0}._description_l1v0x_144{font-size:var(--font-size--sm);line-height:var(--line-height--xl)}._waitingRow_l1v0x_149{font-size:var(--font-size--2xs);align-items:center;gap:var(--spacing--2xs);background:var(--color--background--light-2);color:var(--color--text--tint-1);font-weight:var(--font-weight--bold);border-radius:var(--radius);padding:10px 14px;display:flex}.instance-ai-browser-use-setup-modal .el-dialog__header{margin:0;padding:0}.instance-ai-browser-use-setup-modal .el-dialog__body{padding:0}\n/*$vite$:1*/",document.head.appendChild(k);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(z=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[z]="dc8ae995-f345-4599-bc39-1e70c769a120",t._sentryDebugIdIdentifier="sentry-dbid-dc8ae995-f345-4599-bc39-1e70c769a120")}catch(t){}var t,z;e("default",w(o({__name:"BrowserUseSetupModal",props:{modalName:{}},setup(e){const t=e,o=p(),w=h(),k=l(w.isGatewayConnected?"extension":"gateway");return g((()=>w.isGatewayConnected),(e=>{e&&"gateway"===k.value&&(k.value="extension")})),(e,l)=>(n(),f(v,{name:t.modalName,"show-close":!0,"custom-class":"instance-ai-browser-use-setup-modal",width:"540"},{content:_((()=>["gateway"===k.value?(n(),f(j,{key:0})):(n(),i("div",{key:1,class:c(e.$style.body)},[a("div",{class:c(e.$style.header)},[u(r(b),{tag:"h2",size:"large",class:c(e.$style.title)},{default:_((()=>[s(d(r(o).baseText("instanceAi.browserUse.step.extension.title")),1)])),_:1},8,["class"])],2),u(r(x),{color:"text-light",class:c(e.$style.description)},{default:_((()=>[s(d(r(o).baseText("instanceAi.browserUse.step.extension.description")),1)])),_:1},8,["class"]),u(r(y),{label:r(o).baseText("instanceAi.browserUse.step.extension.cta"),href:r(m),target:"_blank",variant:"solid",size:"large",icon:"external-link","data-test-id":"browser-use-install-extension"},null,8,["label","href"])],2))])),_:1},8,["name"]))}}),[["__cssModules",{$style:{body:"_body_l1v0x_125",header:"_header_l1v0x_132",title:"_title_l1v0x_139",description:"_description_l1v0x_144",waitingRow:"_waitingRow_l1v0x_149"}}]]))}}}));
//# sourceMappingURL=BrowserUseSetupModal-legacy-14lvFQfa.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._tooltipItem_jpymr_125{margin:0;padding:0}._tooltipItem_jpymr_125+._tooltipItem_jpymr_125{margin-top:var(--spacing--5xs)}._container_1w8i0_125{padding:0 var(--spacing--xs)}._header_1w8i0_129{align-items:center;gap:var(--spacing--4xs);cursor:pointer;user-select:none;display:flex}._chevron-icon_1w8i0_137{font-size:var(--font-size--xs);transition:transform .2s}._expanded_1w8i0_141 ._chevron-icon_1w8i0_137{transform:rotate(90deg)}._header-label_1w8i0_145{font-size:var(--font-size--2xs)}._url-list_1w8i0_149{gap:var(--spacing--4xs);margin-top:var(--spacing--4xs);margin-left:var(--spacing--sm);flex-direction:column;display:flex}._url-row_1w8i0_157{align-items:center;gap:var(--spacing--2xs);background-color:var(--color--foreground--tint-2);border-radius:var(--radius--sm);padding:var(--spacing--4xs) var(--spacing--2xs);cursor:pointer;display:flex}._method-badge_1w8i0_167{background-color:var(--color--foreground--shade-2);color:var(--color--foreground--tint-2);font-size:var(--font-size--2xs);font-weight:var(--font-weight--bold);border-radius:var(--radius--sm);padding:0 var(--spacing--4xs);line-height:var(--spacing--sm);text-align:center;flex-shrink:0}._url-text_1w8i0_179{font-size:var(--font-size--2xs);color:var(--color--text--shade-1);word-break:break-all;line-height:var(--line-height--xl);flex:1}._body_flk4k_125{gap:var(--spacing--2xs);flex-direction:column;display:flex}._credentialContainer_flk4k_131{flex-direction:column;display:flex}._credentialContainer_flk4k_131 .node-credentials{margin-top:0}._nodesHint_flk4k_139{font-size:var(--font-size--2xs);color:var(--color--text--tint-1);cursor:default}._component_bmdz8_125{align-items:stretch;display:flex;position:relative}._split_bmdz8_131 ._button_bmdz8_131{height:var(--height--xl);border-top-right-radius:0;border-bottom-right-radius:0;padding-top:0;padding-bottom:0}._split_bmdz8_131 ._button_bmdz8_131:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:var(--spacing--xs)}._split_bmdz8_131 ._button_bmdz8_131:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:var(--spacing--xs)}._split_bmdz8_131 ._button_bmdz8_131:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:var(--spacing--xs)}._split_bmdz8_131 ._button_bmdz8_131:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:var(--spacing--xs)}._split_bmdz8_131 ._button_bmdz8_131[data-icon-only]{width:var(--height--xl)}._split_bmdz8_131 ._button_bmdz8_131[data-icon-only]:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:0}._split_bmdz8_131 ._button_bmdz8_131[data-icon-only]:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:0}._split_bmdz8_131 ._button_bmdz8_131[data-icon-only]:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:0}._split_bmdz8_131 ._button_bmdz8_131[data-icon-only]:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:0}._divider_bmdz8_143{background-color:var(--button--color--text,var(--button--color--text--primary));width:1px}._chevron_bmdz8_148{width:40px;height:var(--height--xl);border-top-left-radius:0;border-bottom-left-radius:0}._menu_bmdz8_155 .el-dropdown{height:100%}._menuPopper_bmdz8_159{max-width:none!important}._menuItem_bmdz8_163{align-items:center;gap:var(--spacing--2xs);display:flex}._menuItem_bmdz8_163._disabled_bmdz8_169 ._menuIcon_bmdz8_169{opacity:.2}._buttonContent_bmdz8_173{gap:var(--spacing--5xs);flex-direction:column;display:flex;align-items:flex-start!important}._subText_bmdz8_180{font-size:var(--font-size--2xs)}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`ebd6e0ba-b1f1-4d3d-9eec-01e65c1e976d`,e._sentryDebugIdIdentifier=`sentry-dbid-ebd6e0ba-b1f1-4d3d-9eec-01e65c1e976d`)})()}catch{}import{$ as e,Ft as t,N as n,T as r,X as i,w as a}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as o}from"./core-DF2nhIlg.js";import{ut as s}from"./src-uxLNA16N.js";import{Pn as c,t as l}from"./users.store-Dxl3e12e.js";import{zr as u}from"./constants-B5Twj8pV.js";import{t as d}from"./AuthView-BuSGHbUy.js";var f=n({__name:`ChangePasswordView`,setup(n){let f=l(),p=o(),m=c(),h=s(),g=t(``),_=t(!1),v=t(null),y=e=>typeof e==`string`?e===g.value?!1:{messageKey:`auth.changePassword.passwordsMustMatchError`}:!1,b=()=>!h.currentRoute.value.query.token||typeof h.currentRoute.value.query.token!=`string`?null:h.currentRoute.value.query.token,x=()=>h.currentRoute.value.query.mfaEnabled?h.currentRoute.value.query.mfaEnabled===`true`:null,S=async e=>{try{_.value=!0;let t=b();if(t){let n={token:t,password:g.value,...e.mfaCode&&{mfaCode:e.mfaCode}};await f.changePassword(n),m.showMessage({type:`success`,title:p.baseText(`auth.changePassword.passwordUpdated`),message:p.baseText(`auth.changePassword.passwordUpdatedMessage`)}),await h.push({name:u.SIGNIN})}else m.showError(Error(p.baseText(`auth.validation.missingParameters`)),p.baseText(`auth.changePassword.error`))}catch(e){m.showError(e,p.baseText(`auth.changePassword.error`))}_.value=!1},C=e=>{e.name===`password`&&typeof e.value==`string`&&(g.value=e.value)};return i(async()=>{let e={title:p.baseText(`auth.changePassword`),buttonText:p.baseText(`auth.changePassword`),redirectText:p.baseText(`auth.signin`),redirectLink:`/signin`,inputs:[{name:`password`,properties:{label:p.baseText(`auth.newPassword`),type:`password`,required:!0,validationRules:[{name:`DEFAULT_PASSWORD_RULES`}],infoText:p.baseText(`auth.defaultPasswordRequirements`),autocomplete:`new-password`,capitalize:!0}},{name:`password2`,properties:{label:p.baseText(`auth.changePassword.reenterNewPassword`),type:`password`,required:!0,validators:{TWO_PASSWORDS_MATCH:{validate:y}},validationRules:[{name:`TWO_PASSWORDS_MATCH`}],autocomplete:`new-password`,capitalize:!0}}]},t=b();x()&&e.inputs.push({name:`mfaCode`,initialValue:``,properties:{required:!0,label:p.baseText(`mfa.code.input.label`),placeholder:p.baseText(`mfa.code.input.placeholder`),maxlength:6,capitalize:!0,validateOnBlur:!0}}),v.value=e;try{if(!t)throw Error(p.baseText(`auth.changePassword.missingTokenError`));await f.validatePasswordToken({token:t})}catch(e){m.showError(e,p.baseText(`auth.changePassword.tokenValidationError`)),h.replace({name:u.SIGNIN})}}),(t,n)=>v.value?(e(),a(d,{key:0,form:v.value,"form-loading":_.value,onSubmit:S,onUpdate:C},null,8,[`form`,`form-loading`])):r(``,!0)}});export{f as default};
//# sourceMappingURL=ChangePasswordView-B0QRphmV.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./users.store-legacy-CRNFiy1R.js","./constants-legacy-DWgCMxGw.js","./AuthView-legacy-Cef4Fo78.js"],(function(e,a){var t,s,r,n,o,u,d,i,l,c,w,f,p;return{setters:[function(e){t=e.$,s=e.Ft,r=e.N,n=e.T,o=e.X,u=e.w},function(e){d=e.at},function(e){i=e.ut},function(e){l=e.Pn,c=e.t},function(e){w=e.zr},function(e){f=e.t}],execute:function(){try{a="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(h=(new a.Error).stack)&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[h]="65d167e6-18a8-4d44-a893-5bc751f2c6b1",a._sentryDebugIdIdentifier="sentry-dbid-65d167e6-18a8-4d44-a893-5bc751f2c6b1")}catch(a){}var a,h;p=r({__name:"ChangePasswordView",setup(e){const r=c(),p=d(),h=l(),g=i(),b=s(""),y=s(!1),m=s(null),T=e=>"string"==typeof e&&e!==b.value&&{messageKey:"auth.changePassword.passwordsMustMatchError"},v=()=>g.currentRoute.value.query.token&&"string"==typeof g.currentRoute.value.query.token?g.currentRoute.value.query.token:null,P=async e=>{try{y.value=!0;const a=v();if(a){const t={token:a,password:b.value,...e.mfaCode&&{mfaCode:e.mfaCode}};await r.changePassword(t),h.showMessage({type:"success",title:p.baseText("auth.changePassword.passwordUpdated"),message:p.baseText("auth.changePassword.passwordUpdatedMessage")}),await g.push({name:w.SIGNIN})}else h.showError(new Error(p.baseText("auth.validation.missingParameters")),p.baseText("auth.changePassword.error"))}catch(a){h.showError(a,p.baseText("auth.changePassword.error"))}y.value=!1},x=e=>{"password"===e.name&&"string"==typeof e.value&&(b.value=e.value)};return o((async()=>{const e={title:p.baseText("auth.changePassword"),buttonText:p.baseText("auth.changePassword"),redirectText:p.baseText("auth.signin"),redirectLink:"/signin",inputs:[{name:"password",properties:{label:p.baseText("auth.newPassword"),type:"password",required:!0,validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],infoText:p.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"password2",properties:{label:p.baseText("auth.changePassword.reenterNewPassword"),type:"password",required:!0,validators:{TWO_PASSWORDS_MATCH:{validate:T}},validationRules:[{name:"TWO_PASSWORDS_MATCH"}],autocomplete:"new-password",capitalize:!0}}]},t=v();g.currentRoute.value.query.mfaEnabled&&"true"===g.currentRoute.value.query.mfaEnabled&&e.inputs.push({name:"mfaCode",initialValue:"",properties:{required:!0,label:p.baseText("mfa.code.input.label"),placeholder:p.baseText("mfa.code.input.placeholder"),maxlength:6,capitalize:!0,validateOnBlur:!0}}),m.value=e;try{if(!t)throw new Error(p.baseText("auth.changePassword.missingTokenError"));await r.validatePasswordToken({token:t})}catch(a){h.showError(a,p.baseText("auth.changePassword.tokenValidationError")),g.replace({name:w.SIGNIN})}})),(e,a)=>m.value?(t(),u(f,{key:0,form:m.value,"form-loading":y.value,onSubmit:P,onUpdate:x},null,8,["form","form-loading"])):n("",!0)}}),e("default",p)}}}));
//# sourceMappingURL=ChangePasswordView-legacy-DE3eMY8s.js.map
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`e1b55728-66b3-4756-9bd9-92c512313ec4`,e._sentryDebugIdIdentifier=`sentry-dbid-e1b55728-66b3-4756-9bd9-92c512313ec4`)})()}catch{}import{$ as e,A as t,C as n,E as r,N as i,S as a,Sn as o,Wt as s,_n as c,w as l,yt as u}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as d}from"./core-DF2nhIlg.js";import{$i as f,Oi as p}from"./src-uxLNA16N.js";import{t as m}from"./_plugin-vue_export-helper-CRKuwEII.js";import{at as h}from"./users.store-Dxl3e12e.js";import{pa as g}from"./constants-B5Twj8pV.js";import{t as _}from"./CredentialIcon-BDiE034B.js";import{E as v,S as y,v as b}from"./fileUtils-C3Asss03.js";var x=m(i({__name:`ChatAgentAvatar`,props:{agent:{},size:{},tooltip:{type:Boolean}},setup(i){let m=h(),x=a(()=>m.allCredentialTypes.length>0),S=d();return(a,d)=>(e(),l(s(p),{"show-after":100,placement:`left`,disabled:!i.tooltip},{content:u(()=>[t(o(i.agent?.name||s(S).baseText(`chatHub.agent.unavailableAgent`)),1)]),default:u(()=>[n(`div`,{class:c([a.$style.container,a.$attrs.class])},[i.agent?.icon?.type===`emoji`?(e(),r(`span`,{key:0,class:c([a.$style.emoji,a.$style[i.size]])},o(i.agent.icon.value),3)):!i.agent||!s(b)(i.agent.model)?(e(),l(s(f),{key:1,color:i.size===`sm`?`text-base`:`text-light`,class:c([a.$style.n8nIcon,a.$style[i.size]]),icon:i.agent?.icon?.value??(i.agent?.model.provider===`n8n`?s(v):s(y)).value,size:i.size===`xl`||i.size===`lg`?`xxlarge`:i.size===`sm`?`large`:`xlarge`},null,8,[`color`,`class`,`icon`,`size`])):(e(),l(_,{key:2,class:c([a.$style.credentialsIcon,{[a.$style.isReady]:x.value}]),"credential-type-name":s(g)[i.agent.model.provider],size:i.size===`xl`?40:i.size===`sm`?16:i.size===`lg`?40:20},null,8,[`class`,`credential-type-name`,`size`]))],2)]),_:1},8,[`disabled`]))}}),[[`__cssModules`,{$style:{container:`_container_jbs4y_125`,n8nIcon:`_n8nIcon_jbs4y_132`,lg:`_lg_jbs4y_135`,xl:`_xl_jbs4y_142`,emoji:`_emoji_jbs4y_147`,sm:`_sm_jbs4y_152`,md:`_md_jbs4y_156`,credentialsIcon:`_credentialsIcon_jbs4y_172`,isReady:`_isReady_jbs4y_175`}}]]);export{x as t};
//# sourceMappingURL=ChatAgentAvatar-D6ePvx1U.js.map
@@ -1 +0,0 @@
._container_jbs4y_125{justify-content:center;align-items:center;display:flex;position:relative}._n8nIcon_jbs4y_132{outline:none}._n8nIcon_jbs4y_132._lg_jbs4y_135{width:24px;height:24px}._n8nIcon_jbs4y_132._lg_jbs4y_135 g,._n8nIcon_jbs4y_132._lg_jbs4y_135 path{stroke-width:1.25px}._n8nIcon_jbs4y_132._xl_jbs4y_142{width:40px;height:40px}._emoji_jbs4y_147{justify-content:center;align-items:center;display:inline-flex}._emoji_jbs4y_147._sm_jbs4y_152{width:16px;height:16px}._emoji_jbs4y_147._md_jbs4y_156{width:20px;height:20px;font-size:20px}._emoji_jbs4y_147._lg_jbs4y_135{width:24px;height:24px;font-size:24px}._emoji_jbs4y_147._xl_jbs4y_142{width:40px;height:40px;font-size:40px}._credentialsIcon_jbs4y_172{visibility:hidden}._credentialsIcon_jbs4y_172._isReady_jbs4y_175{visibility:visible}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./constants-legacy-DWgCMxGw.js","./CredentialIcon-legacy-CkbKrTyk.js","./fileUtils-legacy-BxJhdvLk.js"],(function(e,n){var t,s,i,l,_,o,a,y,c,d,r,b,g,j,p,u,f,h,m,x,v,I,w;return{setters:[function(e){t=e.$,s=e.A,i=e.C,l=e.E,_=e.N,o=e.S,a=e.Sn,y=e.Wt,c=e._n,d=e.w,r=e.yt},function(e){b=e.at},function(e){g=e.$i,j=e.Oi},function(e){p=e.t},function(e){u=e.at},function(e){f=e.pa},function(e){h=e.t},function(e){m=e.E,x=e.S,v=e.v}],execute:function(){(I=document.createElement("style")).textContent="._container_jbs4y_125{justify-content:center;align-items:center;display:flex;position:relative}._n8nIcon_jbs4y_132{outline:none}._n8nIcon_jbs4y_132._lg_jbs4y_135{width:24px;height:24px}._n8nIcon_jbs4y_132._lg_jbs4y_135 g,._n8nIcon_jbs4y_132._lg_jbs4y_135 path{stroke-width:1.25px}._n8nIcon_jbs4y_132._xl_jbs4y_142{width:40px;height:40px}._emoji_jbs4y_147{justify-content:center;align-items:center;display:inline-flex}._emoji_jbs4y_147._sm_jbs4y_152{width:16px;height:16px}._emoji_jbs4y_147._md_jbs4y_156{width:20px;height:20px;font-size:20px}._emoji_jbs4y_147._lg_jbs4y_135{width:24px;height:24px;font-size:24px}._emoji_jbs4y_147._xl_jbs4y_142{width:40px;height:40px;font-size:40px}._credentialsIcon_jbs4y_172{visibility:hidden}._credentialsIcon_jbs4y_172._isReady_jbs4y_175{visibility:visible}\n/*$vite$:1*/",document.head.appendChild(I);try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(z=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[z]="99f817f7-d0ab-4414-9790-12744e35977b",n._sentryDebugIdIdentifier="sentry-dbid-99f817f7-d0ab-4414-9790-12744e35977b")}catch(n){}var n,z;w=_({__name:"ChatAgentAvatar",props:{agent:{},size:{},tooltip:{type:Boolean}},setup(e){const n=u(),_=o((()=>n.allCredentialTypes.length>0)),p=b();return(n,o)=>(t(),d(y(j),{"show-after":100,placement:"left",disabled:!e.tooltip},{content:r((()=>[s(a(e.agent?.name||y(p).baseText("chatHub.agent.unavailableAgent")),1)])),default:r((()=>[i("div",{class:c([n.$style.container,n.$attrs.class])},["emoji"===e.agent?.icon?.type?(t(),l("span",{key:0,class:c([n.$style.emoji,n.$style[e.size]])},a(e.agent.icon.value),3)):e.agent&&y(v)(e.agent.model)?(t(),d(h,{key:2,class:c([n.$style.credentialsIcon,{[n.$style.isReady]:_.value}]),"credential-type-name":y(f)[e.agent.model.provider],size:"xl"===e.size?40:"sm"===e.size?16:"lg"===e.size?40:20},null,8,["class","credential-type-name","size"])):(t(),d(y(g),{key:1,color:"sm"===e.size?"text-base":"text-light",class:c([n.$style.n8nIcon,n.$style[e.size]]),icon:e.agent?.icon?.value??("n8n"===e.agent?.model.provider?y(m):y(x)).value,size:"xl"===e.size||"lg"===e.size?"xxlarge":"sm"===e.size?"large":"xlarge"},null,8,["color","class","icon","size"]))],2)])),_:1},8,["disabled"]))}}),e("t",p(w,[["__cssModules",{$style:{container:"_container_jbs4y_125",n8nIcon:"_n8nIcon_jbs4y_132",lg:"_lg_jbs4y_135",xl:"_xl_jbs4y_142",emoji:"_emoji_jbs4y_147",sm:"_sm_jbs4y_152",md:"_md_jbs4y_156",credentialsIcon:"_credentialsIcon_jbs4y_172",isReady:"_isReady_jbs4y_175"}}]]))}}}));
//# sourceMappingURL=ChatAgentAvatar-legacy-Bt4GTsEy.js.map
@@ -1 +0,0 @@
.chat-file[data-v-06c7b5c1]{width:fit-content;max-width:15rem;color:var(--chat--color-dark);border:1px solid var(--chat--color-dark);background:#fff;border-radius:.25rem;flex-wrap:nowrap;align-items:center;gap:.25rem;padding:.5rem;font-size:.75rem;display:flex}.chat-file[data-v-06c7b5c1]:has(.chat-file-preview){cursor:pointer}.chat-icon[data-v-06c7b5c1]{flex-shrink:0}.chat-file-name-tooltip[data-v-06c7b5c1]{overflow:hidden}.chat-file-name[data-v-06c7b5c1]{text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin:0;overflow:hidden}.chat-file-delete[data-v-06c7b5c1],.chat-file-preview[data-v-06c7b5c1]{cursor:pointer;background:0 0;border:none;flex-shrink:0;display:block}.chat-file-delete[data-v-06c7b5c1]{position:relative}.chat-file-delete[data-v-06c7b5c1]:hover{color:red}.chat-file-delete[data-v-06c7b5c1]:before{content:"";position:absolute;top:-10px;bottom:-10px;left:-10px;right:-10px}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`a63692d3-9ae9-4949-aa93-d15333fbf78c`,e._sentryDebugIdIdentifier=`sentry-dbid-a63692d3-9ae9-4949-aa93-d15333fbf78c`)})()}catch{}import{$ as e,C as t,E as n,N as r,S as i,Sn as a,T as o,Wt as s,h as c,j as l,jt as u,w as d}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{t as f}from"./_plugin-vue_export-helper-CRKuwEII.js";var p={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function m(r,i){return e(),n(`svg`,p,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M20 6.91L17.09 4L12 9.09L6.91 4L4 6.91L9.09 12L4 17.09L6.91 20L12 14.91L17.09 20L20 17.09L14.91 12z`},null,-1)]])}var h=u({name:`mdi-closeThick`,render:m}),g={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _(r,i){return e(),n(`svg`,g,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m0 18h12v-8l-4 4l-2-2zM8 9a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2`},null,-1)]])}var v=u({name:`mdi-fileImage`,render:_}),y={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function b(r,i){return e(),n(`svg`,y,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zm-1 11h-2v5a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2c.4 0 .7.1 1 .3V11h3zm0-4V3.5L18.5 9z`},null,-1)]])}var x=u({name:`mdi-fileMusic`,render:b}),S={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function C(r,i){return e(),n(`svg`,S,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2zm3-4v-2H6v2z`},null,-1)]])}var w=u({name:`mdi-fileText`,render:C}),T={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function E(r,i){return e(),n(`svg`,T,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m11 17v-6l-3 2.2V13H7v6h7v-2.2z`},null,-1)]])}var D=u({name:`mdi-fileVideo`,render:E}),O={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k(r,i){return e(),n(`svg`,O,[...i[0]||=[t(`path`,{fill:`currentColor`,d:`M14 3v2h3.59l-9.83 9.83l1.41 1.41L19 6.41V10h2V3m-2 16H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2z`},null,-1)]])}var A=u({name:`mdi-openInNew`,render:k}),j={class:`chat-file-name`},M=f(r({__name:`ChatFile`,props:{file:{},isRemovable:{type:Boolean},isPreviewable:{type:Boolean},href:{}},emits:[`remove`],setup(r,{emit:u}){let f=r,p=u,m={document:w,audio:x,image:v,video:D},g=i(()=>m[f.file?.type.split(`/`)[0]]||w);function _(){if(f.href){window.open(f.href,`_blank`,`noopener noreferrer`);return}f.isPreviewable&&window.open(URL.createObjectURL(f.file))}function y(){p(`remove`,f.file)}return(i,u)=>(e(),n(`div`,{class:`chat-file`,"data-test-id":`chat-file`,onClick:_},[l(s(g),{class:`chat-icon`}),t(`p`,j,a(r.file.name),1),r.isRemovable?(e(),n(`span`,{key:0,class:`chat-file-delete`,"data-test-id":`chat-file-remove`,onClick:c(y,[`stop`])},[l(s(h))])):r.isPreviewable||r.href?(e(),d(s(A),{key:1,class:`chat-file-preview`})):o(``,!0)]))}}),[[`__scopeId`,`data-v-06c7b5c1`]]);export{M as t};
//# sourceMappingURL=ChatFile-DIoQkXRR.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js"],(function(e,t){var i,a,n,l,r,o,c,d,h,f,s,v,u,m,p,b,w,g,y,x,L,k,z,C,V,_,M,H;function B(e,t){return i(),n("svg",p,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M20 6.91L17.09 4L12 9.09L6.91 4L4 6.91L9.09 12L4 17.09L6.91 20L12 14.91L17.09 20L20 17.09L14.91 12z"},null,-1)])])}function I(e,t){return i(),n("svg",w,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m0 18h12v-8l-4 4l-2-2zM8 9a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2"},null,-1)])])}function T(e,t){return i(),n("svg",y,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zm-1 11h-2v5a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2c.4 0 .7.1 1 .3V11h3zm0-4V3.5L18.5 9z"},null,-1)])])}function E(e,t){return i(),n("svg",L,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2zm3-4v-2H6v2z"},null,-1)])])}function R(e,t){return i(),n("svg",z,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m11 17v-6l-3 2.2V13H7v6h7v-2.2z"},null,-1)])])}function j(e,t){return i(),n("svg",V,[...t[0]||(t[0]=[a("path",{fill:"currentColor",d:"M14 3v2h3.59l-9.83 9.83l1.41 1.41L19 6.41V10h2V3m-2 16H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2z"},null,-1)])])}return{setters:[function(e){i=e.$,a=e.C,n=e.E,l=e.N,r=e.S,o=e.Sn,c=e.T,d=e.Wt,h=e.h,f=e.j,s=e.jt,v=e.w},function(e){u=e.t}],execute:function(){(m=document.createElement("style")).textContent='.chat-file[data-v-06c7b5c1]{width:fit-content;max-width:15rem;color:var(--chat--color-dark);border:1px solid var(--chat--color-dark);background:#fff;border-radius:.25rem;flex-wrap:nowrap;align-items:center;gap:.25rem;padding:.5rem;font-size:.75rem;display:flex}.chat-file[data-v-06c7b5c1]:has(.chat-file-preview){cursor:pointer}.chat-icon[data-v-06c7b5c1]{flex-shrink:0}.chat-file-name-tooltip[data-v-06c7b5c1]{overflow:hidden}.chat-file-name[data-v-06c7b5c1]{text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin:0;overflow:hidden}.chat-file-delete[data-v-06c7b5c1],.chat-file-preview[data-v-06c7b5c1]{cursor:pointer;background:0 0;border:none;flex-shrink:0;display:block}.chat-file-delete[data-v-06c7b5c1]{position:relative}.chat-file-delete[data-v-06c7b5c1]:hover{color:red}.chat-file-delete[data-v-06c7b5c1]:before{content:"";position:absolute;top:-10px;bottom:-10px;left:-10px;right:-10px}\n/*$vite$:1*/',document.head.appendChild(m);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(S=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[S]="725522d4-3c2c-40b6-9547-ae25cfa771d1",t._sentryDebugIdIdentifier="sentry-dbid-725522d4-3c2c-40b6-9547-ae25cfa771d1")}catch(t){}var t,S;p={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},b=s({name:"mdi-closeThick",render:B}),w={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},g=s({name:"mdi-fileImage",render:I}),y={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},x=s({name:"mdi-fileMusic",render:T}),L={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},k=s({name:"mdi-fileText",render:E}),z={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},C=s({name:"mdi-fileVideo",render:R}),V={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},_=s({name:"mdi-openInNew",render:j}),M={class:"chat-file-name"},H=l({__name:"ChatFile",props:{file:{},isRemovable:{type:Boolean},isPreviewable:{type:Boolean},href:{}},emits:["remove"],setup(e,{emit:t}){const l=e,s=t,u={document:k,audio:x,image:g,video:C},m=r((()=>u[l.file?.type.split("/")[0]]||k));function p(){l.href?window.open(l.href,"_blank","noopener noreferrer"):l.isPreviewable&&window.open(URL.createObjectURL(l.file))}function w(){s("remove",l.file)}return(t,l)=>(i(),n("div",{class:"chat-file","data-test-id":"chat-file",onClick:p},[f(d(m),{class:"chat-icon"}),a("p",M,o(e.file.name),1),e.isRemovable?(i(),n("span",{key:0,class:"chat-file-delete","data-test-id":"chat-file-remove",onClick:h(w,["stop"])},[f(d(b))])):e.isPreviewable||e.href?(i(),v(d(_),{key:1,class:"chat-file-preview"})):c("",!0)]))}}),e("t",u(H,[["__scopeId","data-v-06c7b5c1"]]))}}}));
//# sourceMappingURL=ChatFile-legacy-CLPuXv1O.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._component_1txea_125{background-color:var(--color--background--light-2);flex-direction:column;align-items:stretch;width:100%;display:flex;overflow:hidden}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`90ba4851-9766-40a8-90b4-537e5802135a`,e._sentryDebugIdIdentifier=`sentry-dbid-90ba4851-9766-40a8-90b4-537e5802135a`)})()}catch{}import{$ as e,E as t,Ft as n,N as r,S as i,_n as a,gt as o,it as s}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{m as c,v as l}from"./core-DF2nhIlg.js";import{Ft as u,ut as d}from"./src-uxLNA16N.js";import{t as f}from"./_plugin-vue_export-helper-CRKuwEII.js";import{at as p,r as m,ui as h}from"./users.store-Dxl3e12e.js";import{Pi as g,_c as _,ga as v,gc as y,ha as b,pa as x,vc as S,ya as C,yc as w}from"./constants-B5Twj8pV.js";import{t as T}from"./settings.store-CpKucf5G.js";import{c as E}from"./constants-Eje_HBqN.js";import{_ as D,v as O}from"./fileUtils-C3Asss03.js";var k=S(C,w().or(y())),A=v.and(_({cachedDisplayName:w().optional(),cachedIcon:b.optional()})).transform(e=>({...e,cachedDisplayName:e.cachedDisplayName||(O(e)?e.model:``)}));function j(e){let t=n(!1),r=p(),a=T(),s=h(),c=l(g(e),{},{writeDefaults:!1,shallow:!0,serializer:{read:e=>{try{return k.parse(JSON.parse(e))}catch{return{}}},write:e=>JSON.stringify(e)}}),u=i(()=>t.value||r.allCredentials.length>0),d=i(()=>Object.fromEntries(C.options.map(e=>{if(!D(e))return[e,null];let t=x[e];if(!t)return[e,null];let n=r.getCredentialsByType(t),i=a.moduleSettings?.[`chat-hub`]?.providers[e];return i?.credentialId&&n.some(e=>e.id===i.credentialId)?[e,i.credentialId]:[e,n.toSorted((e,t)=>new Date(t.createdAt)-+new Date(e.createdAt))[0]?.id??null]}))),f=i(()=>u.value?C.options.reduce((e,t)=>{let n=c.value[t]??null;return e[t]=n&&r.allCredentials.some(e=>e.id===n)?n:d.value[t],e},{}):null);function m(e,t){c.value={...c.value,[e]:t}}return o(()=>s.personalProject,async e=>{e&&(await Promise.all([r.fetchCredentialTypes(!1),r.fetchAllCredentialsForWorkflow({projectId:e.id})]),t.value=!0)},{immediate:!0}),{credentialsByProvider:f,selectCredential:m}}var M=f(r({__name:`ChatLayout`,setup(n){let r=d(),i=m(),{isCtrlKeyPressed:o}=u();return c(document,`keydown`,e=>{e.key.toLowerCase()===`o`&&o(e)&&e.shiftKey&&!i.isAnyModalOpen&&(e.preventDefault(),e.stopPropagation(),r.push({name:E,force:!0}))}),(n,r)=>(e(),t(`div`,{class:a(n.$style.component)},[s(n.$slots,`default`)],2))}}),[[`__cssModules`,{$style:{component:`_component_1txea_125`}}]]);export{j as n,A as r,M as t};
//# sourceMappingURL=ChatLayout-D3JDyFHI.js.map
@@ -1 +0,0 @@
._menuItem_1mhhm_125{border-radius:var(--spacing--4xs);align-items:center;padding-right:0;display:flex}._menuItem_1mhhm_125:focus-within,._menuItem_1mhhm_125._active_1mhhm_131,._menuItem_1mhhm_125:hover{background-color:var(--color--background--light-1)}._menuItem_1mhhm_125:has([aria-expanded=true]){background-color:var(--color--background--light-1)}._menuItemLink_1mhhm_135{padding:var(--spacing--4xs);align-items:center;gap:var(--spacing--4xs);cursor:pointer;color:var(--color--text);outline:none;flex:1;min-width:0;text-decoration:none;display:flex}._menuItemLink_1mhhm_135._compact_1mhhm_147{margin-left:-1px}._menuItemLink_1mhhm_135:active{color:var(--color--text--shade-1)}._textContainer_1mhhm_154{flex-direction:column;min-width:0;display:flex}._label_1mhhm_160{white-space:nowrap;text-overflow:ellipsis;line-height:var(--line-height--xl);flex:1;min-width:0;overflow:hidden}._title_1mhhm_169{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;line-height:20px;overflow:hidden}._actionDropdown_1mhhm_178{opacity:0;flex-shrink:0;width:0;overflow:hidden}._menuItem_1mhhm_125:hover ._actionDropdown_1mhhm_178,._active_1mhhm_131 ._actionDropdown_1mhhm_178{opacity:1;width:auto}._menuItem_1mhhm_125:has([aria-expanded=true]) ._actionDropdown_1mhhm_178{opacity:1;width:auto}._menuItem_1mhhm_125:has(:focus) ._actionDropdown_1mhhm_178{opacity:1;width:auto}._actionDropdownTrigger_1mhhm_189{box-shadow:none!important;outline:none!important}._avatar_1006s_125{width:var(--spacing--lg);height:var(--spacing--lg);min-width:var(--spacing--lg)}._skeletonItem_rwi4t_125{padding:var(--spacing--3xs) var(--spacing--2xs);align-items:center;gap:var(--spacing--2xs);border-radius:var(--spacing--4xs);height:30px;display:flex}._skeletonAvatar_rwi4t_134,._skeletonText_rwi4t_135{background:var(--color--foreground);animation:1s ease-in-out infinite _skeleton-pulse_rwi4t_1}._skeletonAvatar_rwi4t_134{border-radius:50%;flex-shrink:0;width:16px;height:16px}._skeletonText_rwi4t_135{border-radius:var(--radius--sm);width:80%;height:14px}@keyframes _skeleton-pulse_rwi4t_1{0%,to{opacity:.6}50%{opacity:.3}}._logoContainer_1vnf8_125{align-items:center;gap:var(--spacing--4xs);display:flex}._component_1vnf8_131{flex-direction:column;align-items:stretch;display:flex}._header_1vnf8_137{height:56px;padding-inline:var(--spacing--xs);justify-content:space-between;align-items:center;gap:var(--spacing--2xs);flex-grow:0;flex-shrink:0;display:flex}._logo_1vnf8_125{margin-top:-4px}._links_1vnf8_153{padding:var(--spacing--2xs) var(--spacing--3xs);flex-direction:column;display:flex}._links_1vnf8_153._collapsed_1vnf8_158{border-bottom:var(--border)}._historySections_1vnf8_162{padding:var(--spacing--2xs) var(--spacing--3xs) var(--spacing--2xs);gap:var(--spacing--sm);flex-direction:column;display:flex}._historySections_1vnf8_162._collapsed_1vnf8_158{gap:0}._group_1vnf8_172{flex-direction:column;gap:2px;display:flex}._groupHeader_1vnf8_178{padding:0 var(--spacing--4xs) var(--spacing--3xs) var(--spacing--4xs)}._loading_1vnf8_182,._empty_1vnf8_183{padding:var(--spacing--xs);text-align:center}._sideMenu_nzvda_125{border-right:var(--border);background-color:var(--menu--color--background,var(--color--background--light-2));flex-direction:column;height:100%;display:flex;position:relative}._sideMenu_nzvda_125._sideMenuCollapsed_nzvda_133{width:42px;min-width:auto}._scrollArea_nzvda_138{flex-direction:column;height:100%;display:flex}
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./constants-legacy-DWgCMxGw.js","./settings.store-legacy-BTMFVQ6D.js","./constants-legacy-C3KSnBP-.js","./fileUtils-legacy-BxJhdvLk.js"],(function(e,t){var n,a,o,l,r,s,i,c,d,u,f,y,p,g,m,h,b,v,w,_,j,C,D,I,E,S,T,x,N,k,P;return e("n",(function(e){const t=o(!1),n=g(),a=S(),l=h(),s=u(b(e),{},{writeDefaults:!1,shallow:!0,serializer:{read:e=>{try{return P.parse(JSON.parse(e))}catch(t){return{}}},write:e=>JSON.stringify(e)}}),c=r((()=>t.value||n.allCredentials.length>0)),d=r((()=>Object.fromEntries(I.options.map((e=>{if(!x(e))return[e,null];const t=C[e];if(!t)return[e,null];const o=n.getCredentialsByType(t),l=a.moduleSettings?.["chat-hub"]?.providers[e];return l?.credentialId&&o.some((e=>e.id===l.credentialId))?[e,l.credentialId]:[e,o.toSorted(((e,t)=>+new Date(t.createdAt)-+new Date(e.createdAt)))[0]?.id??null]}))))),f=r((()=>c.value?I.options.reduce(((e,t)=>{const a=s.value[t]??null;return e[t]=a&&n.allCredentials.some((e=>e.id===a))?a:d.value[t],e}),{}):null));return i((()=>l.personalProject),(async e=>{e&&(await Promise.all([n.fetchCredentialTypes(!1),n.fetchAllCredentialsForWorkflow({projectId:e.id})]),t.value=!0)}),{immediate:!0}),{credentialsByProvider:f,selectCredential:function(e,t){s.value={...s.value,[e]:t}}}})),{setters:[function(e){n=e.$,a=e.E,o=e.Ft,l=e.N,r=e.S,s=e._n,i=e.gt,c=e.it},function(e){d=e.m,u=e.v},function(e){f=e.Ft,y=e.ut},function(e){p=e.t},function(e){g=e.at,m=e.r,h=e.ui},function(e){b=e.Pi,v=e._c,w=e.ga,_=e.gc,j=e.ha,C=e.pa,D=e.vc,I=e.ya,E=e.yc},function(e){S=e.t},function(e){T=e.c},function(e){x=e._,N=e.v}],execute:function(){(k=document.createElement("style")).textContent="._component_1txea_125{background-color:var(--color--background--light-2);flex-direction:column;align-items:stretch;width:100%;display:flex;overflow:hidden}\n/*$vite$:1*/",document.head.appendChild(k);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(o=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[o]="98100d91-b45b-4e0b-a779-245ac4b3c1a2",t._sentryDebugIdIdentifier="sentry-dbid-98100d91-b45b-4e0b-a779-245ac4b3c1a2")}catch(t){}var t,o;P=D(I,E().or(_())),e("r",w.and(v({cachedDisplayName:E().optional(),cachedIcon:j.optional()})).transform((e=>({...e,cachedDisplayName:e.cachedDisplayName||(N(e)?e.model:"")})))),e("t",p(l({__name:"ChatLayout",setup(e){const t=y(),o=m(),{isCtrlKeyPressed:l}=f();return d(document,"keydown",(e=>{"o"===e.key.toLowerCase()&&l(e)&&e.shiftKey&&!o.isAnyModalOpen&&(e.preventDefault(),e.stopPropagation(),t.push({name:T,force:!0}))})),(e,t)=>(n(),a("div",{class:s(e.$style.component)},[c(e.$slots,"default")],2))}}),[["__cssModules",{$style:{component:"_component_1txea_125"}}]]))}}}));
//# sourceMappingURL=ChatLayout-legacy-B1gAh5rh.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._container_zrzl5_125{width:100%;height:100%;max-width:var(--content-container--width);padding:var(--spacing--xl);align-self:center;gap:var(--spacing--xl);flex-direction:column;display:flex;position:relative;overflow-y:auto}._header_zrzl5_138{justify-content:space-between;align-items:flex-start;gap:var(--spacing--lg);width:100%;display:flex}._headerContent_zrzl5_146{gap:var(--spacing--3xs);flex-direction:column;display:flex}._empty_zrzl5_152{flex:1;justify-content:center;align-items:center;width:100%;min-height:200px;display:flex}._agentsGrid_zrzl5_161{gap:var(--spacing--2xs);flex-direction:column;display:flex}
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`8de28bad-01ab-4f1a-892a-0fb4779be458`,e._sentryDebugIdIdentifier=`sentry-dbid-8de28bad-01ab-4f1a-892a-0fb4779be458`)})()}catch{}import{$ as e,A as t,C as n,E as r,Ft as i,N as a,S as o,Sn as s,T as c,Wt as l,_ as u,_n as d,gt as f,j as p,rt as m,w as h,yt as g}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as _,y as v}from"./core-DF2nhIlg.js";import{Qi as y,Zi as b,lt as x,ut as S}from"./src-uxLNA16N.js";import{t as C}from"./_plugin-vue_export-helper-CRKuwEII.js";import{Ln as w,Pn as T,r as E,t as D}from"./users.store-Dxl3e12e.js";import"./constants-B5Twj8pV.js";import{d as O,t as k}from"./constants-Eje_HBqN.js";import{t as A}from"./chat.store-BwzIisBp.js";import{c as j,w as M}from"./fileUtils-C3Asss03.js";import{n as N,r as P,t as F}from"./SkeletonAgentCard-CMukuHa_.js";import{n as I,t as L}from"./ChatLayout-D3JDyFHI.js";var R=C(a({__name:`ChatPersonalAgentsView`,setup(a){let C=A(),R=E(),z=x(),B=S(),V=T(),H=w(),U=D(),W=v(O),G=_(),K=i({search:``,sortBy:`updatedAt`}),q=typeof z.query.agentId==`string`?z.query.agentId:null,{credentialsByProvider:J}=I(U.currentUserId??`anonymous`),Y=o(()=>C.agentsReady),X=o(()=>C.agents[`custom-agent`].models),Z=o(()=>j(X.value,K.value));function Q(){R.openModalWithData({name:k,data:{credentials:J}})}function $(e){e.provider===`custom-agent`&&(B.replace({query:{agentId:e.agentId}}),R.openModalWithData({name:k,data:{agentId:e.agentId,credentials:J}}))}f(J,e=>{!e||!q||R.openModalWithData({name:k,data:{agentId:q,credentials:e}})},{immediate:!0}),f(()=>R.modalsById[k]?.open,e=>{!e&&z.query.agentId&&B.replace({query:{}})});async function ee(e){if(!(await H.confirm(G.baseText(`chatHub.agents.delete.confirm.message`),G.baseText(`chatHub.agents.delete.confirm.title`),{confirmButtonText:G.baseText(`chatHub.agents.delete.confirm.button`),cancelButtonText:G.baseText(`chatHub.agents.delete.cancel.button`)})!==`confirm`||!J.value))try{await C.deleteCustomAgent(e,J.value),V.showMessage({type:`success`,title:G.baseText(`chatHub.agents.delete.success`)})}catch(e){V.showError(e,G.baseText(`chatHub.agents.delete.error`))}}return f(J,e=>{e&&C.fetchAgents(e,{minLoadingTime:250})},{immediate:!0}),(i,a)=>(e(),h(L,null,{default:g(()=>[n(`div`,{class:d([i.$style.container,{[i.$style.isMobileDevice]:l(W)}])},[n(`div`,{class:d(i.$style.header)},[n(`div`,{class:d(i.$style.headerContent)},[p(l(b),{tag:`h1`,size:`xlarge`,bold:``},{default:g(()=>[t(s(l(G).baseText(`chatHub.personalAgents.title`)),1)]),_:1}),p(l(b),{color:`text-light`},{default:g(()=>[t(s(l(G).baseText(`chatHub.personalAgents.description`)),1)]),_:1})],2),p(l(y),{variant:`solid`,icon:`plus`,size:`medium`,onClick:Q},{default:g(()=>[t(s(l(G).baseText(`chatHub.agents.button.newAgent`)),1)]),_:1})],2),Y.value&&X.value.length>0?(e(),h(N,{key:0,modelValue:K.value,"onUpdate:modelValue":a[0]||=e=>K.value=e},null,8,[`modelValue`])):c(``,!0),Y.value?Z.value.length===0?(e(),r(`div`,{key:2,class:d(i.$style.empty)},[p(l(b),{color:`text-light`,size:`medium`},{default:g(()=>[t(s(X.value.length===0?l(G).baseText(`chatHub.personalAgents.empty.noAgents`):l(G).baseText(`chatHub.personalAgents.empty.noMatch`)),1)]),_:1})],2)):(e(),r(`div`,{key:3,class:d(i.$style.agentsGrid)},[(e(!0),r(u,null,m(Z.value,t=>(e(),r(u,{key:l(M)(t.model)},[t.model.provider===`custom-agent`?(e(),h(P,{key:0,agent:t,onEdit:e=>$(t.model),onDelete:e=>ee(t.model.agentId)},null,8,[`agent`,`onEdit`,`onDelete`])):c(``,!0)],64))),128))],2)):(e(),r(`div`,{key:1,class:d(i.$style.agentsGrid)},[(e(),r(u,null,m(5,e=>p(F,{key:e})),64))],2))],2)]),_:1}))}}),[[`__cssModules`,{$style:{container:`_container_zrzl5_125`,header:`_header_zrzl5_138`,headerContent:`_headerContent_zrzl5_146`,empty:`_empty_zrzl5_152`,agentsGrid:`_agentsGrid_zrzl5_161`}}]]);export{R as default};
//# sourceMappingURL=ChatPersonalAgentsView-zvneBrXJ.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`dbf746f2-7cd3-4619-8574-72311f313bf5`,e._sentryDebugIdIdentifier=`sentry-dbid-dbf746f2-7cd3-4619-8574-72311f313bf5`)})()}catch{}import{$ as e,A as t,C as n,E as r,Ft as i,N as a,S as o,Sn as s,T as c,Wt as l,_ as u,_n as d,gt as f,j as p,rt as m,w as h,yt as g}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as _,y as v}from"./core-DF2nhIlg.js";import{Zi as y,ut as b}from"./src-uxLNA16N.js";import{t as x}from"./_plugin-vue_export-helper-CRKuwEII.js";import{t as S}from"./users.store-Dxl3e12e.js";import{zr as C}from"./constants-B5Twj8pV.js";import{d as w}from"./constants-Eje_HBqN.js";import{t as T}from"./chat.store-BwzIisBp.js";import{c as E,w as D}from"./fileUtils-C3Asss03.js";import{n as O,r as k,t as A}from"./SkeletonAgentCard-CMukuHa_.js";import{n as j,t as M}from"./ChatLayout-D3JDyFHI.js";var N=x(a({__name:`ChatWorkflowAgentsView`,setup(a){let x=T(),N=S(),P=b(),F=v(w),I=_(),L=i({search:``,sortBy:`updatedAt`}),{credentialsByProvider:R}=j(N.currentUserId??`anonymous`),z=o(()=>x.agentsReady),B=o(()=>x.agents.n8n.models),V=o(()=>E(B.value,L.value));async function H(e){if(e.provider===`n8n`){let t=P.resolve({name:C.WORKFLOW,params:{name:e.workflowId}});window.open(t.href,`_blank`);return}}return f(R,e=>{e&&x.fetchAgents(e,{minLoadingTime:250})},{immediate:!0}),(i,a)=>(e(),h(M,null,{default:g(()=>[n(`div`,{class:d([i.$style.container,{[i.$style.isMobileDevice]:l(F)}])},[n(`div`,{class:d(i.$style.header)},[n(`div`,{class:d(i.$style.headerContent)},[p(l(y),{tag:`h1`,size:`xlarge`,bold:``},{default:g(()=>[t(s(l(I).baseText(`chatHub.workflowAgents.title`)),1)]),_:1}),p(l(y),{color:`text-light`},{default:g(()=>[t(s(l(I).baseText(`chatHub.workflowAgents.description`)),1)]),_:1})],2)],2),z.value&&B.value.length>0?(e(),h(O,{key:0,modelValue:L.value,"onUpdate:modelValue":a[0]||=e=>L.value=e},null,8,[`modelValue`])):c(``,!0),z.value?V.value.length===0?(e(),r(`div`,{key:2,class:d(i.$style.empty)},[p(l(y),{color:`text-light`,size:`medium`},{default:g(()=>[t(s(B.value.length===0?l(I).baseText(`chatHub.workflowAgents.empty.noAgents`):l(I).baseText(`chatHub.workflowAgents.empty.noMatch`)),1)]),_:1})],2)):(e(),r(`div`,{key:3,class:d(i.$style.agentsGrid)},[(e(!0),r(u,null,m(V.value,t=>(e(),h(k,{key:l(D)(t.model),agent:t,onEdit:e=>H(t.model)},null,8,[`agent`,`onEdit`]))),128))],2)):(e(),r(`div`,{key:1,class:d(i.$style.agentsGrid)},[(e(),r(u,null,m(5,e=>p(A,{key:e})),64))],2))],2)]),_:1}))}}),[[`__cssModules`,{$style:{container:`_container_16sez_125`,menuButton:`_menuButton_16sez_138`,isMobileDevice:`_isMobileDevice_16sez_144`,header:`_header_16sez_148`,headerContent:`_headerContent_16sez_156`,empty:`_empty_16sez_162`,agentsGrid:`_agentsGrid_16sez_171`}}]]);export{N as default};
//# sourceMappingURL=ChatWorkflowAgentsView-Cp2rOh2O.js.map
@@ -1 +0,0 @@
._container_16sez_125{width:100%;height:100%;max-width:var(--content-container--width);padding:var(--spacing--xl);align-self:center;gap:var(--spacing--xl);flex-direction:column;display:flex;position:relative;overflow-y:auto}._menuButton_16sez_138{margin:var(--spacing--sm);position:absolute;top:0;left:0}._isMobileDevice_16sez_144 ._menuButton_16sez_138{margin:var(--spacing--2xs)}._header_16sez_148{justify-content:space-between;align-items:flex-start;gap:var(--spacing--lg);width:100%;display:flex}._headerContent_16sez_156{gap:var(--spacing--3xs);flex-direction:column;display:flex}._empty_16sez_162{flex:1;justify-content:center;align-items:center;width:100%;min-height:200px;display:flex}._agentsGrid_16sez_171{gap:var(--spacing--2xs);flex-direction:column;display:flex}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./constants-legacy-DWgCMxGw.js","./constants-legacy-C3KSnBP-.js","./chat.store-legacy-CXV3CIkR.js","./fileUtils-legacy-BxJhdvLk.js","./SkeletonAgentCard-legacy-3b726iP0.js","./ChatLayout-legacy-B1gAh5rh.js"],(function(e,t){var n,a,s,l,i,o,d,c,r,u,g,f,y,_,p,h,m,v,b,w,x,z,j,k,T,A,$,C,E,D,I,B,M,S,G;return{setters:[function(e){n=e.$,a=e.A,s=e.C,l=e.E,i=e.Ft,o=e.N,d=e.S,c=e.Sn,r=e.T,u=e.Wt,g=e._,f=e._n,y=e.gt,_=e.j,p=e.rt,h=e.w,m=e.yt},function(e){v=e.at,b=e.y},function(e){w=e.Zi,x=e.ut},function(e){z=e.t},function(e){j=e.t},function(e){k=e.zr},function(e){T=e.d},function(e){A=e.t},function(e){$=e.c,C=e.w},function(e){E=e.n,D=e.r,I=e.t},function(e){B=e.n,M=e.t}],execute:function(){(S=document.createElement("style")).textContent="._container_16sez_125{width:100%;height:100%;max-width:var(--content-container--width);padding:var(--spacing--xl);align-self:center;gap:var(--spacing--xl);flex-direction:column;display:flex;position:relative;overflow-y:auto}._menuButton_16sez_138{margin:var(--spacing--sm);position:absolute;top:0;left:0}._isMobileDevice_16sez_144 ._menuButton_16sez_138{margin:var(--spacing--2xs)}._header_16sez_148{justify-content:space-between;align-items:flex-start;gap:var(--spacing--lg);width:100%;display:flex}._headerContent_16sez_156{gap:var(--spacing--3xs);flex-direction:column;display:flex}._empty_16sez_162{flex:1;justify-content:center;align-items:center;width:100%;min-height:200px;display:flex}._agentsGrid_16sez_171{gap:var(--spacing--2xs);flex-direction:column;display:flex}\n/*$vite$:1*/",document.head.appendChild(S);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(H=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[H]="70508dc5-a04c-4bac-a69e-e8ec97bd7940",t._sentryDebugIdIdentifier="sentry-dbid-70508dc5-a04c-4bac-a69e-e8ec97bd7940")}catch(t){}var t,H;G=o({__name:"ChatWorkflowAgentsView",setup(e){const t=A(),o=j(),z=x(),S=b(T),G=v(),H=i({search:"",sortBy:"updatedAt"}),{credentialsByProvider:L}=B(o.currentUserId??"anonymous"),R=d((()=>t.agentsReady)),V=d((()=>t.agents.n8n.models)),W=d((()=>$(V.value,H.value)));return y(L,(e=>{e&&t.fetchAgents(e,{minLoadingTime:250})}),{immediate:!0}),(e,t)=>(n(),h(M,null,{default:m((()=>[s("div",{class:f([e.$style.container,{[e.$style.isMobileDevice]:u(S)}])},[s("div",{class:f(e.$style.header)},[s("div",{class:f(e.$style.headerContent)},[_(u(w),{tag:"h1",size:"xlarge",bold:""},{default:m((()=>[a(c(u(G).baseText("chatHub.workflowAgents.title")),1)])),_:1}),_(u(w),{color:"text-light"},{default:m((()=>[a(c(u(G).baseText("chatHub.workflowAgents.description")),1)])),_:1})],2)],2),R.value&&V.value.length>0?(n(),h(E,{key:0,modelValue:H.value,"onUpdate:modelValue":t[0]||(t[0]=e=>H.value=e)},null,8,["modelValue"])):r("",!0),R.value?0===W.value.length?(n(),l("div",{key:2,class:f(e.$style.empty)},[_(u(w),{color:"text-light",size:"medium"},{default:m((()=>[a(c(0===V.value.length?u(G).baseText("chatHub.workflowAgents.empty.noAgents"):u(G).baseText("chatHub.workflowAgents.empty.noMatch")),1)])),_:1})],2)):(n(),l("div",{key:3,class:f(e.$style.agentsGrid)},[(n(!0),l(g,null,p(W.value,(e=>(n(),h(D,{key:u(C)(e.model),agent:e,onEdit:t=>async function(e){if("n8n"!==e.provider);else{const t=z.resolve({name:k.WORKFLOW,params:{name:e.workflowId}});window.open(t.href,"_blank")}}(e.model)},null,8,["agent","onEdit"])))),128))],2)):(n(),l("div",{key:1,class:f(e.$style.agentsGrid)},[(n(),l(g,null,p(5,(e=>_(I,{key:e}))),64))],2))],2)])),_:1}))}}),e("default",z(G,[["__cssModules",{$style:{container:"_container_16sez_125",menuButton:"_menuButton_16sez_138",isMobileDevice:"_isMobileDevice_16sez_144",header:"_header_16sez_148",headerContent:"_headerContent_16sez_156",empty:"_empty_16sez_162",agentsGrid:"_agentsGrid_16sez_171"}}]]))}}}));
//# sourceMappingURL=ChatWorkflowAgentsView-legacy-c6nwt71a.js.map
@@ -1 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`89e623ac-c6a4-4358-ad3d-28f2c24bf9e5`,e._sentryDebugIdIdentifier=`sentry-dbid-89e623ac-c6a4-4358-ad3d-28f2c24bf9e5`)})()}catch{}import{n as e}from"./ParameterInputList-CBvuoxrE.js";export{e as default};
@@ -1 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./ParameterInputList-legacy-DrtMXp0k.js"],(function(e,n){var t;return{setters:[function(e){t=e.n}],execute:function(){try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(d=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[d]="753a558c-25ce-4cd2-abb4-6cf9b23123cb",n._sentryDebugIdIdentifier="sentry-dbid-753a558c-25ce-4cd2-abb4-6cf9b23123cb")}catch(n){}var n,d;e("default",t)}}}));
@@ -1 +0,0 @@
._container_b6vvo_125{justify-content:right;align-items:center;gap:var(--spacing--2xs);padding:var(--spacing--sm);display:flex}._separator_b6vvo_133{height:var(--border-width);background:var(--color--foreground);margin-right:var(--spacing--sm);margin-left:var(--spacing--sm)}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`1614e1a1-fc1a-4013-b017-9e3a0a001830`,e._sentryDebugIdIdentifier=`sentry-dbid-1614e1a1-fc1a-4013-b017-9e3a0a001830`)})()}catch{}import{o as e}from"./chunk-qwjtxq2F.js";import{$ as t,A as n,C as r,E as i,Ft as a,Ht as o,N as s,O as c,S as l,Sn as u,T as d,Wt as f,X as p,_ as m,_n as h,bt as g,gt as _,j as v,ot as y,w as b,yt as x}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{nt as S}from"./core-DF2nhIlg.js";import{Qi as C,Xi as w,Zi as T,nt as E,ut as D}from"./src-uxLNA16N.js";import{t as O}from"./_plugin-vue_export-helper-CRKuwEII.js";import{r as k,t as A,w as j}from"./users.store-Dxl3e12e.js";import{rs as M,zr as N}from"./constants-B5Twj8pV.js";import{n as P}from"./exports-C3RP5TD8.js";import{t as F}from"./communityNodes.store-DZbgAlSt.js";import{t as I}from"./semver-ly6oggXC.js";var L=s({__name:`QuickConnectBanner`,props:{text:{}},setup(e){return(n,i)=>{let a=y(`n8n-html`);return e.text?(t(),b(f(w),{key:0,theme:`secondary`,iconless:``,"data-test-id":`quick-connect-banner`},{default:x(()=>[g(r(`div`,null,null,512),[[a,e.text]])]),_:1})):d(``,!0)}}}),R=e(I(),1);async function z(e){let t=await F().getInstalledPackage(e),n=j().communityNodeType(e);if(!t)return;let r=()=>!t?.updateAvailable||!n?!1:R.default.gt(t.updateAvailable,n.npmVersion);return{...t,unverifiedUpdate:r()}}function B(e){let t=F(),n=A(),r=a(void 0),i=l(()=>o(e)?.split(`.`)[0]??``),s=l(()=>{let t=o(e);return t?M(t):!1}),c=async()=>{if(!(!i.value||!s.value))return r.value=await z(i.value),r.value};return _(()=>t.installedPackages[i.value],async e=>{!i.value||!e||await c()},{deep:!0}),p(async()=>{!i.value||!s.value||await c()}),{installedPackage:r,isUpdateCheckAvailable:l(()=>s.value&&n.isAdminOrOwner&&!r.value?.unverifiedUpdate),isCommunityNode:s,initInstalledPackage:c}}var V=O(s({__name:`CommunityNodeFooter`,props:{packageName:{},showManage:{type:Boolean}},setup(e){let o=e,s=D(),c=a(`https://registry.npmjs.org/${o.packageName}`),{installedPackage:l}=B(o.packageName);async function g(){await s.push({name:N.COMMUNITY_NODES})}async function _(){c.value&&window.open(c.value,`_blank`)}async function y(e){let t=`https://registry.npmjs.org/${e}`;try{let e=await fetch(t);if(!e.ok)throw Error(`Could not get metadata for package`);let n=await e.json();n.bugs?.url&&(c.value=n.bugs.url)}catch(e){P(e)}}return p(async()=>{o.packageName&&await y(o.packageName)}),(e,a)=>(t(),i(`div`,null,[r(`div`,{class:h(e.$style.separator)},null,2),r(`div`,{class:h(e.$style.container)},[f(l)?(t(),b(f(T),{key:0,size:`small`,color:`text-light`,style:{"margin-right":`auto`}},{default:x(()=>[n(` Package version `+u(f(l).installedVersion)+` (`+u(f(l).updateAvailable&&!f(l).unverifiedUpdate?f(S).baseText(`communityNodeFooter.legacy`):f(S).baseText(`nodeSettings.latest`))+`) `,1)]),_:1})):d(``,!0),o.showManage?(t(),i(m,{key:1},[v(f(E),{theme:`text`,onClick:g},{default:x(()=>[v(f(T),{size:`small`,color:`primary`,bold:``},{default:x(()=>[n(u(f(S).baseText(`communityNodeFooter.manage`)),1)]),_:1})]),_:1}),v(f(T),{size:`small`,style:{color:`var(--color--foreground)`},bold:``},{default:x(()=>[...a[0]||=[n(`|`,-1)]]),_:1})],64)):d(``,!0),v(f(E),{theme:`text`,onClick:_},{default:x(()=>[v(f(T),{size:`small`,color:`primary`,bold:``},{default:x(()=>[n(u(f(S).baseText(`communityNodeFooter.reportIssue`)),1)]),_:1})]),_:1})],2)]))}}),[[`__cssModules`,{$style:{container:`_container_b6vvo_125`,separator:`_separator_b6vvo_133`}}]]),H=s({__name:`CommunityNodeUpdateInfo`,props:{packageName:{},source:{}},setup(e){let r=e,{openCommunityPackageUpdateConfirmModal:i}=k(),a=()=>{r.packageName&&i(r.packageName,r.source)};return(e,i)=>(t(),b(f(w),{theme:`secondary`,iconless:!0,style:{"margin-bottom":`var(--spacing--sm)`}},c({default:x(()=>[n(u(f(S).baseText(`communityNodeUpdateInfo.available`))+` `,1)]),_:2},[r.packageName?{name:`trailingContent`,fn:x(()=>[v(f(C),{variant:`subtle`,onClick:a},{default:x(()=>[n(u(f(S).baseText(`generic.update`)),1)]),_:1})]),key:`0`}:void 0]),1024))}});export{L as i,V as n,B as r,H as t};
//# sourceMappingURL=CommunityNodeUpdateInfo-CAoYyYrr.js.map
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
._body_di8ei_125{gap:var(--spacing--sm);padding:var(--spacing--md);flex-direction:column;display:flex}._header_di8ei_132{justify-content:space-between;align-items:center;gap:var(--spacing--xs);display:flex}._title_di8ei_139{font-size:var(--font-size--xl);margin:0}._textBlock_di8ei_144{gap:var(--spacing--2xs);font-size:var(--font-size--2xs);line-height:var(--line-height--xl);margin-bottom:var(--spacing--sm);color:var(--color--text--tint-1);flex-direction:column;display:flex}._osTabs_di8ei_154{border:var(--border);border-radius:var(--radius);padding:var(--spacing--4xs);gap:var(--spacing--4xs);background:var(--color--foreground);grid-template-columns:repeat(3,1fr);display:grid}._osTab_di8ei_154{justify-content:center;align-items:center;gap:var(--spacing--2xs);border-radius:var(--radius);padding:var(--spacing--2xs);color:var(--color--text--tint-1);font-weight:var(--font-weight--bold);cursor:pointer;opacity:.7;background:0 0;border:0;display:flex}._osTabActive_di8ei_179{background:var(--color--background--light-2);color:var(--color--text);opacity:1}._osTabIcon_di8ei_185{width:var(--spacing--sm);height:var(--spacing--sm)}._commandCard_di8ei_190{border:var(--border);border-radius:var(--radius);overflow:hidden}._commandRow_di8ei_196{justify-content:space-between;align-items:center;gap:var(--spacing--2xs);padding:var(--spacing--xs);background:var(--color--background--shade-2);display:flex}._commandText_di8ei_205{color:var(--color--text--tint-1);white-space:nowrap;font-size:var(--font-size--xs);font-family:monospace;overflow:auto}._commandText_di8ei_205::-webkit-scrollbar{display:none}._commandText_di8ei_205{-ms-overflow-style:none;scrollbar-width:none}._commandTextFaded_di8ei_220{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 24px),transparent 100%);mask-image:linear-gradient(90deg,#000 calc(100% - 24px),transparent 100%)}._copyButton_di8ei_224{color:var(--color--text);flex-shrink:0}._connectedBlock_di8ei_229{gap:var(--spacing--3xs);padding:var(--spacing--2xs) var(--spacing--xs);background:var(--color--foreground--tint-2);border-radius:var(--radius--lg);flex-direction:column;display:flex}._statusRow_di8ei_238{align-items:center;gap:var(--spacing--3xs);display:flex}._statusDot_di8ei_244{width:var(--spacing--2xs);height:var(--spacing--2xs);border-radius:50%;flex-shrink:0}._statusDotConnected_di8ei_251{background:var(--color--success)}._directoryRow_di8ei_255{padding-left:calc(var(--spacing--2xs) + var(--spacing--3xs))}._toolCategories_di8ei_259{gap:var(--spacing--4xs);padding-left:calc(var(--spacing--2xs) + var(--spacing--3xs));flex-wrap:wrap;display:flex}._categoryPill_di8ei_266{align-items:center;gap:var(--spacing--5xs);padding:var(--spacing--5xs) var(--spacing--3xs);background:var(--color--background);border:var(--border);border-radius:var(--radius);font-size:var(--font-size--3xs);color:var(--color--text--tint-1);display:inline-flex}._categoryPillDisabled_di8ei_278{opacity:.4}._categorySublabel_di8ei_282{color:var(--color--text--tint-1)}._browserHint_di8ei_286{font-size:var(--font-size--xs);line-height:var(--line-height--xl)}._waitingRow_di8ei_291{font-size:var(--font-size--2xs);align-items:center;gap:var(--spacing--2xs);padding:var(--spacing--2xs) var(--spacing--xs);border-top:var(--border);color:var(--color--text--tint-1);display:flex}._instructions_di8ei_301{font-size:var(--font-size--xs);line-height:var(--line-height--xl)}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`82868e29-ff4c-4e8d-a341-7b789c2c0cfd`,e._sentryDebugIdIdentifier=`sentry-dbid-82868e29-ff4c-4e8d-a341-7b789c2c0cfd`)})()}catch{}import{$ as e,N as t,j as n,w as r,yt as i}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{t as a}from"./Modal-BltzC-8Z.js";import{t as o}from"./ComputerUseSetupContent-MeWasFab.js";var s=t({__name:`ComputerUseSetupModal`,props:{modalName:{}},setup(t){let s=t;return(t,c)=>(e(),r(a,{name:s.modalName,"show-close":!0,"custom-class":`instance-ai-computer-use-setup-modal`,width:`540`},{content:i(()=>[n(o)]),_:1},8,[`name`]))}});export{s as default};
//# sourceMappingURL=ComputerUseSetupModal-D1oTffWs.js.map
@@ -1 +0,0 @@
.instance-ai-computer-use-setup-modal .el-dialog__header{margin:0;padding:0}.instance-ai-computer-use-setup-modal .el-dialog__body{padding:0}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./Modal-legacy-BQTvvzeX.js","./ComputerUseSetupContent-legacy-Ck9KsqZz.js"],(function(e,n){var t,d,o,a,s,i,u,l;return{setters:[function(e){t=e.$,d=e.N,o=e.j,a=e.w,s=e.yt},function(e){i=e.t},function(e){u=e.t}],execute:function(){(l=document.createElement("style")).textContent=".instance-ai-computer-use-setup-modal .el-dialog__header{margin:0;padding:0}.instance-ai-computer-use-setup-modal .el-dialog__body{padding:0}\n/*$vite$:1*/",document.head.appendChild(l);try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(c=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[c]="8fcc93ed-2144-4d7a-b3a5-3751c316ac29",n._sentryDebugIdIdentifier="sentry-dbid-8fcc93ed-2144-4d7a-b3a5-3751c316ac29")}catch(n){}var n,c;e("default",d({__name:"ComputerUseSetupModal",props:{modalName:{}},setup(e){const n=e;return(e,d)=>(t(),a(i,{name:n.modalName,"show-close":!0,"custom-class":"instance-ai-computer-use-setup-modal",width:"540"},{content:s((()=>[o(u)])),_:1},8,["name"]))}}))}}}));
//# sourceMappingURL=ComputerUseSetupModal-legacy-Bn-7B035.js.map
@@ -1 +0,0 @@
.connection-lost[data-v-6825e866]{align-items:center;display:flex}.connection-lost-content[data-v-6825e866]{align-items:center;gap:var(--spacing--3xs);display:flex}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`b1e0e374-8a7b-4d23-aece-1871b48695e3`,e._sentryDebugIdIdentifier=`sentry-dbid-b1e0e374-8a7b-4d23-aece-1871b48695e3`)})()}catch{}import{$ as e,A as t,C as n,E as r,N as i,S as a,Sn as o,Wt as s,bt as c,it as l,j as u,ot as d,yt as f}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as p}from"./core-DF2nhIlg.js";import{$i as m,Oi as h,Zi as g}from"./src-uxLNA16N.js";import{t as _}from"./_plugin-vue_export-helper-CRKuwEII.js";import{Bt as v}from"./users.store-Dxl3e12e.js";import{t as y}from"./pushConnection.store-B7WeSii3.js";var b={key:0,class:`connection-lost`},x={class:`connection-lost-content`},S=_(i({__name:`ConnectionTracker`,setup(i){let _=y(),S=v(),C=p(),w=a(()=>S.isOnline?_.isConnectionRequested&&!_.isConnected&&!_.isConnecting?{hasError:!0,message:`pushConnection.error.message`,tooltip:`pushConnection.error.tooltip`}:{hasError:!1,message:null,tooltip:null}:{hasError:!0,message:`network.error.message`,tooltip:`network.error.tooltip`});return(i,a)=>{let p=d(`n8n-html`);return e(),r(`span`,null,[w.value.hasError?(e(),r(`div`,b,[u(s(h),{placement:`bottom-end`},{content:f(()=>[c(n(`div`,null,null,512),[[p,s(C).baseText(w.value.tooltip)]])]),default:f(()=>[n(`span`,x,[u(s(m),{icon:`triangle-alert`,color:`warning`}),u(s(g),{size:`small`},{default:f(()=>[t(o(s(C).baseText(w.value.message)),1)]),_:1})])]),_:1})])):l(i.$slots,`default`,{key:1},void 0,!0)])}}}),[[`__scopeId`,`data-v-6825e866`]]);export{S as t};
//# sourceMappingURL=ConnectionTracker-lOCqIjLX.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./pushConnection.store-legacy-BR7E2Of5.js"],(function(e,n){var t,o,s,l,i,r,a,c,d,u,f,g,p,y,b,m,h,v,_,w,E,C,j;return{setters:[function(e){t=e.$,o=e.A,s=e.C,l=e.E,i=e.N,r=e.S,a=e.Sn,c=e.Wt,d=e.bt,u=e.it,f=e.j,g=e.ot,p=e.yt},function(e){y=e.at},function(e){b=e.$i,m=e.Oi,h=e.Zi},function(e){v=e.t},function(e){_=e.Bt},function(e){w=e.t}],execute:function(){(E=document.createElement("style")).textContent=".connection-lost[data-v-6825e866]{align-items:center;display:flex}.connection-lost-content[data-v-6825e866]{align-items:center;gap:var(--spacing--3xs);display:flex}\n/*$vite$:1*/",document.head.appendChild(E);try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(x=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[x]="a4e4d8cc-8902-43e2-9e01-7d8c8d0844b4",n._sentryDebugIdIdentifier="sentry-dbid-a4e4d8cc-8902-43e2-9e01-7d8c8d0844b4")}catch(n){}var n,x;C={key:0,class:"connection-lost"},j={class:"connection-lost-content"},e("t",v(i({__name:"ConnectionTracker",setup(e){const n=w(),i=_(),v=y(),E=r((()=>i.isOnline?!n.isConnectionRequested||n.isConnected||n.isConnecting?{hasError:!1,message:null,tooltip:null}:{hasError:!0,message:"pushConnection.error.message",tooltip:"pushConnection.error.tooltip"}:{hasError:!0,message:"network.error.message",tooltip:"network.error.tooltip"}));return(e,n)=>{const i=g("n8n-html");return t(),l("span",null,[E.value.hasError?(t(),l("div",C,[f(c(m),{placement:"bottom-end"},{content:p((()=>[d(s("div",null,null,512),[[i,c(v).baseText(E.value.tooltip)]])])),default:p((()=>[s("span",j,[f(c(b),{icon:"triangle-alert",color:"warning"}),f(c(h),{size:"small"},{default:p((()=>[o(a(c(v).baseText(E.value.message)),1)])),_:1})])])),_:1})])):u(e.$slots,"default",{key:1},void 0,!0)])}}}),[["__scopeId","data-v-6825e866"]]))}}}));
//# sourceMappingURL=ConnectionTracker-legacy-p0AxN8gg.js.map
@@ -1 +0,0 @@
._contactOwnerHint_qnrnx_125{align-items:center;gap:var(--spacing--sm);padding:var(--spacing--xs);border-radius:.25em;display:flex}._border_qnrnx_133{border:var(--border-width) solid var(--color--foreground)}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`58977dc9-72b8-4b32-b836-547b0cd0584e`,e._sentryDebugIdIdentifier=`sentry-dbid-58977dc9-72b8-4b32-b836-547b0cd0584e`)})()}catch{}import{$ as e,A as t,C as n,E as r,Ft as i,N as a,S as o,Sn as s,T as c,W as l,Wt as u,X as d,_n as f,c as p,j as m,w as h,yt as g}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as _,nt as v}from"./core-DF2nhIlg.js";import{$i as y,Zi as b}from"./src-uxLNA16N.js";import{t as x}from"./_plugin-vue_export-helper-CRKuwEII.js";import{Pn as S,_r as C,at as w,pa as T,s as E,t as D,ua as O,w as k,z as A}from"./users.store-Dxl3e12e.js";import{t as j}from"./settings.store-CpKucf5G.js";import{t as M}from"./communityNodes.store-DZbgAlSt.js";import{t as N}from"./useCanvasOperations-D-N30WTl.js";function P(){let e=M(),t=k(),n=w(),r=E(),a=o(()=>r.workflowId?T(O(r.workflowId)):void 0),s=D(),c=i(!1),u=S(),d=N(),f=C(),p=j(),m=async e=>{let n=await t.getCommunityNodeAttributes(e);if(n)return n.npmVersion};return{installNode:async r=>{if(!s.isAdminOrOwner){let e=Error(`User is not an owner or admin`);return u.showError(e,v.baseText(`settings.communityNodes.messages.install.error`)),{success:!1,error:e}}r.telemetry&&f.track(`user started cnr package install`,{input_string:r.packageName,has_quick_connect:r.telemetry.hasQuickConnect,source:r.telemetry.source});try{c.value=!0,r.type===`verified`&&!p.isUnverifiedPackagesEnabled?await e.installPackage(r.packageName,!0,await m(r.nodeType)):await e.installPackage(r.packageName),await Promise.all([t.getNodeTypes(),t.fetchCommunityNodePreviews(),n.fetchCredentialTypes(!0)]),await l();let i=r.nodeType,o=a.value?.allNodes??[];if(i&&o.length){let e=o.filter(e=>e.type===A(i));d.initializeUnknownNodes(e)}return u.showMessage({title:v.baseText(`settings.communityNodes.messages.install.success`),type:`success`}),{success:!0}}catch(e){return u.showError(e,v.baseText(`settings.communityNodes.messages.install.error`)),{success:!1,error:e}}finally{c.value=!1}},loading:c}}var F={style:{"padding-bottom":`8px`}},I=x(a({__name:`ContactAdministratorToInstall`,props:{box:{type:Boolean}},setup(i){let a=i,l=p(),v=D(),x=_(),S=o(()=>v.allUsers.filter(e=>e.role?.includes(`owner`)).map(e=>e.email)),C=o(()=>({[l.contactOwnerHint]:!0,[l.border]:a.box}));return d(async()=>{await v.fetchUsers({filter:{isOwner:!0}})}),(i,o)=>(e(),r(`div`,{class:f(C.value)},[a.box?(e(),h(u(y),{key:0,color:`text-light`,icon:`info`,size:`large`})):c(``,!0),m(u(b),{color:`text-base`,size:`medium`},{default:g(()=>[n(`div`,F,s(u(x).baseText(`communityNodeInfo.contact.admin`)),1),S.value.length?(e(),h(u(b),{key:0,bold:``},{default:g(()=>[t(s(S.value.join(`, `)),1)]),_:1})):c(``,!0)]),_:1})],2))}}),[[`__cssModules`,{$style:{contactOwnerHint:`_contactOwnerHint_qnrnx_125`,border:`_border_qnrnx_133`}}]]);export{P as n,I as t};
//# sourceMappingURL=ContactAdministratorToInstall-CM-cZJOM.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./settings.store-legacy-BTMFVQ6D.js","./communityNodes.store-legacy-DprTKjYN.js","./useCanvasOperations-legacy-NhVcLoRd.js"],(function(e,t){var n,s,o,r,a,i,c,l,d,u,f,y,g,m,p,w,b,_,v,h,x,k,N,T,j,E,C,I,O,P,q,A,S,U,$,z,D;return e("n",(function(){const e=S(),t=P(),n=j(),s=C(),o=c((()=>s.workflowId?E(O(s.workflowId)):void 0)),r=I(),i=a(!1),l=N(),d=U(),f=T(),y=A();return{installNode:async s=>{if(!r.isAdminOrOwner){const e=new Error("User is not an owner or admin");return l.showError(e,v.baseText("settings.communityNodes.messages.install.error")),{success:!1,error:e}}s.telemetry&&f.track("user started cnr package install",{input_string:s.packageName,has_quick_connect:s.telemetry.hasQuickConnect,source:s.telemetry.source});try{i.value=!0,"verified"!==s.type||y.isUnverifiedPackagesEnabled?await e.installPackage(s.packageName):await e.installPackage(s.packageName,!0,await(async e=>{const n=await t.getCommunityNodeAttributes(e);if(n)return n.npmVersion})(s.nodeType)),await Promise.all([t.getNodeTypes(),t.fetchCommunityNodePreviews(),n.fetchCredentialTypes(!0)]),await u();const r=s.nodeType,a=o.value?.allNodes??[];if(r&&a.length){const e=a.filter((e=>e.type===q(r)));d.initializeUnknownNodes(e)}return l.showMessage({title:v.baseText("settings.communityNodes.messages.install.success"),type:"success"}),{success:!0}}catch(a){return l.showError(a,v.baseText("settings.communityNodes.messages.install.error")),{success:!1,error:a}}finally{i.value=!1}},loading:i}})),{setters:[function(e){n=e.$,s=e.A,o=e.C,r=e.E,a=e.Ft,i=e.N,c=e.S,l=e.Sn,d=e.T,u=e.W,f=e.Wt,y=e.X,g=e._n,m=e.c,p=e.j,w=e.w,b=e.yt},function(e){_=e.at,v=e.nt},function(e){h=e.$i,x=e.Zi},function(e){k=e.t},function(e){N=e.Pn,T=e._r,j=e.at,E=e.pa,C=e.s,I=e.t,O=e.ua,P=e.w,q=e.z},function(e){A=e.t},function(e){S=e.t},function(e){U=e.t}],execute:function(){($=document.createElement("style")).textContent="._contactOwnerHint_qnrnx_125{align-items:center;gap:var(--spacing--sm);padding:var(--spacing--xs);border-radius:.25em;display:flex}._border_qnrnx_133{border:var(--border-width) solid var(--color--foreground)}\n/*$vite$:1*/",document.head.appendChild($);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(a=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[a]="f1c7e285-5f07-4107-8939-e08f3c02a3cc",t._sentryDebugIdIdentifier="sentry-dbid-f1c7e285-5f07-4107-8939-e08f3c02a3cc")}catch(t){}var t,a;z={style:{"padding-bottom":"8px"}},D=i({__name:"ContactAdministratorToInstall",props:{box:{type:Boolean}},setup(e){const t=e,a=m(),i=I(),u=_(),v=c((()=>i.allUsers.filter((e=>e.role?.includes("owner"))).map((e=>e.email)))),k=c((()=>({[a.contactOwnerHint]:!0,[a.border]:t.box})));return y((async()=>{await i.fetchUsers({filter:{isOwner:!0}})})),(e,a)=>(n(),r("div",{class:g(k.value)},[t.box?(n(),w(f(h),{key:0,color:"text-light",icon:"info",size:"large"})):d("",!0),p(f(x),{color:"text-base",size:"medium"},{default:b((()=>[o("div",z,l(f(u).baseText("communityNodeInfo.contact.admin")),1),v.value.length?(n(),w(f(x),{key:0,bold:""},{default:b((()=>[s(l(v.value.join(", ")),1)])),_:1})):d("",!0)])),_:1})],2))}}),e("t",k(D,[["__cssModules",{$style:{contactOwnerHint:"_contactOwnerHint_qnrnx_125",border:"_border_qnrnx_133"}}]]))}}}));
//# sourceMappingURL=ContactAdministratorToInstall-legacy-36hnHxen.js.map
@@ -1 +0,0 @@
._copyText_1cbd0_125 span{color:var(--color--text);overflow-wrap:break-word;font-family:Monaco,Consolas}._copyText_1cbd0_125{padding:var(--spacing--xs);background-color:var(--color--background--light-2);border:var(--border);border-radius:var(--radius);cursor:pointer;font-weight:var(--font-weight--regular);position:relative}._copyText_1cbd0_125:hover{--display-copy-button:flex;width:100%}._noHover_1cbd0_145{cursor:default}._large_1cbd0_149 span{font-size:var(--font-size--sm);line-height:1.5}._medium_1cbd0_154 span{font-size:var(--font-size--xs);line-height:1}._collapsed_1cbd0_159{white-space:nowrap;overflow:hidden}._copyButton_1cbd0_164{display:var(--display-copy-button,none);padding:var(--spacing--xs);background-color:var(--color--background--light-2);border-radius:var(--radius);align-items:center;height:100%;position:absolute;top:0;right:0}._copyButton_1cbd0_164 span{font-family:unset}._hint_1cbd0_180{margin-top:var(--spacing--2xs);font-size:var(--font-size--2xs);line-height:var(--line-height--lg);font-weight:var(--font-weight--regular);word-break:normal}
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`814f6eb8-1cf5-4a6d-9aad-4b3bd2105d49`,e._sentryDebugIdIdentifier=`sentry-dbid-814f6eb8-1cf5-4a6d-9aad-4b3bd2105d49`)})()}catch{}import{$ as e,C as t,E as n,N as r,Sn as i,T as a,Wt as o,_n as s,j as c,yt as l}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as u}from"./core-DF2nhIlg.js";import{dt as d}from"./src-uxLNA16N.js";import{t as f}from"./_plugin-vue_export-helper-CRKuwEII.js";import{Pn as p}from"./users.store-Dxl3e12e.js";import{t as m}from"./useClipboard-B_9seI_K.js";var h=f(r({__name:`CopyInput`,props:{label:{default:``},hint:{default:``},value:{default:``},copyButtonText:{default:u().baseText(`generic.copy`)},toastTitle:{default:u().baseText(`generic.copiedToClipboard`)},toastMessage:{},size:{default:`medium`},collapse:{type:Boolean},redactValue:{type:Boolean},disableCopy:{type:Boolean,default:!1}},emits:[`copy`],setup(r,{emit:u}){let f=r,h=u,g=m(),{showMessage:_}=p();function v(){f.disableCopy||(h(`copy`),g.copy(f.value??``),_({title:f.toastTitle,message:f.toastMessage,type:`success`}))}return(u,f)=>(e(),n(`div`,null,[c(o(d),{label:r.label},{default:l(()=>[t(`div`,{class:s({[u.$style.copyText]:!0,[u.$style[r.size]]:!0,[u.$style.collapsed]:r.collapse,[u.$style.noHover]:r.disableCopy,"ph-no-capture":r.redactValue}),"data-test-id":`copy-input`,onClick:v},[t(`span`,{ref:`copyInputValue`},i(r.value),513),r.disableCopy?a(``,!0):(e(),n(`div`,{key:0,class:s(u.$style.copyButton)},[t(`span`,null,i(r.copyButtonText),1)],2))],2)]),_:1},8,[`label`]),r.hint?(e(),n(`div`,{key:0,class:s(u.$style.hint)},i(r.hint),3)):a(``,!0)]))}}),[[`__cssModules`,{$style:{copyText:`_copyText_1cbd0_125`,noHover:`_noHover_1cbd0_145`,large:`_large_1cbd0_149`,medium:`_medium_1cbd0_154`,collapsed:`_collapsed_1cbd0_159`,copyButton:`_copyButton_1cbd0_164`,hint:`_hint_1cbd0_180`}}]]);export{h as t};
//# sourceMappingURL=CopyInput-TNaHeiBV.js.map
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./useClipboard-legacy-DmgA4MPw.js"],(function(e,t){var o,n,a,l,s,i,d,r,c,u,p,y,f,b,_,g,h;return{setters:[function(e){o=e.$,n=e.C,a=e.E,l=e.N,s=e.Sn,i=e.T,d=e.Wt,r=e._n,c=e.j,u=e.yt},function(e){p=e.at},function(e){y=e.dt},function(e){f=e.t},function(e){b=e.Pn},function(e){_=e.t}],execute:function(){(g=document.createElement("style")).textContent="._copyText_1cbd0_125 span{color:var(--color--text);overflow-wrap:break-word;font-family:Monaco,Consolas}._copyText_1cbd0_125{padding:var(--spacing--xs);background-color:var(--color--background--light-2);border:var(--border);border-radius:var(--radius);cursor:pointer;font-weight:var(--font-weight--regular);position:relative}._copyText_1cbd0_125:hover{--display-copy-button:flex;width:100%}._noHover_1cbd0_145{cursor:default}._large_1cbd0_149 span{font-size:var(--font-size--sm);line-height:1.5}._medium_1cbd0_154 span{font-size:var(--font-size--xs);line-height:1}._collapsed_1cbd0_159{white-space:nowrap;overflow:hidden}._copyButton_1cbd0_164{display:var(--display-copy-button,none);padding:var(--spacing--xs);background-color:var(--color--background--light-2);border-radius:var(--radius);align-items:center;height:100%;position:absolute;top:0;right:0}._copyButton_1cbd0_164 span{font-family:unset}._hint_1cbd0_180{margin-top:var(--spacing--2xs);font-size:var(--font-size--2xs);line-height:var(--line-height--lg);font-weight:var(--font-weight--regular);word-break:normal}\n/*$vite$:1*/",document.head.appendChild(g);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(v=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[v]="52eeaf20-2bb0-44e3-a6a2-f20bfbf29291",t._sentryDebugIdIdentifier="sentry-dbid-52eeaf20-2bb0-44e3-a6a2-f20bfbf29291")}catch(t){}var t,v;h=l({__name:"CopyInput",props:{label:{default:""},hint:{default:""},value:{default:""},copyButtonText:{default:p().baseText("generic.copy")},toastTitle:{default:p().baseText("generic.copiedToClipboard")},toastMessage:{},size:{default:"medium"},collapse:{type:Boolean},redactValue:{type:Boolean},disableCopy:{type:Boolean,default:!1}},emits:["copy"],setup(e,{emit:t}){const l=e,p=t,f=_(),{showMessage:g}=b();function h(){l.disableCopy||(p("copy"),f.copy(l.value??""),g({title:l.toastTitle,message:l.toastMessage,type:"success"}))}return(t,l)=>(o(),a("div",null,[c(d(y),{label:e.label},{default:u((()=>[n("div",{class:r({[t.$style.copyText]:!0,[t.$style[e.size]]:!0,[t.$style.collapsed]:e.collapse,[t.$style.noHover]:e.disableCopy,"ph-no-capture":e.redactValue}),"data-test-id":"copy-input",onClick:h},[n("span",{ref:"copyInputValue"},s(e.value),513),e.disableCopy?i("",!0):(o(),a("div",{key:0,class:r(t.$style.copyButton)},[n("span",null,s(e.copyButtonText),1)],2))],2)])),_:1},8,["label"]),e.hint?(o(),a("div",{key:0,class:r(t.$style.hint)},s(e.hint),3)):i("",!0)]))}}),e("t",f(h,[["__cssModules",{$style:{copyText:"_copyText_1cbd0_125",noHover:"_noHover_1cbd0_145",large:"_large_1cbd0_149",medium:"_medium_1cbd0_154",collapsed:"_collapsed_1cbd0_159",copyButton:"_copyButton_1cbd0_164",hint:"_hint_1cbd0_180"}}]]))}}}));
//# sourceMappingURL=CopyInput-legacy-DMYSeVuk.js.map
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`192b0876-5d12-48c9-bd50-13d1501d15a9`,e._sentryDebugIdIdentifier=`sentry-dbid-192b0876-5d12-48c9-bd50-13d1501d15a9`)})()}catch{}import{$ as e,N as t,S as n,Wt as r,_n as i,w as a}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{z as o}from"./src-uxLNA16N.js";import{t as s}from"./_plugin-vue_export-helper-CRKuwEII.js";import{$i as c,at as l,r as u,w as d}from"./users.store-Dxl3e12e.js";import{t as f}from"./useRootStore-Dl-nFeRT.js";var p=s(t({__name:`CredentialIcon`,props:{credentialTypeName:{},size:{},theme:{}},setup(t){let s=t,p=l(),m=f(),h=u(),g=d(),_=n(()=>w(s.credentialTypeName)),v=n(()=>s.theme??h.appliedTheme),y=n(()=>{let e=c(_.value?.icon,v.value);return e?.startsWith(`node:`)?g.getNodeType(e.replace(`node:`,``))?.iconUrl:null}),b=n(()=>{let e=c(y.value??_.value?.iconUrl,v.value);if(e)return m.baseUrl+e}),x=n(()=>b.value?`file`:S.value?`icon`:`unknown`),S=n(()=>{let e=c(_.value?.icon,h.appliedTheme);if(e?.startsWith(`fa:`))return e.replace(`fa:`,``)}),C=n(()=>{let{iconColor:e}=_.value??{};if(e)return`var(--node--icon--color--${e})`});function w(e){if(!e)return null;let t=p.getCredentialTypeByName(e);if(!t)return null;if(t.icon??t.iconUrl)return t;if(t.extends){let e=null;return t.extends.forEach(t=>{e=w(t)}),e}return null}return(n,s)=>(e(),a(r(o),{class:i(n.$style.icon),type:x.value,size:t.size??26,src:b.value,name:S.value,color:C.value},null,8,[`class`,`type`,`size`,`src`,`name`,`color`]))}}),[[`__cssModules`,{$style:{icon:`_icon_6l2me_125`}}]]);export{p as t};
//# sourceMappingURL=CredentialIcon-BDiE034B.js.map
@@ -1 +0,0 @@
._icon_6l2me_125{--node--icon--color:var(--color--foreground--shade-1)}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./useRootStore-legacy-DNC5N_Mv.js"],(function(e,n){var t,l,o,r,i,a,u,s,c,d,f,y,p,g,v;return{setters:[function(e){t=e.$,l=e.N,o=e.S,r=e.Wt,i=e._n,a=e.w},function(e){u=e.z},function(e){s=e.t},function(e){c=e.$i,d=e.at,f=e.r,y=e.w},function(e){p=e.t}],execute:function(){(g=document.createElement("style")).textContent="._icon_6l2me_125{--node--icon--color:var(--color--foreground--shade-1)}\n/*$vite$:1*/",document.head.appendChild(g);try{n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(b=(new n.Error).stack)&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[b]="55bfd942-011a-443d-a355-05fa1316dab5",n._sentryDebugIdIdentifier="sentry-dbid-55bfd942-011a-443d-a355-05fa1316dab5")}catch(n){}var n,b;v=l({__name:"CredentialIcon",props:{credentialTypeName:{},size:{},theme:{}},setup(e){const n=e,l=d(),s=p(),g=f(),v=y(),b=o((()=>$(n.credentialTypeName))),m=o((()=>n.theme??g.appliedTheme)),_=o((()=>{const e=c(b.value?.icon,m.value);return e?.startsWith("node:")?v.getNodeType(e.replace("node:",""))?.iconUrl:null})),h=o((()=>{const e=c(_.value??b.value?.iconUrl,m.value);if(e)return s.baseUrl+e})),w=o((()=>h.value?"file":T.value?"icon":"unknown")),T=o((()=>{const e=c(b.value?.icon,g.appliedTheme);if(e?.startsWith("fa:"))return e.replace("fa:","")})),E=o((()=>{const{iconColor:e}=b.value??{};if(e)return`var(--node--icon--color--${e})`}));function $(e){if(!e)return null;const n=l.getCredentialTypeByName(e);if(!n)return null;if(n.icon??n.iconUrl)return n;if(n.extends){let e=null;return n.extends.forEach((n=>{e=$(n)})),e}return null}return(n,l)=>(t(),a(r(u),{class:i(n.$style.icon),type:w.value,size:e.size??26,src:h.value,name:T.value,color:E.value},null,8,["class","type","size","src","name","color"]))}}),e("t",s(v,[["__cssModules",{$style:{icon:"_icon_6l2me_125"}}]]))}}}));
//# sourceMappingURL=CredentialIcon-legacy-CkbKrTyk.js.map
@@ -1 +0,0 @@
._selectPopper_178ar_125 .el-select-dropdown__list{padding:0}._selectPopper_178ar_125 :has(._newCredential_178ar_128:hover) .hover{background-color:transparent}._selectPopper_178ar_125:not(:has(li)) ._newCredential_178ar_128{box-shadow:none;border-radius:var(--radius);border-top:none}._credentialOption_178ar_137{flex-direction:column;display:flex}._newCredential_178ar_128{gap:var(--spacing--3xs);width:100%;font-weight:var(--font-weight--bold);padding:var(--spacing--xs) var(--spacing--md);background-color:var(--color--background--light-2);color:var(--color--text--shade-1);border:0;border-top:var(--border);box-shadow:var(--shadow--light);clip-path:inset(-12px 0 0);align-items:center;display:flex}._newCredential_178ar_128:not([disabled]){cursor:pointer}._newCredential_178ar_128:not([disabled]):hover{color:var(--color--primary)}._newCredential_178ar_128[disabled]{opacity:.5;cursor:not-allowed}._dropdown_1f3y0_125{align-items:flex-end;gap:var(--spacing--2xs);display:flex}._edit_1f3y0_131{min-width:20px;font-size:var(--font-size--sm);justify-content:center;align-items:center;display:flex}._createButton_1f3y0_139{width:100%}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.18.5`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`4f890257-65b1-4660-aff5-595da51af99b`,e._sentryDebugIdIdentifier=`sentry-dbid-4f890257-65b1-4660-aff5-595da51af99b`)})()}catch{}import{$ as e,A as t,C as n,Ft as r,N as i,S as a,Sn as o,Wt as s,_n as c,j as l,w as u,yt as d}from"./vue.runtime.esm-bundler-CN-_wyDx.js";import{at as f}from"./core-DF2nhIlg.js";import{Qi as p,St as m,Yi as h,Zi as g}from"./src-uxLNA16N.js";import{t as _}from"./_plugin-vue_export-helper-CRKuwEII.js";import{_r as v}from"./users.store-Dxl3e12e.js";import{t as y}from"./Modal-BltzC-8Z.js";import{t as b}from"./CredentialIcon-BDiE034B.js";import{t as x}from"./CredentialPicker-CvzRqFZ7.js";var S=_(i({__name:`CredentialSelectorModal`,props:{modalName:{},data:{}},setup(i){let _=i,S=f(),C=v(),w=r(m()),T=r(_.data.initialValue),E=a(()=>_.data.displayName);function D(e){T.value=e}function O(){T.value=null}function k(e){!T.value||e!==T.value||(T.value=null,e===_.data.initialValue&&_.data.onSelect(null))}function A(e){C.track(`User opened Credential modal`,{credential_type:_.data.credentialType,source:`chat`,new_credential:!e,workflow_id:null})}function j(){T.value&&(_.data.onSelect(T.value),w.value.emit(`close`))}function M(){w.value.emit(`close`)}return(r,a)=>(e(),u(y,{name:i.modalName,"event-bus":w.value,width:`50%`,center:!0,"max-width":`460px`,"min-height":`250px`},{header:d(()=>[n(`div`,{class:c(r.$style.header)},[l(b,{"credential-type-name":i.data.credentialType,size:24,class:c(r.$style.icon)},null,8,[`credential-type-name`,`class`]),l(s(h),{size:`medium`,tag:`h2`,class:c(r.$style.title)},{default:d(()=>[t(o(s(S).baseText(`chatHub.credentials.selector.title`,{interpolate:{provider:E.value}})),1)]),_:1},8,[`class`])],2)]),content:d(()=>[n(`div`,{class:c(r.$style.content)},[l(s(g),{size:`small`,color:`text-base`},{default:d(()=>[t(o(s(S).baseText(`chatHub.credentials.selector.chooseOrCreate`,{interpolate:{provider:E.value}})),1)]),_:1}),n(`div`,{class:c(r.$style.credentialContainer)},[l(x,{class:c(r.$style.credentialPicker),"app-name":E.value,"credential-type":i.data.credentialType,"selected-credential-id":T.value,"show-delete":!0,"hide-create-new":!0,onCredentialSelected:D,onCredentialDeselected:O,onCredentialDeleted:k,onCredentialModalOpened:A},null,8,[`class`,`app-name`,`credential-type`,`selected-credential-id`])],2)],2)]),footer:d(()=>[n(`div`,{class:c(r.$style.footer)},[l(s(p),{variant:`subtle`,onClick:M},{default:d(()=>[t(o(s(S).baseText(`chatHub.credentials.selector.cancel`)),1)]),_:1}),l(s(p),{variant:`solid`,disabled:!T.value,onClick:j},{default:d(()=>[t(o(s(S).baseText(`chatHub.credentials.selector.confirm`)),1)]),_:1},8,[`disabled`])],2)]),_:1},8,[`name`,`event-bus`]))}}),[[`__cssModules`,{$style:{content:`_content_18zaf_125`,footer:`_footer_18zaf_132`,header:`_header_18zaf_140`,icon:`_icon_18zaf_146`,credentialContainer:`_credentialContainer_18zaf_151`,credentialPicker:`_credentialPicker_18zaf_158`}}]]);export{S as default};
//# sourceMappingURL=CredentialSelectorModal-C7Hh4E4W.js.map
@@ -1 +0,0 @@
._content_18zaf_125{gap:var(--spacing--sm);padding:var(--spacing--sm) 0;flex-direction:column;display:flex}._footer_18zaf_132{justify-content:flex-end;align-items:center;gap:var(--spacing--2xs);width:100%;display:flex}._header_18zaf_140{gap:var(--spacing--2xs);align-items:center;display:flex}._icon_18zaf_146{flex-grow:0;flex-shrink:0}._credentialContainer_18zaf_151{align-items:center;gap:var(--spacing--2xs);width:100%;display:flex}._credentialPicker_18zaf_158{width:100%}
@@ -1,2 +0,0 @@
!function(){try{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{}).SENTRY_RELEASE={id:"n8n@2.18.5"}}catch(e){}}(),System.register(["./vue.runtime.esm-bundler-legacy-ycObT6tD.js","./core-legacy-C5POFpBK.js","./src-legacy-CzodYTnl.js","./_plugin-vue_export-helper-legacy-By7kHfvr.js","./users.store-legacy-CRNFiy1R.js","./Modal-legacy-BQTvvzeX.js","./CredentialIcon-legacy-CkbKrTyk.js","./CredentialPicker-legacy-B5cVWlt6.js"],(function(e,t){var a,n,l,i,d,c,s,r,o,u,f,_,p,y,g,v,m,b,h,x,w,C,z;return{setters:[function(e){a=e.$,n=e.A,l=e.C,i=e.Ft,d=e.N,c=e.S,s=e.Sn,r=e.Wt,o=e._n,u=e.j,f=e.w,_=e.yt},function(e){p=e.at},function(e){y=e.Qi,g=e.St,v=e.Yi,m=e.Zi},function(e){b=e.t},function(e){h=e._r},function(e){x=e.t},function(e){w=e.t},function(e){C=e.t}],execute:function(){(z=document.createElement("style")).textContent="._content_18zaf_125{gap:var(--spacing--sm);padding:var(--spacing--sm) 0;flex-direction:column;display:flex}._footer_18zaf_132{justify-content:flex-end;align-items:center;gap:var(--spacing--2xs);width:100%;display:flex}._header_18zaf_140{gap:var(--spacing--2xs);align-items:center;display:flex}._icon_18zaf_146{flex-grow:0;flex-shrink:0}._credentialContainer_18zaf_151{align-items:center;gap:var(--spacing--2xs);width:100%;display:flex}._credentialPicker_18zaf_158{width:100%}\n/*$vite$:1*/",document.head.appendChild(z);try{t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},(T=(new t.Error).stack)&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[T]="5056759c-f1a5-4ba6-b28a-ed7ffcd4ca81",t._sentryDebugIdIdentifier="sentry-dbid-5056759c-f1a5-4ba6-b28a-ed7ffcd4ca81")}catch(t){}var t,T;e("default",b(d({__name:"CredentialSelectorModal",props:{modalName:{},data:{}},setup(e){const t=e,d=p(),b=h(),z=i(g()),T=i(t.data.initialValue),$=c((()=>t.data.displayName));function j(e){T.value=e}function k(){T.value=null}function S(e){T.value&&e===T.value&&(T.value=null,e===t.data.initialValue&&t.data.onSelect(null))}function E(e){b.track("User opened Credential modal",{credential_type:t.data.credentialType,source:"chat",new_credential:!e,workflow_id:null})}function D(){T.value&&(t.data.onSelect(T.value),z.value.emit("close"))}function I(){z.value.emit("close")}return(t,i)=>(a(),f(x,{name:e.modalName,"event-bus":z.value,width:"50%",center:!0,"max-width":"460px","min-height":"250px"},{header:_((()=>[l("div",{class:o(t.$style.header)},[u(w,{"credential-type-name":e.data.credentialType,size:24,class:o(t.$style.icon)},null,8,["credential-type-name","class"]),u(r(v),{size:"medium",tag:"h2",class:o(t.$style.title)},{default:_((()=>[n(s(r(d).baseText("chatHub.credentials.selector.title",{interpolate:{provider:$.value}})),1)])),_:1},8,["class"])],2)])),content:_((()=>[l("div",{class:o(t.$style.content)},[u(r(m),{size:"small",color:"text-base"},{default:_((()=>[n(s(r(d).baseText("chatHub.credentials.selector.chooseOrCreate",{interpolate:{provider:$.value}})),1)])),_:1}),l("div",{class:o(t.$style.credentialContainer)},[u(C,{class:o(t.$style.credentialPicker),"app-name":$.value,"credential-type":e.data.credentialType,"selected-credential-id":T.value,"show-delete":!0,"hide-create-new":!0,onCredentialSelected:j,onCredentialDeselected:k,onCredentialDeleted:S,onCredentialModalOpened:E},null,8,["class","app-name","credential-type","selected-credential-id"])],2)],2)])),footer:_((()=>[l("div",{class:o(t.$style.footer)},[u(r(y),{variant:"subtle",onClick:I},{default:_((()=>[n(s(r(d).baseText("chatHub.credentials.selector.cancel")),1)])),_:1}),u(r(y),{variant:"solid",disabled:!T.value,onClick:D},{default:_((()=>[n(s(r(d).baseText("chatHub.credentials.selector.confirm")),1)])),_:1},8,["disabled"])],2)])),_:1},8,["name","event-bus"]))}}),[["__cssModules",{$style:{content:"_content_18zaf_125",footer:"_footer_18zaf_132",header:"_header_18zaf_140",icon:"_icon_18zaf_146",credentialContainer:"_credentialContainer_18zaf_151",credentialPicker:"_credentialPicker_18zaf_158"}}]]))}}}));
//# sourceMappingURL=CredentialSelectorModal-legacy-B9_P5_Vo.js.map
@@ -1 +0,0 @@
._cardLink_e3ywi_125{--card--padding:0 0 0 var(--spacing--sm);cursor:pointer;align-items:stretch;transition:box-shadow .3s}._cardLink_e3ywi_125:hover{box-shadow:var(--shadow--card-hover)}._cardHeading_e3ywi_135{font-size:var(--font-size--sm);padding:var(--spacing--sm) 0 0;align-items:center;display:flex}._cardDescription_e3ywi_142{min-height:19px;padding:0 0 var(--spacing--sm);align-items:center;display:flex}._cardActions_e3ywi_149{gap:var(--spacing--2xs);padding:0 var(--spacing--sm) 0 0;cursor:default;flex-direction:row;justify-content:center;align-self:stretch;align-items:center;display:flex}._dynamicBadgeText_e3ywi_160{align-items:center;gap:var(--spacing--4xs);font-size:var(--font-size--3xs);height:18px;display:inline-flex}._tooltipContent_e3ywi_168{gap:var(--spacing--4xs);flex-direction:column;display:flex}@media screen and (max-width:991px){._cardLink_e3ywi_125{--card--padding:0 var(--spacing--sm) var(--spacing--sm);--card--append--width:100%;flex-wrap:wrap}._cardActions_e3ywi_149{width:100%;padding:0}._cardBadge_e3ywi_184{margin-right:auto}}._type-input_12nwp_125{--select--dropdown--max-width:265px}._sidebarContainer_12nwp_129 ul{padding:0!important}

Some files were not shown because too many files have changed in this diff Show More