-
-
Edit Event
-
-
-
-
-
-
-
-
-
-
-
-
- setEditForm({ ...editForm, duration: parseInt(e.target.value) })}
- className="w-full bg-black/40 border border-white/10 rounded p-1"
- />
-
-
-
- setEditForm({ ...editForm, zoom: parseFloat(e.target.value) })}
- className="w-full bg-black/40 border border-white/10 rounded p-1"
- />
-
-
-
-
-
-
-
- setEditForm({ ...editForm, description: e.target.value })}
- className="w-full bg-black/40 border border-white/10 rounded p-1"
- />
-
+ {/* Identity Tag */}
+
+
+
+ Event Builder
+ Manual Mode
- )}
- {/* Event Timeline */}
-
- {events.length === 0 && (
-
No events recorded yet.
- )}
- {events.map((event, index) => (
-
startEditing(event)}
+
+
+ {/* Action Tools */}
+
+
-
- {event.selector}
- {event.motionBlur && (
-
- Blur
-
- )}
- {event.zoom && event.zoom !== 1 && (
-
- x{event.zoom}
-
- )}
-
+
-
{(event.timestamp / 1000).toFixed(1)}s
+
+
-
-
- ))}
+
+
+ {/* Sequence Controls */}
+
+
+
+
+
+
+
+
+
+
+
+
+
- {/* Picking Instructions */}
- {pickingMode && (
-
- Select element to {pickingMode}
+ {/* 2. Event Timeline Popover */}
+ {showEvents && (
+
+
+
+
+
Recording Track
+
{events.length} Actions Recorded
+
+
+
+
+
+ {events.length === 0 ? (
+
+ ) : (
+ events.map((event, index) => (
+
+
+ {index + 1}
+
+
+
+
+ {event.type}
+ {event.duration}ms
+
+
+ {event.selector || 'system:wait'}
+
+
+
+
+
+ ))
+ )}
+
+
)}
+
+ {/* Industrial Selector Highlighter - handled inside iframe via PickingHelper */}
+
+ {/* Picking Tooltip */}
+ {pickingMode && (
+
+
+
+
+
Assigning {pickingMode}
+
+
+
+
+
+ )}
+
+
);
}
diff --git a/components/record-mode/RecordModeVisuals.tsx b/components/record-mode/RecordModeVisuals.tsx
new file mode 100644
index 00000000..6135efe6
--- /dev/null
+++ b/components/record-mode/RecordModeVisuals.tsx
@@ -0,0 +1,189 @@
+'use client';
+
+import React from 'react';
+import { useRecordMode } from './RecordModeContext';
+
+export function RecordModeVisuals({ children }: { children: React.ReactNode }) {
+ const { isActive, isPlaying, zoomLevel, cursorPosition, isBlurry } = useRecordMode();
+ const [mounted, setMounted] = React.useState(false);
+ const [isEmbedded, setIsEmbedded] = React.useState(false);
+ const [iframeUrl, setIframeUrl] = React.useState
(null);
+
+ React.useEffect(() => {
+ setMounted(true);
+ // Explicit non-magical detection
+ const embedded = window.location.search.includes('embedded=true') || window.name === 'record-mode-iframe';
+ setIsEmbedded(embedded);
+
+ if (!embedded) {
+ const url = new URL(window.location.href);
+ url.searchParams.set('embedded', 'true');
+ setIframeUrl(url.toString());
+ }
+ }, [isEmbedded]);
+
+ // Hydration Guard: Match server on first render
+ if (!mounted) return <>{children}>;
+
+ // Recursion Guard: If we are already in an embedded iframe,
+ // strictly return just the children to prevent Inception.
+ if (isEmbedded) {
+ return (
+ <>
+
+ {children}
+ >
+ );
+ }
+
+ return (
+ <>
+ {/* Global Style for Body Lock */}
+ {isActive && (
+
+ )}
+
+
+ {/* Studio Background - Only visible when active */}
+ {isActive && (
+
+ )}
+
+
+
+
+ {isActive && (
+ <>
+
+
+
+ >
+ )}
+
+
+ {isActive && iframeUrl ? (
+
+ ) : (
+
+ {children}
+
+ )}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/components/record-mode/ToolCoordinator.tsx b/components/record-mode/ToolCoordinator.tsx
new file mode 100644
index 00000000..b6163d0f
--- /dev/null
+++ b/components/record-mode/ToolCoordinator.tsx
@@ -0,0 +1,63 @@
+'use client';
+
+import React, { useState, useEffect } from 'react';
+import { useRecordMode } from './RecordModeContext';
+import { useSearchParams } from 'next/navigation';
+import { FeedbackOverlay } from '@mintel/next-feedback';
+import { RecordModeOverlay } from './RecordModeOverlay';
+import { PickingHelper } from './PickingHelper';
+import { config } from '@/lib/config';
+
+export function ToolCoordinator({ isEmbedded: isEmbeddedProp }: { isEmbedded?: boolean }) {
+ const { isActive, setIsActive, isFeedbackActive, setIsFeedbackActive } = useRecordMode();
+ const [isEmbedded, setIsEmbedded] = useState(false);
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ const embedded =
+ isEmbeddedProp ||
+ window.location.search.includes('embedded=true') ||
+ window.name === 'record-mode-iframe' ||
+ (window.self !== window.top);
+ setIsEmbedded(embedded);
+ }, [isEmbeddedProp]);
+
+ if (!mounted) return null;
+
+ // ABSOLUTE Priority 1: Inside Iframe - ONLY Rendering PickingHelper
+ if (isEmbedded) {
+ return ;
+ }
+
+ // ABSOLUTE Priority 2: Record Mode Studio Active - NO OTHER TOOLS ALLOWED
+ if (isActive) {
+ return ;
+ }
+
+ // Priority 3: Feedback Tool Active - NO OTHER TOOLS ALLOWED
+ if (isFeedbackActive) {
+ return (
+ setIsFeedbackActive(active)}
+ />
+ );
+ }
+
+ // Baseline: Both toggle buttons (inactive state)
+ // Only render if neither is active to prevent any overlapping residues
+ // IMPORTANT: FeedbackOverlay must be rendered with isActive={false} to provide the toggle button,
+ // but only if Record Mode is not active.
+ return (
+
+ {config.feedbackEnabled && (
+ setIsFeedbackActive(active)}
+ />
+ )}
+
+
+ );
+}
diff --git a/directus/schema/minimal_schema.yaml b/directus/schema/minimal_schema.yaml
new file mode 100644
index 00000000..b110382d
--- /dev/null
+++ b/directus/schema/minimal_schema.yaml
@@ -0,0 +1,83 @@
+version: 1
+directus: 11.14.1
+vendor: postgres
+collections:
+ - collection: contact_submissions
+ meta:
+ accountability: all
+ archive_app_filter: true
+ collapse: open
+ collection: contact_submissions
+ color: '#002b49'
+ display_template: '{{name}} | {{email}}'
+ hidden: false
+ icon: contact_mail
+ singleton: false
+ schema:
+ name: contact_submissions
+fields:
+ - collection: contact_submissions
+ field: id
+ type: uuid
+ meta:
+ collection: contact_submissions
+ field: id
+ hidden: true
+ sort: 1
+ schema:
+ name: id
+ table: contact_submissions
+ data_type: uuid
+ is_nullable: false
+ is_primary_key: true
+ - collection: contact_submissions
+ field: name
+ type: string
+ meta:
+ collection: contact_submissions
+ field: name
+ interface: input
+ sort: 2
+ schema:
+ name: name
+ table: contact_submissions
+ data_type: character varying
+ - collection: contact_submissions
+ field: email
+ type: string
+ meta:
+ collection: contact_submissions
+ field: email
+ interface: input
+ sort: 3
+ schema:
+ name: email
+ table: contact_submissions
+ data_type: character varying
+ - collection: contact_submissions
+ field: message
+ type: text
+ meta:
+ collection: contact_submissions
+ field: message
+ interface: textarea
+ sort: 4
+ schema:
+ name: message
+ table: contact_submissions
+ data_type: text
+ - collection: contact_submissions
+ field: date_created
+ type: timestamp
+ meta:
+ collection: contact_submissions
+ field: date_created
+ interface: datetime
+ readonly: true
+ sort: 5
+ schema:
+ name: date_created
+ table: contact_submissions
+ data_type: timestamp with time zone
+ default_value: CURRENT_TIMESTAMP
+relations: []
diff --git a/directus/schema/snapshot.yaml b/directus/schema/snapshot.yaml
index a53e669a..b53501b2 100644
--- a/directus/schema/snapshot.yaml
+++ b/directus/schema/snapshot.yaml
@@ -6,51 +6,474 @@ collections:
meta:
accountability: all
archive_app_filter: true
- archive_field: null
- archive_value: null
collapse: open
collection: contact_submissions
color: '#002b49'
- display_template: '{{first_name}} {{last_name}} | {{subject}}'
- group: null
+ display_template: '{{name}} | {{email}}'
hidden: false
icon: contact_mail
- item_duplication_fields: null
- note: null
- preview_url: null
singleton: false
- sort: null
- sort_field: null
- translations: null
- unarchive_value: null
- versioning: false
schema:
name: contact_submissions
- collection: product_requests
meta:
accountability: all
archive_app_filter: true
- archive_field: null
- archive_value: null
collapse: open
collection: product_requests
color: '#002b49'
- display_template: null
- group: null
+ display_template: '{{product_name}} | {{email}}'
hidden: false
icon: inventory
- item_duplication_fields: null
- note: null
- preview_url: null
singleton: false
- sort: null
- sort_field: null
- translations: null
- unarchive_value: null
- versioning: false
schema:
name: product_requests
-fields: []
+ - collection: products
+ meta:
+ accountability: all
+ collection: products
+ icon: inventory_2
+ singleton: false
+ schema:
+ name: products
+ - collection: products_translations
+ meta:
+ accountability: all
+ collection: products_translations
+ hidden: true
+ schema:
+ name: products_translations
+ - collection: visual_feedback
+ meta:
+ accountability: all
+ archive_app_filter: true
+ collapse: open
+ collection: visual_feedback
+ color: '#002b49'
+ display_template: '{{user_name}} | {{type}}: {{text}}'
+ hidden: false
+ icon: feedback
+ singleton: false
+ versioning: false
+ schema:
+ name: visual_feedback
+ - collection: visual_feedback_comments
+ meta:
+ accountability: all
+ archive_app_filter: true
+ collapse: open
+ collection: visual_feedback_comments
+ color: '#002b49'
+ display_template: '{{user_name}}: {{text}}'
+ hidden: false
+ icon: comment
+ singleton: false
+ versioning: false
+ schema:
+ name: visual_feedback_comments
+fields:
+ # contact_submissions
+ - collection: contact_submissions
+ field: id
+ type: uuid
+ meta:
+ collection: contact_submissions
+ field: id
+ hidden: true
+ sort: 1
+ schema:
+ name: id
+ table: contact_submissions
+ data_type: uuid
+ is_nullable: false
+ is_primary_key: true
+ - collection: contact_submissions
+ field: name
+ type: string
+ meta:
+ collection: contact_submissions
+ field: name
+ interface: input
+ sort: 2
+ schema:
+ name: name
+ table: contact_submissions
+ data_type: character varying
+ - collection: contact_submissions
+ field: email
+ type: string
+ meta:
+ collection: contact_submissions
+ field: email
+ interface: input
+ sort: 3
+ schema:
+ name: email
+ table: contact_submissions
+ data_type: character varying
+ - collection: contact_submissions
+ field: message
+ type: text
+ meta:
+ collection: contact_submissions
+ field: message
+ interface: textarea
+ sort: 4
+ schema:
+ name: message
+ table: contact_submissions
+ data_type: text
+ - collection: contact_submissions
+ field: date_created
+ type: timestamp
+ meta:
+ collection: contact_submissions
+ field: date_created
+ interface: datetime
+ readonly: true
+ sort: 5
+ schema:
+ name: date_created
+ table: contact_submissions
+ data_type: timestamp with time zone
+ default_value: CURRENT_TIMESTAMP
+
+ # product_requests
+ - collection: product_requests
+ field: id
+ type: uuid
+ meta:
+ collection: product_requests
+ field: id
+ hidden: true
+ sort: 1
+ schema:
+ name: id
+ table: product_requests
+ data_type: uuid
+ is_nullable: false
+ is_primary_key: true
+ - collection: product_requests
+ field: product_name
+ type: string
+ meta:
+ collection: product_requests
+ field: product_name
+ interface: input
+ sort: 2
+ schema:
+ name: product_name
+ table: product_requests
+ data_type: character varying
+ - collection: product_requests
+ field: email
+ type: string
+ meta:
+ collection: product_requests
+ field: email
+ interface: input
+ sort: 3
+ schema:
+ name: email
+ table: product_requests
+ data_type: character varying
+ - collection: product_requests
+ field: message
+ type: text
+ meta:
+ collection: product_requests
+ field: message
+ interface: textarea
+ sort: 4
+ schema:
+ name: message
+ table: product_requests
+ data_type: text
+ - collection: product_requests
+ field: date_created
+ type: timestamp
+ meta:
+ collection: product_requests
+ field: date_created
+ interface: datetime
+ readonly: true
+ sort: 5
+ schema:
+ name: date_created
+ table: product_requests
+ data_type: timestamp with time zone
+ default_value: CURRENT_TIMESTAMP
+
+ # products
+ - collection: products
+ field: id
+ type: uuid
+ meta:
+ collection: products
+ field: id
+ hidden: true
+ sort: 1
+ schema:
+ name: id
+ table: products
+ data_type: uuid
+ is_nullable: false
+ is_primary_key: true
+
+ # products_translations
+ - collection: products_translations
+ field: id
+ type: integer
+ meta:
+ collection: products_translations
+ field: id
+ hidden: true
+ schema:
+ name: id
+ table: products_translations
+ data_type: integer
+ is_primary_key: true
+ has_auto_increment: true
+
+ # visual_feedback (from current snapshot)
+ - collection: visual_feedback
+ field: id
+ type: uuid
+ meta:
+ collection: visual_feedback
+ field: id
+ hidden: true
+ sort: 1
+ schema:
+ name: id
+ table: visual_feedback
+ data_type: uuid
+ is_nullable: false
+ is_primary_key: true
+ - collection: visual_feedback
+ field: status
+ type: string
+ meta:
+ collection: visual_feedback
+ display: labels
+ interface: select-dropdown
+ sort: 2
+ schema:
+ name: status
+ table: visual_feedback
+ data_type: character varying
+ default_value: open
+ is_nullable: true
+ - collection: visual_feedback
+ field: type
+ type: string
+ meta:
+ collection: visual_feedback
+ display: labels
+ interface: select-dropdown
+ sort: 3
+ schema:
+ name: type
+ table: visual_feedback
+ data_type: character varying
+ is_nullable: true
+ - collection: visual_feedback
+ field: text
+ type: text
+ meta:
+ collection: visual_feedback
+ interface: input-multiline
+ sort: 4
+ schema:
+ name: text
+ table: visual_feedback
+ data_type: text
+ is_nullable: true
+ - collection: visual_feedback
+ field: url
+ type: string
+ meta:
+ collection: visual_feedback
+ interface: input
+ readonly: true
+ sort: 5
+ schema:
+ name: url
+ table: visual_feedback
+ data_type: character varying
+ is_nullable: true
+ - collection: visual_feedback
+ field: user_info_group
+ type: alias
+ meta:
+ collection: visual_feedback
+ field: user_info_group
+ interface: group-detail
+ sort: 6
+ special:
+ - alias
+ - no-data
+ - group
+ - collection: visual_feedback
+ field: user_name
+ type: string
+ meta:
+ collection: visual_feedback
+ field: user_name
+ group: user_info_group
+ interface: input
+ sort: 1
+ schema:
+ name: user_name
+ table: visual_feedback
+ data_type: character varying
+ is_nullable: true
+ - collection: visual_feedback
+ field: user_identity
+ type: string
+ meta:
+ collection: visual_feedback
+ field: user_identity
+ group: user_info_group
+ interface: input
+ readonly: true
+ sort: 2
+ schema:
+ name: user_identity
+ table: visual_feedback
+ data_type: character varying
+ is_nullable: true
+ - collection: visual_feedback
+ field: technical_details_group
+ type: alias
+ meta:
+ collection: visual_feedback
+ field: technical_details_group
+ interface: group-detail
+ sort: 7
+ special:
+ - alias
+ - no-data
+ - group
+ - collection: visual_feedback
+ field: selector
+ type: string
+ meta:
+ collection: visual_feedback
+ field: selector
+ group: technical_details_group
+ interface: input
+ readonly: true
+ sort: 1
+ schema:
+ name: selector
+ table: visual_feedback
+ data_type: character varying
+ is_nullable: true
+ - collection: visual_feedback
+ field: x
+ type: float
+ meta:
+ collection: visual_feedback
+ field: x
+ group: technical_details_group
+ interface: input
+ sort: 2
+ schema:
+ name: x
+ table: visual_feedback
+ data_type: real
+ is_nullable: true
+ - collection: visual_feedback
+ field: 'y'
+ type: float
+ meta:
+ collection: visual_feedback
+ field: 'y'
+ group: technical_details_group
+ interface: input
+ sort: 3
+ schema:
+ name: 'y'
+ table: visual_feedback
+ data_type: real
+ is_nullable: true
+ - collection: visual_feedback
+ field: date_created
+ type: timestamp
+ meta:
+ collection: visual_feedback
+ interface: datetime
+ readonly: true
+ sort: 8
+ schema:
+ name: date_created
+ table: visual_feedback
+ data_type: timestamp with time zone
+ default_value: CURRENT_TIMESTAMP
+ is_nullable: true
+ - collection: visual_feedback_comments
+ field: id
+ type: uuid
+ meta:
+ collection: visual_feedback_comments
+ field: id
+ hidden: true
+ schema:
+ name: id
+ table: visual_feedback_comments
+ data_type: uuid
+ is_primary_key: true
+ - collection: visual_feedback_comments
+ field: feedback_id
+ type: uuid
+ meta:
+ collection: visual_feedback_comments
+ field: feedback_id
+ interface: select-relational
+ sort: 2
+ schema:
+ name: feedback_id
+ table: visual_feedback_comments
+ data_type: uuid
+ - collection: visual_feedback_comments
+ field: user_name
+ type: string
+ meta:
+ collection: visual_feedback_comments
+ field: user_name
+ interface: input
+ sort: 3
+ schema:
+ name: user_name
+ table: visual_feedback_comments
+ data_type: character varying
+ - collection: visual_feedback_comments
+ field: text
+ type: text
+ meta:
+ collection: visual_feedback_comments
+ field: text
+ interface: input-multiline
+ sort: 4
+ schema:
+ name: text
+ table: visual_feedback_comments
+ data_type: text
+ - collection: visual_feedback_comments
+ field: date_created
+ type: timestamp
+ meta:
+ collection: visual_feedback_comments
+ interface: datetime
+ readonly: true
+ sort: 5
+ schema:
+ name: date_created
+ table: visual_feedback_comments
+ data_type: timestamp with time zone
+ default_value: CURRENT_TIMESTAMP
+
systemFields:
- collection: directus_activity
field: timestamp
@@ -64,4 +487,18 @@ systemFields:
field: parent
schema:
is_indexed: true
-relations: []
+
+relations:
+ - collection: visual_feedback_comments
+ field: feedback_id
+ related_collection: visual_feedback
+ schema:
+ column: feedback_id
+ foreign_key_column: id
+ foreign_key_table: visual_feedback
+ table: visual_feedback_comments
+ meta:
+ many_collection: visual_feedback_comments
+ many_field: feedback_id
+ one_collection: visual_feedback
+ one_field: null
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
new file mode 100644
index 00000000..af878b0a
--- /dev/null
+++ b/docker-compose.override.yml
@@ -0,0 +1,43 @@
+services:
+ klz-app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ target: development
+ volumes:
+ - .:/app
+ - /app/node_modules
+ - /app/.next
+ environment:
+ - WATCHPACK_POLLING=true # Useful for Docker volume mounting issues on some systems
+ restart: "no"
+ container_name: klz-app-dev
+ labels:
+ - "traefik.enable=true"
+ # Clear any production middlewares/headers redirect
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.middlewares="
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.rule=Host(`${TRAEFIK_HOST:-klz.localhost}`)"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.entrypoints=web"
+ # Configure main router for local HTTP without auth
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.rule=Host(`${TRAEFIK_HOST:-klz.localhost}`)"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.entrypoints=web"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.middlewares="
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls=false"
+ - "traefik.docker.network=infra"
+
+ directus-cms:
+ container_name: klz-cms-dev
+ restart: "no"
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-cms.rule=Host(`${DIRECTUS_HOST:-cms.klz.localhost}`)"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-cms.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-cms.service=${PROJECT_NAME:-klz-cables}-cms"
+ - "traefik.http.services.${PROJECT_NAME:-klz-cables}-cms.loadbalancer.server.port=8055"
+ - "traefik.docker.network=infra"
+
+ klz-db:
+ restart: "no"
+
+ gatekeeper:
+ restart: "no"
diff --git a/docker-compose.yml b/docker-compose.yml
index 053d852a..82818995 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,7 +1,13 @@
services:
klz-app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ args:
+ NEXT_PUBLIC_BASE_URL: ${NEXT_PUBLIC_BASE_URL}
+ DIRECTUS_URL: ${DIRECTUS_URL}
image: registry.infra.mintel.me/mintel/klz-cables.com:${IMAGE_TAG:-latest}
- restart: always
+ restart: unless-stopped
networks:
- default
- infra
@@ -10,22 +16,22 @@ services:
labels:
- "traefik.enable=true"
# HTTP ⇒ HTTPS redirect
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.rule=${TRAEFIK_HOST_RULE:-Host(\"klz-cables.com\")}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.rule=${TRAEFIK_HOST_RULE:-Host(`${TRAEFIK_HOST:-klz-cables.com}`)}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.entrypoints=web"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-web.middlewares=redirect-https"
# HTTPS router (Standard)
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.rule=${TRAEFIK_HOST_RULE:-Host(\"klz-cables.com\")}"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.entrypoints=websecure"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls.certresolver=le"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls=true"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.rule=${TRAEFIK_HOST_RULE:-Host(`${TRAEFIK_HOST:-klz-cables.com}`)}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls=${TRAEFIK_TLS:-false}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}.service=${PROJECT_NAME:-klz-cables}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}.middlewares=${AUTH_MIDDLEWARE:-${PROJECT_NAME:-klz-cables}-ratelimit,${PROJECT_NAME:-klz-cables}-forward,${PROJECT_NAME:-klz-cables}-compress}"
# Public Router (Whitelist for OG Images, Sitemaps, Health)
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.rule=(${TRAEFIK_HOST_RULE:-Host(\"klz-cables.com\")}) && (PathPrefix(\"/health\", \"/sitemap.xml\", \"/robots.txt\", \"/manifest.webmanifest\", \"/api/og\") || PathRegexp(\".*opengraph-image.*\") || PathRegexp(\".*sitemap.*\"))"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.entrypoints=websecure"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.tls.certresolver=le"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.tls=true"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.rule=(${TRAEFIK_HOST_RULE:-Host(`${TRAEFIK_HOST:-klz-cables.com}`)}) && (PathPrefix(`/health`, `/sitemap.xml`, `/robots.txt`, `/manifest.webmanifest`, `/api/og`) || PathRegexp(`.*opengraph-image.*`) || PathRegexp(`.*sitemap.*`))"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.tls=${TRAEFIK_TLS:-false}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.service=${PROJECT_NAME:-klz-cables}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.middlewares=${AUTH_MIDDLEWARE_UNPROTECTED:-${PROJECT_NAME:-klz-cables}-ratelimit,${PROJECT_NAME:-klz-cables}-forward,${PROJECT_NAME:-klz-cables}-compress}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-public.priority=2000"
@@ -47,20 +53,20 @@ services:
- "traefik.http.middlewares.${PROJECT_NAME:-klz-cables}-auth.forwardauth.authRequestHeaders=X-Forwarded-Host,X-Forwarded-Proto,X-Forwarded-For,Cookie"
- "traefik.http.middlewares.${PROJECT_NAME:-klz-cables}-auth.forwardauth.authResponseHeaders=X-Auth-User"
- # Middleware Definitions
+ # Rate Limit Middleware
- "traefik.http.middlewares.${PROJECT_NAME:-klz-cables}-ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.${PROJECT_NAME:-klz-cables}-ratelimit.ratelimit.burst=50"
healthcheck:
- test: [ "CMD", "curl", "-f", "http://127.0.0.1:3000/" ]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 30s
+ test: [ "CMD", "curl", "-f", "http://127.0.0.1:3000/health" ]
+ interval: 15s
+ timeout: 10s
+ retries: 3
+ start_period: 45s
gatekeeper:
profiles: [ "gatekeeper" ]
image: registry.infra.mintel.me/mintel/gatekeeper:v1.7.12
- restart: always
+ restart: unless-stopped
networks:
infra:
aliases:
@@ -78,22 +84,18 @@ services:
labels:
- "traefik.enable=true"
- "traefik.docker.network=infra"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.rule=(Host(\"${TRAEFIK_HOST:-testing.klz-cables.com}\") && PathPrefix(\"/gatekeeper\"))"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.entrypoints=websecure"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.tls.certresolver=le"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.tls=true"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.rule=(Host(`${TRAEFIK_HOST:-testing.klz-cables.com}`) && PathPrefix(`/gatekeeper`))"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.entrypoints=${TRAEFIK_ENTRYPOINT:-web}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-}"
+ - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.tls=${TRAEFIK_TLS:-false}"
- "traefik.http.routers.${PROJECT_NAME:-klz-cables}-gatekeeper.service=${PROJECT_NAME:-klz-cables}-gatekeeper"
- "traefik.http.services.${PROJECT_NAME:-klz-cables}-gatekeeper.loadbalancer.server.port=3000"
- "traefik.docker.network=infra"
- directus:
- image: directus/directus:11
- restart: always
- networks:
- default:
- infra:
- aliases:
- - ${PROJECT_NAME:-klz-cables}-directus
+ directus-cms:
+ image: registry.infra.mintel.me/mintel/directus:latest
+ restart: unless-stopped
+ command: [ "node", "cli.js", "start" ]
env_file:
- ${ENV_FILE:-.env}
environment:
@@ -102,37 +104,35 @@ services:
ADMIN_EMAIL: ${DIRECTUS_ADMIN_EMAIL}
ADMIN_PASSWORD: ${DIRECTUS_ADMIN_PASSWORD}
DB_CLIENT: 'pg'
- DB_HOST: 'directus-db'
+ DB_HOST: 'klz-db'
DB_PORT: '5432'
DB_DATABASE: ${DIRECTUS_DB_NAME:-directus}
DB_USER: ${DIRECTUS_DB_USER:-directus}
DB_PASSWORD: ${DIRECTUS_DB_PASSWORD:-directus}
WEBSOCKETS_ENABLED: 'true'
PUBLIC_URL: ${DIRECTUS_URL:-https://cms.klz-cables.com}
- # Error Tracking
- SENTRY_DSN: ${SENTRY_DSN}
- SENTRY_ENVIRONMENT: ${TARGET:-development}
- LOGGER_LEVEL: ${LOG_LEVEL:-info}
+ HOST: '0.0.0.0'
+ networks:
+ - infra
volumes:
- ./directus/uploads:/directus/uploads
- ./directus/extensions:/directus/extensions
- ./directus/schema:/directus/schema
- ./directus/migrations:/directus/migrations
+ healthcheck:
+ disable: true
labels:
- "traefik.enable=true"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-directus.rule=Host(\"${DIRECTUS_HOST}\")"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-directus.entrypoints=websecure"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-directus.tls.certresolver=le"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-directus.tls=true"
- - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-directus.middlewares=${PROJECT_NAME:-klz-cables}-forward,compress"
- - "traefik.http.services.${PROJECT_NAME:-klz-cables}-directus.loadbalancer.server.port=8055"
+ - "traefik.http.routers.klz-production-cms.rule=Host(`cms.klz.localhost`)"
+ - "traefik.http.routers.klz-production-cms.entrypoints=web"
+ - "traefik.http.routers.klz-production-cms.priority=5000"
+ - "traefik.http.routers.klz-production-cms.tls=false"
+ - "traefik.http.routers.klz-production-cms.service=klz-production-cms-svc"
+ - "traefik.http.services.klz-production-cms-svc.loadbalancer.server.port=8055"
- "traefik.docker.network=infra"
-
- directus-db:
+ klz-db:
image: postgres:15-alpine
- restart: always
- networks:
- - default
+ restart: unless-stopped
env_file:
- ${ENV_FILE:-.env}
environment:
@@ -141,6 +141,8 @@ services:
POSTGRES_PASSWORD: ${DIRECTUS_DB_PASSWORD:-directus}
volumes:
- directus-db-data:/var/lib/postgresql/data
+ networks:
+ - infra
networks:
default:
diff --git a/lib/config.ts b/lib/config.ts
index 7d5bfd62..59b440d8 100644
--- a/lib/config.ts
+++ b/lib/config.ts
@@ -50,7 +50,7 @@ function createConfig() {
},
logging: {
- level: env.LOG_LEVEL,
+ level: env.LOG_LEVEL || 'info',
},
mail: {
diff --git a/messages/de.json b/messages/de.json
index c9a8dd11..cfca5ce8 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -207,6 +207,7 @@
"description": "Entdecken Sie unser umfassendes Sortiment an zertifizierten Kabeln: von Niederspannung über Mittel- und Hochspannung bis hin zu spezialisierten Solarkabeln."
},
"title": "Unsere Produkte",
+ "breadcrumb": "Produkte",
"subtitle": "Entdecken Sie unser umfassendes Sortiment an hochwertigen Kabeln für jede Anwendung.",
"heroSubtitle": "Produktportfolio",
"categoryLabel": "Kategorie",
@@ -393,4 +394,4 @@
"cta": "Zurück zur Sicherheit"
}
}
-}
+}
\ No newline at end of file
diff --git a/messages/en.json b/messages/en.json
index c7b7764e..8076e18f 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -207,6 +207,7 @@
"description": "Explore our comprehensive range of certified cables: from low voltage to medium and high voltage, as well as specialized solar cables."
},
"title": "Our Products",
+ "breadcrumb": "Products",
"subtitle": "Explore our comprehensive range of high-quality cables designed for every application.",
"heroSubtitle": "Product Portfolio",
"categoryLabel": "Category",
@@ -393,4 +394,4 @@
"cta": "Back to Safety"
}
}
-}
+}
\ No newline at end of file
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c7..c4b7818f 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/package.json b/package.json
index 53a557a2..141c4487 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
"dependencies": {
"@directus/sdk": "^21.0.0",
"@medv/finder": "^4.0.2",
- "@mintel/mail": "1.7.12",
- "@mintel/next-config": "1.7.12",
- "@mintel/next-feedback": "1.7.12",
+ "@mintel/mail": "1.8.3",
+ "@mintel/next-config": "1.8.3",
+ "@mintel/next-feedback": "1.8.10",
"@mintel/next-utils": "^1.7.15",
"@react-email/components": "^1.0.7",
"@react-pdf/renderer": "^4.3.2",
@@ -20,7 +20,6 @@
"import-in-the-middle": "^1.11.0",
"jsdom": "^27.4.0",
"leaflet": "^1.9.4",
- "lucide-react": "^0.562.0",
"next": "16.1.6",
"next-i18next": "^15.4.3",
"next-intl": "^4.8.2",
@@ -46,8 +45,12 @@
"@commitlint/cli": "^20.4.0",
"@commitlint/config-conventional": "^20.4.0",
"@lhci/cli": "^0.15.1",
- "@mintel/eslint-config": "1.7.12",
- "@mintel/tsconfig": "1.7.12",
+ "@mintel/eslint-config": "1.8.3",
+ "@mintel/tsconfig": "1.8.3",
+ "@remotion/cli": "^4.0.421",
+ "@remotion/google-fonts": "^4.0.421",
+ "@remotion/player": "^4.0.421",
+ "@remotion/renderer": "^4.0.421",
"@tailwindcss/cli": "^4.1.18",
"@tailwindcss/postcss": "^4.1.18",
"@types/geojson": "^7946.0.16",
@@ -64,8 +67,10 @@
"happy-dom": "^20.6.1",
"husky": "^9.1.7",
"lint-staged": "^16.2.7",
+ "lucide-react": "^0.563.0",
"postcss": "^8.5.6",
"prettier": "^3.8.1",
+ "remotion": "^4.0.421",
"sass": "^1.97.1",
"tailwindcss": "^4.1.18",
"tsx": "^4.21.0",
@@ -73,7 +78,8 @@
"vitest": "^4.0.16"
},
"scripts": {
- "dev": "docker network create infra 2>/dev/null || true && echo '\\n🚀 Development Environment Starting...\\n\\n📱 App: http://klz.localhost\\n🗄️ CMS: http://cms.klz.localhost/admin\\n🚦 Traefik: http://localhost:8080\\n\\n(Press Ctrl+C to stop)\\n' && docker-compose down --remove-orphans && docker-compose up klz-app directus directus-db gatekeeper",
+ "dev": "docker network create infra 2>/dev/null || true && echo '\\n🚀 Development Environment Starting...\\n\\n📱 App (Next.js): http://localhost:3000\\n📱 App (Traefik): http://klz.localhost\\n🗄️ CMS: http://cms.klz.localhost/admin\\n🚦 Traefik: http://localhost:8080\\n\\n(Press Ctrl+C to stop)\\n' && docker-compose down --remove-orphans && docker-compose up --build klz-app directus-cms klz-db gatekeeper",
+ "dev:infra": "docker network create infra 2>/dev/null || true && docker-compose up -d directus-cms klz-db gatekeeper",
"dev:local": "next dev",
"build": "next build",
"start": "next start",
@@ -102,6 +108,8 @@
"cms:push:prod:DANGER": "./scripts/sync-directus.sh push production",
"pagespeed:test": "tsx ./scripts/pagespeed-sitemap.ts",
"pagespeed:urls": "tsx -e \"import sitemap from './app/sitemap'; sitemap().then(urls => console.log(urls.map(u => u.url).join('\\n')))\"",
+ "remotion:render": "remotion render WebsiteVideo remotion/index.ts out.mp4",
+ "remotion:preview": "remotion preview remotion/index.ts",
"prepare": "husky",
"preinstall": "npx only-allow pnpm"
},
@@ -110,5 +118,13 @@
"overrides": {
"next": "16.1.6"
}
+ },
+ "peerDependencies": {
+ "@remotion/cli": "^4.0.421",
+ "@remotion/google-fonts": "^4.0.421",
+ "@remotion/player": "^4.0.421",
+ "@remotion/renderer": "^4.0.421",
+ "lucide-react": "^0.563.0",
+ "remotion": "^4.0.421"
}
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 08ef5874..c9e42b06 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,14 +18,14 @@ importers:
specifier: ^4.0.2
version: 4.0.2
'@mintel/mail':
- specifier: 1.7.12
- version: 1.7.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ specifier: 1.8.3
+ version: 1.8.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@mintel/next-config':
- specifier: 1.7.12
- version: 1.7.12(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(@swc/helpers@0.5.18)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)(typescript@5.9.3)(webpack@5.105.0)
+ specifier: 1.8.3
+ version: 1.8.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(@swc/helpers@0.5.18)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)(typescript@5.9.3)(webpack@5.105.0)
'@mintel/next-feedback':
- specifier: 1.7.12
- version: 1.7.12(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
+ specifier: 1.8.10
+ version: 1.8.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
'@mintel/next-utils':
specifier: ^1.7.15
version: 1.7.15(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.18)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)(typescript@5.9.3)
@@ -62,9 +62,6 @@ importers:
leaflet:
specifier: ^1.9.4
version: 1.9.4
- lucide-react:
- specifier: ^0.562.0
- version: 0.562.0(react@19.2.4)
next:
specifier: 16.1.6
version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
@@ -136,11 +133,23 @@ importers:
specifier: ^0.15.1
version: 0.15.1
'@mintel/eslint-config':
- specifier: 1.7.12
- version: 1.7.12(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 1.8.3
+ version: 1.8.3(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@mintel/tsconfig':
- specifier: 1.7.12
- version: 1.7.12
+ specifier: 1.8.3
+ version: 1.8.3
+ '@remotion/cli':
+ specifier: ^4.0.421
+ version: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/google-fonts':
+ specifier: ^4.0.421
+ version: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/player':
+ specifier: ^4.0.421
+ version: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/renderer':
+ specifier: ^4.0.421
+ version: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tailwindcss/cli':
specifier: ^4.1.18
version: 4.1.18
@@ -189,12 +198,18 @@ importers:
lint-staged:
specifier: ^16.2.7
version: 16.2.7
+ lucide-react:
+ specifier: ^0.563.0
+ version: 0.563.0(react@19.2.4)
postcss:
specifier: ^8.5.6
version: 8.5.6
prettier:
specifier: ^3.8.1
version: 3.8.1
+ remotion:
+ specifier: ^4.0.421
+ version: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
sass:
specifier: ^1.97.1
version: 1.97.3
@@ -289,6 +304,11 @@ packages:
resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
+ '@babel/parser@7.24.1':
+ resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/parser@7.29.0':
resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
engines: {node: '>=6.0.0'}
@@ -435,6 +455,12 @@ packages:
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@esbuild/aix-ppc64@0.25.0':
+ resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
@@ -447,6 +473,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/android-arm64@0.25.0':
+ resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.25.12':
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
@@ -459,6 +491,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm@0.25.0':
+ resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.25.12':
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
@@ -471,6 +509,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-x64@0.25.0':
+ resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.25.12':
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
@@ -483,6 +527,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/darwin-arm64@0.25.0':
+ resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.25.12':
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
@@ -495,6 +545,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-x64@0.25.0':
+ resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.12':
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
@@ -507,6 +563,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/freebsd-arm64@0.25.0':
+ resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.25.12':
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
@@ -519,6 +581,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.25.0':
+ resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.12':
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
@@ -531,6 +599,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/linux-arm64@0.25.0':
+ resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.25.12':
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
@@ -543,6 +617,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm@0.25.0':
+ resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.12':
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
@@ -555,6 +635,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-ia32@0.25.0':
+ resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.12':
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
@@ -567,6 +653,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-loong64@0.25.0':
+ resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.12':
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
@@ -579,6 +671,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-mips64el@0.25.0':
+ resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.12':
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
@@ -591,6 +689,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-ppc64@0.25.0':
+ resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.12':
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
@@ -603,6 +707,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-riscv64@0.25.0':
+ resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.12':
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
@@ -615,6 +725,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-s390x@0.25.0':
+ resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.12':
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
@@ -627,6 +743,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-x64@0.25.0':
+ resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.12':
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
@@ -639,6 +761,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/netbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-arm64@0.25.12':
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
@@ -651,6 +779,12 @@ packages:
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.0':
+ resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.12':
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
@@ -663,6 +797,12 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/openbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-arm64@0.25.12':
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
@@ -675,6 +815,12 @@ packages:
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.25.0':
+ resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.12':
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
@@ -699,6 +845,12 @@ packages:
cpu: [arm64]
os: [openharmony]
+ '@esbuild/sunos-x64@0.25.0':
+ resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.25.12':
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
@@ -711,6 +863,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/win32-arm64@0.25.0':
+ resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.25.12':
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
@@ -723,6 +881,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-ia32@0.25.0':
+ resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.12':
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
@@ -735,6 +899,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-x64@0.25.0':
+ resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.12':
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
@@ -1034,20 +1204,20 @@ packages:
'@medv/finder@4.0.2':
resolution: {integrity: sha512-RraNY9SCcx4KZV0Dh6BEW6XEW2swkqYca74pkFFRw6hHItSHiy+O/xMnpbofjYbzXj0tSpBGthUF1hHTsr3vIQ==}
- '@mintel/eslint-config@1.7.12':
- resolution: {integrity: sha512-ofX68JWCW8ztD9tt/1MDb6pSr9MJKq3js3Vny7VoT/bObjpR/iO9tJp0ekiq12Ps8VTEgDh1qwwmf2wrJJBRpQ==}
+ '@mintel/eslint-config@1.8.3':
+ resolution: {integrity: sha512-Alr0ofai74qhnrhZy2mpNSR4gcqD4DTQLHcHX3pZPpsqu1QfNjhHofU7dyHDx5/SpXoMXsI4hSaLpytKEMNHLg==}
- '@mintel/mail@1.7.12':
- resolution: {integrity: sha512-2MqGSDhXQ6jaswUs/s74pz2LwmOhtOTWltGgwb8JF2JdfQt8FE5H4XZsvSV12Q1Fs1n5+V09OZTWU1TyFmh6lw==}
+ '@mintel/mail@1.8.3':
+ resolution: {integrity: sha512-y6MD0Rkn66D6gbMH1/6HNpneCJHUkDxtW7mYnq/ftRZf27ZDuhYqJaQVfXTCXS80oaWTzygc33Lpqz4UpdavQw==}
peerDependencies:
react: ^19.0.0
react-dom: ^19.0.0
- '@mintel/next-config@1.7.12':
- resolution: {integrity: sha512-GBFIgF2vRzPl03B2RwaEyBpwjXgDRHUtaal4QQ2n7TW4G1lNIKLTBLdsJtmxMn8VlUbzRVMaFNm7m6joSNiJ0w==}
+ '@mintel/next-config@1.8.3':
+ resolution: {integrity: sha512-2t0ql4FCOqzLc4ImE3D39us5YHeKq9ZHjmWyiz9cwtJm89zGSvB/mzCja2ydrYtTEfLwxpiVKzXrVuSKLjFlow==}
- '@mintel/next-feedback@1.7.12':
- resolution: {integrity: sha512-nlaeV+IRmqwzaAZFTmj8+RvyMsvh+SNs0BopWgbDdAt2x1yoz4fC6cpn+v7KjfnVW0YWPZhMeGD/uEgMhVrXRA==}
+ '@mintel/next-feedback@1.8.10':
+ resolution: {integrity: sha512-GgCkcgvAibOXli0bfx2/PLJgzPC0sTM67Wddef2eDCiV2Lgy4hZjX9P+PSKP5dwPGooyk29muOtm0HKJlkAXqg==}
peerDependencies:
react: ^19.0.0
react-dom: ^19.0.0
@@ -1055,8 +1225,8 @@ packages:
'@mintel/next-utils@1.7.15':
resolution: {integrity: sha512-CqSe3eHamq9zLs+AJxGOPypTLchw/oZ3JcLkor007PcUDMTv/Lspfv5oCaXK2s0FeIOJaa2QwSGPDI1h5/3ZVw==}
- '@mintel/tsconfig@1.7.12':
- resolution: {integrity: sha512-WGs/p2E1xQGkzNasLCZKoplKIhxC17NZRhBYH5O43lp98aHOZMC3BKgNeLYUfoEFGiIN1hx2FUJ69DosQc0xmw==}
+ '@mintel/tsconfig@1.8.3':
+ resolution: {integrity: sha512-IOtxrTZfPZs4XU4Q068dSUtETFb2drf43mgmaF31j+PtltfPkC7pdJcEjXDg365bZ5EUrgTlt9pYlgGmfrCEVQ==}
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1780,6 +1950,110 @@ packages:
'@react-pdf/types@2.9.2':
resolution: {integrity: sha512-dufvpKId9OajLLbgn9q7VLUmyo1Jf+iyGk2ZHmCL8nIDtL8N1Ejh9TH7+pXXrR0tdie1nmnEb5Bz9U7g4hI4/g==}
+ '@remotion/bundler@4.0.421':
+ resolution: {integrity: sha512-3udLfwmgJeO6r0bZZ+mkSFYJ7qTWp93lQvo5W2H091uXbGl00r7DI4pfnMQQhLAubwPq+XTWd0jgp5JMhLe2cQ==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/cli@4.0.421':
+ resolution: {integrity: sha512-h2yA12Bd9NIfZpxxF5eAdhH8o9S/MZION2aXiYI3TwYmaCnjBqeorJMKFe0qWGJkTAvKAg602HEuqY3eQD19pw==}
+ hasBin: true
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/compositor-darwin-arm64@4.0.421':
+ resolution: {integrity: sha512-wtvMo81SIHhtE7RdpbAGOAYtJWgrap2jowbKsBVoAvnuLp4uBYLEkPho8nkjoG9XTTlblD02r8kyBhpUnrAwFQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@remotion/compositor-darwin-x64@4.0.421':
+ resolution: {integrity: sha512-hmLglQL7l3CQoX0ZmIzg0ojxRQInQL810pnB/AGXcTUTVRkxeRhUc/NXTj8TEqgZgSD1ObYgGlA27ysBSl9+ig==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@remotion/compositor-linux-arm64-gnu@4.0.421':
+ resolution: {integrity: sha512-7FNViAhIBVn46LXdy0kahi2BVTBqXQ5B5+pKZftDY7u8oRlyVQvAn4AcbmhU5ZZ6/Dp3+Qp6NocK16bzcPGJiA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@remotion/compositor-linux-arm64-musl@4.0.421':
+ resolution: {integrity: sha512-ofPJDXEiCh1l0jUEI2dBhICxjCrN2rJuiOMuhrYd9IlGc2wA1zu7I3/06uvatV5k3aakT6MHkKh+wVys4fagBQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@remotion/compositor-linux-x64-gnu@4.0.421':
+ resolution: {integrity: sha512-TtqtDMPYM3IhnU0/YgOhvEtV5VHT8FZnbrR8ZaoT8QEvaRhGhr+QesmEA7KtTTbBpqUBeYmV5AhAX9Q0rx+43A==}
+ cpu: [x64]
+ os: [linux]
+
+ '@remotion/compositor-linux-x64-musl@4.0.421':
+ resolution: {integrity: sha512-ilOCMkaBAUbRE6HN4iFfsMWcXVHai8IPQocUyMfDseBV5OjIaBhqybriF6AkmzWF4Fx6ylokzl4WXX6fAwdgQg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@remotion/compositor-win32-x64-msvc@4.0.421':
+ resolution: {integrity: sha512-L4yygd3YWXbo2JakG5Gru4fR4IDAC6+5BAvo4tZm7gOwMUEO38fn0h+pgWMqCi1zpC1yEfdv9LpClHowcN4lYw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@remotion/google-fonts@4.0.421':
+ resolution: {integrity: sha512-PRJJKq2nZ6MOXibUWNCnXzEySFovvg5GdCNyxaRZYDnSUX5otT2w53A4/Fu7h7vXWVceew2OhZD8pOv/md+87A==}
+
+ '@remotion/licensing@4.0.421':
+ resolution: {integrity: sha512-kSbssnwkTXDxtY/PXzu9Q6mFt9jmgNN6wygZxxH6gy01lzua1ucivSZOSrrdRRbtF0kk3BZ4EqOqW5D5ovyHXA==}
+
+ '@remotion/media-parser@4.0.421':
+ resolution: {integrity: sha512-Pv/63mN4gnG5hP2+7ldWy67u2FoIOmN3lijEzk3w/e4b5dvJp+kWcXGbUszePbDxFF0NnJrP4clj6iLLB0M9bw==}
+
+ '@remotion/media-utils@4.0.421':
+ resolution: {integrity: sha512-kL0uR8bnSW27Lg3SozKO+LP1kiFLpM40GKeAWftrzvJXbAUc5XZTEvldRbtw0YUXJvD5SsJvYH8FU0HB27N28A==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/player@4.0.421':
+ resolution: {integrity: sha512-vZrvvl3OMmxsmIk+vqUOrcbLpNUL0Q1JIWdqcgNt0d3Jn0mK6fYCDBnAHuhiltuMSqHBguUaQL4eWbceDBsm2g==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/renderer@4.0.421':
+ resolution: {integrity: sha512-QYfnSq69HOHI9n3Z2lLyNK8liha2d0je6h5UnFO4Wi7WSQi5ZSey0aCkL6Mva6x5ckX/eAm8dptKUpnJWLY5uw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/streaming@4.0.421':
+ resolution: {integrity: sha512-H5+VyDt1aKdUXkZVaggIEuXgD1kN21H1O5tLSP52Qt4/IOaGcCoVFaNKbeBZuUyM9OWeO2xHAYX/CHz8OlQt3Q==}
+
+ '@remotion/studio-server@4.0.421':
+ resolution: {integrity: sha512-QiRfrK15dUL8BVDTaglU6ZWUDL4FTpH6cgM5vAji2IBNTmH9OqzyHMpTKq53DX63Z1rL3oIYKk5Sz/qHt9Cofw==}
+
+ '@remotion/studio-shared@4.0.421':
+ resolution: {integrity: sha512-T2eXFHVG118LSA1QwR/g4LFHrd+VYDmFmoXWWUZKbXJwNYYtVyUBSajfgJfvprDlxVbYnGB95V0ayYVGe5deMg==}
+
+ '@remotion/studio@4.0.421':
+ resolution: {integrity: sha512-aqt841T1b5PoIPuokoKvRjYCp0uG3PAcQgO8x8JOoI0OgnBU7HpTjq5Np6fIdMNOpnqMA1VrOXGWQqRHFFMkwA==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@remotion/web-renderer@4.0.421':
+ resolution: {integrity: sha512-VY+v/9gfz4cQB0Bt/NbtlpkGuCbxoqrN/Y/1BXNyvE+cMUn4TpNy/byWKGn2qytPb2jlweDAwLUb9l9otzFzKg==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@remotion/webcodecs@4.0.421':
+ resolution: {integrity: sha512-Rto6i4ZRK4PTQcCaU0JeyL58iCVoNuwTgWxTK9vdUaE5sOX5SB6jsEO4LmQkg428oA11lbZG48A/MLvErNb7DQ==}
+
+ '@remotion/zod-types@4.0.421':
+ resolution: {integrity: sha512-PBU1+OLZjUNF88XFwKKbfi7+uLKIxN9MSpxjpJHokOumOdDUnpqJv2zs/TwSBkIPFKFd40Crk+FFZk4VT0fw3A==}
+ peerDependencies:
+ zod: 3.22.3
+
'@rolldown/pluginutils@1.0.0-rc.3':
resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
@@ -2303,6 +2577,12 @@ packages:
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@types/dom-mediacapture-transform@0.1.11':
+ resolution: {integrity: sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==}
+
+ '@types/dom-webcodecs@0.1.13':
+ resolution: {integrity: sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==}
+
'@types/eslint-scope@3.7.7':
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
@@ -2696,6 +2976,11 @@ packages:
ajv:
optional: true
+ ajv-keywords@3.5.2:
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+
ajv-keywords@5.1.0:
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
peerDependencies:
@@ -2810,6 +3095,10 @@ packages:
resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
engines: {node: '>=4'}
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
@@ -2928,6 +3217,9 @@ packages:
bidi-js@1.0.3:
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -3259,10 +3551,21 @@ packages:
css-line-break@2.1.0:
resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==}
+ css-loader@5.2.7:
+ resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ webpack: ^4.27.0 || ^5.0.0
+
css-tree@3.1.0:
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
cssstyle@5.3.7:
resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==}
engines: {node: '>=20'}
@@ -3427,6 +3730,10 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
+ dotenv@9.0.2:
+ resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
+ engines: {node: '>=10'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -3457,6 +3764,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+
encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
@@ -3547,6 +3858,11 @@ packages:
esast-util-from-js@2.0.1:
resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+ esbuild@0.25.0:
+ resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
esbuild@0.25.12:
resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
@@ -3744,6 +4060,10 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
expect-type@1.3.0:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
@@ -3918,6 +4238,9 @@ packages:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
+ fs-monkey@1.0.3:
+ resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -3964,6 +4287,10 @@ packages:
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
engines: {node: '>=8'}
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
get-symbol-description@1.1.0:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
@@ -4133,6 +4460,10 @@ packages:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
husky@9.1.7:
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
@@ -4156,6 +4487,12 @@ packages:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
+ icss-utils@5.1.0:
+ resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
icu-minify@4.8.2:
resolution: {integrity: sha512-LHBQV+skKkjZSPd590pZ7ZAHftUgda3eFjeuNwA8/15L8T8loCNBktKQyTlkodAU86KovFXeg/9WntlAo5wA5A==}
@@ -4372,6 +4709,10 @@ packages:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
@@ -4666,6 +5007,10 @@ packages:
resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
engines: {node: '>=6.11.5'}
+ loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
+
localforage@1.10.0:
resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
@@ -4695,6 +5040,9 @@ packages:
lodash.snakecase@4.1.1:
resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+ lodash.sortby@4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
@@ -4736,6 +5084,10 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
lru-cache@7.18.3:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
@@ -4745,8 +5097,8 @@ packages:
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
- lucide-react@0.562.0:
- resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==}
+ lucide-react@0.563.0:
+ resolution: {integrity: sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -4824,6 +5176,13 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
+ mediabunny@1.29.0:
+ resolution: {integrity: sha512-18B8w/rhO/ph/AFsIXvzZg8RaSQZ+ZYfJ99MZlTjDmlgCT58jV3azrnWQ/OSquYDi8q0xmn64mnfTEHgww3+zw==}
+
+ memfs@3.4.3:
+ resolution: {integrity: sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==}
+ engines: {node: '>= 4.0.0'}
+
meow@12.1.1:
resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
engines: {node: '>=16.10'}
@@ -4962,6 +5321,10 @@ packages:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
engines: {node: '>=4'}
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
mimic-function@5.0.1:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
@@ -4981,6 +5344,9 @@ packages:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
+ minimist@1.2.6:
+ resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
+
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
@@ -5143,6 +5509,10 @@ packages:
normalize-svg-path@1.1.0:
resolution: {integrity: sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==}
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
nypm@0.6.2:
resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==}
engines: {node: ^14.16.0 || >=16.10.0}
@@ -5202,6 +5572,10 @@ packages:
resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
engines: {node: '>=4'}
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
@@ -5389,6 +5763,34 @@ packages:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
+ postcss-modules-extract-imports@3.1.0:
+ resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-local-by-default@4.2.0:
+ resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-scope@3.2.1:
+ resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-values@4.0.0:
+ resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
@@ -5547,6 +5949,10 @@ packages:
resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
engines: {node: '>=0.10.0'}
+ react-refresh@0.9.0:
+ resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==}
+ engines: {node: '>=0.10.0'}
+
react@19.2.4:
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines: {node: '>=0.10.0'}
@@ -5563,6 +5969,10 @@ packages:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
+ recast@0.23.11:
+ resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
+ engines: {node: '>= 4'}
+
recma-build-jsx@1.0.0:
resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
@@ -5597,6 +6007,12 @@ packages:
remark-rehype@11.1.2:
resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+ remotion@4.0.421:
+ resolution: {integrity: sha512-j64KtcwObNYpxskxBPd7zDXVOwSHxH31RIM6Vs/+rUj/NBry/LXc8cNWDwFC4fYaJweOAeM7zXY16kW/9t3X+w==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -5724,6 +6140,10 @@ packages:
schema-dts@1.1.5:
resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
+ schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+
schema-utils@4.3.3:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
@@ -5746,6 +6166,11 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
+ semver@7.5.3:
+ resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
semver@7.7.4:
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
@@ -5869,10 +6294,19 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ source-map@0.7.3:
+ resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
+ engines: {node: '>= 8'}
+
source-map@0.7.6:
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
engines: {node: '>= 12'}
+ source-map@0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+ engines: {node: '>= 8'}
+ deprecated: The work that was done in this beta branch won't be included in future versions
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
@@ -5996,6 +6430,10 @@ packages:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -6010,6 +6448,12 @@ packages:
stubborn-utils@1.0.2:
resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==}
+ style-loader@4.0.0:
+ resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ webpack: ^5.27.0
+
style-to-js@1.1.21:
resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
@@ -6120,6 +6564,9 @@ packages:
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
@@ -6175,6 +6622,9 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ tr46@1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
tr46@6.0.0:
resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
engines: {node: '>=20'}
@@ -6470,6 +6920,9 @@ packages:
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webidl-conversions@4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
webidl-conversions@8.0.1:
resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==}
engines: {node: '>=20'}
@@ -6513,6 +6966,9 @@ packages:
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ whatwg-url@7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
when-exit@2.1.5:
resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==}
@@ -6591,6 +7047,18 @@ packages:
utf-8-validate:
optional: true
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -6645,6 +7113,9 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yaml@2.8.2:
resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
engines: {node: '>= 14.6'}
@@ -6689,6 +7160,9 @@ packages:
peerDependencies:
zod: ^3.25.0 || ^4.0.0
+ zod@3.22.3:
+ resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==}
+
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
@@ -6804,6 +7278,10 @@ snapshots:
'@babel/template': 7.28.6
'@babel/types': 7.29.0
+ '@babel/parser@7.24.1':
+ dependencies:
+ '@babel/types': 7.29.0
+
'@babel/parser@7.29.0':
dependencies:
'@babel/types': 7.29.0
@@ -6992,126 +7470,189 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@esbuild/aix-ppc64@0.25.0':
+ optional: true
+
'@esbuild/aix-ppc64@0.25.12':
optional: true
'@esbuild/aix-ppc64@0.27.3':
optional: true
+ '@esbuild/android-arm64@0.25.0':
+ optional: true
+
'@esbuild/android-arm64@0.25.12':
optional: true
'@esbuild/android-arm64@0.27.3':
optional: true
+ '@esbuild/android-arm@0.25.0':
+ optional: true
+
'@esbuild/android-arm@0.25.12':
optional: true
'@esbuild/android-arm@0.27.3':
optional: true
+ '@esbuild/android-x64@0.25.0':
+ optional: true
+
'@esbuild/android-x64@0.25.12':
optional: true
'@esbuild/android-x64@0.27.3':
optional: true
+ '@esbuild/darwin-arm64@0.25.0':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.12':
optional: true
'@esbuild/darwin-arm64@0.27.3':
optional: true
+ '@esbuild/darwin-x64@0.25.0':
+ optional: true
+
'@esbuild/darwin-x64@0.25.12':
optional: true
'@esbuild/darwin-x64@0.27.3':
optional: true
+ '@esbuild/freebsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.12':
optional: true
'@esbuild/freebsd-arm64@0.27.3':
optional: true
+ '@esbuild/freebsd-x64@0.25.0':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.12':
optional: true
'@esbuild/freebsd-x64@0.27.3':
optional: true
+ '@esbuild/linux-arm64@0.25.0':
+ optional: true
+
'@esbuild/linux-arm64@0.25.12':
optional: true
'@esbuild/linux-arm64@0.27.3':
optional: true
+ '@esbuild/linux-arm@0.25.0':
+ optional: true
+
'@esbuild/linux-arm@0.25.12':
optional: true
'@esbuild/linux-arm@0.27.3':
optional: true
+ '@esbuild/linux-ia32@0.25.0':
+ optional: true
+
'@esbuild/linux-ia32@0.25.12':
optional: true
'@esbuild/linux-ia32@0.27.3':
optional: true
+ '@esbuild/linux-loong64@0.25.0':
+ optional: true
+
'@esbuild/linux-loong64@0.25.12':
optional: true
'@esbuild/linux-loong64@0.27.3':
optional: true
+ '@esbuild/linux-mips64el@0.25.0':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.12':
optional: true
'@esbuild/linux-mips64el@0.27.3':
optional: true
+ '@esbuild/linux-ppc64@0.25.0':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.12':
optional: true
'@esbuild/linux-ppc64@0.27.3':
optional: true
+ '@esbuild/linux-riscv64@0.25.0':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.12':
optional: true
'@esbuild/linux-riscv64@0.27.3':
optional: true
+ '@esbuild/linux-s390x@0.25.0':
+ optional: true
+
'@esbuild/linux-s390x@0.25.12':
optional: true
'@esbuild/linux-s390x@0.27.3':
optional: true
+ '@esbuild/linux-x64@0.25.0':
+ optional: true
+
'@esbuild/linux-x64@0.25.12':
optional: true
'@esbuild/linux-x64@0.27.3':
optional: true
+ '@esbuild/netbsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.12':
optional: true
'@esbuild/netbsd-arm64@0.27.3':
optional: true
+ '@esbuild/netbsd-x64@0.25.0':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.12':
optional: true
'@esbuild/netbsd-x64@0.27.3':
optional: true
+ '@esbuild/openbsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.12':
optional: true
'@esbuild/openbsd-arm64@0.27.3':
optional: true
+ '@esbuild/openbsd-x64@0.25.0':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.12':
optional: true
@@ -7124,24 +7665,36 @@ snapshots:
'@esbuild/openharmony-arm64@0.27.3':
optional: true
+ '@esbuild/sunos-x64@0.25.0':
+ optional: true
+
'@esbuild/sunos-x64@0.25.12':
optional: true
'@esbuild/sunos-x64@0.27.3':
optional: true
+ '@esbuild/win32-arm64@0.25.0':
+ optional: true
+
'@esbuild/win32-arm64@0.25.12':
optional: true
'@esbuild/win32-arm64@0.27.3':
optional: true
+ '@esbuild/win32-ia32@0.25.0':
+ optional: true
+
'@esbuild/win32-ia32@0.25.12':
optional: true
'@esbuild/win32-ia32@0.27.3':
optional: true
+ '@esbuild/win32-x64@0.25.0':
+ optional: true
+
'@esbuild/win32-x64@0.25.12':
optional: true
@@ -7481,7 +8034,7 @@ snapshots:
'@medv/finder@4.0.2': {}
- '@mintel/eslint-config@1.7.12(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@mintel/eslint-config@1.8.3(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint/eslintrc': 3.3.3
'@eslint/js': 9.39.2
@@ -7498,13 +8051,13 @@ snapshots:
- supports-color
- typescript
- '@mintel/mail@1.7.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@mintel/mail@1.8.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
'@react-email/components': 0.0.33(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- '@mintel/next-config@1.7.12(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(@swc/helpers@0.5.18)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)(typescript@5.9.3)(webpack@5.105.0)':
+ '@mintel/next-config@1.8.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(@swc/helpers@0.5.18)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)(typescript@5.9.3)(webpack@5.105.0)':
dependencies:
'@sentry/nextjs': 10.38.0(@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.0)
next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
@@ -7527,9 +8080,10 @@ snapshots:
- typescript
- webpack
- '@mintel/next-feedback@1.7.12(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)':
+ '@mintel/next-feedback@1.8.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)':
dependencies:
'@directus/sdk': 21.1.0
+ '@medv/finder': 4.0.2
clsx: 2.1.1
framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
html2canvas: 1.4.1
@@ -7565,7 +8119,7 @@ snapshots:
- sass
- typescript
- '@mintel/tsconfig@1.7.12': {}
+ '@mintel/tsconfig@1.8.3': {}
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
@@ -8323,6 +8877,195 @@ snapshots:
'@react-pdf/primitives': 4.1.1
'@react-pdf/stylesheet': 6.1.2
+ '@remotion/bundler@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/media-parser': 4.0.421
+ '@remotion/studio': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio-shared': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ css-loader: 5.2.7(webpack@5.105.0)
+ esbuild: 0.25.0
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-refresh: 0.9.0
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ source-map: 0.7.3
+ style-loader: 4.0.0(webpack@5.105.0)
+ webpack: 5.105.0(esbuild@0.25.0)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+
+ '@remotion/cli@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/bundler': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/media-utils': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/player': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/renderer': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio-server': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio-shared': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ dotenv: 9.0.2
+ minimist: 1.2.6
+ prompts: 2.4.2
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+
+ '@remotion/compositor-darwin-arm64@4.0.421':
+ optional: true
+
+ '@remotion/compositor-darwin-x64@4.0.421':
+ optional: true
+
+ '@remotion/compositor-linux-arm64-gnu@4.0.421':
+ optional: true
+
+ '@remotion/compositor-linux-arm64-musl@4.0.421':
+ optional: true
+
+ '@remotion/compositor-linux-x64-gnu@4.0.421':
+ optional: true
+
+ '@remotion/compositor-linux-x64-musl@4.0.421':
+ optional: true
+
+ '@remotion/compositor-win32-x64-msvc@4.0.421':
+ optional: true
+
+ '@remotion/google-fonts@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@remotion/licensing@4.0.421': {}
+
+ '@remotion/media-parser@4.0.421': {}
+
+ '@remotion/media-utils@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/media-parser': 4.0.421
+ '@remotion/webcodecs': 4.0.421
+ mediabunny: 1.29.0
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+
+ '@remotion/player@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+
+ '@remotion/renderer@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/licensing': 4.0.421
+ '@remotion/streaming': 4.0.421
+ execa: 5.1.1
+ extract-zip: 2.0.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ source-map: 0.8.0-beta.0
+ ws: 8.17.1
+ optionalDependencies:
+ '@remotion/compositor-darwin-arm64': 4.0.421
+ '@remotion/compositor-darwin-x64': 4.0.421
+ '@remotion/compositor-linux-arm64-gnu': 4.0.421
+ '@remotion/compositor-linux-arm64-musl': 4.0.421
+ '@remotion/compositor-linux-x64-gnu': 4.0.421
+ '@remotion/compositor-linux-x64-musl': 4.0.421
+ '@remotion/compositor-win32-x64-msvc': 4.0.421
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@remotion/streaming@4.0.421': {}
+
+ '@remotion/studio-server@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@babel/parser': 7.24.1
+ '@remotion/bundler': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/renderer': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio-shared': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ memfs: 3.4.3
+ open: 8.4.2
+ recast: 0.23.11
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ semver: 7.5.3
+ source-map: 0.7.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bufferutil
+ - react
+ - react-dom
+ - supports-color
+ - uglify-js
+ - utf-8-validate
+ - webpack-cli
+
+ '@remotion/studio-shared@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@remotion/studio@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/media-utils': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/player': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/renderer': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/studio-shared': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/web-renderer': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@remotion/zod-types': 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.22.3)
+ mediabunny: 1.29.0
+ memfs: 3.4.3
+ open: 8.4.2
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ semver: 7.5.3
+ source-map: 0.7.3
+ zod: 3.22.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@remotion/web-renderer@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@remotion/licensing': 4.0.421
+ mediabunny: 1.29.0
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+
+ '@remotion/webcodecs@4.0.421':
+ dependencies:
+ '@remotion/media-parser': 4.0.421
+
+ '@remotion/zod-types@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.22.3)':
+ dependencies:
+ remotion: 4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ zod: 3.22.3
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
'@rolldown/pluginutils@1.0.0-rc.3': {}
'@rollup/plugin-commonjs@28.0.1(rollup@4.57.1)':
@@ -8656,7 +9399,7 @@ snapshots:
'@sentry/bundler-plugin-core': 4.9.0
unplugin: 1.0.1
uuid: 9.0.1
- webpack: 5.105.0
+ webpack: 5.105.0(esbuild@0.25.0)
transitivePeerDependencies:
- encoding
- supports-color
@@ -8852,6 +9595,12 @@ snapshots:
'@types/deep-eql@4.0.2': {}
+ '@types/dom-mediacapture-transform@0.1.11':
+ dependencies:
+ '@types/dom-webcodecs': 0.1.13
+
+ '@types/dom-webcodecs@0.1.13': {}
+
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 9.6.1
@@ -9283,6 +10032,10 @@ snapshots:
optionalDependencies:
ajv: 8.17.1
+ ajv-keywords@3.5.2(ajv@6.12.6):
+ dependencies:
+ ajv: 6.12.6
+
ajv-keywords@5.1.0(ajv@8.17.1):
dependencies:
ajv: 8.17.1
@@ -9420,6 +10173,10 @@ snapshots:
dependencies:
tslib: 2.8.1
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.8.1
+
astring@1.9.0: {}
async-function@1.0.0: {}
@@ -9517,6 +10274,8 @@ snapshots:
dependencies:
require-from-string: 2.0.2
+ big.js@5.2.2: {}
+
binary-extensions@2.3.0: {}
body-parser@1.20.4:
@@ -9870,11 +10629,27 @@ snapshots:
dependencies:
utrie: 1.0.2
+ css-loader@5.2.7(webpack@5.105.0):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ loader-utils: 2.0.4
+ postcss: 8.5.6
+ postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
+ postcss-modules-scope: 3.2.1(postcss@8.5.6)
+ postcss-modules-values: 4.0.0(postcss@8.5.6)
+ postcss-value-parser: 4.2.0
+ schema-utils: 3.3.0
+ semver: 7.7.4
+ webpack: 5.105.0(esbuild@0.25.0)
+
css-tree@3.1.0:
dependencies:
mdn-data: 2.12.2
source-map-js: 1.2.1
+ cssesc@3.0.0: {}
+
cssstyle@5.3.7:
dependencies:
'@asamuzakjp/css-color': 4.1.2
@@ -10017,6 +10792,8 @@ snapshots:
dotenv@16.6.1: {}
+ dotenv@9.0.2: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -10044,6 +10821,8 @@ snapshots:
emoji-regex@9.2.2: {}
+ emojis-list@3.0.0: {}
+
encodeurl@2.0.0: {}
end-of-stream@1.4.5:
@@ -10211,6 +10990,34 @@ snapshots:
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
+ esbuild@0.25.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.0
+ '@esbuild/android-arm': 0.25.0
+ '@esbuild/android-arm64': 0.25.0
+ '@esbuild/android-x64': 0.25.0
+ '@esbuild/darwin-arm64': 0.25.0
+ '@esbuild/darwin-x64': 0.25.0
+ '@esbuild/freebsd-arm64': 0.25.0
+ '@esbuild/freebsd-x64': 0.25.0
+ '@esbuild/linux-arm': 0.25.0
+ '@esbuild/linux-arm64': 0.25.0
+ '@esbuild/linux-ia32': 0.25.0
+ '@esbuild/linux-loong64': 0.25.0
+ '@esbuild/linux-mips64el': 0.25.0
+ '@esbuild/linux-ppc64': 0.25.0
+ '@esbuild/linux-riscv64': 0.25.0
+ '@esbuild/linux-s390x': 0.25.0
+ '@esbuild/linux-x64': 0.25.0
+ '@esbuild/netbsd-arm64': 0.25.0
+ '@esbuild/netbsd-x64': 0.25.0
+ '@esbuild/openbsd-arm64': 0.25.0
+ '@esbuild/openbsd-x64': 0.25.0
+ '@esbuild/sunos-x64': 0.25.0
+ '@esbuild/win32-arm64': 0.25.0
+ '@esbuild/win32-ia32': 0.25.0
+ '@esbuild/win32-x64': 0.25.0
+
esbuild@0.25.12:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.12
@@ -10544,6 +11351,18 @@ snapshots:
events@3.3.0: {}
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
expect-type@1.3.0: {}
express@4.22.1:
@@ -10744,6 +11563,8 @@ snapshots:
fresh@0.5.2: {}
+ fs-monkey@1.0.3: {}
+
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@@ -10792,6 +11613,8 @@ snapshots:
dependencies:
pump: 3.0.3
+ get-stream@6.0.1: {}
+
get-symbol-description@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -11037,6 +11860,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ human-signals@2.1.0: {}
+
husky@9.1.7: {}
hyphen@1.14.1: {}
@@ -11053,6 +11878,10 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ icss-utils@5.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
icu-minify@4.8.2:
dependencies:
'@formatjs/icu-messageformat-parser': 3.5.1
@@ -11272,6 +12101,8 @@ snapshots:
dependencies:
call-bound: 1.0.4
+ is-stream@2.0.1: {}
+
is-string@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -11598,6 +12429,12 @@ snapshots:
loader-runner@4.3.1: {}
+ loader-utils@2.0.4:
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
+
localforage@1.10.0:
dependencies:
lie: 3.1.1
@@ -11622,6 +12459,8 @@ snapshots:
lodash.snakecase@4.1.1: {}
+ lodash.sortby@4.7.0: {}
+
lodash.startcase@4.4.0: {}
lodash.upperfirst@4.3.1: {}
@@ -11662,13 +12501,17 @@ snapshots:
dependencies:
yallist: 3.1.1
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
lru-cache@7.18.3: {}
lucide-react@0.441.0(react@19.2.4):
dependencies:
react: 19.2.4
- lucide-react@0.562.0(react@19.2.4):
+ lucide-react@0.563.0(react@19.2.4):
dependencies:
react: 19.2.4
@@ -11804,6 +12647,15 @@ snapshots:
media-typer@0.3.0: {}
+ mediabunny@1.29.0:
+ dependencies:
+ '@types/dom-mediacapture-transform': 0.1.11
+ '@types/dom-webcodecs': 0.1.13
+
+ memfs@3.4.3:
+ dependencies:
+ fs-monkey: 1.0.3
+
meow@12.1.1: {}
meow@13.2.0: {}
@@ -12045,6 +12897,8 @@ snapshots:
mimic-fn@1.2.0: {}
+ mimic-fn@2.1.0: {}
+
mimic-function@5.0.1: {}
minimatch@10.1.2:
@@ -12063,6 +12917,8 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
+ minimist@1.2.6: {}
+
minimist@1.2.8: {}
minipass@7.1.2: {}
@@ -12207,6 +13063,10 @@ snapshots:
dependencies:
svg-arc-to-cubic-bezier: 3.2.0
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
nypm@0.6.2:
dependencies:
citty: 0.1.6
@@ -12275,6 +13135,10 @@ snapshots:
dependencies:
mimic-fn: 1.2.0
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
@@ -12506,6 +13370,32 @@ snapshots:
possible-typed-array-names@1.1.0: {}
+ postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+ postcss-value-parser: 4.2.0
+
+ postcss-modules-scope@3.2.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-modules-values@4.0.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
postcss-value-parser@4.2.0: {}
postcss@8.4.31:
@@ -12683,6 +13573,8 @@ snapshots:
react-refresh@0.18.0: {}
+ react-refresh@0.9.0: {}
+
react@19.2.4: {}
readdirp@3.6.0:
@@ -12693,6 +13585,14 @@ snapshots:
real-require@0.2.0: {}
+ recast@0.23.11:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.8.1
+
recma-build-jsx@1.0.0:
dependencies:
'@types/estree': 1.0.8
@@ -12774,6 +13674,11 @@ snapshots:
unified: 11.0.5
vfile: 6.0.3
+ remotion@4.0.421(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
@@ -12922,6 +13827,12 @@ snapshots:
schema-dts@1.1.5: {}
+ schema-utils@3.3.0:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
schema-utils@4.3.3:
dependencies:
'@types/json-schema': 7.0.15
@@ -12944,6 +13855,10 @@ snapshots:
semver@6.3.1: {}
+ semver@7.5.3:
+ dependencies:
+ lru-cache: 6.0.0
+
semver@7.7.4: {}
send@0.19.2:
@@ -13149,8 +14064,14 @@ snapshots:
source-map@0.6.1: {}
+ source-map@0.7.3: {}
+
source-map@0.7.6: {}
+ source-map@0.8.0-beta.0:
+ dependencies:
+ whatwg-url: 7.1.0
+
space-separated-tokens@2.0.2: {}
speedline-core@1.4.3:
@@ -13304,6 +14225,8 @@ snapshots:
strip-bom@3.0.0: {}
+ strip-final-newline@2.0.0: {}
+
strip-json-comments@3.1.1: {}
strip-json-comments@5.0.3: {}
@@ -13314,6 +14237,10 @@ snapshots:
stubborn-utils@1.0.2: {}
+ style-loader@4.0.0(webpack@5.105.0):
+ dependencies:
+ webpack: 5.105.0(esbuild@0.25.0)
+
style-to-js@1.1.21:
dependencies:
style-to-object: 1.0.14
@@ -13382,14 +14309,16 @@ snapshots:
- bare-abort-controller
- react-native-b4a
- terser-webpack-plugin@5.3.16(webpack@5.105.0):
+ terser-webpack-plugin@5.3.16(esbuild@0.25.0)(webpack@5.105.0):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
serialize-javascript: 6.0.2
terser: 5.46.0
- webpack: 5.105.0
+ webpack: 5.105.0(esbuild@0.25.0)
+ optionalDependencies:
+ esbuild: 0.25.0
terser@5.46.0:
dependencies:
@@ -13420,6 +14349,8 @@ snapshots:
tiny-inflate@1.0.3: {}
+ tiny-invariant@1.3.3: {}
+
tinybench@2.9.0: {}
tinyexec@1.0.2: {}
@@ -13465,6 +14396,10 @@ snapshots:
tr46@0.0.3: {}
+ tr46@1.0.1:
+ dependencies:
+ punycode: 2.3.1
+
tr46@6.0.0:
dependencies:
punycode: 2.3.1
@@ -13811,13 +14746,15 @@ snapshots:
webidl-conversions@3.0.1: {}
+ webidl-conversions@4.0.2: {}
+
webidl-conversions@8.0.1: {}
webpack-sources@3.3.3: {}
webpack-virtual-modules@0.5.0: {}
- webpack@5.105.0:
+ webpack@5.105.0(esbuild@0.25.0):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -13841,7 +14778,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.16(webpack@5.105.0)
+ terser-webpack-plugin: 5.3.16(esbuild@0.25.0)(webpack@5.105.0)
watchpack: 2.5.1
webpack-sources: 3.3.3
transitivePeerDependencies:
@@ -13867,6 +14804,12 @@ snapshots:
tr46: 0.0.3
webidl-conversions: 3.0.1
+ whatwg-url@7.1.0:
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+
when-exit@2.1.5: {}
which-boxed-primitive@1.1.1:
@@ -13962,6 +14905,8 @@ snapshots:
ws@7.5.10: {}
+ ws@8.17.1: {}
+
ws@8.18.3: {}
ws@8.19.0: {}
@@ -13990,6 +14935,8 @@ snapshots:
yallist@3.1.1: {}
+ yallist@4.0.0: {}
+
yaml@2.8.2: {}
yargs-parser@13.1.2:
@@ -14043,6 +14990,8 @@ snapshots:
dependencies:
zod: 3.25.76
+ zod@3.22.3: {}
+
zod@3.25.76: {}
zwitch@2.0.4: {}
diff --git a/remotion/Root.tsx b/remotion/Root.tsx
new file mode 100644
index 00000000..4bdec62a
--- /dev/null
+++ b/remotion/Root.tsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import { Composition } from 'remotion';
+import { WebsiteVideo } from './WebsiteVideo';
+import sessionData from './session.json';
+import { RecordingSession } from '../types/record-mode';
+
+const FPS = 60;
+
+export const RemotionRoot: React.FC = () => {
+ // Calculate duration based on last event + padding
+ const durationMs = (sessionData as unknown as RecordingSession).events.reduce((max, e) => {
+ return Math.max(max, e.timestamp + (e.duration || 1000));
+ }, 0);
+ const durationInFrames = Math.ceil((durationMs + 2000) / 1000 * FPS);
+
+ return (
+ <>
+
+ >
+ );
+};
diff --git a/remotion/WebsiteVideo.tsx b/remotion/WebsiteVideo.tsx
new file mode 100644
index 00000000..95e9f146
--- /dev/null
+++ b/remotion/WebsiteVideo.tsx
@@ -0,0 +1,107 @@
+import React, { useMemo } from 'react';
+import { AbsoluteFill, useVideoConfig, useCurrentFrame, interpolate, spring, Easing } from 'remotion';
+import { RecordingSession, RecordEvent } from '../types/record-mode';
+
+export const WebsiteVideo: React.FC<{
+ session: RecordingSession | null;
+ siteUrl: string;
+}> = ({ session, siteUrl }) => {
+ const { fps, width, height, durationInFrames } = useVideoConfig();
+ const frame = useCurrentFrame();
+
+ if (!session || !session.events.length) {
+ return (
+
+ No session data found.
+
+ );
+ }
+
+ const sortedEvents = useMemo(() => {
+ return [...session.events].sort((a, b) => a.timestamp - b.timestamp);
+ }, [session]);
+
+ const elapsedTimeMs = (frame / fps) * 1000;
+
+ // --- Interpolation Logic ---
+
+ // 1. Find the current window (between which two events are we?)
+ const nextEventIndex = sortedEvents.findIndex(e => e.timestamp > elapsedTimeMs);
+ let currentEventIndex;
+
+ if (nextEventIndex === -1) {
+ // We are past the last event, stay at the end
+ currentEventIndex = sortedEvents.length - 1;
+ } else {
+ currentEventIndex = Math.max(0, nextEventIndex - 1);
+ }
+
+ const currentEvent = sortedEvents[currentEventIndex];
+ // If there is no next event, we just stay at current (next=current)
+ const nextEvent = (nextEventIndex !== -1) ? sortedEvents[nextEventIndex] : currentEvent;
+
+ // 2. Calculate Progress between events
+ const gap = nextEvent.timestamp - currentEvent.timestamp;
+ const progress = gap > 0 ? (elapsedTimeMs - currentEvent.timestamp) / gap : 1;
+ const easedProgress = Easing.cubic(Math.min(Math.max(progress, 0), 1));
+
+ // 3. Calculate Cursor Position from Rects
+ const getCenter = (event: RecordEvent) => {
+ if (event.rect) {
+ return {
+ x: event.rect.x + event.rect.width / 2,
+ y: event.rect.y + event.rect.height / 2
+ };
+ }
+ return { x: width / 2, y: height / 2 };
+ };
+
+ const p1 = getCenter(currentEvent);
+ const p2 = getCenter(nextEvent);
+
+ const cursorX = interpolate(easedProgress, [0, 1], [p1.x, p2.x]);
+ const cursorY = interpolate(easedProgress, [0, 1], [p1.y, p2.y]);
+
+ // 4. Zoom & Blur
+ const zoom = interpolate(easedProgress, [0, 1], [currentEvent.zoom || 1, nextEvent.zoom || 1]);
+ const isBlurry = currentEvent.motionBlur || nextEvent.motionBlur;
+
+ return (
+
+
+
+
+
+ {/* Visual Cursor */}
+
+
+ );
+};
diff --git a/remotion/index.ts b/remotion/index.ts
new file mode 100644
index 00000000..91fa0f34
--- /dev/null
+++ b/remotion/index.ts
@@ -0,0 +1,4 @@
+import { registerRoot } from 'remotion';
+import { RemotionRoot } from './Root';
+
+registerRoot(RemotionRoot);
diff --git a/remotion/session.json b/remotion/session.json
new file mode 100644
index 00000000..9b8be250
--- /dev/null
+++ b/remotion/session.json
@@ -0,0 +1,35 @@
+{
+ "id": "sample-session",
+ "name": "Sample Recording",
+ "createdAt": "2024-03-20T10:00:00.000Z",
+ "events": [
+ {
+ "id": "1",
+ "type": "click",
+ "timestamp": 1000,
+ "duration": 1000,
+ "zoom": 1,
+ "selector": "body",
+ "rect": {
+ "x": 100,
+ "y": 100,
+ "width": 50,
+ "height": 50
+ }
+ },
+ {
+ "id": "2",
+ "type": "scroll",
+ "timestamp": 2500,
+ "duration": 1500,
+ "zoom": 1,
+ "selector": "footer",
+ "rect": {
+ "x": 500,
+ "y": 800,
+ "width": 100,
+ "height": 50
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/scripts/cms-apply.sh b/scripts/cms-apply.sh
index 62d61c65..f7d8b49c 100755
--- a/scripts/cms-apply.sh
+++ b/scripts/cms-apply.sh
@@ -9,7 +9,7 @@ if [ -z "$ENV" ]; then
exit 1
fi
-PRJ_ID=$(jq -r .name package.json | sed 's/@mintel\///' | sed 's/\.com$//' | sed 's/-nextjs$//')
+PRJ_ID=$(jq -r .name package.json | sed 's/@mintel\///' | sed 's/\.com$//' | sed 's/-nextjs$//' | sed 's/-cables$//')
case $ENV in
local)
@@ -26,8 +26,8 @@ case $ENV in
testing) PROJECT_NAME="${PRJ_ID}-testing" ;;
staging) PROJECT_NAME="${PRJ_ID}-staging" ;;
production)
- PROJECT_NAME="${PRJ_ID}-prod"
- OLD_PROJECT_NAME="${PRJ_ID}com" # Fallback for legacy naming
+ PROJECT_NAME="${PRJ_ID}-production"
+ OLD_PROJECT_NAME="${PRJ_ID}-prod" # Fallback for previous convention
;;
esac
diff --git a/scripts/sync-directus.sh b/scripts/sync-directus.sh
index fd31f285..42659cea 100755
--- a/scripts/sync-directus.sh
+++ b/scripts/sync-directus.sh
@@ -5,7 +5,7 @@ REMOTE_HOST="root@alpha.mintel.me"
REMOTE_DIR="/home/deploy/sites/klz-cables.com"
# DB Details (matching docker-compose defaults)
-DB_USER="directus"
+DB_USER="klz_db_user"
DB_NAME="directus"
ACTION=$1
@@ -49,9 +49,9 @@ esac
# Detect local container
echo "🔍 Detecting local database..."
# Use a more robust way to find the container if multiple projects exist locally
-LOCAL_DB_CONTAINER=$(docker compose ps -q directus-db)
+LOCAL_DB_CONTAINER=$(docker compose ps -q klz-directus-db)
if [ -z "$LOCAL_DB_CONTAINER" ]; then
- echo "❌ Local directus-db container not found. Is it running? (npm run dev)"
+ echo "❌ Local klz-directus-db container not found. Is it running? (npm run dev)"
exit 1
fi
diff --git a/styles/globals.css b/styles/globals.css
index 1ff4b993..9d36c851 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -7,16 +7,19 @@
--font-heading: 'Inter', system-ui, sans-serif;
--font-body: 'Inter', system-ui, sans-serif;
- --color-primary: #001a4d; /* Deep Blue */
+ --color-primary: #001a4d;
+ /* Deep Blue */
--color-primary-dark: #000d26;
--color-primary-light: #e6ebf5;
- --color-saturated: #011dff; /* Saturated Blue Accent */
+ --color-saturated: #011dff;
+ /* Saturated Blue Accent */
--color-secondary: #003d82;
--color-secondary-light: #0056b3;
- --color-accent: #82ed20; /* Sustainability Green */
+ --color-accent: #82ed20;
+ /* Sustainability Green */
--color-accent-dark: #6bc41a;
--color-accent-light: #f0f9e6;
@@ -40,76 +43,107 @@
--animate-slide-up: slide-up 0.6s ease-out;
--animate-slow-zoom: slow-zoom 20s linear infinite;
--animate-reveal: reveal 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
- --animate-slight-fade-in-from-bottom: slight-fade-in-from-bottom 0.8s
- cubic-bezier(0.16, 1, 0.3, 1) forwards;
+ --animate-slight-fade-in-from-bottom: slight-fade-in-from-bottom 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
--animate-gradient-x: gradient-x 15s ease infinite;
@keyframes gradient-x {
+
0%,
100% {
background-position: 0% 50%;
}
+
50% {
background-position: 100% 50%;
}
}
+
@keyframes fade-in {
from {
opacity: 0;
}
+
to {
opacity: 1;
}
}
+
@keyframes slide-up {
from {
opacity: 0;
transform: translateY(20px);
}
+
to {
opacity: 1;
transform: translateY(0);
}
}
+
@keyframes slow-zoom {
from {
transform: scale(1);
}
+
to {
transform: scale(1.1);
}
}
+
@keyframes reveal {
from {
opacity: 0;
transform: translateY(20px);
filter: blur(8px);
}
+
to {
opacity: 1;
transform: translateY(0);
filter: blur(0);
}
}
+
@keyframes slight-fade-in-from-bottom {
from {
opacity: 0;
transform: translateY(10px);
filter: blur(4px);
}
+
to {
opacity: 1;
transform: translateY(0);
filter: blur(0);
}
}
+
+ @keyframes float {
+ 0% {
+ transform: translate(0, 0) scale(1);
+ }
+
+ 33% {
+ transform: translate(2%, 4%) scale(1.1);
+ }
+
+ 66% {
+ transform: translate(-3%, 2%) scale(0.9);
+ }
+
+ 100% {
+ transform: translate(0, 0) scale(1);
+ }
+ }
}
@layer base {
+
.bg-primary a,
.bg-primary-dark a {
@apply text-white/90 hover:text-white transition-colors;
}
+
body {
@apply text-base md:text-lg antialiased;
text-rendering: optimizeLegibility;
@@ -132,18 +166,23 @@
h1 {
@apply text-3xl md:text-5xl lg:text-6xl leading-[1.1];
}
+
h2 {
@apply text-2xl md:text-4xl lg:text-5xl leading-[1.2];
}
+
h3 {
@apply text-xl md:text-2xl lg:text-3xl leading-[1.3];
}
+
h4 {
@apply text-lg md:text-xl lg:text-2xl leading-[1.4];
}
+
h5 {
@apply text-base md:text-lg leading-[1.5];
}
+
h6 {
@apply text-sm md:text-base leading-[1.6];
}
@@ -202,18 +241,23 @@
.glass-panel {
@apply bg-white/80 backdrop-blur-md border border-white/20 shadow-lg;
}
+
.image-overlay-gradient {
@apply absolute inset-0 bg-gradient-to-t from-black/90 via-black/40 to-transparent;
}
+
.premium-card {
@apply bg-white rounded-3xl shadow-sm transition-all duration-500 hover:shadow-2xl hover:-translate-y-1;
}
+
.sticky-narrative-container {
@apply grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-20;
}
+
.sticky-narrative-sidebar {
@apply lg:col-span-4 lg:sticky lg:top-32 h-fit;
}
+
.sticky-narrative-content {
@apply lg:col-span-8;
}
@@ -221,7 +265,8 @@
/* Custom Utilities */
@utility touch-target {
- min-height: 48px; /* Increased for better touch-first feel */
+ min-height: 48px;
+ /* Increased for better touch-first feel */
min-width: 48px;
display: inline-flex;
align-items: center;
@@ -276,4 +321,4 @@
@utility content-visibility-auto {
content-visibility: auto;
contain-intrinsic-size: 1px 1000px;
-}
+}
\ No newline at end of file
diff --git a/traefik_dump.json b/traefik_dump.json
new file mode 100644
index 00000000..e69de29b
diff --git a/tsconfig.json b/tsconfig.json
index 116822fd..6cbe0360 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,10 +3,18 @@
"compilerOptions": {
"baseUrl": ".",
"paths": {
- "@/*": ["./*"],
- "lib/*": ["./lib/*"],
- "components/*": ["./components/*"],
- "data/*": ["./data/*"]
+ "@/*": [
+ "./*"
+ ],
+ "lib/*": [
+ "./lib/*"
+ ],
+ "components/*": [
+ "./components/*"
+ ],
+ "data/*": [
+ "./data/*"
+ ]
}
},
"include": [
@@ -17,5 +25,11 @@
"tests/**/*.test.ts",
".next/dev/types/**/*.ts"
],
- "exclude": ["node_modules", "scripts", "reference", "data"]
-}
+ "exclude": [
+ "node_modules",
+ "scripts",
+ "reference",
+ "data",
+ "remotion"
+ ]
+}
\ No newline at end of file
diff --git a/types/record-mode.ts b/types/record-mode.ts
index 7a11f470..ed8a01dd 100644
--- a/types/record-mode.ts
+++ b/types/record-mode.ts
@@ -7,6 +7,7 @@ export interface RecordEvent {
zoom?: number; // Zoom level during event
description?: string; // Optional label
motionBlur?: boolean; // Enable motion blur effect
+ rect?: { x: number; y: number; width: number; height: number }; // Element position for rendering
}
export interface RecordingSession {