voyage-lib 0.0.3 → 0.1.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.
- package/fesm2022/voyage-lib.mjs +80 -4
- package/fesm2022/voyage-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/types/voyage-lib.d.ts +114 -2
package/fesm2022/voyage-lib.mjs
CHANGED
|
@@ -1112,9 +1112,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
1112
1112
|
}] });
|
|
1113
1113
|
|
|
1114
1114
|
const TRIP_STATUS_COLORS = {
|
|
1115
|
-
planning: {
|
|
1116
|
-
|
|
1117
|
-
|
|
1115
|
+
planning: {
|
|
1116
|
+
color: 'var(--color-secondary, #ff6347)',
|
|
1117
|
+
background: 'color-mix(in srgb, var(--color-secondary, #ff6347) 12%, transparent)',
|
|
1118
|
+
},
|
|
1119
|
+
ongoing: {
|
|
1120
|
+
color: 'var(--color-accent, #228b22)',
|
|
1121
|
+
background: 'color-mix(in srgb, var(--color-accent, #228b22) 12%, transparent)',
|
|
1122
|
+
},
|
|
1123
|
+
completed: {
|
|
1124
|
+
color: 'var(--color-muted-foreground, #6b7280)',
|
|
1125
|
+
background: 'color-mix(in srgb, var(--color-muted-foreground, #6b7280) 12%, transparent)',
|
|
1126
|
+
},
|
|
1118
1127
|
};
|
|
1119
1128
|
|
|
1120
1129
|
/**
|
|
@@ -1212,6 +1221,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
1212
1221
|
}]
|
|
1213
1222
|
}] });
|
|
1214
1223
|
|
|
1224
|
+
class TripInviteService {
|
|
1225
|
+
httpService = inject(SharedHttpService);
|
|
1226
|
+
// Creator-side: manage invites/members for a trip
|
|
1227
|
+
createInvite(tripId, email) {
|
|
1228
|
+
return this.httpService.post(`/trips/${tripId}/invites`, { email }).pipe(map(res => this.dtoToInvite(res.data)));
|
|
1229
|
+
}
|
|
1230
|
+
listInvites(tripId) {
|
|
1231
|
+
return this.httpService.get(`/trips/${tripId}/invites`).pipe(map(res => (res?.data ?? []).map(dto => this.dtoToInvite(dto))));
|
|
1232
|
+
}
|
|
1233
|
+
revokeInvite(tripId, inviteId) {
|
|
1234
|
+
return this.httpService.delete(`/trips/${tripId}/invites/${inviteId}`).pipe(map(() => undefined));
|
|
1235
|
+
}
|
|
1236
|
+
listMembers(tripId) {
|
|
1237
|
+
return this.httpService.get(`/trips/${tripId}/members`).pipe(map(res => res?.data ?? []));
|
|
1238
|
+
}
|
|
1239
|
+
removeMember(tripId, userId) {
|
|
1240
|
+
return this.httpService.delete(`/trips/${tripId}/members/${userId}`).pipe(map(() => undefined));
|
|
1241
|
+
}
|
|
1242
|
+
// Invitee-side: respond to invites addressed to the current user
|
|
1243
|
+
listMyInvites() {
|
|
1244
|
+
return this.httpService.get('/invites').pipe(map(res => (res?.data ?? []).map(dto => this.dtoToMyInvite(dto))));
|
|
1245
|
+
}
|
|
1246
|
+
acceptInvite(inviteId) {
|
|
1247
|
+
return this.httpService.post(`/invites/${inviteId}/accept`, {}).pipe(map(() => undefined));
|
|
1248
|
+
}
|
|
1249
|
+
declineInvite(inviteId) {
|
|
1250
|
+
return this.httpService.post(`/invites/${inviteId}/decline`, {}).pipe(map(() => undefined));
|
|
1251
|
+
}
|
|
1252
|
+
dtoToInvite(dto) {
|
|
1253
|
+
return { ...dto, expiresAt: new Date(dto.expiresAt), createdAt: new Date(dto.createdAt) };
|
|
1254
|
+
}
|
|
1255
|
+
dtoToMyInvite(dto) {
|
|
1256
|
+
return {
|
|
1257
|
+
...dto,
|
|
1258
|
+
startDate: new Date(dto.startDate),
|
|
1259
|
+
endDate: new Date(dto.endDate),
|
|
1260
|
+
expiresAt: new Date(dto.expiresAt),
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TripInviteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1264
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TripInviteService, providedIn: 'root' });
|
|
1265
|
+
}
|
|
1266
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TripInviteService, decorators: [{
|
|
1267
|
+
type: Injectable,
|
|
1268
|
+
args: [{
|
|
1269
|
+
providedIn: 'root',
|
|
1270
|
+
}]
|
|
1271
|
+
}] });
|
|
1272
|
+
|
|
1215
1273
|
class ExpenseService {
|
|
1216
1274
|
httpService = inject(SharedHttpService);
|
|
1217
1275
|
getExpensesByTripId(tripId) {
|
|
@@ -1279,6 +1337,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
1279
1337
|
}]
|
|
1280
1338
|
}] });
|
|
1281
1339
|
|
|
1340
|
+
class SettlementService {
|
|
1341
|
+
httpService = inject(SharedHttpService);
|
|
1342
|
+
getSettlement(tripId) {
|
|
1343
|
+
return this.httpService.get(`/trips/${tripId}/settlement`).pipe(map(res => res.data));
|
|
1344
|
+
}
|
|
1345
|
+
getMyBalances() {
|
|
1346
|
+
return this.httpService.get(`/trips/balances/mine`).pipe(map(res => res.data));
|
|
1347
|
+
}
|
|
1348
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SettlementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1349
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SettlementService, providedIn: 'root' });
|
|
1350
|
+
}
|
|
1351
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SettlementService, decorators: [{
|
|
1352
|
+
type: Injectable,
|
|
1353
|
+
args: [{
|
|
1354
|
+
providedIn: 'root',
|
|
1355
|
+
}]
|
|
1356
|
+
}] });
|
|
1357
|
+
|
|
1282
1358
|
const EnvironmentToken = new InjectionToken('environment');
|
|
1283
1359
|
|
|
1284
1360
|
const CURRENCIES = [
|
|
@@ -1309,5 +1385,5 @@ function formatCurrency(amount, currencyCode = 'USD') {
|
|
|
1309
1385
|
* Generated bundle index. Do not edit.
|
|
1310
1386
|
*/
|
|
1311
1387
|
|
|
1312
|
-
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 };
|
|
1388
|
+
export { AvatarComponent, BadgeComponent, ButtonComponent, CATEGORY_COLORS, CATEGORY_ICONS, CURRENCIES, CardComponent, ConfirmDialogComponent, CurrencyFormatPipe, DateFormatPipe, DialogComponent, EmptyStateComponent, EnvironmentToken, ExpenseService, InputComponent, LoaderComponent, PasswordStrengthComponent, ProgressBarComponent, SelectComponent, SettlementService, SharedHttpService, SkeletonComponent, SnackbarComponent, SnackbarService, StatCardComponent, TRIP_STATUS_COLORS, TooltipDirective, TripDurationPipe, TripInviteService, TripService, TripStatusStylePipe, formatCurrency, getCurrency };
|
|
1313
1389
|
//# sourceMappingURL=voyage-lib.mjs.map
|
|
@@ -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/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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"}
|
|
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/trip-invite.service.ts","../../../projects/voyage-lib/src/lib/services/expense.service.ts","../../../projects/voyage-lib/src/lib/services/settlement.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 // Server-computed on read; omitted when the client constructs a Trip for a write payload.\r\n isCreator?: boolean;\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 isCreator?: boolean;\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: {\r\n color: 'var(--color-secondary, #ff6347)',\r\n background: 'color-mix(in srgb, var(--color-secondary, #ff6347) 12%, transparent)',\r\n },\r\n ongoing: {\r\n color: 'var(--color-accent, #228b22)',\r\n background: 'color-mix(in srgb, var(--color-accent, #228b22) 12%, transparent)',\r\n },\r\n completed: {\r\n color: 'var(--color-muted-foreground, #6b7280)',\r\n background: 'color-mix(in srgb, var(--color-muted-foreground, #6b7280) 12%, transparent)',\r\n },\r\n};\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Trip, TripStatusStyle, TRIP_STATUS_COLORS } from '../models/trip.model';\r\n\r\n/**\r\n * Maps a trip status to its display colors.\r\n *\r\n * Usage:\r\n * @let statusStyle = trip.status | vlTripStatusStyle;\r\n * [style.color]=\"statusStyle.color\"\r\n * [style.background-color]=\"statusStyle.background\"\r\n */\r\n@Pipe({ name: 'vlTripStatusStyle', standalone: true, pure: true })\r\nexport class TripStatusStylePipe implements PipeTransform {\r\n transform(status: Trip['status']): TripStatusStyle {\r\n return TRIP_STATUS_COLORS[status];\r\n }\r\n}\r\n","export type ExpenseCategory = 'food' | 'accommodation' | 'transport' | 'activities' | 'souvenirs' | 'other';\r\n\r\n// One participant's share of an expense. Only ever sent on creation\r\n// (see the split editor) — never returned by GET, and not editable after.\r\nexport interface ExpenseSplitInput {\r\n userId: string;\r\n share: number;\r\n}\r\n\r\n// Another participant's share of an expense you paid for.\r\nexport interface OwedShare {\r\n userId: string;\r\n share: number;\r\n}\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 // Who paid, as a user id. Set on creation; not currently editable via update.\r\n paidBy?: string;\r\n // Write-only: how the amount is divided among participants at creation time.\r\n splits?: ExpenseSplitInput[];\r\n // Read-only: the current user's own split of this expense, if they're a\r\n // participant. Undefined if the expense predates splitting or excludes them.\r\n yourShare?: number;\r\n // Read-only: whether the current user is the one who paid.\r\n paidByYou?: boolean;\r\n // Read-only: set only when paidByYou is true — everyone else's share of\r\n // this expense, i.e. what they owe you for it.\r\n owedToYou?: OwedShare[];\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 paidBy?: string;\r\n splits?: ExpenseSplitInput[];\r\n yourShare?: number;\r\n paidByYou?: boolean;\r\n owedToYou?: OwedShare[];\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 { ApiResponse } from '../models/api-response.model';\r\nimport { MyInvite, MyInviteDTO, TripInvite, TripInviteDTO, TripMember } from '../models/trip-invite.model';\r\nimport { SharedHttpService } from './http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TripInviteService {\r\n private readonly httpService = inject(SharedHttpService);\r\n\r\n // Creator-side: manage invites/members for a trip\r\n\r\n createInvite(tripId: string, email: string): Observable<TripInvite> {\r\n return this.httpService.post<ApiResponse<TripInviteDTO>>(`/trips/${tripId}/invites`, { email }).pipe(\r\n map(res => this.dtoToInvite(res.data))\r\n );\r\n }\r\n\r\n listInvites(tripId: string): Observable<TripInvite[]> {\r\n return this.httpService.get<ApiResponse<TripInviteDTO[]>>(`/trips/${tripId}/invites`).pipe(\r\n map(res => (res?.data ?? []).map(dto => this.dtoToInvite(dto)))\r\n );\r\n }\r\n\r\n revokeInvite(tripId: string, inviteId: string): Observable<void> {\r\n return this.httpService.delete<ApiResponse<null>>(`/trips/${tripId}/invites/${inviteId}`).pipe(\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n listMembers(tripId: string): Observable<TripMember[]> {\r\n return this.httpService.get<ApiResponse<TripMember[]>>(`/trips/${tripId}/members`).pipe(\r\n map(res => res?.data ?? [])\r\n );\r\n }\r\n\r\n removeMember(tripId: string, userId: string): Observable<void> {\r\n return this.httpService.delete<ApiResponse<null>>(`/trips/${tripId}/members/${userId}`).pipe(\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n // Invitee-side: respond to invites addressed to the current user\r\n\r\n listMyInvites(): Observable<MyInvite[]> {\r\n return this.httpService.get<ApiResponse<MyInviteDTO[]>>('/invites').pipe(\r\n map(res => (res?.data ?? []).map(dto => this.dtoToMyInvite(dto)))\r\n );\r\n }\r\n\r\n acceptInvite(inviteId: string): Observable<void> {\r\n return this.httpService.post<ApiResponse<null>>(`/invites/${inviteId}/accept`, {}).pipe(\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n declineInvite(inviteId: string): Observable<void> {\r\n return this.httpService.post<ApiResponse<null>>(`/invites/${inviteId}/decline`, {}).pipe(\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n private dtoToInvite(dto: TripInviteDTO): TripInvite {\r\n return { ...dto, expiresAt: new Date(dto.expiresAt), createdAt: new Date(dto.createdAt) };\r\n }\r\n\r\n private dtoToMyInvite(dto: MyInviteDTO): MyInvite {\r\n return {\r\n ...dto,\r\n startDate: new Date(dto.startDate),\r\n endDate: new Date(dto.endDate),\r\n expiresAt: new Date(dto.expiresAt),\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 { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ApiResponse } from '../models/api-response.model';\r\nimport { Settlement, TripBalance } from '../models/settlement.model';\r\nimport { SharedHttpService } from './http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SettlementService {\r\n private readonly httpService = inject(SharedHttpService);\r\n\r\n getSettlement(tripId: string): Observable<Settlement> {\r\n return this.httpService.get<ApiResponse<Settlement>>(`/trips/${tripId}/settlement`).pipe(\r\n map(res => res.data)\r\n );\r\n }\r\n\r\n getMyBalances(): Observable<TripBalance[]> {\r\n return this.httpService.get<ApiResponse<TripBalance[]>>(`/trips/balances/mine`).pipe(\r\n map(res => res.data)\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/trip-invite.service';\r\nexport * from './services/expense.service';\r\nexport * from './services/settlement.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
package/types/voyage-lib.d.ts
CHANGED
|
@@ -411,6 +411,7 @@ interface Trip {
|
|
|
411
411
|
spent: number;
|
|
412
412
|
status: 'planning' | 'ongoing' | 'completed';
|
|
413
413
|
currency: string;
|
|
414
|
+
isCreator?: boolean;
|
|
414
415
|
}
|
|
415
416
|
interface TripDTO {
|
|
416
417
|
id: string;
|
|
@@ -423,6 +424,7 @@ interface TripDTO {
|
|
|
423
424
|
spent: number;
|
|
424
425
|
status: 'planning' | 'ongoing' | 'completed';
|
|
425
426
|
currency: string;
|
|
427
|
+
isCreator?: boolean;
|
|
426
428
|
}
|
|
427
429
|
interface TripStatusStyle {
|
|
428
430
|
color: string;
|
|
@@ -444,7 +446,60 @@ declare class TripStatusStylePipe implements PipeTransform {
|
|
|
444
446
|
static ɵpipe: _angular_core.ɵɵPipeDeclaration<TripStatusStylePipe, "vlTripStatusStyle", true>;
|
|
445
447
|
}
|
|
446
448
|
|
|
449
|
+
type InviteStatus = 'pending' | 'accepted' | 'declined' | 'revoked' | 'expired';
|
|
450
|
+
interface TripInvite {
|
|
451
|
+
id: string;
|
|
452
|
+
tripId: string;
|
|
453
|
+
email: string;
|
|
454
|
+
status: InviteStatus;
|
|
455
|
+
expiresAt: Date;
|
|
456
|
+
createdAt: Date;
|
|
457
|
+
}
|
|
458
|
+
interface TripInviteDTO {
|
|
459
|
+
id: string;
|
|
460
|
+
tripId: string;
|
|
461
|
+
email: string;
|
|
462
|
+
status: InviteStatus;
|
|
463
|
+
expiresAt: string;
|
|
464
|
+
createdAt: string;
|
|
465
|
+
}
|
|
466
|
+
interface MyInvite {
|
|
467
|
+
id: string;
|
|
468
|
+
tripId: string;
|
|
469
|
+
tripName: string;
|
|
470
|
+
destination: string;
|
|
471
|
+
country: string;
|
|
472
|
+
startDate: Date;
|
|
473
|
+
endDate: Date;
|
|
474
|
+
status: InviteStatus;
|
|
475
|
+
expiresAt: Date;
|
|
476
|
+
}
|
|
477
|
+
interface MyInviteDTO {
|
|
478
|
+
id: string;
|
|
479
|
+
tripId: string;
|
|
480
|
+
tripName: string;
|
|
481
|
+
destination: string;
|
|
482
|
+
country: string;
|
|
483
|
+
startDate: string;
|
|
484
|
+
endDate: string;
|
|
485
|
+
status: InviteStatus;
|
|
486
|
+
expiresAt: string;
|
|
487
|
+
}
|
|
488
|
+
interface TripMember {
|
|
489
|
+
userId: string;
|
|
490
|
+
email: string;
|
|
491
|
+
displayName: string;
|
|
492
|
+
}
|
|
493
|
+
|
|
447
494
|
type ExpenseCategory = 'food' | 'accommodation' | 'transport' | 'activities' | 'souvenirs' | 'other';
|
|
495
|
+
interface ExpenseSplitInput {
|
|
496
|
+
userId: string;
|
|
497
|
+
share: number;
|
|
498
|
+
}
|
|
499
|
+
interface OwedShare {
|
|
500
|
+
userId: string;
|
|
501
|
+
share: number;
|
|
502
|
+
}
|
|
448
503
|
interface Expense {
|
|
449
504
|
id: string;
|
|
450
505
|
tripId: string;
|
|
@@ -452,6 +507,11 @@ interface Expense {
|
|
|
452
507
|
amount: number;
|
|
453
508
|
description: string;
|
|
454
509
|
date: Date;
|
|
510
|
+
paidBy?: string;
|
|
511
|
+
splits?: ExpenseSplitInput[];
|
|
512
|
+
yourShare?: number;
|
|
513
|
+
paidByYou?: boolean;
|
|
514
|
+
owedToYou?: OwedShare[];
|
|
455
515
|
}
|
|
456
516
|
interface ExpenseDTO {
|
|
457
517
|
id: string;
|
|
@@ -460,6 +520,11 @@ interface ExpenseDTO {
|
|
|
460
520
|
amount: number;
|
|
461
521
|
description: string;
|
|
462
522
|
date: string;
|
|
523
|
+
paidBy?: string;
|
|
524
|
+
splits?: ExpenseSplitInput[];
|
|
525
|
+
yourShare?: number;
|
|
526
|
+
paidByYou?: boolean;
|
|
527
|
+
owedToYou?: OwedShare[];
|
|
463
528
|
}
|
|
464
529
|
interface CategorySpending {
|
|
465
530
|
category: ExpenseCategory;
|
|
@@ -475,6 +540,29 @@ interface DailyExpenses {
|
|
|
475
540
|
declare const CATEGORY_ICONS: Record<ExpenseCategory, string>;
|
|
476
541
|
declare const CATEGORY_COLORS: Record<ExpenseCategory, string>;
|
|
477
542
|
|
|
543
|
+
interface SettlementBalance {
|
|
544
|
+
userId: string;
|
|
545
|
+
email: string;
|
|
546
|
+
displayName: string;
|
|
547
|
+
paid: number;
|
|
548
|
+
owes: number;
|
|
549
|
+
net: number;
|
|
550
|
+
isYou: boolean;
|
|
551
|
+
}
|
|
552
|
+
interface SettlementTransaction {
|
|
553
|
+
from: string;
|
|
554
|
+
to: string;
|
|
555
|
+
amount: number;
|
|
556
|
+
}
|
|
557
|
+
interface Settlement {
|
|
558
|
+
balances: SettlementBalance[];
|
|
559
|
+
transactions: SettlementTransaction[];
|
|
560
|
+
}
|
|
561
|
+
interface TripBalance {
|
|
562
|
+
tripId: string;
|
|
563
|
+
net: number;
|
|
564
|
+
}
|
|
565
|
+
|
|
478
566
|
interface ErrorInterface {
|
|
479
567
|
success: false;
|
|
480
568
|
message: string;
|
|
@@ -526,6 +614,22 @@ declare class TripService {
|
|
|
526
614
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TripService>;
|
|
527
615
|
}
|
|
528
616
|
|
|
617
|
+
declare class TripInviteService {
|
|
618
|
+
private readonly httpService;
|
|
619
|
+
createInvite(tripId: string, email: string): Observable<TripInvite>;
|
|
620
|
+
listInvites(tripId: string): Observable<TripInvite[]>;
|
|
621
|
+
revokeInvite(tripId: string, inviteId: string): Observable<void>;
|
|
622
|
+
listMembers(tripId: string): Observable<TripMember[]>;
|
|
623
|
+
removeMember(tripId: string, userId: string): Observable<void>;
|
|
624
|
+
listMyInvites(): Observable<MyInvite[]>;
|
|
625
|
+
acceptInvite(inviteId: string): Observable<void>;
|
|
626
|
+
declineInvite(inviteId: string): Observable<void>;
|
|
627
|
+
private dtoToInvite;
|
|
628
|
+
private dtoToMyInvite;
|
|
629
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TripInviteService, never>;
|
|
630
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TripInviteService>;
|
|
631
|
+
}
|
|
632
|
+
|
|
529
633
|
declare class ExpenseService {
|
|
530
634
|
private readonly httpService;
|
|
531
635
|
getExpensesByTripId(tripId: string): Observable<Expense[]>;
|
|
@@ -540,6 +644,14 @@ declare class ExpenseService {
|
|
|
540
644
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExpenseService>;
|
|
541
645
|
}
|
|
542
646
|
|
|
647
|
+
declare class SettlementService {
|
|
648
|
+
private readonly httpService;
|
|
649
|
+
getSettlement(tripId: string): Observable<Settlement>;
|
|
650
|
+
getMyBalances(): Observable<TripBalance[]>;
|
|
651
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettlementService, never>;
|
|
652
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SettlementService>;
|
|
653
|
+
}
|
|
654
|
+
|
|
543
655
|
interface IEnvironment {
|
|
544
656
|
app: string;
|
|
545
657
|
apiUrl: string;
|
|
@@ -555,5 +667,5 @@ declare const CURRENCIES: Currency[];
|
|
|
555
667
|
declare function getCurrency(code: string): Currency | undefined;
|
|
556
668
|
declare function formatCurrency(amount: number, currencyCode?: string): string;
|
|
557
669
|
|
|
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 };
|
|
670
|
+
export { AvatarComponent, BadgeComponent, ButtonComponent, CATEGORY_COLORS, CATEGORY_ICONS, CURRENCIES, CardComponent, ConfirmDialogComponent, CurrencyFormatPipe, DateFormatPipe, DialogComponent, EmptyStateComponent, EnvironmentToken, ExpenseService, InputComponent, LoaderComponent, PasswordStrengthComponent, ProgressBarComponent, SelectComponent, SettlementService, SharedHttpService, SkeletonComponent, SnackbarComponent, SnackbarService, StatCardComponent, TRIP_STATUS_COLORS, TooltipDirective, TripDurationPipe, TripInviteService, TripService, TripStatusStylePipe, formatCurrency, getCurrency };
|
|
671
|
+
export type { ApiResponse, BadgeVariant, ButtonSize, ButtonVariant, CategorySpending, Currency, DailyExpenses, DatePreset, DialogConfig, DialogFooterButton, DialogSize, ErrorInterface, Expense, ExpenseCategory, ExpenseDTO, ExpenseSplitInput, HttpOptions, InviteStatus, MyInvite, MyInviteDTO, OwedShare, PasswordStrength, ProgressVariant, Settlement, SettlementBalance, SettlementTransaction, SnackbarConfig, SnackbarItem, SnackbarType, TooltipPosition, Trip, TripBalance, TripDTO, TripInvite, TripInviteDTO, TripMember, TripStatusStyle };
|