voyage-lib 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"voyage-lib.mjs","sources":["../../../projects/voyage-lib/src/lib/services/snackbar.service.ts","../../../projects/voyage-lib/src/lib/components/snackbar/snackbar.component.ts","../../../projects/voyage-lib/src/lib/components/snackbar/snackbar.component.html","../../../projects/voyage-lib/src/lib/components/avatar/avatar.component.ts","../../../projects/voyage-lib/src/lib/components/badge/badge.component.ts","../../../projects/voyage-lib/src/lib/components/button/button.component.ts","../../../projects/voyage-lib/src/lib/components/card/card.component.ts","../../../projects/voyage-lib/src/lib/components/dialog/dialog.component.ts","../../../projects/voyage-lib/src/lib/components/dialog/dialog.component.html","../../../projects/voyage-lib/src/lib/components/confirm-dialog/confirm-dialog.component.ts","../../../projects/voyage-lib/src/lib/components/empty-state/empty-state.component.ts","../../../projects/voyage-lib/src/lib/components/input/input.component.ts","../../../projects/voyage-lib/src/lib/components/loader/loader.component.ts","../../../projects/voyage-lib/src/lib/components/password-strength/password-strength.component.ts","../../../projects/voyage-lib/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/voyage-lib/src/lib/components/select/select.component.ts","../../../projects/voyage-lib/src/lib/components/skeleton/skeleton.component.ts","../../../projects/voyage-lib/src/lib/components/stat-card/stat-card.component.ts","../../../projects/voyage-lib/src/lib/directives/tooltip.directive.ts","../../../projects/voyage-lib/src/lib/pipes/currency-format.pipe.ts","../../../projects/voyage-lib/src/lib/pipes/date-format.pipe.ts","../../../projects/voyage-lib/src/lib/pipes/trip-duration.pipe.ts","../../../projects/voyage-lib/src/lib/models/expense.model.ts","../../../projects/voyage-lib/src/lib/services/http.ts","../../../projects/voyage-lib/src/lib/services/trip.service.ts","../../../projects/voyage-lib/src/lib/services/expense.service.ts","../../../projects/voyage-lib/src/lib/tokens/environment.token.ts","../../../projects/voyage-lib/src/lib/utils/currency.util.ts","../../../projects/voyage-lib/src/lib/voyage-lib.ts","../../../projects/voyage-lib/src/public-api.ts","../../../projects/voyage-lib/src/voyage-lib.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { SnackbarConfig, SnackbarItem } from '../models/snackbar.model';\n\n@Injectable({ providedIn: 'root' })\nexport class SnackbarService {\n readonly items = signal<SnackbarItem[]>([]);\n\n show(config: SnackbarConfig): string {\n const id = crypto.randomUUID();\n const item: SnackbarItem = {\n id,\n message: config.message,\n type: config.type ?? 'info',\n title: config.title ?? '',\n duration: config.duration ?? 4000,\n dismissible: config.dismissible ?? true,\n action: config.action,\n exiting: false,\n };\n\n this.items.update(prev => [...prev, item]);\n\n if (item.duration > 0) {\n setTimeout(() => this.dismiss(id), item.duration);\n }\n\n return id;\n }\n\n dismiss(id: string): void {\n this.items.update(prev =>\n prev.map(i => (i.id === id ? { ...i, exiting: true } : i))\n );\n setTimeout(() => {\n this.items.update(prev => prev.filter(i => i.id !== id));\n }, 380);\n }\n\n success(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\n return this.show({ ...config, message, type: 'success' });\n }\n\n error(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\n return this.show({ ...config, message, type: 'error' });\n }\n\n warning(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\n return this.show({ ...config, message, type: 'warning' });\n }\n\n info(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\n return this.show({ ...config, message, type: 'info' });\n }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { SnackbarService } from '../../services/snackbar.service';\nimport { SnackbarItem } from '../../models/snackbar.model';\n\n@Component({\n selector: 'vl-snackbar',\n standalone: true,\n templateUrl: './snackbar.component.html',\n styleUrl: './snackbar.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SnackbarComponent {\n protected readonly svc = inject(SnackbarService);\n\n protected handleAction(item: SnackbarItem): void {\n item.action?.handler();\n this.svc.dismiss(item.id);\n }\n}\n","<div class=\"vl-snackbar-host\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (item of svc.items(); track item.id) {\n <div\n class=\"vl-snackbar-item\"\n [class]=\"'vl-snackbar-item vl-snackbar-' + item.type\"\n [class.vl-snackbar-exiting]=\"item.exiting\"\n role=\"alert\">\n\n <span class=\"vl-snackbar-accent\" aria-hidden=\"true\"></span>\n\n <span class=\"vl-snackbar-icon\" aria-hidden=\"true\">\n @switch (item.type) {\n @case ('success') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5z\" clip-rule=\"evenodd\" />\n </svg>\n }\n @case ('error') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n }\n @case ('warning') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 5zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\" clip-rule=\"evenodd\" />\n </svg>\n }\n @default {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0zm-7-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM9 9a.75.75 0 0 0 0 1.5h.253a.25.25 0 0 1 .244.304l-.459 2.066A1.75 1.75 0 0 0 10.747 15H11a.75.75 0 0 0 0-1.5h-.253a.25.25 0 0 1-.244-.304l.459-2.066A1.75 1.75 0 0 0 9.253 9H9z\" clip-rule=\"evenodd\" />\n </svg>\n }\n }\n </span>\n\n <div class=\"vl-snackbar-body\">\n @if (item.title) {\n <p class=\"vl-snackbar-title\">{{ item.title }}</p>\n }\n <p class=\"vl-snackbar-message\">{{ item.message }}</p>\n @if (item.action) {\n <button class=\"vl-snackbar-action-btn\" (click)=\"handleAction(item)\">\n {{ item.action.label }}\n </button>\n }\n </div>\n\n @if (item.dismissible) {\n <button class=\"vl-snackbar-close\" aria-label=\"Dismiss\" (click)=\"svc.dismiss(item.id)\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.75.75 0 1 1 1.06 1.06L9.06 8l3.22 3.22a.75.75 0 1 1-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 0 1-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06z\"/>\n </svg>\n </button>\n }\n\n @if (item.duration > 0) {\n <span\n class=\"vl-snackbar-progress\"\n [style.animation-duration.ms]=\"item.duration\"\n aria-hidden=\"true\">\n </span>\n }\n </div>\n }\n</div>\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * User avatar — shows image when available, falls back to initials.\n *\n * Usage:\n * <vl-avatar name=\"Pranesh T\" />\n * <vl-avatar name=\"Pranesh T\" [src]=\"user.photoUrl\" size=\"lg\" />\n */\n@Component({\n selector: 'vl-avatar',\n standalone: true,\n template: `\n <div class=\"vl-avatar\" [class]=\"'vl-avatar-' + size()\">\n @if (src() && !imgError) {\n <img [src]=\"src()\" [alt]=\"name()\" (error)=\"imgError = true\" />\n } @else {\n <span class=\"vl-avatar-initials\">{{ initials() }}</span>\n }\n </div>\n `,\n styleUrl: './avatar.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AvatarComponent {\n name = input<string>('');\n src = input<string | null>(null);\n size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n\n protected imgError = false;\n\n protected initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport type { BadgeVariant } from '../../models/badge.model';\n\n/**\n * Colored pill badge with optional leading dot.\n *\n * Usage:\n * <vl-badge variant=\"ongoing\">Ongoing</vl-badge>\n * <vl-badge [dot]=\"true\" variant=\"planning\">Planning</vl-badge>\n * <vl-badge [color]=\"categoryColor\" [bgColor]=\"categoryBg\">Food</vl-badge>\n */\n@Component({\n selector: 'vl-badge',\n standalone: true,\n template: `\n <span class=\"vl-badge\" [class]=\"'vl-badge-' + variant()\"\n [style.color]=\"color() || null\"\n [style.background-color]=\"bgColor() || null\"\n [style.border-color]=\"color() ? color() + '33' : null\">\n @if (dot()) {\n <span class=\"vl-badge-dot\"\n [style.background-color]=\"color() || null\"></span>\n }\n <ng-content />\n </span>\n `,\n styleUrl: './badge.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class BadgeComponent {\n variant = input<BadgeVariant>('neutral');\n dot = input<boolean>(false);\n /** Override color (text + dot). Takes precedence over variant. */\n color = input<string>('');\n /** Override background color. Takes precedence over variant. */\n bgColor = input<string>('');\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport type { ButtonSize, ButtonVariant } from '../../models/button.model';\n\n@Component({\n selector: 'vl-button',\n standalone: true,\n template: `\n <button\n class=\"vl-btn\"\n [class]=\"variantClass()\"\n [class.vl-btn-sm]=\"size() === 'sm'\"\n [class.vl-btn-md]=\"size() === 'md'\"\n [class.vl-btn-lg]=\"size() === 'lg'\"\n [class.vl-btn-loading]=\"loading()\"\n [disabled]=\"disabled() || loading()\">\n\n @if (loading()) {\n <span class=\"vl-btn-spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2.5\" opacity=\"0.25\"/>\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>\n </svg>\n </span>\n }\n\n <ng-content />\n </button>\n `,\n styleUrl: './button.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ButtonComponent {\n variant = input<ButtonVariant>('primary');\n size = input<ButtonSize>('md');\n loading = input<boolean>(false);\n disabled = input<boolean>(false);\n\n protected variantClass(): string {\n return `vl-btn-${this.variant()}`;\n }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Standard card wrapper. Optionally includes a section header.\n *\n * Usage:\n * <vl-card>content</vl-card>\n * <vl-card sectionTitle=\"Basic Info\">content</vl-card>\n * <vl-card [hover]=\"true\" padding=\"none\">content</vl-card>\n */\n@Component({\n selector: 'vl-card',\n standalone: true,\n template: `\n <div class=\"vl-card\"\n [class.vl-card-hover]=\"hover()\"\n [class.vl-card-p-none]=\"padding() === 'none'\"\n [class.vl-card-p-sm]=\"padding() === 'sm'\"\n [class.vl-card-p-md]=\"padding() === 'md'\"\n [class.vl-card-p-lg]=\"padding() === 'lg'\">\n\n @if (sectionTitle()) {\n <div class=\"vl-card-section-header\">\n <span>{{ sectionTitle() }}</span>\n </div>\n }\n\n <ng-content />\n </div>\n `,\n styleUrl: './card.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class CardComponent {\n padding = input<'none' | 'sm' | 'md' | 'lg'>('md');\n hover = input<boolean>(false);\n sectionTitle = input<string>('');\n}\n","import { Component, effect, HostListener, inject, input, output, Renderer2, ViewEncapsulation } from '@angular/core';\nimport type { DialogFooterButton, DialogSize } from '../../models/dialog.model';\nimport { ButtonComponent } from '../button/button.component';\n\n@Component({\n selector: 'vl-dialog',\n standalone: true,\n imports: [ButtonComponent],\n templateUrl: './dialog.component.html',\n styleUrl: './dialog.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class DialogComponent {\n isOpen = input<boolean>(false);\n title = input<string>('');\n subtitle = input<string | null>(null);\n size = input<DialogSize>('md');\n hasFooter = input<boolean>(false);\n /** When provided, the footer renders these buttons instead of the projected [dialog-footer] content. */\n footerButtons = input<DialogFooterButton[]>([]);\n closed = output<void>();\n /** Emits the `key` of whichever footerButtons entry was clicked. */\n footerAction = output<string>();\n\n private readonly renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.renderer.addClass(document.body, 'overflow-hidden');\n } else {\n this.renderer.removeClass(document.body, 'overflow-hidden');\n }\n });\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isOpen()) this.closed.emit();\n }\n}\n","@if (isOpen()) {\n <div class=\"vl-dialog-overlay\" role=\"dialog\" aria-modal=\"true\">\n\n <div class=\"vl-dialog-backdrop\" (click)=\"closed.emit()\"></div>\n\n <div class=\"vl-dialog-panel\"\n [class.vl-dialog-panel-sm]=\"size() === 'sm'\"\n [class.vl-dialog-panel-md]=\"size() === 'md'\"\n [class.vl-dialog-panel-lg]=\"size() === 'lg'\">\n\n <div class=\"vl-dialog-header\">\n <div>\n <h2>{{ title() }}</h2>\n @if (subtitle()) {\n <p>{{ subtitle() }}</p>\n }\n </div>\n <button (click)=\"closed.emit()\" class=\"vl-dialog-close\" aria-label=\"Close\">\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 6L6 18M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"vl-dialog-body\">\n <ng-content />\n </div>\n\n @if (hasFooter()) {\n <div class=\"vl-dialog-footer\">\n @if (footerButtons().length) {\n @for (btn of footerButtons(); track btn.key) {\n <vl-button [variant]=\"btn.variant ?? 'primary'\" [disabled]=\"btn.disabled ?? false\"\n [loading]=\"btn.loading ?? false\" (click)=\"footerAction.emit(btn.key)\">\n {{ btn.label }}\n </vl-button>\n }\n } @else {\n <ng-content select=\"[dialog-footer]\" />\n }\n </div>\n }\n\n </div>\n </div>\n}\n","import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { DialogComponent } from '../dialog/dialog.component';\nimport type { DialogFooterButton } from '../../models/dialog.model';\n\n/**\n * Pre-built confirmation dialog (wraps vl-dialog).\n *\n * Usage:\n * <vl-confirm-dialog\n * [isOpen]=\"showDelete()\"\n * title=\"Delete Expense\"\n * message=\"This action cannot be undone.\"\n * confirmLabel=\"Delete\"\n * confirmVariant=\"danger\"\n * [loading]=\"isDeleting()\"\n * (confirmed)=\"onDelete()\"\n * (cancelled)=\"showDelete.set(false)\" />\n */\n@Component({\n selector: 'vl-confirm-dialog',\n standalone: true,\n imports: [DialogComponent],\n template: `\n <vl-dialog\n [isOpen]=\"isOpen()\"\n [title]=\"title()\"\n [subtitle]=\"subtitle()\"\n size=\"sm\"\n [hasFooter]=\"true\"\n [footerButtons]=\"footerButtons()\"\n (footerAction)=\"onFooterAction($event)\"\n (closed)=\"cancelled.emit()\">\n\n <div class=\"vl-confirm-body\">\n <p class=\"vl-confirm-message\">{{ message() }}</p>\n <ng-content />\n </div>\n </vl-dialog>\n `,\n styles: `\n .vl-confirm-body {\n padding: 1.5rem;\n }\n .vl-confirm-message {\n font-size: 0.875rem;\n color: var(--color-muted-foreground, hsl(210 10% 50%));\n line-height: 1.6;\n margin: 0;\n font-family: var(--font-family-sans, inherit);\n }\n `,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConfirmDialogComponent {\n isOpen = input<boolean>(false);\n title = input<string>('Are you sure?');\n subtitle = input<string | null>(null);\n message = input<string>('');\n confirmLabel = input<string>('Confirm');\n cancelLabel = input<string>('Cancel');\n confirmVariant = input<'primary' | 'danger'>('danger');\n loading = input<boolean>(false);\n\n confirmed = output<void>();\n cancelled = output<void>();\n\n readonly footerButtons = computed<DialogFooterButton[]>(() => [\n { key: 'cancel', label: this.cancelLabel(), variant: 'ghost', disabled: this.loading() },\n { key: 'confirm', label: this.confirmLabel(), variant: this.confirmVariant(), loading: this.loading() },\n ]);\n\n onFooterAction(key: string): void {\n key === 'confirm' ? this.confirmed.emit() : this.cancelled.emit();\n }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Dashed-border empty state card. Project an action button into the default slot.\n *\n * Usage:\n * <vl-empty-state\n * icon=\"M15 10.5a3 3 0 11-6 0...\"\n * title=\"No trips yet\"\n * description=\"Create your first trip to get started.\">\n * <button (click)=\"create()\">Create Trip</button>\n * </vl-empty-state>\n */\n@Component({\n selector: 'vl-empty-state',\n standalone: true,\n template: `\n <div class=\"vl-empty-state\">\n <div class=\"vl-empty-state-icon\">\n @if (icon()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path [attr.d]=\"icon()\" />\n </svg>\n } @else {\n <ng-content select=\"[empty-icon]\" />\n }\n </div>\n <h3 class=\"vl-empty-state-title\">{{ title() }}</h3>\n @if (description()) {\n <p class=\"vl-empty-state-description\">{{ description() }}</p>\n }\n <div class=\"vl-empty-state-action\">\n <ng-content />\n </div>\n </div>\n `,\n styleUrl: './empty-state.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class EmptyStateComponent {\n /** SVG path `d` attribute for the icon. Or project via <svg empty-icon>. */\n icon = input<string>('');\n title = input<string>('Nothing here yet');\n description = input<string>('');\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Label + error wrapper for native inputs. Use content projection for the\n * actual <input> so reactive forms work without ControlValueAccessor.\n *\n * Usage:\n * <vl-input label=\"Trip Name\" [error]=\"nameControl.errors && nameControl.touched ? 'Required' : null\">\n * <input type=\"text\" formControlName=\"name\" placeholder=\"Paris Weekend\" />\n * </vl-input>\n */\n@Component({\n selector: 'vl-input',\n standalone: true,\n template: `\n <div class=\"vl-input-root\">\n @if (label()) {\n <label class=\"vl-input-label\" [class.vl-input-label-required]=\"required()\">\n {{ label() }}\n </label>\n }\n <div class=\"vl-input-field\" [class.vl-input-field-error]=\"!!error()\">\n @if (prefix()) {\n <span class=\"vl-input-prefix\">{{ prefix() }}</span>\n }\n <ng-content />\n </div>\n @if (error()) {\n <p class=\"vl-input-error\">{{ error() }}</p>\n } @else if (hint()) {\n <p class=\"vl-input-hint\">{{ hint() }}</p>\n }\n </div>\n `,\n styleUrl: './input.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InputComponent {\n label = input<string>('');\n error = input<string | null>(null);\n hint = input<string>('');\n prefix = input<string>('');\n required = input<boolean>(false);\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'vl-loader',\n standalone: true,\n template: `\n <div class=\"vl-loader\" [class.vl-loader-fullpage]=\"fullPage()\">\n <div class=\"vl-loader-spinner\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2.5\" opacity=\"0.2\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" />\n </svg>\n </div>\n @if (message()) {\n <p class=\"vl-loader-message\">{{ message() }}</p>\n }\n </div>\n `,\n styles: `\n .vl-loader {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 3rem 1.5rem;\n }\n .vl-loader-fullpage { min-height: 16rem; }\n .vl-loader-spinner {\n width: 2rem;\n height: 2rem;\n color: var(--color-primary, #6366f1);\n animation: vl-spin 0.8s linear infinite;\n }\n .vl-loader-spinner svg { width: 100%; height: 100%; }\n .vl-loader-message {\n font-size: 0.875rem;\n color: var(--color-muted-foreground, #6b7280);\n margin: 0;\n }\n @keyframes vl-spin { to { transform: rotate(360deg); } }\n `,\n encapsulation: ViewEncapsulation.None,\n})\nexport class LoaderComponent {\n message = input<string>('');\n fullPage = input<boolean>(false);\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport type { PasswordStrength } from '../../models/password-strength.model';\n\n/**\n * Three-segment password strength indicator.\n *\n * Usage:\n * <vl-password-strength [strength]=\"passwordStrength()\" />\n */\n@Component({\n selector: 'vl-password-strength',\n standalone: true,\n imports: [TitleCasePipe],\n template: `\n <div class=\"vl-pw-root\">\n <div class=\"vl-pw-bars\">\n <div class=\"vl-pw-bar\"\n [class.vl-pw-bar-weak]=\"strength() === 'weak'\"\n [class.vl-pw-bar-inactive]=\"!strength()\"></div>\n <div class=\"vl-pw-bar\"\n [class.vl-pw-bar-medium]=\"strength() === 'medium'\"\n [class.vl-pw-bar-strong]=\"strength() === 'strong'\"\n [class.vl-pw-bar-inactive]=\"strength() !== 'medium' && strength() !== 'strong'\"></div>\n <div class=\"vl-pw-bar\"\n [class.vl-pw-bar-strong]=\"strength() === 'strong'\"\n [class.vl-pw-bar-inactive]=\"strength() !== 'strong'\"></div>\n </div>\n @if (showLabel() && strength()) {\n <span class=\"vl-pw-label\" [class]=\"'vl-pw-label-' + strength()\">\n {{ strength() | titlecase }}\n </span>\n }\n </div>\n `,\n styleUrl: './password-strength.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PasswordStrengthComponent {\n strength = input<PasswordStrength>(null);\n showLabel = input<boolean>(true);\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport type { ProgressVariant } from '../../models/progress-bar.model';\n\n/**\n * Horizontal progress bar with optional label and percentage text.\n *\n * Usage:\n * <vl-progress-bar [value]=\"75\" />\n * <vl-progress-bar [value]=\"budgetUsed\" variant=\"auto\" [showLabel]=\"true\" />\n */\n@Component({\n selector: 'vl-progress-bar',\n standalone: true,\n template: `\n <div class=\"vl-progress-root\">\n @if (label()) {\n <div class=\"vl-progress-header\">\n <span class=\"vl-progress-label\">{{ label() }}</span>\n @if (showLabel()) {\n <span class=\"vl-progress-pct\">{{ clampedValue() }}%</span>\n }\n </div>\n } @else if (showLabel()) {\n <div class=\"vl-progress-header vl-progress-header-end\">\n <span class=\"vl-progress-pct\">{{ clampedValue() }}%</span>\n </div>\n }\n <div class=\"vl-progress-track\">\n <div class=\"vl-progress-fill\"\n [class]=\"'vl-progress-fill-' + resolvedVariant()\"\n [style.width.%]=\"clampedValue()\">\n </div>\n </div>\n </div>\n `,\n styleUrl: './progress-bar.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ProgressBarComponent {\n value = input<number>(0);\n variant = input<ProgressVariant>('auto');\n showLabel = input<boolean>(false);\n label = input<string>('');\n\n protected clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n protected resolvedVariant = computed<Exclude<ProgressVariant, 'auto'>>(() => {\n if (this.variant() !== 'auto') return this.variant() as Exclude<ProgressVariant, 'auto'>;\n const v = this.clampedValue();\n if (v >= 90) return 'danger';\n if (v >= 75) return 'warning';\n return 'primary';\n });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Label + error wrapper for native <select> elements.\n *\n * Usage:\n * <vl-select label=\"Currency\" [error]=\"currencyControl.invalid && currencyControl.touched ? 'Required' : null\">\n * <select formControlName=\"currency\">\n * <option value=\"USD\">USD</option>\n * </select>\n * </vl-select>\n */\n@Component({\n selector: 'vl-select',\n standalone: true,\n template: `\n <div class=\"vl-select-root\">\n @if (label()) {\n <label class=\"vl-select-label\" [class.vl-select-label-required]=\"required()\">\n {{ label() }}\n </label>\n }\n <div class=\"vl-select-field\" [class.vl-select-field-error]=\"!!error()\">\n <ng-content />\n <span class=\"vl-select-caret\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06z\"/>\n </svg>\n </span>\n </div>\n @if (error()) {\n <p class=\"vl-select-error\">{{ error() }}</p>\n } @else if (hint()) {\n <p class=\"vl-select-hint\">{{ hint() }}</p>\n }\n </div>\n `,\n styleUrl: './select.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SelectComponent {\n label = input<string>('');\n error = input<string | null>(null);\n hint = input<string>('');\n required = input<boolean>(false);\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Shimmer placeholder for loading states.\n *\n * Usage:\n * <vl-skeleton /> — single line, full width\n * <vl-skeleton width=\"60%\" height=\"1rem\" />\n * <vl-skeleton shape=\"circle\" width=\"3rem\" height=\"3rem\" />\n * <vl-skeleton [lines]=\"3\" /> — stacked paragraph lines\n */\n@Component({\n selector: 'vl-skeleton',\n standalone: true,\n template: `\n @if (lines() > 1) {\n <div class=\"vl-skeleton-group\">\n @for (i of lineArr(); track i; let last = $last) {\n <div class=\"vl-skeleton\"\n [class.vl-skeleton-circle]=\"shape() === 'circle'\"\n [style.width]=\"last ? '60%' : '100%'\"\n [style.height]=\"height()\">\n </div>\n }\n </div>\n } @else {\n <div class=\"vl-skeleton\"\n [class.vl-skeleton-circle]=\"shape() === 'circle'\"\n [style.width]=\"width()\"\n [style.height]=\"height()\">\n </div>\n }\n `,\n styleUrl: './skeleton.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SkeletonComponent {\n width = input<string>('100%');\n height = input<string>('1rem');\n shape = input<'rect' | 'circle'>('rect');\n lines = input<number>(1);\n\n protected lineArr() {\n return Array.from({ length: this.lines() }, (_, i) => i);\n }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Compact labeled metric card.\n *\n * Usage:\n * <vl-stat-card label=\"Budget\" value=\"$2,400\" />\n * <vl-stat-card label=\"Spent\" value=\"$1,200\" valueVariant=\"secondary\" />\n */\n@Component({\n selector: 'vl-stat-card',\n standalone: true,\n template: `\n <div class=\"vl-stat-card\">\n <p class=\"vl-stat-label\">{{ label() }}</p>\n <p class=\"vl-stat-value\" [class]=\"'vl-stat-value-' + valueVariant()\">{{ value() }}</p>\n @if (subtext()) {\n <p class=\"vl-stat-subtext\">{{ subtext() }}</p>\n }\n </div>\n `,\n styleUrl: './stat-card.component.css',\n encapsulation: ViewEncapsulation.None,\n})\nexport class StatCardComponent {\n label = input<string>('');\n value = input<string>('');\n subtext = input<string>('');\n valueVariant = input<'default' | 'primary' | 'secondary' | 'accent' | 'destructive'>('default');\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n OnDestroy,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { TooltipPosition } from '../models/tooltip.model';\n\n/**\n * Attribute directive that renders an accessible tooltip near the host element.\n *\n * Usage:\n * <button vlTooltip=\"Save changes\">Save</button>\n * <span [vlTooltip]=\"label\" vlTooltipPosition=\"bottom\">...</span>\n */\n@Directive({\n selector: '[vlTooltip]',\n standalone: true,\n host: {\n '[attr.aria-describedby]': 'tooltipId',\n },\n})\nexport class TooltipDirective implements OnDestroy {\n vlTooltip = input<string>('');\n vlTooltipPosition = input<TooltipPosition>('top');\n vlTooltipDelay = input<number>(200);\n\n protected readonly tooltipId = `vl-tooltip-${Math.random().toString(36).slice(2, 8)}`;\n\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly platformId = inject(PLATFORM_ID);\n\n private tooltipEl: HTMLElement | null = null;\n private showTimer: ReturnType<typeof setTimeout> | null = null;\n\n @HostListener('mouseenter')\n @HostListener('focusin')\n show(): void {\n if (!isPlatformBrowser(this.platformId) || !this.vlTooltip()) return;\n this.showTimer = setTimeout(() => this.create(), this.vlTooltipDelay());\n }\n\n @HostListener('mouseleave')\n @HostListener('focusout')\n hide(): void {\n if (this.showTimer) {\n clearTimeout(this.showTimer);\n this.showTimer = null;\n }\n this.destroy();\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n private create(): void {\n if (this.tooltipEl) return;\n\n const tip = document.createElement('div');\n tip.id = this.tooltipId;\n tip.role = 'tooltip';\n tip.className = 'vl-tooltip';\n tip.textContent = this.vlTooltip();\n tip.setAttribute('data-position', this.vlTooltipPosition());\n document.body.appendChild(tip);\n this.tooltipEl = tip;\n\n this.injectStyles();\n this.position(tip);\n\n // Trigger enter animation on next frame so the transition fires\n requestAnimationFrame(() => tip.classList.add('vl-tooltip-visible'));\n }\n\n private destroy(): void {\n if (!this.tooltipEl) return;\n const tip = this.tooltipEl;\n tip.classList.remove('vl-tooltip-visible');\n // Wait for the fade-out transition before removing from DOM\n tip.addEventListener('transitionend', () => tip.remove(), { once: true });\n this.tooltipEl = null;\n }\n\n private position(tip: HTMLElement): void {\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const pos = this.vlTooltipPosition();\n const GAP = 8;\n\n // Temporarily make visible to measure size\n tip.style.visibility = 'hidden';\n tip.style.display = 'block';\n const tipRect = tip.getBoundingClientRect();\n tip.style.visibility = '';\n tip.style.display = '';\n\n let top: number;\n let left: number;\n\n switch (pos) {\n case 'bottom':\n top = hostRect.bottom + window.scrollY + GAP;\n left = hostRect.left + window.scrollX + hostRect.width / 2 - tipRect.width / 2;\n break;\n case 'left':\n top = hostRect.top + window.scrollY + hostRect.height / 2 - tipRect.height / 2;\n left = hostRect.left + window.scrollX - tipRect.width - GAP;\n break;\n case 'right':\n top = hostRect.top + window.scrollY + hostRect.height / 2 - tipRect.height / 2;\n left = hostRect.right + window.scrollX + GAP;\n break;\n default: // top\n top = hostRect.top + window.scrollY - tipRect.height - GAP;\n left = hostRect.left + window.scrollX + hostRect.width / 2 - tipRect.width / 2;\n break;\n }\n\n // Keep within horizontal viewport bounds\n left = Math.max(8, Math.min(left, window.innerWidth - tipRect.width - 8));\n\n tip.style.top = `${top}px`;\n tip.style.left = `${left}px`;\n }\n\n private injectStyles(): void {\n const STYLE_ID = 'vl-tooltip-styles';\n if (document.getElementById(STYLE_ID)) return;\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .vl-tooltip {\n position: absolute;\n z-index: 10000;\n padding: 0.3125rem 0.625rem;\n background-color: var(--color-foreground, #1f2937);\n color: var(--color-background, #fff);\n font-size: 0.75rem;\n font-family: var(--font-family-sans, inherit);\n line-height: 1.4;\n border-radius: calc(var(--radius, 0.5rem) * 0.75);\n white-space: nowrap;\n pointer-events: none;\n max-width: 16rem;\n white-space: normal;\n text-align: center;\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 0.15s ease, transform 0.15s ease;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n }\n .vl-tooltip-visible {\n opacity: 1;\n transform: scale(1);\n }\n `;\n document.head.appendChild(style);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Formats a number as a currency string using Intl.NumberFormat.\n *\n * Usage:\n * {{ trip.budget | vlCurrency }} → \"$2,400\"\n * {{ expense.amount | vlCurrency:'EUR' }} → \"€1,200\"\n * {{ amount | vlCurrency:'INR':'symbol-narrow':'1.2-2' }}\n */\n@Pipe({ name: 'vlCurrency', standalone: true, pure: true })\nexport class CurrencyFormatPipe implements PipeTransform {\n transform(\n value: number | null | undefined,\n currencyCode = 'USD',\n display: 'symbol' | 'symbol-narrow' | 'code' | 'name' = 'symbol',\n locale = 'en-US',\n ): string {\n if (value == null) return '';\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n currencyDisplay: display === 'symbol-narrow' ? 'narrowSymbol' : display,\n maximumFractionDigits: Number.isInteger(value) ? 0 : 2,\n }).format(value);\n } catch {\n return `${currencyCode} ${value}`;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { DatePreset } from '../models/date-format.model';\n\n/**\n * Formats a Date, ISO string, or timestamp using Intl.DateTimeFormat.\n *\n * Presets:\n * short → \"Jun 28\" (no year if current year)\n * medium → \"Jun 28, 2026\"\n * long → \"June 28, 2026\"\n * full → \"Sunday, June 28, 2026\"\n * time → \"2:30 PM\"\n * datetime → \"Jun 28, 2026, 2:30 PM\"\n * relative → \"2 days ago\" / \"in 3 hours\" (uses Intl.RelativeTimeFormat)\n *\n * Usage:\n * {{ trip.startDate | vlDateFormat }}\n * {{ trip.startDate | vlDateFormat:'long' }}\n * {{ trip.startDate | vlDateFormat:'relative' }}\n */\n@Pipe({ name: 'vlDateFormat', standalone: true, pure: true })\nexport class DateFormatPipe implements PipeTransform {\n transform(value: Date | string | number | null | undefined, preset: DatePreset = 'medium', locale = 'en-US'): string {\n if (value == null || value === '') return '';\n\n const date = value instanceof Date ? value : new Date(value);\n if (isNaN(date.getTime())) return String(value);\n\n if (preset === 'relative') return this.toRelative(date, locale);\n\n return new Intl.DateTimeFormat(locale, this.options(preset, date)).format(date);\n }\n\n private options(preset: DatePreset, date: Date): Intl.DateTimeFormatOptions {\n const isCurrentYear = date.getFullYear() === new Date().getFullYear();\n\n switch (preset) {\n case 'short':\n return isCurrentYear\n ? { month: 'short', day: 'numeric' }\n : { month: 'short', day: 'numeric', year: 'numeric' };\n case 'medium':\n return { month: 'short', day: 'numeric', year: 'numeric' };\n case 'long':\n return { month: 'long', day: 'numeric', year: 'numeric' };\n case 'full':\n return { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' };\n case 'time':\n return { hour: 'numeric', minute: '2-digit', hour12: true };\n case 'datetime':\n return { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true };\n default:\n return { month: 'short', day: 'numeric', year: 'numeric' };\n }\n }\n\n private toRelative(date: Date, locale: string): string {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n const diffMs = date.getTime() - Date.now();\n const diffS = Math.round(diffMs / 1000);\n const diffM = Math.round(diffS / 60);\n const diffH = Math.round(diffM / 60);\n const diffD = Math.round(diffH / 24);\n const diffW = Math.round(diffD / 7);\n const diffMo = Math.round(diffD / 30);\n const diffY = Math.round(diffD / 365);\n\n if (Math.abs(diffS) < 60) return rtf.format(diffS, 'second');\n if (Math.abs(diffM) < 60) return rtf.format(diffM, 'minute');\n if (Math.abs(diffH) < 24) return rtf.format(diffH, 'hour');\n if (Math.abs(diffD) < 7) return rtf.format(diffD, 'day');\n if (Math.abs(diffW) < 5) return rtf.format(diffW, 'week');\n if (Math.abs(diffMo) < 12) return rtf.format(diffMo, 'month');\n return rtf.format(diffY, 'year');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Returns a human-readable trip duration string.\n *\n * Usage:\n * {{ trip.startDate | vlTripDuration:trip.endDate }} → \"6 days\"\n */\n@Pipe({ name: 'vlTripDuration', standalone: true, pure: true })\nexport class TripDurationPipe implements PipeTransform {\n transform(startDate: Date | string | null | undefined, endDate?: Date | string | null): string {\n if (!startDate || !endDate) return '';\n const start = startDate instanceof Date ? startDate : new Date(startDate);\n const end = endDate instanceof Date ? endDate : new Date(endDate);\n const days = Math.ceil(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\n return `${days} day${days !== 1 ? 's' : ''}`;\n }\n}\n","export type ExpenseCategory = 'food' | 'accommodation' | 'transport' | 'activities' | 'souvenirs' | 'other';\n\nexport interface Expense {\n id: string;\n tripId: string;\n category: ExpenseCategory;\n amount: number;\n description: string;\n date: Date;\n}\n\nexport interface ExpenseDTO {\n id: string;\n tripId: string;\n category: ExpenseCategory;\n amount: number;\n description: string;\n date: string;\n}\n\nexport interface CategorySpending {\n category: ExpenseCategory;\n amount: number;\n percentage: number;\n icon: string;\n}\n\nexport interface DailyExpenses {\n date: Date;\n expenses: Expense[];\n total: number;\n}\n\nexport const CATEGORY_ICONS: Record<ExpenseCategory, string> = {\n food: '🍔',\n accommodation: '🏨',\n transport: '🚗',\n activities: '🎭',\n souvenirs: '🎁',\n other: '💰'\n};\n\nexport const CATEGORY_COLORS: Record<ExpenseCategory, string> = {\n food: '#FF6B6B',\n accommodation: '#4ECDC4',\n transport: '#FFE66D',\n activities: '#95E1D3',\n souvenirs: '#C7CEEA',\n other: '#B4B4B4'\n};\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport interface HttpOptions {\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json' | 'text';\n}\n\n/**\n * Shared HTTP service for micro-frontends.\n *\n * Services call with relative paths: `sdk.get('/trips')`.\n * The host application's HTTP interceptor resolves the full API URL.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SharedHttpService {\n\n private http = inject(HttpClient);\n\n get<T>(path: string, options?: HttpOptions): Observable<T> {\n return this.http.get<T>(path, { ...options, responseType: 'json' });\n }\n\n post<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\n return this.http.post<T>(path, body, { ...options, responseType: 'json' });\n }\n\n put<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\n return this.http.put<T>(path, body, { ...options, responseType: 'json' });\n }\n\n delete<T>(path: string, options?: HttpOptions & { body?: unknown }): Observable<T> {\n return this.http.delete<T>(path, { ...options, body: options?.body, responseType: 'json' });\n }\n\n patch<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\n return this.http.patch<T>(path, body, { ...options, responseType: 'json' });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Trip, TripDTO } from '../models/trip.model';\nimport { SharedHttpService } from './http';\nimport { ApiResponse } from '../models/api-response.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TripService {\n private readonly httpService = inject(SharedHttpService);\n\n getAllTrips(): Observable<Trip[]> {\n return this.httpService.get<ApiResponse<{ trips: TripDTO[] }>>('/trips').pipe(\n map(res => (res?.data?.trips ?? []).map(dto => this.dtoToTrip(dto)))\n );\n }\n\n getTripById(id: string): Observable<Trip | undefined> {\n return this.httpService.get<ApiResponse<TripDTO>>(`/trips/${id}`).pipe(\n map(res => res?.data ? this.dtoToTrip(res.data) : undefined)\n );\n }\n\n private dtoToTrip(dto: TripDTO): Trip {\n return {\n ...dto,\n startDate: new Date(dto.startDate),\n endDate: new Date(dto.endDate)\n };\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Expense, ExpenseDTO, CategorySpending, DailyExpenses, CATEGORY_ICONS, ExpenseCategory } from '../models/expense.model';\nimport { SharedHttpService } from './http';\nimport { ApiResponse } from '../models/api-response.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExpenseService {\n private readonly httpService = inject(SharedHttpService);\n\n getExpensesByTripId(tripId: string): Observable<Expense[]> {\n return this.httpService.get<ApiResponse<ExpenseDTO[]>>(`/trips/${tripId}/expenses`).pipe(\n map(res => (res?.data ?? []).map(dto => this.dtoToExpense(dto)))\n );\n }\n\n addExpense(expense: Omit<Expense, 'id'>): Observable<Expense> {\n const dto = this.expenseToDTO(expense as Expense);\n return this.httpService.post<ApiResponse<ExpenseDTO>>('/expenses', dto).pipe(\n map(res => this.dtoToExpense(res.data))\n );\n }\n\n getExpensesByCategory(tripId: string): Observable<CategorySpending[]> {\n return this.getExpensesByTripId(tripId).pipe(\n map(expenses => this.calculateCategorySpending(expenses))\n );\n }\n\n getDailyExpenses(tripId: string): Observable<DailyExpenses[]> {\n return this.getExpensesByTripId(tripId).pipe(\n map(expenses => this.groupExpensesByDay(expenses))\n );\n }\n\n private calculateCategorySpending(expenses: Expense[]): CategorySpending[] {\n const total = expenses.reduce((sum, exp) => sum + exp.amount, 0);\n const categoryMap = new Map<ExpenseCategory, number>();\n\n expenses.forEach(exp => {\n const current = categoryMap.get(exp.category) || 0;\n categoryMap.set(exp.category, current + exp.amount);\n });\n\n return Array.from(categoryMap.entries()).map(([category, amount]) => ({\n category,\n amount,\n percentage: total > 0 ? Math.round((amount / total) * 100) : 0,\n icon: CATEGORY_ICONS[category]\n })).sort((a, b) => b.amount - a.amount);\n }\n\n private groupExpensesByDay(expenses: Expense[]): DailyExpenses[] {\n const dayMap = new Map<string, Expense[]>();\n\n expenses.forEach(exp => {\n const dateKey = exp.date.toISOString().split('T')[0];\n const dayExpenses = dayMap.get(dateKey) || [];\n dayExpenses.push(exp);\n dayMap.set(dateKey, dayExpenses);\n });\n\n return Array.from(dayMap.entries())\n .map(([dateKey, dayExpenses]) => ({\n date: new Date(dateKey),\n expenses: dayExpenses.sort((a, b) => a.date.getTime() - b.date.getTime()),\n total: dayExpenses.reduce((sum, exp) => sum + exp.amount, 0)\n }))\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n private dtoToExpense(dto: ExpenseDTO): Expense {\n return {\n ...dto,\n date: new Date(dto.date)\n };\n }\n\n private expenseToDTO(expense: Expense): ExpenseDTO {\n return {\n ...expense,\n date: expense.date.toISOString()\n };\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\ninterface IEnvironment {\n app: string;\n apiUrl: string;\n}\n\nexport const EnvironmentToken = new InjectionToken<IEnvironment>('environment');","export interface Currency {\n code: string;\n symbol: string;\n name: string;\n}\n\nexport const CURRENCIES: Currency[] = [\n { code: 'USD', symbol: '$', name: 'US Dollar' },\n { code: 'EUR', symbol: '€', name: 'Euro' },\n { code: 'GBP', symbol: '£', name: 'British Pound' },\n { code: 'INR', symbol: '₹', name: 'Indian Rupee' },\n { code: 'JPY', symbol: '¥', name: 'Japanese Yen' },\n { code: 'AUD', symbol: 'A$', name: 'Australian Dollar' },\n { code: 'CAD', symbol: 'C$', name: 'Canadian Dollar' },\n];\n\nexport function getCurrency(code: string): Currency | undefined {\n return CURRENCIES.find(c => c.code === code);\n}\n\nexport function formatCurrency(amount: number, currencyCode = 'USD'): string {\n const currency = getCurrency(currencyCode);\n const symbol = currency?.symbol || '$';\n return `${symbol}${amount.toLocaleString()}`;\n}\n","// Components\nexport * from './components/snackbar/snackbar.component';\nexport * from './components/avatar/avatar.component';\nexport * from './components/badge/badge.component';\nexport * from './components/button/button.component';\nexport * from './components/card/card.component';\nexport * from './components/confirm-dialog/confirm-dialog.component';\nexport * from './components/dialog/dialog.component';\nexport * from './components/empty-state/empty-state.component';\nexport * from './components/input/input.component';\nexport * from './components/loader/loader.component';\nexport * from './components/password-strength/password-strength.component';\nexport * from './components/progress-bar/progress-bar.component';\nexport * from './components/select/select.component';\nexport * from './components/skeleton/skeleton.component';\nexport * from './components/stat-card/stat-card.component';\n\n// Directives\nexport * from './directives/tooltip.directive';\n\n// Pipes\nexport * from './pipes/currency-format.pipe';\nexport * from './pipes/date-format.pipe';\nexport * from './pipes/trip-duration.pipe';\n\n// Models\nexport * from './models/index';\n\n// Services\nexport * from './services/http';\nexport * from './services/trip.service';\nexport * from './services/expense.service';\nexport * from './services/snackbar.service';\n\n// Tokens\nexport * from './tokens/environment.token';\n\n// Utils\nexport * from './utils/currency.util';\n","/*\n * Public API Surface of voyage-lib\n */\n\nexport * from './lib/voyage-lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voyage-lib.mjs","sources":["../../../projects/voyage-lib/src/lib/services/snackbar.service.ts","../../../projects/voyage-lib/src/lib/components/snackbar/snackbar.component.ts","../../../projects/voyage-lib/src/lib/components/snackbar/snackbar.component.html","../../../projects/voyage-lib/src/lib/components/avatar/avatar.component.ts","../../../projects/voyage-lib/src/lib/components/badge/badge.component.ts","../../../projects/voyage-lib/src/lib/components/button/button.component.ts","../../../projects/voyage-lib/src/lib/components/card/card.component.ts","../../../projects/voyage-lib/src/lib/components/dialog/dialog.component.ts","../../../projects/voyage-lib/src/lib/components/dialog/dialog.component.html","../../../projects/voyage-lib/src/lib/components/confirm-dialog/confirm-dialog.component.ts","../../../projects/voyage-lib/src/lib/components/empty-state/empty-state.component.ts","../../../projects/voyage-lib/src/lib/components/input/input.component.ts","../../../projects/voyage-lib/src/lib/components/loader/loader.component.ts","../../../projects/voyage-lib/src/lib/components/password-strength/password-strength.component.ts","../../../projects/voyage-lib/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/voyage-lib/src/lib/components/select/select.component.ts","../../../projects/voyage-lib/src/lib/components/skeleton/skeleton.component.ts","../../../projects/voyage-lib/src/lib/components/stat-card/stat-card.component.ts","../../../projects/voyage-lib/src/lib/directives/tooltip.directive.ts","../../../projects/voyage-lib/src/lib/pipes/currency-format.pipe.ts","../../../projects/voyage-lib/src/lib/pipes/date-format.pipe.ts","../../../projects/voyage-lib/src/lib/pipes/trip-duration.pipe.ts","../../../projects/voyage-lib/src/lib/models/trip.model.ts","../../../projects/voyage-lib/src/lib/pipes/trip-status-style.pipe.ts","../../../projects/voyage-lib/src/lib/models/expense.model.ts","../../../projects/voyage-lib/src/lib/services/http.ts","../../../projects/voyage-lib/src/lib/services/trip.service.ts","../../../projects/voyage-lib/src/lib/services/expense.service.ts","../../../projects/voyage-lib/src/lib/tokens/environment.token.ts","../../../projects/voyage-lib/src/lib/utils/currency.util.ts","../../../projects/voyage-lib/src/lib/voyage-lib.ts","../../../projects/voyage-lib/src/public-api.ts","../../../projects/voyage-lib/src/voyage-lib.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\r\nimport { SnackbarConfig, SnackbarItem } from '../models/snackbar.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SnackbarService {\r\n readonly items = signal<SnackbarItem[]>([]);\r\n\r\n show(config: SnackbarConfig): string {\r\n const id = crypto.randomUUID();\r\n const item: SnackbarItem = {\r\n id,\r\n message: config.message,\r\n type: config.type ?? 'info',\r\n title: config.title ?? '',\r\n duration: config.duration ?? 4000,\r\n dismissible: config.dismissible ?? true,\r\n action: config.action,\r\n exiting: false,\r\n };\r\n\r\n this.items.update(prev => [...prev, item]);\r\n\r\n if (item.duration > 0) {\r\n setTimeout(() => this.dismiss(id), item.duration);\r\n }\r\n\r\n return id;\r\n }\r\n\r\n dismiss(id: string): void {\r\n this.items.update(prev =>\r\n prev.map(i => (i.id === id ? { ...i, exiting: true } : i))\r\n );\r\n setTimeout(() => {\r\n this.items.update(prev => prev.filter(i => i.id !== id));\r\n }, 380);\r\n }\r\n\r\n success(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\r\n return this.show({ ...config, message, type: 'success' });\r\n }\r\n\r\n error(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\r\n return this.show({ ...config, message, type: 'error' });\r\n }\r\n\r\n warning(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\r\n return this.show({ ...config, message, type: 'warning' });\r\n }\r\n\r\n info(message: string, config?: Omit<SnackbarConfig, 'message' | 'type'>): string {\r\n return this.show({ ...config, message, type: 'info' });\r\n }\r\n}\r\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\r\nimport { SnackbarService } from '../../services/snackbar.service';\r\nimport { SnackbarItem } from '../../models/snackbar.model';\r\n\r\n@Component({\r\n selector: 'vl-snackbar',\r\n standalone: true,\r\n templateUrl: './snackbar.component.html',\r\n styleUrl: './snackbar.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SnackbarComponent {\r\n protected readonly svc = inject(SnackbarService);\r\n\r\n protected handleAction(item: SnackbarItem): void {\r\n item.action?.handler();\r\n this.svc.dismiss(item.id);\r\n }\r\n}\r\n","<div class=\"vl-snackbar-host\" aria-live=\"polite\" aria-atomic=\"false\">\r\n @for (item of svc.items(); track item.id) {\r\n <div\r\n class=\"vl-snackbar-item\"\r\n [class]=\"'vl-snackbar-item vl-snackbar-' + item.type\"\r\n [class.vl-snackbar-exiting]=\"item.exiting\"\r\n role=\"alert\">\r\n\r\n <span class=\"vl-snackbar-accent\" aria-hidden=\"true\"></span>\r\n\r\n <span class=\"vl-snackbar-icon\" aria-hidden=\"true\">\r\n @switch (item.type) {\r\n @case ('success') {\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n }\r\n @case ('error') {\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n }\r\n @case ('warning') {\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 5zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n }\r\n @default {\r\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0zm-7-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM9 9a.75.75 0 0 0 0 1.5h.253a.25.25 0 0 1 .244.304l-.459 2.066A1.75 1.75 0 0 0 10.747 15H11a.75.75 0 0 0 0-1.5h-.253a.25.25 0 0 1-.244-.304l.459-2.066A1.75 1.75 0 0 0 9.253 9H9z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n }\r\n }\r\n </span>\r\n\r\n <div class=\"vl-snackbar-body\">\r\n @if (item.title) {\r\n <p class=\"vl-snackbar-title\">{{ item.title }}</p>\r\n }\r\n <p class=\"vl-snackbar-message\">{{ item.message }}</p>\r\n @if (item.action) {\r\n <button class=\"vl-snackbar-action-btn\" (click)=\"handleAction(item)\">\r\n {{ item.action.label }}\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (item.dismissible) {\r\n <button class=\"vl-snackbar-close\" aria-label=\"Dismiss\" (click)=\"svc.dismiss(item.id)\">\r\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.75.75 0 1 1 1.06 1.06L9.06 8l3.22 3.22a.75.75 0 1 1-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 0 1-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06z\"/>\r\n </svg>\r\n </button>\r\n }\r\n\r\n @if (item.duration > 0) {\r\n <span\r\n class=\"vl-snackbar-progress\"\r\n [style.animation-duration.ms]=\"item.duration\"\r\n aria-hidden=\"true\">\r\n </span>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * User avatar — shows image when available, falls back to initials.\r\n *\r\n * Usage:\r\n * <vl-avatar name=\"Pranesh T\" />\r\n * <vl-avatar name=\"Pranesh T\" [src]=\"user.photoUrl\" size=\"lg\" />\r\n */\r\n@Component({\r\n selector: 'vl-avatar',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-avatar\" [class]=\"'vl-avatar-' + size()\">\r\n @if (src() && !imgError) {\r\n <img [src]=\"src()\" [alt]=\"name()\" (error)=\"imgError = true\" />\r\n } @else {\r\n <span class=\"vl-avatar-initials\">{{ initials() }}</span>\r\n }\r\n </div>\r\n `,\r\n styleUrl: './avatar.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AvatarComponent {\r\n name = input<string>('');\r\n src = input<string | null>(null);\r\n size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\r\n\r\n protected imgError = false;\r\n\r\n protected initials = computed(() => {\r\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\r\n if (!parts.length) return '?';\r\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\r\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\r\n });\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\nimport type { BadgeVariant } from '../../models/badge.model';\r\n\r\n/**\r\n * Colored pill badge with optional leading dot.\r\n *\r\n * Usage:\r\n * <vl-badge variant=\"ongoing\">Ongoing</vl-badge>\r\n * <vl-badge [dot]=\"true\" variant=\"planning\">Planning</vl-badge>\r\n * <vl-badge [color]=\"categoryColor\" [bgColor]=\"categoryBg\">Food</vl-badge>\r\n */\r\n@Component({\r\n selector: 'vl-badge',\r\n standalone: true,\r\n template: `\r\n <span class=\"vl-badge\" [class]=\"'vl-badge-' + variant()\"\r\n [style.color]=\"color() || null\"\r\n [style.background-color]=\"bgColor() || null\"\r\n [style.border-color]=\"color() ? color() + '33' : null\">\r\n @if (dot()) {\r\n <span class=\"vl-badge-dot\"\r\n [style.background-color]=\"color() || null\"></span>\r\n }\r\n <ng-content />\r\n </span>\r\n `,\r\n styleUrl: './badge.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class BadgeComponent {\r\n variant = input<BadgeVariant>('neutral');\r\n dot = input<boolean>(false);\r\n /** Override color (text + dot). Takes precedence over variant. */\r\n color = input<string>('');\r\n /** Override background color. Takes precedence over variant. */\r\n bgColor = input<string>('');\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\nimport type { ButtonSize, ButtonVariant } from '../../models/button.model';\r\n\r\n@Component({\r\n selector: 'vl-button',\r\n standalone: true,\r\n template: `\r\n <button\r\n class=\"vl-btn\"\r\n [class]=\"variantClass()\"\r\n [class.vl-btn-sm]=\"size() === 'sm'\"\r\n [class.vl-btn-md]=\"size() === 'md'\"\r\n [class.vl-btn-lg]=\"size() === 'lg'\"\r\n [class.vl-btn-loading]=\"loading()\"\r\n [disabled]=\"disabled() || loading()\">\r\n\r\n @if (loading()) {\r\n <span class=\"vl-btn-spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2.5\" opacity=\"0.25\"/>\r\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </span>\r\n }\r\n\r\n <ng-content />\r\n </button>\r\n `,\r\n styleUrl: './button.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ButtonComponent {\r\n variant = input<ButtonVariant>('primary');\r\n size = input<ButtonSize>('md');\r\n loading = input<boolean>(false);\r\n disabled = input<boolean>(false);\r\n\r\n protected variantClass(): string {\r\n return `vl-btn-${this.variant()}`;\r\n }\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Standard card wrapper. Optionally includes a section header.\r\n *\r\n * Usage:\r\n * <vl-card>content</vl-card>\r\n * <vl-card sectionTitle=\"Basic Info\">content</vl-card>\r\n * <vl-card [hover]=\"true\" padding=\"none\">content</vl-card>\r\n */\r\n@Component({\r\n selector: 'vl-card',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-card\"\r\n [class.vl-card-hover]=\"hover()\"\r\n [class.vl-card-p-none]=\"padding() === 'none'\"\r\n [class.vl-card-p-sm]=\"padding() === 'sm'\"\r\n [class.vl-card-p-md]=\"padding() === 'md'\"\r\n [class.vl-card-p-lg]=\"padding() === 'lg'\">\r\n\r\n @if (sectionTitle()) {\r\n <div class=\"vl-card-section-header\">\r\n <span>{{ sectionTitle() }}</span>\r\n </div>\r\n }\r\n\r\n <ng-content />\r\n </div>\r\n `,\r\n styleUrl: './card.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CardComponent {\r\n padding = input<'none' | 'sm' | 'md' | 'lg'>('md');\r\n hover = input<boolean>(false);\r\n sectionTitle = input<string>('');\r\n}\r\n","import { Component, effect, HostListener, inject, input, output, Renderer2, ViewEncapsulation } from '@angular/core';\r\nimport type { DialogFooterButton, DialogSize } from '../../models/dialog.model';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'vl-dialog',\r\n standalone: true,\r\n imports: [ButtonComponent],\r\n templateUrl: './dialog.component.html',\r\n styleUrl: './dialog.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DialogComponent {\r\n isOpen = input<boolean>(false);\r\n title = input<string>('');\r\n subtitle = input<string | null>(null);\r\n size = input<DialogSize>('md');\r\n hasFooter = input<boolean>(false);\r\n /** When provided, the footer renders these buttons instead of the projected [dialog-footer] content. */\r\n footerButtons = input<DialogFooterButton[]>([]);\r\n closed = output<void>();\r\n /** Emits the `key` of whichever footerButtons entry was clicked. */\r\n footerAction = output<string>();\r\n\r\n private readonly renderer = inject(Renderer2);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.isOpen()) {\r\n this.renderer.addClass(document.body, 'overflow-hidden');\r\n } else {\r\n this.renderer.removeClass(document.body, 'overflow-hidden');\r\n }\r\n });\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscape(): void {\r\n if (this.isOpen()) this.closed.emit();\r\n }\r\n}\r\n","@if (isOpen()) {\r\n <div class=\"vl-dialog-overlay\" role=\"dialog\" aria-modal=\"true\">\r\n\r\n <div class=\"vl-dialog-backdrop\" (click)=\"closed.emit()\"></div>\r\n\r\n <div class=\"vl-dialog-panel\"\r\n [class.vl-dialog-panel-sm]=\"size() === 'sm'\"\r\n [class.vl-dialog-panel-md]=\"size() === 'md'\"\r\n [class.vl-dialog-panel-lg]=\"size() === 'lg'\">\r\n\r\n <div class=\"vl-dialog-header\">\r\n <div>\r\n <h2>{{ title() }}</h2>\r\n @if (subtitle()) {\r\n <p>{{ subtitle() }}</p>\r\n }\r\n </div>\r\n <button (click)=\"closed.emit()\" class=\"vl-dialog-close\" aria-label=\"Close\">\r\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"vl-dialog-body\">\r\n <ng-content />\r\n </div>\r\n\r\n @if (hasFooter()) {\r\n <div class=\"vl-dialog-footer\">\r\n @if (footerButtons().length) {\r\n @for (btn of footerButtons(); track btn.key) {\r\n <vl-button [variant]=\"btn.variant ?? 'primary'\" [disabled]=\"btn.disabled ?? false\"\r\n [loading]=\"btn.loading ?? false\" (click)=\"footerAction.emit(btn.key)\">\r\n {{ btn.label }}\r\n </vl-button>\r\n }\r\n } @else {\r\n <ng-content select=\"[dialog-footer]\" />\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n}\r\n","import { Component, computed, input, output, ViewEncapsulation } from '@angular/core';\r\nimport { DialogComponent } from '../dialog/dialog.component';\r\nimport type { DialogFooterButton } from '../../models/dialog.model';\r\n\r\n/**\r\n * Pre-built confirmation dialog (wraps vl-dialog).\r\n *\r\n * Usage:\r\n * <vl-confirm-dialog\r\n * [isOpen]=\"showDelete()\"\r\n * title=\"Delete Expense\"\r\n * message=\"This action cannot be undone.\"\r\n * confirmLabel=\"Delete\"\r\n * confirmVariant=\"danger\"\r\n * [loading]=\"isDeleting()\"\r\n * (confirmed)=\"onDelete()\"\r\n * (cancelled)=\"showDelete.set(false)\" />\r\n */\r\n@Component({\r\n selector: 'vl-confirm-dialog',\r\n standalone: true,\r\n imports: [DialogComponent],\r\n template: `\r\n <vl-dialog\r\n [isOpen]=\"isOpen()\"\r\n [title]=\"title()\"\r\n [subtitle]=\"subtitle()\"\r\n size=\"sm\"\r\n [hasFooter]=\"true\"\r\n [footerButtons]=\"footerButtons()\"\r\n (footerAction)=\"onFooterAction($event)\"\r\n (closed)=\"cancelled.emit()\">\r\n\r\n <div class=\"vl-confirm-body\">\r\n <p class=\"vl-confirm-message\">{{ message() }}</p>\r\n <ng-content />\r\n </div>\r\n </vl-dialog>\r\n `,\r\n styles: `\r\n .vl-confirm-body {\r\n padding: 1.5rem;\r\n }\r\n .vl-confirm-message {\r\n font-size: 0.875rem;\r\n color: var(--color-muted-foreground, hsl(210 10% 50%));\r\n line-height: 1.6;\r\n margin: 0;\r\n font-family: var(--font-family-sans, inherit);\r\n }\r\n `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ConfirmDialogComponent {\r\n isOpen = input<boolean>(false);\r\n title = input<string>('Are you sure?');\r\n subtitle = input<string | null>(null);\r\n message = input<string>('');\r\n confirmLabel = input<string>('Confirm');\r\n cancelLabel = input<string>('Cancel');\r\n confirmVariant = input<'primary' | 'danger'>('danger');\r\n loading = input<boolean>(false);\r\n\r\n confirmed = output<void>();\r\n cancelled = output<void>();\r\n\r\n readonly footerButtons = computed<DialogFooterButton[]>(() => [\r\n { key: 'cancel', label: this.cancelLabel(), variant: 'ghost', disabled: this.loading() },\r\n { key: 'confirm', label: this.confirmLabel(), variant: this.confirmVariant(), loading: this.loading() },\r\n ]);\r\n\r\n onFooterAction(key: string): void {\r\n key === 'confirm' ? this.confirmed.emit() : this.cancelled.emit();\r\n }\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Dashed-border empty state card. Project an action button into the default slot.\r\n *\r\n * Usage:\r\n * <vl-empty-state\r\n * icon=\"M15 10.5a3 3 0 11-6 0...\"\r\n * title=\"No trips yet\"\r\n * description=\"Create your first trip to get started.\">\r\n * <button (click)=\"create()\">Create Trip</button>\r\n * </vl-empty-state>\r\n */\r\n@Component({\r\n selector: 'vl-empty-state',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-empty-state\">\r\n <div class=\"vl-empty-state-icon\">\r\n @if (icon()) {\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path [attr.d]=\"icon()\" />\r\n </svg>\r\n } @else {\r\n <ng-content select=\"[empty-icon]\" />\r\n }\r\n </div>\r\n <h3 class=\"vl-empty-state-title\">{{ title() }}</h3>\r\n @if (description()) {\r\n <p class=\"vl-empty-state-description\">{{ description() }}</p>\r\n }\r\n <div class=\"vl-empty-state-action\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n `,\r\n styleUrl: './empty-state.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class EmptyStateComponent {\r\n /** SVG path `d` attribute for the icon. Or project via <svg empty-icon>. */\r\n icon = input<string>('');\r\n title = input<string>('Nothing here yet');\r\n description = input<string>('');\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Label + error wrapper for native inputs. Use content projection for the\r\n * actual <input> so reactive forms work without ControlValueAccessor.\r\n *\r\n * Usage:\r\n * <vl-input label=\"Trip Name\" [error]=\"nameControl.errors && nameControl.touched ? 'Required' : null\">\r\n * <input type=\"text\" formControlName=\"name\" placeholder=\"Paris Weekend\" />\r\n * </vl-input>\r\n */\r\n@Component({\r\n selector: 'vl-input',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-input-root\">\r\n @if (label()) {\r\n <label class=\"vl-input-label\" [class.vl-input-label-required]=\"required()\">\r\n {{ label() }}\r\n </label>\r\n }\r\n <div class=\"vl-input-field\" [class.vl-input-field-error]=\"!!error()\">\r\n @if (prefix()) {\r\n <span class=\"vl-input-prefix\">{{ prefix() }}</span>\r\n }\r\n <ng-content />\r\n </div>\r\n @if (error()) {\r\n <p class=\"vl-input-error\">{{ error() }}</p>\r\n } @else if (hint()) {\r\n <p class=\"vl-input-hint\">{{ hint() }}</p>\r\n }\r\n </div>\r\n `,\r\n styleUrl: './input.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class InputComponent {\r\n label = input<string>('');\r\n error = input<string | null>(null);\r\n hint = input<string>('');\r\n prefix = input<string>('');\r\n required = input<boolean>(false);\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-loader',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-loader\" [class.vl-loader-fullpage]=\"fullPage()\">\r\n <div class=\"vl-loader-spinner\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2.5\" opacity=\"0.2\" />\r\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" />\r\n </svg>\r\n </div>\r\n @if (message()) {\r\n <p class=\"vl-loader-message\">{{ message() }}</p>\r\n }\r\n </div>\r\n `,\r\n styles: `\r\n .vl-loader {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 0.75rem;\r\n padding: 3rem 1.5rem;\r\n }\r\n .vl-loader-fullpage { min-height: 16rem; }\r\n .vl-loader-spinner {\r\n width: 2rem;\r\n height: 2rem;\r\n color: var(--color-primary, #6366f1);\r\n animation: vl-spin 0.8s linear infinite;\r\n }\r\n .vl-loader-spinner svg { width: 100%; height: 100%; }\r\n .vl-loader-message {\r\n font-size: 0.875rem;\r\n color: var(--color-muted-foreground, #6b7280);\r\n margin: 0;\r\n }\r\n @keyframes vl-spin { to { transform: rotate(360deg); } }\r\n `,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LoaderComponent {\r\n message = input<string>('');\r\n fullPage = input<boolean>(false);\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport type { PasswordStrength } from '../../models/password-strength.model';\r\n\r\n/**\r\n * Three-segment password strength indicator.\r\n *\r\n * Usage:\r\n * <vl-password-strength [strength]=\"passwordStrength()\" />\r\n */\r\n@Component({\r\n selector: 'vl-password-strength',\r\n standalone: true,\r\n imports: [TitleCasePipe],\r\n template: `\r\n <div class=\"vl-pw-root\">\r\n <div class=\"vl-pw-bars\">\r\n <div class=\"vl-pw-bar\"\r\n [class.vl-pw-bar-weak]=\"strength() === 'weak'\"\r\n [class.vl-pw-bar-inactive]=\"!strength()\"></div>\r\n <div class=\"vl-pw-bar\"\r\n [class.vl-pw-bar-medium]=\"strength() === 'medium'\"\r\n [class.vl-pw-bar-strong]=\"strength() === 'strong'\"\r\n [class.vl-pw-bar-inactive]=\"strength() !== 'medium' && strength() !== 'strong'\"></div>\r\n <div class=\"vl-pw-bar\"\r\n [class.vl-pw-bar-strong]=\"strength() === 'strong'\"\r\n [class.vl-pw-bar-inactive]=\"strength() !== 'strong'\"></div>\r\n </div>\r\n @if (showLabel() && strength()) {\r\n <span class=\"vl-pw-label\" [class]=\"'vl-pw-label-' + strength()\">\r\n {{ strength() | titlecase }}\r\n </span>\r\n }\r\n </div>\r\n `,\r\n styleUrl: './password-strength.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PasswordStrengthComponent {\r\n strength = input<PasswordStrength>(null);\r\n showLabel = input<boolean>(true);\r\n}\r\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\r\nimport type { ProgressVariant } from '../../models/progress-bar.model';\r\n\r\n/**\r\n * Horizontal progress bar with optional label and percentage text.\r\n *\r\n * Usage:\r\n * <vl-progress-bar [value]=\"75\" />\r\n * <vl-progress-bar [value]=\"budgetUsed\" variant=\"auto\" [showLabel]=\"true\" />\r\n */\r\n@Component({\r\n selector: 'vl-progress-bar',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-progress-root\">\r\n @if (label()) {\r\n <div class=\"vl-progress-header\">\r\n <span class=\"vl-progress-label\">{{ label() }}</span>\r\n @if (showLabel()) {\r\n <span class=\"vl-progress-pct\">{{ clampedValue() }}%</span>\r\n }\r\n </div>\r\n } @else if (showLabel()) {\r\n <div class=\"vl-progress-header vl-progress-header-end\">\r\n <span class=\"vl-progress-pct\">{{ clampedValue() }}%</span>\r\n </div>\r\n }\r\n <div class=\"vl-progress-track\">\r\n <div class=\"vl-progress-fill\"\r\n [class]=\"'vl-progress-fill-' + resolvedVariant()\"\r\n [style.width.%]=\"clampedValue()\">\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styleUrl: './progress-bar.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ProgressBarComponent {\r\n value = input<number>(0);\r\n variant = input<ProgressVariant>('auto');\r\n showLabel = input<boolean>(false);\r\n label = input<string>('');\r\n\r\n protected clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\r\n\r\n protected resolvedVariant = computed<Exclude<ProgressVariant, 'auto'>>(() => {\r\n if (this.variant() !== 'auto') return this.variant() as Exclude<ProgressVariant, 'auto'>;\r\n const v = this.clampedValue();\r\n if (v >= 90) return 'danger';\r\n if (v >= 75) return 'warning';\r\n return 'primary';\r\n });\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Label + error wrapper for native <select> elements.\r\n *\r\n * Usage:\r\n * <vl-select label=\"Currency\" [error]=\"currencyControl.invalid && currencyControl.touched ? 'Required' : null\">\r\n * <select formControlName=\"currency\">\r\n * <option value=\"USD\">USD</option>\r\n * </select>\r\n * </vl-select>\r\n */\r\n@Component({\r\n selector: 'vl-select',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-select-root\">\r\n @if (label()) {\r\n <label class=\"vl-select-label\" [class.vl-select-label-required]=\"required()\">\r\n {{ label() }}\r\n </label>\r\n }\r\n <div class=\"vl-select-field\" [class.vl-select-field-error]=\"!!error()\">\r\n <ng-content />\r\n <span class=\"vl-select-caret\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path fill-rule=\"evenodd\" d=\"M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06z\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n @if (error()) {\r\n <p class=\"vl-select-error\">{{ error() }}</p>\r\n } @else if (hint()) {\r\n <p class=\"vl-select-hint\">{{ hint() }}</p>\r\n }\r\n </div>\r\n `,\r\n styleUrl: './select.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SelectComponent {\r\n label = input<string>('');\r\n error = input<string | null>(null);\r\n hint = input<string>('');\r\n required = input<boolean>(false);\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Shimmer placeholder for loading states.\r\n *\r\n * Usage:\r\n * <vl-skeleton /> — single line, full width\r\n * <vl-skeleton width=\"60%\" height=\"1rem\" />\r\n * <vl-skeleton shape=\"circle\" width=\"3rem\" height=\"3rem\" />\r\n * <vl-skeleton [lines]=\"3\" /> — stacked paragraph lines\r\n */\r\n@Component({\r\n selector: 'vl-skeleton',\r\n standalone: true,\r\n template: `\r\n @if (lines() > 1) {\r\n <div class=\"vl-skeleton-group\">\r\n @for (i of lineArr(); track i; let last = $last) {\r\n <div class=\"vl-skeleton\"\r\n [class.vl-skeleton-circle]=\"shape() === 'circle'\"\r\n [style.width]=\"last ? '60%' : '100%'\"\r\n [style.height]=\"height()\">\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"vl-skeleton\"\r\n [class.vl-skeleton-circle]=\"shape() === 'circle'\"\r\n [style.width]=\"width()\"\r\n [style.height]=\"height()\">\r\n </div>\r\n }\r\n `,\r\n styleUrl: './skeleton.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SkeletonComponent {\r\n width = input<string>('100%');\r\n height = input<string>('1rem');\r\n shape = input<'rect' | 'circle'>('rect');\r\n lines = input<number>(1);\r\n\r\n protected lineArr() {\r\n return Array.from({ length: this.lines() }, (_, i) => i);\r\n }\r\n}\r\n","import { Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Compact labeled metric card.\r\n *\r\n * Usage:\r\n * <vl-stat-card label=\"Budget\" value=\"$2,400\" />\r\n * <vl-stat-card label=\"Spent\" value=\"$1,200\" valueVariant=\"secondary\" />\r\n */\r\n@Component({\r\n selector: 'vl-stat-card',\r\n standalone: true,\r\n template: `\r\n <div class=\"vl-stat-card\">\r\n <p class=\"vl-stat-label\">{{ label() }}</p>\r\n <p class=\"vl-stat-value\" [class]=\"'vl-stat-value-' + valueVariant()\">{{ value() }}</p>\r\n @if (subtext()) {\r\n <p class=\"vl-stat-subtext\">{{ subtext() }}</p>\r\n }\r\n </div>\r\n `,\r\n styleUrl: './stat-card.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class StatCardComponent {\r\n label = input<string>('');\r\n value = input<string>('');\r\n subtext = input<string>('');\r\n valueVariant = input<'default' | 'primary' | 'secondary' | 'accent' | 'destructive'>('default');\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n input,\r\n OnDestroy,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport type { TooltipPosition } from '../models/tooltip.model';\r\n\r\n/**\r\n * Attribute directive that renders an accessible tooltip near the host element.\r\n *\r\n * Usage:\r\n * <button vlTooltip=\"Save changes\">Save</button>\r\n * <span [vlTooltip]=\"label\" vlTooltipPosition=\"bottom\">...</span>\r\n */\r\n@Directive({\r\n selector: '[vlTooltip]',\r\n standalone: true,\r\n host: {\r\n '[attr.aria-describedby]': 'tooltipId',\r\n },\r\n})\r\nexport class TooltipDirective implements OnDestroy {\r\n vlTooltip = input<string>('');\r\n vlTooltipPosition = input<TooltipPosition>('top');\r\n vlTooltipDelay = input<number>(200);\r\n\r\n protected readonly tooltipId = `vl-tooltip-${Math.random().toString(36).slice(2, 8)}`;\r\n\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n\r\n private tooltipEl: HTMLElement | null = null;\r\n private showTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n @HostListener('mouseenter')\r\n @HostListener('focusin')\r\n show(): void {\r\n if (!isPlatformBrowser(this.platformId) || !this.vlTooltip()) return;\r\n this.showTimer = setTimeout(() => this.create(), this.vlTooltipDelay());\r\n }\r\n\r\n @HostListener('mouseleave')\r\n @HostListener('focusout')\r\n hide(): void {\r\n if (this.showTimer) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = null;\r\n }\r\n this.destroy();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.hide();\r\n }\r\n\r\n private create(): void {\r\n if (this.tooltipEl) return;\r\n\r\n const tip = document.createElement('div');\r\n tip.id = this.tooltipId;\r\n tip.role = 'tooltip';\r\n tip.className = 'vl-tooltip';\r\n tip.textContent = this.vlTooltip();\r\n tip.setAttribute('data-position', this.vlTooltipPosition());\r\n document.body.appendChild(tip);\r\n this.tooltipEl = tip;\r\n\r\n this.injectStyles();\r\n this.position(tip);\r\n\r\n // Trigger enter animation on next frame so the transition fires\r\n requestAnimationFrame(() => tip.classList.add('vl-tooltip-visible'));\r\n }\r\n\r\n private destroy(): void {\r\n if (!this.tooltipEl) return;\r\n const tip = this.tooltipEl;\r\n tip.classList.remove('vl-tooltip-visible');\r\n // Wait for the fade-out transition before removing from DOM\r\n tip.addEventListener('transitionend', () => tip.remove(), { once: true });\r\n this.tooltipEl = null;\r\n }\r\n\r\n private position(tip: HTMLElement): void {\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const pos = this.vlTooltipPosition();\r\n const GAP = 8;\r\n\r\n // Temporarily make visible to measure size\r\n tip.style.visibility = 'hidden';\r\n tip.style.display = 'block';\r\n const tipRect = tip.getBoundingClientRect();\r\n tip.style.visibility = '';\r\n tip.style.display = '';\r\n\r\n let top: number;\r\n let left: number;\r\n\r\n switch (pos) {\r\n case 'bottom':\r\n top = hostRect.bottom + window.scrollY + GAP;\r\n left = hostRect.left + window.scrollX + hostRect.width / 2 - tipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = hostRect.top + window.scrollY + hostRect.height / 2 - tipRect.height / 2;\r\n left = hostRect.left + window.scrollX - tipRect.width - GAP;\r\n break;\r\n case 'right':\r\n top = hostRect.top + window.scrollY + hostRect.height / 2 - tipRect.height / 2;\r\n left = hostRect.right + window.scrollX + GAP;\r\n break;\r\n default: // top\r\n top = hostRect.top + window.scrollY - tipRect.height - GAP;\r\n left = hostRect.left + window.scrollX + hostRect.width / 2 - tipRect.width / 2;\r\n break;\r\n }\r\n\r\n // Keep within horizontal viewport bounds\r\n left = Math.max(8, Math.min(left, window.innerWidth - tipRect.width - 8));\r\n\r\n tip.style.top = `${top}px`;\r\n tip.style.left = `${left}px`;\r\n }\r\n\r\n private injectStyles(): void {\r\n const STYLE_ID = 'vl-tooltip-styles';\r\n if (document.getElementById(STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n .vl-tooltip {\r\n position: absolute;\r\n z-index: 10000;\r\n padding: 0.3125rem 0.625rem;\r\n background-color: var(--color-foreground, #1f2937);\r\n color: var(--color-background, #fff);\r\n font-size: 0.75rem;\r\n font-family: var(--font-family-sans, inherit);\r\n line-height: 1.4;\r\n border-radius: calc(var(--radius, 0.5rem) * 0.75);\r\n white-space: nowrap;\r\n pointer-events: none;\r\n max-width: 16rem;\r\n white-space: normal;\r\n text-align: center;\r\n opacity: 0;\r\n transform: scale(0.95);\r\n transition: opacity 0.15s ease, transform 0.15s ease;\r\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\r\n }\r\n .vl-tooltip-visible {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Formats a number as a currency string using Intl.NumberFormat.\r\n *\r\n * Usage:\r\n * {{ trip.budget | vlCurrency }} → \"$2,400\"\r\n * {{ expense.amount | vlCurrency:'EUR' }} → \"€1,200\"\r\n * {{ amount | vlCurrency:'INR':'symbol-narrow':'1.2-2' }}\r\n */\r\n@Pipe({ name: 'vlCurrency', standalone: true, pure: true })\r\nexport class CurrencyFormatPipe implements PipeTransform {\r\n transform(\r\n value: number | null | undefined,\r\n currencyCode = 'USD',\r\n display: 'symbol' | 'symbol-narrow' | 'code' | 'name' = 'symbol',\r\n locale = 'en-US',\r\n ): string {\r\n if (value == null) return '';\r\n\r\n try {\r\n return new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currency: currencyCode,\r\n currencyDisplay: display === 'symbol-narrow' ? 'narrowSymbol' : display,\r\n maximumFractionDigits: Number.isInteger(value) ? 0 : 2,\r\n }).format(value);\r\n } catch {\r\n return `${currencyCode} ${value}`;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport type { DatePreset } from '../models/date-format.model';\r\n\r\n/**\r\n * Formats a Date, ISO string, or timestamp using Intl.DateTimeFormat.\r\n *\r\n * Presets:\r\n * short → \"Jun 28\" (no year if current year)\r\n * medium → \"Jun 28, 2026\"\r\n * long → \"June 28, 2026\"\r\n * full → \"Sunday, June 28, 2026\"\r\n * time → \"2:30 PM\"\r\n * datetime → \"Jun 28, 2026, 2:30 PM\"\r\n * relative → \"2 days ago\" / \"in 3 hours\" (uses Intl.RelativeTimeFormat)\r\n *\r\n * Usage:\r\n * {{ trip.startDate | vlDateFormat }}\r\n * {{ trip.startDate | vlDateFormat:'long' }}\r\n * {{ trip.startDate | vlDateFormat:'relative' }}\r\n */\r\n@Pipe({ name: 'vlDateFormat', standalone: true, pure: true })\r\nexport class DateFormatPipe implements PipeTransform {\r\n transform(value: Date | string | number | null | undefined, preset: DatePreset = 'medium', locale = 'en-US'): string {\r\n if (value == null || value === '') return '';\r\n\r\n const date = value instanceof Date ? value : new Date(value);\r\n if (isNaN(date.getTime())) return String(value);\r\n\r\n if (preset === 'relative') return this.toRelative(date, locale);\r\n\r\n return new Intl.DateTimeFormat(locale, this.options(preset, date)).format(date);\r\n }\r\n\r\n private options(preset: DatePreset, date: Date): Intl.DateTimeFormatOptions {\r\n const isCurrentYear = date.getFullYear() === new Date().getFullYear();\r\n\r\n switch (preset) {\r\n case 'short':\r\n return isCurrentYear\r\n ? { month: 'short', day: 'numeric' }\r\n : { month: 'short', day: 'numeric', year: 'numeric' };\r\n case 'medium':\r\n return { month: 'short', day: 'numeric', year: 'numeric' };\r\n case 'long':\r\n return { month: 'long', day: 'numeric', year: 'numeric' };\r\n case 'full':\r\n return { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' };\r\n case 'time':\r\n return { hour: 'numeric', minute: '2-digit', hour12: true };\r\n case 'datetime':\r\n return { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true };\r\n default:\r\n return { month: 'short', day: 'numeric', year: 'numeric' };\r\n }\r\n }\r\n\r\n private toRelative(date: Date, locale: string): string {\r\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\r\n const diffMs = date.getTime() - Date.now();\r\n const diffS = Math.round(diffMs / 1000);\r\n const diffM = Math.round(diffS / 60);\r\n const diffH = Math.round(diffM / 60);\r\n const diffD = Math.round(diffH / 24);\r\n const diffW = Math.round(diffD / 7);\r\n const diffMo = Math.round(diffD / 30);\r\n const diffY = Math.round(diffD / 365);\r\n\r\n if (Math.abs(diffS) < 60) return rtf.format(diffS, 'second');\r\n if (Math.abs(diffM) < 60) return rtf.format(diffM, 'minute');\r\n if (Math.abs(diffH) < 24) return rtf.format(diffH, 'hour');\r\n if (Math.abs(diffD) < 7) return rtf.format(diffD, 'day');\r\n if (Math.abs(diffW) < 5) return rtf.format(diffW, 'week');\r\n if (Math.abs(diffMo) < 12) return rtf.format(diffMo, 'month');\r\n return rtf.format(diffY, 'year');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Returns a human-readable trip duration string.\r\n *\r\n * Usage:\r\n * {{ trip.startDate | vlTripDuration:trip.endDate }} → \"6 days\"\r\n */\r\n@Pipe({ name: 'vlTripDuration', standalone: true, pure: true })\r\nexport class TripDurationPipe implements PipeTransform {\r\n transform(startDate: Date | string | null | undefined, endDate?: Date | string | null): string {\r\n if (!startDate || !endDate) return '';\r\n const start = startDate instanceof Date ? startDate : new Date(startDate);\r\n const end = endDate instanceof Date ? endDate : new Date(endDate);\r\n const days = Math.ceil(Math.abs(end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\r\n return `${days} day${days !== 1 ? 's' : ''}`;\r\n }\r\n}\r\n","export interface Trip {\r\n id: string;\r\n name: string;\r\n destination: string;\r\n country: string;\r\n startDate: Date;\r\n endDate: Date;\r\n budget: number;\r\n spent: number;\r\n status: 'planning' | 'ongoing' | 'completed';\r\n currency: string; // Currency code (USD, EUR, INR, etc.)\r\n}\r\n\r\nexport interface TripDTO {\r\n id: string;\r\n name: string;\r\n destination: string;\r\n country: string;\r\n startDate: string;\r\n endDate: string;\r\n budget: number;\r\n spent: number;\r\n status: 'planning' | 'ongoing' | 'completed';\r\n currency: string;\r\n}\r\n\r\nexport interface TripStatusStyle {\r\n color: string;\r\n background: string;\r\n}\r\n\r\nexport const TRIP_STATUS_COLORS: Record<Trip['status'], TripStatusStyle> = {\r\n planning: { color: '#ff6347', background: 'rgba(255, 99, 71, 0.12)' },\r\n ongoing: { color: '#228b22', background: 'rgba(34, 139, 34, 0.12)' },\r\n completed: { color: '#6b7280', background: 'rgba(107, 114, 128, 0.12)' },\r\n};\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Trip, TripStatusStyle, TRIP_STATUS_COLORS } from '../models/trip.model';\n\n/**\n * Maps a trip status to its display colors.\n *\n * Usage:\n * @let statusStyle = trip.status | vlTripStatusStyle;\n * [style.color]=\"statusStyle.color\"\n * [style.background-color]=\"statusStyle.background\"\n */\n@Pipe({ name: 'vlTripStatusStyle', standalone: true, pure: true })\nexport class TripStatusStylePipe implements PipeTransform {\n transform(status: Trip['status']): TripStatusStyle {\n return TRIP_STATUS_COLORS[status];\n }\n}\n","export type ExpenseCategory = 'food' | 'accommodation' | 'transport' | 'activities' | 'souvenirs' | 'other';\r\n\r\nexport interface Expense {\r\n id: string;\r\n tripId: string;\r\n category: ExpenseCategory;\r\n amount: number;\r\n description: string;\r\n date: Date;\r\n}\r\n\r\nexport interface ExpenseDTO {\r\n id: string;\r\n tripId: string;\r\n category: ExpenseCategory;\r\n amount: number;\r\n description: string;\r\n date: string;\r\n}\r\n\r\nexport interface CategorySpending {\r\n category: ExpenseCategory;\r\n amount: number;\r\n percentage: number;\r\n icon: string;\r\n}\r\n\r\nexport interface DailyExpenses {\r\n date: Date;\r\n expenses: Expense[];\r\n total: number;\r\n}\r\n\r\nexport const CATEGORY_ICONS: Record<ExpenseCategory, string> = {\r\n food: '🍔',\r\n accommodation: '🏨',\r\n transport: '🚗',\r\n activities: '🎭',\r\n souvenirs: '🎁',\r\n other: '💰'\r\n};\r\n\r\nexport const CATEGORY_COLORS: Record<ExpenseCategory, string> = {\r\n food: '#FF6B6B',\r\n accommodation: '#4ECDC4',\r\n transport: '#FFE66D',\r\n activities: '#95E1D3',\r\n souvenirs: '#C7CEEA',\r\n other: '#B4B4B4'\r\n};\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface HttpOptions {\r\n headers?: HttpHeaders | { [header: string]: string | string[] };\r\n params?: HttpParams | { [param: string]: string | string[] };\r\n responseType?: 'json' | 'text';\r\n}\r\n\r\n/**\r\n * Shared HTTP service for micro-frontends.\r\n *\r\n * Services call with relative paths: `sdk.get('/trips')`.\r\n * The host application's HTTP interceptor resolves the full API URL.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SharedHttpService {\r\n\r\n private http = inject(HttpClient);\r\n\r\n get<T>(path: string, options?: HttpOptions): Observable<T> {\r\n return this.http.get<T>(path, { ...options, responseType: 'json' });\r\n }\r\n\r\n post<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\r\n return this.http.post<T>(path, body, { ...options, responseType: 'json' });\r\n }\r\n\r\n put<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\r\n return this.http.put<T>(path, body, { ...options, responseType: 'json' });\r\n }\r\n\r\n delete<T>(path: string, options?: HttpOptions & { body?: unknown }): Observable<T> {\r\n return this.http.delete<T>(path, { ...options, body: options?.body, responseType: 'json' });\r\n }\r\n\r\n patch<T>(path: string, body: any, options?: HttpOptions): Observable<T> {\r\n return this.http.patch<T>(path, body, { ...options, responseType: 'json' });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Trip, TripDTO } from '../models/trip.model';\r\nimport { SharedHttpService } from './http';\r\nimport { ApiResponse } from '../models/api-response.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TripService {\r\n private readonly httpService = inject(SharedHttpService);\r\n\r\n getAllTrips(): Observable<Trip[]> {\r\n return this.httpService.get<ApiResponse<{ trips: TripDTO[] }>>('/trips').pipe(\r\n map(res => (res?.data?.trips ?? []).map(dto => this.dtoToTrip(dto)))\r\n );\r\n }\r\n\r\n getTripById(id: string): Observable<Trip | undefined> {\r\n return this.httpService.get<ApiResponse<TripDTO>>(`/trips/${id}`).pipe(\r\n map(res => res?.data ? this.dtoToTrip(res.data) : undefined)\r\n );\r\n }\r\n\r\n private dtoToTrip(dto: TripDTO): Trip {\r\n return {\r\n ...dto,\r\n startDate: new Date(dto.startDate),\r\n endDate: new Date(dto.endDate)\r\n };\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Expense, ExpenseDTO, CategorySpending, DailyExpenses, CATEGORY_ICONS, ExpenseCategory } from '../models/expense.model';\r\nimport { SharedHttpService } from './http';\r\nimport { ApiResponse } from '../models/api-response.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExpenseService {\r\n private readonly httpService = inject(SharedHttpService);\r\n\r\n getExpensesByTripId(tripId: string): Observable<Expense[]> {\r\n return this.httpService.get<ApiResponse<ExpenseDTO[]>>(`/trips/${tripId}/expenses`).pipe(\r\n map(res => (res?.data ?? []).map(dto => this.dtoToExpense(dto)))\r\n );\r\n }\r\n\r\n addExpense(expense: Omit<Expense, 'id'>): Observable<Expense> {\r\n const dto = this.expenseToDTO(expense as Expense);\r\n return this.httpService.post<ApiResponse<ExpenseDTO>>('/expenses', dto).pipe(\r\n map(res => this.dtoToExpense(res.data))\r\n );\r\n }\r\n\r\n getExpensesByCategory(tripId: string): Observable<CategorySpending[]> {\r\n return this.getExpensesByTripId(tripId).pipe(\r\n map(expenses => this.calculateCategorySpending(expenses))\r\n );\r\n }\r\n\r\n getDailyExpenses(tripId: string): Observable<DailyExpenses[]> {\r\n return this.getExpensesByTripId(tripId).pipe(\r\n map(expenses => this.groupExpensesByDay(expenses))\r\n );\r\n }\r\n\r\n private calculateCategorySpending(expenses: Expense[]): CategorySpending[] {\r\n const total = expenses.reduce((sum, exp) => sum + exp.amount, 0);\r\n const categoryMap = new Map<ExpenseCategory, number>();\r\n\r\n expenses.forEach(exp => {\r\n const current = categoryMap.get(exp.category) || 0;\r\n categoryMap.set(exp.category, current + exp.amount);\r\n });\r\n\r\n return Array.from(categoryMap.entries()).map(([category, amount]) => ({\r\n category,\r\n amount,\r\n percentage: total > 0 ? Math.round((amount / total) * 100) : 0,\r\n icon: CATEGORY_ICONS[category]\r\n })).sort((a, b) => b.amount - a.amount);\r\n }\r\n\r\n private groupExpensesByDay(expenses: Expense[]): DailyExpenses[] {\r\n const dayMap = new Map<string, Expense[]>();\r\n\r\n expenses.forEach(exp => {\r\n const dateKey = exp.date.toISOString().split('T')[0];\r\n const dayExpenses = dayMap.get(dateKey) || [];\r\n dayExpenses.push(exp);\r\n dayMap.set(dateKey, dayExpenses);\r\n });\r\n\r\n return Array.from(dayMap.entries())\r\n .map(([dateKey, dayExpenses]) => ({\r\n date: new Date(dateKey),\r\n expenses: dayExpenses.sort((a, b) => a.date.getTime() - b.date.getTime()),\r\n total: dayExpenses.reduce((sum, exp) => sum + exp.amount, 0)\r\n }))\r\n .sort((a, b) => a.date.getTime() - b.date.getTime());\r\n }\r\n\r\n private dtoToExpense(dto: ExpenseDTO): Expense {\r\n return {\r\n ...dto,\r\n date: new Date(dto.date)\r\n };\r\n }\r\n\r\n private expenseToDTO(expense: Expense): ExpenseDTO {\r\n return {\r\n ...expense,\r\n date: expense.date.toISOString()\r\n };\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\ninterface IEnvironment {\r\n app: string;\r\n apiUrl: string;\r\n}\r\n\r\nexport const EnvironmentToken = new InjectionToken<IEnvironment>('environment');","export interface Currency {\r\n code: string;\r\n symbol: string;\r\n name: string;\r\n}\r\n\r\nexport const CURRENCIES: Currency[] = [\r\n { code: 'USD', symbol: '$', name: 'US Dollar' },\r\n { code: 'EUR', symbol: '€', name: 'Euro' },\r\n { code: 'GBP', symbol: '£', name: 'British Pound' },\r\n { code: 'INR', symbol: '₹', name: 'Indian Rupee' },\r\n { code: 'JPY', symbol: '¥', name: 'Japanese Yen' },\r\n { code: 'AUD', symbol: 'A$', name: 'Australian Dollar' },\r\n { code: 'CAD', symbol: 'C$', name: 'Canadian Dollar' },\r\n];\r\n\r\nexport function getCurrency(code: string): Currency | undefined {\r\n return CURRENCIES.find(c => c.code === code);\r\n}\r\n\r\nexport function formatCurrency(amount: number, currencyCode = 'USD'): string {\r\n const currency = getCurrency(currencyCode);\r\n const symbol = currency?.symbol || '$';\r\n return `${symbol}${amount.toLocaleString()}`;\r\n}\r\n","// Components\r\nexport * from './components/snackbar/snackbar.component';\r\nexport * from './components/avatar/avatar.component';\r\nexport * from './components/badge/badge.component';\r\nexport * from './components/button/button.component';\r\nexport * from './components/card/card.component';\r\nexport * from './components/confirm-dialog/confirm-dialog.component';\r\nexport * from './components/dialog/dialog.component';\r\nexport * from './components/empty-state/empty-state.component';\r\nexport * from './components/input/input.component';\r\nexport * from './components/loader/loader.component';\r\nexport * from './components/password-strength/password-strength.component';\r\nexport * from './components/progress-bar/progress-bar.component';\r\nexport * from './components/select/select.component';\r\nexport * from './components/skeleton/skeleton.component';\r\nexport * from './components/stat-card/stat-card.component';\r\n\r\n// Directives\r\nexport * from './directives/tooltip.directive';\r\n\r\n// Pipes\r\nexport * from './pipes/currency-format.pipe';\r\nexport * from './pipes/date-format.pipe';\r\nexport * from './pipes/trip-duration.pipe';\r\nexport * from './pipes/trip-status-style.pipe';\r\n\r\n// Models\r\nexport * from './models/index';\r\n\r\n// Services\r\nexport * from './services/http';\r\nexport * from './services/trip.service';\r\nexport * from './services/expense.service';\r\nexport * from './services/snackbar.service';\r\n\r\n// Tokens\r\nexport * from './tokens/environment.token';\r\n\r\n// Utils\r\nexport * from './utils/currency.util';\r\n","/*\r\n * Public API Surface of voyage-lib\r\n */\r\n\r\nexport * from './lib/voyage-lib';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "voyage-lib",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.2.0",
6
6
  "@angular/core": "^21.2.0"
@@ -19,5 +19,6 @@
19
19
  "types": "./types/voyage-lib.d.ts",
20
20
  "default": "./fesm2022/voyage-lib.mjs"
21
21
  }
22
- }
22
+ },
23
+ "type": "module"
23
24
  }
@@ -424,6 +424,25 @@ interface TripDTO {
424
424
  status: 'planning' | 'ongoing' | 'completed';
425
425
  currency: string;
426
426
  }
427
+ interface TripStatusStyle {
428
+ color: string;
429
+ background: string;
430
+ }
431
+ declare const TRIP_STATUS_COLORS: Record<Trip['status'], TripStatusStyle>;
432
+
433
+ /**
434
+ * Maps a trip status to its display colors.
435
+ *
436
+ * Usage:
437
+ * @let statusStyle = trip.status | vlTripStatusStyle;
438
+ * [style.color]="statusStyle.color"
439
+ * [style.background-color]="statusStyle.background"
440
+ */
441
+ declare class TripStatusStylePipe implements PipeTransform {
442
+ transform(status: Trip['status']): TripStatusStyle;
443
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TripStatusStylePipe, never>;
444
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<TripStatusStylePipe, "vlTripStatusStyle", true>;
445
+ }
427
446
 
428
447
  type ExpenseCategory = 'food' | 'accommodation' | 'transport' | 'activities' | 'souvenirs' | 'other';
429
448
  interface Expense {
@@ -536,5 +555,5 @@ declare const CURRENCIES: Currency[];
536
555
  declare function getCurrency(code: string): Currency | undefined;
537
556
  declare function formatCurrency(amount: number, currencyCode?: string): string;
538
557
 
539
- export { AvatarComponent, BadgeComponent, ButtonComponent, CATEGORY_COLORS, CATEGORY_ICONS, CURRENCIES, CardComponent, ConfirmDialogComponent, CurrencyFormatPipe, DateFormatPipe, DialogComponent, EmptyStateComponent, EnvironmentToken, ExpenseService, InputComponent, LoaderComponent, PasswordStrengthComponent, ProgressBarComponent, SelectComponent, SharedHttpService, SkeletonComponent, SnackbarComponent, SnackbarService, StatCardComponent, TooltipDirective, TripDurationPipe, TripService, formatCurrency, getCurrency };
540
- export type { ApiResponse, BadgeVariant, ButtonSize, ButtonVariant, CategorySpending, Currency, DailyExpenses, DatePreset, DialogConfig, DialogFooterButton, DialogSize, ErrorInterface, Expense, ExpenseCategory, ExpenseDTO, HttpOptions, PasswordStrength, ProgressVariant, SnackbarConfig, SnackbarItem, SnackbarType, TooltipPosition, Trip, TripDTO };
558
+ export { AvatarComponent, BadgeComponent, ButtonComponent, CATEGORY_COLORS, CATEGORY_ICONS, CURRENCIES, CardComponent, ConfirmDialogComponent, CurrencyFormatPipe, DateFormatPipe, DialogComponent, EmptyStateComponent, EnvironmentToken, ExpenseService, InputComponent, LoaderComponent, PasswordStrengthComponent, ProgressBarComponent, SelectComponent, SharedHttpService, SkeletonComponent, SnackbarComponent, SnackbarService, StatCardComponent, TRIP_STATUS_COLORS, TooltipDirective, TripDurationPipe, TripService, TripStatusStylePipe, formatCurrency, getCurrency };
559
+ export type { ApiResponse, BadgeVariant, ButtonSize, ButtonVariant, CategorySpending, Currency, DailyExpenses, DatePreset, DialogConfig, DialogFooterButton, DialogSize, ErrorInterface, Expense, ExpenseCategory, ExpenseDTO, HttpOptions, PasswordStrength, ProgressVariant, SnackbarConfig, SnackbarItem, SnackbarType, TooltipPosition, Trip, TripDTO, TripStatusStyle };