{"_id":"@cacic-fct/ngx-umami","_rev":"3-c1d7ff84f7163a46a483c11af17c8901","name":"@cacic-fct/ngx-umami","dist-tags":{"latest":"1.2.3"},"versions":{"0.1.2":{"name":"@cacic-fct/ngx-umami","version":"0.1.2","_id":"@cacic-fct/ngx-umami@0.1.2","maintainers":[{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"}],"dist":{"shasum":"96050e26449b2321a85f61598b33ef3740a61bf2","tarball":"https://registry.npmjs.org/@cacic-fct/ngx-umami/-/ngx-umami-0.1.2.tgz","fileCount":57,"integrity":"sha512-BjivYVtKmXbiiSFF31LCBWxoCyuWdAovJLT7aK3GgqGm38i2LKz419ZvVemn1IR45OBlO6DgPH8Qkrg7EhIcVw==","signatures":[{"sig":"MEYCIQCp+Z5yWS0ytJZ7ju8tn0C5Xef8FOf+LPJd0+68lH64RQIhAJDfJviR4qN/3kKjZJ+//7a7OrR38xjGHh/ddsQKZ7Iz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333384},"shasum":"96050e26449b2321a85f61598b33ef3740a61bf2","scripts":{"lint":"ng lint ngx-umami","test":"ng test ngx-umami","build":"ng build ngx-umami","format":"prettier --write \"projects/**/*.ts\"","lint:fix":"ng lint ngx-umami --fix","build:watch":"ng build ngx-umami --watch","publish:lib":"cd dist/ngx-umami && npm publish --access public","format:check":"prettier --check \"projects/**/*.ts\"","test:coverage":"ng test ngx-umami --no-watch --code-coverage --browsers=ChromeHeadless","version:major":"cd projects/ngx-umami && bun version major --no-git-tag-version","version:minor":"cd projects/ngx-umami && bun version minor --no-git-tag-version","version:patch":"cd projects/ngx-umami && bun version patch --no-git-tag-version","prepublish:lib":"bun run lint && bun run test:coverage && bun run build"},"_npmUser":{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"},"_integrity":"sha512-BjivYVtKmXbiiSFF31LCBWxoCyuWdAovJLT7aK3GgqGm38i2LKz419ZvVemn1IR45OBlO6DgPH8Qkrg7EhIcVw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"rxjs":"^7.4.0","tslib":"2.8.1","@angular/core":"21.2.12","@angular/common":"21.2.12","@angular/router":"21.2.12"},"_hasShrinkwrap":false,"devDependencies":{"karma":"6.4.4","eslint":"10.3.0","zone.js":"0.16.2","prettier":"3.8.3","@eslint/js":"10.0.1","ng-packagr":"21.2.3","typescript":"5.9","@angular/cli":"21.2.10","jasmine-core":"6.2.0","karma-jasmine":"5.1.0","@angular/build":"^21.2.10","@types/jasmine":"6.0.0","angular-eslint":"21.3.1","karma-coverage":"2.2.1","@angular/compiler":"21.2.12","typescript-eslint":"8.59.3","@angular/compiler-cli":"21.2.12","karma-chrome-launcher":"3.2.0","eslint-config-prettier":"10.1.8","eslint-plugin-prettier":"5.5.5","@angular-eslint/builder":"21.3.1","@angular/platform-browser":"21.2.12","karma-jasmine-html-reporter":"2.2.0","@angular/platform-browser-dynamic":"21.2.12"},"_npmOperationalInternal":{"tmp":"tmp/ngx-umami_0.1.2_1782421739208_0.954625919059714","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@cacic-fct/ngx-umami","version":"1.2.2","keywords":["angular","umami","analytics","tracking","privacy","gdpr","events","pageview"],"author":{"name":"Eddye Rios"},"license":"MIT","_id":"@cacic-fct/ngx-umami@1.2.2","maintainers":[{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"}],"homepage":"https://github.com/cacic-fct/ngx-umami#readme","bugs":{"url":"https://github.com/cacic-fct/ngx-umami/issues"},"dist":{"shasum":"dfa89d0f548551734a4a0c158a104d0cd283fa2e","tarball":"https://registry.npmjs.org/@cacic-fct/ngx-umami/-/ngx-umami-1.2.2.tgz","fileCount":5,"integrity":"sha512-5oN4R9JAWJqE7wiltfnZolfzDpkygYU1L2giCDYuCNAi1I9H+muKeOlOP9uFmafbOpxX3YoQ5kEZ51xisENJeg==","signatures":[{"sig":"MEUCIEgPuQH7LYWwl1lHAsfpJEa9eCnEFNLg9xVFygShrW+YAiEA9pBKPW1qfD8TXm6iWA6UqDtEd+d6HOSoxVqyc3PmND0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62220},"type":"module","module":"fesm2022/cacic-fct-ngx-umami.mjs","exports":{".":{"types":"./types/cacic-fct-ngx-umami.d.ts","default":"./fesm2022/cacic-fct-ngx-umami.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"4e1f7f07ad46f4be2eaaa9907cfef07e0481ee90","typings":"types/cacic-fct-ngx-umami.d.ts","_npmUser":{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"},"repository":{"url":"git+https://github.com/cacic-fct/ngx-umami.git","type":"git"},"_npmVersion":"11.6.0","description":"Angular library for Umami Analytics - privacy-focused, lightweight analytics tracking","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":">=17.0.0","@angular/common":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ngx-umami_1.2.2_1782426698960_0.2727002767133875","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@cacic-fct/ngx-umami","version":"1.2.3","description":"Angular library for Umami Analytics - privacy-focused, lightweight analytics tracking","license":"MIT","author":{"name":"Eddye Rios"},"repository":{"type":"git","url":"git+https://github.com/cacic-fct/ngx-umami.git"},"keywords":["angular","umami","analytics","tracking","privacy","gdpr","events","pageview"],"peerDependencies":{"@angular/common":">=17.0.0","@angular/core":">=17.0.0","@angular/router":">=17.0.0"},"peerDependenciesMeta":{"@angular/router":{"optional":true}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"sideEffects":false,"module":"fesm2022/cacic-fct-ngx-umami.mjs","typings":"types/cacic-fct-ngx-umami.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./types/cacic-fct-ngx-umami.d.ts","default":"./fesm2022/cacic-fct-ngx-umami.mjs"}},"type":"module","dependencies":{"tslib":"^2.3.0"},"_id":"@cacic-fct/ngx-umami@1.2.3","gitHead":"2d4a8604c1baed78f1bcc577994329ffbd334316","bugs":{"url":"https://github.com/cacic-fct/ngx-umami/issues"},"homepage":"https://github.com/cacic-fct/ngx-umami#readme","_nodeVersion":"26.3.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-F/cCZR+Dyheg95Qc5cB0LqCCa+AJNNr2owZ8hZXgOeTG+Cj78cHcTLjgGxFZ9vdQKEPO5W6CDVWjn01yzgzo0A==","shasum":"aaeea9fc220a965fec098fcd1ff7a8f9bd85563e","tarball":"https://registry.npmjs.org/@cacic-fct/ngx-umami/-/ngx-umami-1.2.3.tgz","fileCount":5,"unpackedSize":62445,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBT7Xf0MvZJSdBzsDWAA5Vtq14NzW/UBji1y0xzWBiItAiB3SffF5X/DhLJmcEQPMv7FPFt+uGEiODVTiULpvAINeg=="}]},"_npmUser":{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"},"directories":{},"maintainers":[{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ngx-umami_1.2.3_1782427200580_0.270837348864182"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T21:08:58.981Z","modified":"2026-06-25T22:40:00.879Z","0.1.2":"2026-06-25T21:08:59.349Z","1.2.2":"2026-06-25T22:31:39.080Z","1.2.3":"2026-06-25T22:40:00.744Z"},"bugs":{"url":"https://github.com/cacic-fct/ngx-umami/issues"},"author":{"name":"Eddye Rios"},"license":"MIT","homepage":"https://github.com/cacic-fct/ngx-umami#readme","keywords":["angular","umami","analytics","tracking","privacy","gdpr","events","pageview"],"repository":{"type":"git","url":"git+https://github.com/cacic-fct/ngx-umami.git"},"description":"Angular library for Umami Analytics - privacy-focused, lightweight analytics tracking","maintainers":[{"name":"renanyudi","email":"renanyaguinuma@hotmail.com"}],"readme":"# ngx-umami\n\nAngular library for [Umami Analytics](https://umami.is/) - a privacy-focused, lightweight analytics platform.\n\n[![npm version](https://badge.fury.io/js/%40cacic-fct%2Fngx-umami.svg)](https://www.npmjs.com/package/@cacic-fct/ngx-umami)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Features\n\n- 🚀 **Easy Setup** - Simple standalone configuration with `provideUmami()`\n- 📊 **Event Tracking** - Track custom events with optional data payloads\n- 🔄 **Router Integration** - Automatic page view tracking on route changes\n- 🎯 **Directive** - Declarative event tracking with `umamiTrack` directive\n- 🔒 **Privacy First** - Respects Do Not Track, GDPR compliant\n- 🌐 **SSR Compatible** - Works with Angular Universal/SSR\n- 📦 **Tree-shakeable** - Only includes what you use\n\n## Compatibility\n\n| Angular Version | ngx-umami Version |\n|-----------------|-------------------|\n| 17.x and later  | 1.x               |\n\n## Installation\n\n```bash\n# Recommended\npnpm add @cacic-fct/ngx-umami\n\n# Or with npm\nnpm install @cacic-fct/ngx-umami\n\n# Or with yarn\nyarn add @cacic-fct/ngx-umami\n```\n\n> **Note:** We recommend using [pnpm](https://pnpm.io/) for faster installs and better disk space efficiency.\n\n## Quick Start\n\n### 1. Configure in your app\n\n```typescript\n// app.config.ts\nimport { ApplicationConfig } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { provideUmami, withRouterTracking } from '@cacic-fct/ngx-umami';\n\nexport const appConfig: ApplicationConfig = {\n  providers: [\n    provideRouter(routes),\n    provideUmami({\n      websiteId: 'your-website-id',\n      src: 'https://analytics.yourdomain.com/script.js'\n    }),\n    // Optional: Enable automatic page view tracking on route changes\n    withRouterTracking()\n  ]\n};\n```\n\n### 2. Track events in components\n\n```typescript\nimport { Component } from '@angular/core';\nimport { injectUmami } from '@cacic-fct/ngx-umami';\n\n@Component({\n  selector: 'app-checkout',\n  template: `<button (click)=\"onPurchase()\">Buy Now</button>`\n})\nexport class CheckoutComponent {\n  private umami = injectUmami();\n\n  onPurchase() {\n    this.umami.trackEvent('purchase', {\n      product: 'Premium Plan',\n      price: 99.99,\n      currency: 'USD'\n    });\n  }\n}\n```\n\n### 3. Or use the directive\n\n```typescript\nimport { Component } from '@angular/core';\nimport { UmamiTrackDirective } from '@cacic-fct/ngx-umami';\n\n@Component({\n  selector: 'app-signup',\n  standalone: true,\n  imports: [UmamiTrackDirective],\n  template: `\n    <button umamiTrack=\"signup_click\">Sign Up</button>\n\n    <button\n      umamiTrack=\"cta_click\"\n      [umamiTrackData]=\"{ location: 'header', variant: 'blue' }\">\n      Get Started\n    </button>\n  `\n})\nexport class SignupComponent {}\n```\n\n## Configuration Options\n\n```typescript\nprovideUmami({\n  // Required\n  websiteId: 'your-website-id',  // From Umami dashboard\n  src: 'https://analytics.example.com/script.js',  // Your Umami script URL\n\n  // Optional\n  enabled: true,              // Enable/disable tracking (default: true)\n  autoTrack: true,            // Auto track page views (default: true)\n  doNotTrack: false,          // Honor browser DNT setting (default: false)\n  domains: ['example.com'],   // Restrict to specific domains\n  tag: 'production',          // Tag for filtering in dashboard\n  excludeSearch: false,       // Exclude URL search params\n  excludeHash: false,         // Exclude URL hash\n  hostUrl: 'https://proxy.example.com'  // Custom data endpoint\n})\n```\n\n## API Reference\n\n### UmamiService\n\n#### `trackPageView(payload?)`\n\nTrack a page view manually.\n\n```typescript\numami.trackPageView();\n\numami.trackPageView({\n  url: '/custom-page',\n  title: 'Custom Page Title',\n  referrer: 'https://google.com'\n});\n```\n\n#### `trackEvent(eventName, eventData?)`\n\nTrack a custom event.\n\n```typescript\n// Simple event\numami.trackEvent('button_click');\n\n// Event with data (max 50 properties)\numami.trackEvent('form_submit', {\n  formName: 'contact',\n  fields: 5,\n  hasAttachment: true\n});\n```\n\n#### `identify(sessionIdOrData, sessionData?)`\n\nIdentify user sessions.\n\n```typescript\n// With session ID\numami.identify('user-123');\n\n// With session ID and data\numami.identify('user-123', {\n  plan: 'premium',\n  role: 'admin'\n});\n\n// With data only\numami.identify({\n  plan: 'premium',\n  signupDate: '2024-01-15'\n});\n```\n\n#### `isAvailable()`\n\nCheck if tracking is available.\n\n```typescript\nif (umami.isAvailable()) {\n  umami.trackEvent('ready');\n}\n```\n\n#### `disable()`\n\nDisable tracking programmatically.\n\n```typescript\numami.disable();\n```\n\n### UmamiTrackDirective\n\nDeclarative event tracking on DOM elements.\n\n```html\n<!-- Track click events -->\n<button umamiTrack=\"signup\">Sign Up</button>\n\n<!-- With event data -->\n<button\n  umamiTrack=\"download\"\n  [umamiTrackData]=\"{ file: 'report.pdf', size: 1024 }\">\n  Download\n</button>\n\n<!-- Track different events -->\n<input\n  umamiTrack=\"search_focus\"\n  umamiTrackOn=\"focus\"\n  placeholder=\"Search...\">\n\n<form\n  umamiTrack=\"form_submit\"\n  umamiTrackOn=\"submit\">\n  <!-- form fields -->\n</form>\n```\n\n**Supported events:** `click`, `focus`, `blur`, `mouseenter`, `mouseleave`, `submit`\n\n### withRouterTracking()\n\nEnable automatic page view tracking on Angular router navigation.\n\n```typescript\n// app.config.ts\nproviders: [\n  provideRouter(routes),\n  provideUmami({\n    websiteId: 'xxx',\n    src: 'https://...',\n    autoTrack: false  // Disable Umami's auto-track since router handles it\n  }),\n  withRouterTracking()\n]\n```\n\n### provideUmamiWithFactory()\n\nConfigure Umami using a factory function with dependency injection.\n\n```typescript\nimport { provideUmamiWithFactory } from '@cacic-fct/ngx-umami';\nimport { ConfigService } from './config.service';\n\nproviders: [\n  provideUmamiWithFactory(\n    (config: ConfigService) => ({\n      websiteId: config.umamiWebsiteId,\n      src: config.umamiSrc,\n      enabled: config.isProduction\n    }),\n    [ConfigService]\n  )\n]\n```\n\n## Environment-based Configuration\n\n```typescript\n// environments/environment.ts\nexport const environment = {\n  production: false,\n  umami: {\n    websiteId: 'dev-website-id',\n    src: 'https://analytics.example.com/script.js',\n    enabled: false  // Disable in development\n  }\n};\n\n// environments/environment.prod.ts\nexport const environment = {\n  production: true,\n  umami: {\n    websiteId: 'prod-website-id',\n    src: 'https://analytics.example.com/script.js',\n    enabled: true\n  }\n};\n\n// app.config.ts\nimport { environment } from './environments/environment';\n\nproviders: [\n  provideUmami(environment.umami)\n]\n```\n\n## SSR Considerations\n\nThe library automatically handles server-side rendering. Tracking is only active in the browser environment - no configuration needed.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}