voyage-lib 0.0.1

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.
@@ -0,0 +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 { DialogSize } from '../../models/dialog.model';\n\n@Component({\n selector: 'vl-dialog',\n standalone: true,\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 closed = output<void>();\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 <ng-content select=\"[dialog-footer]\" />\n </div>\n }\n\n </div>\n </div>\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { DialogComponent } from '../dialog/dialog.component';\nimport { ButtonComponent } from '../button/button.component';\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, ButtonComponent],\n template: `\n <vl-dialog\n [isOpen]=\"isOpen()\"\n [title]=\"title()\"\n [subtitle]=\"subtitle()\"\n size=\"sm\"\n [hasFooter]=\"true\"\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\n <div dialog-footer class=\"vl-confirm-footer\">\n <vl-button variant=\"ghost\" [disabled]=\"loading()\" (click)=\"cancelled.emit()\">\n {{ cancelLabel() }}\n </vl-button>\n <vl-button [variant]=\"confirmVariant()\" [loading]=\"loading()\" (click)=\"confirmed.emit()\">\n {{ confirmLabel() }}\n </vl-button>\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 .vl-confirm-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 0.75rem;\n padding: 1rem 1.5rem;\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","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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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "voyage-lib",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^21.2.0",
6
+ "@angular/core": "^21.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/voyage-lib.mjs",
13
+ "typings": "types/voyage-lib.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./types/voyage-lib.d.ts",
20
+ "default": "./fesm2022/voyage-lib.mjs"
21
+ }
22
+ }
23
+ }