ArtisanPack UI
DocsAnalyticsTypeScript Types

TypeScript Types

Analytics v1.4.0

> Since 1.1.0 Shared TypeScript type definitions used across both React and Vue components. Published to during frontend installation. Event type...

Since 1.1.0

Shared TypeScript type definitions used across both React and Vue components. Published to resources/js/vendor/artisanpack-analytics/types/ during frontend installation.

Importing Types

// From React package
import type { StatsData, TopPageItem, DateRange } from '@/vendor/artisanpack-analytics/react';

// From Vue package
import type { StatsData, TopPageItem, DateRange } from '@/vendor/artisanpack-analytics/vue';

// Directly from types
import type { StatsData } from '@/vendor/artisanpack-analytics/types';

Enums

EventType

Event type identifiers for tracking.

enum EventType {
    PAGE_VIEW = 'page_view',
    SESSION_START = 'session_start',
    SESSION_END = 'session_end',
    CLICK = 'click',
    SCROLL = 'scroll',
    SEARCH = 'search',
    DOWNLOAD = 'download',
    OUTBOUND_LINK = 'outbound_link',
    VIDEO_PLAY = 'video_play',
    VIDEO_COMPLETE = 'video_complete',
    FORM_START = 'form_start',
    FORM_SUBMIT = 'form_submit',
    FORM_ABANDON = 'form_abandon',
    PRODUCT_VIEW = 'product_view',
    ADD_TO_CART = 'add_to_cart',
    REMOVE_FROM_CART = 'remove_from_cart',
    BEGIN_CHECKOUT = 'begin_checkout',
    PURCHASE = 'purchase',
    BOOKING_START = 'booking_start',
    BOOKING_COMPLETE = 'booking_complete',
}

ConsentCategory

enum ConsentCategory {
    ANALYTICS = 'analytics',
    MARKETING = 'marketing',
    FUNCTIONAL = 'functional',
    PREFERENCES = 'preferences',
}

GoalType

enum GoalType {
    EVENT = 'event',
    PAGEVIEW = 'pageview',
    DURATION = 'duration',
    PAGES_PER_SESSION = 'pages_per_session',
}

GoalValueType

enum GoalValueType {
    NONE = 'none',
    FIXED = 'fixed',
    DYNAMIC = 'dynamic',
}

AggregatePeriod

enum AggregatePeriod {
    HOUR = 'hour',
    DAY = 'day',
    WEEK = 'week',
    MONTH = 'month',
}

AggregateMetric

enum AggregateMetric {
    PAGEVIEWS = 'pageviews',
    VISITORS = 'visitors',
    SESSIONS = 'sessions',
    BOUNCE_RATE = 'bounce_rate',
    AVG_DURATION = 'avg_duration',
    AVG_PAGES = 'avg_pages',
    EVENTS = 'events',
    CONVERSIONS = 'conversions',
    CONVERSION_VALUE = 'conversion_value',
}

AggregateDimension

enum AggregateDimension {
    PATH = 'path',
    COUNTRY = 'country',
    DEVICE_TYPE = 'device_type',
    BROWSER = 'browser',
    REFERRER_TYPE = 'referrer_type',
    UTM_SOURCE = 'utm_source',
    EVENT_NAME = 'event_name',
    EVENT_CATEGORY = 'event_category',
    GOAL_ID = 'goal_id',
}

Type Aliases

type DateRangePreset = '7d' | '30d' | '90d' | 'today' | 'yesterday'
    | 'this_week' | 'last_week' | 'this_month' | 'last_month' | 'this_year';

type DeviceType = 'desktop' | 'mobile' | 'tablet';

type ReferrerType = 'direct' | 'organic' | 'social' | 'referral' | 'email' | 'paid';

type EventCategory = 'forms' | 'ecommerce' | 'booking' | 'engagement' | null;

API Response Types

StatsData

interface StatsData {
    pageviews: number;
    visitors: number;
    sessions: number;
    bounce_rate: number;
    avg_session_duration: number;
    pages_per_session?: number;
    realtime_visitors?: number;
    comparison?: StatsComparison | null;
}

StatsComparison

interface StatsComparison {
    pageviews: ComparisonValue;
    visitors: ComparisonValue;
    sessions: ComparisonValue;
    bounce_rate: ComparisonValue;
    avg_session_duration: ComparisonValue;
}

interface ComparisonValue {
    current: number;
    previous: number;
    change: number;
    change_percentage: number;
}

TopPageItem

interface TopPageItem {
    path: string;
    title: string;
    views: number;
    unique_views: number;
}

TrafficSourceItem

interface TrafficSourceItem {
    source: string;
    medium: string;
    sessions: number;
    visitors: number;
}

Breakdown Types

interface BrowserBreakdownItem {
    browser: string;
    version: string;
    sessions: number;
    percentage: number;
}

interface CountryBreakdownItem {
    country: string;
    country_code: string;
    sessions: number;
    percentage: number;
}

interface DeviceBreakdownItem {
    device_type: DeviceType;
    sessions: number;
    percentage: number;
}

interface EventBreakdownItem {
    name: string;
    category: string;
    count: number;
    total_value: number;
    percentage: number;
}

Realtime Types

interface RealtimeData {
    active_visitors: number;
    active_pages: RealtimePageView[];
    visitors_over_time: number[];
}

interface RealtimePageView {
    path: string;
    title: string;
    visitors: number;
}
interface ConsentStatusItem {
    category: string;
    granted: boolean;
    granted_at: string | null;
    expires_at: string | null;
}

interface ConsentUpdateRequest {
    visitor_id: string;
    categories: Record<string, boolean>;
}

interface ConsentUpdateResponse {
    success: boolean;
    categories: Record<string, boolean>;
}

Query Params

interface AnalyticsQueryParams {
    period?: DateRangePreset;
    start_date?: string;
    end_date?: string;
    site_id?: number;
    path?: string;
    category?: string;
    limit?: number;
}

interface RealtimeQueryParams {
    minutes?: number;
    site_id?: number;
}

Data Transfer Objects

DateRange

interface DateRange {
    start_date: string;
    end_date: string;
}

DeviceInfo

interface DeviceInfo {
    device_type: DeviceType;
    browser: string;
    browser_version: string;
    os: string;
    os_version: string;
    is_bot: boolean;
}

PageViewData

interface PageViewData {
    path: string;
    title: string;
    referrer: string | null;
    device_type: DeviceType;
    browser: string;
    browser_version: string;
    os: string;
    os_version: string;
    viewport_width: number;
    viewport_height: number;
    screen_width: number;
    screen_height: number;
    utm_source: string | null;
    utm_medium: string | null;
    utm_campaign: string | null;
    utm_term: string | null;
    utm_content: string | null;
    load_time: number | null;
    dom_ready_time: number | null;
    custom_data: Record<string, unknown> | null;
}

EventData

interface EventData {
    name: string;
    properties: Record<string, unknown>;
    session_id: string | null;
    visitor_id: string | null;
    page_view_id: number | null;
    category: EventCategory;
    action: string | null;
    label: string | null;
    value: number | null;
}

Model Interfaces

Full TypeScript interfaces for all Eloquent models (Visitor, Session, PageView, AnalyticsEvent, Goal, Conversion, Consent, Site, Aggregate) are available in types/models.ts. These mirror the PHP model properties and relationships.

Dashboard Component Props

Props interfaces for all dashboard page components are available in types/dashboard.ts:

  • AnalyticsDashboardProps
  • PageAnalyticsProps
  • MultiTenantDashboardProps
  • PlatformDashboardProps
  • ChartData, ChartDataset
  • DashboardStats, DashboardTab