@camp2gether/c2g-ui 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"camp2gether-c2g-ui-presets.mjs","sources":["../../../projects/c2g-ui/presets/packing-list/packing-list.models.ts","../../../projects/c2g-ui/presets/packing-list/packing-list.categories.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-category.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-category.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-filters.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-filters.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-private-list.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-private-list.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-item-create.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item-create.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-stats.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-stats.component.html","../../../projects/c2g-ui/presets/weather-widget/weather-icon.utils.ts","../../../projects/c2g-ui/presets/weather-widget/weather-widget.component.ts","../../../projects/c2g-ui/presets/weather-widget/weather-widget.component.html","../../../projects/c2g-ui/presets/member-list/member-tags/member-tags.component.ts","../../../projects/c2g-ui/presets/member-list/member-tags/member-tags.component.html","../../../projects/c2g-ui/presets/action-menu/action-menu.component.ts","../../../projects/c2g-ui/presets/action-menu/action-menu.component.html","../../../projects/c2g-ui/presets/member-list/member-item/member-item.component.ts","../../../projects/c2g-ui/presets/member-list/member-item/member-item.component.html","../../../projects/c2g-ui/presets/member-list/member-list/member-list.component.ts","../../../projects/c2g-ui/presets/member-list/member-list/member-list.component.html","../../../projects/c2g-ui/presets/member-list/member-panel/member-panel.component.ts","../../../projects/c2g-ui/presets/member-list/member-panel/member-panel.component.html","../../../projects/c2g-ui/presets/menu/menu.component.ts","../../../projects/c2g-ui/presets/menu/menu.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/submenu-item.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/submenu-item.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/submenu.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/submenu.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation-item.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation-item.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation.component.html","../../../projects/c2g-ui/presets/dashboard/next-adventure-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/next-adventure-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-status-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-status-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-weight-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-weight-widget.component.html","../../../projects/c2g-ui/presets/dashboard/member-readiness-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/member-readiness-widget.component.html","../../../projects/c2g-ui/presets/dashboard/streak-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/streak-widget.component.html","../../../projects/c2g-ui/presets/dashboard/camping-score-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/camping-score-widget.component.html","../../../projects/c2g-ui/presets/dashboard/rain-visualization-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/rain-visualization-widget.component.html","../../../projects/c2g-ui/presets/dashboard/group-composition-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/group-composition-widget.component.html","../../../projects/c2g-ui/presets/dashboard/confetti-success.lottie.ts","../../../projects/c2g-ui/presets/dashboard/critical-items-alert-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/critical-items-alert-widget.component.html","../../../projects/c2g-ui/presets/dashboard/wind-indicator-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/wind-indicator-widget.component.html","../../../projects/c2g-ui/presets/dashboard/total-km-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/total-km-widget.component.html","../../../projects/c2g-ui/presets/dashboard/tour-type-split-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/tour-type-split-widget.component.html","../../../projects/c2g-ui/presets/dashboard/tour-rhythm-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/tour-rhythm-widget.component.html","../../../projects/c2g-ui/presets/dashboard/season-dna-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/season-dna-widget.component.html","../../../projects/c2g-ui/presets/dashboard/weight-history-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/weight-history-widget.component.html","../../../projects/c2g-ui/presets/dashboard/gear-value-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/gear-value-widget.component.html","../../../projects/c2g-ui/presets/dashboard/weight-breakdown-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/weight-breakdown-widget.component.html","../../../projects/c2g-ui/presets/dashboard/adventure-score-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/adventure-score-widget.component.html","../../../projects/c2g-ui/presets/dashboard/top-gear-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/top-gear-widget.component.html","../../../projects/c2g-ui/presets/dashboard/group-activity-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/group-activity-widget.component.html","../../../projects/c2g-ui/presets/dashboard/gear-sharing-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/gear-sharing-widget.component.html","../../../projects/c2g-ui/presets/dashboard/adventure-radius-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/adventure-radius-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-progress-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-progress-widget.component.html","../../../projects/c2g-ui/presets/camp2gether-c2g-ui-presets.ts"],"sourcesContent":["export type C2gPackingVisibility = 'shared' | 'personal' | 'private';\nexport type C2gPackingAssignmentStatus = 'assigned' | 'packed' | 'confirmed';\n\nexport interface C2gPackingListAssignment {\n itemId: string;\n memberId: string;\n memberName?: string;\n packedBy?: string;\n packedByName?: string;\n status: C2gPackingAssignmentStatus;\n quantity?: number;\n}\n\nexport interface C2gPackingItemAssignedEvent {\n itemId: string;\n memberId: string;\n assigned: boolean;\n quantity?: number;\n}\n\nexport interface C2gPackingListItem {\n id: string;\n name: string;\n category: string;\n essential?: boolean;\n visibility: C2gPackingVisibility;\n quantity?: number;\n weightKg?: number;\n packedVolumeL?: number;\n priority?: string;\n reason?: string;\n weather?: boolean;\n hint?: string;\n confirmed?: boolean;\n createdBy?: string;\n privateOwnerVisible?: boolean;\n assignments?: C2gPackingListAssignment[];\n}\n\nexport interface C2gPackingListMember {\n id: string;\n name: string;\n initials?: string;\n color?: string;\n type?: 'adult' | 'child' | 'baby' | 'pet';\n hasAccount?: boolean;\n}\n\nexport interface C2gPackingCategoryInfo {\n key: string;\n labelKey: string;\n label?: string; // optional human-readable fallback (used when no i18n pipe is available)\n icon: string;\n}\n\nexport interface C2gPackingListFilterState {\n query: string;\n visibility: 'all' | C2gPackingVisibility;\n essentialsOnly: boolean;\n memberIds: string[];\n}\n\nexport interface C2gPackingListMemberStatus {\n memberId: string;\n memberName: string;\n initials?: string;\n checked: boolean;\n canToggle: boolean;\n}\n\nexport interface C2gPackingListMemberOverlayRequest {\n itemId: string;\n itemName: string;\n members: C2gPackingListMemberStatus[];\n}\n\nexport interface C2gPackingListLabels {\n searchPlaceholderKey: string;\n essentialsOnlyKey: string;\n showAllVisibilityKey: string;\n sharedVisibilityKey: string;\n personalVisibilityKey: string;\n privateVisibilityKey: string;\n privateSectionTitleKey: string;\n emptyStateKey: string;\n categoryStatsKey: string;\n deleteConfirmKey: string;\n addItemKey?: string;\n createItemKey?: string;\n itemNameKey?: string;\n categoryKey?: string;\n visibilityKey?: string;\n essentialKey?: string;\n quantityKey?: string;\n weightKey?: string;\n volumeKey?: string;\n hintKey?: string;\n cancelKey?: string;\n createKey?: string;\n}\n\nexport const DEFAULT_PACKING_LIST_LABEL_KEYS: C2gPackingListLabels = {\n searchPlaceholderKey: 'packingList.search.placeholder',\n essentialsOnlyKey: 'packingList.filters.essentialsOnly',\n showAllVisibilityKey: 'packingList.filters.visibility.all',\n sharedVisibilityKey: 'packingList.filters.visibility.shared',\n personalVisibilityKey: 'packingList.filters.visibility.personal',\n privateVisibilityKey: 'packingList.filters.visibility.private',\n privateSectionTitleKey: 'packingList.private.title',\n emptyStateKey: 'packingList.empty',\n categoryStatsKey: 'packingList.category.stats',\n deleteConfirmKey: 'packingList.delete.confirm',\n addItemKey: 'packingList.addItem',\n createItemKey: 'packingList.createItem',\n itemNameKey: 'packingList.itemName',\n categoryKey: 'packingList.category',\n visibilityKey: 'packingList.visibility',\n essentialKey: 'packingList.essential',\n quantityKey: 'packingList.quantity',\n weightKey: 'packingList.weight',\n volumeKey: 'packingList.volume',\n hintKey: 'packingList.hint',\n cancelKey: 'packingList.cancel',\n createKey: 'packingList.create'\n};\n\nexport interface C2gPackingListPermissions {\n isOrganizer: boolean;\n isGuest: boolean;\n isSolo: boolean;\n readOnly: boolean;\n canManageAssignments?: boolean;\n canMembersManageSharedItems?: boolean;\n canMembersAddSharedItems?: boolean;\n}\n\n// === Generics: Host defines available fields ===\n\n/**\n * Feature flags (like GridOptions booleans).\n * Applied globally to all rows.\n */\nexport interface C2gPackingListFeatures {\n search?: boolean; // show search bar (default: true)\n filters?: boolean; // show visibility/member filter bar (default: true)\n stats?: boolean; // show category weight/count stats (default: true)\n create?: boolean; // show add-item button + dialog (default: false)\n editItem?: boolean; // trigger edit action per item (default: per permissions)\n deleteItem?: boolean; // trigger delete action per item (default: per permissions)\n assignments?: boolean; // show member assignment chips/overlay (default: true)\n privateSection?: boolean; // separate list for private items (default: false)\n expandAllOnLoad?: boolean; // expand all categories on mount (default: false)\n}\n\n/**\n * Column definition - generic over host-defined field type.\n * Host specifies which fields are available via TField generic.\n */\nexport interface C2gPackingListColumnDef<TField extends string = string> {\n field: TField;\n visible?: boolean; // default: true\n editable?: boolean; // default: driven by permissions\n sortable?: boolean; // default: false\n labelKey?: string; // i18n key override for this field\n}\n\n/**\n * Sort state - generic over host-defined field type.\n */\nexport type C2gPackingSortDir = 'asc' | 'desc';\n\nexport interface C2gPackingListSortState<TField extends string = string> {\n field: TField;\n dir: C2gPackingSortDir;\n}\n\n/**\n * Custom row action - host can trigger these via (rowActionTriggered).\n */\nexport interface C2gPackingListRowAction {\n id: string;\n labelKey: string;\n icon?: string;\n showWhen?: (item: C2gPackingListItem, permissions: C2gPackingListPermissions) => boolean;\n}\n\n/**\n * Main config object - generic over host-defined field type.\n * Like AgGrid GridOptions.\n */\nexport interface C2gPackingListConfig<TField extends string = string> {\n features?: C2gPackingListFeatures;\n columnDefs?: C2gPackingListColumnDef<TField>[];\n sort?: C2gPackingListSortState<TField>;\n rowActions?: C2gPackingListRowAction[];\n initialFilter?: Partial<C2gPackingListFilterState>;\n defaultExpandedCount?: number; // how many categories auto-expand (default: 3)\n}\n\nexport const DEFAULT_PACKING_LIST_CONFIG: C2gPackingListConfig = {\n features: {\n search: true,\n filters: true,\n stats: true,\n create: false,\n assignments: true,\n privateSection: false,\n expandAllOnLoad: false,\n },\n defaultExpandedCount: 3,\n};\n","import { C2gPackingCategoryInfo } from './packing-list.models';\n\nexport const C2G_PACKING_CATEGORY_INFO: Record<string, C2gPackingCategoryInfo> = {\n shelter: { key: 'shelter', labelKey: 'packingList.categories.shelter', label: 'Unterkunft', icon: 'home' },\n sleeping: { key: 'sleeping', labelKey: 'packingList.categories.sleeping', label: 'Schlafen', icon: 'bed' },\n cookingEating:{ key: 'cookingEating',labelKey: 'packingList.categories.cookingEating',label: 'Kochen & Essen', icon: 'restaurant' },\n clothing: { key: 'clothing', labelKey: 'packingList.categories.clothing', label: 'Kleidung', icon: 'checkroom' },\n navigation: { key: 'navigation', labelKey: 'packingList.categories.navigation', label: 'Navigation', icon: 'explore' },\n lighting: { key: 'lighting', labelKey: 'packingList.categories.lighting', label: 'Beleuchtung', icon: 'light_mode' },\n safety: { key: 'safety', labelKey: 'packingList.categories.safety', label: 'Sicherheit', icon: 'medical_services' },\n tools: { key: 'tools', labelKey: 'packingList.categories.tools', label: 'Werkzeug', icon: 'build' },\n hygiene: { key: 'hygiene', labelKey: 'packingList.categories.hygiene', label: 'Hygiene', icon: 'wash' },\n furniture: { key: 'furniture', labelKey: 'packingList.categories.furniture', label: 'Möbel & Ausstattung', icon: 'chair' },\n hydration: { key: 'hydration', labelKey: 'packingList.categories.hydration', label: 'Getränke', icon: 'water_drop' },\n mobility: { key: 'mobility', labelKey: 'packingList.categories.mobility', label: 'Transport', icon: 'backpack' },\n activity: { key: 'activity', labelKey: 'packingList.categories.activity', label: 'Aktivitäten', icon: 'sports' },\n documents: { key: 'documents', labelKey: 'packingList.categories.documents', label: 'Dokumente', icon: 'description' },\n other: { key: 'other', labelKey: 'packingList.categories.other', label: 'Sonstiges', icon: 'category' }\n};\n\nexport function resolvePackingCategory(categoryKey: string): C2gPackingCategoryInfo {\n return (\n C2G_PACKING_CATEGORY_INFO[categoryKey] ?? {\n key: categoryKey,\n labelKey: `packingList.categories.${categoryKey}`,\n icon: 'inventory_2'\n }\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport { AvatarComponent } from '@humbeldore/c2g-ui';\nimport { C2gAvatarBadge } from '@humbeldore/c2g-ui';\nimport { BadgeComponent } from '@humbeldore/c2g-ui';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListMemberStatus,\n C2gPackingListPermissions\n} from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-item',\n standalone: true,\n imports: [AvatarComponent, BadgeComponent],\n templateUrl: './packing-list-item.component.html',\n styleUrls: ['./packing-list-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListItemComponent {\n readonly item = input.required<C2gPackingListItem>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly selectedMemberIds = input<string[]>([]);\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n\n readonly overlayOpen = signal(false);\n readonly overlaySearch = signal('');\n readonly ctaMenuOpen = signal(false);\n readonly quantityPickerOpen = signal(false);\n readonly quantityPickerValue = signal(1);\n readonly delegateDialogOpen = signal(false);\n readonly delegateMemberId = signal<string | null>(null);\n readonly delegateQuantity = signal(1);\n readonly avatarDialogOpen = signal(false);\n readonly avatarDialogMemberId = signal<string | null>(null);\n readonly avatarDialogQuantity = signal(1);\n readonly personalAssignDialogOpen = signal(false);\n readonly personalAssignSearch = signal('');\n readonly personalAssignMemberId = signal<string | null>(null);\n\n readonly applicableMembers = computed(() => {\n const item = this.item();\n if (item.visibility === 'personal') {\n return this.members().filter(m => m.type !== 'pet');\n }\n return this.members().filter(m => m.type !== 'child' && m.type !== 'pet');\n });\n\n readonly visibleMembers = computed(() => {\n const selected = this.selectedMemberIds();\n if (selected.length === 0) {\n return this.applicableMembers();\n }\n const allowed = new Set(selected);\n return this.applicableMembers().filter(member => allowed.has(member.id));\n });\n\n readonly packedCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments\n .filter(a => a.status === 'packed' || a.status === 'confirmed')\n .reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly isPacked = computed(() => this.packedCount() > 0 || !!this.item().confirmed);\n\n readonly requiredQuantity = computed(() => Math.max(1, this.item().quantity ?? 1));\n\n readonly checkedMembers = computed(() => {\n const currentUserId = this.currentUserId();\n const checked = this.visibleMembers().filter(member => this.isMemberChecked(member.id));\n return checked.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n return 0;\n });\n });\n\n readonly personalAssignedMembers = computed(() => {\n if (this.item().visibility !== 'personal') {\n return [] as C2gPackingListMember[];\n }\n\n const currentUserId = this.currentUserId();\n const assigned = this.visibleMembers().filter(member => this.hasAnyAssignment(member.id));\n return assigned.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n return 0;\n });\n });\n\n readonly missingMembers = computed(() =>\n this.visibleMembers().filter(member => !this.isMemberChecked(member.id))\n );\n\n readonly checkedPreview = computed(() => this.checkedMembers().slice(0, 3));\n readonly hiddenCheckedCount = computed(() => Math.max(0, this.checkedMembers().length - this.checkedPreview().length));\n readonly personalAssignedPreview = computed(() => this.personalAssignedMembers().slice(0, 3));\n readonly personalHiddenAssignedCount = computed(() => Math.max(0, this.personalAssignedMembers().length - this.personalAssignedPreview().length));\n readonly missingPreview = computed(() => this.missingMembers().slice(0, 3));\n readonly hiddenMissingCount = computed(() => Math.max(0, this.missingMembers().length - this.missingPreview().length));\n\n readonly currentUserMember = computed(() =>\n this.members().find(member => member.id === this.currentUserId()) ?? null\n );\n\n readonly isItemOwner = computed(() => {\n const ownerId = this.item().createdBy;\n if (!ownerId) {\n // Legacy items may not carry ownership metadata.\n return true;\n }\n return ownerId === this.currentUserId();\n });\n\n readonly canEditOrDeleteItem = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n\n const item = this.item();\n if (item.visibility === 'shared') {\n return permissions.isOrganizer || !!permissions.canMembersManageSharedItems || this.isItemOwner();\n }\n\n return permissions.isOrganizer || this.isItemOwner();\n });\n\n readonly canShowAssignCta = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n if (permissions.isSolo) {\n return false;\n }\n return permissions.isOrganizer || !!permissions.canManageAssignments;\n });\n\n readonly sharedAssignmentsCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments\n .filter(a => a.status === 'confirmed' || a.status === 'packed')\n .reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly sharedTotalAssignedCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments.reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly sharedMissingSlots = computed(() => Math.max(0, this.requiredQuantity() - this.sharedTotalAssignedCount()));\n\n readonly selfAssignableMaxQuantity = computed(() => Math.max(1, this.sharedMissingSlots()));\n\n readonly delegateCandidates = computed(() =>\n this.visibleMembers().filter(member => this.canAssignShared(member.id))\n );\n\n readonly selfAssignedToShared = computed(() => this.isSharedAssigned(this.currentUserId()));\n\n readonly isPlanner = computed(() => {\n const p = this.permissions();\n return p.isOrganizer || !!p.canManageAssignments;\n });\n\n // Label for the \"join / adjust\" button on shared items\n readonly joinBtnLabel = computed(() => {\n if (!this.selfAssignedToShared()) return '+ Eintragen';\n return this.isPlanner() ? 'Menge anpassen' : 'Meine Menge anpassen';\n });\n\n // Context label inside the quantity picker\n readonly pickerLabel = computed(() => {\n if (this.isPlanner()) return 'Wie viel wird mitgenommen?';\n return 'Wie viel nimmst du mit?';\n });\n\n // Context label inside the delegate dialog\n readonly delegatePickerLabel = computed(() => 'Wer bringt es mit? Menge festlegen:');\n\n readonly canSelfAssignShared = computed(() => {\n const currentUserId = this.currentUserId();\n if (!this.canAssignShared(currentUserId)) {\n return false;\n }\n if (this.selfAssignedToShared()) {\n return true;\n }\n return this.sharedMissingSlots() > 0;\n });\n\n readonly selectedDelegateMember = computed(() => {\n const memberId = this.delegateMemberId();\n if (!memberId) {\n return null;\n }\n return this.members().find(member => member.id === memberId) ?? null;\n });\n\n readonly canManagePersonalAssignments = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly || permissions.isSolo) {\n return false;\n }\n\n return permissions.isOrganizer || !!permissions.canManageAssignments || this.isItemOwner();\n });\n\n readonly personalAssignableMembers = computed(() => {\n if (this.item().visibility !== 'personal' || !this.canManagePersonalAssignments()) {\n return [] as C2gPackingListMember[];\n }\n\n return this.visibleMembers().filter(member => !this.hasAnyAssignment(member.id));\n });\n\n readonly filteredPersonalAssignableMembers = computed(() => {\n const query = this.personalAssignSearch().trim().toLowerCase();\n if (!query) {\n return this.personalAssignableMembers();\n }\n\n return this.personalAssignableMembers().filter(member => {\n const searchable = `${member.name} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n readonly selectedPersonalAssignMember = computed(() => {\n const memberId = this.personalAssignMemberId();\n if (!memberId) {\n return null;\n }\n\n return this.members().find(member => member.id === memberId) ?? null;\n });\n\n readonly completionText = computed(() => {\n if (this.item().visibility === 'shared') {\n return `${this.sharedAssignmentsCount()}/${this.requiredQuantity()} bereit`;\n }\n\n if (this.item().visibility === 'personal') {\n return `${this.checkedMembers().length}/${this.visibleMembers().length} bereit`;\n }\n\n return this.isPacked() ? 'bereit' : 'offen';\n });\n\n readonly progressNumerator = computed(() => {\n if (this.item().visibility === 'shared') {\n return this.sharedAssignmentsCount();\n }\n\n if (this.item().visibility === 'personal') {\n return this.checkedMembers().length;\n }\n\n return this.isPacked() ? 1 : 0;\n });\n\n readonly progressDenominator = computed(() => {\n if (this.item().visibility === 'shared') {\n return this.requiredQuantity();\n }\n\n if (this.item().visibility === 'personal') {\n return Math.max(1, this.visibleMembers().length);\n }\n\n return 1;\n });\n\n readonly progressRatioText = computed(() => `${this.progressNumerator()}/${this.progressDenominator()}`);\n\n // Badge shown top-right: \"x/y\" packed — only for group items\n readonly quantityBadge = computed(() => {\n const vis = this.item().visibility;\n if (this.permissions().isSolo || vis === 'private') return null;\n const n = this.progressNumerator();\n const d = this.progressDenominator();\n if (d <= 1 && vis === 'shared') return null; // single shared item, dot is enough\n return { value: `${n}/${d}`, tone: this.progressTone() } as const;\n });\n\n readonly progressPercentage = computed(() => {\n const denominator = this.progressDenominator();\n if (denominator <= 0) {\n return 0;\n }\n\n return Math.min(100, Math.round((this.progressNumerator() / denominator) * 100));\n });\n\n readonly progressTone = computed<'danger' | 'warning' | 'success'>(() => {\n const progress = this.progressPercentage();\n if (progress === 100) {\n return 'success';\n }\n if (progress >= 50) {\n return 'warning';\n }\n return 'danger';\n });\n\n readonly needsPackLabel = computed(() => {\n if (this.item().visibility === 'shared') {\n return `${this.sharedMissingSlots()} offen`;\n }\n return `${this.missingMembers().length} müssen packen`;\n });\n\n readonly overlayMembers = computed<C2gPackingListMemberStatus[]>(() =>\n this.visibleMembers().map(member => ({\n memberId: member.id,\n memberName: member.name,\n initials: member.initials,\n checked: this.isMemberChecked(member.id),\n canToggle: this.item().visibility === 'shared'\n ? this.canAssignShared(member.id)\n : this.canPackForMember(member.id)\n }))\n );\n\n readonly filteredOverlayMembers = computed(() => {\n const query = this.overlaySearch().trim().toLowerCase();\n if (!query) {\n return this.overlayMembers();\n }\n\n return this.overlayMembers().filter(member => {\n const searchable = `${member.memberName} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n readonly personalStatusBadges = computed(() => {\n if (this.item().visibility !== 'personal') {\n return [] as Array<{ key: string; text: string; tone: 'success' | 'warning'; dotColor: string }>;\n }\n\n const badges: Array<{ key: string; text: string; tone: 'success' | 'warning'; dotColor: string }> = [];\n\n for (const assignment of this.item().assignments ?? []) {\n const targetMember = this.members().find(m => m.id === assignment.memberId);\n const targetName = targetMember?.name ?? assignment.memberName ?? assignment.memberId;\n const sourceMember = assignment.packedBy ? this.members().find(m => m.id === assignment.packedBy) : null;\n const sourceName = sourceMember?.name ?? assignment.packedByName ?? assignment.packedBy;\n const isTakeover = !!assignment.packedBy && assignment.packedBy !== assignment.memberId;\n\n badges.push({\n key: `${assignment.memberId}:${assignment.packedBy ?? assignment.memberId}:${assignment.status}`,\n text: isTakeover ? `${sourceName} -> ${targetName}` : targetName,\n tone: assignment.status === 'assigned' ? 'warning' : 'success',\n dotColor: this.memberRingColor(assignment.memberId)\n });\n }\n\n return badges.sort((a, b) => {\n const aIsCurrent = a.key.startsWith(`${this.currentUserId()}:`);\n const bIsCurrent = b.key.startsWith(`${this.currentUserId()}:`);\n if (aIsCurrent && !bIsCurrent) return -1;\n if (!aIsCurrent && bIsCurrent) return 1;\n return a.text.localeCompare(b.text);\n });\n });\n\n readonly sharedCountChips = computed(() => {\n if (this.item().visibility !== 'shared') {\n return [] as Array<{ key: string; text: string; tone: 'success' | 'warning' }>;\n }\n\n const byMember = new Map<string, { quantity: number; hasPacked: boolean }>();\n for (const assignment of this.item().assignments ?? []) {\n const quantity = Math.max(1, assignment.quantity ?? 1);\n const prev = byMember.get(assignment.memberId) ?? { quantity: 0, hasPacked: false };\n byMember.set(assignment.memberId, {\n quantity: prev.quantity + quantity,\n hasPacked: prev.hasPacked || assignment.status === 'packed' || assignment.status === 'confirmed'\n });\n }\n\n return Array.from(byMember.entries())\n .map(([memberId, value]) => {\n const member = this.members().find(m => m.id === memberId);\n return {\n key: memberId,\n text: `${member?.name ?? memberId}: ${value.quantity}x`,\n tone: (value.hasPacked ? 'success' : 'warning') as 'success' | 'warning'\n };\n })\n .sort((a, b) => {\n const aIsCurrent = a.key === this.currentUserId();\n const bIsCurrent = b.key === this.currentUserId();\n if (aIsCurrent && !bIsCurrent) return -1;\n if (!aIsCurrent && bIsCurrent) return 1;\n return a.text.localeCompare(b.text);\n });\n });\n\n memberAssignmentStatus(memberId: string): 'confirmed' | 'packed' | 'assigned' | 'none' {\n const assignments = this.item().assignments ?? [];\n const a = assignments.find(a => a.memberId === memberId);\n if (!a) return 'none';\n if (a.status === 'confirmed') return 'confirmed';\n if (a.status === 'packed') return 'packed';\n return 'assigned';\n }\n\n memberAssignedQuantity(memberId: string): number {\n const assignments = this.item().assignments ?? [];\n const assignment = assignments.find(a => a.memberId === memberId);\n if (!assignment) {\n return 0;\n }\n return Math.max(1, assignment.quantity ?? 1);\n }\n\n memberRingTone(memberId: string): 'custom' {\n return 'custom';\n }\n\n memberRingColor(memberId: string): string {\n const status = this.memberAssignmentStatus(memberId);\n if (status === 'confirmed' || status === 'packed') return '#4caf50';\n if (status === 'assigned') return '#f1c84a';\n return '#cad8d0';\n }\n\n memberBadge(memberId: string): C2gAvatarBadge | null {\n const status = this.memberAssignmentStatus(memberId);\n if (status === 'confirmed' || status === 'packed') {\n return { icon: '✓', tone: 'success', ariaLabel: 'Bestätigt' };\n }\n if (status === 'assigned') {\n return { icon: '?', tone: 'neutral', ariaLabel: 'Zugewiesen' };\n }\n return null;\n }\n\n memberBackground(member: C2gPackingListMember): string {\n switch (member.type) {\n case 'child':\n case 'baby':\n return '#fdf2d9';\n case 'pet':\n return '#efe6fb';\n default:\n return '#e8f0ea';\n }\n }\n\n isMemberChecked(memberId: string): boolean {\n return this.item().visibility === 'shared'\n ? this.isSharedAssigned(memberId)\n : this.isAssignmentChecked(memberId);\n }\n\n hasAnyAssignment(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId);\n }\n\n canPackForMember(memberId: string): boolean {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n return memberId === this.currentUserId() || permissions.isOrganizer;\n }\n\n isAssignmentChecked(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId && (a.status === 'packed' || a.status === 'confirmed'));\n }\n\n isSharedAssigned(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId);\n }\n\n canAssignShared(memberId: string): boolean {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n if (permissions.isGuest && memberId !== this.currentUserId()) {\n return false;\n }\n return true;\n }\n\n onSoloToggle(checked: boolean): void {\n this.itemChecked.emit({ itemId: this.item().id, checked });\n }\n\n onPrivateToggle(checked: boolean): void {\n this.itemChecked.emit({ itemId: this.item().id, checked });\n }\n\n onSharedToggle(memberId: string, quantity = 1): void {\n const assigned = !this.isSharedAssigned(memberId);\n const safeQuantity = Math.max(1, quantity);\n\n const label = assigned\n ? `Willst du dich mit ${safeQuantity}x fuer dieses Shared-Item eintragen?`\n : 'Willst du deine Zuordnung fuer dieses Shared-Item entfernen?';\n\n if (!globalThis.confirm(label)) {\n return;\n }\n\n this.itemAssigned.emit({ itemId: this.item().id, memberId, assigned, quantity: assigned ? safeQuantity : undefined });\n }\n\n private setSharedAssignment(memberId: string, assigned: boolean, quantity?: number): void {\n const safeQuantity = quantity !== undefined ? Math.max(1, quantity) : undefined;\n this.itemAssigned.emit({\n itemId: this.item().id,\n memberId,\n assigned,\n quantity: assigned ? safeQuantity : undefined\n });\n }\n\n private setPersonalAssignment(memberId: string, assigned: boolean): void {\n this.itemAssigned.emit({\n itemId: this.item().id,\n memberId,\n assigned\n });\n }\n\n onPersonalToggle(memberId: string): void {\n const checked = !this.isAssignmentChecked(memberId);\n this.personalItemToggled.emit({ itemId: this.item().id, memberId, checked });\n }\n\n deleteItem(): void {\n if (!this.canEditOrDeleteItem()) {\n return;\n }\n this.itemDeleted.emit(this.item().id);\n }\n\n requestEdit(): void {\n if (!this.canEditOrDeleteItem()) {\n return;\n }\n this.itemEditRequested.emit(this.item().id);\n }\n\n requestAssign(): void {\n if (!this.canShowAssignCta()) {\n return;\n }\n if (this.item().visibility === 'personal') {\n this.openPersonalAssignDialog();\n return;\n }\n this.openOverlay();\n }\n\n openPersonalAssignDialog(): void {\n if (this.item().visibility !== 'personal') {\n return;\n }\n\n const candidates = this.personalAssignableMembers();\n if (candidates.length === 0) {\n return;\n }\n\n this.closeCtaMenu();\n this.closeOverlay();\n this.closeDelegateDialog();\n this.closeAvatarDialog();\n this.quantityPickerOpen.set(false);\n this.personalAssignSearch.set('');\n this.personalAssignMemberId.set(candidates[0].id);\n this.personalAssignDialogOpen.set(true);\n }\n\n closePersonalAssignDialog(): void {\n this.personalAssignDialogOpen.set(false);\n this.personalAssignSearch.set('');\n this.personalAssignMemberId.set(null);\n }\n\n onPersonalAssignSearch(event: Event): void {\n this.personalAssignSearch.set((event.target as HTMLInputElement).value);\n const filtered = this.filteredPersonalAssignableMembers();\n const selectedMemberId = this.personalAssignMemberId();\n if (!selectedMemberId || !filtered.some(member => member.id === selectedMemberId)) {\n this.personalAssignMemberId.set(filtered[0]?.id ?? null);\n }\n }\n\n selectPersonalAssignMember(memberId: string): void {\n this.personalAssignMemberId.set(memberId);\n }\n\n confirmPersonalAssignment(): void {\n const member = this.selectedPersonalAssignMember();\n if (!member) {\n return;\n }\n\n if (!globalThis.confirm(`${member.name} diesem Personal-Item zuweisen?`)) {\n return;\n }\n\n this.setPersonalAssignment(member.id, true);\n this.closePersonalAssignDialog();\n }\n\n onPersonalAvatarClick(memberId: string): void {\n if (this.item().visibility !== 'personal' || !this.canManagePersonalAssignments() || !this.hasAnyAssignment(memberId)) {\n return;\n }\n\n const member = this.members().find(entry => entry.id === memberId);\n if (!globalThis.confirm(`${member?.name ?? memberId} von diesem Personal-Item entfernen?`)) {\n return;\n }\n\n this.setPersonalAssignment(memberId, false);\n }\n\n onAssignMeToggle(): void {\n if (this.selfAssignedToShared()) {\n this.openDelegateDialog();\n return;\n }\n\n if (this.requiredQuantity() <= 1) {\n this.onSharedToggle(this.currentUserId(), 1);\n return;\n }\n\n const missing = this.sharedMissingSlots();\n if (missing <= 0) {\n return;\n }\n\n this.quantityPickerValue.set(Math.min(this.quantityPickerValue(), missing));\n this.quantityPickerOpen.update(open => !open);\n }\n\n openDelegateDialog(): void {\n if (this.item().visibility !== 'shared') {\n return;\n }\n const candidates = this.delegateCandidates();\n if (candidates.length === 0) {\n return;\n }\n this.closeAvatarDialog();\n this.quantityPickerOpen.set(false);\n this.delegateMemberId.set(candidates[0].id);\n this.delegateQuantity.set(1);\n this.delegateDialogOpen.set(true);\n }\n\n closeDelegateDialog(): void {\n this.delegateDialogOpen.set(false);\n this.delegateMemberId.set(null);\n this.delegateQuantity.set(1);\n }\n\n onDelegateMemberChange(event: Event): void {\n this.delegateMemberId.set((event.target as HTMLSelectElement).value || null);\n }\n\n increaseDelegateQuantity(): void {\n this.delegateQuantity.update(value => Math.min(this.requiredQuantity(), value + 1));\n }\n\n decreaseDelegateQuantity(): void {\n this.delegateQuantity.update(value => Math.max(1, value - 1));\n }\n\n confirmDelegateAssignment(): void {\n const memberId = this.delegateMemberId();\n if (!memberId) {\n return;\n }\n\n const target = this.members().find(member => member.id === memberId);\n const quantity = Math.max(1, this.delegateQuantity());\n const confirmationText = `Auch User mit Account können von anderen übernommen werden.`;\n\n if (!globalThis.confirm(`Zuordnung setzen: ${target?.name ?? memberId} (${quantity}x)?\\n${confirmationText}`)) {\n return;\n }\n\n this.setSharedAssignment(memberId, true, quantity);\n this.closeDelegateDialog();\n }\n\n onSharedAvatarClick(memberId: string): void {\n if (this.item().visibility !== 'shared') {\n return;\n }\n const quantity = this.memberAssignedQuantity(memberId);\n if (quantity <= 0) {\n return;\n }\n this.closeDelegateDialog();\n this.quantityPickerOpen.set(false);\n this.avatarDialogMemberId.set(memberId);\n this.avatarDialogQuantity.set(quantity);\n this.avatarDialogOpen.set(true);\n }\n\n closeAvatarDialog(): void {\n this.avatarDialogOpen.set(false);\n this.avatarDialogMemberId.set(null);\n this.avatarDialogQuantity.set(1);\n }\n\n increaseAvatarDialogQuantity(): void {\n this.avatarDialogQuantity.update(value => Math.min(this.requiredQuantity(), value + 1));\n }\n\n decreaseAvatarDialogQuantity(): void {\n this.avatarDialogQuantity.update(value => Math.max(0, value - 1));\n }\n\n confirmAvatarDialogUpdate(): void {\n const memberId = this.avatarDialogMemberId();\n if (!memberId) {\n return;\n }\n\n const quantity = this.avatarDialogQuantity();\n const member = this.members().find(m => m.id === memberId);\n\n if (quantity === 0) {\n if (!globalThis.confirm(`Zuordnung fuer ${member?.name ?? memberId} entfernen?`)) {\n return;\n }\n this.setSharedAssignment(memberId, false);\n this.closeAvatarDialog();\n return;\n }\n\n if (!globalThis.confirm(`Menge fuer ${member?.name ?? memberId} auf ${quantity} setzen?`)) {\n return;\n }\n this.setSharedAssignment(memberId, true, quantity);\n this.closeAvatarDialog();\n }\n\n increaseSelfAssignQuantity(): void {\n const max = this.selfAssignableMaxQuantity();\n this.quantityPickerValue.update(value => Math.min(max, value + 1));\n }\n\n decreaseSelfAssignQuantity(): void {\n this.quantityPickerValue.update(value => Math.max(1, value - 1));\n }\n\n cancelSelfAssignQuantity(): void {\n this.quantityPickerOpen.set(false);\n this.quantityPickerValue.set(1);\n }\n\n confirmSelfAssignQuantity(): void {\n const quantity = Math.max(1, Math.min(this.quantityPickerValue(), this.selfAssignableMaxQuantity()));\n this.quantityPickerOpen.set(false);\n if (!globalThis.confirm(`Willst du dich mit ${quantity}x fuer dieses Shared-Item eintragen?`)) {\n return;\n }\n this.setSharedAssignment(this.currentUserId(), true, quantity);\n }\n\n toggleCtaMenu(): void {\n this.ctaMenuOpen.update(open => !open);\n }\n\n closeCtaMenu(): void {\n this.ctaMenuOpen.set(false);\n }\n\n onMenuAssign(): void {\n this.closeCtaMenu();\n this.requestAssign();\n }\n\n onMenuEdit(): void {\n this.closeCtaMenu();\n this.requestEdit();\n }\n\n onMenuDelete(): void {\n this.closeCtaMenu();\n this.deleteItem();\n }\n\n openOverlay(): void {\n this.closeCtaMenu();\n this.overlaySearch.set('');\n this.quantityPickerOpen.set(false);\n this.closeDelegateDialog();\n this.closeAvatarDialog();\n this.closePersonalAssignDialog();\n this.overlayOpen.set(true);\n this.memberOverlayRequested.emit({\n itemId: this.item().id,\n itemName: this.item().name,\n members: this.overlayMembers()\n });\n }\n\n closeOverlay(): void {\n this.overlayOpen.set(false);\n this.overlaySearch.set('');\n }\n\n onOverlaySearch(event: Event): void {\n this.overlaySearch.set((event.target as HTMLInputElement).value);\n }\n\n toggleFromOverlay(memberId: string): void {\n if (this.item().visibility === 'shared') {\n this.onSharedToggle(memberId);\n return;\n }\n\n if (this.item().visibility === 'personal') {\n this.onPersonalToggle(memberId);\n }\n }\n\n privateItemOwnerLabel(): string {\n if (!this.item().privateOwnerVisible) {\n return 'Privat';\n }\n\n const ownerId = this.item().createdBy ?? this.item().assignments?.[0]?.memberId;\n const owner = this.members().find(member => member.id === ownerId);\n return owner?.name ?? 'Privat';\n }\n}\n","<div class=\"c2g-pl-item\" [class.c2g-pl-item--packed]=\"isPacked()\">\n\n <div class=\"c2g-pl-item__row\">\n\n <!-- Solo: echte Checkbox -->\n @if (permissions().isSolo) {\n <button\n class=\"c2g-pl-item__check\"\n [class.c2g-pl-item__check--done]=\"isPacked()\"\n type=\"button\"\n [disabled]=\"permissions().readOnly\"\n [attr.aria-pressed]=\"isPacked()\"\n [attr.aria-label]=\"isPacked() ? 'Als ungepackt markieren' : 'Als gepackt markieren'\"\n (click)=\"onSoloToggle(!isPacked())\">\n @if (isPacked()) {\n <span class=\"c2g-pl-item__check-mark\" aria-hidden=\"true\">✓</span>\n }\n </button>\n } @else {\n <!-- Gruppen-Item: farbiger Fortschritts-Dot -->\n <span\n class=\"c2g-pl-item__dot\"\n [class.c2g-pl-item__dot--danger]=\"progressTone() === 'danger'\"\n [class.c2g-pl-item__dot--warning]=\"progressTone() === 'warning'\"\n [class.c2g-pl-item__dot--success]=\"progressTone() === 'success'\"\n [attr.title]=\"progressRatioText() + ' bereit'\"\n aria-hidden=\"true\">\n </span>\n }\n\n <!-- Body -->\n <div class=\"c2g-pl-item__body\">\n\n <!-- Zeile 1: Name + Tags + Mengen-Badge -->\n <div class=\"c2g-pl-item__title-row\">\n <span class=\"c2g-pl-item__name\">{{ item().name }}</span>\n <div class=\"c2g-pl-item__tags\">\n @if (item().essential) {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--essential\">Pflicht</span>\n }\n @if (item().weather) {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--weather\">Wetter</span>\n }\n @if (item().visibility === 'private') {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--private\">🔒 {{ privateItemOwnerLabel() }}</span>\n }\n </div>\n\n @if (quantityBadge(); as badge) {\n <c2g-badge\n class=\"c2g-pl-item__qty-badge\"\n [value]=\"badge.value\"\n [tone]=\"badge.tone\"\n variant=\"subtle\"\n size=\"sm\"\n [attr.aria-label]=\"'Gepackt: ' + badge.value\">\n </c2g-badge>\n }\n </div>\n\n <!-- Zeile 2: Mitglieder / Avatare -->\n @if (!permissions().isSolo) {\n <div class=\"c2g-pl-item__members-row\">\n\n @if (item().visibility === 'shared') {\n <!-- Assigned-Avatare -->\n @for (member of checkedPreview(); track member.id) {\n <button\n class=\"c2g-pl-item__avatar-btn\"\n type=\"button\"\n [disabled]=\"permissions().readOnly\"\n [attr.aria-label]=\"member.name + ' – antippen zum Bearbeiten'\"\n (click)=\"onSharedAvatarClick(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\"\n [ringTone]=\"memberRingTone(member.id)\"\n [ringColor]=\"memberRingColor(member.id)\"\n [badge]=\"memberBadge(member.id)\">\n </c2g-avatar>\n </button>\n }\n\n @if (hiddenCheckedCount() > 0) {\n <div class=\"c2g-pl-item__more-wrap\">\n <button class=\"c2g-pl-item__more\" type=\"button\" (click)=\"openOverlay()\">\n +{{ hiddenCheckedCount() }}\n </button>\n @if (overlayOpen()) {\n <div class=\"c2g-pl-item__overlay\" role=\"dialog\" aria-label=\"Alle Mitglieder\">\n <div class=\"c2g-pl-item__overlay-head\">\n <strong>{{ item().name }}</strong>\n <button type=\"button\" class=\"c2g-pl-item__overlay-close\" (click)=\"closeOverlay()\">✕</button>\n </div>\n <input class=\"c2g-pl-item__overlay-search\" type=\"search\" [value]=\"overlaySearch()\" placeholder=\"Mitglied suchen...\" (input)=\"onOverlaySearch($event)\" />\n <div class=\"c2g-pl-item__overlay-list\">\n @for (member of filteredOverlayMembers(); track member.memberId) {\n <button class=\"c2g-pl-item__overlay-row\" type=\"button\" [disabled]=\"!member.canToggle\" (click)=\"toggleFromOverlay(member.memberId)\">\n <span>{{ member.memberName }}</span>\n <span class=\"c2g-pl-item__overlay-status\" [class.c2g-pl-item__overlay-status--done]=\"member.checked\">{{ member.checked ? '✓ bereit' : 'ausstehend' }}</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (checkedMembers().length === 0) {\n <span class=\"c2g-pl-item__empty\">Noch niemand eingetragen</span>\n }\n\n <!-- + Eintragen Button -->\n @if (canSelfAssignShared()) {\n <button\n class=\"c2g-pl-item__join-btn\"\n [class.c2g-pl-item__join-btn--active]=\"selfAssignedToShared()\"\n type=\"button\"\n (click)=\"onAssignMeToggle()\">\n {{ joinBtnLabel() }}\n </button>\n }\n\n } @else if (item().visibility === 'personal') {\n <!-- Personal: wer hat es für sich -->\n @for (member of personalAssignedPreview(); track member.id) {\n <button\n class=\"c2g-pl-item__avatar-btn\"\n type=\"button\"\n [disabled]=\"!canManagePersonalAssignments()\"\n [attr.aria-label]=\"member.name + ' – antippen zum Entfernen'\"\n (click)=\"onPersonalAvatarClick(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\"\n [ringTone]=\"memberRingTone(member.id)\"\n [ringColor]=\"memberRingColor(member.id)\"\n [badge]=\"memberBadge(member.id)\">\n </c2g-avatar>\n </button>\n }\n\n @if (personalHiddenAssignedCount() > 0) {\n <div class=\"c2g-pl-item__more-wrap\">\n <button class=\"c2g-pl-item__more\" type=\"button\" (click)=\"openOverlay()\">\n +{{ personalHiddenAssignedCount() }}\n </button>\n @if (overlayOpen()) {\n <div class=\"c2g-pl-item__overlay\" role=\"dialog\" aria-label=\"Alle Mitglieder\">\n <div class=\"c2g-pl-item__overlay-head\">\n <strong>{{ item().name }}</strong>\n <button type=\"button\" class=\"c2g-pl-item__overlay-close\" (click)=\"closeOverlay()\">✕</button>\n </div>\n <input class=\"c2g-pl-item__overlay-search\" type=\"search\" [value]=\"overlaySearch()\" placeholder=\"Mitglied suchen...\" (input)=\"onOverlaySearch($event)\" />\n <div class=\"c2g-pl-item__overlay-list\">\n @for (member of filteredOverlayMembers(); track member.memberId) {\n <button class=\"c2g-pl-item__overlay-row\" type=\"button\" [disabled]=\"!member.canToggle\" (click)=\"toggleFromOverlay(member.memberId)\">\n <span>{{ member.memberName }}</span>\n <span class=\"c2g-pl-item__overlay-status\" [class.c2g-pl-item__overlay-status--done]=\"member.checked\">{{ member.checked ? '✓ bereit' : 'ausstehend' }}</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (personalAssignedMembers().length === 0) {\n <span class=\"c2g-pl-item__empty\">Nicht zugewiesen</span>\n }\n\n @if (canManagePersonalAssignments()) {\n <button class=\"c2g-pl-item__join-btn\" type=\"button\" (click)=\"openPersonalAssignDialog()\">\n + Zuweisen\n </button>\n }\n }\n\n </div>\n }\n\n </div>\n\n <!-- Aktions-Spalte: ⋯ Menü -->\n @if (canShowAssignCta() || canEditOrDeleteItem()) {\n <div class=\"c2g-pl-item__cta\">\n <button\n class=\"c2g-pl-item__menu-trigger\"\n type=\"button\"\n aria-label=\"Aktionen\"\n [attr.aria-expanded]=\"ctaMenuOpen()\"\n (click)=\"toggleCtaMenu()\">\n ⋯\n </button>\n\n @if (ctaMenuOpen()) {\n <div class=\"c2g-pl-item__menu\" role=\"menu\">\n @if (canShowAssignCta()) {\n <button class=\"c2g-pl-item__menu-item\" type=\"button\" role=\"menuitem\" (click)=\"onMenuAssign()\">\n <span class=\"c2g-pl-item__menu-icon\">👤</span> {{ isPlanner() ? 'Zuweisen' : 'Einpacken' }}\n </button>\n }\n @if (canEditOrDeleteItem()) {\n <button class=\"c2g-pl-item__menu-item\" type=\"button\" role=\"menuitem\" (click)=\"onMenuEdit()\">\n <span class=\"c2g-pl-item__menu-icon\">✏️</span> Bearbeiten\n </button>\n <div class=\"c2g-pl-item__menu-divider\"></div>\n <button class=\"c2g-pl-item__menu-item c2g-pl-item__menu-item--danger\" type=\"button\" role=\"menuitem\" (click)=\"onMenuDelete()\">\n <span class=\"c2g-pl-item__menu-icon\">🗑</span> Löschen\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Quantity Picker (Shared: eigene Menge) -->\n @if (quantityPickerOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"group\" aria-label=\"Menge wählen\">\n <span class=\"c2g-pl-item__picker-label\">{{ pickerLabel() }}</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseSelfAssignQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ quantityPickerValue() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseSelfAssignQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmSelfAssignQuantity()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"cancelSelfAssignQuantity()\">Abbrechen</button>\n </div>\n }\n\n <!-- Delegate Dialog (Organizer weist anderem zu) -->\n @if (delegateDialogOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"dialog\" aria-label=\"Mitglied zuweisen\">\n <span class=\"c2g-pl-item__picker-label\">{{ delegatePickerLabel() }}</span>\n <select class=\"c2g-pl-item__select\" [value]=\"delegateMemberId() ?? ''\" (change)=\"onDelegateMemberChange($event)\">\n @for (member of delegateCandidates(); track member.id) {\n <option [value]=\"member.id\">{{ member.name }}</option>\n }\n </select>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseDelegateQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ delegateQuantity() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseDelegateQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmDelegateAssignment()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closeDelegateDialog()\">Abbrechen</button>\n </div>\n }\n\n <!-- Avatar Dialog (Menge eines Zugewiesenen ändern) -->\n @if (avatarDialogOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"dialog\" aria-label=\"Zuteilung bearbeiten\">\n <span class=\"c2g-pl-item__picker-label\">Menge anpassen – 0 zum Entfernen</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseAvatarDialogQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ avatarDialogQuantity() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseAvatarDialogQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmAvatarDialogUpdate()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closeAvatarDialog()\">Abbrechen</button>\n </div>\n }\n\n <!-- Personal Assign Panel -->\n @if (personalAssignDialogOpen()) {\n <div class=\"c2g-pl-item__assign-panel\" role=\"dialog\" aria-label=\"Mitglied zuweisen\">\n <input\n class=\"c2g-pl-item__assign-search\"\n type=\"search\"\n [value]=\"personalAssignSearch()\"\n placeholder=\"Mitglied suchen...\"\n (input)=\"onPersonalAssignSearch($event)\" />\n <div class=\"c2g-pl-item__assign-list\">\n @for (member of filteredPersonalAssignableMembers(); track member.id) {\n <button\n class=\"c2g-pl-item__assign-option\"\n [class.c2g-pl-item__assign-option--active]=\"personalAssignMemberId() === member.id\"\n type=\"button\"\n (click)=\"selectPersonalAssignMember(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\">\n </c2g-avatar>\n <span>{{ member.name }}</span>\n </button>\n }\n </div>\n <div class=\"c2g-pl-item__assign-footer\">\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" [disabled]=\"!selectedPersonalAssignMember()\" (click)=\"confirmPersonalAssignment()\">Zuweisen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closePersonalAssignDialog()\">Abbrechen</button>\n </div>\n </div>\n }\n\n <!-- Hinweis -->\n @if (item().hint) {\n <p class=\"c2g-pl-item__hint\">{{ item().hint }}</p>\n }\n\n <!-- Shared: Mengen-Chips -->\n @if (sharedCountChips().length > 0) {\n <div class=\"c2g-pl-item__chip-row\">\n @for (chip of sharedCountChips(); track chip.key) {\n <c2g-badge [value]=\"chip.text\" [tone]=\"chip.tone\" variant=\"subtle\" size=\"sm\"></c2g-badge>\n }\n </div>\n }\n\n <!-- Personal: Status-Chips -->\n @if (personalStatusBadges().length > 0) {\n <div class=\"c2g-pl-item__chip-row\">\n @for (badge of personalStatusBadges(); track badge.key) {\n <c2g-badge\n [value]=\"badge.text\"\n [tone]=\"badge.tone\"\n variant=\"subtle\"\n size=\"sm\"\n [dot]=\"true\"\n [dotColor]=\"badge.dotColor\">\n </c2g-badge>\n }\n </div>\n }\n\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { resolvePackingCategory } from './packing-list.categories';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListMember,\n C2gPackingListPermissions\n} from './packing-list.models';\nimport { PackingListItemComponent } from './packing-list-item.component';\n\n@Component({\n selector: 'c2g-packing-list-category',\n standalone: true,\n imports: [PackingListItemComponent, MatIconModule],\n templateUrl: './packing-list-category.component.html',\n styleUrls: ['./packing-list-category.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListCategoryComponent {\n readonly categoryKey = input.required<string>();\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly selectedMemberIds = input<string[]>([]);\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly expanded = input(true);\n\n readonly toggle = output<string>();\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n\n readonly category = computed(() => resolvePackingCategory(this.categoryKey()));\n\n readonly stats = computed(() => {\n const list = this.items();\n return {\n total: list.length,\n essential: list.filter(item => !!item.essential).length,\n packed: list.filter(item => (item.assignments ?? []).some(a => a.status === 'packed' || a.status === 'confirmed')).length\n };\n });\n\n onToggle(): void {\n this.toggle.emit(this.categoryKey());\n }\n}\n","<section class=\"c2g-pl-category\">\n <button type=\"button\" class=\"c2g-pl-category__header\" [class.c2g-pl-category__header--done]=\"stats().packed === stats().total && stats().total > 0\" (click)=\"onToggle()\">\n <mat-icon class=\"c2g-pl-category__icon\" aria-hidden=\"true\">{{ category().icon }}</mat-icon>\n <span class=\"c2g-pl-category__label\">{{ category().label ?? category().labelKey }}</span>\n <span class=\"c2g-pl-category__meta\">{{ stats().packed }}/{{ stats().total }}</span>\n <span class=\"c2g-pl-category__chevron\" [class.c2g-pl-category__chevron--open]=\"expanded()\" aria-hidden=\"true\">▾</span>\n </button>\n\n @if (expanded()) {\n <div class=\"c2g-pl-category__items\">\n @for (item of items(); track item.id) {\n <c2g-packing-list-item\n [item]=\"item\"\n [members]=\"members()\"\n [selectedMemberIds]=\"selectedMemberIds()\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-item>\n }\n </div>\n }\n</section>\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport {\n C2gPackingListFilterState,\n C2gPackingListLabels,\n C2gPackingListMember,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-filters',\n standalone: true,\n templateUrl: './packing-list-filters.component.html',\n styleUrls: ['./packing-list-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListFiltersComponent {\n readonly filter = input.required<C2gPackingListFilterState>();\n readonly members = input<C2gPackingListMember[]>([]);\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly disabled = input(false);\n\n readonly filterChange = output<C2gPackingListFilterState>();\n readonly overlayRequested = output<void>();\n\n readonly membersPanelOpen = signal(false);\n readonly memberQuery = signal('');\n\n readonly memberSelectionLabel = computed(() => {\n const selected = this.filter().memberIds.length;\n if (selected === 0) {\n return 'Alle User';\n }\n if (selected === 1) {\n return '1 User';\n }\n return `${selected} User`;\n });\n\n readonly filteredMembers = computed(() => {\n const query = this.memberQuery().trim().toLowerCase();\n if (!query) {\n return this.members();\n }\n return this.members().filter(member => {\n const searchable = `${member.name} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n onQueryChange(event: Event): void {\n const query = (event.target as HTMLInputElement).value;\n this.filterChange.emit({ ...this.filter(), query });\n }\n\n onVisibilityChange(event: Event): void {\n const visibility = (event.target as HTMLSelectElement).value as C2gPackingListFilterState['visibility'];\n this.filterChange.emit({ ...this.filter(), visibility });\n }\n\n onEssentialsOnlyToggle(event: Event): void {\n const essentialsOnly = (event.target as HTMLInputElement).checked;\n this.filterChange.emit({ ...this.filter(), essentialsOnly });\n }\n\n toggleMembersPanel(): void {\n if (this.disabled()) {\n return;\n }\n this.membersPanelOpen.update(open => !open);\n }\n\n onMemberSearch(event: Event): void {\n this.memberQuery.set((event.target as HTMLInputElement).value);\n }\n\n isMemberSelected(memberId: string): boolean {\n return this.filter().memberIds.includes(memberId);\n }\n\n toggleMember(memberId: string): void {\n if (this.disabled()) {\n return;\n }\n\n const selected = new Set(this.filter().memberIds);\n if (selected.has(memberId)) {\n selected.delete(memberId);\n } else {\n selected.add(memberId);\n }\n this.filterChange.emit({ ...this.filter(), memberIds: Array.from(selected) });\n }\n\n clearMemberSelection(): void {\n this.filterChange.emit({ ...this.filter(), memberIds: [] });\n }\n\n selectAllMembers(): void {\n this.filterChange.emit({ ...this.filter(), memberIds: this.members().map(member => member.id) });\n }\n\n requestExternalOverlay(): void {\n this.overlayRequested.emit();\n }\n}\n","<div class=\"c2g-pl-filters\">\n <input\n class=\"c2g-pl-filters__search\"\n type=\"search\"\n [value]=\"filter().query\"\n [placeholder]=\"labels().searchPlaceholderKey\"\n [disabled]=\"disabled()\"\n (input)=\"onQueryChange($event)\" />\n\n <select\n class=\"c2g-pl-filters__visibility\"\n [value]=\"filter().visibility\"\n [disabled]=\"disabled()\"\n (change)=\"onVisibilityChange($event)\">\n <option value=\"all\">{{ labels().showAllVisibilityKey }}</option>\n <option value=\"shared\">{{ labels().sharedVisibilityKey }}</option>\n <option value=\"personal\">{{ labels().personalVisibilityKey }}</option>\n <option value=\"private\">{{ labels().privateVisibilityKey }}</option>\n </select>\n\n <label class=\"c2g-pl-filters__essential\">\n <input\n type=\"checkbox\"\n [checked]=\"filter().essentialsOnly\"\n [disabled]=\"disabled()\"\n (change)=\"onEssentialsOnlyToggle($event)\" />\n <span>{{ labels().essentialsOnlyKey }}</span>\n </label>\n\n <div class=\"c2g-pl-filters__member-filter\">\n <button\n type=\"button\"\n class=\"c2g-pl-filters__member-trigger\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"membersPanelOpen()\"\n (click)=\"toggleMembersPanel()\">\n <span>{{ memberSelectionLabel() }}</span>\n <span>{{ membersPanelOpen() ? '▴' : '▾' }}</span>\n </button>\n\n @if (membersPanelOpen()) {\n <div class=\"c2g-pl-filters__member-panel\" role=\"dialog\" aria-label=\"User-Filter\">\n <input\n class=\"c2g-pl-filters__member-search\"\n type=\"search\"\n [value]=\"memberQuery()\"\n placeholder=\"User suchen\"\n (input)=\"onMemberSearch($event)\" />\n\n <div class=\"c2g-pl-filters__member-actions\">\n <button type=\"button\" (click)=\"selectAllMembers()\">Alle</button>\n <button type=\"button\" (click)=\"clearMemberSelection()\">Zuruecksetzen</button>\n <button type=\"button\" (click)=\"requestExternalOverlay()\">Externe View</button>\n </div>\n\n <div class=\"c2g-pl-filters__member-list\">\n @for (member of filteredMembers(); track member.id) {\n <label class=\"c2g-pl-filters__member-option\">\n <input\n type=\"checkbox\"\n [checked]=\"isMemberSelected(member.id)\"\n (change)=\"toggleMember(member.id)\" />\n <span>{{ member.name }}</span>\n </label>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListLabels,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListPermissions,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\nimport { PackingListItemComponent } from './packing-list-item.component';\n\n@Component({\n selector: 'c2g-packing-list-private-list',\n standalone: true,\n imports: [PackingListItemComponent],\n templateUrl: './packing-list-private-list.component.html',\n styleUrls: ['./packing-list-private-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListPrivateListComponent {\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly selectedMemberIds = input<string[]>([]);\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n\n readonly privateItems = computed(() => this.items().filter(item => item.visibility === 'private'));\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n}\n","@if (privateItems().length > 0) {\n <section class=\"c2g-pl-private\">\n <h3>{{ labels().privateSectionTitleKey }}</h3>\n <div class=\"c2g-pl-private__items\">\n @for (item of privateItems(); track item.id) {\n <c2g-packing-list-item\n [item]=\"item\"\n [members]=\"members()\"\n [selectedMemberIds]=\"selectedMemberIds()\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-item>\n }\n </div>\n </section>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n C2gPackingVisibility,\n C2gPackingListLabels,\n C2gPackingListPermissions,\n C2gPackingCategoryInfo,\n C2gPackingListItem,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\nimport { C2G_PACKING_CATEGORY_INFO } from './packing-list.categories';\nimport { ButtonComponent } from '@humbeldore/c2g-ui';\nimport { RadioGroupComponent } from '@humbeldore/c2g-ui';\nimport { CheckboxComponent } from '@humbeldore/c2g-ui';\nimport { SelectComponent } from '@humbeldore/c2g-ui';\nimport { InputComponent } from '@humbeldore/c2g-ui';\nimport { TextareaComponent } from '@humbeldore/c2g-ui';\n\n@Component({\n selector: 'c2g-packing-list-item-create',\n standalone: true,\n imports: [CommonModule, FormsModule, ButtonComponent, RadioGroupComponent, CheckboxComponent, SelectComponent, InputComponent, TextareaComponent],\n templateUrl: './packing-list-item-create.component.html',\n styleUrls: ['./packing-list-item-create.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListItemCreateComponent {\n readonly permissions = input<C2gPackingListPermissions>({\n isOrganizer: false,\n isGuest: false,\n isSolo: false,\n readOnly: false\n });\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly readOnly = input(false);\n readonly categories = input<C2gPackingCategoryInfo[]>(Object.values(C2G_PACKING_CATEGORY_INFO));\n\n readonly itemCreated = output<Partial<C2gPackingListItem>>();\n\n readonly dialogOpen = signal(false);\n readonly formData = signal({\n name: '',\n category: Object.values(C2G_PACKING_CATEGORY_INFO)[0]?.key ?? 'other',\n visibility: 'private' as C2gPackingVisibility,\n essential: false,\n quantity: 1,\n weightKg: undefined as number | undefined,\n packedVolumeL: undefined as number | undefined,\n hint: ''\n });\n\n readonly availableVisibilities = computed(() => {\n const perms = this.permissions();\n const labels = this.labels();\n const visibilities: { value: C2gPackingVisibility; label: string }[] = [];\n\n // Private is always available\n visibilities.push({\n value: 'private',\n label: labels.privateVisibilityKey ?? 'Private'\n });\n\n // Personal is available if not a guest\n if (!perms.isGuest) {\n visibilities.push({\n value: 'personal',\n label: labels.personalVisibilityKey ?? 'Personal'\n });\n }\n\n // Shared is available for organizers or if tour allows members\n if (perms.isOrganizer || perms.canMembersAddSharedItems) {\n visibilities.push({\n value: 'shared',\n label: labels.sharedVisibilityKey ?? 'Shared'\n });\n }\n\n return visibilities;\n });\n\n readonly categoryOptions = computed(() => {\n return this.categories().map(cat => ({\n value: cat.key as string,\n label: cat.label || cat.key\n }));\n });\n\n openDialog(): void {\n this.dialogOpen.set(true);\n }\n\n closeDialog(): void {\n this.dialogOpen.set(false);\n this.resetForm();\n }\n\n resetForm(): void {\n this.formData.set({\n name: '',\n category: Object.values(C2G_PACKING_CATEGORY_INFO)[0]?.key ?? 'other',\n visibility: this.availableVisibilities()[0]?.value ?? 'private',\n essential: false,\n quantity: 1,\n weightKg: undefined,\n packedVolumeL: undefined,\n hint: ''\n });\n }\n\n submit(): void {\n const data = this.formData();\n if (!data.name.trim()) {\n return;\n }\n\n const newItem: Partial<C2gPackingListItem> = {\n name: data.name.trim(),\n category: data.category,\n visibility: data.visibility,\n essential: data.essential,\n quantity: data.quantity > 0 ? data.quantity : undefined,\n weightKg: data.weightKg && data.weightKg > 0 ? data.weightKg : undefined,\n packedVolumeL: data.packedVolumeL && data.packedVolumeL > 0 ? data.packedVolumeL : undefined,\n hint: data.hint.trim() || undefined\n };\n\n this.itemCreated.emit(newItem);\n this.closeDialog();\n }\n\n updateVisibility(visibility: C2gPackingVisibility): void {\n this.formData.update(data => ({ ...data, visibility }));\n }\n\n getCategoryLabel(categoryKey: string): string {\n return this.categories().find(c => c.key === categoryKey)?.label ?? categoryKey;\n }\n}\n","<c2g-button\n variant=\"secondary\"\n size=\"md\"\n icon=\"+\"\n [disabled]=\"readOnly()\"\n (clicked)=\"openDialog()\">\n {{ labels().addItemKey || 'Item hinzufügen' }}\n</c2g-button>\n\n@if (dialogOpen()) {\n <div class=\"c2g-pl-item-create__overlay\" (click)=\"closeDialog()\"></div>\n <dialog class=\"c2g-pl-item-create__dialog\" open>\n <div class=\"c2g-pl-item-create__header\">\n <h2>{{ labels().createItemKey || 'Neues Item' }}</h2>\n <c2g-button\n variant=\"icon\"\n size=\"sm\"\n icon=\"✕\"\n aria-label=\"Schließen\"\n (clicked)=\"closeDialog()\">\n </c2g-button>\n </div>\n\n <form class=\"c2g-pl-item-create__form\" (ngSubmit)=\"submit()\">\n <!-- Name Input -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().itemNameKey || 'Name'\"\n [required]=\"true\"\n [(ngModel)]=\"formData().name\"\n [ngModelOptions]=\"{ updateOn: 'blur' }\"\n name=\"name\"\n placeholder=\"z.B. Zelt, Schlafsack...\">\n </c2g-input>\n </div>\n\n <!-- Category Select -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-select\n [label]=\"(labels().categoryKey || 'Kategorie') + ' *'\"\n [options]=\"categoryOptions()\"\n [required]=\"true\"\n [(ngModel)]=\"formData().category\"\n name=\"category\">\n </c2g-select>\n </div>\n\n <!-- Visibility Radio -->\n @if (availableVisibilities().length > 1) {\n <div class=\"c2g-pl-item-create__field\">\n <c2g-radio-group\n [label]=\"(labels().visibilityKey || 'Sichtbarkeit') + ' *'\"\n [options]=\"availableVisibilities()\"\n [(ngModel)]=\"formData().visibility\"\n name=\"visibility\"\n orientation=\"vertical\">\n </c2g-radio-group>\n </div>\n }\n\n <!-- Essential Checkbox -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-checkbox\n [label]=\"labels().essentialKey || 'Essentiell'\"\n [(ngModel)]=\"formData().essential\"\n name=\"essential\">\n </c2g-checkbox>\n </div>\n\n <!-- Quantity -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().quantityKey || 'Menge'\"\n [(ngModel)]=\"formData().quantity\"\n name=\"quantity\"\n placeholder=\"z.B. 1\">\n </c2g-input>\n </div>\n\n <!-- Weight -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().weightKey || 'Gewicht (kg)'\"\n [(ngModel)]=\"formData().weightKg\"\n name=\"weightKg\"\n placeholder=\"z.B. 0.5\">\n </c2g-input>\n </div>\n\n <!-- Volume -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().volumeKey || 'Volumen (l)'\"\n [(ngModel)]=\"formData().packedVolumeL\"\n name=\"packedVolumeL\"\n placeholder=\"z.B. 1.5\">\n </c2g-input>\n </div>\n\n <!-- Hint -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-textarea\n [label]=\"labels().hintKey || 'Notiz'\"\n [(ngModel)]=\"formData().hint\"\n name=\"hint\"\n [rows]=\"2\"\n placeholder=\"z.B. Schlafsack für Kinder, Wetterschutz...\">\n </c2g-textarea>\n </div>\n\n <!-- Buttons -->\n <div class=\"c2g-pl-item-create__actions\">\n <c2g-button\n type=\"button\"\n variant=\"secondary\"\n size=\"md\"\n (clicked)=\"closeDialog()\">\n {{ labels().cancelKey || 'Abbrechen' }}\n </c2g-button>\n <c2g-button\n type=\"submit\"\n variant=\"primary\"\n size=\"md\"\n [disabled]=\"!formData().name.trim()\">\n {{ labels().createKey || 'Erstellen' }}\n </c2g-button>\n </div>\n </form>\n </dialog>\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\nimport { PackingListCategoryComponent } from './packing-list-category.component';\nimport { PackingListFiltersComponent } from './packing-list-filters.component';\nimport { PackingListPrivateListComponent } from './packing-list-private-list.component';\nimport { PackingListItemCreateComponent } from './packing-list-item-create.component';\nimport {\n C2gPackingListFilterState,\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListLabels,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListPermissions,\n C2gPackingCategoryInfo,\n C2gPackingListConfig,\n C2gPackingListSortState,\n DEFAULT_PACKING_LIST_LABEL_KEYS,\n DEFAULT_PACKING_LIST_CONFIG\n} from './packing-list.models';\nimport { C2G_PACKING_CATEGORY_INFO } from './packing-list.categories';\n\n@Component({\n selector: 'c2g-packing-list',\n standalone: true,\n imports: [\n PackingListFiltersComponent,\n PackingListCategoryComponent,\n PackingListPrivateListComponent,\n PackingListItemCreateComponent\n ],\n templateUrl: './packing-list.component.html',\n styleUrls: ['./packing-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListComponent<TField extends string = string> {\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly currentUserId = input.required<string>();\n readonly permissions = input<C2gPackingListPermissions>({\n isOrganizer: false,\n isGuest: false,\n isSolo: false,\n readOnly: false\n });\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly categories = input<C2gPackingCategoryInfo[]>(Object.values(C2G_PACKING_CATEGORY_INFO));\n readonly config = input<C2gPackingListConfig<TField>>(DEFAULT_PACKING_LIST_CONFIG as C2gPackingListConfig<TField>);\n\n // Compat layer for deprecated inputs (showStats, showPrivateAsSeparateList)\n readonly showPrivateAsSeparateList = input(false);\n readonly showStats = input(true);\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly itemCreated = output<Partial<C2gPackingListItem>>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n readonly externalMemberViewRequested = output<void>();\n readonly filterChanged = output<C2gPackingListFilterState>();\n readonly sortChanged = output<C2gPackingListSortState<TField>>();\n readonly rowActionTriggered = output<{ actionId: string; item: C2gPackingListItem }>();\n\n // Merged config: config input takes precedence over deprecated inputs\n readonly mergedConfig = computed(() => {\n const cfg = this.config();\n const features = cfg.features ?? {};\n \n // Apply deprecated inputs if config doesn't override\n return {\n ...cfg,\n features: {\n ...features,\n stats: features.stats !== undefined ? features.stats : this.showStats(),\n privateSection: features.privateSection !== undefined ? features.privateSection : this.showPrivateAsSeparateList(),\n }\n } as C2gPackingListConfig<TField>;\n });\n\n readonly filter = signal<C2gPackingListFilterState>({\n query: '',\n visibility: 'all',\n essentialsOnly: false,\n memberIds: []\n });\n\n readonly expandedCategories = signal<Set<string>>(new Set());\n readonly hasUserToggled = signal(false);\n\n readonly filteredItems = computed(() => {\n const filter = this.filter();\n const q = filter.query.trim().toLowerCase();\n\n return this.items().filter(item => {\n if (filter.visibility !== 'all' && item.visibility !== filter.visibility) {\n return false;\n }\n if (filter.essentialsOnly && !item.essential) {\n return false;\n }\n if (filter.memberIds.length > 0) {\n const selected = new Set(filter.memberIds);\n const assignments = item.assignments ?? [];\n const hasSelectedAssignment = assignments.some(assignment => selected.has(assignment.memberId));\n if (!hasSelectedAssignment) {\n return false;\n }\n }\n if (!q) {\n return true;\n }\n const searchable = `${item.name} ${item.hint ?? ''} ${item.reason ?? ''}`.toLowerCase();\n return searchable.includes(q);\n });\n });\n\n readonly categoryGroups = computed(() => {\n const grouped = new Map<string, C2gPackingListItem[]>();\n for (const item of this.filteredItems()) {\n const key = item.category || 'other';\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(item);\n }\n\n // Category order: follow C2G_PACKING_CATEGORY_INFO definition, unknowns at end.\n // A category sinks to the bottom only when ALL its items are packed/confirmed.\n const knownOrder = Object.keys(C2G_PACKING_CATEGORY_INFO);\n const isPacked = (i: C2gPackingListItem) =>\n !!i.assignments?.some(a => a.status === 'packed' || a.status === 'confirmed');\n\n const entries = Array.from(grouped.entries());\n entries.sort(([a, aItems], [b, bItems]) => {\n const aDone = aItems.every(isPacked) ? 1 : 0;\n const bDone = bItems.every(isPacked) ? 1 : 0;\n if (aDone !== bDone) return aDone - bDone;\n const ai = knownOrder.indexOf(a);\n const bi = knownOrder.indexOf(b);\n return (ai === -1 ? knownOrder.length : ai) - (bi === -1 ? knownOrder.length : bi);\n });\n\n return entries.map(([key, items]) => ({ key, items }));\n });\n\n constructor() {\n effect(() => {\n if (this.hasUserToggled()) {\n return;\n }\n\n const defaults = this.categoryGroups().slice(0, 3).map(group => group.key);\n if (defaults.length === 0) {\n return;\n }\n\n if (this.expandedCategories().size === 0) {\n this.expandedCategories.set(new Set(defaults));\n }\n });\n }\n\n onFilterChange(next: C2gPackingListFilterState): void {\n this.filter.set(next);\n this.filterChanged.emit(next);\n }\n\n onExternalMemberViewRequested(): void {\n this.externalMemberViewRequested.emit();\n }\n\n onItemCreated(item: Partial<C2gPackingListItem>): void {\n this.itemCreated.emit(item);\n }\n\n isCategoryExpanded(category: string): boolean {\n return this.expandedCategories().has(category);\n }\n\n toggleCategory(category: string): void {\n this.hasUserToggled.set(true);\n const next = new Set(this.expandedCategories());\n if (next.has(category)) {\n next.delete(category);\n } else {\n next.add(category);\n }\n this.expandedCategories.set(next);\n }\n}\n","<section class=\"c2g-packing-list\">\n <header class=\"c2g-packing-list__header\">\n <c2g-packing-list-filters\n [filter]=\"filter()\"\n [members]=\"members()\"\n [labels]=\"labels()\"\n [disabled]=\"permissions().readOnly\"\n (filterChange)=\"onFilterChange($event)\"\n (overlayRequested)=\"onExternalMemberViewRequested()\">\n </c2g-packing-list-filters>\n\n <div class=\"c2g-packing-list__header-actions\">\n <c2g-packing-list-item-create\n [permissions]=\"permissions()\"\n [labels]=\"labels()\"\n [readOnly]=\"permissions().readOnly\"\n [categories]=\"categories()\"\n (itemCreated)=\"onItemCreated($event)\">\n </c2g-packing-list-item-create>\n </div>\n </header>\n\n @if (filteredItems().length === 0) {\n <p class=\"c2g-packing-list__empty\">{{ labels().emptyStateKey }}</p>\n }\n\n <div class=\"c2g-packing-list__categories\">\n @for (group of categoryGroups(); track group.key) {\n <c2g-packing-list-category\n [categoryKey]=\"group.key\"\n [items]=\"group.items\"\n [members]=\"members()\"\n [selectedMemberIds]=\"filter().memberIds\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n [expanded]=\"isCategoryExpanded(group.key)\"\n (toggle)=\"toggleCategory($event)\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-category>\n }\n </div>\n\n @if (showPrivateAsSeparateList()) {\n <c2g-packing-list-private-list\n [items]=\"filteredItems()\"\n [members]=\"members()\"\n [selectedMemberIds]=\"filter().memberIds\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n [labels]=\"labels()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-private-list>\n }\n</section>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { C2gPackingListItem } from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-stats',\n standalone: true,\n templateUrl: './packing-list-stats.component.html',\n styleUrls: ['./packing-list-stats.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListStatsComponent {\n readonly items = input.required<C2gPackingListItem[]>();\n\n readonly stats = computed(() => {\n const items = this.items();\n const packed = items.filter(item => (item.assignments ?? []).some(a => a.status === 'packed' || a.status === 'confirmed')).length;\n const essential = items.filter(item => !!item.essential).length;\n return { total: items.length, packed, essential };\n });\n}\n","<div class=\"c2g-pl-stats\">\n <span>{{ stats().packed }}/{{ stats().total }}</span>\n <span>essential: {{ stats().essential }}</span>\n</div>\n","export const WEATHER_ICON_MAP: Record<string, string> = {\n 'sunny': '☀️',\n 'clear': '☀️',\n 'partly-cloudy': '⛅',\n 'partly_cloudy': '⛅',\n 'cloudy': '☁️',\n 'overcast': '☁️',\n 'light-rain': '🌦️',\n 'light_rain': '🌦️',\n 'rain': '🌧️',\n 'heavy-rain': '⛈️',\n 'heavy_rain': '⛈️',\n 'snow': '❄️',\n 'fog': '🌫️',\n 'thunder': '⛈️',\n 'wind': '💨',\n};\n\n/**\n * Resolves a backend weather icon string to an emoji.\n * @param icon Raw icon string from the API (e.g. \"partly-cloudy\")\n * @param fallback Emoji to return for unrecognised keys. Defaults to '🌤️'.\n * Pass `icon` as fallback to preserve the raw string (useful\n * for debugging in the full weather widget).\n */\nexport function resolveWeatherIcon(icon: string, fallback = '🌤️'): string {\n if (!icon) return fallback;\n return WEATHER_ICON_MAP[icon.toLowerCase()] ?? fallback;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { resolveWeatherIcon } from './weather-icon.utils';\nimport { WeatherDay } from './weather-widget.models';\n\n@Component({\n selector: 'c2g-weather-widget',\n standalone: true,\n imports: [],\n templateUrl: './weather-widget.component.html',\n styleUrls: ['./weather-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WeatherWidgetComponent {\n readonly currentDay = input<WeatherDay | null>(null);\n readonly forecastSlots = input<WeatherDay[]>([]);\n readonly destination = input<string>('');\n readonly dates = input<{ from: string; to: string } | null>(null);\n\n getWeatherIcon(icon: string): string {\n return resolveWeatherIcon(icon, icon);\n }\n\n formatDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', {\n weekday: 'short',\n day: 'numeric',\n month: 'short'\n });\n }\n\n formatShortDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', { day: 'numeric', month: 'short' });\n }\n\n getSlotLabel(index: number, total: number): string {\n if (total === 1) return 'Reise';\n if (index === 0) return 'Anreise';\n if (index === total - 1) return 'Abreise';\n return 'Mitte';\n }\n}\n","@if (currentDay()) {\n <div class=\"wx-widget\">\n <!-- Hero: current/start-day weather -->\n <div class=\"wx-hero\">\n <span class=\"wx-hero__icon\">{{ getWeatherIcon(currentDay()!.icon) }}</span>\n <div class=\"wx-hero__body\">\n <div class=\"wx-hero__temp\">{{ currentDay()!.temperature.max }}<sup>°</sup></div>\n <div class=\"wx-hero__condition\">{{ currentDay()!.description }}</div>\n @if (destination()) {\n <div class=\"wx-hero__meta\">\n <span class=\"wx-hero__location\">📍 {{ destination() }}</span>\n @if (dates()) {\n <span class=\"wx-hero__daterange\">\n {{ formatShortDate(dates()!.from) }} – {{ formatShortDate(dates()!.to) }}\n </span>\n }\n </div>\n }\n </div>\n <div class=\"wx-hero__range\">\n <span class=\"wx-range__high\">↑ {{ currentDay()!.temperature.max }}°</span>\n <span class=\"wx-range__low\">↓ {{ currentDay()!.temperature.min }}°</span>\n </div>\n </div>\n\n <!-- Forecast slots -->\n @if (forecastSlots().length > 1) {\n <div class=\"wx-forecast\" [attr.data-slots]=\"forecastSlots().length\">\n @for (slot of forecastSlots(); track $index) {\n <div class=\"wx-slot\">\n <span class=\"wx-slot__label\">{{ getSlotLabel($index, forecastSlots().length) }}</span>\n <span class=\"wx-slot__date\">{{ formatDate(slot.date) }}</span>\n <span class=\"wx-slot__icon\">{{ getWeatherIcon(slot.icon) }}</span>\n <div class=\"wx-slot__temps\">\n <span class=\"wx-slot__max\">{{ slot.temperature.max }}°</span>\n <span class=\"wx-slot__min\">{{ slot.temperature.min }}°</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"wx-empty\">Wetter erscheint nach Ziel- und Datumsauswahl.</div>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MemberRoleKey } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-tags',\n standalone: true,\n templateUrl: './member-tags.component.html',\n styleUrls: ['./member-tags.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberTagsComponent {\n readonly isCurrentUser = input(false);\n readonly isRegistered = input(true);\n readonly roleKey = input<MemberRoleKey>(null);\n\n getRoleLabel(roleKey: MemberRoleKey): string {\n switch (roleKey) {\n case 'organizer':\n return '🧭 Organisator';\n case 'treasurer':\n return '💰 Kassenwart';\n case 'transport':\n return '🚙 Fahrkoordination';\n case 'cook':\n return '👨‍🍳 Kochen';\n case 'firstaid':\n return '🩺 Erste Hilfe';\n case 'equipment':\n return '🎒 Ausrüstung';\n default:\n return '';\n }\n }\n}\n","@if (isCurrentUser()) {\n <span class=\"tw-member__you-badge\">Du</span>\n}\n\n@if (!isRegistered()) {\n <span class=\"tw-member__unreg-badge\">Ohne Account</span>\n}\n\n@if (roleKey()) {\n <span class=\"tw-member__role\">{{ getRoleLabel(roleKey()) }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output\n} from '@angular/core';\nimport { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { ActionMenuItem } from './action-menu.models';\n\n@Component({\n selector: 'c2g-action-menu',\n standalone: true,\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger],\n templateUrl: './action-menu.component.html',\n styleUrls: ['./action-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionMenuComponent {\n readonly items = input.required<ActionMenuItem[]>();\n readonly triggerLabel = input('...');\n readonly ariaLabel = input('Aktionen');\n\n readonly itemSelected = output<ActionMenuItem>();\n\n select(item: ActionMenuItem): void {\n if (item.disabled) return;\n this.itemSelected.emit(item);\n }\n}\n","<div class=\"c2g-action-menu\">\n <button\n class=\"c2g-action-menu__trigger\"\n type=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [cdkMenuTriggerFor]=\"menuPanel\">\n {{ triggerLabel() }}\n </button>\n\n <ng-template #menuPanel>\n <ul class=\"c2g-action-menu__list\" cdkMenu>\n @for (item of items(); track item.key) {\n <li role=\"none\">\n <button\n class=\"c2g-action-menu__item\"\n [class.c2g-action-menu__item--danger]=\"item.variant === 'danger'\"\n [class.c2g-action-menu__item--disabled]=\"item.disabled\"\n [disabled]=\"item.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"select(item)\">\n @if (item.icon) {\n <span class=\"c2g-action-menu__item-icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n </button>\n </li>\n }\n </ul>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ActionMenuComponent } from '../../action-menu/action-menu.component';\nimport { ActionMenuItem } from '../../action-menu/action-menu.models';\nimport { AvatarComponent } from '@humbeldore/c2g-ui';\nimport { MemberTagsComponent } from '../member-tags/member-tags.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-item',\n standalone: true,\n imports: [MemberTagsComponent, ActionMenuComponent, AvatarComponent],\n templateUrl: './member-item.component.html',\n styleUrls: ['./member-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberItemComponent {\n readonly member = input.required<C2gMember>();\n\n readonly remove = output<C2gMember>();\n readonly invite = output<C2gMember>();\n readonly edit = output<C2gMember>();\n\n readonly avatarBackgroundColor = computed(() =>\n this.member().isCurrentUser ? '#1a6044' : '#e8f0ea'\n );\n\n readonly avatarTextColor = computed(() =>\n this.member().isCurrentUser ? '#ffffff' : '#1a6044'\n );\n\n readonly menuItems = computed<ActionMenuItem[]>(() => {\n const m = this.member();\n const items: ActionMenuItem[] = [];\n if (m.isRegistered !== false) {\n items.push({ key: 'invite', label: 'Einladen', icon: '✉️' });\n } else {\n items.push({ key: 'edit', label: 'Bearbeiten', icon: '✏️' });\n }\n items.push({ key: 'remove', label: 'Entfernen', icon: '🗑️', variant: 'danger' });\n return items;\n });\n\n onMenuItemSelected(item: ActionMenuItem): void {\n const m = this.member();\n if (item.key === 'remove') this.remove.emit(m);\n else if (item.key === 'invite') this.invite.emit(m);\n else if (item.key === 'edit') this.edit.emit(m);\n }\n\n getMemberTypeLabel(type: string): string {\n switch (type) {\n case 'adult':\n return 'Erwachsener';\n case 'child':\n return 'Kind';\n case 'pet':\n return 'Haustier';\n default:\n return type;\n }\n }\n}\n","<c2g-avatar\n [initials]=\"member().avatarInitials\"\n [name]=\"member().name\"\n [backgroundColor]=\"avatarBackgroundColor()\"\n [textColor]=\"avatarTextColor()\"\n ringTone=\"neutral\">\n</c2g-avatar>\n\n<div class=\"tw-member__info\">\n <span class=\"tw-member__name\">\n {{ member().name }}\n <c2g-member-tags\n [isCurrentUser]=\"member().isCurrentUser ?? false\"\n [isRegistered]=\"member().isRegistered ?? true\">\n </c2g-member-tags>\n </span>\n <span class=\"tw-member__type\">{{ getMemberTypeLabel(member().type) }}</span>\n</div>\n\n<c2g-member-tags\n [isCurrentUser]=\"false\"\n [isRegistered]=\"true\"\n [roleKey]=\"member().roleKey\">\n</c2g-member-tags>\n\n<c2g-action-menu\n [items]=\"menuItems()\"\n ariaLabel=\"Mitglied-Aktionen\"\n (itemSelected)=\"onMenuItemSelected($event)\">\n</c2g-action-menu>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MemberItemComponent } from '../member-item/member-item.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-list',\n standalone: true,\n imports: [MemberItemComponent],\n templateUrl: './member-list.component.html',\n styleUrls: ['./member-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberListComponent {\n readonly members = input.required<C2gMember[]>();\n\n readonly memberRemove = output<C2gMember>();\n readonly memberInvite = output<C2gMember>();\n readonly memberEdit = output<C2gMember>();\n}\n","<ul class=\"tw-member-list\">\n @for (member of members(); track member.id) {\n <li class=\"tw-member\">\n <c2g-member-item\n [member]=\"member\"\n (remove)=\"memberRemove.emit($event)\"\n (invite)=\"memberInvite.emit($event)\"\n (edit)=\"memberEdit.emit($event)\">\n </c2g-member-item>\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MemberListComponent } from '../member-list/member-list.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-panel',\n standalone: true,\n imports: [MemberListComponent],\n templateUrl: './member-panel.component.html',\n styleUrls: ['./member-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberPanelComponent {\n readonly members = input.required<C2gMember[]>();\n\n readonly memberRemove = output<C2gMember>();\n readonly memberInvite = output<C2gMember>();\n readonly memberEdit = output<C2gMember>();\n}\n","<div class=\"tw-card\">\n <div class=\"tw-card__header\">\n <h2 class=\"tw-card__title\">Teilnehmer ({{ members().length }})</h2>\n <ng-content select=\"[slot=header-actions]\"></ng-content>\n </div>\n\n <c2g-member-list\n [members]=\"members()\"\n (memberRemove)=\"memberRemove.emit($event)\"\n (memberInvite)=\"memberInvite.emit($event)\"\n (memberEdit)=\"memberEdit.emit($event)\">\n </c2g-member-list>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\nimport { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { C2gMenuItem, C2gMenuSelection } from './menu.models';\n\n@Component({\n selector: 'c2g-menu',\n standalone: true,\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuComponent {\n readonly items = input.required<C2gMenuItem[]>();\n readonly triggerLabel = input('Menü');\n readonly triggerAriaLabel = input('Menü öffnen');\n\n readonly itemSelected = output<C2gMenuSelection>();\n\n readonly flatItems = computed(() => this.items());\n\n select(item: C2gMenuItem): void {\n if (item.disabled || (item.children?.length ?? 0) > 0) return;\n this.itemSelected.emit({ item });\n }\n\n selectChild(parent: C2gMenuItem, child: C2gMenuItem): void {\n if (child.disabled) return;\n this.itemSelected.emit({ item: child, parent });\n }\n}\n","<div class=\"c2g-menu\">\n <button\n class=\"c2g-menu__trigger\"\n type=\"button\"\n [attr.aria-label]=\"triggerAriaLabel()\"\n [cdkMenuTriggerFor]=\"menuPanel\">\n {{ triggerLabel() }}\n </button>\n\n <ng-template #menuPanel>\n <ul class=\"c2g-menu__list\" cdkMenu>\n @for (item of flatItems(); track item.key) {\n <li\n class=\"c2g-menu__entry\"\n [class.c2g-menu__entry--has-children]=\"(item.children?.length ?? 0) > 0\">\n\n @if ((item.children?.length ?? 0) > 0) {\n <button\n class=\"c2g-menu__item\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"subMenu\"\n [disabled]=\"item.disabled ?? false\"\n type=\"button\">\n @if (item.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n <span class=\"c2g-menu__caret\" aria-hidden=\"true\">›</span>\n </button>\n\n <ng-template #subMenu>\n <ul class=\"c2g-menu__submenu\" cdkMenu>\n @for (child of item.children ?? []; track child.key) {\n <li role=\"none\">\n <button\n class=\"c2g-menu__item\"\n [class.c2g-menu__item--danger]=\"child.variant === 'danger'\"\n [disabled]=\"child.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"selectChild(item, child)\">\n @if (child.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ child.icon }}</span>\n }\n <span>{{ child.label }}</span>\n </button>\n </li>\n }\n </ul>\n </ng-template>\n } @else {\n <button\n class=\"c2g-menu__item\"\n [class.c2g-menu__item--danger]=\"item.variant === 'danger'\"\n [disabled]=\"item.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"select(item)\">\n @if (item.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n </button>\n }\n </li>\n }\n </ul>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, HostListener, input, output } from '@angular/core';\nimport { C2gSubmenuItem } from '../menu.models';\n\n@Component({\n selector: 'c2g-submenu-item',\n standalone: true,\n templateUrl: './submenu-item.component.html',\n styleUrls: ['./submenu-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SubmenuItemComponent {\n readonly item = input.required<C2gSubmenuItem>();\n readonly active = input(false);\n\n readonly selected = output<C2gSubmenuItem>();\n readonly mouseenter = output<void>();\n\n onClick(): void {\n if (this.item().disabled) {\n return;\n }\n this.selected.emit(this.item());\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.mouseenter.emit();\n }\n}\n","<li role=\"none\">\n <button\n class=\"c2g-submenu-item\"\n [class.c2g-submenu-item--active]=\"active() || item().active\"\n [disabled]=\"item().disabled ?? false\"\n role=\"menuitem\"\n type=\"button\"\n (click)=\"onClick()\">\n {{ item().label }}\n </button>\n</li>\n","import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { C2gSubmenuItem } from '../menu.models';\nimport { SubmenuItemComponent } from './submenu-item.component';\n\n@Component({\n selector: 'c2g-submenu',\n standalone: true,\n imports: [SubmenuItemComponent],\n templateUrl: './submenu.component.html',\n styleUrls: ['./submenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SubmenuComponent {\n readonly items = input.required<C2gSubmenuItem[]>();\n readonly open = input(false);\n\n readonly itemSelected = output<C2gSubmenuItem>();\n\n readonly activeIndex = signal(0);\n\n onItemSelected(item: C2gSubmenuItem): void {\n if (item.disabled) {\n return;\n }\n this.itemSelected.emit(item);\n }\n\n setActiveIndex(index: number): void {\n this.activeIndex.set(index);\n }\n\n onKeydown(event: KeyboardEvent): void {\n const list = this.items();\n if (!list.length) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.activeIndex.set((this.activeIndex() + 1) % list.length);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.activeIndex.set((this.activeIndex() - 1 + list.length) % list.length);\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const selected = list[this.activeIndex()];\n this.onItemSelected(selected);\n }\n }\n}\n","@if (open()) {\n <ul class=\"c2g-submenu\" role=\"menu\" (keydown)=\"onKeydown($event)\">\n @for (item of items(); track item.key; let index = $index) {\n <c2g-submenu-item\n [item]=\"item\"\n [active]=\"activeIndex() === index\"\n (mouseenter)=\"setActiveIndex(index)\"\n (selected)=\"onItemSelected($event)\">\n </c2g-submenu-item>\n }\n </ul>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport {\n C2gMainNavigationItem,\n C2gSubmenuSelection,\n C2gSubmenuItem\n} from '../menu.models';\nimport { SubmenuComponent } from './submenu.component';\n\n@Component({\n selector: 'c2g-main-navigation-item',\n standalone: true,\n imports: [SubmenuComponent],\n templateUrl: './main-navigation-item.component.html',\n styleUrls: ['./main-navigation-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MainNavigationItemComponent {\n readonly item = input.required<C2gMainNavigationItem>();\n\n readonly itemSelected = output<C2gMainNavigationItem>();\n readonly subItemSelected = output<C2gSubmenuSelection>();\n\n readonly submenuOpen = signal(false);\n readonly hasSubmenu = computed(() => (this.item().subItems?.length ?? 0) > 0);\n\n onItemClick(): void {\n if (this.item().disabled) {\n return;\n }\n if (this.hasSubmenu()) {\n this.submenuOpen.update(open => !open);\n return;\n }\n this.itemSelected.emit(this.item());\n }\n\n onMouseEnter(): void {\n if (this.hasSubmenu()) {\n this.submenuOpen.set(true);\n }\n }\n\n onMouseLeave(): void {\n this.submenuOpen.set(false);\n }\n\n onSubItemSelected(sub: C2gSubmenuItem): void {\n this.subItemSelected.emit({ main: this.item(), sub });\n this.submenuOpen.set(false);\n }\n\n onItemKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onItemClick();\n return;\n }\n\n if (event.key === 'ArrowDown' && this.hasSubmenu()) {\n event.preventDefault();\n this.submenuOpen.set(true);\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.submenuOpen.set(false);\n }\n }\n}\n","<li class=\"c2g-main-nav-item\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <button\n class=\"c2g-main-nav-item__button\"\n [class.c2g-main-nav-item__button--active]=\"item().active\"\n [disabled]=\"item().disabled ?? false\"\n [attr.aria-haspopup]=\"hasSubmenu() ? 'menu' : null\"\n [attr.aria-expanded]=\"hasSubmenu() ? submenuOpen() : null\"\n type=\"button\"\n (click)=\"onItemClick()\"\n (keydown)=\"onItemKeydown($event)\">\n <span>{{ item().label }}</span>\n @if (hasSubmenu()) {\n <span class=\"c2g-main-nav-item__caret\" aria-hidden=\"true\">▾</span>\n }\n </button>\n\n @if (hasSubmenu()) {\n <c2g-submenu\n [items]=\"item().subItems ?? []\"\n [open]=\"submenuOpen()\"\n (itemSelected)=\"onSubItemSelected($event)\">\n </c2g-submenu>\n }\n</li>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport {\n C2gMainNavigationItem,\n C2gSubmenuItem,\n C2gSubmenuSelection\n} from '../menu.models';\nimport { MainNavigationItemComponent } from './main-navigation-item.component';\n\n@Component({\n selector: 'c2g-main-navigation',\n standalone: true,\n imports: [MainNavigationItemComponent],\n templateUrl: './main-navigation.component.html',\n styleUrls: ['./main-navigation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MainNavigationComponent {\n readonly items = input.required<C2gMainNavigationItem[]>();\n readonly ariaLabel = input('Hauptnavigation');\n\n readonly mainItemSelected = output<C2gMainNavigationItem>();\n readonly subItemSelected = output<C2gSubmenuSelection>();\n\n onMainItemSelected(item: C2gMainNavigationItem): void {\n this.mainItemSelected.emit(item);\n }\n\n onSubItemSelected(selection: C2gSubmenuSelection): void {\n this.subItemSelected.emit(selection);\n }\n\n trackByKey = (_index: number, item: C2gMainNavigationItem): string => item.key;\n trackSubByKey = (_index: number, item: C2gSubmenuItem): string => item.key;\n}\n","<nav class=\"c2g-main-navigation\" [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"c2g-main-navigation__list\">\n @for (item of items(); track trackByKey($index, item)) {\n <c2g-main-navigation-item\n [item]=\"item\"\n (itemSelected)=\"onMainItemSelected($event)\"\n (subItemSelected)=\"onSubItemSelected($event)\">\n </c2g-main-navigation-item>\n }\n </ul>\n</nav>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NextAdventureData } from './dashboard-widgets.models';\n\nconst WEATHER_ICONS: Record<string, string> = {\n sunny: '☀️', 'partly-cloudy': '⛅', cloudy: '☁️',\n rain: '🌧️', storm: '⛈️', snow: '❄️', wind: '💨', fog: '🌫️'\n};\n\nconst TOUR_TYPE_ICONS: Record<string, string> = {\n hiking: '🥾', camping: '⛺', cycling: '🚴', climbing: '🧗',\n kayaking: '🚣', skiing: '⛷️', backpacking: '🎒', road_trip: '🚗'\n};\n\n@Component({\n selector: 'c2g-next-adventure-widget',\n standalone: true,\n imports: [],\n templateUrl: './next-adventure-widget.component.html',\n styleUrls: ['./next-adventure-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NextAdventureWidgetComponent {\n readonly data = input.required<NextAdventureData>();\n\n readonly countdown = computed(() => {\n const from = new Date(this.data().fromDate);\n from.setHours(0, 0, 0, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return Math.max(0, Math.ceil((from.getTime() - today.getTime()) / 86400000));\n });\n\n readonly duration = computed(() => {\n const from = new Date(this.data().fromDate);\n const to = new Date(this.data().toDate);\n return Math.ceil((to.getTime() - from.getTime()) / 86400000) + 1;\n });\n\n readonly countdownLabel = computed(() => {\n const d = this.countdown();\n if (d === 0) return 'Heute gehts los!';\n if (d === 1) return 'Morgen gehts los!';\n return `Noch ${d} Tage`;\n });\n\n readonly dateRange = computed(() => {\n const fmt = (s: string) => new Date(s).toLocaleDateString('de-DE', { day: '2-digit', month: 'short' });\n return `${fmt(this.data().fromDate)} – ${fmt(this.data().toDate)}`;\n });\n\n readonly tourTypeIcon = computed(() =>\n TOUR_TYPE_ICONS[this.data().tourType ?? ''] ?? '🏕️'\n );\n\n readonly weatherSlots = computed(() => (this.data().weather ?? []).slice(0, 4));\n\n readonly urgencyClass = computed(() => {\n const d = this.countdown();\n if (d <= 1) return 'c2g-next-adventure--now';\n if (d <= 7) return 'c2g-next-adventure--soon';\n return '';\n });\n\n weatherIcon(icon: string): string {\n return WEATHER_ICONS[icon] ?? '🌤️';\n }\n\n formatWeatherDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' });\n }\n}\n","<div class=\"c2g-next-adventure\" [class]=\"urgencyClass()\">\n\n <!-- Row 1: type icon + meta + optional pulse orb -->\n <div class=\"c2g-next-adventure__header\">\n <span class=\"c2g-next-adventure__type-icon\" aria-hidden=\"true\">{{ tourTypeIcon() }}</span>\n\n <div class=\"c2g-next-adventure__meta\">\n <span class=\"c2g-next-adventure__label\">Nächstes Abenteuer</span>\n <span class=\"c2g-next-adventure__dates\">{{ dateRange() }} · {{ duration() }} Tage</span>\n </div>\n\n @if (data().showPulse) {\n <div class=\"c2g-next-adventure__pulse-orb\" aria-hidden=\"true\">\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--1\"></span>\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--2\"></span>\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--3\"></span>\n <span class=\"c2g-next-adventure__pulse-core\">🔴</span>\n </div>\n }\n </div>\n\n <!-- Tour name + destination -->\n <div class=\"c2g-next-adventure__body\">\n <h2 class=\"c2g-next-adventure__name\">{{ data().tourName }}</h2>\n <p class=\"c2g-next-adventure__destination\">📍 {{ data().destination }}</p>\n </div>\n\n <!-- Countdown -->\n <div class=\"c2g-next-adventure__countdown\">\n <span class=\"c2g-next-adventure__countdown-number\">{{ countdown() }}</span>\n <span class=\"c2g-next-adventure__countdown-label\">{{ countdownLabel() }}</span>\n </div>\n\n <!-- Weather strip -->\n @if (weatherSlots().length > 0) {\n <div class=\"c2g-next-adventure__weather\">\n @for (day of weatherSlots(); track day.date) {\n <div class=\"c2g-next-adventure__weather-day\">\n <span class=\"c2g-next-adventure__weather-date\">{{ formatWeatherDate(day.date) }}</span>\n <span class=\"c2g-next-adventure__weather-icon\" aria-hidden=\"true\">{{ weatherIcon(day.icon) }}</span>\n <span class=\"c2g-next-adventure__weather-temp\">\n {{ day.tempMax }}° <span class=\"c2g-next-adventure__weather-min\">{{ day.tempMin }}°</span>\n </span>\n </div>\n }\n </div>\n }\n\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport { PackStatusData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-pack-status-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-status-widget.component.html',\n styleUrls: ['./pack-status-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackStatusWidgetComponent {\n readonly data = input.required<PackStatusData>();\n\n readonly percent = computed(() => {\n const d = this.data();\n if (d.totalItems === 0) return 0;\n return Math.round((d.completedItems / d.totalItems) * 100);\n });\n\n readonly criticalOpen = computed(() =>\n this.data().criticalTotal - this.data().criticalCompleted\n );\n\n readonly statusColor = computed((): 'success' | 'warning' | 'primary' => {\n if (this.percent() === 100) return 'success';\n if (this.criticalOpen() > 0) return 'warning';\n return 'primary';\n });\n\n readonly statusLabel = computed(() => {\n const p = this.percent();\n if (p === 100) return 'Alles gepackt!';\n if (p >= 80) return 'Fast fertig';\n if (p >= 50) return 'Gut dabei';\n if (p > 0) return 'Packen gestartet';\n return 'Noch nicht gepackt';\n });\n\n // SVG ring\n readonly radius = 44;\n readonly strokeWidth = 8;\n readonly circumference = 2 * Math.PI * this.radius;\n\n readonly strokeDashoffset = computed(() =>\n this.circumference * (1 - this.percent() / 100)\n );\n\n // Segment tick marks (every 10%)\n readonly ticks = Array.from({ length: 10 }, (_, i) => {\n const angle = (i / 10) * 360 - 90;\n const rad = (angle * Math.PI) / 180;\n const r1 = this.radius + this.strokeWidth / 2 + 3;\n const r2 = r1 + 4;\n const cx = 56, cy = 56;\n return {\n x1: cx + r1 * Math.cos(rad),\n y1: cy + r1 * Math.sin(rad),\n x2: cx + r2 * Math.cos(rad),\n y2: cy + r2 * Math.sin(rad),\n };\n });\n\n // Packed items as individual visual \"dots\" (up to 20 shown)\n readonly itemDots = computed(() => {\n const total = Math.min(this.data().totalItems, 20);\n const done = Math.round((this.data().completedItems / Math.max(this.data().totalItems, 1)) * total);\n return Array.from({ length: total }, (_, i) => i < done);\n });\n\n // Count-up for percent display\n readonly displayPercent = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.percent();\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const duration = 800;\n const tick = (now: number) => {\n const t = Math.min((now - start) / duration, 1);\n const ease = 1 - Math.pow(1 - t, 3);\n this.displayPercent.set(Math.round(ease * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n}\n","<div class=\"c2g-ps\" [class]=\"'c2g-ps--' + statusColor()\">\n\n <!-- Header -->\n <div class=\"c2g-ps__header\">\n <div class=\"c2g-ps__title-row\">\n <span class=\"c2g-ps__label\">🎒 Packstatus</span>\n @if (data().tourName) {\n <span class=\"c2g-ps__tour\">{{ data().tourName }}</span>\n }\n </div>\n <span class=\"c2g-ps__status-badge\">{{ statusLabel() }}</span>\n </div>\n\n <!-- Main: ring + info side by side -->\n <div class=\"c2g-ps__body\">\n\n <!-- SVG Ring -->\n <div class=\"c2g-ps__ring-wrap\">\n <svg class=\"c2g-ps__ring\" viewBox=\"0 0 112 112\" aria-hidden=\"true\">\n <!-- Track -->\n <circle class=\"c2g-ps__ring-track\"\n cx=\"56\" cy=\"56\" [attr.r]=\"radius\"\n fill=\"none\" [attr.stroke-width]=\"strokeWidth\" />\n <!-- Fill -->\n <circle class=\"c2g-ps__ring-fill\"\n cx=\"56\" cy=\"56\" [attr.r]=\"radius\"\n fill=\"none\" [attr.stroke-width]=\"strokeWidth\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\n transform=\"rotate(-90 56 56)\" />\n <!-- Tick marks -->\n @for (t of ticks; track $index) {\n <line class=\"c2g-ps__tick\"\n [attr.x1]=\"t.x1\" [attr.y1]=\"t.y1\"\n [attr.x2]=\"t.x2\" [attr.y2]=\"t.y2\" />\n }\n </svg>\n <!-- Center content -->\n <div class=\"c2g-ps__ring-center\">\n <span class=\"c2g-ps__percent\">{{ displayPercent() }}<span class=\"c2g-ps__percent-unit\">%</span></span>\n @if (statusColor() === 'success') {\n <span class=\"c2g-ps__ring-emoji\">🎉</span>\n }\n </div>\n </div>\n\n <!-- Info panel -->\n <div class=\"c2g-ps__info\">\n\n <!-- Item count -->\n <div class=\"c2g-ps__count-row\">\n <span class=\"c2g-ps__count-main\">{{ data().completedItems }}</span>\n <span class=\"c2g-ps__count-sep\">/</span>\n <span class=\"c2g-ps__count-total\">{{ data().totalItems }}</span>\n <span class=\"c2g-ps__count-unit\">Items</span>\n </div>\n\n <!-- Item dots grid -->\n @if (itemDots().length > 0) {\n <div class=\"c2g-ps__dots\">\n @for (done of itemDots(); track $index) {\n <span class=\"c2g-ps__dot\" [class.c2g-ps__dot--done]=\"done\"></span>\n }\n </div>\n }\n\n <!-- Critical alert / all clear -->\n @if (criticalOpen() > 0) {\n <div class=\"c2g-ps__alert\">\n <span class=\"c2g-ps__alert-icon\">⚠️</span>\n <span class=\"c2g-ps__alert-text\">\n {{ criticalOpen() }} kritische{{ criticalOpen() === 1 ? 's' : '' }} fehlt{{ criticalOpen() === 1 ? '' : 'en' }}\n </span>\n </div>\n } @else if (data().criticalTotal > 0) {\n <div class=\"c2g-ps__all-clear\">\n <span>✓ Alle kritischen Items gepackt</span>\n </div>\n }\n\n </div>\n </div>\n\n <!-- Progress bar strip at bottom -->\n <div class=\"c2g-ps__strip-track\">\n <div class=\"c2g-ps__strip-fill\" [style.width.%]=\"percent()\"></div>\n </div>\n\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n computed,\n effect,\n input,\n signal,\n} from '@angular/core';\nimport { PackWeightData } from './dashboard-widgets.models';\n\nconst SCALE_MAX_G = 30_000;\n\nconst ZONES = [\n { label: 'Ultraleicht', maxG: 7_000, color: '#22c55e', bgColor: 'rgba(34,197,94,0.18)' },\n { label: 'Leicht', maxG: 12_000, color: '#84cc16', bgColor: 'rgba(132,204,22,0.15)' },\n { label: 'Mittel', maxG: 18_000, color: '#f59e0b', bgColor: 'rgba(245,158,11,0.14)' },\n { label: 'Schwer', maxG: 25_000, color: '#f97316', bgColor: 'rgba(249,115,22,0.14)' },\n { label: 'Sehr schwer', maxG: 30_000, color: '#ef4444', bgColor: 'rgba(239,68,68,0.15)' },\n] as const;\n\n@Component({\n selector: 'c2g-pack-weight-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-weight-widget.component.html',\n styleUrls: ['./pack-weight-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackWeightWidgetComponent implements OnDestroy {\n readonly data = input.required<PackWeightData>();\n\n readonly zone = computed(() =>\n ZONES.find(z => this.data().currentWeightG <= z.maxG) ?? ZONES[ZONES.length - 1]\n );\n\n readonly scalePercent = computed(() =>\n Math.min(100, (this.data().currentWeightG / SCALE_MAX_G) * 100)\n );\n\n readonly prevScalePercent = computed(() => {\n const prev = this.data().previousWeightG;\n if (prev == null) return null;\n return Math.min(100, (prev / SCALE_MAX_G) * 100);\n });\n\n readonly diffG = computed(() => {\n const prev = this.data().previousWeightG;\n if (prev == null) return null;\n return this.data().currentWeightG - prev;\n });\n\n readonly diffKg = computed(() => {\n const d = this.diffG();\n if (d == null) return null;\n return (Math.abs(d) / 1000).toFixed(1);\n });\n\n readonly diffTrend = computed((): 'better' | 'worse' | 'same' | null => {\n const d = this.diffG();\n if (d == null) return null;\n if (d < 0) return 'better';\n if (d > 0) return 'worse';\n return 'same';\n });\n\n // Animated values\n readonly animatedPercent = signal(0);\n readonly displayKg = signal('0.0');\n\n private rafMarker = 0;\n private rafKg = 0;\n\n constructor() {\n effect(() => {\n const targetPct = this.scalePercent();\n const targetKg = this.data().currentWeightG / 1000;\n\n // Marker animation\n cancelAnimationFrame(this.rafMarker);\n const fromPct = this.animatedPercent();\n const startM = performance.now();\n const tickMarker = (now: number) => {\n const t = Math.min((now - startM) / 900, 1);\n const e = 1 - Math.pow(1 - t, 4);\n this.animatedPercent.set(fromPct + (targetPct - fromPct) * e);\n if (t < 1) this.rafMarker = requestAnimationFrame(tickMarker);\n };\n this.rafMarker = requestAnimationFrame(tickMarker);\n\n // Count-up kg\n cancelAnimationFrame(this.rafKg);\n const startK = performance.now();\n const tickKg = (now: number) => {\n const t = Math.min((now - startK) / 900, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayKg.set((e * targetKg).toFixed(1));\n if (t < 1) this.rafKg = requestAnimationFrame(tickKg);\n };\n this.rafKg = requestAnimationFrame(tickKg);\n });\n }\n\n // Zone segments for colour gradient bar\n readonly zoneSegments = computed(() => {\n let prev = 0;\n return ZONES.map(z => {\n const right = (z.maxG / SCALE_MAX_G) * 100;\n const seg = { left: prev, width: right - prev, color: z.color, bgColor: z.bgColor, label: z.label };\n prev = right;\n return seg;\n });\n });\n\n // Tick marks: 0 5 10 15 20 25 30 kg\n readonly ticks = Array.from({ length: 7 }, (_, i) => ({\n pct: (i * 5_000 / SCALE_MAX_G) * 100,\n label: `${i * 5}`,\n }));\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.rafMarker);\n cancelAnimationFrame(this.rafKg);\n }\n}\n","<div class=\"c2g-pw\">\n\n <!-- Header -->\n <div class=\"c2g-pw__header\">\n <div class=\"c2g-pw__title-col\">\n <span class=\"c2g-pw__label\">Packgewicht</span>\n @if (data().tourName) {\n <span class=\"c2g-pw__tour\">{{ data().tourName }}</span>\n }\n </div>\n <!-- Zone badge -->\n <span class=\"c2g-pw__zone-badge\"\n [style.background]=\"zone().bgColor\"\n [style.color]=\"zone().color\">\n {{ zone().label }}\n </span>\n </div>\n\n <!-- Big value -->\n <div class=\"c2g-pw__value-row\">\n <span class=\"c2g-pw__value\" [style.color]=\"zone().color\">{{ displayKg() }}</span>\n <span class=\"c2g-pw__unit\">kg</span>\n\n <!-- Diff pill -->\n @if (diffG() != null) {\n <span class=\"c2g-pw__diff-pill\"\n [class.c2g-pw__diff-pill--better]=\"diffTrend() === 'better'\"\n [class.c2g-pw__diff-pill--worse]=\"diffTrend() === 'worse'\">\n @if (diffTrend() === 'better') { ↓ {{ diffKg() }} kg }\n @else if (diffTrend() === 'worse') { ↑ {{ diffKg() }} kg }\n @else { → gleich }\n </span>\n }\n </div>\n\n <!-- Scale bar -->\n <div class=\"c2g-pw__scale\">\n\n <!-- Colour zone segments -->\n <div class=\"c2g-pw__zones\">\n @for (seg of zoneSegments(); track seg.label) {\n <div class=\"c2g-pw__zone-seg\"\n [style.width.%]=\"seg.width\"\n [style.background]=\"seg.bgColor\"\n [style.border-right]=\"'1px solid ' + seg.color + '22'\">\n </div>\n }\n </div>\n\n <!-- Gradient fill up to current value -->\n <div class=\"c2g-pw__fill-track\">\n <div class=\"c2g-pw__fill\"\n [style.width.%]=\"animatedPercent()\"\n [style.background]=\"'linear-gradient(90deg, #22c55e, ' + zone().color + ')'\">\n </div>\n </div>\n\n <!-- Previous marker -->\n @if (prevScalePercent() != null) {\n <div class=\"c2g-pw__marker c2g-pw__marker--prev\"\n [style.left.%]=\"prevScalePercent()\">\n <div class=\"c2g-pw__marker-line\"></div>\n <span class=\"c2g-pw__marker-label\">Letzte Tour</span>\n </div>\n }\n\n <!-- Current marker -->\n <div class=\"c2g-pw__marker c2g-pw__marker--current\"\n [style.left.%]=\"animatedPercent()\"\n [style.--marker-color]=\"zone().color\">\n <div class=\"c2g-pw__marker-pin\"></div>\n <div class=\"c2g-pw__marker-line\"></div>\n </div>\n\n <!-- Tick marks -->\n <div class=\"c2g-pw__ticks\">\n @for (tick of ticks; track tick.pct) {\n <div class=\"c2g-pw__tick\" [style.left.%]=\"tick.pct\">\n <div class=\"c2g-pw__tick-line\"></div>\n <span class=\"c2g-pw__tick-label\">{{ tick.label }}</span>\n </div>\n }\n </div>\n\n </div>\n\n <!-- Zone legend -->\n <div class=\"c2g-pw__legend\">\n @for (seg of zoneSegments(); track seg.label) {\n <div class=\"c2g-pw__legend-item\"\n [class.c2g-pw__legend-item--active]=\"seg.label === zone().label\">\n <span class=\"c2g-pw__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-pw__legend-label\">{{ seg.label }}</span>\n </div>\n }\n </div>\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MemberReadinessEntry } from './dashboard-widgets.models';\n\nexport interface ReadinessGroup {\n label: string;\n emoji: string;\n color: 'success' | 'warning' | 'danger' | 'neutral';\n min: number;\n max: number;\n members: MemberReadinessEntry[];\n}\n\n@Component({\n selector: 'c2g-member-readiness-widget',\n standalone: true,\n imports: [],\n templateUrl: './member-readiness-widget.component.html',\n styleUrls: ['./member-readiness-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberReadinessWidgetComponent {\n readonly members = input.required<MemberReadinessEntry[]>();\n readonly tourName = input<string | undefined>(undefined);\n\n readonly overallPercent = computed(() => {\n const m = this.members();\n if (!m.length) return 0;\n const total = m.reduce((s, e) => s + e.totalItems, 0);\n if (total === 0) return 0;\n return Math.round((m.reduce((s, e) => s + e.completedItems, 0) / total) * 100);\n });\n\n readonly fullyReady = computed(() =>\n this.members().filter(m => this.readyPercent(m) === 100).length\n );\n\n // Groups only shown when >= 6 members, otherwise flat list\n readonly useGrouped = computed(() => this.members().length >= 6);\n\n readonly groups = computed((): ReadinessGroup[] => {\n const buckets: ReadinessGroup[] = [\n { label: 'Bereit', emoji: '✅', color: 'success', min: 100, max: 100, members: [] },\n { label: 'Fast fertig', emoji: '🔜', color: 'warning', min: 75, max: 99, members: [] },\n { label: 'Unterwegs', emoji: '📦', color: 'warning', min: 40, max: 74, members: [] },\n { label: 'Kaum gepackt', emoji: '😴', color: 'danger', min: 1, max: 39, members: [] },\n { label: 'Nicht gestartet', emoji: '❌', color: 'neutral', min: 0, max: 0, members: [] },\n ];\n for (const m of this.members()) {\n const p = this.readyPercent(m);\n const bucket = buckets.find(b => p >= b.min && p <= b.max) ?? buckets[buckets.length - 1];\n bucket.members.push(m);\n }\n return buckets.filter(b => b.members.length > 0);\n });\n\n readonly flatSorted = computed(() =>\n [...this.members()].sort((a, b) => this.readyPercent(b) - this.readyPercent(a))\n );\n\n readyPercent(entry: MemberReadinessEntry): number {\n if (entry.totalItems === 0) return 100;\n return Math.round((entry.completedItems / entry.totalItems) * 100);\n }\n\n readyColor(entry: MemberReadinessEntry): 'success' | 'warning' | 'danger' | 'neutral' {\n const p = this.readyPercent(entry);\n if (p === 100) return 'success';\n if (p >= 75) return 'warning';\n if (p >= 40) return 'warning';\n if (p > 0) return 'danger';\n return 'neutral';\n }\n\n // Collapse state per group index\n readonly collapsed = new Map<number, boolean>();\n\n toggleGroup(index: number): void {\n this.collapsed.set(index, !this.collapsed.get(index));\n }\n\n isCollapsed(index: number): boolean {\n // Collapse groups with only-ready members by default if many groups\n return this.collapsed.get(index) ?? false;\n }\n}\n","<div class=\"c2g-mr\">\n\n <!-- Header -->\n <div class=\"c2g-mr__header\">\n <div class=\"c2g-mr__title-col\">\n <span class=\"c2g-mr__label\">👥 Gruppenbereitschaft</span>\n @if (tourName()) {\n <span class=\"c2g-mr__tour\">{{ tourName() }}</span>\n }\n </div>\n <div class=\"c2g-mr__summary-pill\">\n <span class=\"c2g-mr__summary-ready\">{{ fullyReady() }}</span>\n <span class=\"c2g-mr__summary-sep\">/</span>\n <span class=\"c2g-mr__summary-total\">{{ members().length }}</span>\n <span class=\"c2g-mr__summary-unit\">bereit</span>\n </div>\n </div>\n\n <!-- Overall progress bar -->\n <div class=\"c2g-mr__overall-track\" [attr.aria-valuenow]=\"overallPercent()\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"c2g-mr__overall-fill\"\n [style.width.%]=\"overallPercent()\"\n [class.c2g-mr__overall-fill--success]=\"overallPercent() === 100\">\n </div>\n <span class=\"c2g-mr__overall-pct\">{{ overallPercent() }}%</span>\n </div>\n\n <!-- GROUPED layout (6+ members) -->\n @if (useGrouped()) {\n <div class=\"c2g-mr__groups\">\n @for (group of groups(); track group.label; let gi = $index) {\n <div class=\"c2g-mr__group\" [class]=\"'c2g-mr__group--' + group.color\">\n\n <!-- Group header (clickable to toggle) -->\n <button class=\"c2g-mr__group-header\" (click)=\"toggleGroup(gi)\" type=\"button\">\n <span class=\"c2g-mr__group-emoji\">{{ group.emoji }}</span>\n <span class=\"c2g-mr__group-name\">{{ group.label }}</span>\n <span class=\"c2g-mr__group-count\">{{ group.members.length }}</span>\n <!-- Avatar stack preview (max 4) -->\n <div class=\"c2g-mr__avatar-stack\">\n @for (m of group.members.slice(0, 4); track m.name) {\n <span class=\"c2g-mr__avatar-tiny\" [class]=\"'c2g-mr__avatar-tiny--' + group.color\"\n [title]=\"m.name\">{{ m.initials }}</span>\n }\n @if (group.members.length > 4) {\n <span class=\"c2g-mr__avatar-tiny c2g-mr__avatar-tiny--more\">+{{ group.members.length - 4 }}</span>\n }\n </div>\n <span class=\"c2g-mr__group-chevron\" [class.c2g-mr__group-chevron--open]=\"!isCollapsed(gi)\">›</span>\n </button>\n\n <!-- Member rows (collapsible) -->\n @if (!isCollapsed(gi)) {\n <ul class=\"c2g-mr__member-list\">\n @for (m of group.members; track m.name) {\n <li class=\"c2g-mr__member\" [class.c2g-mr__member--self]=\"m.isSelf\">\n <span class=\"c2g-mr__avatar-sm\" [class]=\"'c2g-mr__avatar-sm--' + group.color\">\n {{ m.initials }}\n </span>\n <span class=\"c2g-mr__member-name\">\n {{ m.name }}\n @if (m.isSelf) { <span class=\"c2g-mr__self-tag\">Du</span> }\n </span>\n <div class=\"c2g-mr__mini-track\">\n <div class=\"c2g-mr__mini-fill\"\n [class]=\"'c2g-mr__mini-fill--' + group.color\"\n [style.width.%]=\"readyPercent(m)\">\n </div>\n </div>\n <span class=\"c2g-mr__member-pct\" [class]=\"'c2g-mr__member-pct--' + group.color\">\n {{ readyPercent(m) }}%\n </span>\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n\n } @else {\n <!-- FLAT layout (< 6 members) -->\n <ul class=\"c2g-mr__flat-list\">\n @for (m of flatSorted(); track m.name) {\n <li class=\"c2g-mr__member\" [class.c2g-mr__member--self]=\"m.isSelf\">\n <span class=\"c2g-mr__avatar-sm\" [class]=\"'c2g-mr__avatar-sm--' + readyColor(m)\">\n {{ m.initials }}\n </span>\n <span class=\"c2g-mr__member-name\">\n {{ m.name }}\n @if (m.isSelf) { <span class=\"c2g-mr__self-tag\">Du</span> }\n </span>\n <div class=\"c2g-mr__mini-track\">\n <div class=\"c2g-mr__mini-fill\"\n [class]=\"'c2g-mr__mini-fill--' + readyColor(m)\"\n [style.width.%]=\"readyPercent(m)\">\n </div>\n </div>\n <span class=\"c2g-mr__member-pct\" [class]=\"'c2g-mr__member-pct--' + readyColor(m)\">\n {{ readyPercent(m) }}%\n </span>\n </li>\n }\n </ul>\n }\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StreakData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-streak-widget',\n standalone: true,\n imports: [],\n templateUrl: './streak-widget.component.html',\n styleUrls: ['./streak-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StreakWidgetComponent {\n readonly data = input.required<StreakData>();\n\n readonly xpPercent = computed(() => {\n const d = this.data();\n if (d.nextLevelXp === 0) return 100;\n return Math.min(100, Math.round((d.experiencePoints / d.nextLevelXp) * 100));\n });\n\n readonly streakTier = computed((): 'cold' | 'warm' | 'hot' | 'legendary' => {\n const s = this.data().streakDays;\n if (s >= 365) return 'legendary';\n if (s >= 30) return 'hot';\n if (s >= 7) return 'warm';\n return 'cold';\n });\n\n readonly streakEmoji = computed(() => {\n switch (this.streakTier()) {\n case 'legendary': return '🏆';\n case 'hot': return '🔥';\n case 'warm': return '⚡';\n default: return '🌱';\n }\n });\n\n readonly levelLabel = computed(() => {\n const lvl = this.data().level;\n if (lvl >= 50) return 'Legende';\n if (lvl >= 30) return 'Experte';\n if (lvl >= 15) return 'Erfahren';\n if (lvl >= 5) return 'Fortgeschritten';\n return 'Einsteiger';\n });\n\n readonly streakLabel = computed(() => {\n const s = this.data().streakDays;\n if (s === 0) return 'Noch kein Streak';\n if (s === 1) return '1 Tag Streak';\n return `${s} Tage Streak`;\n });\n\n readonly xpToNext = computed(() =>\n Math.max(0, this.data().nextLevelXp - this.data().experiencePoints)\n );\n}\n","<div class=\"c2g-streak\" [class]=\"'c2g-streak--' + streakTier()\">\n\n <div class=\"c2g-streak__header\">\n <span class=\"c2g-streak__title\">Abenteurer-Level</span>\n <span class=\"c2g-streak__level-badge\">Lvl {{ data().level }}</span>\n </div>\n\n <div class=\"c2g-streak__hero\">\n <span class=\"c2g-streak__emoji\">{{ streakEmoji() }}</span>\n <div class=\"c2g-streak__streak-info\">\n <span class=\"c2g-streak__streak-count\">{{ data().streakDays }}</span>\n <span class=\"c2g-streak__streak-unit\">{{ data().streakDays === 1 ? 'Tag' : 'Tage' }}</span>\n </div>\n </div>\n\n <div class=\"c2g-streak__level-row\">\n <span class=\"c2g-streak__level-label\">{{ levelLabel() }}</span>\n <span class=\"c2g-streak__xp-label\">{{ data().experiencePoints }} / {{ data().nextLevelXp }} XP</span>\n </div>\n\n <div class=\"c2g-streak__xp-track\">\n <div class=\"c2g-streak__xp-fill\" [style.width.%]=\"xpPercent()\"></div>\n </div>\n\n <div class=\"c2g-streak__stats\">\n @if (data().totalDistanceKm != null) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">{{ data().totalDistanceKm }}</span>\n <span class=\"c2g-streak__stat-label\">km</span>\n </div>\n }\n @if (data().totalNightsCamped != null) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">{{ data().totalNightsCamped }}</span>\n <span class=\"c2g-streak__stat-label\">Nächte</span>\n </div>\n }\n @if (data().favoriteSeason) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">\n @switch (data().favoriteSeason) {\n @case ('spring') { 🌸 }\n @case ('summer') { ☀️ }\n @case ('autumn') { 🍂 }\n @case ('winter') { ❄️ }\n @default { 🏕️ }\n }\n </span>\n <span class=\"c2g-streak__stat-label\">Lieblingszeit</span>\n </div>\n }\n </div>\n\n @if (xpToNext() > 0) {\n <div class=\"c2g-streak__next-level\">\n Noch {{ xpToNext() }} XP bis Level {{ data().level + 1 }}\n </div>\n } @else {\n <div class=\"c2g-streak__next-level c2g-streak__next-level--ready\">\n Level Up bereit! 🎉\n </div>\n }\n\n</div>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, signal, OnDestroy\n} from '@angular/core';\nimport { CampingScoreData, CampingScoreFactor } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-camping-score-widget',\n standalone: true,\n imports: [],\n templateUrl: './camping-score-widget.component.html',\n styleUrls: ['./camping-score-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CampingScoreWidgetComponent implements OnDestroy {\n readonly data = input.required<CampingScoreData>();\n\n readonly tier = computed((): 'great' | 'good' | 'ok' | 'bad' => {\n const s = this.data().score;\n if (s >= 8) return 'great';\n if (s >= 6) return 'good';\n if (s >= 4) return 'ok';\n return 'bad';\n });\n\n readonly tierLabel = computed(() => {\n if (this.data().label) return this.data().label!;\n switch (this.tier()) {\n case 'great': return 'Perfektes Camping-Wetter';\n case 'good': return 'Gute Bedingungen';\n case 'ok': return 'Akzeptables Wetter';\n default: return 'Schwierige Bedingungen';\n }\n });\n\n readonly tierEmoji = computed(() => {\n switch (this.tier()) {\n case 'great': return '☀️';\n case 'good': return '⛅';\n case 'ok': return '🌤';\n default: return '🌧️';\n }\n });\n\n readonly factors = computed((): CampingScoreFactor[] =>\n this.data().factors ?? []\n );\n\n factorBarPct(score: number): number {\n return Math.min(score / 10, 1) * 100;\n }\n\n factorTier(score: number, inverted = false): string {\n const s = inverted ? 10 - score : score;\n if (s >= 6.5) return 'good';\n if (s >= 3.5) return 'mid';\n return 'bad';\n }\n\n // Count-up animation\n readonly displayScore = signal('0.0');\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().score;\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 900, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayScore.set((e * target).toFixed(1));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-cs\" [class]=\"'c2g-cs--' + tier()\">\n\n <!-- Ambient glow orb behind score -->\n <div class=\"c2g-cs__glow-orb\" aria-hidden=\"true\"></div>\n\n <div class=\"c2g-cs__header\">\n <div class=\"c2g-cs__title-col\">\n <span class=\"c2g-cs__label\">Camping-Score</span>\n @if (data().tourName) {\n <span class=\"c2g-cs__tour\">{{ data().tourName }}</span>\n }\n </div>\n <span class=\"c2g-cs__tier-badge\">\n {{ tierEmoji() }} {{ tierLabel() }}\n </span>\n </div>\n\n <!-- Score hero -->\n <div class=\"c2g-cs__score-hero\">\n <span class=\"c2g-cs__score-value\">{{ displayScore() }}</span>\n <div class=\"c2g-cs__score-meta\">\n <span class=\"c2g-cs__score-max\">/10</span>\n <!-- Progress bar -->\n <div class=\"c2g-cs__progress-track\">\n <div class=\"c2g-cs__progress-fill\"\n [style.width.%]=\"(data().score / 10) * 100\">\n </div>\n </div>\n </div>\n </div>\n\n <!-- Factor tiles (optional) -->\n @if (factors().length > 0) {\n <div class=\"c2g-cs__factors\">\n @for (f of factors(); track f.label) {\n <div class=\"c2g-cs__factor\"\n [class]=\"'c2g-cs__factor--' + factorTier(f.score, f.inverted)\"\n [class.c2g-cs__factor--inverted]=\"f.inverted\">\n <span class=\"c2g-cs__factor-direction\">{{ f.inverted ? '↓' : '↑' }}</span>\n <span class=\"c2g-cs__factor-icon\">{{ f.icon }}</span>\n <span class=\"c2g-cs__factor-label\">{{ f.label }}</span>\n <div class=\"c2g-cs__factor-bar-track\">\n <div class=\"c2g-cs__factor-bar-fill\"\n [style.width.%]=\"factorBarPct(f.score)\">\n </div>\n </div>\n <span class=\"c2g-cs__factor-score\">{{ f.score.toFixed(0) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Highlights -->\n @if (data().highlights?.length) {\n <ul class=\"c2g-cs__highlights\">\n @for (h of data().highlights!.slice(0, 3); track h) {\n <li class=\"c2g-cs__highlight\">\n <span class=\"c2g-cs__highlight-dot\"></span>\n {{ h }}\n </li>\n }\n </ul>\n }\n\n <!-- Warnings -->\n @if (data().warnings?.length) {\n <div class=\"c2g-cs__warnings\">\n @for (w of data().warnings!.slice(0, 2); track w) {\n <div class=\"c2g-cs__warning\">⚠️ {{ w }}</div>\n }\n </div>\n }\n\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RainVisualizationData, RainForecastDay } from './dashboard-widgets.models';\n\ninterface RainDay extends RainForecastDay {\n dayLabel: string;\n probPct: number;\n barPct: number;\n level: 'none' | 'light' | 'moderate' | 'heavy';\n icon: string;\n}\n\n@Component({\n selector: 'c2g-rain-visualization-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './rain-visualization-widget.component.html',\n styleUrls: ['./rain-visualization-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RainVisualizationWidgetComponent {\n readonly data = input.required<RainVisualizationData>();\n\n readonly enriched = computed((): RainDay[] => {\n const raw = this.data().days.slice(0, 7);\n const maxPrecip = Math.max(...raw.map(d => d.precipitation), 5);\n return raw.map(d => {\n const prob = d.precipitationProbability;\n const level: RainDay['level'] =\n prob < 0.2 ? 'none' :\n prob < 0.5 ? 'light' :\n prob < 0.75 ? 'moderate' : 'heavy';\n return {\n ...d,\n dayLabel: new Date(d.date).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' }),\n probPct: Math.round(prob * 100),\n barPct: Math.round((d.precipitation / maxPrecip) * 100),\n level,\n icon: d.icon ?? (level === 'none' ? '☀️' : level === 'light' ? '🌦' : level === 'moderate' ? '🌧' : '⛈'),\n };\n });\n });\n\n readonly overallRisk = computed((): 'low' | 'medium' | 'high' => {\n const days = this.enriched();\n const avg = days.reduce((s, d) => s + d.precipitationProbability, 0) / (days.length || 1);\n return avg >= 0.6 ? 'high' : avg >= 0.3 ? 'medium' : 'low';\n });\n\n readonly riskLabel = computed(() => {\n const days = this.enriched();\n const rainyDays = days.filter(d => d.precipitationProbability >= 0.4).length;\n const totalMm = days.reduce((s, d) => s + d.precipitation, 0);\n if (this.overallRisk() === 'high') return `${rainyDays} Regentage · ${totalMm.toFixed(0)} mm gesamt`;\n if (this.overallRisk() === 'medium') return `${rainyDays} Schauertag${rainyDays !== 1 ? 'e' : ''} möglich`;\n return 'Kaum Niederschlag erwartet';\n });\n\n readonly summaryIcon = computed(() => {\n switch (this.overallRisk()) {\n case 'high': return '⛈';\n case 'medium': return '🌦';\n default: return '☀️';\n }\n });\n}\n","<article class=\"c2g-rain\" [class]=\"'c2g-rain--' + overallRisk()\">\n\n <header class=\"c2g-rain__header\">\n <div class=\"c2g-rain__title-col\">\n <span class=\"c2g-rain__label\">🌧 Niederschlag</span>\n @if (data().tourName) {\n <span class=\"c2g-rain__tour\">{{ data().tourName }}</span>\n }\n </div>\n <div class=\"c2g-rain__summary\">\n <span class=\"c2g-rain__summary-icon\">{{ summaryIcon() }}</span>\n <span class=\"c2g-rain__summary-text\">{{ riskLabel() }}</span>\n </div>\n </header>\n\n <!-- Bar chart grid -->\n <div class=\"c2g-rain__grid\" aria-label=\"Niederschlagsvorhersage\" role=\"list\">\n @for (day of enriched(); track day.date) {\n <div class=\"c2g-rain__day c2g-rain__day--{{ day.level }}\" role=\"listitem\">\n\n <!-- Weather icon -->\n <span class=\"c2g-rain__day-icon\">{{ day.icon }}</span>\n\n <!-- Probability badge -->\n <span class=\"c2g-rain__prob c2g-rain__prob--{{ day.level }}\">\n {{ day.probPct }}%\n </span>\n\n <!-- Bar (precipitation mm) -->\n <div class=\"c2g-rain__bar-wrap\" [title]=\"day.precipitation + ' mm'\">\n <div\n class=\"c2g-rain__bar c2g-rain__bar--{{ day.level }}\"\n [style.height.%]=\"day.barPct\"\n ></div>\n </div>\n\n @if (day.precipitation > 0) {\n <span class=\"c2g-rain__mm\">{{ day.precipitation.toFixed(1) }}<small>mm</small></span>\n } @else {\n <span class=\"c2g-rain__mm c2g-rain__mm--dry\">–</span>\n }\n\n <!-- Day label -->\n <span class=\"c2g-rain__date\">{{ day.dayLabel }}</span>\n </div>\n }\n </div>\n\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { GroupCompositionData, MemberType } from './dashboard-widgets.models';\n\nconst TYPE_CONFIG: Record<MemberType, { emoji: string; label: string; color: string }> = {\n adult: { emoji: '🧑', label: 'Erwachsene', color: '#ff6b35' },\n senior: { emoji: '👴', label: 'Senioren', color: '#a855f7' },\n teen: { emoji: '🧒', label: 'Jugendliche', color: '#f59e0b' },\n child: { emoji: '👧', label: 'Kinder', color: '#84cc16' },\n toddler: { emoji: '👶', label: 'Kleinkinder', color: '#06b6d4' },\n dog: { emoji: '🐕', label: 'Hunde', color: '#f97316' },\n cat: { emoji: '🐈', label: 'Katzen', color: '#ec4899' },\n pet: { emoji: '🐾', label: 'Haustiere', color: '#6b7280' },\n};\n\nconst TYPE_ORDER: MemberType[] = ['adult', 'senior', 'teen', 'child', 'toddler', 'dog', 'cat', 'pet'];\n\n@Component({\n selector: 'c2g-group-composition-widget',\n standalone: true,\n imports: [],\n templateUrl: './group-composition-widget.component.html',\n styleUrls: ['./group-composition-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupCompositionWidgetComponent {\n readonly data = input.required<GroupCompositionData>();\n\n readonly sorted = computed(() =>\n [...this.data().members]\n .filter(m => m.count > 0)\n .sort((a, b) => TYPE_ORDER.indexOf(a.type) - TYPE_ORDER.indexOf(b.type))\n );\n\n readonly totalPeople = computed(() =>\n this.data().members\n .filter(m => ['adult', 'teen', 'child', 'toddler', 'senior'].includes(m.type))\n .reduce((s, m) => s + m.count, 0)\n );\n\n readonly totalPets = computed(() =>\n this.data().members\n .filter(m => ['dog', 'cat', 'pet'].includes(m.type))\n .reduce((s, m) => s + m.count, 0)\n );\n\n readonly maxCount = computed(() =>\n Math.max(...this.data().members.map(m => m.count), 1)\n );\n\n // Avatar cluster: up to 12 individual icons for the visual summary strip\n readonly avatars = computed(() => {\n const result: { emoji: string; color: string; key: string }[] = [];\n for (const entry of this.sorted()) {\n const cfg = TYPE_CONFIG[entry.type];\n const n = Math.min(entry.count, 6);\n for (let i = 0; i < n; i++) {\n result.push({ emoji: cfg.emoji, color: cfg.color, key: `${entry.type}-${i}` });\n }\n }\n return result.slice(0, 14);\n });\n\n configFor(type: MemberType) {\n return TYPE_CONFIG[type];\n }\n}\n","<div class=\"c2g-gc\">\n\n <div class=\"c2g-gc__header\">\n <div class=\"c2g-gc__title-col\">\n <span class=\"c2g-gc__label\">Gruppenkomposition</span>\n @if (data().groupName) {\n <span class=\"c2g-gc__name\">{{ data().groupName }}</span>\n }\n </div>\n <div class=\"c2g-gc__summary-pills\">\n <span class=\"c2g-gc__pill\">\n <span class=\"c2g-gc__pill-num\">{{ totalPeople() }}</span>\n <span class=\"c2g-gc__pill-sub\">Personen</span>\n </span>\n @if (totalPets() > 0) {\n <span class=\"c2g-gc__pill c2g-gc__pill--pets\">\n <span class=\"c2g-gc__pill-num\">{{ totalPets() }}</span>\n <span class=\"c2g-gc__pill-sub\">Tiere</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Avatar cluster strip -->\n <div class=\"c2g-gc__avatars\">\n @for (a of avatars(); track a.key) {\n <span class=\"c2g-gc__avatar\" [style.--av-color]=\"a.color\">{{ a.emoji }}</span>\n }\n @if (totalPeople() + totalPets() > avatars().length) {\n <span class=\"c2g-gc__avatar-more\">+{{ totalPeople() + totalPets() - avatars().length }}</span>\n }\n </div>\n\n <!-- Bar chart breakdown -->\n <div class=\"c2g-gc__bars\">\n @for (entry of sorted(); track entry.type) {\n <div class=\"c2g-gc__bar-row\">\n <span class=\"c2g-gc__bar-emoji\">{{ configFor(entry.type).emoji }}</span>\n <span class=\"c2g-gc__bar-label\">{{ configFor(entry.type).label }}</span>\n <div class=\"c2g-gc__bar-track\">\n <div class=\"c2g-gc__bar-fill\"\n [style.width.%]=\"(entry.count / maxCount()) * 100\"\n [style.background]=\"configFor(entry.type).color\">\n </div>\n </div>\n <span class=\"c2g-gc__bar-count\" [style.color]=\"configFor(entry.type).color\">\n {{ entry.count }}\n </span>\n @if (entry.names?.length) {\n <span class=\"c2g-gc__bar-names\">{{ entry.names!.join(', ') }}</span>\n }\n </div>\n }\n </div>\n\n</div>\n","// Minimal hand-crafted Lottie confetti animation.\n// 6 colored rectangles fall from top with rotation — ~3KB, no external dependency.\nexport const CONFETTI_ANIMATION_DATA = {\n v: '5.7.4',\n fr: 30,\n ip: 0,\n op: 60,\n w: 200,\n h: 160,\n nm: 'confetti',\n ddd: 0,\n assets: [],\n layers: [\n makeRect(0, '#22c55e', 40, -10, 140, 150, 120, 0),\n makeRect(1, '#f59e0b', 80, -10, 160, 145, 90, 5),\n makeRect(2, '#3b82f6', 120, -10, 120, 155, 80, -5),\n makeRect(3, '#ef4444', 60, -10, 150, 148, 140, 10),\n makeRect(4, '#a855f7', 100, -10, 130, 152, 60, -8),\n makeRect(5, '#f97316', 140, -10, 110, 146, 100, 6),\n makeRect(6, '#22c55e', 30, -10, 145, 153, 110, -12),\n makeRect(7, '#3b82f6', 170, -10, 155, 149, 70, 15),\n ],\n};\n\nfunction makeRect(\n ind: number,\n color: string,\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n startRot: number,\n rotSpeed: number,\n): object {\n const hex = color.replace('#', '');\n const r = parseInt(hex.slice(0, 2), 16) / 255;\n const g = parseInt(hex.slice(2, 4), 16) / 255;\n const b = parseInt(hex.slice(4, 6), 16) / 255;\n\n return {\n ddd: 0,\n ind,\n ty: 4,\n nm: `confetti-${ind}`,\n sr: 1,\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { t: 0, s: [startRot], e: [startRot + rotSpeed * 60], i: { x: [0.5], y: [1] }, o: { x: [0.5], y: [0] } },\n { t: 60, s: [startRot + rotSpeed * 60] },\n ],\n },\n p: {\n a: 1,\n k: [\n { t: 0, s: [startX, startY, 0], e: [endX, endY, 0], i: { x: [0.5], y: [1] }, o: { x: [0.5], y: [0] } },\n { t: 60, s: [endX, endY, 0] },\n ],\n },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] },\n },\n ao: 0,\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [8, 8] },\n p: { a: 0, k: [0, 0] },\n r: { a: 0, k: 1 },\n nm: 'rect',\n },\n {\n ty: 'fl',\n c: { a: 0, k: [r, g, b, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'fill',\n },\n ],\n ip: 0,\n op: 60,\n st: 0,\n bm: 0,\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { LottieComponent, AnimationOptions } from 'ngx-lottie';\nimport { CriticalItemsAlertData, CriticalItemAlertEntry } from './dashboard-widgets.models';\nimport { CONFETTI_ANIMATION_DATA } from './confetti-success.lottie';\n\n@Component({\n selector: 'c2g-critical-items-alert-widget',\n standalone: true,\n imports: [LottieComponent],\n templateUrl: './critical-items-alert-widget.component.html',\n styleUrls: ['./critical-items-alert-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CriticalItemsAlertWidgetComponent {\n readonly data = input.required<CriticalItemsAlertData>();\n\n readonly daysUntil = computed(() => {\n const from = new Date(this.data().tourFromDate);\n from.setHours(0, 0, 0, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return Math.max(0, Math.ceil((from.getTime() - today.getTime()) / 86400000));\n });\n\n readonly urgency = computed((): 'critical' | 'warning' | 'ok' => {\n const open = this.data().openItems.length;\n const days = this.daysUntil();\n if (open === 0) return 'ok';\n if (days <= 2 || (days <= 5 && open > 3)) return 'critical';\n return 'warning';\n });\n\n readonly urgencyLabel = computed(() => {\n const d = this.daysUntil();\n if (d === 0) return 'Heute gehts los!';\n if (d === 1) return 'Morgen gehts los!';\n return `Noch ${d} Tage`;\n });\n\n readonly allClear = computed(() => this.data().openItems.length === 0);\n\n readonly personalItems = computed(() =>\n this.data().openItems.filter(i => i.scope === 'personal').slice(0, 4)\n );\n\n readonly sharedItems = computed(() =>\n this.data().openItems.filter(i => i.scope === 'shared').slice(0, 4)\n );\n\n readonly personalHidden = computed(() =>\n Math.max(0, this.data().openItems.filter(i => i.scope === 'personal').length - 4)\n );\n\n readonly sharedHidden = computed(() =>\n Math.max(0, this.data().openItems.filter(i => i.scope === 'shared').length - 4)\n );\n\n // Resolved visual type for the all-clear state\n readonly successVisualType = computed(() =>\n this.data().successVisual?.type ?? 'lottie'\n );\n\n readonly lottieOptions = computed((): AnimationOptions => {\n const v = this.data().successVisual;\n return {\n animationData: v?.type === 'lottie' ? v.value : CONFETTI_ANIMATION_DATA,\n loop: false,\n autoplay: true,\n };\n });\n\n readonly imageValue = computed(() => {\n const v = this.data().successVisual;\n return v?.type === 'image' ? (v.value as string) : null;\n });\n\n readonly imageAlt = computed(() =>\n this.data().successVisual?.alt ?? 'Erfolg'\n );\n\n readonly iconValue = computed(() => {\n const v = this.data().successVisual;\n return v?.type === 'icon' ? (v.value as string) : '🎉';\n });\n\n sharedProgress(item: CriticalItemAlertEntry): number {\n if (!item.neededCount) return 0;\n return Math.min((item.coveredCount ?? 0) / item.neededCount, 1) * 100;\n }\n}\n","<div class=\"c2g-cia\" [class]=\"'c2g-cia--' + urgency()\">\n\n <div class=\"c2g-cia__header\">\n <div class=\"c2g-cia__title-col\">\n <span class=\"c2g-cia__label\">\n @if (urgency() === 'critical') { 🚨 }\n @else if (urgency() === 'warning') { ⚠️ }\n @else { ✅ }\n Kritische Items\n </span>\n @if (data().tourName) {\n <span class=\"c2g-cia__tour\">{{ data().tourName }}</span>\n }\n </div>\n <div class=\"c2g-cia__countdown\">\n <span class=\"c2g-cia__countdown-number\">{{ daysUntil() }}</span>\n <span class=\"c2g-cia__countdown-unit\">{{ daysUntil() === 1 ? 'Tag' : 'Tage' }}</span>\n </div>\n </div>\n\n @if (allClear()) {\n <div class=\"c2g-cia__all-clear\">\n\n <!-- Visual slot -->\n <div class=\"c2g-cia__success-visual\" aria-hidden=\"true\">\n @switch (successVisualType()) {\n @case ('lottie') {\n <ng-lottie [options]=\"lottieOptions()\" width=\"100px\" height=\"80px\" />\n }\n @case ('image') {\n <img class=\"c2g-cia__success-img\"\n [src]=\"imageValue()\"\n [alt]=\"imageAlt()\" />\n }\n @case ('icon') {\n <span class=\"c2g-cia__success-icon\">{{ iconValue() }}</span>\n }\n }\n </div>\n\n <div class=\"c2g-cia__all-clear-text-block\">\n <span class=\"c2g-cia__all-clear-headline\">Alles dabei! 🎉</span>\n <span class=\"c2g-cia__all-clear-sub\">Alle kritischen Items sind gepackt — bereit für das Abenteuer.</span>\n </div>\n </div>\n } @else {\n\n <!-- Progress summary -->\n <div class=\"c2g-cia__summary\">\n <span class=\"c2g-cia__open-count\">{{ data().openItems.length }}</span>\n <span class=\"c2g-cia__summary-text\">\n von {{ data().totalCritical }} kritischen\n {{ data().totalCritical === 1 ? 'Item fehlt' : 'Items fehlen' }}\n </span>\n </div>\n <div class=\"c2g-cia__progress-track\">\n <div class=\"c2g-cia__progress-fill\"\n [style.width.%]=\"((data().totalCritical - data().openItems.length) / data().totalCritical) * 100\">\n </div>\n </div>\n\n <!-- Side-by-side sections -->\n <div class=\"c2g-cia__sections\">\n\n <!-- Personal items -->\n @if (personalItems().length > 0) {\n <div class=\"c2g-cia__section c2g-cia__section--personal\">\n <div class=\"c2g-cia__section-header\">\n <span class=\"c2g-cia__section-icon c2g-cia__section-icon--personal\">👤</span>\n <div class=\"c2g-cia__section-titles\">\n <span class=\"c2g-cia__section-title\">Persönlich</span>\n <span class=\"c2g-cia__section-hint\">Jeder braucht es selbst</span>\n </div>\n </div>\n <ul class=\"c2g-cia__list\">\n @for (item of personalItems(); track item.name) {\n <li class=\"c2g-cia__item c2g-cia__item--personal\">\n <span class=\"c2g-cia__item-dot\"></span>\n <span class=\"c2g-cia__item-name\">{{ item.name }}</span>\n @if (item.missingFor?.length) {\n <span class=\"c2g-cia__item-missing\">{{ item.missingFor!.join(', ') }}</span>\n }\n </li>\n }\n @if (personalHidden() > 0) {\n <li class=\"c2g-cia__item c2g-cia__item--more\">+ {{ personalHidden() }} weitere</li>\n }\n </ul>\n </div>\n }\n\n <!-- Shared items -->\n @if (sharedItems().length > 0) {\n <div class=\"c2g-cia__section c2g-cia__section--shared\">\n <div class=\"c2g-cia__section-header\">\n <span class=\"c2g-cia__section-icon c2g-cia__section-icon--shared\">👥</span>\n <div class=\"c2g-cia__section-titles\">\n <span class=\"c2g-cia__section-title\">Geteilt</span>\n <span class=\"c2g-cia__section-hint\">Mindestmenge muss gedeckt sein</span>\n </div>\n </div>\n <ul class=\"c2g-cia__list\">\n @for (item of sharedItems(); track item.name) {\n <li class=\"c2g-cia__item c2g-cia__item--shared\">\n <div class=\"c2g-cia__shared-top\">\n <span class=\"c2g-cia__item-dot\"></span>\n <span class=\"c2g-cia__item-name\">{{ item.name }}</span>\n @if (item.neededCount) {\n <span class=\"c2g-cia__shared-ratio\">\n {{ item.coveredCount ?? 0 }}/{{ item.neededCount }}\n </span>\n }\n </div>\n @if (item.neededCount && item.neededCount > 1) {\n <div class=\"c2g-cia__shared-bar-track\">\n <div class=\"c2g-cia__shared-bar-fill\" [style.width.%]=\"sharedProgress(item)\"></div>\n </div>\n }\n @if (item.coveredBy?.length) {\n <span class=\"c2g-cia__shared-covered\">✓ {{ item.coveredBy!.join(', ') }}</span>\n }\n </li>\n }\n @if (sharedHidden() > 0) {\n <li class=\"c2g-cia__item c2g-cia__item--more\">+ {{ sharedHidden() }} weitere</li>\n }\n </ul>\n </div>\n }\n\n </div>\n }\n\n <div class=\"c2g-cia__footer\">{{ urgencyLabel() }}</div>\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { WindIndicatorData, WindForecastDay } from './dashboard-widgets.models';\n\nconst BEAUFORT: { max: number; label: string; emoji: string; color: string }[] = [\n { max: 1, label: 'Windstille', emoji: '🌬️', color: '#22c55e' },\n { max: 5, label: 'Leichte Brise', emoji: '🌬️', color: '#84cc16' },\n { max: 11, label: 'Schwache Brise',emoji: '💨', color: '#84cc16' },\n { max: 19, label: 'Schwacher Wind',emoji: '💨', color: '#f59e0b' },\n { max: 28, label: 'Mäßiger Wind', emoji: '💨', color: '#f59e0b' },\n { max: 38, label: 'Frischer Wind', emoji: '🌀', color: '#f97316' },\n { max: 49, label: 'Starker Wind', emoji: '🌀', color: '#f97316' },\n { max: 61, label: 'Stürmisch', emoji: '⛈️', color: '#ef4444' },\n { max: 74, label: 'Sturm', emoji: '⛈️', color: '#ef4444' },\n { max: 88, label: 'Schwerer Sturm',emoji: '🌪️', color: '#dc2626' },\n { max: 102, label: 'Orkan', emoji: '🌪️', color: '#dc2626' },\n { max: 999, label: 'Schwerer Orkan',emoji: '🌪️', color: '#dc2626' },\n];\n\nfunction beaufortFor(kmh: number) {\n return BEAUFORT.find(b => kmh <= b.max) ?? BEAUFORT[BEAUFORT.length - 1];\n}\n\nfunction directionLabel(deg: number): string {\n const dirs = ['N','NO','O','SO','S','SW','W','NW'];\n return dirs[Math.round(deg / 45) % 8];\n}\n\n@Component({\n selector: 'c2g-wind-indicator-widget',\n standalone: true,\n imports: [],\n templateUrl: './wind-indicator-widget.component.html',\n styleUrls: ['./wind-indicator-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WindIndicatorWidgetComponent {\n readonly data = input.required<WindIndicatorData>();\n\n readonly days = computed(() => this.data().days.slice(0, 7));\n\n readonly peak = computed(() =>\n this.days().reduce((max, d) => d.windSpeed > max.windSpeed ? d : max, this.days()[0])\n );\n\n readonly peakBeaufort = computed(() => beaufortFor(this.peak()?.windSpeed ?? 0));\n\n readonly overallRisk = computed((): 'calm' | 'breezy' | 'windy' | 'stormy' => {\n const avg = this.days().reduce((s, d) => s + d.windSpeed, 0) / (this.days().length || 1);\n if (avg >= 50) return 'stormy';\n if (avg >= 28) return 'windy';\n if (avg >= 11) return 'breezy';\n return 'calm';\n });\n\n enriched = computed(() =>\n this.days().map(d => ({\n ...d,\n bf: beaufortFor(d.windSpeed),\n dirLabel: directionLabel(d.windDirection),\n // Arrow rotation: wind direction = where it comes FROM → arrow points that way\n arrowDeg: d.windDirection,\n barPct: Math.min(100, (d.windSpeed / 100) * 100),\n }))\n );\n\n formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' });\n }\n}\n","<article class=\"c2g-wind\" [class]=\"'c2g-wind--' + overallRisk()\">\n\n <header class=\"c2g-wind__header\">\n <div class=\"c2g-wind__title-col\">\n <span class=\"c2g-wind__label\">💨 Wind</span>\n @if (data().tourName) {\n <span class=\"c2g-wind__tour\">{{ data().tourName }}</span>\n }\n </div>\n @if (peak()) {\n <div class=\"c2g-wind__peak-badge\">\n <span class=\"c2g-wind__peak-emoji\">{{ peakBeaufort().emoji }}</span>\n <div class=\"c2g-wind__peak-text\">\n <span class=\"c2g-wind__peak-speed\">{{ peak().windSpeed }}<small>km/h</small></span>\n <span class=\"c2g-wind__peak-sublabel\">Spitze</span>\n </div>\n </div>\n }\n </header>\n\n <div class=\"c2g-wind__days\">\n @for (day of enriched(); track day.date) {\n <div class=\"c2g-wind__day\">\n\n <!-- Compass rose -->\n <svg class=\"c2g-wind__compass\" viewBox=\"0 0 40 40\" aria-hidden=\"true\">\n <circle cx=\"20\" cy=\"20\" r=\"18\" class=\"c2g-wind__compass-ring\"/>\n <text class=\"c2g-wind__compass-n\" x=\"20\" y=\"7\">N</text>\n <g [style.transform-origin]=\"'20px 20px'\" [style.transform]=\"'rotate(' + day.arrowDeg + 'deg)'\">\n <polygon points=\"20,4 23,18 20,16 17,18\" [attr.fill]=\"day.bf.color\"/>\n <polygon points=\"20,36 17,22 20,24 23,22\" fill=\"rgba(255,255,255,0.18)\"/>\n </g>\n <circle cx=\"20\" cy=\"20\" r=\"2.5\" [attr.fill]=\"day.bf.color\"/>\n </svg>\n\n <!-- Date -->\n <span class=\"c2g-wind__date\">{{ formatDate(day.date) }}</span>\n\n <!-- Speed bar -->\n <div class=\"c2g-wind__bar-track\">\n <div class=\"c2g-wind__bar-fill\"\n [style.width.%]=\"day.barPct\"\n [style.background]=\"day.bf.color\">\n </div>\n </div>\n\n <!-- Speed value -->\n <span class=\"c2g-wind__speed\" [style.color]=\"day.bf.color\">\n {{ day.windSpeed }}<small>km/h</small>\n </span>\n\n <!-- Beaufort + direction -->\n <span class=\"c2g-wind__meta\">{{ day.dirLabel }} · {{ day.bf.label }}</span>\n\n </div>\n }\n </div>\n\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TotalKmData, TotalKmSparkPoint } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-total-km-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './total-km-widget.component.html',\n styleUrl: './total-km-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TotalKmWidgetComponent implements OnDestroy {\n readonly data = input.required<TotalKmData>();\n\n readonly displayKm = signal(0);\n readonly displayYearKm = signal(0);\n\n private rafId = 0;\n private rafYearId = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().totalKm;\n this.animateCount(target, this.displayKm, 'rafId');\n });\n effect(() => {\n const target = this.data().yearKm ?? 0;\n this.animateCount(target, this.displayYearKm, 'rafYearId');\n });\n }\n\n private animateCount(\n target: number,\n sig: ReturnType<typeof signal<number>>,\n rafKey: 'rafId' | 'rafYearId',\n ): void {\n cancelAnimationFrame(this[rafKey]);\n const start = performance.now();\n const duration = 1400;\n const step = (now: number) => {\n const t = Math.min((now - start) / duration, 1);\n const eased = 1 - Math.pow(1 - t, 4);\n sig.set(Math.round(eased * target));\n if (t < 1) this[rafKey] = requestAnimationFrame(step);\n };\n this[rafKey] = requestAnimationFrame(step);\n }\n\n readonly sparklinePath = computed(() => {\n const points = this.data().sparkline;\n if (!points || points.length < 2) return null;\n const W = 200, H = 48;\n const maxKm = Math.max(...points.map(p => p.km));\n const minKm = Math.min(...points.map(p => p.km));\n const range = maxKm - minKm || 1;\n const xs = points.map((_, i) => (i / (points.length - 1)) * W);\n const ys = points.map(p => H - ((p.km - minKm) / range) * (H - 8) - 2);\n\n let line = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < points.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n line += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n const area = `${line} L ${xs[xs.length - 1]} ${H} L ${xs[0]} ${H} Z`;\n return { line, area, lastX: xs[xs.length - 1], lastY: ys[ys.length - 1] };\n });\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.rafId);\n cancelAnimationFrame(this.rafYearId);\n }\n}\n","<article class=\"c2g-tkm\">\n <header class=\"c2g-tkm__header\">\n <span class=\"c2g-tkm__icon\" aria-hidden=\"true\">🗺️</span>\n <div class=\"c2g-tkm__titles\">\n <h3 class=\"c2g-tkm__title\">Gesamt-Kilometer</h3>\n @if (data().tourCount) {\n <span class=\"c2g-tkm__sub\">{{ data().tourCount }} Touren</span>\n }\n </div>\n </header>\n\n <div class=\"c2g-tkm__hero\">\n <span class=\"c2g-tkm__value\">{{ displayKm() | number:'1.0-0' }}</span>\n <span class=\"c2g-tkm__unit\">km</span>\n </div>\n\n @if (data().yearKm) {\n <div class=\"c2g-tkm__year-row\">\n <span class=\"c2g-tkm__year-label\">Dieses Jahr</span>\n <span class=\"c2g-tkm__year-value\">{{ displayYearKm() | number:'1.0-0' }} km</span>\n </div>\n }\n\n @if (sparklinePath()) {\n <div class=\"c2g-tkm__chart\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 200 48\" preserveAspectRatio=\"none\" class=\"c2g-tkm__svg\">\n <defs>\n <linearGradient id=\"tkm-area-grad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"var(--c2g-theme-primary, #ff6b35)\" stop-opacity=\"0.35\"/>\n <stop offset=\"100%\" stop-color=\"var(--c2g-theme-primary, #ff6b35)\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n <path class=\"c2g-tkm__area\" [attr.d]=\"sparklinePath()!.area\" fill=\"url(#tkm-area-grad)\" />\n <path class=\"c2g-tkm__line\" [attr.d]=\"sparklinePath()!.line\" />\n <circle\n class=\"c2g-tkm__dot\"\n [attr.cx]=\"sparklinePath()!.lastX\"\n [attr.cy]=\"sparklinePath()!.lastY\"\n r=\"3\"\n />\n </svg>\n </div>\n }\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TourTypeSplitData, TourType } from './dashboard-widgets.models';\n\ninterface Segment {\n type: TourType;\n label: string;\n emoji: string;\n color: string;\n count: number;\n km: number;\n pct: number;\n offset: number;\n dash: number;\n}\n\nconst TYPE_CONFIG: Record<TourType, { label: string; emoji: string; color: string }> = {\n hiking: { label: 'Wandern', emoji: '🥾', color: '#ff6b35' },\n cycling: { label: 'Radfahren', emoji: '🚵', color: '#22c55e' },\n paddling: { label: 'Paddeln', emoji: '🛶', color: '#3b82f6' },\n climbing: { label: 'Klettern', emoji: '🧗', color: '#a855f7' },\n skiing: { label: 'Skifahren', emoji: '⛷️', color: '#06b6d4' },\n other: { label: 'Sonstige', emoji: '🏕️', color: '#94a3b8' },\n};\n\nconst CIRCUMFERENCE = 2 * Math.PI * 52; // r=52\n\n@Component({\n selector: 'c2g-tour-type-split-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tour-type-split-widget.component.html',\n styleUrl: './tour-type-split-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TourTypeSplitWidgetComponent {\n readonly data = input.required<TourTypeSplitData>();\n\n readonly segments = computed((): Segment[] => {\n const entries = this.data().entries.filter(e => e.count > 0);\n const total = entries.reduce((s, e) => s + e.count, 0) || 1;\n const GAP = CIRCUMFERENCE * 0.012;\n let offset = 0;\n return entries.map(e => {\n const pct = e.count / total;\n const dash = Math.max(0, pct * CIRCUMFERENCE - GAP);\n const cfg = TYPE_CONFIG[e.type];\n const seg: Segment = {\n type: e.type,\n label: cfg.label,\n emoji: cfg.emoji,\n color: cfg.color,\n count: e.count,\n km: e.km ?? 0,\n pct,\n offset,\n dash,\n };\n offset += pct * CIRCUMFERENCE;\n return seg;\n });\n });\n\n readonly dominantSegment = computed(() => {\n const segs = this.segments();\n return segs.length > 0 ? segs.reduce((a, b) => (a.count > b.count ? a : b)) : null;\n });\n\n readonly circumference = CIRCUMFERENCE;\n\n trackByType(_: number, seg: Segment): TourType {\n return seg.type;\n }\n}\n","<article class=\"c2g-tts\">\n <header class=\"c2g-tts__header\">\n <span class=\"c2g-tts__icon\" aria-hidden=\"true\">🧭</span>\n <div class=\"c2g-tts__titles\">\n <h3 class=\"c2g-tts__title\">Tour-Typen</h3>\n <span class=\"c2g-tts__sub\">{{ data().totalTours }} Touren gesamt</span>\n </div>\n </header>\n\n <div class=\"c2g-tts__body\">\n <div class=\"c2g-tts__donut-wrap\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 128 128\" class=\"c2g-tts__donut\">\n <circle cx=\"64\" cy=\"64\" r=\"52\" class=\"c2g-tts__track\"/>\n @for (seg of segments(); track trackByType($index, seg)) {\n <circle\n cx=\"64\" cy=\"64\" r=\"52\"\n class=\"c2g-tts__arc\"\n [style.stroke]=\"seg.color\"\n [style.stroke-dasharray]=\"seg.dash + ' ' + circumference\"\n [style.stroke-dashoffset]=\"-seg.offset\"\n />\n }\n </svg>\n @if (dominantSegment(); as dom) {\n <div class=\"c2g-tts__center\">\n <span class=\"c2g-tts__center-emoji\">{{ dom.emoji }}</span>\n <span class=\"c2g-tts__center-label\">{{ dom.label }}</span>\n </div>\n }\n </div>\n\n <ul class=\"c2g-tts__legend\" role=\"list\">\n @for (seg of segments(); track trackByType($index, seg)) {\n <li class=\"c2g-tts__legend-item\">\n <span class=\"c2g-tts__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-tts__legend-emoji\">{{ seg.emoji }}</span>\n <span class=\"c2g-tts__legend-name\">{{ seg.label }}</span>\n <span class=\"c2g-tts__legend-count\">{{ seg.count }}</span>\n <span class=\"c2g-tts__legend-pct\">{{ (seg.pct * 100) | number:'1.0-0' }}%</span>\n </li>\n }\n </ul>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TourRhythmData, TourRhythmWeek } from './dashboard-widgets.models';\n\nconst MONTH_LABELS = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\n\ninterface WeekCell extends TourRhythmWeek {\n col: number;\n monthLabel: string | null;\n}\n\n@Component({\n selector: 'c2g-tour-rhythm-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tour-rhythm-widget.component.html',\n styleUrl: './tour-rhythm-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TourRhythmWidgetComponent {\n readonly data = input.required<TourRhythmData>();\n\n readonly cells = computed((): WeekCell[] => {\n const weeks = this.data().weeks;\n let prevMonth = -1;\n return weeks.map((w, i) => {\n const d = new Date(w.weekStart);\n const month = d.getMonth();\n const monthLabel = month !== prevMonth ? MONTH_LABELS[month] : null;\n prevMonth = month;\n return { ...w, col: i, monthLabel };\n });\n });\n\n readonly totalCols = computed(() => this.data().weeks.length);\n\n readonly levelColors = ['#1e293b', '#166534', '#16a34a', '#4ade80', '#86efac'];\n\n levelColor(level: 0 | 1 | 2 | 3 | 4): string {\n return this.levelColors[level];\n }\n\n trackByCol(_: number, cell: WeekCell): number {\n return cell.col;\n }\n}\n","<article class=\"c2g-trh\">\n <header class=\"c2g-trh__header\">\n <span class=\"c2g-trh__icon\" aria-hidden=\"true\">📅</span>\n <div class=\"c2g-trh__titles\">\n <h3 class=\"c2g-trh__title\">Tour-Rhythmus</h3>\n <span class=\"c2g-trh__sub\">Letzte 52 Wochen</span>\n </div>\n <div class=\"c2g-trh__stats\">\n @if (data().currentStreakWeeks) {\n <span class=\"c2g-trh__streak\">🔥 {{ data().currentStreakWeeks }} Wochen-Streak</span>\n }\n </div>\n </header>\n\n <div class=\"c2g-trh__grid-wrap\" aria-label=\"Aktivitäts-Heatmap der letzten 52 Wochen\" role=\"img\">\n <div class=\"c2g-trh__month-labels\" aria-hidden=\"true\">\n @for (cell of cells(); track cell.col) {\n @if (cell.monthLabel) {\n <span class=\"c2g-trh__month-label\" [style.grid-column]=\"cell.col + 1\">\n {{ cell.monthLabel }}\n </span>\n }\n }\n </div>\n <div class=\"c2g-trh__grid\">\n @for (cell of cells(); track trackByCol($index, cell)) {\n <div\n class=\"c2g-trh__cell c2g-trh__cell--level-{{ cell.level }}\"\n [style.background]=\"levelColor(cell.level)\"\n [title]=\"cell.tourName ? cell.tourName + (cell.km ? ' · ' + cell.km + ' km' : '') : cell.weekStart\"\n ></div>\n }\n </div>\n </div>\n\n <div class=\"c2g-trh__legend\" aria-hidden=\"true\">\n <span class=\"c2g-trh__legend-label\">Weniger</span>\n @for (l of [0, 1, 2, 3, 4]; track l) {\n <div class=\"c2g-trh__legend-cell\" [style.background]=\"levelColors[l]\"></div>\n }\n <span class=\"c2g-trh__legend-label\">Mehr</span>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { SeasonDnaData, Season } from './dashboard-widgets.models';\n\ninterface SeasonSegment {\n season: Season;\n label: string;\n emoji: string;\n color: string;\n tourCount: number;\n km: number;\n nights: number;\n pct: number;\n startAngle: number;\n endAngle: number;\n pathD: string;\n labelX: number;\n labelY: number;\n}\n\nconst SEASON_CONFIG: Record<Season, { label: string; emoji: string; color: string }> = {\n spring: { label: 'Frühling', emoji: '🌸', color: '#84cc16' },\n summer: { label: 'Sommer', emoji: '☀️', color: '#f59e0b' },\n autumn: { label: 'Herbst', emoji: '🍂', color: '#ef4444' },\n winter: { label: 'Winter', emoji: '❄️', color: '#3b82f6' },\n};\n\nconst CX = 64, CY = 64, R_OUTER = 56, R_INNER = 28;\n\nfunction polarToXY(cx: number, cy: number, r: number, angleDeg: number): [number, number] {\n const rad = ((angleDeg - 90) * Math.PI) / 180;\n return [cx + r * Math.cos(rad), cy + r * Math.sin(rad)];\n}\n\nfunction donutSegmentPath(cx: number, cy: number, ro: number, ri: number, start: number, end: number): string {\n const [ox1, oy1] = polarToXY(cx, cy, ro, start);\n const [ox2, oy2] = polarToXY(cx, cy, ro, end);\n const [ix1, iy1] = polarToXY(cx, cy, ri, end);\n const [ix2, iy2] = polarToXY(cx, cy, ri, start);\n const large = end - start > 180 ? 1 : 0;\n return [\n `M ${ox1} ${oy1}`,\n `A ${ro} ${ro} 0 ${large} 1 ${ox2} ${oy2}`,\n `L ${ix1} ${iy1}`,\n `A ${ri} ${ri} 0 ${large} 0 ${ix2} ${iy2}`,\n 'Z',\n ].join(' ');\n}\n\nconst SEASON_ORDER: Season[] = ['spring', 'summer', 'autumn', 'winter'];\n\n@Component({\n selector: 'c2g-season-dna-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './season-dna-widget.component.html',\n styleUrl: './season-dna-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeasonDnaWidgetComponent {\n readonly data = input.required<SeasonDnaData>();\n\n readonly segments = computed((): SeasonSegment[] => {\n const entries = this.data().entries;\n const total = entries.reduce((s, e) => s + e.tourCount, 0) || 1;\n const GAP = 3;\n let angle = 0;\n return SEASON_ORDER.map(season => {\n const entry = entries.find(e => e.season === season);\n const count = entry?.tourCount ?? 0;\n const pct = count / total;\n const span = Math.max(0, pct * 360 - GAP);\n const start = angle;\n const end = angle + span;\n angle += pct * 360;\n const cfg = SEASON_CONFIG[season];\n const mid = (start + end) / 2;\n const [lx, ly] = polarToXY(CX, CY, (R_OUTER + R_INNER) / 2, mid);\n return {\n season,\n label: cfg.label,\n emoji: cfg.emoji,\n color: cfg.color,\n tourCount: count,\n km: entry?.km ?? 0,\n nights: entry?.nights ?? 0,\n pct,\n startAngle: start,\n endAngle: end,\n pathD: span > 2 ? donutSegmentPath(CX, CY, R_OUTER, R_INNER, start, end) : '',\n labelX: lx,\n labelY: ly,\n };\n }).filter(s => s.pct > 0);\n });\n\n readonly dominantSeason = computed(() => {\n const segs = this.segments();\n if (segs.length === 0) return null;\n const dom = segs.reduce((a, b) => (a.tourCount > b.tourCount ? a : b));\n return SEASON_CONFIG[dom.season];\n });\n\n trackBySeason(_: number, seg: SeasonSegment): Season {\n return seg.season;\n }\n}\n","<article class=\"c2g-sdn\">\n <header class=\"c2g-sdn__header\">\n <span class=\"c2g-sdn__icon\" aria-hidden=\"true\">🌍</span>\n <div class=\"c2g-sdn__titles\">\n <h3 class=\"c2g-sdn__title\">Saison-DNA</h3>\n <span class=\"c2g-sdn__sub\">{{ data().totalTours }} Touren analysiert</span>\n </div>\n </header>\n\n <div class=\"c2g-sdn__body\">\n <div class=\"c2g-sdn__chart-wrap\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 128 128\" class=\"c2g-sdn__svg\">\n @for (seg of segments(); track trackBySeason($index, seg)) {\n @if (seg.pathD) {\n <path\n class=\"c2g-sdn__segment\"\n [attr.d]=\"seg.pathD\"\n [style.fill]=\"seg.color\"\n />\n }\n }\n </svg>\n @if (dominantSeason(); as dom) {\n <div class=\"c2g-sdn__center\">\n <span class=\"c2g-sdn__center-emoji\">{{ dom.emoji }}</span>\n <span class=\"c2g-sdn__center-label\">{{ dom.label }}</span>\n </div>\n }\n </div>\n\n <ul class=\"c2g-sdn__legend\" role=\"list\">\n @for (seg of segments(); track trackBySeason($index, seg)) {\n <li class=\"c2g-sdn__legend-item\">\n <span class=\"c2g-sdn__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-sdn__legend-emoji\">{{ seg.emoji }}</span>\n <div class=\"c2g-sdn__legend-text\">\n <span class=\"c2g-sdn__legend-name\">{{ seg.label }}</span>\n <span class=\"c2g-sdn__legend-detail\">\n {{ seg.tourCount }} Tour{{ seg.tourCount !== 1 ? 'en' : '' }}\n @if (seg.km) { · {{ seg.km | number:'1.0-0' }} km }\n </span>\n </div>\n <span class=\"c2g-sdn__legend-pct\">{{ (seg.pct * 100) | number:'1.0-0' }}%</span>\n </li>\n }\n </ul>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { WeightHistoryData, WeightHistoryPoint } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-weight-history-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './weight-history-widget.component.html',\n styleUrl: './weight-history-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeightHistoryWidgetComponent {\n readonly data = input.required<WeightHistoryData>();\n\n readonly points = computed(() => this.data().points.slice(-12));\n\n readonly sparklinePath = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return null;\n const W = 200, H = 48;\n const weights = pts.map(p => p.weightG);\n const maxW = Math.max(...weights);\n const minW = Math.min(...weights);\n const range = maxW - minW || 1;\n const xs = pts.map((_, i) => (i / (pts.length - 1)) * W);\n const ys = pts.map(p => H - ((p.weightG - minW) / range) * (H - 8) - 2);\n let line = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < pts.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n line += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n const area = `${line} L ${xs[xs.length - 1]} ${H} L ${xs[0]} ${H} Z`;\n const improving = pts[pts.length - 1].weightG <= pts[0].weightG;\n return { line, area, lastX: xs[xs.length - 1], lastY: ys[ys.length - 1], improving };\n });\n\n readonly trend = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return null;\n const first = pts[0].weightG;\n const last = pts[pts.length - 1].weightG;\n const diffG = last - first;\n const pct = Math.round((diffG / first) * 100);\n return { diffG, pct, improving: diffG < 0 };\n });\n\n formatKg(g: number): string {\n return (g / 1000).toFixed(2);\n }\n\n formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString('de-DE', { month: 'short', year: '2-digit' });\n }\n}\n","<article class=\"c2g-wh\">\n <header class=\"c2g-wh__header\">\n <span class=\"c2g-wh__icon\">⚖️</span>\n <div class=\"c2g-wh__titles\">\n <h3 class=\"c2g-wh__title\">Gewichts-Historie</h3>\n @if (data().points.length) {\n <span class=\"c2g-wh__sub\">{{ data().points.length }} Touren</span>\n }\n </div>\n @if (trend(); as t) {\n <span class=\"c2g-wh__trend\" [class.c2g-wh__trend--good]=\"t.improving\" [class.c2g-wh__trend--bad]=\"!t.improving\">\n {{ t.improving ? '↓' : '↑' }} {{ t.pct | number:'1.0-0' }}%\n </span>\n }\n </header>\n\n <div class=\"c2g-wh__hero\">\n @if (data().latestG) {\n <span class=\"c2g-wh__value\">{{ formatKg(data().latestG!) }}</span>\n <span class=\"c2g-wh__unit\">kg</span>\n <span class=\"c2g-wh__label\">aktuell</span>\n }\n @if (data().bestG) {\n <div class=\"c2g-wh__best\">\n <span class=\"c2g-wh__best-icon\">🏆</span>\n <span class=\"c2g-wh__best-val\">{{ formatKg(data().bestG!) }} kg</span>\n <span class=\"c2g-wh__best-label\">Rekord</span>\n </div>\n }\n </div>\n\n @if (sparklinePath(); as sp) {\n <div class=\"c2g-wh__chart\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 200 48\" preserveAspectRatio=\"none\" class=\"c2g-wh__svg\">\n <defs>\n <linearGradient id=\"wh-grad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" [attr.stop-color]=\"sp.improving ? '#22c55e' : '#f97316'\" stop-opacity=\"0.3\"/>\n <stop offset=\"100%\" [attr.stop-color]=\"sp.improving ? '#22c55e' : '#f97316'\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n <path [attr.d]=\"sp.area\" fill=\"url(#wh-grad)\"/>\n <path class=\"c2g-wh__line\" [attr.d]=\"sp.line\"\n [style.stroke]=\"sp.improving ? '#22c55e' : '#f97316'\"/>\n <circle class=\"c2g-wh__dot\" [attr.cx]=\"sp.lastX\" [attr.cy]=\"sp.lastY\" r=\"3\"\n [style.fill]=\"sp.improving ? '#22c55e' : '#f97316'\"/>\n </svg>\n </div>\n }\n\n <div class=\"c2g-wh__dates\">\n @if (points().length >= 2) {\n <span>{{ formatDate(points()[0].date) }}</span>\n <span>{{ formatDate(points()[points().length - 1].date) }}</span>\n }\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GearValueData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-gear-value-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './gear-value-widget.component.html',\n styleUrl: './gear-value-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GearValueWidgetComponent {\n readonly data = input.required<GearValueData>();\n\n readonly topCategories = computed(() =>\n [...(this.data().categories ?? [])]\n .sort((a, b) => b.value - a.value)\n .slice(0, 5)\n );\n\n readonly maxCatValue = computed(() =>\n Math.max(...(this.data().categories ?? []).map(c => c.value), 1)\n );\n\n readonly formattedTotal = computed(() => {\n const v = this.data().totalValue;\n if (v >= 1000) return `${(v / 1000).toFixed(1)}k`;\n return v.toFixed(0);\n });\n\n formatValue(v: number): string {\n if (v >= 1000) return `${(v / 1000).toFixed(1)}k`;\n return v.toFixed(0);\n }\n}\n","<article class=\"c2g-gv\">\n <header class=\"c2g-gv__header\">\n <span class=\"c2g-gv__icon\">💰</span>\n <div class=\"c2g-gv__titles\">\n <h3 class=\"c2g-gv__title\">Gear-Wert</h3>\n <span class=\"c2g-gv__sub\">{{ data().itemCount }} Items</span>\n </div>\n </header>\n\n <div class=\"c2g-gv__hero\">\n <span class=\"c2g-gv__value\">{{ formattedTotal() }}</span>\n <span class=\"c2g-gv__currency\">{{ data().currency }}</span>\n </div>\n\n @if (topCategories().length) {\n <ul class=\"c2g-gv__cats\" role=\"list\">\n @for (cat of topCategories(); track cat.label) {\n <li class=\"c2g-gv__cat\">\n <div class=\"c2g-gv__cat-header\">\n <span class=\"c2g-gv__cat-name\">{{ cat.label }}</span>\n <span class=\"c2g-gv__cat-value\">{{ formatValue(cat.value) }} {{ data().currency }}</span>\n </div>\n <div class=\"c2g-gv__bar-track\">\n <div class=\"c2g-gv__bar-fill\"\n [style.width.%]=\"(cat.value / maxCatValue()) * 100\">\n </div>\n </div>\n </li>\n }\n </ul>\n }\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { WeightBreakdownData, WeightBreakdownEntry } from './dashboard-widgets.models';\n\nconst DEFAULT_COLORS = [\n '#ff6b35', '#22c55e', '#3b82f6', '#f59e0b', '#a855f7',\n '#ec4899', '#06b6d4', '#84cc16', '#f97316', '#6b7280',\n];\n\ninterface EnrichedEntry extends WeightBreakdownEntry {\n pct: number;\n color: string;\n barOffset: number;\n}\n\n@Component({\n selector: 'c2g-weight-breakdown-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './weight-breakdown-widget.component.html',\n styleUrl: './weight-breakdown-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeightBreakdownWidgetComponent {\n readonly data = input.required<WeightBreakdownData>();\n\n readonly entries = computed((): EnrichedEntry[] => {\n const total = this.data().totalG || 1;\n let offset = 0;\n return [...this.data().entries]\n .sort((a, b) => b.weightG - a.weightG)\n .map((e, i) => {\n const pct = (e.weightG / total) * 100;\n const entry: EnrichedEntry = {\n ...e,\n pct,\n color: e.color ?? DEFAULT_COLORS[i % DEFAULT_COLORS.length],\n barOffset: offset,\n };\n offset += pct;\n return entry;\n });\n });\n\n readonly totalKg = computed(() => (this.data().totalG / 1000).toFixed(2));\n\n // SVG stacked horizontal bar — single rect per entry using stroke-dasharray trick\n readonly circumference = 100; // we work in percentage units\n\n formatKg(g: number): string {\n if (g >= 1000) return `${(g / 1000).toFixed(2)} kg`;\n return `${g} g`;\n }\n}\n","<article class=\"c2g-wb\">\n <header class=\"c2g-wb__header\">\n <span class=\"c2g-wb__icon\">🏋️</span>\n <div class=\"c2g-wb__titles\">\n <h3 class=\"c2g-wb__title\">Gewichts-Breakdown</h3>\n <span class=\"c2g-wb__sub\">{{ totalKg() }} kg gesamt</span>\n </div>\n </header>\n\n <!-- Stacked horizontal bar -->\n <div class=\"c2g-wb__stacked\" aria-hidden=\"true\">\n @for (e of entries(); track e.category) {\n <div\n class=\"c2g-wb__stack-seg\"\n [style.width.%]=\"e.pct\"\n [style.background]=\"e.color\"\n [title]=\"e.category + ': ' + (e.pct | number:'1.0-1') + '%'\"\n ></div>\n }\n </div>\n\n <!-- Legend rows -->\n <ul class=\"c2g-wb__legend\" role=\"list\">\n @for (e of entries(); track e.category) {\n <li class=\"c2g-wb__row\">\n <span class=\"c2g-wb__dot\" [style.background]=\"e.color\"></span>\n <span class=\"c2g-wb__cat\">{{ e.category }}</span>\n <div class=\"c2g-wb__bar-track\">\n <div class=\"c2g-wb__bar-fill\" [style.width.%]=\"e.pct\" [style.background]=\"e.color\"></div>\n </div>\n <span class=\"c2g-wb__pct\">{{ e.pct | number:'1.0-1' }}%</span>\n <span class=\"c2g-wb__weight\">{{ formatKg(e.weightG) }}</span>\n </li>\n }\n </ul>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { AdventureScoreData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-adventure-score-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './adventure-score-widget.component.html',\n styleUrl: './adventure-score-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdventureScoreWidgetComponent implements OnDestroy {\n readonly data = input.required<AdventureScoreData>();\n\n readonly displayScore = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().score;\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 1200, 1);\n const e = 1 - Math.pow(1 - t, 4);\n this.displayScore.set(Math.round(e * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n // Circular progress arc (0–100)\n readonly arcPath = computed(() => {\n const pct = Math.min(this.data().score / 100, 1);\n const r = 52, cx = 60, cy = 60;\n const angle = pct * 360;\n if (angle >= 359.9) {\n return `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.01} ${cy - r}`;\n }\n const rad = ((angle - 90) * Math.PI) / 180;\n const x = cx + r * Math.cos(rad);\n const y = cy + r * Math.sin(rad);\n const large = angle > 180 ? 1 : 0;\n return `M ${cx} ${cy - r} A ${r} ${r} 0 ${large} 1 ${x} ${y}`;\n });\n\n readonly trackPath = `M 60 8 A 52 52 0 1 1 59.99 8`;\n\n readonly levelColor = computed(() => {\n const l = this.data().level;\n if (l >= 80) return '#f59e0b';\n if (l >= 60) return '#ff6b35';\n if (l >= 40) return '#22c55e';\n if (l >= 20) return '#3b82f6';\n return '#94a3b8';\n });\n\n readonly sparklinePath = computed(() => {\n const pts = this.data().sparkline;\n if (!pts || pts.length < 2) return null;\n const W = 120, H = 28;\n const maxS = Math.max(...pts.map(p => p.score));\n const minS = Math.min(...pts.map(p => p.score));\n const range = maxS - minS || 1;\n const xs = pts.map((_, i) => (i / (pts.length - 1)) * W);\n const ys = pts.map(p => H - ((p.score - minS) / range) * (H - 4) - 2);\n let d = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < pts.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n d += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n return d;\n });\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-as\">\n <header class=\"c2g-as__header\">\n <span class=\"c2g-as__icon\">🏆</span>\n <div class=\"c2g-as__titles\">\n <h3 class=\"c2g-as__title\">Abenteuer-Score</h3>\n <span class=\"c2g-as__level-label\">{{ data().levelLabel }}</span>\n </div>\n @if (sparklinePath(); as sp) {\n <svg class=\"c2g-as__sparkline\" viewBox=\"0 0 120 28\" aria-hidden=\"true\">\n <path [attr.d]=\"sp\" [style.stroke]=\"levelColor()\" class=\"c2g-as__spark-line\"/>\n </svg>\n }\n </header>\n\n <div class=\"c2g-as__body\">\n <!-- Circular progress -->\n <div class=\"c2g-as__circle-wrap\" aria-hidden=\"true\">\n <svg class=\"c2g-as__circle\" viewBox=\"0 0 120 120\">\n <path class=\"c2g-as__track\" [attr.d]=\"trackPath\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <path class=\"c2g-as__arc\" [attr.d]=\"arcPath()\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"\n [style.stroke]=\"levelColor()\"/>\n </svg>\n <div class=\"c2g-as__center\">\n <span class=\"c2g-as__score\" [style.color]=\"levelColor()\">{{ displayScore() }}</span>\n <span class=\"c2g-as__score-max\">/100</span>\n </div>\n </div>\n\n <!-- Stats -->\n <div class=\"c2g-as__stats\">\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalTours }}</span>\n <span class=\"c2g-as__stat-label\">Touren</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalKm | number:'1.0-0' }}</span>\n <span class=\"c2g-as__stat-label\">km</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalNights }}</span>\n <span class=\"c2g-as__stat-label\">Nächte</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().uniqueTypes }}</span>\n <span class=\"c2g-as__stat-label\">Typen</span>\n </div>\n </div>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TopGearData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-top-gear-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './top-gear-widget.component.html',\n styleUrl: './top-gear-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopGearWidgetComponent {\n readonly data = input.required<TopGearData>();\n\n readonly top = computed(() => this.data().entries.slice(0, 5));\n\n readonly maxUsage = computed(() =>\n Math.max(...this.data().entries.map(e => e.usageCount), 1)\n );\n\n usagePct(count: number): number {\n return Math.round((count / this.maxUsage()) * 100);\n }\n\n medal(index: number): string {\n return ['🥇', '🥈', '🥉', '', ''][index] ?? '';\n }\n}\n","<article class=\"c2g-tg\">\n <header class=\"c2g-tg__header\">\n <span class=\"c2g-tg__icon\">🎒</span>\n <h3 class=\"c2g-tg__title\">Top-Gear</h3>\n </header>\n\n <ol class=\"c2g-tg__list\" role=\"list\">\n @for (entry of top(); track entry.name; let i = $index) {\n <li class=\"c2g-tg__item\" [class.c2g-tg__item--top3]=\"i < 3\">\n <span class=\"c2g-tg__rank\">\n @if (medal(i)) { {{ medal(i) }} } @else { {{ i + 1 }} }\n </span>\n <div class=\"c2g-tg__info\">\n <span class=\"c2g-tg__name\">{{ entry.name }}</span>\n @if (entry.category) {\n <span class=\"c2g-tg__cat\">{{ entry.category }}</span>\n }\n </div>\n <div class=\"c2g-tg__bar-track\">\n <div class=\"c2g-tg__bar-fill\" [style.width.%]=\"usagePct(entry.usageCount)\"></div>\n </div>\n <span class=\"c2g-tg__count\">{{ entry.usageCount }}×</span>\n </li>\n }\n </ol>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GroupActivityData, GroupActivityEntry } from './dashboard-widgets.models';\n\ninterface RankedEntry extends GroupActivityEntry {\n rank: number;\n pct: number;\n}\n\n@Component({\n selector: 'c2g-group-activity-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './group-activity-widget.component.html',\n styleUrl: './group-activity-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupActivityWidgetComponent {\n readonly data = input.required<GroupActivityData>();\n\n readonly ranked = computed((): RankedEntry[] => {\n const sorted = [...this.data().members]\n .sort((a, b) => b.completedItems - a.completedItems);\n const maxItems = Math.max(...sorted.map(m => m.completedItems), 1);\n return sorted.map((m, i) => ({\n ...m,\n rank: i + 1,\n pct: Math.round((m.completedItems / maxItems) * 100),\n }));\n });\n\n medal(rank: number): string {\n if (rank === 1) return '🥇';\n if (rank === 2) return '🥈';\n if (rank === 3) return '🥉';\n return '';\n }\n\n completionPct(m: GroupActivityEntry): number {\n if (!m.totalItems) return 0;\n return Math.round((m.completedItems / m.totalItems) * 100);\n }\n}\n","<article class=\"c2g-ga\">\n <header class=\"c2g-ga__header\">\n <span class=\"c2g-ga__icon\">🏅</span>\n <div class=\"c2g-ga__titles\">\n <h3 class=\"c2g-ga__title\">Aktivste Mitglieder</h3>\n @if (data().groupName) {\n <span class=\"c2g-ga__sub\">{{ data().groupName }}</span>\n }\n </div>\n </header>\n\n <ol class=\"c2g-ga__list\" role=\"list\">\n @for (m of ranked(); track m.name) {\n <li class=\"c2g-ga__item\" [class.c2g-ga__item--self]=\"m.isSelf\">\n <!-- Avatar -->\n <div class=\"c2g-ga__avatar\">\n @if (m.avatarUrl) {\n <img [src]=\"m.avatarUrl\" [alt]=\"m.name\" class=\"c2g-ga__avatar-img\"/>\n } @else {\n <span class=\"c2g-ga__initials\">{{ m.initials }}</span>\n }\n @if (medal(m.rank)) {\n <span class=\"c2g-ga__medal\">{{ medal(m.rank) }}</span>\n }\n </div>\n\n <div class=\"c2g-ga__info\">\n <span class=\"c2g-ga__name\">{{ m.name }}{{ m.isSelf ? ' (du)' : '' }}</span>\n <div class=\"c2g-ga__bar-track\">\n <div class=\"c2g-ga__bar-fill\" [style.width.%]=\"m.pct\"></div>\n </div>\n </div>\n\n <div class=\"c2g-ga__nums\">\n <span class=\"c2g-ga__completed\">{{ m.completedItems }}</span>\n @if (m.totalItems) {\n <span class=\"c2g-ga__total\">/ {{ m.totalItems }}</span>\n }\n </div>\n </li>\n }\n </ol>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GearSharingData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-gear-sharing-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './gear-sharing-widget.component.html',\n styleUrl: './gear-sharing-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GearSharingWidgetComponent implements OnDestroy {\n readonly data = input.required<GearSharingData>();\n\n readonly displayPct = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.sharingPct();\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 1000, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayPct.set(Math.round(e * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n readonly sharingPct = computed(() => {\n const d = this.data();\n if (!d.totalItems) return 0;\n return Math.round((d.sharedItems / d.totalItems) * 100);\n });\n\n readonly tier = computed((): 'high' | 'medium' | 'low' => {\n const p = this.sharingPct();\n if (p >= 40) return 'high';\n if (p >= 20) return 'medium';\n return 'low';\n });\n\n readonly arcPath = computed(() => {\n const pct = Math.min(this.sharingPct() / 100, 1);\n const r = 44, cx = 52, cy = 52;\n if (pct >= 0.999) return `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.01} ${cy - r}`;\n const angle = pct * 360;\n const rad = ((angle - 90) * Math.PI) / 180;\n const x = cx + r * Math.cos(rad);\n const y = cy + r * Math.sin(rad);\n const large = angle > 180 ? 1 : 0;\n return `M ${cx} ${cy - r} A ${r} ${r} 0 ${large} 1 ${x} ${y}`;\n });\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-gs\" [class]=\"'c2g-gs--' + tier()\">\n <header class=\"c2g-gs__header\">\n <span class=\"c2g-gs__icon\">🤝</span>\n <div class=\"c2g-gs__titles\">\n <h3 class=\"c2g-gs__title\">Gear-Sharing</h3>\n <span class=\"c2g-gs__sub\">{{ data().memberCount }} Mitglieder</span>\n </div>\n </header>\n\n <div class=\"c2g-gs__body\">\n <div class=\"c2g-gs__circle-wrap\" aria-hidden=\"true\">\n <svg class=\"c2g-gs__circle\" viewBox=\"0 0 104 104\">\n <circle cx=\"52\" cy=\"52\" r=\"44\" class=\"c2g-gs__track\" fill=\"none\" stroke-width=\"10\"/>\n <path class=\"c2g-gs__arc\" [attr.d]=\"arcPath()\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"c2g-gs__center\">\n <span class=\"c2g-gs__pct\">{{ displayPct() }}%</span>\n <span class=\"c2g-gs__pct-label\">geteilt</span>\n </div>\n </div>\n\n <div class=\"c2g-gs__stats\">\n <div class=\"c2g-gs__stat\">\n <span class=\"c2g-gs__stat-val\">{{ data().sharedItems }}</span>\n <span class=\"c2g-gs__stat-label\">geteilt</span>\n </div>\n <div class=\"c2g-gs__stat\">\n <span class=\"c2g-gs__stat-val\">{{ data().totalItems - data().sharedItems }}</span>\n <span class=\"c2g-gs__stat-label\">eigene</span>\n </div>\n @if (data().savedWeightPerPersonG) {\n <div class=\"c2g-gs__stat c2g-gs__stat--highlight\">\n <span class=\"c2g-gs__stat-val\">{{ (data().savedWeightPerPersonG! / 1000) | number:'1.1-1' }} kg</span>\n <span class=\"c2g-gs__stat-label\">gespart/Person</span>\n </div>\n }\n </div>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { AdventureRadiusData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-adventure-radius-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './adventure-radius-widget.component.html',\n styleUrl: './adventure-radius-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdventureRadiusWidgetComponent {\n readonly data = input.required<AdventureRadiusData>();\n\n readonly buckets = computed(() => this.data().buckets ?? []);\n\n readonly maxBucketCount = computed(() =>\n Math.max(...this.buckets().map(b => b.count), 1)\n );\n\n bucketPct(count: number): number {\n return Math.round((count / this.maxBucketCount()) * 100);\n }\n\n readonly radiusTier = computed((): 'local' | 'regional' | 'national' | 'international' => {\n const max = this.data().maxRadiusKm;\n if (max >= 1000) return 'international';\n if (max >= 300) return 'national';\n if (max >= 100) return 'regional';\n return 'local';\n });\n\n readonly tierEmoji = computed(() => {\n switch (this.radiusTier()) {\n case 'international': return '🌍';\n case 'national': return '🗺️';\n case 'regional': return '🏔️';\n default: return '🏡';\n }\n });\n\n readonly tierLabel = computed(() => {\n switch (this.radiusTier()) {\n case 'international': return 'Weltenbummler';\n case 'national': return 'Deutschlandreisender';\n case 'regional': return 'Regionalentdecker';\n default: return 'Heimatverbunden';\n }\n });\n}\n","<article class=\"c2g-ar\">\n <header class=\"c2g-ar__header\">\n <span class=\"c2g-ar__icon\">{{ tierEmoji() }}</span>\n <div class=\"c2g-ar__titles\">\n <h3 class=\"c2g-ar__title\">Abenteuer-Radius</h3>\n @if (data().homeLabel) {\n <span class=\"c2g-ar__sub\">ab {{ data().homeLabel }}</span>\n }\n </div>\n <span class=\"c2g-ar__tier-badge c2g-ar__tier-badge--{{ radiusTier() }}\">\n {{ tierLabel() }}\n </span>\n </header>\n\n <div class=\"c2g-ar__hero\">\n <div class=\"c2g-ar__stat\">\n <span class=\"c2g-ar__val\">{{ data().avgRadiusKm | number:'1.0-0' }}</span>\n <span class=\"c2g-ar__unit\">km</span>\n <span class=\"c2g-ar__label\">Ø Radius</span>\n </div>\n <div class=\"c2g-ar__divider\"></div>\n <div class=\"c2g-ar__stat\">\n <span class=\"c2g-ar__val\">{{ data().maxRadiusKm | number:'1.0-0' }}</span>\n <span class=\"c2g-ar__unit\">km</span>\n <span class=\"c2g-ar__label\">Maximum</span>\n </div>\n </div>\n\n @if (data().maxTourName) {\n <div class=\"c2g-ar__max-tour\">\n <span class=\"c2g-ar__max-icon\">📍</span>\n <span class=\"c2g-ar__max-name\">{{ data().maxTourName }}</span>\n </div>\n }\n\n @if (buckets().length) {\n <div class=\"c2g-ar__buckets\">\n @for (b of buckets(); track b.labelKm) {\n <div class=\"c2g-ar__bucket\">\n <div class=\"c2g-ar__bucket-bar-wrap\">\n <div class=\"c2g-ar__bucket-bar\" [style.height.%]=\"bucketPct(b.count)\"></div>\n </div>\n <span class=\"c2g-ar__bucket-label\">{{ b.labelKm }}</span>\n <span class=\"c2g-ar__bucket-count\">{{ b.count }}</span>\n </div>\n }\n </div>\n }\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { PackProgressData, PackProgressRow } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-pack-progress-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-progress-widget.component.html',\n styleUrls: ['./pack-progress-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackProgressWidgetComponent {\n readonly data = input.required<PackProgressData>();\n\n readonly rows = computed(() => this.data().rows);\n\n readonly overallPacked = computed(() =>\n this.rows().reduce((s, r) => s + r.packed, 0)\n );\n\n readonly overallTotal = computed(() =>\n this.rows().reduce((s, r) => s + r.total, 0)\n );\n\n readonly overallPercent = computed(() => {\n const t = this.overallTotal();\n return t === 0 ? 0 : Math.round((this.overallPacked() / t) * 100);\n });\n\n pct(row: PackProgressRow): number {\n return row.total === 0 ? 0 : Math.round((row.packed / row.total) * 100);\n }\n\n tone(row: PackProgressRow): 'success' | 'warning' | 'danger' {\n const p = this.pct(row);\n if (p === 100) return 'success';\n if (p >= 50) return 'warning';\n return 'danger';\n }\n}\n","<div class=\"c2g-pp\">\n\n <div class=\"c2g-pp__header\">\n <span class=\"c2g-pp__title\">📦 Packfortschritt</span>\n @if (data().tourName) {\n <span class=\"c2g-pp__tour\">{{ data().tourName }}</span>\n }\n <span class=\"c2g-pp__overall\">{{ overallPacked() }}/{{ overallTotal() }}</span>\n </div>\n\n <div class=\"c2g-pp__rows\">\n @for (row of rows(); track row.label) {\n <div class=\"c2g-pp__row\" [class.c2g-pp__row--highlight]=\"row.highlight\">\n\n <div class=\"c2g-pp__row-label\">\n <span class=\"c2g-pp__row-icon\" aria-hidden=\"true\">{{ row.icon }}</span>\n <span class=\"c2g-pp__row-name\">{{ row.label }}</span>\n </div>\n\n <div class=\"c2g-pp__bar-wrap\" [attr.aria-label]=\"row.label + ': ' + row.packed + ' von ' + row.total + ' gepackt'\">\n <div\n class=\"c2g-pp__bar-fill\"\n [class.c2g-pp__bar-fill--success]=\"tone(row) === 'success'\"\n [class.c2g-pp__bar-fill--warning]=\"tone(row) === 'warning'\"\n [class.c2g-pp__bar-fill--danger]=\"tone(row) === 'danger'\"\n [style.width.%]=\"pct(row)\">\n </div>\n </div>\n\n <span\n class=\"c2g-pp__count\"\n [class.c2g-pp__count--success]=\"tone(row) === 'success'\"\n [class.c2g-pp__count--warning]=\"tone(row) === 'warning'\"\n [class.c2g-pp__count--danger]=\"tone(row) === 'danger'\">\n {{ row.packed }}/{{ row.total }}\n </span>\n\n </div>\n }\n </div>\n\n <!-- Overall strip -->\n <div class=\"c2g-pp__strip-track\">\n <div class=\"c2g-pp__strip-fill\" [style.width.%]=\"overallPercent()\"></div>\n </div>\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","TYPE_CONFIG"],"mappings":"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"}
1
+ {"version":3,"file":"camp2gether-c2g-ui-presets.mjs","sources":["../../../projects/c2g-ui/presets/packing-list/packing-list.models.ts","../../../projects/c2g-ui/presets/packing-list/packing-list.categories.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-category.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-category.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-filters.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-filters.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-private-list.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-private-list.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-item-create.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-item-create.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list.component.html","../../../projects/c2g-ui/presets/packing-list/packing-list-stats.component.ts","../../../projects/c2g-ui/presets/packing-list/packing-list-stats.component.html","../../../projects/c2g-ui/presets/weather-widget/weather-icon.utils.ts","../../../projects/c2g-ui/presets/weather-widget/weather-widget.component.ts","../../../projects/c2g-ui/presets/weather-widget/weather-widget.component.html","../../../projects/c2g-ui/presets/member-list/member-tags/member-tags.component.ts","../../../projects/c2g-ui/presets/member-list/member-tags/member-tags.component.html","../../../projects/c2g-ui/presets/action-menu/action-menu.component.ts","../../../projects/c2g-ui/presets/action-menu/action-menu.component.html","../../../projects/c2g-ui/presets/member-list/member-item/member-item.component.ts","../../../projects/c2g-ui/presets/member-list/member-item/member-item.component.html","../../../projects/c2g-ui/presets/member-list/member-list/member-list.component.ts","../../../projects/c2g-ui/presets/member-list/member-list/member-list.component.html","../../../projects/c2g-ui/presets/member-list/member-panel/member-panel.component.ts","../../../projects/c2g-ui/presets/member-list/member-panel/member-panel.component.html","../../../projects/c2g-ui/presets/menu/menu.component.ts","../../../projects/c2g-ui/presets/menu/menu.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/submenu-item.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/submenu-item.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/submenu.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/submenu.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation-item.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation-item.component.html","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation.component.ts","../../../projects/c2g-ui/presets/menu/main-navigation/main-navigation.component.html","../../../projects/c2g-ui/presets/dashboard/next-adventure-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/next-adventure-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-status-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-status-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-weight-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-weight-widget.component.html","../../../projects/c2g-ui/presets/dashboard/member-readiness-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/member-readiness-widget.component.html","../../../projects/c2g-ui/presets/dashboard/streak-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/streak-widget.component.html","../../../projects/c2g-ui/presets/dashboard/camping-score-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/camping-score-widget.component.html","../../../projects/c2g-ui/presets/dashboard/rain-visualization-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/rain-visualization-widget.component.html","../../../projects/c2g-ui/presets/dashboard/group-composition-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/group-composition-widget.component.html","../../../projects/c2g-ui/presets/dashboard/confetti-success.lottie.ts","../../../projects/c2g-ui/presets/dashboard/critical-items-alert-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/critical-items-alert-widget.component.html","../../../projects/c2g-ui/presets/dashboard/wind-indicator-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/wind-indicator-widget.component.html","../../../projects/c2g-ui/presets/dashboard/total-km-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/total-km-widget.component.html","../../../projects/c2g-ui/presets/dashboard/tour-type-split-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/tour-type-split-widget.component.html","../../../projects/c2g-ui/presets/dashboard/tour-rhythm-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/tour-rhythm-widget.component.html","../../../projects/c2g-ui/presets/dashboard/season-dna-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/season-dna-widget.component.html","../../../projects/c2g-ui/presets/dashboard/weight-history-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/weight-history-widget.component.html","../../../projects/c2g-ui/presets/dashboard/gear-value-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/gear-value-widget.component.html","../../../projects/c2g-ui/presets/dashboard/weight-breakdown-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/weight-breakdown-widget.component.html","../../../projects/c2g-ui/presets/dashboard/adventure-score-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/adventure-score-widget.component.html","../../../projects/c2g-ui/presets/dashboard/top-gear-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/top-gear-widget.component.html","../../../projects/c2g-ui/presets/dashboard/group-activity-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/group-activity-widget.component.html","../../../projects/c2g-ui/presets/dashboard/gear-sharing-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/gear-sharing-widget.component.html","../../../projects/c2g-ui/presets/dashboard/adventure-radius-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/adventure-radius-widget.component.html","../../../projects/c2g-ui/presets/dashboard/pack-progress-widget.component.ts","../../../projects/c2g-ui/presets/dashboard/pack-progress-widget.component.html","../../../projects/c2g-ui/presets/camp2gether-c2g-ui-presets.ts"],"sourcesContent":["export type C2gPackingVisibility = 'shared' | 'personal' | 'private';\nexport type C2gPackingAssignmentStatus = 'assigned' | 'packed' | 'confirmed';\n\nexport interface C2gPackingListAssignment {\n itemId: string;\n memberId: string;\n memberName?: string;\n packedBy?: string;\n packedByName?: string;\n status: C2gPackingAssignmentStatus;\n quantity?: number;\n}\n\nexport interface C2gPackingItemAssignedEvent {\n itemId: string;\n memberId: string;\n assigned: boolean;\n quantity?: number;\n}\n\nexport interface C2gPackingListItem {\n id: string;\n name: string;\n category: string;\n essential?: boolean;\n visibility: C2gPackingVisibility;\n quantity?: number;\n weightKg?: number;\n packedVolumeL?: number;\n priority?: string;\n reason?: string;\n weather?: boolean;\n hint?: string;\n confirmed?: boolean;\n createdBy?: string;\n privateOwnerVisible?: boolean;\n assignments?: C2gPackingListAssignment[];\n}\n\nexport interface C2gPackingListMember {\n id: string;\n name: string;\n initials?: string;\n color?: string;\n type?: 'adult' | 'child' | 'baby' | 'pet';\n hasAccount?: boolean;\n}\n\nexport interface C2gPackingCategoryInfo {\n key: string;\n labelKey: string;\n label?: string; // optional human-readable fallback (used when no i18n pipe is available)\n icon: string;\n}\n\nexport interface C2gPackingListFilterState {\n query: string;\n visibility: 'all' | C2gPackingVisibility;\n essentialsOnly: boolean;\n memberIds: string[];\n}\n\nexport interface C2gPackingListMemberStatus {\n memberId: string;\n memberName: string;\n initials?: string;\n checked: boolean;\n canToggle: boolean;\n}\n\nexport interface C2gPackingListMemberOverlayRequest {\n itemId: string;\n itemName: string;\n members: C2gPackingListMemberStatus[];\n}\n\nexport interface C2gPackingListLabels {\n searchPlaceholderKey: string;\n essentialsOnlyKey: string;\n showAllVisibilityKey: string;\n sharedVisibilityKey: string;\n personalVisibilityKey: string;\n privateVisibilityKey: string;\n privateSectionTitleKey: string;\n emptyStateKey: string;\n categoryStatsKey: string;\n deleteConfirmKey: string;\n addItemKey?: string;\n createItemKey?: string;\n itemNameKey?: string;\n categoryKey?: string;\n visibilityKey?: string;\n essentialKey?: string;\n quantityKey?: string;\n weightKey?: string;\n volumeKey?: string;\n hintKey?: string;\n cancelKey?: string;\n createKey?: string;\n}\n\nexport const DEFAULT_PACKING_LIST_LABEL_KEYS: C2gPackingListLabels = {\n searchPlaceholderKey: 'packingList.search.placeholder',\n essentialsOnlyKey: 'packingList.filters.essentialsOnly',\n showAllVisibilityKey: 'packingList.filters.visibility.all',\n sharedVisibilityKey: 'packingList.filters.visibility.shared',\n personalVisibilityKey: 'packingList.filters.visibility.personal',\n privateVisibilityKey: 'packingList.filters.visibility.private',\n privateSectionTitleKey: 'packingList.private.title',\n emptyStateKey: 'packingList.empty',\n categoryStatsKey: 'packingList.category.stats',\n deleteConfirmKey: 'packingList.delete.confirm',\n addItemKey: 'packingList.addItem',\n createItemKey: 'packingList.createItem',\n itemNameKey: 'packingList.itemName',\n categoryKey: 'packingList.category',\n visibilityKey: 'packingList.visibility',\n essentialKey: 'packingList.essential',\n quantityKey: 'packingList.quantity',\n weightKey: 'packingList.weight',\n volumeKey: 'packingList.volume',\n hintKey: 'packingList.hint',\n cancelKey: 'packingList.cancel',\n createKey: 'packingList.create'\n};\n\nexport interface C2gPackingListPermissions {\n isOrganizer: boolean;\n isGuest: boolean;\n isSolo: boolean;\n readOnly: boolean;\n canManageAssignments?: boolean;\n canMembersManageSharedItems?: boolean;\n canMembersAddSharedItems?: boolean;\n}\n\n// === Generics: Host defines available fields ===\n\n/**\n * Feature flags (like GridOptions booleans).\n * Applied globally to all rows.\n */\nexport interface C2gPackingListFeatures {\n search?: boolean; // show search bar (default: true)\n filters?: boolean; // show visibility/member filter bar (default: true)\n stats?: boolean; // show category weight/count stats (default: true)\n create?: boolean; // show add-item button + dialog (default: false)\n editItem?: boolean; // trigger edit action per item (default: per permissions)\n deleteItem?: boolean; // trigger delete action per item (default: per permissions)\n assignments?: boolean; // show member assignment chips/overlay (default: true)\n privateSection?: boolean; // separate list for private items (default: false)\n expandAllOnLoad?: boolean; // expand all categories on mount (default: false)\n}\n\n/**\n * Column definition - generic over host-defined field type.\n * Host specifies which fields are available via TField generic.\n */\nexport interface C2gPackingListColumnDef<TField extends string = string> {\n field: TField;\n visible?: boolean; // default: true\n editable?: boolean; // default: driven by permissions\n sortable?: boolean; // default: false\n labelKey?: string; // i18n key override for this field\n}\n\n/**\n * Sort state - generic over host-defined field type.\n */\nexport type C2gPackingSortDir = 'asc' | 'desc';\n\nexport interface C2gPackingListSortState<TField extends string = string> {\n field: TField;\n dir: C2gPackingSortDir;\n}\n\n/**\n * Custom row action - host can trigger these via (rowActionTriggered).\n */\nexport interface C2gPackingListRowAction {\n id: string;\n labelKey: string;\n icon?: string;\n showWhen?: (item: C2gPackingListItem, permissions: C2gPackingListPermissions) => boolean;\n}\n\n/**\n * Main config object - generic over host-defined field type.\n * Like AgGrid GridOptions.\n */\nexport interface C2gPackingListConfig<TField extends string = string> {\n features?: C2gPackingListFeatures;\n columnDefs?: C2gPackingListColumnDef<TField>[];\n sort?: C2gPackingListSortState<TField>;\n rowActions?: C2gPackingListRowAction[];\n initialFilter?: Partial<C2gPackingListFilterState>;\n defaultExpandedCount?: number; // how many categories auto-expand (default: 3)\n}\n\nexport const DEFAULT_PACKING_LIST_CONFIG: C2gPackingListConfig = {\n features: {\n search: true,\n filters: true,\n stats: true,\n create: false,\n assignments: true,\n privateSection: false,\n expandAllOnLoad: false,\n },\n defaultExpandedCount: 3,\n};\n","import { C2gPackingCategoryInfo } from './packing-list.models';\n\nexport const C2G_PACKING_CATEGORY_INFO: Record<string, C2gPackingCategoryInfo> = {\n shelter: { key: 'shelter', labelKey: 'packingList.categories.shelter', label: 'Unterkunft', icon: 'home' },\n sleeping: { key: 'sleeping', labelKey: 'packingList.categories.sleeping', label: 'Schlafen', icon: 'bed' },\n cookingEating:{ key: 'cookingEating',labelKey: 'packingList.categories.cookingEating',label: 'Kochen & Essen', icon: 'restaurant' },\n clothing: { key: 'clothing', labelKey: 'packingList.categories.clothing', label: 'Kleidung', icon: 'checkroom' },\n navigation: { key: 'navigation', labelKey: 'packingList.categories.navigation', label: 'Navigation', icon: 'explore' },\n lighting: { key: 'lighting', labelKey: 'packingList.categories.lighting', label: 'Beleuchtung', icon: 'light_mode' },\n safety: { key: 'safety', labelKey: 'packingList.categories.safety', label: 'Sicherheit', icon: 'medical_services' },\n tools: { key: 'tools', labelKey: 'packingList.categories.tools', label: 'Werkzeug', icon: 'build' },\n hygiene: { key: 'hygiene', labelKey: 'packingList.categories.hygiene', label: 'Hygiene', icon: 'wash' },\n furniture: { key: 'furniture', labelKey: 'packingList.categories.furniture', label: 'Möbel & Ausstattung', icon: 'chair' },\n hydration: { key: 'hydration', labelKey: 'packingList.categories.hydration', label: 'Getränke', icon: 'water_drop' },\n mobility: { key: 'mobility', labelKey: 'packingList.categories.mobility', label: 'Transport', icon: 'backpack' },\n activity: { key: 'activity', labelKey: 'packingList.categories.activity', label: 'Aktivitäten', icon: 'sports' },\n documents: { key: 'documents', labelKey: 'packingList.categories.documents', label: 'Dokumente', icon: 'description' },\n other: { key: 'other', labelKey: 'packingList.categories.other', label: 'Sonstiges', icon: 'category' }\n};\n\nexport function resolvePackingCategory(categoryKey: string): C2gPackingCategoryInfo {\n return (\n C2G_PACKING_CATEGORY_INFO[categoryKey] ?? {\n key: categoryKey,\n labelKey: `packingList.categories.${categoryKey}`,\n icon: 'inventory_2'\n }\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport { AvatarComponent } from '@camp2gether/c2g-ui';\nimport { C2gAvatarBadge } from '@camp2gether/c2g-ui';\nimport { BadgeComponent } from '@camp2gether/c2g-ui';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListMemberStatus,\n C2gPackingListPermissions\n} from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-item',\n standalone: true,\n imports: [AvatarComponent, BadgeComponent],\n templateUrl: './packing-list-item.component.html',\n styleUrls: ['./packing-list-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListItemComponent {\n readonly item = input.required<C2gPackingListItem>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly selectedMemberIds = input<string[]>([]);\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n\n readonly overlayOpen = signal(false);\n readonly overlaySearch = signal('');\n readonly ctaMenuOpen = signal(false);\n readonly quantityPickerOpen = signal(false);\n readonly quantityPickerValue = signal(1);\n readonly delegateDialogOpen = signal(false);\n readonly delegateMemberId = signal<string | null>(null);\n readonly delegateQuantity = signal(1);\n readonly avatarDialogOpen = signal(false);\n readonly avatarDialogMemberId = signal<string | null>(null);\n readonly avatarDialogQuantity = signal(1);\n readonly personalAssignDialogOpen = signal(false);\n readonly personalAssignSearch = signal('');\n readonly personalAssignMemberId = signal<string | null>(null);\n\n readonly applicableMembers = computed(() => {\n const item = this.item();\n if (item.visibility === 'personal') {\n return this.members().filter(m => m.type !== 'pet');\n }\n return this.members().filter(m => m.type !== 'child' && m.type !== 'pet');\n });\n\n readonly visibleMembers = computed(() => {\n const selected = this.selectedMemberIds();\n if (selected.length === 0) {\n return this.applicableMembers();\n }\n const allowed = new Set(selected);\n return this.applicableMembers().filter(member => allowed.has(member.id));\n });\n\n readonly packedCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments\n .filter(a => a.status === 'packed' || a.status === 'confirmed')\n .reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly isPacked = computed(() => this.packedCount() > 0 || !!this.item().confirmed);\n\n readonly requiredQuantity = computed(() => Math.max(1, this.item().quantity ?? 1));\n\n readonly checkedMembers = computed(() => {\n const currentUserId = this.currentUserId();\n const checked = this.visibleMembers().filter(member => this.isMemberChecked(member.id));\n return checked.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n return 0;\n });\n });\n\n readonly personalAssignedMembers = computed(() => {\n if (this.item().visibility !== 'personal') {\n return [] as C2gPackingListMember[];\n }\n\n const currentUserId = this.currentUserId();\n const assigned = this.visibleMembers().filter(member => this.hasAnyAssignment(member.id));\n return assigned.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n return 0;\n });\n });\n\n readonly missingMembers = computed(() =>\n this.visibleMembers().filter(member => !this.isMemberChecked(member.id))\n );\n\n readonly checkedPreview = computed(() => this.checkedMembers().slice(0, 3));\n readonly hiddenCheckedCount = computed(() => Math.max(0, this.checkedMembers().length - this.checkedPreview().length));\n readonly personalAssignedPreview = computed(() => this.personalAssignedMembers().slice(0, 3));\n readonly personalHiddenAssignedCount = computed(() => Math.max(0, this.personalAssignedMembers().length - this.personalAssignedPreview().length));\n readonly missingPreview = computed(() => this.missingMembers().slice(0, 3));\n readonly hiddenMissingCount = computed(() => Math.max(0, this.missingMembers().length - this.missingPreview().length));\n\n readonly currentUserMember = computed(() =>\n this.members().find(member => member.id === this.currentUserId()) ?? null\n );\n\n readonly isItemOwner = computed(() => {\n const ownerId = this.item().createdBy;\n if (!ownerId) {\n // Legacy items may not carry ownership metadata.\n return true;\n }\n return ownerId === this.currentUserId();\n });\n\n readonly canEditOrDeleteItem = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n\n const item = this.item();\n if (item.visibility === 'shared') {\n return permissions.isOrganizer || !!permissions.canMembersManageSharedItems || this.isItemOwner();\n }\n\n return permissions.isOrganizer || this.isItemOwner();\n });\n\n readonly canShowAssignCta = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n if (permissions.isSolo) {\n return false;\n }\n return permissions.isOrganizer || !!permissions.canManageAssignments;\n });\n\n readonly sharedAssignmentsCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments\n .filter(a => a.status === 'confirmed' || a.status === 'packed')\n .reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly sharedTotalAssignedCount = computed(() => {\n const assignments = this.item().assignments ?? [];\n return assignments.reduce((sum, a) => sum + Math.max(1, a.quantity ?? 1), 0);\n });\n\n readonly sharedMissingSlots = computed(() => Math.max(0, this.requiredQuantity() - this.sharedTotalAssignedCount()));\n\n readonly selfAssignableMaxQuantity = computed(() => Math.max(1, this.sharedMissingSlots()));\n\n readonly delegateCandidates = computed(() =>\n this.visibleMembers().filter(member => this.canAssignShared(member.id))\n );\n\n readonly selfAssignedToShared = computed(() => this.isSharedAssigned(this.currentUserId()));\n\n readonly isPlanner = computed(() => {\n const p = this.permissions();\n return p.isOrganizer || !!p.canManageAssignments;\n });\n\n // Label for the \"join / adjust\" button on shared items\n readonly joinBtnLabel = computed(() => {\n if (!this.selfAssignedToShared()) return '+ Eintragen';\n return this.isPlanner() ? 'Menge anpassen' : 'Meine Menge anpassen';\n });\n\n // Context label inside the quantity picker\n readonly pickerLabel = computed(() => {\n if (this.isPlanner()) return 'Wie viel wird mitgenommen?';\n return 'Wie viel nimmst du mit?';\n });\n\n // Context label inside the delegate dialog\n readonly delegatePickerLabel = computed(() => 'Wer bringt es mit? Menge festlegen:');\n\n readonly canSelfAssignShared = computed(() => {\n const currentUserId = this.currentUserId();\n if (!this.canAssignShared(currentUserId)) {\n return false;\n }\n if (this.selfAssignedToShared()) {\n return true;\n }\n return this.sharedMissingSlots() > 0;\n });\n\n readonly selectedDelegateMember = computed(() => {\n const memberId = this.delegateMemberId();\n if (!memberId) {\n return null;\n }\n return this.members().find(member => member.id === memberId) ?? null;\n });\n\n readonly canManagePersonalAssignments = computed(() => {\n const permissions = this.permissions();\n if (permissions.readOnly || permissions.isSolo) {\n return false;\n }\n\n return permissions.isOrganizer || !!permissions.canManageAssignments || this.isItemOwner();\n });\n\n readonly personalAssignableMembers = computed(() => {\n if (this.item().visibility !== 'personal' || !this.canManagePersonalAssignments()) {\n return [] as C2gPackingListMember[];\n }\n\n return this.visibleMembers().filter(member => !this.hasAnyAssignment(member.id));\n });\n\n readonly filteredPersonalAssignableMembers = computed(() => {\n const query = this.personalAssignSearch().trim().toLowerCase();\n if (!query) {\n return this.personalAssignableMembers();\n }\n\n return this.personalAssignableMembers().filter(member => {\n const searchable = `${member.name} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n readonly selectedPersonalAssignMember = computed(() => {\n const memberId = this.personalAssignMemberId();\n if (!memberId) {\n return null;\n }\n\n return this.members().find(member => member.id === memberId) ?? null;\n });\n\n readonly completionText = computed(() => {\n if (this.item().visibility === 'shared') {\n return `${this.sharedAssignmentsCount()}/${this.requiredQuantity()} bereit`;\n }\n\n if (this.item().visibility === 'personal') {\n return `${this.checkedMembers().length}/${this.visibleMembers().length} bereit`;\n }\n\n return this.isPacked() ? 'bereit' : 'offen';\n });\n\n readonly progressNumerator = computed(() => {\n if (this.item().visibility === 'shared') {\n return this.sharedAssignmentsCount();\n }\n\n if (this.item().visibility === 'personal') {\n return this.checkedMembers().length;\n }\n\n return this.isPacked() ? 1 : 0;\n });\n\n readonly progressDenominator = computed(() => {\n if (this.item().visibility === 'shared') {\n return this.requiredQuantity();\n }\n\n if (this.item().visibility === 'personal') {\n return Math.max(1, this.visibleMembers().length);\n }\n\n return 1;\n });\n\n readonly progressRatioText = computed(() => `${this.progressNumerator()}/${this.progressDenominator()}`);\n\n // Badge shown top-right: \"x/y\" packed — only for group items\n readonly quantityBadge = computed(() => {\n const vis = this.item().visibility;\n if (this.permissions().isSolo || vis === 'private') return null;\n const n = this.progressNumerator();\n const d = this.progressDenominator();\n if (d <= 1 && vis === 'shared') return null; // single shared item, dot is enough\n return { value: `${n}/${d}`, tone: this.progressTone() } as const;\n });\n\n readonly progressPercentage = computed(() => {\n const denominator = this.progressDenominator();\n if (denominator <= 0) {\n return 0;\n }\n\n return Math.min(100, Math.round((this.progressNumerator() / denominator) * 100));\n });\n\n readonly progressTone = computed<'danger' | 'warning' | 'success'>(() => {\n const progress = this.progressPercentage();\n if (progress === 100) {\n return 'success';\n }\n if (progress >= 50) {\n return 'warning';\n }\n return 'danger';\n });\n\n readonly needsPackLabel = computed(() => {\n if (this.item().visibility === 'shared') {\n return `${this.sharedMissingSlots()} offen`;\n }\n return `${this.missingMembers().length} müssen packen`;\n });\n\n readonly overlayMembers = computed<C2gPackingListMemberStatus[]>(() =>\n this.visibleMembers().map(member => ({\n memberId: member.id,\n memberName: member.name,\n initials: member.initials,\n checked: this.isMemberChecked(member.id),\n canToggle: this.item().visibility === 'shared'\n ? this.canAssignShared(member.id)\n : this.canPackForMember(member.id)\n }))\n );\n\n readonly filteredOverlayMembers = computed(() => {\n const query = this.overlaySearch().trim().toLowerCase();\n if (!query) {\n return this.overlayMembers();\n }\n\n return this.overlayMembers().filter(member => {\n const searchable = `${member.memberName} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n readonly personalStatusBadges = computed(() => {\n if (this.item().visibility !== 'personal') {\n return [] as Array<{ key: string; text: string; tone: 'success' | 'warning'; dotColor: string }>;\n }\n\n const badges: Array<{ key: string; text: string; tone: 'success' | 'warning'; dotColor: string }> = [];\n\n for (const assignment of this.item().assignments ?? []) {\n const targetMember = this.members().find(m => m.id === assignment.memberId);\n const targetName = targetMember?.name ?? assignment.memberName ?? assignment.memberId;\n const sourceMember = assignment.packedBy ? this.members().find(m => m.id === assignment.packedBy) : null;\n const sourceName = sourceMember?.name ?? assignment.packedByName ?? assignment.packedBy;\n const isTakeover = !!assignment.packedBy && assignment.packedBy !== assignment.memberId;\n\n badges.push({\n key: `${assignment.memberId}:${assignment.packedBy ?? assignment.memberId}:${assignment.status}`,\n text: isTakeover ? `${sourceName} -> ${targetName}` : targetName,\n tone: assignment.status === 'assigned' ? 'warning' : 'success',\n dotColor: this.memberRingColor(assignment.memberId)\n });\n }\n\n return badges.sort((a, b) => {\n const aIsCurrent = a.key.startsWith(`${this.currentUserId()}:`);\n const bIsCurrent = b.key.startsWith(`${this.currentUserId()}:`);\n if (aIsCurrent && !bIsCurrent) return -1;\n if (!aIsCurrent && bIsCurrent) return 1;\n return a.text.localeCompare(b.text);\n });\n });\n\n readonly sharedCountChips = computed(() => {\n if (this.item().visibility !== 'shared') {\n return [] as Array<{ key: string; text: string; tone: 'success' | 'warning' }>;\n }\n\n const byMember = new Map<string, { quantity: number; hasPacked: boolean }>();\n for (const assignment of this.item().assignments ?? []) {\n const quantity = Math.max(1, assignment.quantity ?? 1);\n const prev = byMember.get(assignment.memberId) ?? { quantity: 0, hasPacked: false };\n byMember.set(assignment.memberId, {\n quantity: prev.quantity + quantity,\n hasPacked: prev.hasPacked || assignment.status === 'packed' || assignment.status === 'confirmed'\n });\n }\n\n return Array.from(byMember.entries())\n .map(([memberId, value]) => {\n const member = this.members().find(m => m.id === memberId);\n return {\n key: memberId,\n text: `${member?.name ?? memberId}: ${value.quantity}x`,\n tone: (value.hasPacked ? 'success' : 'warning') as 'success' | 'warning'\n };\n })\n .sort((a, b) => {\n const aIsCurrent = a.key === this.currentUserId();\n const bIsCurrent = b.key === this.currentUserId();\n if (aIsCurrent && !bIsCurrent) return -1;\n if (!aIsCurrent && bIsCurrent) return 1;\n return a.text.localeCompare(b.text);\n });\n });\n\n memberAssignmentStatus(memberId: string): 'confirmed' | 'packed' | 'assigned' | 'none' {\n const assignments = this.item().assignments ?? [];\n const a = assignments.find(a => a.memberId === memberId);\n if (!a) return 'none';\n if (a.status === 'confirmed') return 'confirmed';\n if (a.status === 'packed') return 'packed';\n return 'assigned';\n }\n\n memberAssignedQuantity(memberId: string): number {\n const assignments = this.item().assignments ?? [];\n const assignment = assignments.find(a => a.memberId === memberId);\n if (!assignment) {\n return 0;\n }\n return Math.max(1, assignment.quantity ?? 1);\n }\n\n memberRingTone(memberId: string): 'custom' {\n return 'custom';\n }\n\n memberRingColor(memberId: string): string {\n const status = this.memberAssignmentStatus(memberId);\n if (status === 'confirmed' || status === 'packed') return '#4caf50';\n if (status === 'assigned') return '#f1c84a';\n return '#cad8d0';\n }\n\n memberBadge(memberId: string): C2gAvatarBadge | null {\n const status = this.memberAssignmentStatus(memberId);\n if (status === 'confirmed' || status === 'packed') {\n return { icon: '✓', tone: 'success', ariaLabel: 'Bestätigt' };\n }\n if (status === 'assigned') {\n return { icon: '?', tone: 'neutral', ariaLabel: 'Zugewiesen' };\n }\n return null;\n }\n\n memberBackground(member: C2gPackingListMember): string {\n switch (member.type) {\n case 'child':\n case 'baby':\n return '#fdf2d9';\n case 'pet':\n return '#efe6fb';\n default:\n return '#e8f0ea';\n }\n }\n\n isMemberChecked(memberId: string): boolean {\n return this.item().visibility === 'shared'\n ? this.isSharedAssigned(memberId)\n : this.isAssignmentChecked(memberId);\n }\n\n hasAnyAssignment(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId);\n }\n\n canPackForMember(memberId: string): boolean {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n return memberId === this.currentUserId() || permissions.isOrganizer;\n }\n\n isAssignmentChecked(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId && (a.status === 'packed' || a.status === 'confirmed'));\n }\n\n isSharedAssigned(memberId: string): boolean {\n const assignments = this.item().assignments ?? [];\n return assignments.some(a => a.memberId === memberId);\n }\n\n canAssignShared(memberId: string): boolean {\n const permissions = this.permissions();\n if (permissions.readOnly) {\n return false;\n }\n if (permissions.isGuest && memberId !== this.currentUserId()) {\n return false;\n }\n return true;\n }\n\n onSoloToggle(checked: boolean): void {\n this.itemChecked.emit({ itemId: this.item().id, checked });\n }\n\n onPrivateToggle(checked: boolean): void {\n this.itemChecked.emit({ itemId: this.item().id, checked });\n }\n\n onSharedToggle(memberId: string, quantity = 1): void {\n const assigned = !this.isSharedAssigned(memberId);\n const safeQuantity = Math.max(1, quantity);\n\n const label = assigned\n ? `Willst du dich mit ${safeQuantity}x fuer dieses Shared-Item eintragen?`\n : 'Willst du deine Zuordnung fuer dieses Shared-Item entfernen?';\n\n if (!globalThis.confirm(label)) {\n return;\n }\n\n this.itemAssigned.emit({ itemId: this.item().id, memberId, assigned, quantity: assigned ? safeQuantity : undefined });\n }\n\n private setSharedAssignment(memberId: string, assigned: boolean, quantity?: number): void {\n const safeQuantity = quantity !== undefined ? Math.max(1, quantity) : undefined;\n this.itemAssigned.emit({\n itemId: this.item().id,\n memberId,\n assigned,\n quantity: assigned ? safeQuantity : undefined\n });\n }\n\n private setPersonalAssignment(memberId: string, assigned: boolean): void {\n this.itemAssigned.emit({\n itemId: this.item().id,\n memberId,\n assigned\n });\n }\n\n onPersonalToggle(memberId: string): void {\n const checked = !this.isAssignmentChecked(memberId);\n this.personalItemToggled.emit({ itemId: this.item().id, memberId, checked });\n }\n\n deleteItem(): void {\n if (!this.canEditOrDeleteItem()) {\n return;\n }\n this.itemDeleted.emit(this.item().id);\n }\n\n requestEdit(): void {\n if (!this.canEditOrDeleteItem()) {\n return;\n }\n this.itemEditRequested.emit(this.item().id);\n }\n\n requestAssign(): void {\n if (!this.canShowAssignCta()) {\n return;\n }\n if (this.item().visibility === 'personal') {\n this.openPersonalAssignDialog();\n return;\n }\n this.openOverlay();\n }\n\n openPersonalAssignDialog(): void {\n if (this.item().visibility !== 'personal') {\n return;\n }\n\n const candidates = this.personalAssignableMembers();\n if (candidates.length === 0) {\n return;\n }\n\n this.closeCtaMenu();\n this.closeOverlay();\n this.closeDelegateDialog();\n this.closeAvatarDialog();\n this.quantityPickerOpen.set(false);\n this.personalAssignSearch.set('');\n this.personalAssignMemberId.set(candidates[0].id);\n this.personalAssignDialogOpen.set(true);\n }\n\n closePersonalAssignDialog(): void {\n this.personalAssignDialogOpen.set(false);\n this.personalAssignSearch.set('');\n this.personalAssignMemberId.set(null);\n }\n\n onPersonalAssignSearch(event: Event): void {\n this.personalAssignSearch.set((event.target as HTMLInputElement).value);\n const filtered = this.filteredPersonalAssignableMembers();\n const selectedMemberId = this.personalAssignMemberId();\n if (!selectedMemberId || !filtered.some(member => member.id === selectedMemberId)) {\n this.personalAssignMemberId.set(filtered[0]?.id ?? null);\n }\n }\n\n selectPersonalAssignMember(memberId: string): void {\n this.personalAssignMemberId.set(memberId);\n }\n\n confirmPersonalAssignment(): void {\n const member = this.selectedPersonalAssignMember();\n if (!member) {\n return;\n }\n\n if (!globalThis.confirm(`${member.name} diesem Personal-Item zuweisen?`)) {\n return;\n }\n\n this.setPersonalAssignment(member.id, true);\n this.closePersonalAssignDialog();\n }\n\n onPersonalAvatarClick(memberId: string): void {\n if (this.item().visibility !== 'personal' || !this.canManagePersonalAssignments() || !this.hasAnyAssignment(memberId)) {\n return;\n }\n\n const member = this.members().find(entry => entry.id === memberId);\n if (!globalThis.confirm(`${member?.name ?? memberId} von diesem Personal-Item entfernen?`)) {\n return;\n }\n\n this.setPersonalAssignment(memberId, false);\n }\n\n onAssignMeToggle(): void {\n if (this.selfAssignedToShared()) {\n this.openDelegateDialog();\n return;\n }\n\n if (this.requiredQuantity() <= 1) {\n this.onSharedToggle(this.currentUserId(), 1);\n return;\n }\n\n const missing = this.sharedMissingSlots();\n if (missing <= 0) {\n return;\n }\n\n this.quantityPickerValue.set(Math.min(this.quantityPickerValue(), missing));\n this.quantityPickerOpen.update(open => !open);\n }\n\n openDelegateDialog(): void {\n if (this.item().visibility !== 'shared') {\n return;\n }\n const candidates = this.delegateCandidates();\n if (candidates.length === 0) {\n return;\n }\n this.closeAvatarDialog();\n this.quantityPickerOpen.set(false);\n this.delegateMemberId.set(candidates[0].id);\n this.delegateQuantity.set(1);\n this.delegateDialogOpen.set(true);\n }\n\n closeDelegateDialog(): void {\n this.delegateDialogOpen.set(false);\n this.delegateMemberId.set(null);\n this.delegateQuantity.set(1);\n }\n\n onDelegateMemberChange(event: Event): void {\n this.delegateMemberId.set((event.target as HTMLSelectElement).value || null);\n }\n\n increaseDelegateQuantity(): void {\n this.delegateQuantity.update(value => Math.min(this.requiredQuantity(), value + 1));\n }\n\n decreaseDelegateQuantity(): void {\n this.delegateQuantity.update(value => Math.max(1, value - 1));\n }\n\n confirmDelegateAssignment(): void {\n const memberId = this.delegateMemberId();\n if (!memberId) {\n return;\n }\n\n const target = this.members().find(member => member.id === memberId);\n const quantity = Math.max(1, this.delegateQuantity());\n const confirmationText = `Auch User mit Account können von anderen übernommen werden.`;\n\n if (!globalThis.confirm(`Zuordnung setzen: ${target?.name ?? memberId} (${quantity}x)?\\n${confirmationText}`)) {\n return;\n }\n\n this.setSharedAssignment(memberId, true, quantity);\n this.closeDelegateDialog();\n }\n\n onSharedAvatarClick(memberId: string): void {\n if (this.item().visibility !== 'shared') {\n return;\n }\n const quantity = this.memberAssignedQuantity(memberId);\n if (quantity <= 0) {\n return;\n }\n this.closeDelegateDialog();\n this.quantityPickerOpen.set(false);\n this.avatarDialogMemberId.set(memberId);\n this.avatarDialogQuantity.set(quantity);\n this.avatarDialogOpen.set(true);\n }\n\n closeAvatarDialog(): void {\n this.avatarDialogOpen.set(false);\n this.avatarDialogMemberId.set(null);\n this.avatarDialogQuantity.set(1);\n }\n\n increaseAvatarDialogQuantity(): void {\n this.avatarDialogQuantity.update(value => Math.min(this.requiredQuantity(), value + 1));\n }\n\n decreaseAvatarDialogQuantity(): void {\n this.avatarDialogQuantity.update(value => Math.max(0, value - 1));\n }\n\n confirmAvatarDialogUpdate(): void {\n const memberId = this.avatarDialogMemberId();\n if (!memberId) {\n return;\n }\n\n const quantity = this.avatarDialogQuantity();\n const member = this.members().find(m => m.id === memberId);\n\n if (quantity === 0) {\n if (!globalThis.confirm(`Zuordnung fuer ${member?.name ?? memberId} entfernen?`)) {\n return;\n }\n this.setSharedAssignment(memberId, false);\n this.closeAvatarDialog();\n return;\n }\n\n if (!globalThis.confirm(`Menge fuer ${member?.name ?? memberId} auf ${quantity} setzen?`)) {\n return;\n }\n this.setSharedAssignment(memberId, true, quantity);\n this.closeAvatarDialog();\n }\n\n increaseSelfAssignQuantity(): void {\n const max = this.selfAssignableMaxQuantity();\n this.quantityPickerValue.update(value => Math.min(max, value + 1));\n }\n\n decreaseSelfAssignQuantity(): void {\n this.quantityPickerValue.update(value => Math.max(1, value - 1));\n }\n\n cancelSelfAssignQuantity(): void {\n this.quantityPickerOpen.set(false);\n this.quantityPickerValue.set(1);\n }\n\n confirmSelfAssignQuantity(): void {\n const quantity = Math.max(1, Math.min(this.quantityPickerValue(), this.selfAssignableMaxQuantity()));\n this.quantityPickerOpen.set(false);\n if (!globalThis.confirm(`Willst du dich mit ${quantity}x fuer dieses Shared-Item eintragen?`)) {\n return;\n }\n this.setSharedAssignment(this.currentUserId(), true, quantity);\n }\n\n toggleCtaMenu(): void {\n this.ctaMenuOpen.update(open => !open);\n }\n\n closeCtaMenu(): void {\n this.ctaMenuOpen.set(false);\n }\n\n onMenuAssign(): void {\n this.closeCtaMenu();\n this.requestAssign();\n }\n\n onMenuEdit(): void {\n this.closeCtaMenu();\n this.requestEdit();\n }\n\n onMenuDelete(): void {\n this.closeCtaMenu();\n this.deleteItem();\n }\n\n openOverlay(): void {\n this.closeCtaMenu();\n this.overlaySearch.set('');\n this.quantityPickerOpen.set(false);\n this.closeDelegateDialog();\n this.closeAvatarDialog();\n this.closePersonalAssignDialog();\n this.overlayOpen.set(true);\n this.memberOverlayRequested.emit({\n itemId: this.item().id,\n itemName: this.item().name,\n members: this.overlayMembers()\n });\n }\n\n closeOverlay(): void {\n this.overlayOpen.set(false);\n this.overlaySearch.set('');\n }\n\n onOverlaySearch(event: Event): void {\n this.overlaySearch.set((event.target as HTMLInputElement).value);\n }\n\n toggleFromOverlay(memberId: string): void {\n if (this.item().visibility === 'shared') {\n this.onSharedToggle(memberId);\n return;\n }\n\n if (this.item().visibility === 'personal') {\n this.onPersonalToggle(memberId);\n }\n }\n\n privateItemOwnerLabel(): string {\n if (!this.item().privateOwnerVisible) {\n return 'Privat';\n }\n\n const ownerId = this.item().createdBy ?? this.item().assignments?.[0]?.memberId;\n const owner = this.members().find(member => member.id === ownerId);\n return owner?.name ?? 'Privat';\n }\n}\n","<div class=\"c2g-pl-item\" [class.c2g-pl-item--packed]=\"isPacked()\">\n\n <div class=\"c2g-pl-item__row\">\n\n <!-- Solo: echte Checkbox -->\n @if (permissions().isSolo) {\n <button\n class=\"c2g-pl-item__check\"\n [class.c2g-pl-item__check--done]=\"isPacked()\"\n type=\"button\"\n [disabled]=\"permissions().readOnly\"\n [attr.aria-pressed]=\"isPacked()\"\n [attr.aria-label]=\"isPacked() ? 'Als ungepackt markieren' : 'Als gepackt markieren'\"\n (click)=\"onSoloToggle(!isPacked())\">\n @if (isPacked()) {\n <span class=\"c2g-pl-item__check-mark\" aria-hidden=\"true\">✓</span>\n }\n </button>\n } @else {\n <!-- Gruppen-Item: farbiger Fortschritts-Dot -->\n <span\n class=\"c2g-pl-item__dot\"\n [class.c2g-pl-item__dot--danger]=\"progressTone() === 'danger'\"\n [class.c2g-pl-item__dot--warning]=\"progressTone() === 'warning'\"\n [class.c2g-pl-item__dot--success]=\"progressTone() === 'success'\"\n [attr.title]=\"progressRatioText() + ' bereit'\"\n aria-hidden=\"true\">\n </span>\n }\n\n <!-- Body -->\n <div class=\"c2g-pl-item__body\">\n\n <!-- Zeile 1: Name + Tags + Mengen-Badge -->\n <div class=\"c2g-pl-item__title-row\">\n <span class=\"c2g-pl-item__name\">{{ item().name }}</span>\n <div class=\"c2g-pl-item__tags\">\n @if (item().essential) {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--essential\">Pflicht</span>\n }\n @if (item().weather) {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--weather\">Wetter</span>\n }\n @if (item().visibility === 'private') {\n <span class=\"c2g-pl-item__tag c2g-pl-item__tag--private\">🔒 {{ privateItemOwnerLabel() }}</span>\n }\n </div>\n\n @if (quantityBadge(); as badge) {\n <c2g-badge\n class=\"c2g-pl-item__qty-badge\"\n [value]=\"badge.value\"\n [tone]=\"badge.tone\"\n variant=\"subtle\"\n size=\"sm\"\n [attr.aria-label]=\"'Gepackt: ' + badge.value\">\n </c2g-badge>\n }\n </div>\n\n <!-- Zeile 2: Mitglieder / Avatare -->\n @if (!permissions().isSolo) {\n <div class=\"c2g-pl-item__members-row\">\n\n @if (item().visibility === 'shared') {\n <!-- Assigned-Avatare -->\n @for (member of checkedPreview(); track member.id) {\n <button\n class=\"c2g-pl-item__avatar-btn\"\n type=\"button\"\n [disabled]=\"permissions().readOnly\"\n [attr.aria-label]=\"member.name + ' – antippen zum Bearbeiten'\"\n (click)=\"onSharedAvatarClick(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\"\n [ringTone]=\"memberRingTone(member.id)\"\n [ringColor]=\"memberRingColor(member.id)\"\n [badge]=\"memberBadge(member.id)\">\n </c2g-avatar>\n </button>\n }\n\n @if (hiddenCheckedCount() > 0) {\n <div class=\"c2g-pl-item__more-wrap\">\n <button class=\"c2g-pl-item__more\" type=\"button\" (click)=\"openOverlay()\">\n +{{ hiddenCheckedCount() }}\n </button>\n @if (overlayOpen()) {\n <div class=\"c2g-pl-item__overlay\" role=\"dialog\" aria-label=\"Alle Mitglieder\">\n <div class=\"c2g-pl-item__overlay-head\">\n <strong>{{ item().name }}</strong>\n <button type=\"button\" class=\"c2g-pl-item__overlay-close\" (click)=\"closeOverlay()\">✕</button>\n </div>\n <input class=\"c2g-pl-item__overlay-search\" type=\"search\" [value]=\"overlaySearch()\" placeholder=\"Mitglied suchen...\" (input)=\"onOverlaySearch($event)\" />\n <div class=\"c2g-pl-item__overlay-list\">\n @for (member of filteredOverlayMembers(); track member.memberId) {\n <button class=\"c2g-pl-item__overlay-row\" type=\"button\" [disabled]=\"!member.canToggle\" (click)=\"toggleFromOverlay(member.memberId)\">\n <span>{{ member.memberName }}</span>\n <span class=\"c2g-pl-item__overlay-status\" [class.c2g-pl-item__overlay-status--done]=\"member.checked\">{{ member.checked ? '✓ bereit' : 'ausstehend' }}</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (checkedMembers().length === 0) {\n <span class=\"c2g-pl-item__empty\">Noch niemand eingetragen</span>\n }\n\n <!-- + Eintragen Button -->\n @if (canSelfAssignShared()) {\n <button\n class=\"c2g-pl-item__join-btn\"\n [class.c2g-pl-item__join-btn--active]=\"selfAssignedToShared()\"\n type=\"button\"\n (click)=\"onAssignMeToggle()\">\n {{ joinBtnLabel() }}\n </button>\n }\n\n } @else if (item().visibility === 'personal') {\n <!-- Personal: wer hat es für sich -->\n @for (member of personalAssignedPreview(); track member.id) {\n <button\n class=\"c2g-pl-item__avatar-btn\"\n type=\"button\"\n [disabled]=\"!canManagePersonalAssignments()\"\n [attr.aria-label]=\"member.name + ' – antippen zum Entfernen'\"\n (click)=\"onPersonalAvatarClick(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\"\n [ringTone]=\"memberRingTone(member.id)\"\n [ringColor]=\"memberRingColor(member.id)\"\n [badge]=\"memberBadge(member.id)\">\n </c2g-avatar>\n </button>\n }\n\n @if (personalHiddenAssignedCount() > 0) {\n <div class=\"c2g-pl-item__more-wrap\">\n <button class=\"c2g-pl-item__more\" type=\"button\" (click)=\"openOverlay()\">\n +{{ personalHiddenAssignedCount() }}\n </button>\n @if (overlayOpen()) {\n <div class=\"c2g-pl-item__overlay\" role=\"dialog\" aria-label=\"Alle Mitglieder\">\n <div class=\"c2g-pl-item__overlay-head\">\n <strong>{{ item().name }}</strong>\n <button type=\"button\" class=\"c2g-pl-item__overlay-close\" (click)=\"closeOverlay()\">✕</button>\n </div>\n <input class=\"c2g-pl-item__overlay-search\" type=\"search\" [value]=\"overlaySearch()\" placeholder=\"Mitglied suchen...\" (input)=\"onOverlaySearch($event)\" />\n <div class=\"c2g-pl-item__overlay-list\">\n @for (member of filteredOverlayMembers(); track member.memberId) {\n <button class=\"c2g-pl-item__overlay-row\" type=\"button\" [disabled]=\"!member.canToggle\" (click)=\"toggleFromOverlay(member.memberId)\">\n <span>{{ member.memberName }}</span>\n <span class=\"c2g-pl-item__overlay-status\" [class.c2g-pl-item__overlay-status--done]=\"member.checked\">{{ member.checked ? '✓ bereit' : 'ausstehend' }}</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @if (personalAssignedMembers().length === 0) {\n <span class=\"c2g-pl-item__empty\">Nicht zugewiesen</span>\n }\n\n @if (canManagePersonalAssignments()) {\n <button class=\"c2g-pl-item__join-btn\" type=\"button\" (click)=\"openPersonalAssignDialog()\">\n + Zuweisen\n </button>\n }\n }\n\n </div>\n }\n\n </div>\n\n <!-- Aktions-Spalte: ⋯ Menü -->\n @if (canShowAssignCta() || canEditOrDeleteItem()) {\n <div class=\"c2g-pl-item__cta\">\n <button\n class=\"c2g-pl-item__menu-trigger\"\n type=\"button\"\n aria-label=\"Aktionen\"\n [attr.aria-expanded]=\"ctaMenuOpen()\"\n (click)=\"toggleCtaMenu()\">\n ⋯\n </button>\n\n @if (ctaMenuOpen()) {\n <div class=\"c2g-pl-item__menu\" role=\"menu\">\n @if (canShowAssignCta()) {\n <button class=\"c2g-pl-item__menu-item\" type=\"button\" role=\"menuitem\" (click)=\"onMenuAssign()\">\n <span class=\"c2g-pl-item__menu-icon\">👤</span> {{ isPlanner() ? 'Zuweisen' : 'Einpacken' }}\n </button>\n }\n @if (canEditOrDeleteItem()) {\n <button class=\"c2g-pl-item__menu-item\" type=\"button\" role=\"menuitem\" (click)=\"onMenuEdit()\">\n <span class=\"c2g-pl-item__menu-icon\">✏️</span> Bearbeiten\n </button>\n <div class=\"c2g-pl-item__menu-divider\"></div>\n <button class=\"c2g-pl-item__menu-item c2g-pl-item__menu-item--danger\" type=\"button\" role=\"menuitem\" (click)=\"onMenuDelete()\">\n <span class=\"c2g-pl-item__menu-icon\">🗑</span> Löschen\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Quantity Picker (Shared: eigene Menge) -->\n @if (quantityPickerOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"group\" aria-label=\"Menge wählen\">\n <span class=\"c2g-pl-item__picker-label\">{{ pickerLabel() }}</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseSelfAssignQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ quantityPickerValue() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseSelfAssignQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmSelfAssignQuantity()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"cancelSelfAssignQuantity()\">Abbrechen</button>\n </div>\n }\n\n <!-- Delegate Dialog (Organizer weist anderem zu) -->\n @if (delegateDialogOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"dialog\" aria-label=\"Mitglied zuweisen\">\n <span class=\"c2g-pl-item__picker-label\">{{ delegatePickerLabel() }}</span>\n <select class=\"c2g-pl-item__select\" [value]=\"delegateMemberId() ?? ''\" (change)=\"onDelegateMemberChange($event)\">\n @for (member of delegateCandidates(); track member.id) {\n <option [value]=\"member.id\">{{ member.name }}</option>\n }\n </select>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseDelegateQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ delegateQuantity() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseDelegateQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmDelegateAssignment()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closeDelegateDialog()\">Abbrechen</button>\n </div>\n }\n\n <!-- Avatar Dialog (Menge eines Zugewiesenen ändern) -->\n @if (avatarDialogOpen()) {\n <div class=\"c2g-pl-item__picker\" role=\"dialog\" aria-label=\"Zuteilung bearbeiten\">\n <span class=\"c2g-pl-item__picker-label\">Menge anpassen – 0 zum Entfernen</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"decreaseAvatarDialogQuantity()\">−</button>\n <span class=\"c2g-pl-item__qty-val\">{{ avatarDialogQuantity() }}x</span>\n <button class=\"c2g-pl-item__qty-btn\" type=\"button\" (click)=\"increaseAvatarDialogQuantity()\">+</button>\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" (click)=\"confirmAvatarDialogUpdate()\">Bestätigen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closeAvatarDialog()\">Abbrechen</button>\n </div>\n }\n\n <!-- Personal Assign Panel -->\n @if (personalAssignDialogOpen()) {\n <div class=\"c2g-pl-item__assign-panel\" role=\"dialog\" aria-label=\"Mitglied zuweisen\">\n <input\n class=\"c2g-pl-item__assign-search\"\n type=\"search\"\n [value]=\"personalAssignSearch()\"\n placeholder=\"Mitglied suchen...\"\n (input)=\"onPersonalAssignSearch($event)\" />\n <div class=\"c2g-pl-item__assign-list\">\n @for (member of filteredPersonalAssignableMembers(); track member.id) {\n <button\n class=\"c2g-pl-item__assign-option\"\n [class.c2g-pl-item__assign-option--active]=\"personalAssignMemberId() === member.id\"\n type=\"button\"\n (click)=\"selectPersonalAssignMember(member.id)\">\n <c2g-avatar\n size=\"sm\"\n [name]=\"member.name\"\n [initials]=\"member.initials || ''\"\n [backgroundColor]=\"memberBackground(member)\">\n </c2g-avatar>\n <span>{{ member.name }}</span>\n </button>\n }\n </div>\n <div class=\"c2g-pl-item__assign-footer\">\n <button class=\"c2g-pl-item__qty-ok\" type=\"button\" [disabled]=\"!selectedPersonalAssignMember()\" (click)=\"confirmPersonalAssignment()\">Zuweisen</button>\n <button class=\"c2g-pl-item__qty-cancel\" type=\"button\" (click)=\"closePersonalAssignDialog()\">Abbrechen</button>\n </div>\n </div>\n }\n\n <!-- Hinweis -->\n @if (item().hint) {\n <p class=\"c2g-pl-item__hint\">{{ item().hint }}</p>\n }\n\n <!-- Shared: Mengen-Chips -->\n @if (sharedCountChips().length > 0) {\n <div class=\"c2g-pl-item__chip-row\">\n @for (chip of sharedCountChips(); track chip.key) {\n <c2g-badge [value]=\"chip.text\" [tone]=\"chip.tone\" variant=\"subtle\" size=\"sm\"></c2g-badge>\n }\n </div>\n }\n\n <!-- Personal: Status-Chips -->\n @if (personalStatusBadges().length > 0) {\n <div class=\"c2g-pl-item__chip-row\">\n @for (badge of personalStatusBadges(); track badge.key) {\n <c2g-badge\n [value]=\"badge.text\"\n [tone]=\"badge.tone\"\n variant=\"subtle\"\n size=\"sm\"\n [dot]=\"true\"\n [dotColor]=\"badge.dotColor\">\n </c2g-badge>\n }\n </div>\n }\n\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { resolvePackingCategory } from './packing-list.categories';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListMember,\n C2gPackingListPermissions\n} from './packing-list.models';\nimport { PackingListItemComponent } from './packing-list-item.component';\n\n@Component({\n selector: 'c2g-packing-list-category',\n standalone: true,\n imports: [PackingListItemComponent, MatIconModule],\n templateUrl: './packing-list-category.component.html',\n styleUrls: ['./packing-list-category.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListCategoryComponent {\n readonly categoryKey = input.required<string>();\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly selectedMemberIds = input<string[]>([]);\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly expanded = input(true);\n\n readonly toggle = output<string>();\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n\n readonly category = computed(() => resolvePackingCategory(this.categoryKey()));\n\n readonly stats = computed(() => {\n const list = this.items();\n return {\n total: list.length,\n essential: list.filter(item => !!item.essential).length,\n packed: list.filter(item => (item.assignments ?? []).some(a => a.status === 'packed' || a.status === 'confirmed')).length\n };\n });\n\n onToggle(): void {\n this.toggle.emit(this.categoryKey());\n }\n}\n","<section class=\"c2g-pl-category\">\n <button type=\"button\" class=\"c2g-pl-category__header\" [class.c2g-pl-category__header--done]=\"stats().packed === stats().total && stats().total > 0\" (click)=\"onToggle()\">\n <mat-icon class=\"c2g-pl-category__icon\" aria-hidden=\"true\">{{ category().icon }}</mat-icon>\n <span class=\"c2g-pl-category__label\">{{ category().label ?? category().labelKey }}</span>\n <span class=\"c2g-pl-category__meta\">{{ stats().packed }}/{{ stats().total }}</span>\n <span class=\"c2g-pl-category__chevron\" [class.c2g-pl-category__chevron--open]=\"expanded()\" aria-hidden=\"true\">▾</span>\n </button>\n\n @if (expanded()) {\n <div class=\"c2g-pl-category__items\">\n @for (item of items(); track item.id) {\n <c2g-packing-list-item\n [item]=\"item\"\n [members]=\"members()\"\n [selectedMemberIds]=\"selectedMemberIds()\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-item>\n }\n </div>\n }\n</section>\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport {\n C2gPackingListFilterState,\n C2gPackingListLabels,\n C2gPackingListMember,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-filters',\n standalone: true,\n templateUrl: './packing-list-filters.component.html',\n styleUrls: ['./packing-list-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListFiltersComponent {\n readonly filter = input.required<C2gPackingListFilterState>();\n readonly members = input<C2gPackingListMember[]>([]);\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly disabled = input(false);\n\n readonly filterChange = output<C2gPackingListFilterState>();\n readonly overlayRequested = output<void>();\n\n readonly membersPanelOpen = signal(false);\n readonly memberQuery = signal('');\n\n readonly memberSelectionLabel = computed(() => {\n const selected = this.filter().memberIds.length;\n if (selected === 0) {\n return 'Alle User';\n }\n if (selected === 1) {\n return '1 User';\n }\n return `${selected} User`;\n });\n\n readonly filteredMembers = computed(() => {\n const query = this.memberQuery().trim().toLowerCase();\n if (!query) {\n return this.members();\n }\n return this.members().filter(member => {\n const searchable = `${member.name} ${member.initials ?? ''}`.toLowerCase();\n return searchable.includes(query);\n });\n });\n\n onQueryChange(event: Event): void {\n const query = (event.target as HTMLInputElement).value;\n this.filterChange.emit({ ...this.filter(), query });\n }\n\n onVisibilityChange(event: Event): void {\n const visibility = (event.target as HTMLSelectElement).value as C2gPackingListFilterState['visibility'];\n this.filterChange.emit({ ...this.filter(), visibility });\n }\n\n onEssentialsOnlyToggle(event: Event): void {\n const essentialsOnly = (event.target as HTMLInputElement).checked;\n this.filterChange.emit({ ...this.filter(), essentialsOnly });\n }\n\n toggleMembersPanel(): void {\n if (this.disabled()) {\n return;\n }\n this.membersPanelOpen.update(open => !open);\n }\n\n onMemberSearch(event: Event): void {\n this.memberQuery.set((event.target as HTMLInputElement).value);\n }\n\n isMemberSelected(memberId: string): boolean {\n return this.filter().memberIds.includes(memberId);\n }\n\n toggleMember(memberId: string): void {\n if (this.disabled()) {\n return;\n }\n\n const selected = new Set(this.filter().memberIds);\n if (selected.has(memberId)) {\n selected.delete(memberId);\n } else {\n selected.add(memberId);\n }\n this.filterChange.emit({ ...this.filter(), memberIds: Array.from(selected) });\n }\n\n clearMemberSelection(): void {\n this.filterChange.emit({ ...this.filter(), memberIds: [] });\n }\n\n selectAllMembers(): void {\n this.filterChange.emit({ ...this.filter(), memberIds: this.members().map(member => member.id) });\n }\n\n requestExternalOverlay(): void {\n this.overlayRequested.emit();\n }\n}\n","<div class=\"c2g-pl-filters\">\n <input\n class=\"c2g-pl-filters__search\"\n type=\"search\"\n [value]=\"filter().query\"\n [placeholder]=\"labels().searchPlaceholderKey\"\n [disabled]=\"disabled()\"\n (input)=\"onQueryChange($event)\" />\n\n <select\n class=\"c2g-pl-filters__visibility\"\n [value]=\"filter().visibility\"\n [disabled]=\"disabled()\"\n (change)=\"onVisibilityChange($event)\">\n <option value=\"all\">{{ labels().showAllVisibilityKey }}</option>\n <option value=\"shared\">{{ labels().sharedVisibilityKey }}</option>\n <option value=\"personal\">{{ labels().personalVisibilityKey }}</option>\n <option value=\"private\">{{ labels().privateVisibilityKey }}</option>\n </select>\n\n <label class=\"c2g-pl-filters__essential\">\n <input\n type=\"checkbox\"\n [checked]=\"filter().essentialsOnly\"\n [disabled]=\"disabled()\"\n (change)=\"onEssentialsOnlyToggle($event)\" />\n <span>{{ labels().essentialsOnlyKey }}</span>\n </label>\n\n <div class=\"c2g-pl-filters__member-filter\">\n <button\n type=\"button\"\n class=\"c2g-pl-filters__member-trigger\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"membersPanelOpen()\"\n (click)=\"toggleMembersPanel()\">\n <span>{{ memberSelectionLabel() }}</span>\n <span>{{ membersPanelOpen() ? '▴' : '▾' }}</span>\n </button>\n\n @if (membersPanelOpen()) {\n <div class=\"c2g-pl-filters__member-panel\" role=\"dialog\" aria-label=\"User-Filter\">\n <input\n class=\"c2g-pl-filters__member-search\"\n type=\"search\"\n [value]=\"memberQuery()\"\n placeholder=\"User suchen\"\n (input)=\"onMemberSearch($event)\" />\n\n <div class=\"c2g-pl-filters__member-actions\">\n <button type=\"button\" (click)=\"selectAllMembers()\">Alle</button>\n <button type=\"button\" (click)=\"clearMemberSelection()\">Zuruecksetzen</button>\n <button type=\"button\" (click)=\"requestExternalOverlay()\">Externe View</button>\n </div>\n\n <div class=\"c2g-pl-filters__member-list\">\n @for (member of filteredMembers(); track member.id) {\n <label class=\"c2g-pl-filters__member-option\">\n <input\n type=\"checkbox\"\n [checked]=\"isMemberSelected(member.id)\"\n (change)=\"toggleMember(member.id)\" />\n <span>{{ member.name }}</span>\n </label>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport {\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListLabels,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListPermissions,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\nimport { PackingListItemComponent } from './packing-list-item.component';\n\n@Component({\n selector: 'c2g-packing-list-private-list',\n standalone: true,\n imports: [PackingListItemComponent],\n templateUrl: './packing-list-private-list.component.html',\n styleUrls: ['./packing-list-private-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListPrivateListComponent {\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly selectedMemberIds = input<string[]>([]);\n readonly currentUserId = input.required<string>();\n readonly permissions = input.required<C2gPackingListPermissions>();\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n\n readonly privateItems = computed(() => this.items().filter(item => item.visibility === 'private'));\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n}\n","@if (privateItems().length > 0) {\n <section class=\"c2g-pl-private\">\n <h3>{{ labels().privateSectionTitleKey }}</h3>\n <div class=\"c2g-pl-private__items\">\n @for (item of privateItems(); track item.id) {\n <c2g-packing-list-item\n [item]=\"item\"\n [members]=\"members()\"\n [selectedMemberIds]=\"selectedMemberIds()\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-item>\n }\n </div>\n </section>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n C2gPackingVisibility,\n C2gPackingListLabels,\n C2gPackingListPermissions,\n C2gPackingCategoryInfo,\n C2gPackingListItem,\n DEFAULT_PACKING_LIST_LABEL_KEYS\n} from './packing-list.models';\nimport { C2G_PACKING_CATEGORY_INFO } from './packing-list.categories';\nimport { ButtonComponent } from '@camp2gether/c2g-ui';\nimport { RadioGroupComponent } from '@camp2gether/c2g-ui';\nimport { CheckboxComponent } from '@camp2gether/c2g-ui';\nimport { SelectComponent } from '@camp2gether/c2g-ui';\nimport { InputComponent } from '@camp2gether/c2g-ui';\nimport { TextareaComponent } from '@camp2gether/c2g-ui';\n\n@Component({\n selector: 'c2g-packing-list-item-create',\n standalone: true,\n imports: [CommonModule, FormsModule, ButtonComponent, RadioGroupComponent, CheckboxComponent, SelectComponent, InputComponent, TextareaComponent],\n templateUrl: './packing-list-item-create.component.html',\n styleUrls: ['./packing-list-item-create.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListItemCreateComponent {\n readonly permissions = input<C2gPackingListPermissions>({\n isOrganizer: false,\n isGuest: false,\n isSolo: false,\n readOnly: false\n });\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly readOnly = input(false);\n readonly categories = input<C2gPackingCategoryInfo[]>(Object.values(C2G_PACKING_CATEGORY_INFO));\n\n readonly itemCreated = output<Partial<C2gPackingListItem>>();\n\n readonly dialogOpen = signal(false);\n readonly formData = signal({\n name: '',\n category: Object.values(C2G_PACKING_CATEGORY_INFO)[0]?.key ?? 'other',\n visibility: 'private' as C2gPackingVisibility,\n essential: false,\n quantity: 1,\n weightKg: undefined as number | undefined,\n packedVolumeL: undefined as number | undefined,\n hint: ''\n });\n\n readonly availableVisibilities = computed(() => {\n const perms = this.permissions();\n const labels = this.labels();\n const visibilities: { value: C2gPackingVisibility; label: string }[] = [];\n\n // Private is always available\n visibilities.push({\n value: 'private',\n label: labels.privateVisibilityKey ?? 'Private'\n });\n\n // Personal is available if not a guest\n if (!perms.isGuest) {\n visibilities.push({\n value: 'personal',\n label: labels.personalVisibilityKey ?? 'Personal'\n });\n }\n\n // Shared is available for organizers or if tour allows members\n if (perms.isOrganizer || perms.canMembersAddSharedItems) {\n visibilities.push({\n value: 'shared',\n label: labels.sharedVisibilityKey ?? 'Shared'\n });\n }\n\n return visibilities;\n });\n\n readonly categoryOptions = computed(() => {\n return this.categories().map(cat => ({\n value: cat.key as string,\n label: cat.label || cat.key\n }));\n });\n\n openDialog(): void {\n this.dialogOpen.set(true);\n }\n\n closeDialog(): void {\n this.dialogOpen.set(false);\n this.resetForm();\n }\n\n resetForm(): void {\n this.formData.set({\n name: '',\n category: Object.values(C2G_PACKING_CATEGORY_INFO)[0]?.key ?? 'other',\n visibility: this.availableVisibilities()[0]?.value ?? 'private',\n essential: false,\n quantity: 1,\n weightKg: undefined,\n packedVolumeL: undefined,\n hint: ''\n });\n }\n\n submit(): void {\n const data = this.formData();\n if (!data.name.trim()) {\n return;\n }\n\n const newItem: Partial<C2gPackingListItem> = {\n name: data.name.trim(),\n category: data.category,\n visibility: data.visibility,\n essential: data.essential,\n quantity: data.quantity > 0 ? data.quantity : undefined,\n weightKg: data.weightKg && data.weightKg > 0 ? data.weightKg : undefined,\n packedVolumeL: data.packedVolumeL && data.packedVolumeL > 0 ? data.packedVolumeL : undefined,\n hint: data.hint.trim() || undefined\n };\n\n this.itemCreated.emit(newItem);\n this.closeDialog();\n }\n\n updateVisibility(visibility: C2gPackingVisibility): void {\n this.formData.update(data => ({ ...data, visibility }));\n }\n\n getCategoryLabel(categoryKey: string): string {\n return this.categories().find(c => c.key === categoryKey)?.label ?? categoryKey;\n }\n}\n","<c2g-button\n variant=\"secondary\"\n size=\"md\"\n icon=\"+\"\n [disabled]=\"readOnly()\"\n (clicked)=\"openDialog()\">\n {{ labels().addItemKey || 'Item hinzufügen' }}\n</c2g-button>\n\n@if (dialogOpen()) {\n <div class=\"c2g-pl-item-create__overlay\" (click)=\"closeDialog()\"></div>\n <dialog class=\"c2g-pl-item-create__dialog\" open>\n <div class=\"c2g-pl-item-create__header\">\n <h2>{{ labels().createItemKey || 'Neues Item' }}</h2>\n <c2g-button\n variant=\"icon\"\n size=\"sm\"\n icon=\"✕\"\n aria-label=\"Schließen\"\n (clicked)=\"closeDialog()\">\n </c2g-button>\n </div>\n\n <form class=\"c2g-pl-item-create__form\" (ngSubmit)=\"submit()\">\n <!-- Name Input -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().itemNameKey || 'Name'\"\n [required]=\"true\"\n [(ngModel)]=\"formData().name\"\n [ngModelOptions]=\"{ updateOn: 'blur' }\"\n name=\"name\"\n placeholder=\"z.B. Zelt, Schlafsack...\">\n </c2g-input>\n </div>\n\n <!-- Category Select -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-select\n [label]=\"(labels().categoryKey || 'Kategorie') + ' *'\"\n [options]=\"categoryOptions()\"\n [required]=\"true\"\n [(ngModel)]=\"formData().category\"\n name=\"category\">\n </c2g-select>\n </div>\n\n <!-- Visibility Radio -->\n @if (availableVisibilities().length > 1) {\n <div class=\"c2g-pl-item-create__field\">\n <c2g-radio-group\n [label]=\"(labels().visibilityKey || 'Sichtbarkeit') + ' *'\"\n [options]=\"availableVisibilities()\"\n [(ngModel)]=\"formData().visibility\"\n name=\"visibility\"\n orientation=\"vertical\">\n </c2g-radio-group>\n </div>\n }\n\n <!-- Essential Checkbox -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-checkbox\n [label]=\"labels().essentialKey || 'Essentiell'\"\n [(ngModel)]=\"formData().essential\"\n name=\"essential\">\n </c2g-checkbox>\n </div>\n\n <!-- Quantity -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().quantityKey || 'Menge'\"\n [(ngModel)]=\"formData().quantity\"\n name=\"quantity\"\n placeholder=\"z.B. 1\">\n </c2g-input>\n </div>\n\n <!-- Weight -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().weightKey || 'Gewicht (kg)'\"\n [(ngModel)]=\"formData().weightKg\"\n name=\"weightKg\"\n placeholder=\"z.B. 0.5\">\n </c2g-input>\n </div>\n\n <!-- Volume -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-input\n [label]=\"labels().volumeKey || 'Volumen (l)'\"\n [(ngModel)]=\"formData().packedVolumeL\"\n name=\"packedVolumeL\"\n placeholder=\"z.B. 1.5\">\n </c2g-input>\n </div>\n\n <!-- Hint -->\n <div class=\"c2g-pl-item-create__field\">\n <c2g-textarea\n [label]=\"labels().hintKey || 'Notiz'\"\n [(ngModel)]=\"formData().hint\"\n name=\"hint\"\n [rows]=\"2\"\n placeholder=\"z.B. Schlafsack für Kinder, Wetterschutz...\">\n </c2g-textarea>\n </div>\n\n <!-- Buttons -->\n <div class=\"c2g-pl-item-create__actions\">\n <c2g-button\n type=\"button\"\n variant=\"secondary\"\n size=\"md\"\n (clicked)=\"closeDialog()\">\n {{ labels().cancelKey || 'Abbrechen' }}\n </c2g-button>\n <c2g-button\n type=\"submit\"\n variant=\"primary\"\n size=\"md\"\n [disabled]=\"!formData().name.trim()\">\n {{ labels().createKey || 'Erstellen' }}\n </c2g-button>\n </div>\n </form>\n </dialog>\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\nimport { PackingListCategoryComponent } from './packing-list-category.component';\nimport { PackingListFiltersComponent } from './packing-list-filters.component';\nimport { PackingListPrivateListComponent } from './packing-list-private-list.component';\nimport { PackingListItemCreateComponent } from './packing-list-item-create.component';\nimport {\n C2gPackingListFilterState,\n C2gPackingItemAssignedEvent,\n C2gPackingListItem,\n C2gPackingListLabels,\n C2gPackingListMember,\n C2gPackingListMemberOverlayRequest,\n C2gPackingListPermissions,\n C2gPackingCategoryInfo,\n C2gPackingListConfig,\n C2gPackingListSortState,\n DEFAULT_PACKING_LIST_LABEL_KEYS,\n DEFAULT_PACKING_LIST_CONFIG\n} from './packing-list.models';\nimport { C2G_PACKING_CATEGORY_INFO } from './packing-list.categories';\n\n@Component({\n selector: 'c2g-packing-list',\n standalone: true,\n imports: [\n PackingListFiltersComponent,\n PackingListCategoryComponent,\n PackingListPrivateListComponent,\n PackingListItemCreateComponent\n ],\n templateUrl: './packing-list.component.html',\n styleUrls: ['./packing-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListComponent<TField extends string = string> {\n readonly items = input.required<C2gPackingListItem[]>();\n readonly members = input.required<C2gPackingListMember[]>();\n readonly currentUserId = input.required<string>();\n readonly permissions = input<C2gPackingListPermissions>({\n isOrganizer: false,\n isGuest: false,\n isSolo: false,\n readOnly: false\n });\n readonly labels = input<C2gPackingListLabels>(DEFAULT_PACKING_LIST_LABEL_KEYS);\n readonly categories = input<C2gPackingCategoryInfo[]>(Object.values(C2G_PACKING_CATEGORY_INFO));\n readonly config = input<C2gPackingListConfig<TField>>(DEFAULT_PACKING_LIST_CONFIG as C2gPackingListConfig<TField>);\n\n // Compat layer for deprecated inputs (showStats, showPrivateAsSeparateList)\n readonly showPrivateAsSeparateList = input(false);\n readonly showStats = input(true);\n\n readonly itemChecked = output<{ itemId: string; checked: boolean }>();\n readonly itemAssigned = output<C2gPackingItemAssignedEvent>();\n readonly itemDeleted = output<string>();\n readonly itemEditRequested = output<string>();\n readonly itemCreated = output<Partial<C2gPackingListItem>>();\n readonly personalItemToggled = output<{ itemId: string; memberId: string; checked: boolean }>();\n readonly memberOverlayRequested = output<C2gPackingListMemberOverlayRequest>();\n readonly externalMemberViewRequested = output<void>();\n readonly filterChanged = output<C2gPackingListFilterState>();\n readonly sortChanged = output<C2gPackingListSortState<TField>>();\n readonly rowActionTriggered = output<{ actionId: string; item: C2gPackingListItem }>();\n\n // Merged config: config input takes precedence over deprecated inputs\n readonly mergedConfig = computed(() => {\n const cfg = this.config();\n const features = cfg.features ?? {};\n \n // Apply deprecated inputs if config doesn't override\n return {\n ...cfg,\n features: {\n ...features,\n stats: features.stats !== undefined ? features.stats : this.showStats(),\n privateSection: features.privateSection !== undefined ? features.privateSection : this.showPrivateAsSeparateList(),\n }\n } as C2gPackingListConfig<TField>;\n });\n\n readonly filter = signal<C2gPackingListFilterState>({\n query: '',\n visibility: 'all',\n essentialsOnly: false,\n memberIds: []\n });\n\n readonly expandedCategories = signal<Set<string>>(new Set());\n readonly hasUserToggled = signal(false);\n\n readonly filteredItems = computed(() => {\n const filter = this.filter();\n const q = filter.query.trim().toLowerCase();\n\n return this.items().filter(item => {\n if (filter.visibility !== 'all' && item.visibility !== filter.visibility) {\n return false;\n }\n if (filter.essentialsOnly && !item.essential) {\n return false;\n }\n if (filter.memberIds.length > 0) {\n const selected = new Set(filter.memberIds);\n const assignments = item.assignments ?? [];\n const hasSelectedAssignment = assignments.some(assignment => selected.has(assignment.memberId));\n if (!hasSelectedAssignment) {\n return false;\n }\n }\n if (!q) {\n return true;\n }\n const searchable = `${item.name} ${item.hint ?? ''} ${item.reason ?? ''}`.toLowerCase();\n return searchable.includes(q);\n });\n });\n\n readonly categoryGroups = computed(() => {\n const grouped = new Map<string, C2gPackingListItem[]>();\n for (const item of this.filteredItems()) {\n const key = item.category || 'other';\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(item);\n }\n\n // Category order: follow C2G_PACKING_CATEGORY_INFO definition, unknowns at end.\n // A category sinks to the bottom only when ALL its items are packed/confirmed.\n const knownOrder = Object.keys(C2G_PACKING_CATEGORY_INFO);\n const isPacked = (i: C2gPackingListItem) =>\n !!i.assignments?.some(a => a.status === 'packed' || a.status === 'confirmed');\n\n const entries = Array.from(grouped.entries());\n entries.sort(([a, aItems], [b, bItems]) => {\n const aDone = aItems.every(isPacked) ? 1 : 0;\n const bDone = bItems.every(isPacked) ? 1 : 0;\n if (aDone !== bDone) return aDone - bDone;\n const ai = knownOrder.indexOf(a);\n const bi = knownOrder.indexOf(b);\n return (ai === -1 ? knownOrder.length : ai) - (bi === -1 ? knownOrder.length : bi);\n });\n\n return entries.map(([key, items]) => ({ key, items }));\n });\n\n constructor() {\n effect(() => {\n if (this.hasUserToggled()) {\n return;\n }\n\n const defaults = this.categoryGroups().slice(0, 3).map(group => group.key);\n if (defaults.length === 0) {\n return;\n }\n\n if (this.expandedCategories().size === 0) {\n this.expandedCategories.set(new Set(defaults));\n }\n });\n }\n\n onFilterChange(next: C2gPackingListFilterState): void {\n this.filter.set(next);\n this.filterChanged.emit(next);\n }\n\n onExternalMemberViewRequested(): void {\n this.externalMemberViewRequested.emit();\n }\n\n onItemCreated(item: Partial<C2gPackingListItem>): void {\n this.itemCreated.emit(item);\n }\n\n isCategoryExpanded(category: string): boolean {\n return this.expandedCategories().has(category);\n }\n\n toggleCategory(category: string): void {\n this.hasUserToggled.set(true);\n const next = new Set(this.expandedCategories());\n if (next.has(category)) {\n next.delete(category);\n } else {\n next.add(category);\n }\n this.expandedCategories.set(next);\n }\n}\n","<section class=\"c2g-packing-list\">\n <header class=\"c2g-packing-list__header\">\n <c2g-packing-list-filters\n [filter]=\"filter()\"\n [members]=\"members()\"\n [labels]=\"labels()\"\n [disabled]=\"permissions().readOnly\"\n (filterChange)=\"onFilterChange($event)\"\n (overlayRequested)=\"onExternalMemberViewRequested()\">\n </c2g-packing-list-filters>\n\n <div class=\"c2g-packing-list__header-actions\">\n <c2g-packing-list-item-create\n [permissions]=\"permissions()\"\n [labels]=\"labels()\"\n [readOnly]=\"permissions().readOnly\"\n [categories]=\"categories()\"\n (itemCreated)=\"onItemCreated($event)\">\n </c2g-packing-list-item-create>\n </div>\n </header>\n\n @if (filteredItems().length === 0) {\n <p class=\"c2g-packing-list__empty\">{{ labels().emptyStateKey }}</p>\n }\n\n <div class=\"c2g-packing-list__categories\">\n @for (group of categoryGroups(); track group.key) {\n <c2g-packing-list-category\n [categoryKey]=\"group.key\"\n [items]=\"group.items\"\n [members]=\"members()\"\n [selectedMemberIds]=\"filter().memberIds\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n [expanded]=\"isCategoryExpanded(group.key)\"\n (toggle)=\"toggleCategory($event)\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-category>\n }\n </div>\n\n @if (showPrivateAsSeparateList()) {\n <c2g-packing-list-private-list\n [items]=\"filteredItems()\"\n [members]=\"members()\"\n [selectedMemberIds]=\"filter().memberIds\"\n [currentUserId]=\"currentUserId()\"\n [permissions]=\"permissions()\"\n [labels]=\"labels()\"\n (itemChecked)=\"itemChecked.emit($event)\"\n (itemAssigned)=\"itemAssigned.emit($event)\"\n (itemDeleted)=\"itemDeleted.emit($event)\"\n (itemEditRequested)=\"itemEditRequested.emit($event)\"\n (personalItemToggled)=\"personalItemToggled.emit($event)\"\n (memberOverlayRequested)=\"memberOverlayRequested.emit($event)\">\n </c2g-packing-list-private-list>\n }\n</section>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { C2gPackingListItem } from './packing-list.models';\n\n@Component({\n selector: 'c2g-packing-list-stats',\n standalone: true,\n templateUrl: './packing-list-stats.component.html',\n styleUrls: ['./packing-list-stats.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackingListStatsComponent {\n readonly items = input.required<C2gPackingListItem[]>();\n\n readonly stats = computed(() => {\n const items = this.items();\n const packed = items.filter(item => (item.assignments ?? []).some(a => a.status === 'packed' || a.status === 'confirmed')).length;\n const essential = items.filter(item => !!item.essential).length;\n return { total: items.length, packed, essential };\n });\n}\n","<div class=\"c2g-pl-stats\">\n <span>{{ stats().packed }}/{{ stats().total }}</span>\n <span>essential: {{ stats().essential }}</span>\n</div>\n","export const WEATHER_ICON_MAP: Record<string, string> = {\n 'sunny': '☀️',\n 'clear': '☀️',\n 'partly-cloudy': '⛅',\n 'partly_cloudy': '⛅',\n 'cloudy': '☁️',\n 'overcast': '☁️',\n 'light-rain': '🌦️',\n 'light_rain': '🌦️',\n 'rain': '🌧️',\n 'heavy-rain': '⛈️',\n 'heavy_rain': '⛈️',\n 'snow': '❄️',\n 'fog': '🌫️',\n 'thunder': '⛈️',\n 'wind': '💨',\n};\n\n/**\n * Resolves a backend weather icon string to an emoji.\n * @param icon Raw icon string from the API (e.g. \"partly-cloudy\")\n * @param fallback Emoji to return for unrecognised keys. Defaults to '🌤️'.\n * Pass `icon` as fallback to preserve the raw string (useful\n * for debugging in the full weather widget).\n */\nexport function resolveWeatherIcon(icon: string, fallback = '🌤️'): string {\n if (!icon) return fallback;\n return WEATHER_ICON_MAP[icon.toLowerCase()] ?? fallback;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { resolveWeatherIcon } from './weather-icon.utils';\nimport { WeatherDay } from './weather-widget.models';\n\n@Component({\n selector: 'c2g-weather-widget',\n standalone: true,\n imports: [],\n templateUrl: './weather-widget.component.html',\n styleUrls: ['./weather-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WeatherWidgetComponent {\n readonly currentDay = input<WeatherDay | null>(null);\n readonly forecastSlots = input<WeatherDay[]>([]);\n readonly destination = input<string>('');\n readonly dates = input<{ from: string; to: string } | null>(null);\n\n getWeatherIcon(icon: string): string {\n return resolveWeatherIcon(icon, icon);\n }\n\n formatDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', {\n weekday: 'short',\n day: 'numeric',\n month: 'short'\n });\n }\n\n formatShortDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', { day: 'numeric', month: 'short' });\n }\n\n getSlotLabel(index: number, total: number): string {\n if (total === 1) return 'Reise';\n if (index === 0) return 'Anreise';\n if (index === total - 1) return 'Abreise';\n return 'Mitte';\n }\n}\n","@if (currentDay()) {\n <div class=\"wx-widget\">\n <!-- Hero: current/start-day weather -->\n <div class=\"wx-hero\">\n <span class=\"wx-hero__icon\">{{ getWeatherIcon(currentDay()!.icon) }}</span>\n <div class=\"wx-hero__body\">\n <div class=\"wx-hero__temp\">{{ currentDay()!.temperature.max }}<sup>°</sup></div>\n <div class=\"wx-hero__condition\">{{ currentDay()!.description }}</div>\n @if (destination()) {\n <div class=\"wx-hero__meta\">\n <span class=\"wx-hero__location\">📍 {{ destination() }}</span>\n @if (dates()) {\n <span class=\"wx-hero__daterange\">\n {{ formatShortDate(dates()!.from) }} – {{ formatShortDate(dates()!.to) }}\n </span>\n }\n </div>\n }\n </div>\n <div class=\"wx-hero__range\">\n <span class=\"wx-range__high\">↑ {{ currentDay()!.temperature.max }}°</span>\n <span class=\"wx-range__low\">↓ {{ currentDay()!.temperature.min }}°</span>\n </div>\n </div>\n\n <!-- Forecast slots -->\n @if (forecastSlots().length > 1) {\n <div class=\"wx-forecast\" [attr.data-slots]=\"forecastSlots().length\">\n @for (slot of forecastSlots(); track $index) {\n <div class=\"wx-slot\">\n <span class=\"wx-slot__label\">{{ getSlotLabel($index, forecastSlots().length) }}</span>\n <span class=\"wx-slot__date\">{{ formatDate(slot.date) }}</span>\n <span class=\"wx-slot__icon\">{{ getWeatherIcon(slot.icon) }}</span>\n <div class=\"wx-slot__temps\">\n <span class=\"wx-slot__max\">{{ slot.temperature.max }}°</span>\n <span class=\"wx-slot__min\">{{ slot.temperature.min }}°</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n} @else {\n <div class=\"wx-empty\">Wetter erscheint nach Ziel- und Datumsauswahl.</div>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MemberRoleKey } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-tags',\n standalone: true,\n templateUrl: './member-tags.component.html',\n styleUrls: ['./member-tags.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberTagsComponent {\n readonly isCurrentUser = input(false);\n readonly isRegistered = input(true);\n readonly roleKey = input<MemberRoleKey>(null);\n\n getRoleLabel(roleKey: MemberRoleKey): string {\n switch (roleKey) {\n case 'organizer':\n return '🧭 Organisator';\n case 'treasurer':\n return '💰 Kassenwart';\n case 'transport':\n return '🚙 Fahrkoordination';\n case 'cook':\n return '👨‍🍳 Kochen';\n case 'firstaid':\n return '🩺 Erste Hilfe';\n case 'equipment':\n return '🎒 Ausrüstung';\n default:\n return '';\n }\n }\n}\n","@if (isCurrentUser()) {\n <span class=\"tw-member__you-badge\">Du</span>\n}\n\n@if (!isRegistered()) {\n <span class=\"tw-member__unreg-badge\">Ohne Account</span>\n}\n\n@if (roleKey()) {\n <span class=\"tw-member__role\">{{ getRoleLabel(roleKey()) }}</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output\n} from '@angular/core';\nimport { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { ActionMenuItem } from './action-menu.models';\n\n@Component({\n selector: 'c2g-action-menu',\n standalone: true,\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger],\n templateUrl: './action-menu.component.html',\n styleUrls: ['./action-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionMenuComponent {\n readonly items = input.required<ActionMenuItem[]>();\n readonly triggerLabel = input('...');\n readonly ariaLabel = input('Aktionen');\n\n readonly itemSelected = output<ActionMenuItem>();\n\n select(item: ActionMenuItem): void {\n if (item.disabled) return;\n this.itemSelected.emit(item);\n }\n}\n","<div class=\"c2g-action-menu\">\n <button\n class=\"c2g-action-menu__trigger\"\n type=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [cdkMenuTriggerFor]=\"menuPanel\">\n {{ triggerLabel() }}\n </button>\n\n <ng-template #menuPanel>\n <ul class=\"c2g-action-menu__list\" cdkMenu>\n @for (item of items(); track item.key) {\n <li role=\"none\">\n <button\n class=\"c2g-action-menu__item\"\n [class.c2g-action-menu__item--danger]=\"item.variant === 'danger'\"\n [class.c2g-action-menu__item--disabled]=\"item.disabled\"\n [disabled]=\"item.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"select(item)\">\n @if (item.icon) {\n <span class=\"c2g-action-menu__item-icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n </button>\n </li>\n }\n </ul>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ActionMenuComponent } from '../../action-menu/action-menu.component';\nimport { ActionMenuItem } from '../../action-menu/action-menu.models';\nimport { AvatarComponent } from '@camp2gether/c2g-ui';\nimport { MemberTagsComponent } from '../member-tags/member-tags.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-item',\n standalone: true,\n imports: [MemberTagsComponent, ActionMenuComponent, AvatarComponent],\n templateUrl: './member-item.component.html',\n styleUrls: ['./member-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberItemComponent {\n readonly member = input.required<C2gMember>();\n\n readonly remove = output<C2gMember>();\n readonly invite = output<C2gMember>();\n readonly edit = output<C2gMember>();\n\n readonly avatarBackgroundColor = computed(() =>\n this.member().isCurrentUser ? '#1a6044' : '#e8f0ea'\n );\n\n readonly avatarTextColor = computed(() =>\n this.member().isCurrentUser ? '#ffffff' : '#1a6044'\n );\n\n readonly menuItems = computed<ActionMenuItem[]>(() => {\n const m = this.member();\n const items: ActionMenuItem[] = [];\n if (m.isRegistered !== false) {\n items.push({ key: 'invite', label: 'Einladen', icon: '✉️' });\n } else {\n items.push({ key: 'edit', label: 'Bearbeiten', icon: '✏️' });\n }\n items.push({ key: 'remove', label: 'Entfernen', icon: '🗑️', variant: 'danger' });\n return items;\n });\n\n onMenuItemSelected(item: ActionMenuItem): void {\n const m = this.member();\n if (item.key === 'remove') this.remove.emit(m);\n else if (item.key === 'invite') this.invite.emit(m);\n else if (item.key === 'edit') this.edit.emit(m);\n }\n\n getMemberTypeLabel(type: string): string {\n switch (type) {\n case 'adult':\n return 'Erwachsener';\n case 'child':\n return 'Kind';\n case 'pet':\n return 'Haustier';\n default:\n return type;\n }\n }\n}\n","<c2g-avatar\n [initials]=\"member().avatarInitials\"\n [name]=\"member().name\"\n [backgroundColor]=\"avatarBackgroundColor()\"\n [textColor]=\"avatarTextColor()\"\n ringTone=\"neutral\">\n</c2g-avatar>\n\n<div class=\"tw-member__info\">\n <span class=\"tw-member__name\">\n {{ member().name }}\n <c2g-member-tags\n [isCurrentUser]=\"member().isCurrentUser ?? false\"\n [isRegistered]=\"member().isRegistered ?? true\">\n </c2g-member-tags>\n </span>\n <span class=\"tw-member__type\">{{ getMemberTypeLabel(member().type) }}</span>\n</div>\n\n<c2g-member-tags\n [isCurrentUser]=\"false\"\n [isRegistered]=\"true\"\n [roleKey]=\"member().roleKey\">\n</c2g-member-tags>\n\n<c2g-action-menu\n [items]=\"menuItems()\"\n ariaLabel=\"Mitglied-Aktionen\"\n (itemSelected)=\"onMenuItemSelected($event)\">\n</c2g-action-menu>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MemberItemComponent } from '../member-item/member-item.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-list',\n standalone: true,\n imports: [MemberItemComponent],\n templateUrl: './member-list.component.html',\n styleUrls: ['./member-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberListComponent {\n readonly members = input.required<C2gMember[]>();\n\n readonly memberRemove = output<C2gMember>();\n readonly memberInvite = output<C2gMember>();\n readonly memberEdit = output<C2gMember>();\n}\n","<ul class=\"tw-member-list\">\n @for (member of members(); track member.id) {\n <li class=\"tw-member\">\n <c2g-member-item\n [member]=\"member\"\n (remove)=\"memberRemove.emit($event)\"\n (invite)=\"memberInvite.emit($event)\"\n (edit)=\"memberEdit.emit($event)\">\n </c2g-member-item>\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MemberListComponent } from '../member-list/member-list.component';\nimport { C2gMember } from '../member-list.models';\n\n@Component({\n selector: 'c2g-member-panel',\n standalone: true,\n imports: [MemberListComponent],\n templateUrl: './member-panel.component.html',\n styleUrls: ['./member-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberPanelComponent {\n readonly members = input.required<C2gMember[]>();\n\n readonly memberRemove = output<C2gMember>();\n readonly memberInvite = output<C2gMember>();\n readonly memberEdit = output<C2gMember>();\n}\n","<div class=\"tw-card\">\n <div class=\"tw-card__header\">\n <h2 class=\"tw-card__title\">Teilnehmer ({{ members().length }})</h2>\n <ng-content select=\"[slot=header-actions]\"></ng-content>\n </div>\n\n <c2g-member-list\n [members]=\"members()\"\n (memberRemove)=\"memberRemove.emit($event)\"\n (memberInvite)=\"memberInvite.emit($event)\"\n (memberEdit)=\"memberEdit.emit($event)\">\n </c2g-member-list>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\nimport { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { C2gMenuItem, C2gMenuSelection } from './menu.models';\n\n@Component({\n selector: 'c2g-menu',\n standalone: true,\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuComponent {\n readonly items = input.required<C2gMenuItem[]>();\n readonly triggerLabel = input('Menü');\n readonly triggerAriaLabel = input('Menü öffnen');\n\n readonly itemSelected = output<C2gMenuSelection>();\n\n readonly flatItems = computed(() => this.items());\n\n select(item: C2gMenuItem): void {\n if (item.disabled || (item.children?.length ?? 0) > 0) return;\n this.itemSelected.emit({ item });\n }\n\n selectChild(parent: C2gMenuItem, child: C2gMenuItem): void {\n if (child.disabled) return;\n this.itemSelected.emit({ item: child, parent });\n }\n}\n","<div class=\"c2g-menu\">\n <button\n class=\"c2g-menu__trigger\"\n type=\"button\"\n [attr.aria-label]=\"triggerAriaLabel()\"\n [cdkMenuTriggerFor]=\"menuPanel\">\n {{ triggerLabel() }}\n </button>\n\n <ng-template #menuPanel>\n <ul class=\"c2g-menu__list\" cdkMenu>\n @for (item of flatItems(); track item.key) {\n <li\n class=\"c2g-menu__entry\"\n [class.c2g-menu__entry--has-children]=\"(item.children?.length ?? 0) > 0\">\n\n @if ((item.children?.length ?? 0) > 0) {\n <button\n class=\"c2g-menu__item\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"subMenu\"\n [disabled]=\"item.disabled ?? false\"\n type=\"button\">\n @if (item.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n <span class=\"c2g-menu__caret\" aria-hidden=\"true\">›</span>\n </button>\n\n <ng-template #subMenu>\n <ul class=\"c2g-menu__submenu\" cdkMenu>\n @for (child of item.children ?? []; track child.key) {\n <li role=\"none\">\n <button\n class=\"c2g-menu__item\"\n [class.c2g-menu__item--danger]=\"child.variant === 'danger'\"\n [disabled]=\"child.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"selectChild(item, child)\">\n @if (child.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ child.icon }}</span>\n }\n <span>{{ child.label }}</span>\n </button>\n </li>\n }\n </ul>\n </ng-template>\n } @else {\n <button\n class=\"c2g-menu__item\"\n [class.c2g-menu__item--danger]=\"item.variant === 'danger'\"\n [disabled]=\"item.disabled ?? false\"\n cdkMenuItem\n type=\"button\"\n (cdkMenuItemTriggered)=\"select(item)\">\n @if (item.icon) {\n <span class=\"c2g-menu__icon\" aria-hidden=\"true\">{{ item.icon }}</span>\n }\n <span>{{ item.label }}</span>\n </button>\n }\n </li>\n }\n </ul>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, HostListener, input, output } from '@angular/core';\nimport { C2gSubmenuItem } from '../menu.models';\n\n@Component({\n selector: 'c2g-submenu-item',\n standalone: true,\n templateUrl: './submenu-item.component.html',\n styleUrls: ['./submenu-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SubmenuItemComponent {\n readonly item = input.required<C2gSubmenuItem>();\n readonly active = input(false);\n\n readonly selected = output<C2gSubmenuItem>();\n readonly mouseenter = output<void>();\n\n onClick(): void {\n if (this.item().disabled) {\n return;\n }\n this.selected.emit(this.item());\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.mouseenter.emit();\n }\n}\n","<li role=\"none\">\n <button\n class=\"c2g-submenu-item\"\n [class.c2g-submenu-item--active]=\"active() || item().active\"\n [disabled]=\"item().disabled ?? false\"\n role=\"menuitem\"\n type=\"button\"\n (click)=\"onClick()\">\n {{ item().label }}\n </button>\n</li>\n","import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { C2gSubmenuItem } from '../menu.models';\nimport { SubmenuItemComponent } from './submenu-item.component';\n\n@Component({\n selector: 'c2g-submenu',\n standalone: true,\n imports: [SubmenuItemComponent],\n templateUrl: './submenu.component.html',\n styleUrls: ['./submenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SubmenuComponent {\n readonly items = input.required<C2gSubmenuItem[]>();\n readonly open = input(false);\n\n readonly itemSelected = output<C2gSubmenuItem>();\n\n readonly activeIndex = signal(0);\n\n onItemSelected(item: C2gSubmenuItem): void {\n if (item.disabled) {\n return;\n }\n this.itemSelected.emit(item);\n }\n\n setActiveIndex(index: number): void {\n this.activeIndex.set(index);\n }\n\n onKeydown(event: KeyboardEvent): void {\n const list = this.items();\n if (!list.length) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.activeIndex.set((this.activeIndex() + 1) % list.length);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.activeIndex.set((this.activeIndex() - 1 + list.length) % list.length);\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const selected = list[this.activeIndex()];\n this.onItemSelected(selected);\n }\n }\n}\n","@if (open()) {\n <ul class=\"c2g-submenu\" role=\"menu\" (keydown)=\"onKeydown($event)\">\n @for (item of items(); track item.key; let index = $index) {\n <c2g-submenu-item\n [item]=\"item\"\n [active]=\"activeIndex() === index\"\n (mouseenter)=\"setActiveIndex(index)\"\n (selected)=\"onItemSelected($event)\">\n </c2g-submenu-item>\n }\n </ul>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport {\n C2gMainNavigationItem,\n C2gSubmenuSelection,\n C2gSubmenuItem\n} from '../menu.models';\nimport { SubmenuComponent } from './submenu.component';\n\n@Component({\n selector: 'c2g-main-navigation-item',\n standalone: true,\n imports: [SubmenuComponent],\n templateUrl: './main-navigation-item.component.html',\n styleUrls: ['./main-navigation-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MainNavigationItemComponent {\n readonly item = input.required<C2gMainNavigationItem>();\n\n readonly itemSelected = output<C2gMainNavigationItem>();\n readonly subItemSelected = output<C2gSubmenuSelection>();\n\n readonly submenuOpen = signal(false);\n readonly hasSubmenu = computed(() => (this.item().subItems?.length ?? 0) > 0);\n\n onItemClick(): void {\n if (this.item().disabled) {\n return;\n }\n if (this.hasSubmenu()) {\n this.submenuOpen.update(open => !open);\n return;\n }\n this.itemSelected.emit(this.item());\n }\n\n onMouseEnter(): void {\n if (this.hasSubmenu()) {\n this.submenuOpen.set(true);\n }\n }\n\n onMouseLeave(): void {\n this.submenuOpen.set(false);\n }\n\n onSubItemSelected(sub: C2gSubmenuItem): void {\n this.subItemSelected.emit({ main: this.item(), sub });\n this.submenuOpen.set(false);\n }\n\n onItemKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onItemClick();\n return;\n }\n\n if (event.key === 'ArrowDown' && this.hasSubmenu()) {\n event.preventDefault();\n this.submenuOpen.set(true);\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.submenuOpen.set(false);\n }\n }\n}\n","<li class=\"c2g-main-nav-item\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <button\n class=\"c2g-main-nav-item__button\"\n [class.c2g-main-nav-item__button--active]=\"item().active\"\n [disabled]=\"item().disabled ?? false\"\n [attr.aria-haspopup]=\"hasSubmenu() ? 'menu' : null\"\n [attr.aria-expanded]=\"hasSubmenu() ? submenuOpen() : null\"\n type=\"button\"\n (click)=\"onItemClick()\"\n (keydown)=\"onItemKeydown($event)\">\n <span>{{ item().label }}</span>\n @if (hasSubmenu()) {\n <span class=\"c2g-main-nav-item__caret\" aria-hidden=\"true\">▾</span>\n }\n </button>\n\n @if (hasSubmenu()) {\n <c2g-submenu\n [items]=\"item().subItems ?? []\"\n [open]=\"submenuOpen()\"\n (itemSelected)=\"onSubItemSelected($event)\">\n </c2g-submenu>\n }\n</li>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport {\n C2gMainNavigationItem,\n C2gSubmenuItem,\n C2gSubmenuSelection\n} from '../menu.models';\nimport { MainNavigationItemComponent } from './main-navigation-item.component';\n\n@Component({\n selector: 'c2g-main-navigation',\n standalone: true,\n imports: [MainNavigationItemComponent],\n templateUrl: './main-navigation.component.html',\n styleUrls: ['./main-navigation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MainNavigationComponent {\n readonly items = input.required<C2gMainNavigationItem[]>();\n readonly ariaLabel = input('Hauptnavigation');\n\n readonly mainItemSelected = output<C2gMainNavigationItem>();\n readonly subItemSelected = output<C2gSubmenuSelection>();\n\n onMainItemSelected(item: C2gMainNavigationItem): void {\n this.mainItemSelected.emit(item);\n }\n\n onSubItemSelected(selection: C2gSubmenuSelection): void {\n this.subItemSelected.emit(selection);\n }\n\n trackByKey = (_index: number, item: C2gMainNavigationItem): string => item.key;\n trackSubByKey = (_index: number, item: C2gSubmenuItem): string => item.key;\n}\n","<nav class=\"c2g-main-navigation\" [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"c2g-main-navigation__list\">\n @for (item of items(); track trackByKey($index, item)) {\n <c2g-main-navigation-item\n [item]=\"item\"\n (itemSelected)=\"onMainItemSelected($event)\"\n (subItemSelected)=\"onSubItemSelected($event)\">\n </c2g-main-navigation-item>\n }\n </ul>\n</nav>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NextAdventureData } from './dashboard-widgets.models';\n\nconst WEATHER_ICONS: Record<string, string> = {\n sunny: '☀️', 'partly-cloudy': '⛅', cloudy: '☁️',\n rain: '🌧️', storm: '⛈️', snow: '❄️', wind: '💨', fog: '🌫️'\n};\n\nconst TOUR_TYPE_ICONS: Record<string, string> = {\n hiking: '🥾', camping: '⛺', cycling: '🚴', climbing: '🧗',\n kayaking: '🚣', skiing: '⛷️', backpacking: '🎒', road_trip: '🚗'\n};\n\n@Component({\n selector: 'c2g-next-adventure-widget',\n standalone: true,\n imports: [],\n templateUrl: './next-adventure-widget.component.html',\n styleUrls: ['./next-adventure-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NextAdventureWidgetComponent {\n readonly data = input.required<NextAdventureData>();\n\n readonly countdown = computed(() => {\n const from = new Date(this.data().fromDate);\n from.setHours(0, 0, 0, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return Math.max(0, Math.ceil((from.getTime() - today.getTime()) / 86400000));\n });\n\n readonly duration = computed(() => {\n const from = new Date(this.data().fromDate);\n const to = new Date(this.data().toDate);\n return Math.ceil((to.getTime() - from.getTime()) / 86400000) + 1;\n });\n\n readonly countdownLabel = computed(() => {\n const d = this.countdown();\n if (d === 0) return 'Heute gehts los!';\n if (d === 1) return 'Morgen gehts los!';\n return `Noch ${d} Tage`;\n });\n\n readonly dateRange = computed(() => {\n const fmt = (s: string) => new Date(s).toLocaleDateString('de-DE', { day: '2-digit', month: 'short' });\n return `${fmt(this.data().fromDate)} – ${fmt(this.data().toDate)}`;\n });\n\n readonly tourTypeIcon = computed(() =>\n TOUR_TYPE_ICONS[this.data().tourType ?? ''] ?? '🏕️'\n );\n\n readonly weatherSlots = computed(() => (this.data().weather ?? []).slice(0, 4));\n\n readonly urgencyClass = computed(() => {\n const d = this.countdown();\n if (d <= 1) return 'c2g-next-adventure--now';\n if (d <= 7) return 'c2g-next-adventure--soon';\n return '';\n });\n\n weatherIcon(icon: string): string {\n return WEATHER_ICONS[icon] ?? '🌤️';\n }\n\n formatWeatherDate(date: string): string {\n return new Date(date).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' });\n }\n}\n","<div class=\"c2g-next-adventure\" [class]=\"urgencyClass()\">\n\n <!-- Row 1: type icon + meta + optional pulse orb -->\n <div class=\"c2g-next-adventure__header\">\n <span class=\"c2g-next-adventure__type-icon\" aria-hidden=\"true\">{{ tourTypeIcon() }}</span>\n\n <div class=\"c2g-next-adventure__meta\">\n <span class=\"c2g-next-adventure__label\">Nächstes Abenteuer</span>\n <span class=\"c2g-next-adventure__dates\">{{ dateRange() }} · {{ duration() }} Tage</span>\n </div>\n\n @if (data().showPulse) {\n <div class=\"c2g-next-adventure__pulse-orb\" aria-hidden=\"true\">\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--1\"></span>\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--2\"></span>\n <span class=\"c2g-next-adventure__pulse-ring c2g-next-adventure__pulse-ring--3\"></span>\n <span class=\"c2g-next-adventure__pulse-core\">🔴</span>\n </div>\n }\n </div>\n\n <!-- Tour name + destination -->\n <div class=\"c2g-next-adventure__body\">\n <h2 class=\"c2g-next-adventure__name\">{{ data().tourName }}</h2>\n <p class=\"c2g-next-adventure__destination\">📍 {{ data().destination }}</p>\n </div>\n\n <!-- Countdown -->\n <div class=\"c2g-next-adventure__countdown\">\n <span class=\"c2g-next-adventure__countdown-number\">{{ countdown() }}</span>\n <span class=\"c2g-next-adventure__countdown-label\">{{ countdownLabel() }}</span>\n </div>\n\n <!-- Weather strip -->\n @if (weatherSlots().length > 0) {\n <div class=\"c2g-next-adventure__weather\">\n @for (day of weatherSlots(); track day.date) {\n <div class=\"c2g-next-adventure__weather-day\">\n <span class=\"c2g-next-adventure__weather-date\">{{ formatWeatherDate(day.date) }}</span>\n <span class=\"c2g-next-adventure__weather-icon\" aria-hidden=\"true\">{{ weatherIcon(day.icon) }}</span>\n <span class=\"c2g-next-adventure__weather-temp\">\n {{ day.tempMax }}° <span class=\"c2g-next-adventure__weather-min\">{{ day.tempMin }}°</span>\n </span>\n </div>\n }\n </div>\n }\n\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport { PackStatusData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-pack-status-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-status-widget.component.html',\n styleUrls: ['./pack-status-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackStatusWidgetComponent {\n readonly data = input.required<PackStatusData>();\n\n readonly percent = computed(() => {\n const d = this.data();\n if (d.totalItems === 0) return 0;\n return Math.round((d.completedItems / d.totalItems) * 100);\n });\n\n readonly criticalOpen = computed(() =>\n this.data().criticalTotal - this.data().criticalCompleted\n );\n\n readonly statusColor = computed((): 'success' | 'warning' | 'primary' => {\n if (this.percent() === 100) return 'success';\n if (this.criticalOpen() > 0) return 'warning';\n return 'primary';\n });\n\n readonly statusLabel = computed(() => {\n const p = this.percent();\n if (p === 100) return 'Alles gepackt!';\n if (p >= 80) return 'Fast fertig';\n if (p >= 50) return 'Gut dabei';\n if (p > 0) return 'Packen gestartet';\n return 'Noch nicht gepackt';\n });\n\n // SVG ring\n readonly radius = 44;\n readonly strokeWidth = 8;\n readonly circumference = 2 * Math.PI * this.radius;\n\n readonly strokeDashoffset = computed(() =>\n this.circumference * (1 - this.percent() / 100)\n );\n\n // Segment tick marks (every 10%)\n readonly ticks = Array.from({ length: 10 }, (_, i) => {\n const angle = (i / 10) * 360 - 90;\n const rad = (angle * Math.PI) / 180;\n const r1 = this.radius + this.strokeWidth / 2 + 3;\n const r2 = r1 + 4;\n const cx = 56, cy = 56;\n return {\n x1: cx + r1 * Math.cos(rad),\n y1: cy + r1 * Math.sin(rad),\n x2: cx + r2 * Math.cos(rad),\n y2: cy + r2 * Math.sin(rad),\n };\n });\n\n // Packed items as individual visual \"dots\" (up to 20 shown)\n readonly itemDots = computed(() => {\n const total = Math.min(this.data().totalItems, 20);\n const done = Math.round((this.data().completedItems / Math.max(this.data().totalItems, 1)) * total);\n return Array.from({ length: total }, (_, i) => i < done);\n });\n\n // Count-up for percent display\n readonly displayPercent = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.percent();\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const duration = 800;\n const tick = (now: number) => {\n const t = Math.min((now - start) / duration, 1);\n const ease = 1 - Math.pow(1 - t, 3);\n this.displayPercent.set(Math.round(ease * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n}\n","<div class=\"c2g-ps\" [class]=\"'c2g-ps--' + statusColor()\">\n\n <!-- Header -->\n <div class=\"c2g-ps__header\">\n <div class=\"c2g-ps__title-row\">\n <span class=\"c2g-ps__label\">🎒 Packstatus</span>\n @if (data().tourName) {\n <span class=\"c2g-ps__tour\">{{ data().tourName }}</span>\n }\n </div>\n <span class=\"c2g-ps__status-badge\">{{ statusLabel() }}</span>\n </div>\n\n <!-- Main: ring + info side by side -->\n <div class=\"c2g-ps__body\">\n\n <!-- SVG Ring -->\n <div class=\"c2g-ps__ring-wrap\">\n <svg class=\"c2g-ps__ring\" viewBox=\"0 0 112 112\" aria-hidden=\"true\">\n <!-- Track -->\n <circle class=\"c2g-ps__ring-track\"\n cx=\"56\" cy=\"56\" [attr.r]=\"radius\"\n fill=\"none\" [attr.stroke-width]=\"strokeWidth\" />\n <!-- Fill -->\n <circle class=\"c2g-ps__ring-fill\"\n cx=\"56\" cy=\"56\" [attr.r]=\"radius\"\n fill=\"none\" [attr.stroke-width]=\"strokeWidth\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"strokeDashoffset()\"\n transform=\"rotate(-90 56 56)\" />\n <!-- Tick marks -->\n @for (t of ticks; track $index) {\n <line class=\"c2g-ps__tick\"\n [attr.x1]=\"t.x1\" [attr.y1]=\"t.y1\"\n [attr.x2]=\"t.x2\" [attr.y2]=\"t.y2\" />\n }\n </svg>\n <!-- Center content -->\n <div class=\"c2g-ps__ring-center\">\n <span class=\"c2g-ps__percent\">{{ displayPercent() }}<span class=\"c2g-ps__percent-unit\">%</span></span>\n @if (statusColor() === 'success') {\n <span class=\"c2g-ps__ring-emoji\">🎉</span>\n }\n </div>\n </div>\n\n <!-- Info panel -->\n <div class=\"c2g-ps__info\">\n\n <!-- Item count -->\n <div class=\"c2g-ps__count-row\">\n <span class=\"c2g-ps__count-main\">{{ data().completedItems }}</span>\n <span class=\"c2g-ps__count-sep\">/</span>\n <span class=\"c2g-ps__count-total\">{{ data().totalItems }}</span>\n <span class=\"c2g-ps__count-unit\">Items</span>\n </div>\n\n <!-- Item dots grid -->\n @if (itemDots().length > 0) {\n <div class=\"c2g-ps__dots\">\n @for (done of itemDots(); track $index) {\n <span class=\"c2g-ps__dot\" [class.c2g-ps__dot--done]=\"done\"></span>\n }\n </div>\n }\n\n <!-- Critical alert / all clear -->\n @if (criticalOpen() > 0) {\n <div class=\"c2g-ps__alert\">\n <span class=\"c2g-ps__alert-icon\">⚠️</span>\n <span class=\"c2g-ps__alert-text\">\n {{ criticalOpen() }} kritische{{ criticalOpen() === 1 ? 's' : '' }} fehlt{{ criticalOpen() === 1 ? '' : 'en' }}\n </span>\n </div>\n } @else if (data().criticalTotal > 0) {\n <div class=\"c2g-ps__all-clear\">\n <span>✓ Alle kritischen Items gepackt</span>\n </div>\n }\n\n </div>\n </div>\n\n <!-- Progress bar strip at bottom -->\n <div class=\"c2g-ps__strip-track\">\n <div class=\"c2g-ps__strip-fill\" [style.width.%]=\"percent()\"></div>\n </div>\n\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n computed,\n effect,\n input,\n signal,\n} from '@angular/core';\nimport { PackWeightData } from './dashboard-widgets.models';\n\nconst SCALE_MAX_G = 30_000;\n\nconst ZONES = [\n { label: 'Ultraleicht', maxG: 7_000, color: '#22c55e', bgColor: 'rgba(34,197,94,0.18)' },\n { label: 'Leicht', maxG: 12_000, color: '#84cc16', bgColor: 'rgba(132,204,22,0.15)' },\n { label: 'Mittel', maxG: 18_000, color: '#f59e0b', bgColor: 'rgba(245,158,11,0.14)' },\n { label: 'Schwer', maxG: 25_000, color: '#f97316', bgColor: 'rgba(249,115,22,0.14)' },\n { label: 'Sehr schwer', maxG: 30_000, color: '#ef4444', bgColor: 'rgba(239,68,68,0.15)' },\n] as const;\n\n@Component({\n selector: 'c2g-pack-weight-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-weight-widget.component.html',\n styleUrls: ['./pack-weight-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackWeightWidgetComponent implements OnDestroy {\n readonly data = input.required<PackWeightData>();\n\n readonly zone = computed(() =>\n ZONES.find(z => this.data().currentWeightG <= z.maxG) ?? ZONES[ZONES.length - 1]\n );\n\n readonly scalePercent = computed(() =>\n Math.min(100, (this.data().currentWeightG / SCALE_MAX_G) * 100)\n );\n\n readonly prevScalePercent = computed(() => {\n const prev = this.data().previousWeightG;\n if (prev == null) return null;\n return Math.min(100, (prev / SCALE_MAX_G) * 100);\n });\n\n readonly diffG = computed(() => {\n const prev = this.data().previousWeightG;\n if (prev == null) return null;\n return this.data().currentWeightG - prev;\n });\n\n readonly diffKg = computed(() => {\n const d = this.diffG();\n if (d == null) return null;\n return (Math.abs(d) / 1000).toFixed(1);\n });\n\n readonly diffTrend = computed((): 'better' | 'worse' | 'same' | null => {\n const d = this.diffG();\n if (d == null) return null;\n if (d < 0) return 'better';\n if (d > 0) return 'worse';\n return 'same';\n });\n\n // Animated values\n readonly animatedPercent = signal(0);\n readonly displayKg = signal('0.0');\n\n private rafMarker = 0;\n private rafKg = 0;\n\n constructor() {\n effect(() => {\n const targetPct = this.scalePercent();\n const targetKg = this.data().currentWeightG / 1000;\n\n // Marker animation\n cancelAnimationFrame(this.rafMarker);\n const fromPct = this.animatedPercent();\n const startM = performance.now();\n const tickMarker = (now: number) => {\n const t = Math.min((now - startM) / 900, 1);\n const e = 1 - Math.pow(1 - t, 4);\n this.animatedPercent.set(fromPct + (targetPct - fromPct) * e);\n if (t < 1) this.rafMarker = requestAnimationFrame(tickMarker);\n };\n this.rafMarker = requestAnimationFrame(tickMarker);\n\n // Count-up kg\n cancelAnimationFrame(this.rafKg);\n const startK = performance.now();\n const tickKg = (now: number) => {\n const t = Math.min((now - startK) / 900, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayKg.set((e * targetKg).toFixed(1));\n if (t < 1) this.rafKg = requestAnimationFrame(tickKg);\n };\n this.rafKg = requestAnimationFrame(tickKg);\n });\n }\n\n // Zone segments for colour gradient bar\n readonly zoneSegments = computed(() => {\n let prev = 0;\n return ZONES.map(z => {\n const right = (z.maxG / SCALE_MAX_G) * 100;\n const seg = { left: prev, width: right - prev, color: z.color, bgColor: z.bgColor, label: z.label };\n prev = right;\n return seg;\n });\n });\n\n // Tick marks: 0 5 10 15 20 25 30 kg\n readonly ticks = Array.from({ length: 7 }, (_, i) => ({\n pct: (i * 5_000 / SCALE_MAX_G) * 100,\n label: `${i * 5}`,\n }));\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.rafMarker);\n cancelAnimationFrame(this.rafKg);\n }\n}\n","<div class=\"c2g-pw\">\n\n <!-- Header -->\n <div class=\"c2g-pw__header\">\n <div class=\"c2g-pw__title-col\">\n <span class=\"c2g-pw__label\">Packgewicht</span>\n @if (data().tourName) {\n <span class=\"c2g-pw__tour\">{{ data().tourName }}</span>\n }\n </div>\n <!-- Zone badge -->\n <span class=\"c2g-pw__zone-badge\"\n [style.background]=\"zone().bgColor\"\n [style.color]=\"zone().color\">\n {{ zone().label }}\n </span>\n </div>\n\n <!-- Big value -->\n <div class=\"c2g-pw__value-row\">\n <span class=\"c2g-pw__value\" [style.color]=\"zone().color\">{{ displayKg() }}</span>\n <span class=\"c2g-pw__unit\">kg</span>\n\n <!-- Diff pill -->\n @if (diffG() != null) {\n <span class=\"c2g-pw__diff-pill\"\n [class.c2g-pw__diff-pill--better]=\"diffTrend() === 'better'\"\n [class.c2g-pw__diff-pill--worse]=\"diffTrend() === 'worse'\">\n @if (diffTrend() === 'better') { ↓ {{ diffKg() }} kg }\n @else if (diffTrend() === 'worse') { ↑ {{ diffKg() }} kg }\n @else { → gleich }\n </span>\n }\n </div>\n\n <!-- Scale bar -->\n <div class=\"c2g-pw__scale\">\n\n <!-- Colour zone segments -->\n <div class=\"c2g-pw__zones\">\n @for (seg of zoneSegments(); track seg.label) {\n <div class=\"c2g-pw__zone-seg\"\n [style.width.%]=\"seg.width\"\n [style.background]=\"seg.bgColor\"\n [style.border-right]=\"'1px solid ' + seg.color + '22'\">\n </div>\n }\n </div>\n\n <!-- Gradient fill up to current value -->\n <div class=\"c2g-pw__fill-track\">\n <div class=\"c2g-pw__fill\"\n [style.width.%]=\"animatedPercent()\"\n [style.background]=\"'linear-gradient(90deg, #22c55e, ' + zone().color + ')'\">\n </div>\n </div>\n\n <!-- Previous marker -->\n @if (prevScalePercent() != null) {\n <div class=\"c2g-pw__marker c2g-pw__marker--prev\"\n [style.left.%]=\"prevScalePercent()\">\n <div class=\"c2g-pw__marker-line\"></div>\n <span class=\"c2g-pw__marker-label\">Letzte Tour</span>\n </div>\n }\n\n <!-- Current marker -->\n <div class=\"c2g-pw__marker c2g-pw__marker--current\"\n [style.left.%]=\"animatedPercent()\"\n [style.--marker-color]=\"zone().color\">\n <div class=\"c2g-pw__marker-pin\"></div>\n <div class=\"c2g-pw__marker-line\"></div>\n </div>\n\n <!-- Tick marks -->\n <div class=\"c2g-pw__ticks\">\n @for (tick of ticks; track tick.pct) {\n <div class=\"c2g-pw__tick\" [style.left.%]=\"tick.pct\">\n <div class=\"c2g-pw__tick-line\"></div>\n <span class=\"c2g-pw__tick-label\">{{ tick.label }}</span>\n </div>\n }\n </div>\n\n </div>\n\n <!-- Zone legend -->\n <div class=\"c2g-pw__legend\">\n @for (seg of zoneSegments(); track seg.label) {\n <div class=\"c2g-pw__legend-item\"\n [class.c2g-pw__legend-item--active]=\"seg.label === zone().label\">\n <span class=\"c2g-pw__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-pw__legend-label\">{{ seg.label }}</span>\n </div>\n }\n </div>\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MemberReadinessEntry } from './dashboard-widgets.models';\n\nexport interface ReadinessGroup {\n label: string;\n emoji: string;\n color: 'success' | 'warning' | 'danger' | 'neutral';\n min: number;\n max: number;\n members: MemberReadinessEntry[];\n}\n\n@Component({\n selector: 'c2g-member-readiness-widget',\n standalone: true,\n imports: [],\n templateUrl: './member-readiness-widget.component.html',\n styleUrls: ['./member-readiness-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MemberReadinessWidgetComponent {\n readonly members = input.required<MemberReadinessEntry[]>();\n readonly tourName = input<string | undefined>(undefined);\n\n readonly overallPercent = computed(() => {\n const m = this.members();\n if (!m.length) return 0;\n const total = m.reduce((s, e) => s + e.totalItems, 0);\n if (total === 0) return 0;\n return Math.round((m.reduce((s, e) => s + e.completedItems, 0) / total) * 100);\n });\n\n readonly fullyReady = computed(() =>\n this.members().filter(m => this.readyPercent(m) === 100).length\n );\n\n // Groups only shown when >= 6 members, otherwise flat list\n readonly useGrouped = computed(() => this.members().length >= 6);\n\n readonly groups = computed((): ReadinessGroup[] => {\n const buckets: ReadinessGroup[] = [\n { label: 'Bereit', emoji: '✅', color: 'success', min: 100, max: 100, members: [] },\n { label: 'Fast fertig', emoji: '🔜', color: 'warning', min: 75, max: 99, members: [] },\n { label: 'Unterwegs', emoji: '📦', color: 'warning', min: 40, max: 74, members: [] },\n { label: 'Kaum gepackt', emoji: '😴', color: 'danger', min: 1, max: 39, members: [] },\n { label: 'Nicht gestartet', emoji: '❌', color: 'neutral', min: 0, max: 0, members: [] },\n ];\n for (const m of this.members()) {\n const p = this.readyPercent(m);\n const bucket = buckets.find(b => p >= b.min && p <= b.max) ?? buckets[buckets.length - 1];\n bucket.members.push(m);\n }\n return buckets.filter(b => b.members.length > 0);\n });\n\n readonly flatSorted = computed(() =>\n [...this.members()].sort((a, b) => this.readyPercent(b) - this.readyPercent(a))\n );\n\n readyPercent(entry: MemberReadinessEntry): number {\n if (entry.totalItems === 0) return 100;\n return Math.round((entry.completedItems / entry.totalItems) * 100);\n }\n\n readyColor(entry: MemberReadinessEntry): 'success' | 'warning' | 'danger' | 'neutral' {\n const p = this.readyPercent(entry);\n if (p === 100) return 'success';\n if (p >= 75) return 'warning';\n if (p >= 40) return 'warning';\n if (p > 0) return 'danger';\n return 'neutral';\n }\n\n // Collapse state per group index\n readonly collapsed = new Map<number, boolean>();\n\n toggleGroup(index: number): void {\n this.collapsed.set(index, !this.collapsed.get(index));\n }\n\n isCollapsed(index: number): boolean {\n // Collapse groups with only-ready members by default if many groups\n return this.collapsed.get(index) ?? false;\n }\n}\n","<div class=\"c2g-mr\">\n\n <!-- Header -->\n <div class=\"c2g-mr__header\">\n <div class=\"c2g-mr__title-col\">\n <span class=\"c2g-mr__label\">👥 Gruppenbereitschaft</span>\n @if (tourName()) {\n <span class=\"c2g-mr__tour\">{{ tourName() }}</span>\n }\n </div>\n <div class=\"c2g-mr__summary-pill\">\n <span class=\"c2g-mr__summary-ready\">{{ fullyReady() }}</span>\n <span class=\"c2g-mr__summary-sep\">/</span>\n <span class=\"c2g-mr__summary-total\">{{ members().length }}</span>\n <span class=\"c2g-mr__summary-unit\">bereit</span>\n </div>\n </div>\n\n <!-- Overall progress bar -->\n <div class=\"c2g-mr__overall-track\" [attr.aria-valuenow]=\"overallPercent()\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"c2g-mr__overall-fill\"\n [style.width.%]=\"overallPercent()\"\n [class.c2g-mr__overall-fill--success]=\"overallPercent() === 100\">\n </div>\n <span class=\"c2g-mr__overall-pct\">{{ overallPercent() }}%</span>\n </div>\n\n <!-- GROUPED layout (6+ members) -->\n @if (useGrouped()) {\n <div class=\"c2g-mr__groups\">\n @for (group of groups(); track group.label; let gi = $index) {\n <div class=\"c2g-mr__group\" [class]=\"'c2g-mr__group--' + group.color\">\n\n <!-- Group header (clickable to toggle) -->\n <button class=\"c2g-mr__group-header\" (click)=\"toggleGroup(gi)\" type=\"button\">\n <span class=\"c2g-mr__group-emoji\">{{ group.emoji }}</span>\n <span class=\"c2g-mr__group-name\">{{ group.label }}</span>\n <span class=\"c2g-mr__group-count\">{{ group.members.length }}</span>\n <!-- Avatar stack preview (max 4) -->\n <div class=\"c2g-mr__avatar-stack\">\n @for (m of group.members.slice(0, 4); track m.name) {\n <span class=\"c2g-mr__avatar-tiny\" [class]=\"'c2g-mr__avatar-tiny--' + group.color\"\n [title]=\"m.name\">{{ m.initials }}</span>\n }\n @if (group.members.length > 4) {\n <span class=\"c2g-mr__avatar-tiny c2g-mr__avatar-tiny--more\">+{{ group.members.length - 4 }}</span>\n }\n </div>\n <span class=\"c2g-mr__group-chevron\" [class.c2g-mr__group-chevron--open]=\"!isCollapsed(gi)\">›</span>\n </button>\n\n <!-- Member rows (collapsible) -->\n @if (!isCollapsed(gi)) {\n <ul class=\"c2g-mr__member-list\">\n @for (m of group.members; track m.name) {\n <li class=\"c2g-mr__member\" [class.c2g-mr__member--self]=\"m.isSelf\">\n <span class=\"c2g-mr__avatar-sm\" [class]=\"'c2g-mr__avatar-sm--' + group.color\">\n {{ m.initials }}\n </span>\n <span class=\"c2g-mr__member-name\">\n {{ m.name }}\n @if (m.isSelf) { <span class=\"c2g-mr__self-tag\">Du</span> }\n </span>\n <div class=\"c2g-mr__mini-track\">\n <div class=\"c2g-mr__mini-fill\"\n [class]=\"'c2g-mr__mini-fill--' + group.color\"\n [style.width.%]=\"readyPercent(m)\">\n </div>\n </div>\n <span class=\"c2g-mr__member-pct\" [class]=\"'c2g-mr__member-pct--' + group.color\">\n {{ readyPercent(m) }}%\n </span>\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n\n } @else {\n <!-- FLAT layout (< 6 members) -->\n <ul class=\"c2g-mr__flat-list\">\n @for (m of flatSorted(); track m.name) {\n <li class=\"c2g-mr__member\" [class.c2g-mr__member--self]=\"m.isSelf\">\n <span class=\"c2g-mr__avatar-sm\" [class]=\"'c2g-mr__avatar-sm--' + readyColor(m)\">\n {{ m.initials }}\n </span>\n <span class=\"c2g-mr__member-name\">\n {{ m.name }}\n @if (m.isSelf) { <span class=\"c2g-mr__self-tag\">Du</span> }\n </span>\n <div class=\"c2g-mr__mini-track\">\n <div class=\"c2g-mr__mini-fill\"\n [class]=\"'c2g-mr__mini-fill--' + readyColor(m)\"\n [style.width.%]=\"readyPercent(m)\">\n </div>\n </div>\n <span class=\"c2g-mr__member-pct\" [class]=\"'c2g-mr__member-pct--' + readyColor(m)\">\n {{ readyPercent(m) }}%\n </span>\n </li>\n }\n </ul>\n }\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StreakData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-streak-widget',\n standalone: true,\n imports: [],\n templateUrl: './streak-widget.component.html',\n styleUrls: ['./streak-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StreakWidgetComponent {\n readonly data = input.required<StreakData>();\n\n readonly xpPercent = computed(() => {\n const d = this.data();\n if (d.nextLevelXp === 0) return 100;\n return Math.min(100, Math.round((d.experiencePoints / d.nextLevelXp) * 100));\n });\n\n readonly streakTier = computed((): 'cold' | 'warm' | 'hot' | 'legendary' => {\n const s = this.data().streakDays;\n if (s >= 365) return 'legendary';\n if (s >= 30) return 'hot';\n if (s >= 7) return 'warm';\n return 'cold';\n });\n\n readonly streakEmoji = computed(() => {\n switch (this.streakTier()) {\n case 'legendary': return '🏆';\n case 'hot': return '🔥';\n case 'warm': return '⚡';\n default: return '🌱';\n }\n });\n\n readonly levelLabel = computed(() => {\n const lvl = this.data().level;\n if (lvl >= 50) return 'Legende';\n if (lvl >= 30) return 'Experte';\n if (lvl >= 15) return 'Erfahren';\n if (lvl >= 5) return 'Fortgeschritten';\n return 'Einsteiger';\n });\n\n readonly streakLabel = computed(() => {\n const s = this.data().streakDays;\n if (s === 0) return 'Noch kein Streak';\n if (s === 1) return '1 Tag Streak';\n return `${s} Tage Streak`;\n });\n\n readonly xpToNext = computed(() =>\n Math.max(0, this.data().nextLevelXp - this.data().experiencePoints)\n );\n}\n","<div class=\"c2g-streak\" [class]=\"'c2g-streak--' + streakTier()\">\n\n <div class=\"c2g-streak__header\">\n <span class=\"c2g-streak__title\">Abenteurer-Level</span>\n <span class=\"c2g-streak__level-badge\">Lvl {{ data().level }}</span>\n </div>\n\n <div class=\"c2g-streak__hero\">\n <span class=\"c2g-streak__emoji\">{{ streakEmoji() }}</span>\n <div class=\"c2g-streak__streak-info\">\n <span class=\"c2g-streak__streak-count\">{{ data().streakDays }}</span>\n <span class=\"c2g-streak__streak-unit\">{{ data().streakDays === 1 ? 'Tag' : 'Tage' }}</span>\n </div>\n </div>\n\n <div class=\"c2g-streak__level-row\">\n <span class=\"c2g-streak__level-label\">{{ levelLabel() }}</span>\n <span class=\"c2g-streak__xp-label\">{{ data().experiencePoints }} / {{ data().nextLevelXp }} XP</span>\n </div>\n\n <div class=\"c2g-streak__xp-track\">\n <div class=\"c2g-streak__xp-fill\" [style.width.%]=\"xpPercent()\"></div>\n </div>\n\n <div class=\"c2g-streak__stats\">\n @if (data().totalDistanceKm != null) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">{{ data().totalDistanceKm }}</span>\n <span class=\"c2g-streak__stat-label\">km</span>\n </div>\n }\n @if (data().totalNightsCamped != null) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">{{ data().totalNightsCamped }}</span>\n <span class=\"c2g-streak__stat-label\">Nächte</span>\n </div>\n }\n @if (data().favoriteSeason) {\n <div class=\"c2g-streak__stat\">\n <span class=\"c2g-streak__stat-value\">\n @switch (data().favoriteSeason) {\n @case ('spring') { 🌸 }\n @case ('summer') { ☀️ }\n @case ('autumn') { 🍂 }\n @case ('winter') { ❄️ }\n @default { 🏕️ }\n }\n </span>\n <span class=\"c2g-streak__stat-label\">Lieblingszeit</span>\n </div>\n }\n </div>\n\n @if (xpToNext() > 0) {\n <div class=\"c2g-streak__next-level\">\n Noch {{ xpToNext() }} XP bis Level {{ data().level + 1 }}\n </div>\n } @else {\n <div class=\"c2g-streak__next-level c2g-streak__next-level--ready\">\n Level Up bereit! 🎉\n </div>\n }\n\n</div>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, signal, OnDestroy\n} from '@angular/core';\nimport { CampingScoreData, CampingScoreFactor } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-camping-score-widget',\n standalone: true,\n imports: [],\n templateUrl: './camping-score-widget.component.html',\n styleUrls: ['./camping-score-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CampingScoreWidgetComponent implements OnDestroy {\n readonly data = input.required<CampingScoreData>();\n\n readonly tier = computed((): 'great' | 'good' | 'ok' | 'bad' => {\n const s = this.data().score;\n if (s >= 8) return 'great';\n if (s >= 6) return 'good';\n if (s >= 4) return 'ok';\n return 'bad';\n });\n\n readonly tierLabel = computed(() => {\n if (this.data().label) return this.data().label!;\n switch (this.tier()) {\n case 'great': return 'Perfektes Camping-Wetter';\n case 'good': return 'Gute Bedingungen';\n case 'ok': return 'Akzeptables Wetter';\n default: return 'Schwierige Bedingungen';\n }\n });\n\n readonly tierEmoji = computed(() => {\n switch (this.tier()) {\n case 'great': return '☀️';\n case 'good': return '⛅';\n case 'ok': return '🌤';\n default: return '🌧️';\n }\n });\n\n readonly factors = computed((): CampingScoreFactor[] =>\n this.data().factors ?? []\n );\n\n factorBarPct(score: number): number {\n return Math.min(score / 10, 1) * 100;\n }\n\n factorTier(score: number, inverted = false): string {\n const s = inverted ? 10 - score : score;\n if (s >= 6.5) return 'good';\n if (s >= 3.5) return 'mid';\n return 'bad';\n }\n\n // Count-up animation\n readonly displayScore = signal('0.0');\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().score;\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 900, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayScore.set((e * target).toFixed(1));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-cs\" [class]=\"'c2g-cs--' + tier()\">\n\n <!-- Ambient glow orb behind score -->\n <div class=\"c2g-cs__glow-orb\" aria-hidden=\"true\"></div>\n\n <div class=\"c2g-cs__header\">\n <div class=\"c2g-cs__title-col\">\n <span class=\"c2g-cs__label\">Camping-Score</span>\n @if (data().tourName) {\n <span class=\"c2g-cs__tour\">{{ data().tourName }}</span>\n }\n </div>\n <span class=\"c2g-cs__tier-badge\">\n {{ tierEmoji() }} {{ tierLabel() }}\n </span>\n </div>\n\n <!-- Score hero -->\n <div class=\"c2g-cs__score-hero\">\n <span class=\"c2g-cs__score-value\">{{ displayScore() }}</span>\n <div class=\"c2g-cs__score-meta\">\n <span class=\"c2g-cs__score-max\">/10</span>\n <!-- Progress bar -->\n <div class=\"c2g-cs__progress-track\">\n <div class=\"c2g-cs__progress-fill\"\n [style.width.%]=\"(data().score / 10) * 100\">\n </div>\n </div>\n </div>\n </div>\n\n <!-- Factor tiles (optional) -->\n @if (factors().length > 0) {\n <div class=\"c2g-cs__factors\">\n @for (f of factors(); track f.label) {\n <div class=\"c2g-cs__factor\"\n [class]=\"'c2g-cs__factor--' + factorTier(f.score, f.inverted)\"\n [class.c2g-cs__factor--inverted]=\"f.inverted\">\n <span class=\"c2g-cs__factor-direction\">{{ f.inverted ? '↓' : '↑' }}</span>\n <span class=\"c2g-cs__factor-icon\">{{ f.icon }}</span>\n <span class=\"c2g-cs__factor-label\">{{ f.label }}</span>\n <div class=\"c2g-cs__factor-bar-track\">\n <div class=\"c2g-cs__factor-bar-fill\"\n [style.width.%]=\"factorBarPct(f.score)\">\n </div>\n </div>\n <span class=\"c2g-cs__factor-score\">{{ f.score.toFixed(0) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Highlights -->\n @if (data().highlights?.length) {\n <ul class=\"c2g-cs__highlights\">\n @for (h of data().highlights!.slice(0, 3); track h) {\n <li class=\"c2g-cs__highlight\">\n <span class=\"c2g-cs__highlight-dot\"></span>\n {{ h }}\n </li>\n }\n </ul>\n }\n\n <!-- Warnings -->\n @if (data().warnings?.length) {\n <div class=\"c2g-cs__warnings\">\n @for (w of data().warnings!.slice(0, 2); track w) {\n <div class=\"c2g-cs__warning\">⚠️ {{ w }}</div>\n }\n </div>\n }\n\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RainVisualizationData, RainForecastDay } from './dashboard-widgets.models';\n\ninterface RainDay extends RainForecastDay {\n dayLabel: string;\n probPct: number;\n barPct: number;\n level: 'none' | 'light' | 'moderate' | 'heavy';\n icon: string;\n}\n\n@Component({\n selector: 'c2g-rain-visualization-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './rain-visualization-widget.component.html',\n styleUrls: ['./rain-visualization-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RainVisualizationWidgetComponent {\n readonly data = input.required<RainVisualizationData>();\n\n readonly enriched = computed((): RainDay[] => {\n const raw = this.data().days.slice(0, 7);\n const maxPrecip = Math.max(...raw.map(d => d.precipitation), 5);\n return raw.map(d => {\n const prob = d.precipitationProbability;\n const level: RainDay['level'] =\n prob < 0.2 ? 'none' :\n prob < 0.5 ? 'light' :\n prob < 0.75 ? 'moderate' : 'heavy';\n return {\n ...d,\n dayLabel: new Date(d.date).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' }),\n probPct: Math.round(prob * 100),\n barPct: Math.round((d.precipitation / maxPrecip) * 100),\n level,\n icon: d.icon ?? (level === 'none' ? '☀️' : level === 'light' ? '🌦' : level === 'moderate' ? '🌧' : '⛈'),\n };\n });\n });\n\n readonly overallRisk = computed((): 'low' | 'medium' | 'high' => {\n const days = this.enriched();\n const avg = days.reduce((s, d) => s + d.precipitationProbability, 0) / (days.length || 1);\n return avg >= 0.6 ? 'high' : avg >= 0.3 ? 'medium' : 'low';\n });\n\n readonly riskLabel = computed(() => {\n const days = this.enriched();\n const rainyDays = days.filter(d => d.precipitationProbability >= 0.4).length;\n const totalMm = days.reduce((s, d) => s + d.precipitation, 0);\n if (this.overallRisk() === 'high') return `${rainyDays} Regentage · ${totalMm.toFixed(0)} mm gesamt`;\n if (this.overallRisk() === 'medium') return `${rainyDays} Schauertag${rainyDays !== 1 ? 'e' : ''} möglich`;\n return 'Kaum Niederschlag erwartet';\n });\n\n readonly summaryIcon = computed(() => {\n switch (this.overallRisk()) {\n case 'high': return '⛈';\n case 'medium': return '🌦';\n default: return '☀️';\n }\n });\n}\n","<article class=\"c2g-rain\" [class]=\"'c2g-rain--' + overallRisk()\">\n\n <header class=\"c2g-rain__header\">\n <div class=\"c2g-rain__title-col\">\n <span class=\"c2g-rain__label\">🌧 Niederschlag</span>\n @if (data().tourName) {\n <span class=\"c2g-rain__tour\">{{ data().tourName }}</span>\n }\n </div>\n <div class=\"c2g-rain__summary\">\n <span class=\"c2g-rain__summary-icon\">{{ summaryIcon() }}</span>\n <span class=\"c2g-rain__summary-text\">{{ riskLabel() }}</span>\n </div>\n </header>\n\n <!-- Bar chart grid -->\n <div class=\"c2g-rain__grid\" aria-label=\"Niederschlagsvorhersage\" role=\"list\">\n @for (day of enriched(); track day.date) {\n <div class=\"c2g-rain__day c2g-rain__day--{{ day.level }}\" role=\"listitem\">\n\n <!-- Weather icon -->\n <span class=\"c2g-rain__day-icon\">{{ day.icon }}</span>\n\n <!-- Probability badge -->\n <span class=\"c2g-rain__prob c2g-rain__prob--{{ day.level }}\">\n {{ day.probPct }}%\n </span>\n\n <!-- Bar (precipitation mm) -->\n <div class=\"c2g-rain__bar-wrap\" [title]=\"day.precipitation + ' mm'\">\n <div\n class=\"c2g-rain__bar c2g-rain__bar--{{ day.level }}\"\n [style.height.%]=\"day.barPct\"\n ></div>\n </div>\n\n @if (day.precipitation > 0) {\n <span class=\"c2g-rain__mm\">{{ day.precipitation.toFixed(1) }}<small>mm</small></span>\n } @else {\n <span class=\"c2g-rain__mm c2g-rain__mm--dry\">–</span>\n }\n\n <!-- Day label -->\n <span class=\"c2g-rain__date\">{{ day.dayLabel }}</span>\n </div>\n }\n </div>\n\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { GroupCompositionData, MemberType } from './dashboard-widgets.models';\n\nconst TYPE_CONFIG: Record<MemberType, { emoji: string; label: string; color: string }> = {\n adult: { emoji: '🧑', label: 'Erwachsene', color: '#ff6b35' },\n senior: { emoji: '👴', label: 'Senioren', color: '#a855f7' },\n teen: { emoji: '🧒', label: 'Jugendliche', color: '#f59e0b' },\n child: { emoji: '👧', label: 'Kinder', color: '#84cc16' },\n toddler: { emoji: '👶', label: 'Kleinkinder', color: '#06b6d4' },\n dog: { emoji: '🐕', label: 'Hunde', color: '#f97316' },\n cat: { emoji: '🐈', label: 'Katzen', color: '#ec4899' },\n pet: { emoji: '🐾', label: 'Haustiere', color: '#6b7280' },\n};\n\nconst TYPE_ORDER: MemberType[] = ['adult', 'senior', 'teen', 'child', 'toddler', 'dog', 'cat', 'pet'];\n\n@Component({\n selector: 'c2g-group-composition-widget',\n standalone: true,\n imports: [],\n templateUrl: './group-composition-widget.component.html',\n styleUrls: ['./group-composition-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupCompositionWidgetComponent {\n readonly data = input.required<GroupCompositionData>();\n\n readonly sorted = computed(() =>\n [...this.data().members]\n .filter(m => m.count > 0)\n .sort((a, b) => TYPE_ORDER.indexOf(a.type) - TYPE_ORDER.indexOf(b.type))\n );\n\n readonly totalPeople = computed(() =>\n this.data().members\n .filter(m => ['adult', 'teen', 'child', 'toddler', 'senior'].includes(m.type))\n .reduce((s, m) => s + m.count, 0)\n );\n\n readonly totalPets = computed(() =>\n this.data().members\n .filter(m => ['dog', 'cat', 'pet'].includes(m.type))\n .reduce((s, m) => s + m.count, 0)\n );\n\n readonly maxCount = computed(() =>\n Math.max(...this.data().members.map(m => m.count), 1)\n );\n\n // Avatar cluster: up to 12 individual icons for the visual summary strip\n readonly avatars = computed(() => {\n const result: { emoji: string; color: string; key: string }[] = [];\n for (const entry of this.sorted()) {\n const cfg = TYPE_CONFIG[entry.type];\n const n = Math.min(entry.count, 6);\n for (let i = 0; i < n; i++) {\n result.push({ emoji: cfg.emoji, color: cfg.color, key: `${entry.type}-${i}` });\n }\n }\n return result.slice(0, 14);\n });\n\n configFor(type: MemberType) {\n return TYPE_CONFIG[type];\n }\n}\n","<div class=\"c2g-gc\">\n\n <div class=\"c2g-gc__header\">\n <div class=\"c2g-gc__title-col\">\n <span class=\"c2g-gc__label\">Gruppenkomposition</span>\n @if (data().groupName) {\n <span class=\"c2g-gc__name\">{{ data().groupName }}</span>\n }\n </div>\n <div class=\"c2g-gc__summary-pills\">\n <span class=\"c2g-gc__pill\">\n <span class=\"c2g-gc__pill-num\">{{ totalPeople() }}</span>\n <span class=\"c2g-gc__pill-sub\">Personen</span>\n </span>\n @if (totalPets() > 0) {\n <span class=\"c2g-gc__pill c2g-gc__pill--pets\">\n <span class=\"c2g-gc__pill-num\">{{ totalPets() }}</span>\n <span class=\"c2g-gc__pill-sub\">Tiere</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Avatar cluster strip -->\n <div class=\"c2g-gc__avatars\">\n @for (a of avatars(); track a.key) {\n <span class=\"c2g-gc__avatar\" [style.--av-color]=\"a.color\">{{ a.emoji }}</span>\n }\n @if (totalPeople() + totalPets() > avatars().length) {\n <span class=\"c2g-gc__avatar-more\">+{{ totalPeople() + totalPets() - avatars().length }}</span>\n }\n </div>\n\n <!-- Bar chart breakdown -->\n <div class=\"c2g-gc__bars\">\n @for (entry of sorted(); track entry.type) {\n <div class=\"c2g-gc__bar-row\">\n <span class=\"c2g-gc__bar-emoji\">{{ configFor(entry.type).emoji }}</span>\n <span class=\"c2g-gc__bar-label\">{{ configFor(entry.type).label }}</span>\n <div class=\"c2g-gc__bar-track\">\n <div class=\"c2g-gc__bar-fill\"\n [style.width.%]=\"(entry.count / maxCount()) * 100\"\n [style.background]=\"configFor(entry.type).color\">\n </div>\n </div>\n <span class=\"c2g-gc__bar-count\" [style.color]=\"configFor(entry.type).color\">\n {{ entry.count }}\n </span>\n @if (entry.names?.length) {\n <span class=\"c2g-gc__bar-names\">{{ entry.names!.join(', ') }}</span>\n }\n </div>\n }\n </div>\n\n</div>\n","// Minimal hand-crafted Lottie confetti animation.\n// 6 colored rectangles fall from top with rotation — ~3KB, no external dependency.\nexport const CONFETTI_ANIMATION_DATA = {\n v: '5.7.4',\n fr: 30,\n ip: 0,\n op: 60,\n w: 200,\n h: 160,\n nm: 'confetti',\n ddd: 0,\n assets: [],\n layers: [\n makeRect(0, '#22c55e', 40, -10, 140, 150, 120, 0),\n makeRect(1, '#f59e0b', 80, -10, 160, 145, 90, 5),\n makeRect(2, '#3b82f6', 120, -10, 120, 155, 80, -5),\n makeRect(3, '#ef4444', 60, -10, 150, 148, 140, 10),\n makeRect(4, '#a855f7', 100, -10, 130, 152, 60, -8),\n makeRect(5, '#f97316', 140, -10, 110, 146, 100, 6),\n makeRect(6, '#22c55e', 30, -10, 145, 153, 110, -12),\n makeRect(7, '#3b82f6', 170, -10, 155, 149, 70, 15),\n ],\n};\n\nfunction makeRect(\n ind: number,\n color: string,\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n startRot: number,\n rotSpeed: number,\n): object {\n const hex = color.replace('#', '');\n const r = parseInt(hex.slice(0, 2), 16) / 255;\n const g = parseInt(hex.slice(2, 4), 16) / 255;\n const b = parseInt(hex.slice(4, 6), 16) / 255;\n\n return {\n ddd: 0,\n ind,\n ty: 4,\n nm: `confetti-${ind}`,\n sr: 1,\n ks: {\n o: { a: 0, k: 100 },\n r: {\n a: 1,\n k: [\n { t: 0, s: [startRot], e: [startRot + rotSpeed * 60], i: { x: [0.5], y: [1] }, o: { x: [0.5], y: [0] } },\n { t: 60, s: [startRot + rotSpeed * 60] },\n ],\n },\n p: {\n a: 1,\n k: [\n { t: 0, s: [startX, startY, 0], e: [endX, endY, 0], i: { x: [0.5], y: [1] }, o: { x: [0.5], y: [0] } },\n { t: 60, s: [endX, endY, 0] },\n ],\n },\n a: { a: 0, k: [0, 0, 0] },\n s: { a: 0, k: [100, 100, 100] },\n },\n ao: 0,\n shapes: [\n {\n ty: 'rc',\n d: 1,\n s: { a: 0, k: [8, 8] },\n p: { a: 0, k: [0, 0] },\n r: { a: 0, k: 1 },\n nm: 'rect',\n },\n {\n ty: 'fl',\n c: { a: 0, k: [r, g, b, 1] },\n o: { a: 0, k: 100 },\n r: 1,\n nm: 'fill',\n },\n ],\n ip: 0,\n op: 60,\n st: 0,\n bm: 0,\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { LottieComponent, AnimationOptions } from 'ngx-lottie';\nimport { CriticalItemsAlertData, CriticalItemAlertEntry } from './dashboard-widgets.models';\nimport { CONFETTI_ANIMATION_DATA } from './confetti-success.lottie';\n\n@Component({\n selector: 'c2g-critical-items-alert-widget',\n standalone: true,\n imports: [LottieComponent],\n templateUrl: './critical-items-alert-widget.component.html',\n styleUrls: ['./critical-items-alert-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CriticalItemsAlertWidgetComponent {\n readonly data = input.required<CriticalItemsAlertData>();\n\n readonly daysUntil = computed(() => {\n const from = new Date(this.data().tourFromDate);\n from.setHours(0, 0, 0, 0);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return Math.max(0, Math.ceil((from.getTime() - today.getTime()) / 86400000));\n });\n\n readonly urgency = computed((): 'critical' | 'warning' | 'ok' => {\n const open = this.data().openItems.length;\n const days = this.daysUntil();\n if (open === 0) return 'ok';\n if (days <= 2 || (days <= 5 && open > 3)) return 'critical';\n return 'warning';\n });\n\n readonly urgencyLabel = computed(() => {\n const d = this.daysUntil();\n if (d === 0) return 'Heute gehts los!';\n if (d === 1) return 'Morgen gehts los!';\n return `Noch ${d} Tage`;\n });\n\n readonly allClear = computed(() => this.data().openItems.length === 0);\n\n readonly personalItems = computed(() =>\n this.data().openItems.filter(i => i.scope === 'personal').slice(0, 4)\n );\n\n readonly sharedItems = computed(() =>\n this.data().openItems.filter(i => i.scope === 'shared').slice(0, 4)\n );\n\n readonly personalHidden = computed(() =>\n Math.max(0, this.data().openItems.filter(i => i.scope === 'personal').length - 4)\n );\n\n readonly sharedHidden = computed(() =>\n Math.max(0, this.data().openItems.filter(i => i.scope === 'shared').length - 4)\n );\n\n // Resolved visual type for the all-clear state\n readonly successVisualType = computed(() =>\n this.data().successVisual?.type ?? 'lottie'\n );\n\n readonly lottieOptions = computed((): AnimationOptions => {\n const v = this.data().successVisual;\n return {\n animationData: v?.type === 'lottie' ? v.value : CONFETTI_ANIMATION_DATA,\n loop: false,\n autoplay: true,\n };\n });\n\n readonly imageValue = computed(() => {\n const v = this.data().successVisual;\n return v?.type === 'image' ? (v.value as string) : null;\n });\n\n readonly imageAlt = computed(() =>\n this.data().successVisual?.alt ?? 'Erfolg'\n );\n\n readonly iconValue = computed(() => {\n const v = this.data().successVisual;\n return v?.type === 'icon' ? (v.value as string) : '🎉';\n });\n\n sharedProgress(item: CriticalItemAlertEntry): number {\n if (!item.neededCount) return 0;\n return Math.min((item.coveredCount ?? 0) / item.neededCount, 1) * 100;\n }\n}\n","<div class=\"c2g-cia\" [class]=\"'c2g-cia--' + urgency()\">\n\n <div class=\"c2g-cia__header\">\n <div class=\"c2g-cia__title-col\">\n <span class=\"c2g-cia__label\">\n @if (urgency() === 'critical') { 🚨 }\n @else if (urgency() === 'warning') { ⚠️ }\n @else { ✅ }\n Kritische Items\n </span>\n @if (data().tourName) {\n <span class=\"c2g-cia__tour\">{{ data().tourName }}</span>\n }\n </div>\n <div class=\"c2g-cia__countdown\">\n <span class=\"c2g-cia__countdown-number\">{{ daysUntil() }}</span>\n <span class=\"c2g-cia__countdown-unit\">{{ daysUntil() === 1 ? 'Tag' : 'Tage' }}</span>\n </div>\n </div>\n\n @if (allClear()) {\n <div class=\"c2g-cia__all-clear\">\n\n <!-- Visual slot -->\n <div class=\"c2g-cia__success-visual\" aria-hidden=\"true\">\n @switch (successVisualType()) {\n @case ('lottie') {\n <ng-lottie [options]=\"lottieOptions()\" width=\"100px\" height=\"80px\" />\n }\n @case ('image') {\n <img class=\"c2g-cia__success-img\"\n [src]=\"imageValue()\"\n [alt]=\"imageAlt()\" />\n }\n @case ('icon') {\n <span class=\"c2g-cia__success-icon\">{{ iconValue() }}</span>\n }\n }\n </div>\n\n <div class=\"c2g-cia__all-clear-text-block\">\n <span class=\"c2g-cia__all-clear-headline\">Alles dabei! 🎉</span>\n <span class=\"c2g-cia__all-clear-sub\">Alle kritischen Items sind gepackt — bereit für das Abenteuer.</span>\n </div>\n </div>\n } @else {\n\n <!-- Progress summary -->\n <div class=\"c2g-cia__summary\">\n <span class=\"c2g-cia__open-count\">{{ data().openItems.length }}</span>\n <span class=\"c2g-cia__summary-text\">\n von {{ data().totalCritical }} kritischen\n {{ data().totalCritical === 1 ? 'Item fehlt' : 'Items fehlen' }}\n </span>\n </div>\n <div class=\"c2g-cia__progress-track\">\n <div class=\"c2g-cia__progress-fill\"\n [style.width.%]=\"((data().totalCritical - data().openItems.length) / data().totalCritical) * 100\">\n </div>\n </div>\n\n <!-- Side-by-side sections -->\n <div class=\"c2g-cia__sections\">\n\n <!-- Personal items -->\n @if (personalItems().length > 0) {\n <div class=\"c2g-cia__section c2g-cia__section--personal\">\n <div class=\"c2g-cia__section-header\">\n <span class=\"c2g-cia__section-icon c2g-cia__section-icon--personal\">👤</span>\n <div class=\"c2g-cia__section-titles\">\n <span class=\"c2g-cia__section-title\">Persönlich</span>\n <span class=\"c2g-cia__section-hint\">Jeder braucht es selbst</span>\n </div>\n </div>\n <ul class=\"c2g-cia__list\">\n @for (item of personalItems(); track item.name) {\n <li class=\"c2g-cia__item c2g-cia__item--personal\">\n <span class=\"c2g-cia__item-dot\"></span>\n <span class=\"c2g-cia__item-name\">{{ item.name }}</span>\n @if (item.missingFor?.length) {\n <span class=\"c2g-cia__item-missing\">{{ item.missingFor!.join(', ') }}</span>\n }\n </li>\n }\n @if (personalHidden() > 0) {\n <li class=\"c2g-cia__item c2g-cia__item--more\">+ {{ personalHidden() }} weitere</li>\n }\n </ul>\n </div>\n }\n\n <!-- Shared items -->\n @if (sharedItems().length > 0) {\n <div class=\"c2g-cia__section c2g-cia__section--shared\">\n <div class=\"c2g-cia__section-header\">\n <span class=\"c2g-cia__section-icon c2g-cia__section-icon--shared\">👥</span>\n <div class=\"c2g-cia__section-titles\">\n <span class=\"c2g-cia__section-title\">Geteilt</span>\n <span class=\"c2g-cia__section-hint\">Mindestmenge muss gedeckt sein</span>\n </div>\n </div>\n <ul class=\"c2g-cia__list\">\n @for (item of sharedItems(); track item.name) {\n <li class=\"c2g-cia__item c2g-cia__item--shared\">\n <div class=\"c2g-cia__shared-top\">\n <span class=\"c2g-cia__item-dot\"></span>\n <span class=\"c2g-cia__item-name\">{{ item.name }}</span>\n @if (item.neededCount) {\n <span class=\"c2g-cia__shared-ratio\">\n {{ item.coveredCount ?? 0 }}/{{ item.neededCount }}\n </span>\n }\n </div>\n @if (item.neededCount && item.neededCount > 1) {\n <div class=\"c2g-cia__shared-bar-track\">\n <div class=\"c2g-cia__shared-bar-fill\" [style.width.%]=\"sharedProgress(item)\"></div>\n </div>\n }\n @if (item.coveredBy?.length) {\n <span class=\"c2g-cia__shared-covered\">✓ {{ item.coveredBy!.join(', ') }}</span>\n }\n </li>\n }\n @if (sharedHidden() > 0) {\n <li class=\"c2g-cia__item c2g-cia__item--more\">+ {{ sharedHidden() }} weitere</li>\n }\n </ul>\n </div>\n }\n\n </div>\n }\n\n <div class=\"c2g-cia__footer\">{{ urgencyLabel() }}</div>\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { WindIndicatorData, WindForecastDay } from './dashboard-widgets.models';\n\nconst BEAUFORT: { max: number; label: string; emoji: string; color: string }[] = [\n { max: 1, label: 'Windstille', emoji: '🌬️', color: '#22c55e' },\n { max: 5, label: 'Leichte Brise', emoji: '🌬️', color: '#84cc16' },\n { max: 11, label: 'Schwache Brise',emoji: '💨', color: '#84cc16' },\n { max: 19, label: 'Schwacher Wind',emoji: '💨', color: '#f59e0b' },\n { max: 28, label: 'Mäßiger Wind', emoji: '💨', color: '#f59e0b' },\n { max: 38, label: 'Frischer Wind', emoji: '🌀', color: '#f97316' },\n { max: 49, label: 'Starker Wind', emoji: '🌀', color: '#f97316' },\n { max: 61, label: 'Stürmisch', emoji: '⛈️', color: '#ef4444' },\n { max: 74, label: 'Sturm', emoji: '⛈️', color: '#ef4444' },\n { max: 88, label: 'Schwerer Sturm',emoji: '🌪️', color: '#dc2626' },\n { max: 102, label: 'Orkan', emoji: '🌪️', color: '#dc2626' },\n { max: 999, label: 'Schwerer Orkan',emoji: '🌪️', color: '#dc2626' },\n];\n\nfunction beaufortFor(kmh: number) {\n return BEAUFORT.find(b => kmh <= b.max) ?? BEAUFORT[BEAUFORT.length - 1];\n}\n\nfunction directionLabel(deg: number): string {\n const dirs = ['N','NO','O','SO','S','SW','W','NW'];\n return dirs[Math.round(deg / 45) % 8];\n}\n\n@Component({\n selector: 'c2g-wind-indicator-widget',\n standalone: true,\n imports: [],\n templateUrl: './wind-indicator-widget.component.html',\n styleUrls: ['./wind-indicator-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WindIndicatorWidgetComponent {\n readonly data = input.required<WindIndicatorData>();\n\n readonly days = computed(() => this.data().days.slice(0, 7));\n\n readonly peak = computed(() =>\n this.days().reduce((max, d) => d.windSpeed > max.windSpeed ? d : max, this.days()[0])\n );\n\n readonly peakBeaufort = computed(() => beaufortFor(this.peak()?.windSpeed ?? 0));\n\n readonly overallRisk = computed((): 'calm' | 'breezy' | 'windy' | 'stormy' => {\n const avg = this.days().reduce((s, d) => s + d.windSpeed, 0) / (this.days().length || 1);\n if (avg >= 50) return 'stormy';\n if (avg >= 28) return 'windy';\n if (avg >= 11) return 'breezy';\n return 'calm';\n });\n\n enriched = computed(() =>\n this.days().map(d => ({\n ...d,\n bf: beaufortFor(d.windSpeed),\n dirLabel: directionLabel(d.windDirection),\n // Arrow rotation: wind direction = where it comes FROM → arrow points that way\n arrowDeg: d.windDirection,\n barPct: Math.min(100, (d.windSpeed / 100) * 100),\n }))\n );\n\n formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric' });\n }\n}\n","<article class=\"c2g-wind\" [class]=\"'c2g-wind--' + overallRisk()\">\n\n <header class=\"c2g-wind__header\">\n <div class=\"c2g-wind__title-col\">\n <span class=\"c2g-wind__label\">💨 Wind</span>\n @if (data().tourName) {\n <span class=\"c2g-wind__tour\">{{ data().tourName }}</span>\n }\n </div>\n @if (peak()) {\n <div class=\"c2g-wind__peak-badge\">\n <span class=\"c2g-wind__peak-emoji\">{{ peakBeaufort().emoji }}</span>\n <div class=\"c2g-wind__peak-text\">\n <span class=\"c2g-wind__peak-speed\">{{ peak().windSpeed }}<small>km/h</small></span>\n <span class=\"c2g-wind__peak-sublabel\">Spitze</span>\n </div>\n </div>\n }\n </header>\n\n <div class=\"c2g-wind__days\">\n @for (day of enriched(); track day.date) {\n <div class=\"c2g-wind__day\">\n\n <!-- Compass rose -->\n <svg class=\"c2g-wind__compass\" viewBox=\"0 0 40 40\" aria-hidden=\"true\">\n <circle cx=\"20\" cy=\"20\" r=\"18\" class=\"c2g-wind__compass-ring\"/>\n <text class=\"c2g-wind__compass-n\" x=\"20\" y=\"7\">N</text>\n <g [style.transform-origin]=\"'20px 20px'\" [style.transform]=\"'rotate(' + day.arrowDeg + 'deg)'\">\n <polygon points=\"20,4 23,18 20,16 17,18\" [attr.fill]=\"day.bf.color\"/>\n <polygon points=\"20,36 17,22 20,24 23,22\" fill=\"rgba(255,255,255,0.18)\"/>\n </g>\n <circle cx=\"20\" cy=\"20\" r=\"2.5\" [attr.fill]=\"day.bf.color\"/>\n </svg>\n\n <!-- Date -->\n <span class=\"c2g-wind__date\">{{ formatDate(day.date) }}</span>\n\n <!-- Speed bar -->\n <div class=\"c2g-wind__bar-track\">\n <div class=\"c2g-wind__bar-fill\"\n [style.width.%]=\"day.barPct\"\n [style.background]=\"day.bf.color\">\n </div>\n </div>\n\n <!-- Speed value -->\n <span class=\"c2g-wind__speed\" [style.color]=\"day.bf.color\">\n {{ day.windSpeed }}<small>km/h</small>\n </span>\n\n <!-- Beaufort + direction -->\n <span class=\"c2g-wind__meta\">{{ day.dirLabel }} · {{ day.bf.label }}</span>\n\n </div>\n }\n </div>\n\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TotalKmData, TotalKmSparkPoint } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-total-km-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './total-km-widget.component.html',\n styleUrl: './total-km-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TotalKmWidgetComponent implements OnDestroy {\n readonly data = input.required<TotalKmData>();\n\n readonly displayKm = signal(0);\n readonly displayYearKm = signal(0);\n\n private rafId = 0;\n private rafYearId = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().totalKm;\n this.animateCount(target, this.displayKm, 'rafId');\n });\n effect(() => {\n const target = this.data().yearKm ?? 0;\n this.animateCount(target, this.displayYearKm, 'rafYearId');\n });\n }\n\n private animateCount(\n target: number,\n sig: ReturnType<typeof signal<number>>,\n rafKey: 'rafId' | 'rafYearId',\n ): void {\n cancelAnimationFrame(this[rafKey]);\n const start = performance.now();\n const duration = 1400;\n const step = (now: number) => {\n const t = Math.min((now - start) / duration, 1);\n const eased = 1 - Math.pow(1 - t, 4);\n sig.set(Math.round(eased * target));\n if (t < 1) this[rafKey] = requestAnimationFrame(step);\n };\n this[rafKey] = requestAnimationFrame(step);\n }\n\n readonly sparklinePath = computed(() => {\n const points = this.data().sparkline;\n if (!points || points.length < 2) return null;\n const W = 200, H = 48;\n const maxKm = Math.max(...points.map(p => p.km));\n const minKm = Math.min(...points.map(p => p.km));\n const range = maxKm - minKm || 1;\n const xs = points.map((_, i) => (i / (points.length - 1)) * W);\n const ys = points.map(p => H - ((p.km - minKm) / range) * (H - 8) - 2);\n\n let line = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < points.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n line += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n const area = `${line} L ${xs[xs.length - 1]} ${H} L ${xs[0]} ${H} Z`;\n return { line, area, lastX: xs[xs.length - 1], lastY: ys[ys.length - 1] };\n });\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.rafId);\n cancelAnimationFrame(this.rafYearId);\n }\n}\n","<article class=\"c2g-tkm\">\n <header class=\"c2g-tkm__header\">\n <span class=\"c2g-tkm__icon\" aria-hidden=\"true\">🗺️</span>\n <div class=\"c2g-tkm__titles\">\n <h3 class=\"c2g-tkm__title\">Gesamt-Kilometer</h3>\n @if (data().tourCount) {\n <span class=\"c2g-tkm__sub\">{{ data().tourCount }} Touren</span>\n }\n </div>\n </header>\n\n <div class=\"c2g-tkm__hero\">\n <span class=\"c2g-tkm__value\">{{ displayKm() | number:'1.0-0' }}</span>\n <span class=\"c2g-tkm__unit\">km</span>\n </div>\n\n @if (data().yearKm) {\n <div class=\"c2g-tkm__year-row\">\n <span class=\"c2g-tkm__year-label\">Dieses Jahr</span>\n <span class=\"c2g-tkm__year-value\">{{ displayYearKm() | number:'1.0-0' }} km</span>\n </div>\n }\n\n @if (sparklinePath()) {\n <div class=\"c2g-tkm__chart\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 200 48\" preserveAspectRatio=\"none\" class=\"c2g-tkm__svg\">\n <defs>\n <linearGradient id=\"tkm-area-grad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"var(--c2g-theme-primary, #ff6b35)\" stop-opacity=\"0.35\"/>\n <stop offset=\"100%\" stop-color=\"var(--c2g-theme-primary, #ff6b35)\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n <path class=\"c2g-tkm__area\" [attr.d]=\"sparklinePath()!.area\" fill=\"url(#tkm-area-grad)\" />\n <path class=\"c2g-tkm__line\" [attr.d]=\"sparklinePath()!.line\" />\n <circle\n class=\"c2g-tkm__dot\"\n [attr.cx]=\"sparklinePath()!.lastX\"\n [attr.cy]=\"sparklinePath()!.lastY\"\n r=\"3\"\n />\n </svg>\n </div>\n }\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TourTypeSplitData, TourType } from './dashboard-widgets.models';\n\ninterface Segment {\n type: TourType;\n label: string;\n emoji: string;\n color: string;\n count: number;\n km: number;\n pct: number;\n offset: number;\n dash: number;\n}\n\nconst TYPE_CONFIG: Record<TourType, { label: string; emoji: string; color: string }> = {\n hiking: { label: 'Wandern', emoji: '🥾', color: '#ff6b35' },\n cycling: { label: 'Radfahren', emoji: '🚵', color: '#22c55e' },\n paddling: { label: 'Paddeln', emoji: '🛶', color: '#3b82f6' },\n climbing: { label: 'Klettern', emoji: '🧗', color: '#a855f7' },\n skiing: { label: 'Skifahren', emoji: '⛷️', color: '#06b6d4' },\n other: { label: 'Sonstige', emoji: '🏕️', color: '#94a3b8' },\n};\n\nconst CIRCUMFERENCE = 2 * Math.PI * 52; // r=52\n\n@Component({\n selector: 'c2g-tour-type-split-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tour-type-split-widget.component.html',\n styleUrl: './tour-type-split-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TourTypeSplitWidgetComponent {\n readonly data = input.required<TourTypeSplitData>();\n\n readonly segments = computed((): Segment[] => {\n const entries = this.data().entries.filter(e => e.count > 0);\n const total = entries.reduce((s, e) => s + e.count, 0) || 1;\n const GAP = CIRCUMFERENCE * 0.012;\n let offset = 0;\n return entries.map(e => {\n const pct = e.count / total;\n const dash = Math.max(0, pct * CIRCUMFERENCE - GAP);\n const cfg = TYPE_CONFIG[e.type];\n const seg: Segment = {\n type: e.type,\n label: cfg.label,\n emoji: cfg.emoji,\n color: cfg.color,\n count: e.count,\n km: e.km ?? 0,\n pct,\n offset,\n dash,\n };\n offset += pct * CIRCUMFERENCE;\n return seg;\n });\n });\n\n readonly dominantSegment = computed(() => {\n const segs = this.segments();\n return segs.length > 0 ? segs.reduce((a, b) => (a.count > b.count ? a : b)) : null;\n });\n\n readonly circumference = CIRCUMFERENCE;\n\n trackByType(_: number, seg: Segment): TourType {\n return seg.type;\n }\n}\n","<article class=\"c2g-tts\">\n <header class=\"c2g-tts__header\">\n <span class=\"c2g-tts__icon\" aria-hidden=\"true\">🧭</span>\n <div class=\"c2g-tts__titles\">\n <h3 class=\"c2g-tts__title\">Tour-Typen</h3>\n <span class=\"c2g-tts__sub\">{{ data().totalTours }} Touren gesamt</span>\n </div>\n </header>\n\n <div class=\"c2g-tts__body\">\n <div class=\"c2g-tts__donut-wrap\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 128 128\" class=\"c2g-tts__donut\">\n <circle cx=\"64\" cy=\"64\" r=\"52\" class=\"c2g-tts__track\"/>\n @for (seg of segments(); track trackByType($index, seg)) {\n <circle\n cx=\"64\" cy=\"64\" r=\"52\"\n class=\"c2g-tts__arc\"\n [style.stroke]=\"seg.color\"\n [style.stroke-dasharray]=\"seg.dash + ' ' + circumference\"\n [style.stroke-dashoffset]=\"-seg.offset\"\n />\n }\n </svg>\n @if (dominantSegment(); as dom) {\n <div class=\"c2g-tts__center\">\n <span class=\"c2g-tts__center-emoji\">{{ dom.emoji }}</span>\n <span class=\"c2g-tts__center-label\">{{ dom.label }}</span>\n </div>\n }\n </div>\n\n <ul class=\"c2g-tts__legend\" role=\"list\">\n @for (seg of segments(); track trackByType($index, seg)) {\n <li class=\"c2g-tts__legend-item\">\n <span class=\"c2g-tts__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-tts__legend-emoji\">{{ seg.emoji }}</span>\n <span class=\"c2g-tts__legend-name\">{{ seg.label }}</span>\n <span class=\"c2g-tts__legend-count\">{{ seg.count }}</span>\n <span class=\"c2g-tts__legend-pct\">{{ (seg.pct * 100) | number:'1.0-0' }}%</span>\n </li>\n }\n </ul>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TourRhythmData, TourRhythmWeek } from './dashboard-widgets.models';\n\nconst MONTH_LABELS = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\n\ninterface WeekCell extends TourRhythmWeek {\n col: number;\n monthLabel: string | null;\n}\n\n@Component({\n selector: 'c2g-tour-rhythm-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tour-rhythm-widget.component.html',\n styleUrl: './tour-rhythm-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TourRhythmWidgetComponent {\n readonly data = input.required<TourRhythmData>();\n\n readonly cells = computed((): WeekCell[] => {\n const weeks = this.data().weeks;\n let prevMonth = -1;\n return weeks.map((w, i) => {\n const d = new Date(w.weekStart);\n const month = d.getMonth();\n const monthLabel = month !== prevMonth ? MONTH_LABELS[month] : null;\n prevMonth = month;\n return { ...w, col: i, monthLabel };\n });\n });\n\n readonly totalCols = computed(() => this.data().weeks.length);\n\n readonly levelColors = ['#1e293b', '#166534', '#16a34a', '#4ade80', '#86efac'];\n\n levelColor(level: 0 | 1 | 2 | 3 | 4): string {\n return this.levelColors[level];\n }\n\n trackByCol(_: number, cell: WeekCell): number {\n return cell.col;\n }\n}\n","<article class=\"c2g-trh\">\n <header class=\"c2g-trh__header\">\n <span class=\"c2g-trh__icon\" aria-hidden=\"true\">📅</span>\n <div class=\"c2g-trh__titles\">\n <h3 class=\"c2g-trh__title\">Tour-Rhythmus</h3>\n <span class=\"c2g-trh__sub\">Letzte 52 Wochen</span>\n </div>\n <div class=\"c2g-trh__stats\">\n @if (data().currentStreakWeeks) {\n <span class=\"c2g-trh__streak\">🔥 {{ data().currentStreakWeeks }} Wochen-Streak</span>\n }\n </div>\n </header>\n\n <div class=\"c2g-trh__grid-wrap\" aria-label=\"Aktivitäts-Heatmap der letzten 52 Wochen\" role=\"img\">\n <div class=\"c2g-trh__month-labels\" aria-hidden=\"true\">\n @for (cell of cells(); track cell.col) {\n @if (cell.monthLabel) {\n <span class=\"c2g-trh__month-label\" [style.grid-column]=\"cell.col + 1\">\n {{ cell.monthLabel }}\n </span>\n }\n }\n </div>\n <div class=\"c2g-trh__grid\">\n @for (cell of cells(); track trackByCol($index, cell)) {\n <div\n class=\"c2g-trh__cell c2g-trh__cell--level-{{ cell.level }}\"\n [style.background]=\"levelColor(cell.level)\"\n [title]=\"cell.tourName ? cell.tourName + (cell.km ? ' · ' + cell.km + ' km' : '') : cell.weekStart\"\n ></div>\n }\n </div>\n </div>\n\n <div class=\"c2g-trh__legend\" aria-hidden=\"true\">\n <span class=\"c2g-trh__legend-label\">Weniger</span>\n @for (l of [0, 1, 2, 3, 4]; track l) {\n <div class=\"c2g-trh__legend-cell\" [style.background]=\"levelColors[l]\"></div>\n }\n <span class=\"c2g-trh__legend-label\">Mehr</span>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { SeasonDnaData, Season } from './dashboard-widgets.models';\n\ninterface SeasonSegment {\n season: Season;\n label: string;\n emoji: string;\n color: string;\n tourCount: number;\n km: number;\n nights: number;\n pct: number;\n startAngle: number;\n endAngle: number;\n pathD: string;\n labelX: number;\n labelY: number;\n}\n\nconst SEASON_CONFIG: Record<Season, { label: string; emoji: string; color: string }> = {\n spring: { label: 'Frühling', emoji: '🌸', color: '#84cc16' },\n summer: { label: 'Sommer', emoji: '☀️', color: '#f59e0b' },\n autumn: { label: 'Herbst', emoji: '🍂', color: '#ef4444' },\n winter: { label: 'Winter', emoji: '❄️', color: '#3b82f6' },\n};\n\nconst CX = 64, CY = 64, R_OUTER = 56, R_INNER = 28;\n\nfunction polarToXY(cx: number, cy: number, r: number, angleDeg: number): [number, number] {\n const rad = ((angleDeg - 90) * Math.PI) / 180;\n return [cx + r * Math.cos(rad), cy + r * Math.sin(rad)];\n}\n\nfunction donutSegmentPath(cx: number, cy: number, ro: number, ri: number, start: number, end: number): string {\n const [ox1, oy1] = polarToXY(cx, cy, ro, start);\n const [ox2, oy2] = polarToXY(cx, cy, ro, end);\n const [ix1, iy1] = polarToXY(cx, cy, ri, end);\n const [ix2, iy2] = polarToXY(cx, cy, ri, start);\n const large = end - start > 180 ? 1 : 0;\n return [\n `M ${ox1} ${oy1}`,\n `A ${ro} ${ro} 0 ${large} 1 ${ox2} ${oy2}`,\n `L ${ix1} ${iy1}`,\n `A ${ri} ${ri} 0 ${large} 0 ${ix2} ${iy2}`,\n 'Z',\n ].join(' ');\n}\n\nconst SEASON_ORDER: Season[] = ['spring', 'summer', 'autumn', 'winter'];\n\n@Component({\n selector: 'c2g-season-dna-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './season-dna-widget.component.html',\n styleUrl: './season-dna-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeasonDnaWidgetComponent {\n readonly data = input.required<SeasonDnaData>();\n\n readonly segments = computed((): SeasonSegment[] => {\n const entries = this.data().entries;\n const total = entries.reduce((s, e) => s + e.tourCount, 0) || 1;\n const GAP = 3;\n let angle = 0;\n return SEASON_ORDER.map(season => {\n const entry = entries.find(e => e.season === season);\n const count = entry?.tourCount ?? 0;\n const pct = count / total;\n const span = Math.max(0, pct * 360 - GAP);\n const start = angle;\n const end = angle + span;\n angle += pct * 360;\n const cfg = SEASON_CONFIG[season];\n const mid = (start + end) / 2;\n const [lx, ly] = polarToXY(CX, CY, (R_OUTER + R_INNER) / 2, mid);\n return {\n season,\n label: cfg.label,\n emoji: cfg.emoji,\n color: cfg.color,\n tourCount: count,\n km: entry?.km ?? 0,\n nights: entry?.nights ?? 0,\n pct,\n startAngle: start,\n endAngle: end,\n pathD: span > 2 ? donutSegmentPath(CX, CY, R_OUTER, R_INNER, start, end) : '',\n labelX: lx,\n labelY: ly,\n };\n }).filter(s => s.pct > 0);\n });\n\n readonly dominantSeason = computed(() => {\n const segs = this.segments();\n if (segs.length === 0) return null;\n const dom = segs.reduce((a, b) => (a.tourCount > b.tourCount ? a : b));\n return SEASON_CONFIG[dom.season];\n });\n\n trackBySeason(_: number, seg: SeasonSegment): Season {\n return seg.season;\n }\n}\n","<article class=\"c2g-sdn\">\n <header class=\"c2g-sdn__header\">\n <span class=\"c2g-sdn__icon\" aria-hidden=\"true\">🌍</span>\n <div class=\"c2g-sdn__titles\">\n <h3 class=\"c2g-sdn__title\">Saison-DNA</h3>\n <span class=\"c2g-sdn__sub\">{{ data().totalTours }} Touren analysiert</span>\n </div>\n </header>\n\n <div class=\"c2g-sdn__body\">\n <div class=\"c2g-sdn__chart-wrap\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 128 128\" class=\"c2g-sdn__svg\">\n @for (seg of segments(); track trackBySeason($index, seg)) {\n @if (seg.pathD) {\n <path\n class=\"c2g-sdn__segment\"\n [attr.d]=\"seg.pathD\"\n [style.fill]=\"seg.color\"\n />\n }\n }\n </svg>\n @if (dominantSeason(); as dom) {\n <div class=\"c2g-sdn__center\">\n <span class=\"c2g-sdn__center-emoji\">{{ dom.emoji }}</span>\n <span class=\"c2g-sdn__center-label\">{{ dom.label }}</span>\n </div>\n }\n </div>\n\n <ul class=\"c2g-sdn__legend\" role=\"list\">\n @for (seg of segments(); track trackBySeason($index, seg)) {\n <li class=\"c2g-sdn__legend-item\">\n <span class=\"c2g-sdn__legend-dot\" [style.background]=\"seg.color\"></span>\n <span class=\"c2g-sdn__legend-emoji\">{{ seg.emoji }}</span>\n <div class=\"c2g-sdn__legend-text\">\n <span class=\"c2g-sdn__legend-name\">{{ seg.label }}</span>\n <span class=\"c2g-sdn__legend-detail\">\n {{ seg.tourCount }} Tour{{ seg.tourCount !== 1 ? 'en' : '' }}\n @if (seg.km) { · {{ seg.km | number:'1.0-0' }} km }\n </span>\n </div>\n <span class=\"c2g-sdn__legend-pct\">{{ (seg.pct * 100) | number:'1.0-0' }}%</span>\n </li>\n }\n </ul>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { WeightHistoryData, WeightHistoryPoint } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-weight-history-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './weight-history-widget.component.html',\n styleUrl: './weight-history-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeightHistoryWidgetComponent {\n readonly data = input.required<WeightHistoryData>();\n\n readonly points = computed(() => this.data().points.slice(-12));\n\n readonly sparklinePath = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return null;\n const W = 200, H = 48;\n const weights = pts.map(p => p.weightG);\n const maxW = Math.max(...weights);\n const minW = Math.min(...weights);\n const range = maxW - minW || 1;\n const xs = pts.map((_, i) => (i / (pts.length - 1)) * W);\n const ys = pts.map(p => H - ((p.weightG - minW) / range) * (H - 8) - 2);\n let line = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < pts.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n line += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n const area = `${line} L ${xs[xs.length - 1]} ${H} L ${xs[0]} ${H} Z`;\n const improving = pts[pts.length - 1].weightG <= pts[0].weightG;\n return { line, area, lastX: xs[xs.length - 1], lastY: ys[ys.length - 1], improving };\n });\n\n readonly trend = computed(() => {\n const pts = this.points();\n if (pts.length < 2) return null;\n const first = pts[0].weightG;\n const last = pts[pts.length - 1].weightG;\n const diffG = last - first;\n const pct = Math.round((diffG / first) * 100);\n return { diffG, pct, improving: diffG < 0 };\n });\n\n formatKg(g: number): string {\n return (g / 1000).toFixed(2);\n }\n\n formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString('de-DE', { month: 'short', year: '2-digit' });\n }\n}\n","<article class=\"c2g-wh\">\n <header class=\"c2g-wh__header\">\n <span class=\"c2g-wh__icon\">⚖️</span>\n <div class=\"c2g-wh__titles\">\n <h3 class=\"c2g-wh__title\">Gewichts-Historie</h3>\n @if (data().points.length) {\n <span class=\"c2g-wh__sub\">{{ data().points.length }} Touren</span>\n }\n </div>\n @if (trend(); as t) {\n <span class=\"c2g-wh__trend\" [class.c2g-wh__trend--good]=\"t.improving\" [class.c2g-wh__trend--bad]=\"!t.improving\">\n {{ t.improving ? '↓' : '↑' }} {{ t.pct | number:'1.0-0' }}%\n </span>\n }\n </header>\n\n <div class=\"c2g-wh__hero\">\n @if (data().latestG) {\n <span class=\"c2g-wh__value\">{{ formatKg(data().latestG!) }}</span>\n <span class=\"c2g-wh__unit\">kg</span>\n <span class=\"c2g-wh__label\">aktuell</span>\n }\n @if (data().bestG) {\n <div class=\"c2g-wh__best\">\n <span class=\"c2g-wh__best-icon\">🏆</span>\n <span class=\"c2g-wh__best-val\">{{ formatKg(data().bestG!) }} kg</span>\n <span class=\"c2g-wh__best-label\">Rekord</span>\n </div>\n }\n </div>\n\n @if (sparklinePath(); as sp) {\n <div class=\"c2g-wh__chart\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 200 48\" preserveAspectRatio=\"none\" class=\"c2g-wh__svg\">\n <defs>\n <linearGradient id=\"wh-grad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" [attr.stop-color]=\"sp.improving ? '#22c55e' : '#f97316'\" stop-opacity=\"0.3\"/>\n <stop offset=\"100%\" [attr.stop-color]=\"sp.improving ? '#22c55e' : '#f97316'\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n <path [attr.d]=\"sp.area\" fill=\"url(#wh-grad)\"/>\n <path class=\"c2g-wh__line\" [attr.d]=\"sp.line\"\n [style.stroke]=\"sp.improving ? '#22c55e' : '#f97316'\"/>\n <circle class=\"c2g-wh__dot\" [attr.cx]=\"sp.lastX\" [attr.cy]=\"sp.lastY\" r=\"3\"\n [style.fill]=\"sp.improving ? '#22c55e' : '#f97316'\"/>\n </svg>\n </div>\n }\n\n <div class=\"c2g-wh__dates\">\n @if (points().length >= 2) {\n <span>{{ formatDate(points()[0].date) }}</span>\n <span>{{ formatDate(points()[points().length - 1].date) }}</span>\n }\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GearValueData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-gear-value-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './gear-value-widget.component.html',\n styleUrl: './gear-value-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GearValueWidgetComponent {\n readonly data = input.required<GearValueData>();\n\n readonly topCategories = computed(() =>\n [...(this.data().categories ?? [])]\n .sort((a, b) => b.value - a.value)\n .slice(0, 5)\n );\n\n readonly maxCatValue = computed(() =>\n Math.max(...(this.data().categories ?? []).map(c => c.value), 1)\n );\n\n readonly formattedTotal = computed(() => {\n const v = this.data().totalValue;\n if (v >= 1000) return `${(v / 1000).toFixed(1)}k`;\n return v.toFixed(0);\n });\n\n formatValue(v: number): string {\n if (v >= 1000) return `${(v / 1000).toFixed(1)}k`;\n return v.toFixed(0);\n }\n}\n","<article class=\"c2g-gv\">\n <header class=\"c2g-gv__header\">\n <span class=\"c2g-gv__icon\">💰</span>\n <div class=\"c2g-gv__titles\">\n <h3 class=\"c2g-gv__title\">Gear-Wert</h3>\n <span class=\"c2g-gv__sub\">{{ data().itemCount }} Items</span>\n </div>\n </header>\n\n <div class=\"c2g-gv__hero\">\n <span class=\"c2g-gv__value\">{{ formattedTotal() }}</span>\n <span class=\"c2g-gv__currency\">{{ data().currency }}</span>\n </div>\n\n @if (topCategories().length) {\n <ul class=\"c2g-gv__cats\" role=\"list\">\n @for (cat of topCategories(); track cat.label) {\n <li class=\"c2g-gv__cat\">\n <div class=\"c2g-gv__cat-header\">\n <span class=\"c2g-gv__cat-name\">{{ cat.label }}</span>\n <span class=\"c2g-gv__cat-value\">{{ formatValue(cat.value) }} {{ data().currency }}</span>\n </div>\n <div class=\"c2g-gv__bar-track\">\n <div class=\"c2g-gv__bar-fill\"\n [style.width.%]=\"(cat.value / maxCatValue()) * 100\">\n </div>\n </div>\n </li>\n }\n </ul>\n }\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { WeightBreakdownData, WeightBreakdownEntry } from './dashboard-widgets.models';\n\nconst DEFAULT_COLORS = [\n '#ff6b35', '#22c55e', '#3b82f6', '#f59e0b', '#a855f7',\n '#ec4899', '#06b6d4', '#84cc16', '#f97316', '#6b7280',\n];\n\ninterface EnrichedEntry extends WeightBreakdownEntry {\n pct: number;\n color: string;\n barOffset: number;\n}\n\n@Component({\n selector: 'c2g-weight-breakdown-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './weight-breakdown-widget.component.html',\n styleUrl: './weight-breakdown-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeightBreakdownWidgetComponent {\n readonly data = input.required<WeightBreakdownData>();\n\n readonly entries = computed((): EnrichedEntry[] => {\n const total = this.data().totalG || 1;\n let offset = 0;\n return [...this.data().entries]\n .sort((a, b) => b.weightG - a.weightG)\n .map((e, i) => {\n const pct = (e.weightG / total) * 100;\n const entry: EnrichedEntry = {\n ...e,\n pct,\n color: e.color ?? DEFAULT_COLORS[i % DEFAULT_COLORS.length],\n barOffset: offset,\n };\n offset += pct;\n return entry;\n });\n });\n\n readonly totalKg = computed(() => (this.data().totalG / 1000).toFixed(2));\n\n // SVG stacked horizontal bar — single rect per entry using stroke-dasharray trick\n readonly circumference = 100; // we work in percentage units\n\n formatKg(g: number): string {\n if (g >= 1000) return `${(g / 1000).toFixed(2)} kg`;\n return `${g} g`;\n }\n}\n","<article class=\"c2g-wb\">\n <header class=\"c2g-wb__header\">\n <span class=\"c2g-wb__icon\">🏋️</span>\n <div class=\"c2g-wb__titles\">\n <h3 class=\"c2g-wb__title\">Gewichts-Breakdown</h3>\n <span class=\"c2g-wb__sub\">{{ totalKg() }} kg gesamt</span>\n </div>\n </header>\n\n <!-- Stacked horizontal bar -->\n <div class=\"c2g-wb__stacked\" aria-hidden=\"true\">\n @for (e of entries(); track e.category) {\n <div\n class=\"c2g-wb__stack-seg\"\n [style.width.%]=\"e.pct\"\n [style.background]=\"e.color\"\n [title]=\"e.category + ': ' + (e.pct | number:'1.0-1') + '%'\"\n ></div>\n }\n </div>\n\n <!-- Legend rows -->\n <ul class=\"c2g-wb__legend\" role=\"list\">\n @for (e of entries(); track e.category) {\n <li class=\"c2g-wb__row\">\n <span class=\"c2g-wb__dot\" [style.background]=\"e.color\"></span>\n <span class=\"c2g-wb__cat\">{{ e.category }}</span>\n <div class=\"c2g-wb__bar-track\">\n <div class=\"c2g-wb__bar-fill\" [style.width.%]=\"e.pct\" [style.background]=\"e.color\"></div>\n </div>\n <span class=\"c2g-wb__pct\">{{ e.pct | number:'1.0-1' }}%</span>\n <span class=\"c2g-wb__weight\">{{ formatKg(e.weightG) }}</span>\n </li>\n }\n </ul>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { AdventureScoreData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-adventure-score-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './adventure-score-widget.component.html',\n styleUrl: './adventure-score-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdventureScoreWidgetComponent implements OnDestroy {\n readonly data = input.required<AdventureScoreData>();\n\n readonly displayScore = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.data().score;\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 1200, 1);\n const e = 1 - Math.pow(1 - t, 4);\n this.displayScore.set(Math.round(e * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n // Circular progress arc (0–100)\n readonly arcPath = computed(() => {\n const pct = Math.min(this.data().score / 100, 1);\n const r = 52, cx = 60, cy = 60;\n const angle = pct * 360;\n if (angle >= 359.9) {\n return `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.01} ${cy - r}`;\n }\n const rad = ((angle - 90) * Math.PI) / 180;\n const x = cx + r * Math.cos(rad);\n const y = cy + r * Math.sin(rad);\n const large = angle > 180 ? 1 : 0;\n return `M ${cx} ${cy - r} A ${r} ${r} 0 ${large} 1 ${x} ${y}`;\n });\n\n readonly trackPath = `M 60 8 A 52 52 0 1 1 59.99 8`;\n\n readonly levelColor = computed(() => {\n const l = this.data().level;\n if (l >= 80) return '#f59e0b';\n if (l >= 60) return '#ff6b35';\n if (l >= 40) return '#22c55e';\n if (l >= 20) return '#3b82f6';\n return '#94a3b8';\n });\n\n readonly sparklinePath = computed(() => {\n const pts = this.data().sparkline;\n if (!pts || pts.length < 2) return null;\n const W = 120, H = 28;\n const maxS = Math.max(...pts.map(p => p.score));\n const minS = Math.min(...pts.map(p => p.score));\n const range = maxS - minS || 1;\n const xs = pts.map((_, i) => (i / (pts.length - 1)) * W);\n const ys = pts.map(p => H - ((p.score - minS) / range) * (H - 4) - 2);\n let d = `M ${xs[0]} ${ys[0]}`;\n for (let i = 1; i < pts.length; i++) {\n const cpx = (xs[i - 1] + xs[i]) / 2;\n d += ` C ${cpx} ${ys[i - 1]}, ${cpx} ${ys[i]}, ${xs[i]} ${ys[i]}`;\n }\n return d;\n });\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-as\">\n <header class=\"c2g-as__header\">\n <span class=\"c2g-as__icon\">🏆</span>\n <div class=\"c2g-as__titles\">\n <h3 class=\"c2g-as__title\">Abenteuer-Score</h3>\n <span class=\"c2g-as__level-label\">{{ data().levelLabel }}</span>\n </div>\n @if (sparklinePath(); as sp) {\n <svg class=\"c2g-as__sparkline\" viewBox=\"0 0 120 28\" aria-hidden=\"true\">\n <path [attr.d]=\"sp\" [style.stroke]=\"levelColor()\" class=\"c2g-as__spark-line\"/>\n </svg>\n }\n </header>\n\n <div class=\"c2g-as__body\">\n <!-- Circular progress -->\n <div class=\"c2g-as__circle-wrap\" aria-hidden=\"true\">\n <svg class=\"c2g-as__circle\" viewBox=\"0 0 120 120\">\n <path class=\"c2g-as__track\" [attr.d]=\"trackPath\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n <path class=\"c2g-as__arc\" [attr.d]=\"arcPath()\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"\n [style.stroke]=\"levelColor()\"/>\n </svg>\n <div class=\"c2g-as__center\">\n <span class=\"c2g-as__score\" [style.color]=\"levelColor()\">{{ displayScore() }}</span>\n <span class=\"c2g-as__score-max\">/100</span>\n </div>\n </div>\n\n <!-- Stats -->\n <div class=\"c2g-as__stats\">\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalTours }}</span>\n <span class=\"c2g-as__stat-label\">Touren</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalKm | number:'1.0-0' }}</span>\n <span class=\"c2g-as__stat-label\">km</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().totalNights }}</span>\n <span class=\"c2g-as__stat-label\">Nächte</span>\n </div>\n <div class=\"c2g-as__stat\">\n <span class=\"c2g-as__stat-val\">{{ data().uniqueTypes }}</span>\n <span class=\"c2g-as__stat-label\">Typen</span>\n </div>\n </div>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { TopGearData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-top-gear-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './top-gear-widget.component.html',\n styleUrl: './top-gear-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopGearWidgetComponent {\n readonly data = input.required<TopGearData>();\n\n readonly top = computed(() => this.data().entries.slice(0, 5));\n\n readonly maxUsage = computed(() =>\n Math.max(...this.data().entries.map(e => e.usageCount), 1)\n );\n\n usagePct(count: number): number {\n return Math.round((count / this.maxUsage()) * 100);\n }\n\n medal(index: number): string {\n return ['🥇', '🥈', '🥉', '', ''][index] ?? '';\n }\n}\n","<article class=\"c2g-tg\">\n <header class=\"c2g-tg__header\">\n <span class=\"c2g-tg__icon\">🎒</span>\n <h3 class=\"c2g-tg__title\">Top-Gear</h3>\n </header>\n\n <ol class=\"c2g-tg__list\" role=\"list\">\n @for (entry of top(); track entry.name; let i = $index) {\n <li class=\"c2g-tg__item\" [class.c2g-tg__item--top3]=\"i < 3\">\n <span class=\"c2g-tg__rank\">\n @if (medal(i)) { {{ medal(i) }} } @else { {{ i + 1 }} }\n </span>\n <div class=\"c2g-tg__info\">\n <span class=\"c2g-tg__name\">{{ entry.name }}</span>\n @if (entry.category) {\n <span class=\"c2g-tg__cat\">{{ entry.category }}</span>\n }\n </div>\n <div class=\"c2g-tg__bar-track\">\n <div class=\"c2g-tg__bar-fill\" [style.width.%]=\"usagePct(entry.usageCount)\"></div>\n </div>\n <span class=\"c2g-tg__count\">{{ entry.usageCount }}×</span>\n </li>\n }\n </ol>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GroupActivityData, GroupActivityEntry } from './dashboard-widgets.models';\n\ninterface RankedEntry extends GroupActivityEntry {\n rank: number;\n pct: number;\n}\n\n@Component({\n selector: 'c2g-group-activity-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './group-activity-widget.component.html',\n styleUrl: './group-activity-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupActivityWidgetComponent {\n readonly data = input.required<GroupActivityData>();\n\n readonly ranked = computed((): RankedEntry[] => {\n const sorted = [...this.data().members]\n .sort((a, b) => b.completedItems - a.completedItems);\n const maxItems = Math.max(...sorted.map(m => m.completedItems), 1);\n return sorted.map((m, i) => ({\n ...m,\n rank: i + 1,\n pct: Math.round((m.completedItems / maxItems) * 100),\n }));\n });\n\n medal(rank: number): string {\n if (rank === 1) return '🥇';\n if (rank === 2) return '🥈';\n if (rank === 3) return '🥉';\n return '';\n }\n\n completionPct(m: GroupActivityEntry): number {\n if (!m.totalItems) return 0;\n return Math.round((m.completedItems / m.totalItems) * 100);\n }\n}\n","<article class=\"c2g-ga\">\n <header class=\"c2g-ga__header\">\n <span class=\"c2g-ga__icon\">🏅</span>\n <div class=\"c2g-ga__titles\">\n <h3 class=\"c2g-ga__title\">Aktivste Mitglieder</h3>\n @if (data().groupName) {\n <span class=\"c2g-ga__sub\">{{ data().groupName }}</span>\n }\n </div>\n </header>\n\n <ol class=\"c2g-ga__list\" role=\"list\">\n @for (m of ranked(); track m.name) {\n <li class=\"c2g-ga__item\" [class.c2g-ga__item--self]=\"m.isSelf\">\n <!-- Avatar -->\n <div class=\"c2g-ga__avatar\">\n @if (m.avatarUrl) {\n <img [src]=\"m.avatarUrl\" [alt]=\"m.name\" class=\"c2g-ga__avatar-img\"/>\n } @else {\n <span class=\"c2g-ga__initials\">{{ m.initials }}</span>\n }\n @if (medal(m.rank)) {\n <span class=\"c2g-ga__medal\">{{ medal(m.rank) }}</span>\n }\n </div>\n\n <div class=\"c2g-ga__info\">\n <span class=\"c2g-ga__name\">{{ m.name }}{{ m.isSelf ? ' (du)' : '' }}</span>\n <div class=\"c2g-ga__bar-track\">\n <div class=\"c2g-ga__bar-fill\" [style.width.%]=\"m.pct\"></div>\n </div>\n </div>\n\n <div class=\"c2g-ga__nums\">\n <span class=\"c2g-ga__completed\">{{ m.completedItems }}</span>\n @if (m.totalItems) {\n <span class=\"c2g-ga__total\">/ {{ m.totalItems }}</span>\n }\n </div>\n </li>\n }\n </ol>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { GearSharingData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-gear-sharing-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './gear-sharing-widget.component.html',\n styleUrl: './gear-sharing-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GearSharingWidgetComponent implements OnDestroy {\n readonly data = input.required<GearSharingData>();\n\n readonly displayPct = signal(0);\n private raf = 0;\n\n constructor() {\n effect(() => {\n const target = this.sharingPct();\n cancelAnimationFrame(this.raf);\n const start = performance.now();\n const tick = (now: number) => {\n const t = Math.min((now - start) / 1000, 1);\n const e = 1 - Math.pow(1 - t, 3);\n this.displayPct.set(Math.round(e * target));\n if (t < 1) this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n });\n }\n\n readonly sharingPct = computed(() => {\n const d = this.data();\n if (!d.totalItems) return 0;\n return Math.round((d.sharedItems / d.totalItems) * 100);\n });\n\n readonly tier = computed((): 'high' | 'medium' | 'low' => {\n const p = this.sharingPct();\n if (p >= 40) return 'high';\n if (p >= 20) return 'medium';\n return 'low';\n });\n\n readonly arcPath = computed(() => {\n const pct = Math.min(this.sharingPct() / 100, 1);\n const r = 44, cx = 52, cy = 52;\n if (pct >= 0.999) return `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.01} ${cy - r}`;\n const angle = pct * 360;\n const rad = ((angle - 90) * Math.PI) / 180;\n const x = cx + r * Math.cos(rad);\n const y = cy + r * Math.sin(rad);\n const large = angle > 180 ? 1 : 0;\n return `M ${cx} ${cy - r} A ${r} ${r} 0 ${large} 1 ${x} ${y}`;\n });\n\n ngOnDestroy() { cancelAnimationFrame(this.raf); }\n}\n","<article class=\"c2g-gs\" [class]=\"'c2g-gs--' + tier()\">\n <header class=\"c2g-gs__header\">\n <span class=\"c2g-gs__icon\">🤝</span>\n <div class=\"c2g-gs__titles\">\n <h3 class=\"c2g-gs__title\">Gear-Sharing</h3>\n <span class=\"c2g-gs__sub\">{{ data().memberCount }} Mitglieder</span>\n </div>\n </header>\n\n <div class=\"c2g-gs__body\">\n <div class=\"c2g-gs__circle-wrap\" aria-hidden=\"true\">\n <svg class=\"c2g-gs__circle\" viewBox=\"0 0 104 104\">\n <circle cx=\"52\" cy=\"52\" r=\"44\" class=\"c2g-gs__track\" fill=\"none\" stroke-width=\"10\"/>\n <path class=\"c2g-gs__arc\" [attr.d]=\"arcPath()\" fill=\"none\" stroke-width=\"10\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"c2g-gs__center\">\n <span class=\"c2g-gs__pct\">{{ displayPct() }}%</span>\n <span class=\"c2g-gs__pct-label\">geteilt</span>\n </div>\n </div>\n\n <div class=\"c2g-gs__stats\">\n <div class=\"c2g-gs__stat\">\n <span class=\"c2g-gs__stat-val\">{{ data().sharedItems }}</span>\n <span class=\"c2g-gs__stat-label\">geteilt</span>\n </div>\n <div class=\"c2g-gs__stat\">\n <span class=\"c2g-gs__stat-val\">{{ data().totalItems - data().sharedItems }}</span>\n <span class=\"c2g-gs__stat-label\">eigene</span>\n </div>\n @if (data().savedWeightPerPersonG) {\n <div class=\"c2g-gs__stat c2g-gs__stat--highlight\">\n <span class=\"c2g-gs__stat-val\">{{ (data().savedWeightPerPersonG! / 1000) | number:'1.1-1' }} kg</span>\n <span class=\"c2g-gs__stat-label\">gespart/Person</span>\n </div>\n }\n </div>\n </div>\n</article>\n","import {\n ChangeDetectionStrategy, Component, computed, input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport type { AdventureRadiusData } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-adventure-radius-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './adventure-radius-widget.component.html',\n styleUrl: './adventure-radius-widget.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdventureRadiusWidgetComponent {\n readonly data = input.required<AdventureRadiusData>();\n\n readonly buckets = computed(() => this.data().buckets ?? []);\n\n readonly maxBucketCount = computed(() =>\n Math.max(...this.buckets().map(b => b.count), 1)\n );\n\n bucketPct(count: number): number {\n return Math.round((count / this.maxBucketCount()) * 100);\n }\n\n readonly radiusTier = computed((): 'local' | 'regional' | 'national' | 'international' => {\n const max = this.data().maxRadiusKm;\n if (max >= 1000) return 'international';\n if (max >= 300) return 'national';\n if (max >= 100) return 'regional';\n return 'local';\n });\n\n readonly tierEmoji = computed(() => {\n switch (this.radiusTier()) {\n case 'international': return '🌍';\n case 'national': return '🗺️';\n case 'regional': return '🏔️';\n default: return '🏡';\n }\n });\n\n readonly tierLabel = computed(() => {\n switch (this.radiusTier()) {\n case 'international': return 'Weltenbummler';\n case 'national': return 'Deutschlandreisender';\n case 'regional': return 'Regionalentdecker';\n default: return 'Heimatverbunden';\n }\n });\n}\n","<article class=\"c2g-ar\">\n <header class=\"c2g-ar__header\">\n <span class=\"c2g-ar__icon\">{{ tierEmoji() }}</span>\n <div class=\"c2g-ar__titles\">\n <h3 class=\"c2g-ar__title\">Abenteuer-Radius</h3>\n @if (data().homeLabel) {\n <span class=\"c2g-ar__sub\">ab {{ data().homeLabel }}</span>\n }\n </div>\n <span class=\"c2g-ar__tier-badge c2g-ar__tier-badge--{{ radiusTier() }}\">\n {{ tierLabel() }}\n </span>\n </header>\n\n <div class=\"c2g-ar__hero\">\n <div class=\"c2g-ar__stat\">\n <span class=\"c2g-ar__val\">{{ data().avgRadiusKm | number:'1.0-0' }}</span>\n <span class=\"c2g-ar__unit\">km</span>\n <span class=\"c2g-ar__label\">Ø Radius</span>\n </div>\n <div class=\"c2g-ar__divider\"></div>\n <div class=\"c2g-ar__stat\">\n <span class=\"c2g-ar__val\">{{ data().maxRadiusKm | number:'1.0-0' }}</span>\n <span class=\"c2g-ar__unit\">km</span>\n <span class=\"c2g-ar__label\">Maximum</span>\n </div>\n </div>\n\n @if (data().maxTourName) {\n <div class=\"c2g-ar__max-tour\">\n <span class=\"c2g-ar__max-icon\">📍</span>\n <span class=\"c2g-ar__max-name\">{{ data().maxTourName }}</span>\n </div>\n }\n\n @if (buckets().length) {\n <div class=\"c2g-ar__buckets\">\n @for (b of buckets(); track b.labelKm) {\n <div class=\"c2g-ar__bucket\">\n <div class=\"c2g-ar__bucket-bar-wrap\">\n <div class=\"c2g-ar__bucket-bar\" [style.height.%]=\"bucketPct(b.count)\"></div>\n </div>\n <span class=\"c2g-ar__bucket-label\">{{ b.labelKm }}</span>\n <span class=\"c2g-ar__bucket-count\">{{ b.count }}</span>\n </div>\n }\n </div>\n }\n</article>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { PackProgressData, PackProgressRow } from './dashboard-widgets.models';\n\n@Component({\n selector: 'c2g-pack-progress-widget',\n standalone: true,\n imports: [],\n templateUrl: './pack-progress-widget.component.html',\n styleUrls: ['./pack-progress-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PackProgressWidgetComponent {\n readonly data = input.required<PackProgressData>();\n\n readonly rows = computed(() => this.data().rows);\n\n readonly overallPacked = computed(() =>\n this.rows().reduce((s, r) => s + r.packed, 0)\n );\n\n readonly overallTotal = computed(() =>\n this.rows().reduce((s, r) => s + r.total, 0)\n );\n\n readonly overallPercent = computed(() => {\n const t = this.overallTotal();\n return t === 0 ? 0 : Math.round((this.overallPacked() / t) * 100);\n });\n\n pct(row: PackProgressRow): number {\n return row.total === 0 ? 0 : Math.round((row.packed / row.total) * 100);\n }\n\n tone(row: PackProgressRow): 'success' | 'warning' | 'danger' {\n const p = this.pct(row);\n if (p === 100) return 'success';\n if (p >= 50) return 'warning';\n return 'danger';\n }\n}\n","<div class=\"c2g-pp\">\n\n <div class=\"c2g-pp__header\">\n <span class=\"c2g-pp__title\">📦 Packfortschritt</span>\n @if (data().tourName) {\n <span class=\"c2g-pp__tour\">{{ data().tourName }}</span>\n }\n <span class=\"c2g-pp__overall\">{{ overallPacked() }}/{{ overallTotal() }}</span>\n </div>\n\n <div class=\"c2g-pp__rows\">\n @for (row of rows(); track row.label) {\n <div class=\"c2g-pp__row\" [class.c2g-pp__row--highlight]=\"row.highlight\">\n\n <div class=\"c2g-pp__row-label\">\n <span class=\"c2g-pp__row-icon\" aria-hidden=\"true\">{{ row.icon }}</span>\n <span class=\"c2g-pp__row-name\">{{ row.label }}</span>\n </div>\n\n <div class=\"c2g-pp__bar-wrap\" [attr.aria-label]=\"row.label + ': ' + row.packed + ' von ' + row.total + ' gepackt'\">\n <div\n class=\"c2g-pp__bar-fill\"\n [class.c2g-pp__bar-fill--success]=\"tone(row) === 'success'\"\n [class.c2g-pp__bar-fill--warning]=\"tone(row) === 'warning'\"\n [class.c2g-pp__bar-fill--danger]=\"tone(row) === 'danger'\"\n [style.width.%]=\"pct(row)\">\n </div>\n </div>\n\n <span\n class=\"c2g-pp__count\"\n [class.c2g-pp__count--success]=\"tone(row) === 'success'\"\n [class.c2g-pp__count--warning]=\"tone(row) === 'warning'\"\n [class.c2g-pp__count--danger]=\"tone(row) === 'danger'\">\n {{ row.packed }}/{{ row.total }}\n </span>\n\n </div>\n }\n </div>\n\n <!-- Overall strip -->\n <div class=\"c2g-pp__strip-track\">\n <div class=\"c2g-pp__strip-fill\" [style.width.%]=\"overallPercent()\"></div>\n </div>\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","TYPE_CONFIG"],"mappings":"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"}