import * as _angular_core from '@angular/core'; import { OnDestroy } from '@angular/core'; import * as _camp2gether_c2g_ui_presets from '@camp2gether/c2g-ui/presets'; import { SelectOption, C2gDropdownMenuItem, C2gAvatarBadge } from '@camp2gether/c2g-ui'; import { AnimationOptions } from 'ngx-lottie'; type C2gPackingVisibility = 'shared' | 'personal' | 'private'; type C2gPackingAssignmentStatus = 'assigned' | 'packed' | 'confirmed'; interface C2gPackingListAssignment { itemId: string; memberId: string; memberName?: string; packedBy?: string; packedByName?: string; status: C2gPackingAssignmentStatus; quantity?: number; } interface C2gPackingItemAssignedEvent { itemId: string; memberId: string; assigned: boolean; quantity?: number; } interface C2gPackingListItem { id: string; name: string; category: string; essential?: boolean; visibility: C2gPackingVisibility; quantity?: number; weightKg?: number; packedVolumeL?: number; priority?: string; reason?: string; weather?: boolean; hint?: string; confirmed?: boolean; createdBy?: string; privateOwnerVisible?: boolean; assignments?: C2gPackingListAssignment[]; /** How many times this item was removed (1-2 = suggested again, ≥3 = suppressed). */ removedCount?: number; /** True when the item was removed 1-2× and is being re-suggested. */ suggested?: boolean; } type C2gPackingGapSeverity = 'critical' | 'warning'; type C2gPackingGapType = 'missing_category' | 'missing_dependency'; interface C2gPackingGap { type: C2gPackingGapType; severity: C2gPackingGapSeverity; /** The ItemKey that triggered the gap (empty for category gaps). */ item_key: string; /** Keys of the items that are absent. */ missing_keys: string[]; /** English fallback message when no i18n key is available. */ message: string; } interface C2gPackingListMember { id: string; name: string; initials?: string; color?: string; type?: 'adult' | 'child' | 'baby' | 'pet'; hasAccount?: boolean; } interface C2gPackingCategoryInfo { key: string; labelKey: string; label?: string; icon: string; } interface C2gPackingListFilterState { query: string; visibility: 'all' | C2gPackingVisibility; essentialsOnly: boolean; memberIds: string[]; } interface C2gPackingListMemberStatus { memberId: string; memberName: string; initials?: string; checked: boolean; canToggle: boolean; } interface C2gPackingListMemberOverlayRequest { itemId: string; itemName: string; members: C2gPackingListMemberStatus[]; } interface C2gPackingListLabels { searchPlaceholderKey: string; essentialsOnlyKey: string; showAllVisibilityKey: string; sharedVisibilityKey: string; personalVisibilityKey: string; privateVisibilityKey: string; privateSectionTitleKey: string; emptyStateKey: string; categoryStatsKey: string; deleteConfirmKey: string; addItemKey?: string; createItemKey?: string; itemNameKey?: string; categoryKey?: string; visibilityKey?: string; essentialKey?: string; weatherTagKey?: string; quantityKey?: string; weightKey?: string; volumeKey?: string; hintKey?: string; cancelKey?: string; createKey?: string; suggestedBadgeKey?: string; suggestedBadge2xKey?: string; suggestedHint1xKey?: string; suggestedHint2xKey?: string; suggestedTooltip1xKey?: string; suggestedTooltip2xKey?: string; } declare const DEFAULT_PACKING_LIST_LABEL_KEYS: C2gPackingListLabels; interface C2gPackingListPermissions { isOrganizer: boolean; isGuest: boolean; isSolo: boolean; readOnly: boolean; canManageAssignments?: boolean; canMembersManageSharedItems?: boolean; canMembersAddSharedItems?: boolean; } /** * Feature flags (like GridOptions booleans). * Applied globally to all rows. */ interface C2gPackingListFeatures { search?: boolean; filters?: boolean; stats?: boolean; create?: boolean; editItem?: boolean; deleteItem?: boolean; assignments?: boolean; privateSection?: boolean; expandAllOnLoad?: boolean; } /** * Column definition - generic over host-defined field type. * Host specifies which fields are available via TField generic. */ interface C2gPackingListColumnDef { field: TField; visible?: boolean; editable?: boolean; sortable?: boolean; labelKey?: string; } /** * Sort state - generic over host-defined field type. */ type C2gPackingSortDir = 'asc' | 'desc'; interface C2gPackingListSortState { field: TField; dir: C2gPackingSortDir; } /** * Custom row action - host can trigger these via (rowActionTriggered). */ interface C2gPackingListRowAction { id: string; labelKey: string; icon?: string; showWhen?: (item: C2gPackingListItem, permissions: C2gPackingListPermissions) => boolean; } /** * Main config object - generic over host-defined field type. * Like AgGrid GridOptions. */ interface C2gPackingListConfig { features?: C2gPackingListFeatures; columnDefs?: C2gPackingListColumnDef[]; sort?: C2gPackingListSortState; rowActions?: C2gPackingListRowAction[]; initialFilter?: Partial; defaultExpandedCount?: number; } declare const DEFAULT_PACKING_LIST_CONFIG: C2gPackingListConfig; declare const C2G_PACKING_CATEGORY_INFO: Record; declare function resolvePackingCategory(categoryKey: string): C2gPackingCategoryInfo; declare class PackingListComponent { readonly items: _angular_core.InputSignal; readonly gaps: _angular_core.InputSignal; readonly members: _angular_core.InputSignal; readonly currentUserId: _angular_core.InputSignal; readonly permissions: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly categories: _angular_core.InputSignal; readonly config: _angular_core.InputSignal>; readonly gapBannerCollapsed: _angular_core.WritableSignal; readonly criticalGaps: _angular_core.Signal; readonly warningGaps: _angular_core.Signal; readonly hasAnyGaps: _angular_core.Signal; toggleGapBanner(): void; togglePersonalItemsView(): void; readonly showPrivateAsSeparateList: _angular_core.InputSignal; readonly showStats: _angular_core.InputSignal; readonly showAddButton: _angular_core.InputSignal; readonly itemChecked: _angular_core.OutputEmitterRef<{ itemId: string; checked: boolean; }>; readonly itemAssigned: _angular_core.OutputEmitterRef; readonly itemDeleted: _angular_core.OutputEmitterRef; readonly itemEditRequested: _angular_core.OutputEmitterRef; readonly itemCreated: _angular_core.OutputEmitterRef>; readonly personalItemToggled: _angular_core.OutputEmitterRef<{ itemId: string; memberId: string; checked: boolean; }>; readonly memberOverlayRequested: _angular_core.OutputEmitterRef; readonly externalMemberViewRequested: _angular_core.OutputEmitterRef; readonly filterChanged: _angular_core.OutputEmitterRef; readonly sortChanged: _angular_core.OutputEmitterRef>; readonly rowActionTriggered: _angular_core.OutputEmitterRef<{ actionId: string; item: C2gPackingListItem; }>; readonly mergedConfig: _angular_core.Signal>; readonly filter: _angular_core.WritableSignal; readonly showAllPersonalItems: _angular_core.WritableSignal; readonly expandedCategories: _angular_core.WritableSignal>; readonly hasUserToggled: _angular_core.WritableSignal; readonly filteredItems: _angular_core.Signal; readonly categoryGroups: _angular_core.Signal<{ key: string; items: C2gPackingListItem[]; }[]>; constructor(); onFilterChange(next: C2gPackingListFilterState): void; onExternalMemberViewRequested(): void; onItemCreated(item: Partial): void; isCategoryExpanded(category: string): boolean; toggleCategory(category: string): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration, never>; static ɵcmp: _angular_core.ɵɵComponentDeclaration, "c2g-packing-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "gaps": { "alias": "gaps"; "required": false; "isSignal": true; }; "members": { "alias": "members"; "required": true; "isSignal": true; }; "currentUserId": { "alias": "currentUserId"; "required": true; "isSignal": true; }; "permissions": { "alias": "permissions"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "showPrivateAsSeparateList": { "alias": "showPrivateAsSeparateList"; "required": false; "isSignal": true; }; "showStats": { "alias": "showStats"; "required": false; "isSignal": true; }; "showAddButton": { "alias": "showAddButton"; "required": false; "isSignal": true; }; }, { "itemChecked": "itemChecked"; "itemAssigned": "itemAssigned"; "itemDeleted": "itemDeleted"; "itemEditRequested": "itemEditRequested"; "itemCreated": "itemCreated"; "personalItemToggled": "personalItemToggled"; "memberOverlayRequested": "memberOverlayRequested"; "externalMemberViewRequested": "externalMemberViewRequested"; "filterChanged": "filterChanged"; "sortChanged": "sortChanged"; "rowActionTriggered": "rowActionTriggered"; }, never, never, true, never>; } declare class PackingListFiltersComponent { readonly filter: _angular_core.InputSignal; readonly members: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly disabled: _angular_core.InputSignal; readonly filterChange: _angular_core.OutputEmitterRef; readonly overlayRequested: _angular_core.OutputEmitterRef; readonly membersPanelOpen: _angular_core.WritableSignal; readonly memberQuery: _angular_core.WritableSignal; readonly visibilityOptions: _angular_core.Signal[]>; readonly memberSelectionLabel: _angular_core.Signal; readonly filteredMembers: _angular_core.Signal; onQueryChange(value: string): void; onVisibilityChange(value: C2gPackingListFilterState['visibility'] | null): void; onEssentialsOnlyToggle(checked: boolean): void; toggleMembersPanel(): void; onMemberSearch(event: Event): void; isMemberSelected(memberId: string): boolean; toggleMember(memberId: string): void; clearMemberSelection(): void; selectAllMembers(): void; requestExternalOverlay(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackingListStatsComponent { readonly items: _angular_core.InputSignal; readonly stats: _angular_core.Signal<{ total: number; packed: number; essential: number; }>; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackingListCategoryComponent { readonly categoryKey: _angular_core.InputSignal; readonly items: _angular_core.InputSignal; readonly members: _angular_core.InputSignal; readonly selectedMemberIds: _angular_core.InputSignal; readonly currentUserId: _angular_core.InputSignal; readonly permissions: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly expanded: _angular_core.InputSignal; readonly toggle: _angular_core.OutputEmitterRef; readonly itemChecked: _angular_core.OutputEmitterRef<{ itemId: string; checked: boolean; }>; readonly itemAssigned: _angular_core.OutputEmitterRef; readonly itemDeleted: _angular_core.OutputEmitterRef; readonly itemEditRequested: _angular_core.OutputEmitterRef; readonly personalItemToggled: _angular_core.OutputEmitterRef<{ itemId: string; memberId: string; checked: boolean; }>; readonly memberOverlayRequested: _angular_core.OutputEmitterRef; readonly category: _angular_core.Signal<_camp2gether_c2g_ui_presets.C2gPackingCategoryInfo>; readonly stats: _angular_core.Signal<{ total: number; essential: number; packed: number; }>; onToggle(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackingListItemComponent { readonly item: _angular_core.InputSignal; readonly members: _angular_core.InputSignal; readonly currentUserId: _angular_core.InputSignal; readonly permissions: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly selectedMemberIds: _angular_core.InputSignal; readonly itemChecked: _angular_core.OutputEmitterRef<{ itemId: string; checked: boolean; }>; readonly itemAssigned: _angular_core.OutputEmitterRef; readonly itemDeleted: _angular_core.OutputEmitterRef; readonly itemEditRequested: _angular_core.OutputEmitterRef; readonly personalItemToggled: _angular_core.OutputEmitterRef<{ itemId: string; memberId: string; checked: boolean; }>; readonly memberOverlayRequested: _angular_core.OutputEmitterRef; readonly overlayOpen: _angular_core.WritableSignal; readonly overlaySearch: _angular_core.WritableSignal; readonly quantityPickerOpen: _angular_core.WritableSignal; readonly quantityPickerValue: _angular_core.WritableSignal; readonly delegateDialogOpen: _angular_core.WritableSignal; readonly delegateMemberId: _angular_core.WritableSignal; readonly delegateQuantity: _angular_core.WritableSignal; readonly avatarDialogOpen: _angular_core.WritableSignal; readonly avatarDialogMemberId: _angular_core.WritableSignal; readonly avatarDialogQuantity: _angular_core.WritableSignal; readonly personalAssignDialogOpen: _angular_core.WritableSignal; readonly personalAssignSearch: _angular_core.WritableSignal; readonly personalAssignMemberId: _angular_core.WritableSignal; readonly applicableMembers: _angular_core.Signal; readonly visibleMembers: _angular_core.Signal; readonly packedCount: _angular_core.Signal; readonly isPacked: _angular_core.Signal; readonly requiredQuantity: _angular_core.Signal; readonly checkedMembers: _angular_core.Signal; readonly personalAssignedMembers: _angular_core.Signal; readonly missingMembers: _angular_core.Signal; readonly checkedPreview: _angular_core.Signal; readonly hiddenCheckedCount: _angular_core.Signal; readonly personalAssignedPreview: _angular_core.Signal; readonly personalHiddenAssignedCount: _angular_core.Signal; readonly missingPreview: _angular_core.Signal; readonly hiddenMissingCount: _angular_core.Signal; readonly currentUserMember: _angular_core.Signal; readonly isItemOwner: _angular_core.Signal; readonly canEditOrDeleteItem: _angular_core.Signal; readonly canShowAssignCta: _angular_core.Signal; readonly menuItems: _angular_core.Signal; onMenuItemSelected(item: C2gDropdownMenuItem): void; readonly sharedAssignmentsCount: _angular_core.Signal; readonly sharedTotalAssignedCount: _angular_core.Signal; readonly sharedMissingSlots: _angular_core.Signal; readonly selfAssignableMaxQuantity: _angular_core.Signal; readonly delegateCandidates: _angular_core.Signal; readonly selfAssignedToShared: _angular_core.Signal; readonly isPlanner: _angular_core.Signal; readonly joinBtnLabel: _angular_core.Signal<"+ Eintragen" | "Menge anpassen" | "Meine Menge anpassen">; readonly pickerLabel: _angular_core.Signal<"Wie viel wird mitgenommen?" | "Wie viel nimmst du mit?">; readonly delegatePickerLabel: _angular_core.Signal; readonly canSelfAssignShared: _angular_core.Signal; readonly selectedDelegateMember: _angular_core.Signal; readonly canManagePersonalAssignments: _angular_core.Signal; readonly personalAssignableMembers: _angular_core.Signal; readonly filteredPersonalAssignableMembers: _angular_core.Signal; readonly selectedPersonalAssignMember: _angular_core.Signal; readonly personalDenominator: _angular_core.Signal; readonly completionText: _angular_core.Signal; readonly progressNumerator: _angular_core.Signal; readonly progressDenominator: _angular_core.Signal; readonly progressRatioText: _angular_core.Signal; readonly quantityBadge: _angular_core.Signal<{ readonly value: `${number}/${number}`; readonly tone: "warning" | "danger" | "success"; } | null>; readonly progressPercentage: _angular_core.Signal; readonly progressTone: _angular_core.Signal<"warning" | "danger" | "success">; readonly needsPackLabel: _angular_core.Signal; readonly overlayMembers: _angular_core.Signal; readonly filteredOverlayMembers: _angular_core.Signal; readonly personalStatusBadges: _angular_core.Signal<{ key: string; text: string; tone: "success" | "warning"; dotColor: string; }[]>; readonly sharedCountChips: _angular_core.Signal<{ key: string; text: string; tone: "success" | "warning"; }[]>; memberAssignmentStatus(memberId: string): 'confirmed' | 'packed' | 'assigned' | 'none'; memberAssignedQuantity(memberId: string): number; memberRingTone(memberId: string): 'custom'; memberRingColor(memberId: string): string; memberBadge(memberId: string): C2gAvatarBadge | null; memberBackground(member: C2gPackingListMember): string; isMemberChecked(memberId: string): boolean; hasAnyAssignment(memberId: string): boolean; canPackForMember(memberId: string): boolean; isAssignmentChecked(memberId: string): boolean; isSharedAssigned(memberId: string): boolean; canAssignShared(memberId: string): boolean; onSoloToggle(checked: boolean): void; onPrivateToggle(checked: boolean): void; onSharedToggle(memberId: string, quantity?: number): void; private setSharedAssignment; private setPersonalAssignment; onPersonalToggle(memberId: string): void; deleteItem(): void; requestEdit(): void; requestAssign(): void; openPersonalAssignDialog(): void; closePersonalAssignDialog(): void; onPersonalAssignSearch(event: Event): void; selectPersonalAssignMember(memberId: string): void; confirmPersonalAssignment(): void; onPersonalAvatarClick(memberId: string): void; onAssignMeToggle(): void; openDelegateDialog(): void; closeDelegateDialog(): void; onDelegateMemberChange(event: Event): void; increaseDelegateQuantity(): void; decreaseDelegateQuantity(): void; confirmDelegateAssignment(): void; onSelfPackToggle(): void; onSharedAvatarClick(memberId: string): void; closeAvatarDialog(): void; increaseAvatarDialogQuantity(): void; decreaseAvatarDialogQuantity(): void; confirmAvatarDialogUpdate(): void; increaseSelfAssignQuantity(): void; decreaseSelfAssignQuantity(): void; cancelSelfAssignQuantity(): void; confirmSelfAssignQuantity(): void; openOverlay(): void; closeOverlay(): void; onOverlaySearch(event: Event): void; toggleFromOverlay(memberId: string): void; privateItemOwnerLabel(): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackingListItemCreateComponent { readonly permissions: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly readOnly: _angular_core.InputSignal; readonly categories: _angular_core.InputSignal; readonly itemCreated: _angular_core.OutputEmitterRef>; readonly dialogOpen: _angular_core.WritableSignal; readonly formData: _angular_core.WritableSignal<{ name: string; category: string; visibility: C2gPackingVisibility; essential: boolean; quantity: number; weightKg: number | undefined; packedVolumeL: number | undefined; hint: string; }>; readonly availableVisibilities: _angular_core.Signal<{ value: C2gPackingVisibility; label: string; }[]>; readonly categoryOptions: _angular_core.Signal<{ value: string; label: string; }[]>; openDialog(): void; closeDialog(): void; resetForm(): void; submit(): void; updateVisibility(visibility: C2gPackingVisibility): void; getCategoryLabel(categoryKey: string): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackingListPrivateListComponent { readonly items: _angular_core.InputSignal; readonly members: _angular_core.InputSignal; readonly selectedMemberIds: _angular_core.InputSignal; readonly currentUserId: _angular_core.InputSignal; readonly permissions: _angular_core.InputSignal; readonly labels: _angular_core.InputSignal; readonly privateItems: _angular_core.Signal; readonly itemChecked: _angular_core.OutputEmitterRef<{ itemId: string; checked: boolean; }>; readonly itemAssigned: _angular_core.OutputEmitterRef; readonly itemDeleted: _angular_core.OutputEmitterRef; readonly itemEditRequested: _angular_core.OutputEmitterRef; readonly personalItemToggled: _angular_core.OutputEmitterRef<{ itemId: string; memberId: string; checked: boolean; }>; readonly memberOverlayRequested: _angular_core.OutputEmitterRef; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface WeatherDay { date: string; icon: string; description: string; temperature: { min: number; max: number; }; } declare class WeatherWidgetComponent { readonly currentDay: _angular_core.InputSignal; readonly forecastSlots: _angular_core.InputSignal; readonly destination: _angular_core.InputSignal; readonly dates: _angular_core.InputSignal<{ from: string; to: string; } | null>; getWeatherIcon(icon: string): string; formatDate(date: string): string; formatShortDate(date: string): string; getSlotLabel(index: number, total: number): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare const WEATHER_ICON_MAP: Record; /** * Resolves a backend weather icon string to an emoji. * @param icon Raw icon string from the API (e.g. "partly-cloudy") * @param fallback Emoji to return for unrecognised keys. Defaults to '🌤️'. * Pass `icon` as fallback to preserve the raw string (useful * for debugging in the full weather widget). */ declare function resolveWeatherIcon(icon: string, fallback?: string): string; type MemberRoleKey = 'organizer' | 'treasurer' | 'transport' | 'cook' | 'firstaid' | 'equipment' | null | undefined; interface C2gMember { id: string; name: string; avatarInitials: string; type: string; isCurrentUser?: boolean; isRegistered?: boolean; roleKey?: MemberRoleKey; } declare class MemberTagsComponent { readonly isCurrentUser: _angular_core.InputSignal; readonly isRegistered: _angular_core.InputSignal; readonly roleKey: _angular_core.InputSignal; getRoleLabel(roleKey: MemberRoleKey): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface ActionMenuItem { key: string; label: string; icon?: string; variant?: 'default' | 'danger'; disabled?: boolean; } declare class MemberItemComponent { readonly member: _angular_core.InputSignal; readonly remove: _angular_core.OutputEmitterRef; readonly invite: _angular_core.OutputEmitterRef; readonly edit: _angular_core.OutputEmitterRef; readonly avatarBackgroundColor: _angular_core.Signal<"#e8f0ea" | "#1a6044">; readonly avatarTextColor: _angular_core.Signal<"#1a6044" | "#ffffff">; readonly menuItems: _angular_core.Signal; onMenuItemSelected(item: ActionMenuItem): void; getMemberTypeLabel(type: string): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class MemberListComponent { readonly members: _angular_core.InputSignal; readonly memberRemove: _angular_core.OutputEmitterRef; readonly memberInvite: _angular_core.OutputEmitterRef; readonly memberEdit: _angular_core.OutputEmitterRef; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class MemberPanelComponent { readonly members: _angular_core.InputSignal; readonly memberRemove: _angular_core.OutputEmitterRef; readonly memberInvite: _angular_core.OutputEmitterRef; readonly memberEdit: _angular_core.OutputEmitterRef; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class ActionMenuComponent { readonly items: _angular_core.InputSignal; readonly triggerLabel: _angular_core.InputSignal; readonly ariaLabel: _angular_core.InputSignal; readonly itemSelected: _angular_core.OutputEmitterRef; select(item: ActionMenuItem): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface C2gMenuItem { key: string; label: string; icon?: string; disabled?: boolean; variant?: 'default' | 'danger'; children?: C2gMenuItem[]; } interface C2gMenuSelection { item: C2gMenuItem; parent?: C2gMenuItem; } interface C2gSubmenuItem { key: string; label: string; href?: string; disabled?: boolean; active?: boolean; } interface C2gMainNavigationItem { key: string; label: string; href?: string; disabled?: boolean; active?: boolean; subItems?: C2gSubmenuItem[]; } interface C2gSubmenuSelection { main: C2gMainNavigationItem; sub: C2gSubmenuItem; } declare class MenuComponent { readonly items: _angular_core.InputSignal; readonly triggerLabel: _angular_core.InputSignal; readonly triggerAriaLabel: _angular_core.InputSignal; readonly itemSelected: _angular_core.OutputEmitterRef; readonly flatItems: _angular_core.Signal; select(item: C2gMenuItem): void; selectChild(parent: C2gMenuItem, child: C2gMenuItem): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class MainNavigationComponent { readonly items: _angular_core.InputSignal; readonly ariaLabel: _angular_core.InputSignal; readonly mainItemSelected: _angular_core.OutputEmitterRef; readonly subItemSelected: _angular_core.OutputEmitterRef; onMainItemSelected(item: C2gMainNavigationItem): void; onSubItemSelected(selection: C2gSubmenuSelection): void; trackByKey: (_index: number, item: C2gMainNavigationItem) => string; trackSubByKey: (_index: number, item: C2gSubmenuItem) => string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class MainNavigationItemComponent { readonly item: _angular_core.InputSignal; readonly itemSelected: _angular_core.OutputEmitterRef; readonly subItemSelected: _angular_core.OutputEmitterRef; readonly submenuOpen: _angular_core.WritableSignal; readonly hasSubmenu: _angular_core.Signal; onItemClick(): void; onMouseEnter(): void; onMouseLeave(): void; onSubItemSelected(sub: C2gSubmenuItem): void; onItemKeydown(event: KeyboardEvent): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class SubmenuComponent { readonly items: _angular_core.InputSignal; readonly open: _angular_core.InputSignal; readonly itemSelected: _angular_core.OutputEmitterRef; readonly activeIndex: _angular_core.WritableSignal; onItemSelected(item: C2gSubmenuItem): void; setActiveIndex(index: number): void; onKeydown(event: KeyboardEvent): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class SubmenuItemComponent { readonly item: _angular_core.InputSignal; readonly active: _angular_core.InputSignal; readonly selected: _angular_core.OutputEmitterRef; readonly mouseenter: _angular_core.OutputEmitterRef; onClick(): void; onMouseEnter(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface DashboardWeatherDay { date: string; icon: string; description: string; tempMin: number; tempMax: number; /** When true, this day is beyond the user's tier limit — render as locked/blurred */ locked?: boolean; } interface NextAdventureData { tourName: string; destination: string; fromDate: string; toDate: string; tourType?: string; coverImage?: string; weather?: DashboardWeatherDay[]; showPulse?: boolean; } interface PackStatusData { totalItems: number; completedItems: number; criticalTotal: number; criticalCompleted: number; tourName?: string; } interface PackWeightData { currentWeightG: number; previousWeightG?: number; tourName?: string; } interface MemberReadinessEntry { name: string; avatarUrl?: string; initials: string; totalItems: number; completedItems: number; isSelf?: boolean; } interface MemberReadinessData { members: MemberReadinessEntry[]; groupName?: string; } interface StreakData { streakDays: number; level: number; experiencePoints: number; nextLevelXp: number; favoriteSeason?: string; totalDistanceKm?: number; totalNightsCamped?: number; } interface CampingScoreFactor { /** Display label e.g. 'Sonne', 'Regen', 'Wind' */ label: string; /** Emoji or short icon string */ icon: string; /** 0–10 quality score (higher = better) */ score: number; /** Human-readable raw value shown below score, e.g. 'Ø 17°C' */ rawLabel?: string; /** When true, high score = bad (e.g. Regen, Wind). Tier color is flipped. */ inverted?: boolean; } interface CampingScoreData { /** 0–10 scale */ score: number; label?: string; highlights?: string[]; warnings?: string[]; tourName?: string; fromDate?: string; toDate?: string; /** Optional structured sub-scores shown as factor tiles */ factors?: CampingScoreFactor[]; } interface RainForecastDay { /** ISO date string */ date: string; /** 0–1 */ precipitationProbability: number; /** mm */ precipitation: number; icon?: string; } interface RainVisualizationData { days: RainForecastDay[]; tourName?: string; } type MemberType = 'adult' | 'teen' | 'child' | 'toddler' | 'senior' | 'dog' | 'cat' | 'pet'; interface GroupMemberCompositionEntry { type: MemberType; count: number; names?: string[]; } interface GroupCompositionData { members: GroupMemberCompositionEntry[]; groupName?: string; groupType?: string; } interface CriticalItemAlertEntry { name: string; category?: string; /** * personal = every group member needs their own copy. * shared = a minimum quantity must be covered, regardless of who brings it. */ scope: 'personal' | 'shared'; /** For shared items: how many are needed in total */ neededCount?: number; /** For shared items: how many are already covered */ coveredCount?: number; /** For personal items: which members still haven't packed it */ missingFor?: string[]; /** For shared items: who is bringing it (if anyone) */ coveredBy?: string[]; } type SuccessVisualType = 'lottie' | 'image' | 'icon'; interface SuccessVisual { type: SuccessVisualType; /** lottie: animationData object | image: URL string | icon: emoji or short text */ value: unknown; /** Optional alt text for images */ alt?: string; } interface CriticalItemsAlertData { openItems: CriticalItemAlertEntry[]; totalCritical: number; /** ISO date string */ tourFromDate: string; tourName?: string; /** Optional visual shown in the all-clear success state */ successVisual?: SuccessVisual; } interface WindForecastDay { date: string; /** km/h */ windSpeed: number; /** 0–360 degrees */ windDirection: number; description?: string; } interface WindIndicatorData { days: WindForecastDay[]; tourName?: string; } interface TotalKmSparkPoint { /** ISO date (tour end date) */ date: string; /** cumulative km at this point */ km: number; } interface TotalKmData { totalKm: number; yearKm?: number; sparkline?: TotalKmSparkPoint[]; /** count of tours included */ tourCount?: number; } type TourType = 'hiking' | 'cycling' | 'paddling' | 'climbing' | 'skiing' | 'other'; interface TourTypeSplitEntry { type: TourType; count: number; km?: number; } interface TourTypeSplitData { entries: TourTypeSplitEntry[]; totalTours: number; } interface TourRhythmWeek { /** ISO week start date (Monday) */ weekStart: string; /** 0 = no activity, 1–4 = intensity level */ level: 0 | 1 | 2 | 3 | 4; tourName?: string; km?: number; } interface TourRhythmData { /** 52 weeks, oldest first */ weeks: TourRhythmWeek[]; totalActiveDays?: number; currentStreakWeeks?: number; } type Season = 'spring' | 'summer' | 'autumn' | 'winter'; interface SeasonDnaEntry { season: Season; tourCount: number; km?: number; nights?: number; } interface SeasonDnaData { entries: SeasonDnaEntry[]; dominantSeason?: Season; totalTours: number; } interface WeightHistoryPoint { /** ISO date (tour end date) */ date: string; /** total packed weight in grams */ weightG: number; tourName?: string; } interface WeightHistoryData { points: WeightHistoryPoint[]; /** personal best (lowest) in grams */ bestG?: number; /** latest weight in grams */ latestG?: number; } interface GearValueData { /** total value in base currency */ totalValue: number; currency: string; itemCount: number; /** optional: breakdown by category */ categories?: { label: string; value: number; count: number; }[]; } interface WeightBreakdownEntry { category: string; weightG: number; itemCount: number; color?: string; } interface WeightBreakdownData { entries: WeightBreakdownEntry[]; totalG: number; } interface AdventureScoreData { score: number; /** 0–100 scale */ level: number; levelLabel: string; totalTours: number; totalKm: number; totalNights: number; uniqueTypes: number; sparkline?: { date: string; score: number; }[]; } interface TopGearEntry { name: string; category?: string; usageCount: number; totalTours: number; imageUrl?: string; weightG?: number; } interface TopGearData { entries: TopGearEntry[]; } interface GroupActivityEntry { name: string; initials: string; avatarUrl?: string; completedItems: number; totalItems: number; isSelf?: boolean; } interface GroupActivityData { members: GroupActivityEntry[]; groupName?: string; } interface GearSharingData { sharedItems: number; totalItems: number; memberCount: number; /** kg saved per person through sharing */ savedWeightPerPersonG?: number; } interface AdventureRadiusData { avgRadiusKm: number; maxRadiusKm: number; maxTourName?: string; /** home coordinates label, e.g. "München" */ homeLabel?: string; /** distribution buckets in km */ buckets?: { labelKm: string; count: number; }[]; } interface PackProgressRow { label: string; icon: string; packed: number; total: number; /** Draws extra visual attention — use for baby/toddler and pet rows */ highlight?: boolean; } interface PackProgressData { rows: PackProgressRow[]; tourName?: string; } declare class NextAdventureWidgetComponent { readonly data: _angular_core.InputSignal; readonly countdown: _angular_core.Signal; readonly duration: _angular_core.Signal; readonly countdownLabel: _angular_core.Signal; readonly dateRange: _angular_core.Signal; readonly tourTypeIcon: _angular_core.Signal; readonly weatherSlots: _angular_core.Signal<_camp2gether_c2g_ui_presets.DashboardWeatherDay[]>; readonly urgencyClass: _angular_core.Signal<"" | "c2g-next-adventure--now" | "c2g-next-adventure--soon">; weatherIcon(icon: string): string; formatWeatherDate(date: string): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackStatusWidgetComponent { readonly data: _angular_core.InputSignal; readonly percent: _angular_core.Signal; readonly criticalOpen: _angular_core.Signal; readonly statusColor: _angular_core.Signal<"warning" | "success" | "primary">; readonly statusLabel: _angular_core.Signal<"Alles gepackt!" | "Fast fertig" | "Gut dabei" | "Packen gestartet" | "Noch nicht gepackt">; readonly radius = 44; readonly strokeWidth = 8; readonly circumference: number; readonly strokeDashoffset: _angular_core.Signal; readonly ticks: { x1: number; y1: number; x2: number; y2: number; }[]; readonly itemDots: _angular_core.Signal; readonly displayPercent: _angular_core.WritableSignal; private raf; constructor(); static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackWeightWidgetComponent implements OnDestroy { readonly data: _angular_core.InputSignal; readonly zone: _angular_core.Signal<{ readonly label: "Ultraleicht"; readonly maxG: 7000; readonly color: "#22c55e"; readonly bgColor: "rgba(34,197,94,0.18)"; } | { readonly label: "Leicht"; readonly maxG: 12000; readonly color: "#84cc16"; readonly bgColor: "rgba(132,204,22,0.15)"; } | { readonly label: "Mittel"; readonly maxG: 18000; readonly color: "#f59e0b"; readonly bgColor: "rgba(245,158,11,0.14)"; } | { readonly label: "Schwer"; readonly maxG: 25000; readonly color: "#f97316"; readonly bgColor: "rgba(249,115,22,0.14)"; } | { readonly label: "Sehr schwer"; readonly maxG: 30000; readonly color: "#ef4444"; readonly bgColor: "rgba(239,68,68,0.15)"; }>; readonly scalePercent: _angular_core.Signal; readonly prevScalePercent: _angular_core.Signal; readonly diffG: _angular_core.Signal; readonly diffKg: _angular_core.Signal; readonly diffTrend: _angular_core.Signal<"better" | "worse" | "same" | null>; readonly animatedPercent: _angular_core.WritableSignal; readonly displayKg: _angular_core.WritableSignal; private rafMarker; private rafKg; constructor(); readonly zoneSegments: _angular_core.Signal<{ left: number; width: number; color: "#22c55e" | "#84cc16" | "#f59e0b" | "#f97316" | "#ef4444"; bgColor: "rgba(34,197,94,0.18)" | "rgba(132,204,22,0.15)" | "rgba(245,158,11,0.14)" | "rgba(249,115,22,0.14)" | "rgba(239,68,68,0.15)"; label: "Ultraleicht" | "Leicht" | "Mittel" | "Schwer" | "Sehr schwer"; }[]>; readonly ticks: { pct: number; label: string; }[]; ngOnDestroy(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface ReadinessGroup { label: string; emoji: string; color: 'success' | 'warning' | 'danger' | 'neutral'; min: number; max: number; members: MemberReadinessEntry[]; } declare class MemberReadinessWidgetComponent { readonly members: _angular_core.InputSignal; readonly tourName: _angular_core.InputSignal; readonly overallPercent: _angular_core.Signal; readonly fullyReady: _angular_core.Signal; readonly useGrouped: _angular_core.Signal; readonly groups: _angular_core.Signal; readonly flatSorted: _angular_core.Signal; readyPercent(entry: MemberReadinessEntry): number; readyColor(entry: MemberReadinessEntry): 'success' | 'warning' | 'danger' | 'neutral'; readonly collapsed: Map; toggleGroup(index: number): void; isCollapsed(index: number): boolean; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class StreakWidgetComponent { readonly data: _angular_core.InputSignal; readonly xpPercent: _angular_core.Signal; readonly streakTier: _angular_core.Signal<"cold" | "warm" | "hot" | "legendary">; readonly streakEmoji: _angular_core.Signal<"🏆" | "🔥" | "⚡" | "🌱">; readonly levelLabel: _angular_core.Signal<"Legende" | "Experte" | "Erfahren" | "Fortgeschritten" | "Einsteiger">; readonly streakLabel: _angular_core.Signal; readonly xpToNext: _angular_core.Signal; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class CampingScoreWidgetComponent implements OnDestroy { readonly data: _angular_core.InputSignal; readonly tier: _angular_core.Signal<"great" | "good" | "ok" | "bad">; readonly tierLabel: _angular_core.Signal; readonly tierEmoji: _angular_core.Signal<"☀️" | "⛅" | "🌧️" | "🌤">; readonly factors: _angular_core.Signal; factorBarPct(score: number): number; factorTier(score: number, inverted?: boolean): string; readonly displayScore: _angular_core.WritableSignal; private raf; constructor(); ngOnDestroy(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface RainDay extends RainForecastDay { dayLabel: string; probPct: number; barPct: number; level: 'none' | 'light' | 'moderate' | 'heavy'; icon: string; } declare class RainVisualizationWidgetComponent { readonly data: _angular_core.InputSignal; readonly enriched: _angular_core.Signal; readonly overallRisk: _angular_core.Signal<"low" | "medium" | "high">; readonly riskLabel: _angular_core.Signal; readonly summaryIcon: _angular_core.Signal<"☀️" | "⛈" | "🌦">; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class GroupCompositionWidgetComponent { readonly data: _angular_core.InputSignal; readonly sorted: _angular_core.Signal<_camp2gether_c2g_ui_presets.GroupMemberCompositionEntry[]>; readonly totalPeople: _angular_core.Signal; readonly totalPets: _angular_core.Signal; readonly maxCount: _angular_core.Signal; readonly avatars: _angular_core.Signal<{ emoji: string; color: string; key: string; }[]>; configFor(type: MemberType): { emoji: string; label: string; color: string; }; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class CriticalItemsAlertWidgetComponent { readonly data: _angular_core.InputSignal; readonly daysUntil: _angular_core.Signal; readonly urgency: _angular_core.Signal<"critical" | "warning" | "ok">; readonly urgencyLabel: _angular_core.Signal; readonly allClear: _angular_core.Signal; readonly personalItems: _angular_core.Signal; readonly sharedItems: _angular_core.Signal; readonly personalHidden: _angular_core.Signal; readonly sharedHidden: _angular_core.Signal; readonly successVisualType: _angular_core.Signal<_camp2gether_c2g_ui_presets.SuccessVisualType>; readonly lottieOptions: _angular_core.Signal; readonly imageValue: _angular_core.Signal; readonly imageAlt: _angular_core.Signal; readonly iconValue: _angular_core.Signal; sharedProgress(item: CriticalItemAlertEntry): number; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class WindIndicatorWidgetComponent { readonly data: _angular_core.InputSignal; readonly days: _angular_core.Signal; readonly peak: _angular_core.Signal; readonly peakBeaufort: _angular_core.Signal<{ max: number; label: string; emoji: string; color: string; }>; readonly overallRisk: _angular_core.Signal<"calm" | "breezy" | "windy" | "stormy">; enriched: _angular_core.Signal<{ bf: { max: number; label: string; emoji: string; color: string; }; dirLabel: string; arrowDeg: number; barPct: number; date: string; windSpeed: number; windDirection: number; description?: string; }[]>; formatDate(iso: string): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class TotalKmWidgetComponent implements OnDestroy { readonly data: _angular_core.InputSignal; readonly displayKm: _angular_core.WritableSignal; readonly displayYearKm: _angular_core.WritableSignal; private rafId; private rafYearId; constructor(); private animateCount; readonly sparklinePath: _angular_core.Signal<{ line: string; area: string; lastX: number; lastY: number; } | null>; ngOnDestroy(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface Segment { type: TourType; label: string; emoji: string; color: string; count: number; km: number; pct: number; offset: number; dash: number; } declare class TourTypeSplitWidgetComponent { readonly data: _angular_core.InputSignal; readonly segments: _angular_core.Signal; readonly isEmpty: _angular_core.Signal; readonly dominantSegment: _angular_core.Signal; readonly circumference: number; trackByType(_: number, seg: Segment): TourType; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface WeekCell extends TourRhythmWeek { col: number; monthLabel: string | null; } declare class TourRhythmWidgetComponent { readonly data: _angular_core.InputSignal; readonly cells: _angular_core.Signal; readonly totalCols: _angular_core.Signal; readonly levelColors: string[]; levelColor(level: 0 | 1 | 2 | 3 | 4): string; trackByCol(_: number, cell: WeekCell): number; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface SeasonSegment { season: Season; label: string; emoji: string; color: string; tourCount: number; km: number; nights: number; pct: number; startAngle: number; endAngle: number; pathD: string; labelX: number; labelY: number; } declare class SeasonDnaWidgetComponent { readonly data: _angular_core.InputSignal; readonly segments: _angular_core.Signal; readonly isEmpty: _angular_core.Signal; readonly dominantSeason: _angular_core.Signal<{ label: string; emoji: string; color: string; } | null>; trackBySeason(_: number, seg: SeasonSegment): Season; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class WeightHistoryWidgetComponent { readonly data: _angular_core.InputSignal; readonly points: _angular_core.Signal; readonly sparklinePath: _angular_core.Signal<{ line: string; area: string; lastX: number; lastY: number; improving: boolean; } | null>; readonly trend: _angular_core.Signal<{ diffG: number; pct: number; improving: boolean; } | null>; formatKg(g: number): string; formatDate(iso: string): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class GearValueWidgetComponent { readonly data: _angular_core.InputSignal; readonly topCategories: _angular_core.Signal<{ label: string; value: number; count: number; }[]>; readonly maxCatValue: _angular_core.Signal; readonly formattedTotal: _angular_core.Signal; formatValue(v: number): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface EnrichedEntry extends WeightBreakdownEntry { pct: number; color: string; barOffset: number; } declare class WeightBreakdownWidgetComponent { readonly data: _angular_core.InputSignal; readonly entries: _angular_core.Signal; readonly totalKg: _angular_core.Signal; readonly circumference = 100; formatKg(g: number): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class AdventureScoreWidgetComponent implements OnDestroy { readonly data: _angular_core.InputSignal; readonly displayScore: _angular_core.WritableSignal; private raf; constructor(); readonly arcPath: _angular_core.Signal; readonly trackPath = "M 60 8 A 52 52 0 1 1 59.99 8"; readonly levelColor: _angular_core.Signal<"#22c55e" | "#f59e0b" | "#ff6b35" | "#3b82f6" | "#94a3b8">; readonly sparklinePath: _angular_core.Signal; ngOnDestroy(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class TopGearWidgetComponent { readonly data: _angular_core.InputSignal; readonly isEmpty: _angular_core.Signal; readonly top: _angular_core.Signal<_camp2gether_c2g_ui_presets.TopGearEntry[]>; readonly maxUsage: _angular_core.Signal; usagePct(count: number): number; medal(index: number): string; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } interface RankedEntry extends GroupActivityEntry { rank: number; pct: number; } declare class GroupActivityWidgetComponent { readonly data: _angular_core.InputSignal; readonly ranked: _angular_core.Signal; medal(rank: number): string; completionPct(m: GroupActivityEntry): number; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class GearSharingWidgetComponent implements OnDestroy { readonly data: _angular_core.InputSignal; readonly displayPct: _angular_core.WritableSignal; private raf; constructor(); readonly sharingPct: _angular_core.Signal; readonly tier: _angular_core.Signal<"low" | "medium" | "high">; readonly arcPath: _angular_core.Signal; ngOnDestroy(): void; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class AdventureRadiusWidgetComponent { readonly data: _angular_core.InputSignal; readonly buckets: _angular_core.Signal<{ labelKm: string; count: number; }[]>; readonly maxBucketCount: _angular_core.Signal; bucketPct(count: number): number; readonly radiusTier: _angular_core.Signal<"local" | "regional" | "national" | "international">; readonly tierEmoji: _angular_core.Signal<"🌍" | "🗺️" | "🏔️" | "🏡">; readonly tierLabel: _angular_core.Signal<"Weltenbummler" | "Deutschlandreisender" | "Regionalentdecker" | "Heimatverbunden">; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class PackProgressWidgetComponent { readonly data: _angular_core.InputSignal; readonly rows: _angular_core.Signal; readonly overallPacked: _angular_core.Signal; readonly overallTotal: _angular_core.Signal; readonly overallPercent: _angular_core.Signal; pct(row: PackProgressRow): number; tone(row: PackProgressRow): 'success' | 'warning' | 'danger'; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } declare class FeatureUnavailableComponent { readonly featureKey: _angular_core.InputSignal; readonly title: _angular_core.InputSignal; readonly description: _angular_core.InputSignal; readonly icon: _angular_core.Signal; static ɵfac: _angular_core.ɵɵFactoryDeclaration; static ɵcmp: _angular_core.ɵɵComponentDeclaration; } export { ActionMenuComponent, AdventureRadiusWidgetComponent, AdventureScoreWidgetComponent, C2G_PACKING_CATEGORY_INFO, CampingScoreWidgetComponent, CriticalItemsAlertWidgetComponent, DEFAULT_PACKING_LIST_CONFIG, DEFAULT_PACKING_LIST_LABEL_KEYS, FeatureUnavailableComponent, GearSharingWidgetComponent, GearValueWidgetComponent, GroupActivityWidgetComponent, GroupCompositionWidgetComponent, MainNavigationComponent, MainNavigationItemComponent, MemberItemComponent, MemberListComponent, MemberPanelComponent, MemberReadinessWidgetComponent, MemberTagsComponent, MenuComponent, NextAdventureWidgetComponent, PackProgressWidgetComponent, PackStatusWidgetComponent, PackWeightWidgetComponent, PackingListCategoryComponent, PackingListComponent, PackingListFiltersComponent, PackingListItemComponent, PackingListItemCreateComponent, PackingListPrivateListComponent, PackingListStatsComponent, RainVisualizationWidgetComponent, SeasonDnaWidgetComponent, StreakWidgetComponent, SubmenuComponent, SubmenuItemComponent, TopGearWidgetComponent, TotalKmWidgetComponent, TourRhythmWidgetComponent, TourTypeSplitWidgetComponent, WEATHER_ICON_MAP, WeatherWidgetComponent, WeightBreakdownWidgetComponent, WeightHistoryWidgetComponent, WindIndicatorWidgetComponent, resolvePackingCategory, resolveWeatherIcon }; export type { ActionMenuItem, AdventureRadiusData, AdventureScoreData, C2gMainNavigationItem, C2gMember, C2gMenuItem, C2gMenuSelection, C2gPackingAssignmentStatus, C2gPackingCategoryInfo, C2gPackingGap, C2gPackingGapSeverity, C2gPackingGapType, C2gPackingItemAssignedEvent, C2gPackingListAssignment, C2gPackingListColumnDef, C2gPackingListConfig, C2gPackingListFeatures, C2gPackingListFilterState, C2gPackingListItem, C2gPackingListLabels, C2gPackingListMember, C2gPackingListMemberOverlayRequest, C2gPackingListMemberStatus, C2gPackingListPermissions, C2gPackingListRowAction, C2gPackingListSortState, C2gPackingSortDir, C2gPackingVisibility, C2gSubmenuItem, C2gSubmenuSelection, CampingScoreData, CampingScoreFactor, CriticalItemAlertEntry, CriticalItemsAlertData, DashboardWeatherDay, GearSharingData, GearValueData, GroupActivityData, GroupActivityEntry, GroupCompositionData, GroupMemberCompositionEntry, MemberReadinessData, MemberReadinessEntry, MemberRoleKey, MemberType, NextAdventureData, PackProgressData, PackProgressRow, PackStatusData, PackWeightData, RainForecastDay, RainVisualizationData, Season, SeasonDnaData, SeasonDnaEntry, StreakData, SuccessVisual, SuccessVisualType, TopGearData, TopGearEntry, TotalKmData, TotalKmSparkPoint, TourRhythmData, TourRhythmWeek, TourType, TourTypeSplitData, TourTypeSplitEntry, WeatherDay, WeightBreakdownData, WeightBreakdownEntry, WeightHistoryData, WeightHistoryPoint, WindForecastDay, WindIndicatorData };