takt

Angular

Angular a un wrapper dédié : @vskstudio/takt-angular (provider, service, directive, composants badge/embed, web component), bâti sur le cœur @vskstudio/takt-core. APIs standalone pour Angular 17+.

pnpm add @vskstudio/takt-angular @vskstudio/takt-core

Le package est entièrement typé et sûr au SSR : côté serveur, provideTakt est inerte et TaktService no-ope. Il expose deux points d’entrée :

  • @vskstudio/takt-angularprovideTakt(), le TaktService injectable, la directive [taktEvent], les composants TaktBadgeComponent / TaktEmbedComponent et le token TAKT_CONFIG. Il réexporte aussi createStats, badgeUrl, embedUrl et PublicApiError du cœur.
  • @vskstudio/takt-angular/element — le web component <takt-analytics> autonome, pour du HTML pur.

Setup avec provideTakt()

Enregistre Takt une seule fois au bootstrap avec provideTakt. Il ne boote que dans le navigateur, émet le pageview initial, câble l’autocapture demandée et libère tout quand l’application est détruite.

import { bootstrapApplication } from '@angular/platform-browser'
import { provideTakt } from '@vskstudio/takt-angular'
import { AppComponent } from './app/app.component'

bootstrapApplication(AppComponent, {
  providers: [
    provideTakt({
      // domain par défaut = location.hostname, endpoint = https://taktlytics.com/api/event
      outbound: true, // suit les liens sortants
      files: true // suit les téléchargements (ou passe ['pdf', 'zip'])
      // spa: true, respectDnt: true, excludeLocalhost: true (défauts)
    })
  ]
})

Options de TaktConfig :

OptionTypeDéfautRôle
domainstringlocation.hostnameIdentifiant du site
endpointstringhttps://taktlytics.com/api/eventURL d’ingestion. Passe /api/event pour un proxy first-party same-origin.
scriptOriginstringOrigine first-party dont dériver l’endpoint ({origin}/api/event) ; endpoint l’emporte
outboundbooleanfalseSuit les liens sortants
filesboolean \| string[]falseSuit les téléchargements (liste d’extensions optionnelle)
spabooleantrueSuit la navigation client (pageviews auto)
track404booleanfalseSignale un événement 404 sur les pages d’erreur (marqueur [data-takt-404] / <meta name="takt:404">, ou statut HTTP 404).
taggedbooleanfalseEvents custom depuis les éléments [data-takt-event]
respectDntbooleantrueRespecte Do Not Track
excludeLocalhostbooleantrueIgnore localhost / IP privées
enabledbooleantrueCoupe tout envoi quand false (l’emporte sur le reste)
sampleRatenumber1Échantillonne les events envoyés (0–1)
trackQuerybooleanfalseConserve la query string telle quelle
queryParamsstring[]Allowlist de paramètres de query à garder
excludestring[]Préfixes de chemin jamais suivis, ex. ['/app', '/account'] (borné au segment)
scrubUrl(url) => urlNettoyage d’URL sur mesure (config seulement)

La sémantique de ces réglages est détaillée dans Configuration.

TaktService

Injecte TaktService n’importe où pour émettre des events impérativement. Aucune méthode ne lève avant l’init ou côté serveur : track() et pageview() sont alors sans effet et émettent un console.warn unique, optOut() / optIn() sont silencieux.

import { Component, inject } from '@angular/core'
import { TaktService } from '@vskstudio/takt-angular'

@Component({ /* ... */ })
export class CheckoutComponent {
  private readonly takt = inject(TaktService)

  buy() {
    this.takt.track('Purchase', {
      props: { plan: 'pro' },
      revenue: { amount: '29.00', currency: 'EUR' }
    })
  }

  // takt.pageview(), takt.optOut(), takt.optIn() et takt.instance sont aussi dispo.
}

Directive [taktEvent]

Pour du suivi de clic déclaratif, la directive taktEvent résout l’instance active au moment du clic. Importe-la dans un composant standalone :

import { TaktEventDirective } from '@vskstudio/takt-angular'

@Component({
  standalone: true,
  imports: [TaktEventDirective],
  template: `
    <button
      taktEvent="Signup"
      [taktProps]="{ plan: 'pro' }"
      [taktRevenue]="{ amount: '29.00', currency: 'EUR' }"
    >
      S'inscrire
    </button>
  `
})
export class SignupComponent {}

Widgets

Deux composants standalone affichent les widgets publics d’un site : TaktBadgeComponent (<takt-badge>, l’image SVG rendue par le serveur) et TaktEmbedComponent (<takt-embed>, le mini-tableau de bord en iframe). Ils demandent un site public et vérifié.

import { TaktBadgeComponent, TaktEmbedComponent } from '@vskstudio/takt-angular'

@Component({
  standalone: true,
  imports: [TaktBadgeComponent, TaktEmbedComponent],
  template: `
    <takt-badge domain="exemple.fr" variant="d"></takt-badge>
    <takt-embed domain="exemple.fr" theme="dark"></takt-embed>
  `
})
export class StatsPubliquesComponent {}

domain est requis. Le badge accepte en plus variant, glyph, lang, host et alt ; l’embed theme, lang, host, width, height et title. host pointe l’adresse de Takt (par défaut https://taktlytics.com) — renseigne-le si tu sers les widgets depuis un domaine personnalisé. Pour lire les mêmes chiffres en TypeScript, le paquet réexporte createStats, badgeUrl, embedUrl et PublicApiError du cœur.

Web component <takt-analytics>

Pour des pages non-Angular (ou un simple <script>), utilise l’élément <takt-analytics> autonome. spa, respect-dnt et exclude-localhost sont actifs par défaut : mets-les à "false" pour les couper. outbound, files, track404 et tagged sont des drapeaux de présence — l’attribut seul suffit à les activer.

import { defineTaktElement } from '@vskstudio/takt-angular/element'
defineTaktElement() // s'exécute aussi automatiquement à l'import
<takt-analytics domain="exemple.fr" outbound files></takt-analytics>

Attributs reconnus :

AttributValeurRôle
domainchaîneIdentifiant du site
endpointchaîneURL d’ingestion
script-originchaîneOrigine first-party dont dériver l’endpoint
spa"false" pour couperSuit la navigation client (pageviews auto)
respect-dnt"false" pour couperRespecte Do Not Track
exclude-localhost"false" pour couperIgnore localhost / IP privées
enabled"false" pour couperCoupe tout envoi
sample-ratenombreÉchantillonne les events envoyés (0–1)
track-queryprésenceConserve la query string telle quelle
query-paramsliste séparée par des virgulesAllowlist de paramètres de query à garder
excludeliste séparée par des virgulesPréfixes de chemin jamais suivis
outboundprésenceSuit les liens sortants
filesprésenceSuit les téléchargements (pas de liste d’extensions ici)
track404présenceSignale un événement 404 sur les pages d’erreur
taggedprésenceEvents custom depuis les éléments [data-takt-event]

scrubUrl n’a pas d’équivalent en attribut : passe par provideTakt() pour une réécriture d’URL sur mesure.

Via CDN (embarque le cœur, aucun build) :

<script type="module" src="https://unpkg.com/@vskstudio/takt-angular"></script>
<takt-analytics></takt-analytics>
provideTakt renvoie des EnvironmentProviders : installe-le au bootstrap. TAKT_CONFIG est un InjectionToken portant la config résolue, si tu as besoin de la lire ailleurs.