Compare commits
44 Commits
b0bea0bef1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fc902768a1 | |||
| 94eac68da4 | |||
| 557528d85a | |||
| 2f90534877 | |||
| 28db852453 | |||
| 331d0557b0 | |||
| 287629878b | |||
| cec51d6c19 | |||
| 9bc08d994c | |||
| 8be7d5aad2 | |||
| e1f6bd56b0 | |||
| e4bdd85518 | |||
| b4c6a47ce8 | |||
| 597d47f824 | |||
| 44dbf6b93c | |||
| 75b338988d | |||
| 387d2ba2ab | |||
| 3ec79e1923 | |||
| f46ba8cadc | |||
| e34d56e36a | |||
| e24bc743e2 | |||
| 32580781c8 | |||
| d5a219bd50 | |||
| d6713e25f9 | |||
| b21b3937b2 | |||
| f440f88725 | |||
| 408a59bd5c | |||
| 652131a285 | |||
| e986121240 | |||
| bd906dbe15 | |||
| 05de6cc9a4 | |||
| fae2c0120e | |||
| 54d9cdcdc9 | |||
| db4001aaa5 | |||
| b4258edb91 | |||
| aca60696ae | |||
| 926950bd62 | |||
| 9de88a5459 | |||
| 8f5ea34e8b | |||
| 6a70581ef2 | |||
| 3fb0369367 | |||
| dbb4c27535 | |||
| 3a902e7138 | |||
| 3298efe54b |
@@ -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
|
||||
|
||||
@@ -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/
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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 ✓
|
||||
@@ -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/
|
||||
@@ -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 30–60 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 30–60 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
@@ -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
|
||||
@@ -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)
|
||||
@@ -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 +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
Reference in New Issue
Block a user