@camp2gether/c2g-ui 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -0
- package/charts/index.d.ts +199 -0
- package/fesm2022/camp2gether-c2g-ui-beach-animation-ipi3OoKW.mjs +54156 -0
- package/fesm2022/camp2gether-c2g-ui-beach-animation-ipi3OoKW.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-camping-animation-DY6XWXyF.mjs +35807 -0
- package/fesm2022/camp2gether-c2g-ui-camping-animation-DY6XWXyF.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-car-animation-DnDp7WfG.mjs +45189 -0
- package/fesm2022/camp2gether-c2g-ui-car-animation-DnDp7WfG.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-car-driving-landscape-animation-CawNeMKD.mjs +43833 -0
- package/fesm2022/camp2gether-c2g-ui-car-driving-landscape-animation-CawNeMKD.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-cat-love-animation-ewC7fZyY.mjs +30789 -0
- package/fesm2022/camp2gether-c2g-ui-cat-love-animation-ewC7fZyY.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-charts.mjs +404 -0
- package/fesm2022/camp2gether-c2g-ui-charts.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-checklist-animation-DqUkcLqI.mjs +19868 -0
- package/fesm2022/camp2gether-c2g-ui-checklist-animation-DqUkcLqI.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-coffee-time-animation-DQilaE0A.mjs +6816 -0
- package/fesm2022/camp2gether-c2g-ui-coffee-time-animation-DQilaE0A.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-error-404-pdjg-EHb.mjs +49742 -0
- package/fesm2022/camp2gether-c2g-ui-error-404-pdjg-EHb.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-fishing-animation-DwE3IF-V.mjs +38941 -0
- package/fesm2022/camp2gether-c2g-ui-fishing-animation-DwE3IF-V.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-layout.mjs +768 -0
- package/fesm2022/camp2gether-c2g-ui-layout.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-maps.mjs +223 -0
- package/fesm2022/camp2gether-c2g-ui-maps.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-mountain-search-animation-TebM1gS4.mjs +69245 -0
- package/fesm2022/camp2gether-c2g-ui-mountain-search-animation-TebM1gS4.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-planning-animation-D8QSsZk6.mjs +28330 -0
- package/fesm2022/camp2gether-c2g-ui-planning-animation-D8QSsZk6.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-presets.mjs +2855 -0
- package/fesm2022/camp2gether-c2g-ui-presets.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-share-animation-qgqs-k59.mjs +59129 -0
- package/fesm2022/camp2gether-c2g-ui-share-animation-qgqs-k59.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-summer-camp-animation-DPzirVNH.mjs +89317 -0
- package/fesm2022/camp2gether-c2g-ui-summer-camp-animation-DPzirVNH.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-theme.mjs +479 -0
- package/fesm2022/camp2gether-c2g-ui-theme.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-thinking-animation--X3er_pf.mjs +27929 -0
- package/fesm2022/camp2gether-c2g-ui-thinking-animation--X3er_pf.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-walking-avocado-animation-CQMU2C9-.mjs +4064 -0
- package/fesm2022/camp2gether-c2g-ui-walking-avocado-animation-CQMU2C9-.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-walking-orange-animation-CTJniCsF.mjs +3113 -0
- package/fesm2022/camp2gether-c2g-ui-walking-orange-animation-CTJniCsF.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui-weather-partly-cloudy-animation-Cnw3W4cS.mjs +1731 -0
- package/fesm2022/camp2gether-c2g-ui-weather-partly-cloudy-animation-Cnw3W4cS.mjs.map +1 -0
- package/fesm2022/camp2gether-c2g-ui.mjs +2099 -0
- package/fesm2022/camp2gether-c2g-ui.mjs.map +1 -0
- package/index.d.ts +578 -0
- package/layout/index.d.ts +443 -0
- package/maps/index.d.ts +62 -0
- package/package.json +51 -0
- package/presets/index.d.ts +1437 -0
- package/src/lib/styles/design-tokens.css +153 -0
- package/src/lib/styles/themes.scss +346 -0
- package/theme/index.d.ts +63 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnDestroy, ElementRef } from '@angular/core';
|
|
3
|
+
import { C2gLottieLoaderPreset } from '@humbeldore/c2g-ui';
|
|
4
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
5
|
+
import * as _camp2gether_c2g_ui_layout from '@camp2gether/c2g-ui/layout';
|
|
6
|
+
|
|
7
|
+
declare class ContentPanelComponent {
|
|
8
|
+
eyebrow: _angular_core.InputSignal<string>;
|
|
9
|
+
title: _angular_core.InputSignal<string>;
|
|
10
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentPanelComponent, never>;
|
|
11
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentPanelComponent, "app-content-panel", never, { "eyebrow": { "alias": "eyebrow"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, ["[panel-actions]", "*"], true, never>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare class CoverageKpiComponent {
|
|
15
|
+
label: _angular_core.InputSignal<string>;
|
|
16
|
+
coveragePercent: _angular_core.InputSignal<number>;
|
|
17
|
+
readonly ringCircumference = 125.66;
|
|
18
|
+
readonly ringOffset: _angular_core.Signal<number>;
|
|
19
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CoverageKpiComponent, never>;
|
|
20
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CoverageKpiComponent, "app-coverage-kpi", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "coveragePercent": { "alias": "coveragePercent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare class HeroComponent {
|
|
24
|
+
eyebrow: _angular_core.InputSignal<string | undefined>;
|
|
25
|
+
title: _angular_core.InputSignal<string | undefined>;
|
|
26
|
+
lead: _angular_core.InputSignal<string | undefined>;
|
|
27
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeroComponent, never>;
|
|
28
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeroComponent, "app-hero", never, { "eyebrow": { "alias": "eyebrow"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "lead": { "alias": "lead"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type KpiCardTone = 'owned' | 'missing' | 'total';
|
|
32
|
+
declare class KpiCardComponent {
|
|
33
|
+
value: _angular_core.InputSignal<number>;
|
|
34
|
+
label: _angular_core.InputSignal<string>;
|
|
35
|
+
icon: _angular_core.InputSignal<string>;
|
|
36
|
+
tone: _angular_core.InputSignal<KpiCardTone>;
|
|
37
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KpiCardComponent, never>;
|
|
38
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KpiCardComponent, "app-kpi-card", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "tone": { "alias": "tone"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface DangerZoneAction {
|
|
42
|
+
labelKey?: string;
|
|
43
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'destructive';
|
|
44
|
+
icon?: string;
|
|
45
|
+
ariaLabelKey?: string;
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
label?: string;
|
|
48
|
+
ariaLabel?: string;
|
|
49
|
+
}
|
|
50
|
+
interface DangerZoneItem {
|
|
51
|
+
id: string;
|
|
52
|
+
titleKey?: string;
|
|
53
|
+
descriptionKey?: string;
|
|
54
|
+
action: DangerZoneAction;
|
|
55
|
+
onTrigger?: (item: DangerZoneItem) => void;
|
|
56
|
+
title?: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
}
|
|
59
|
+
declare class DangerZoneComponent {
|
|
60
|
+
readonly headingKey: _angular_core.InputSignal<string>;
|
|
61
|
+
readonly items: _angular_core.InputSignal<DangerZoneItem[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Emits the clicked item id so consumers can map actions in their container.
|
|
64
|
+
*
|
|
65
|
+
* Prefer the per-item callback (`item.onTrigger`) when you want action logic to
|
|
66
|
+
* live directly on each item config.
|
|
67
|
+
*
|
|
68
|
+
* Output binding:
|
|
69
|
+
* ```html
|
|
70
|
+
* <c2g-danger-zone [items]="dangerItems" (itemTriggered)="onDangerAction($event)" />
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* Example mapping:
|
|
74
|
+
* ```ts
|
|
75
|
+
* onDangerAction(id: string) {
|
|
76
|
+
* if (id === 'delete-project') {
|
|
77
|
+
* this.openDeleteDialog();
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
readonly itemTriggered: _angular_core.OutputEmitterRef<string>;
|
|
83
|
+
readonly resolvedHeadingKey: _angular_core.Signal<string>;
|
|
84
|
+
onItemTriggered(item: DangerZoneItem): void;
|
|
85
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DangerZoneComponent, never>;
|
|
86
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DangerZoneComponent, "c2g-danger-zone", never, { "headingKey": { "alias": "headingKey"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "itemTriggered": "itemTriggered"; }, never, never, true, never>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare class DangerZoneItemComponent {
|
|
90
|
+
readonly item: _angular_core.InputSignal<DangerZoneItem>;
|
|
91
|
+
readonly triggered: _angular_core.OutputEmitterRef<DangerZoneItem>;
|
|
92
|
+
titleKey(): string;
|
|
93
|
+
descriptionKey(): string | null;
|
|
94
|
+
actionLabelKey(): string;
|
|
95
|
+
actionAriaLabelKey(): string;
|
|
96
|
+
onTriggered(): void;
|
|
97
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DangerZoneItemComponent, never>;
|
|
98
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DangerZoneItemComponent, "c2g-danger-zone-item", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
interface C2gListItemData {
|
|
102
|
+
name: string;
|
|
103
|
+
description?: string | null;
|
|
104
|
+
memberCount?: number | null;
|
|
105
|
+
members?: unknown[];
|
|
106
|
+
}
|
|
107
|
+
declare class ListItemComponent {
|
|
108
|
+
readonly group: _angular_core.InputSignal<C2gListItemData | null>;
|
|
109
|
+
readonly active: _angular_core.InputSignal<boolean>;
|
|
110
|
+
readonly selected: _angular_core.OutputEmitterRef<C2gListItemData | null>;
|
|
111
|
+
readonly opened: _angular_core.OutputEmitterRef<C2gListItemData | null>;
|
|
112
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListItemComponent, never>;
|
|
113
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListItemComponent, "c2g-list-item", never, { "group": { "alias": "group"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "selected": "selected"; "opened": "opened"; }, never, never, true, never>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
interface StatCardBackground {
|
|
117
|
+
type: 'gradient' | 'image';
|
|
118
|
+
value: string;
|
|
119
|
+
overlay?: string;
|
|
120
|
+
}
|
|
121
|
+
interface StatCardData {
|
|
122
|
+
value: string | number;
|
|
123
|
+
label: string;
|
|
124
|
+
icon?: string;
|
|
125
|
+
lottiePreset?: C2gLottieLoaderPreset;
|
|
126
|
+
iconBackgroundTone?: 'primary' | 'secondary' | 'neutral';
|
|
127
|
+
background?: StatCardBackground;
|
|
128
|
+
disabled?: boolean;
|
|
129
|
+
trend?: {
|
|
130
|
+
direction: 'up' | 'down' | 'neutral';
|
|
131
|
+
value: string | number;
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
declare class StatCardComponent {
|
|
135
|
+
readonly data: _angular_core.InputSignal<StatCardData>;
|
|
136
|
+
readonly cardBackgroundStyle: _angular_core.Signal<Record<string, string> | null>;
|
|
137
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatCardComponent, never>;
|
|
138
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardComponent, "c2g-stat-card", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
type ActionCardLayout = 'icon-left' | 'hero-top' | 'icon-detail';
|
|
142
|
+
interface ActionCardData {
|
|
143
|
+
icon?: string;
|
|
144
|
+
title: string;
|
|
145
|
+
text?: string;
|
|
146
|
+
description?: string;
|
|
147
|
+
image?: string;
|
|
148
|
+
lottiePreset?: C2gLottieLoaderPreset;
|
|
149
|
+
disabled?: boolean;
|
|
150
|
+
iconBackgroundTone?: 'primary' | 'secondary' | 'neutral';
|
|
151
|
+
ctaLabel?: string;
|
|
152
|
+
}
|
|
153
|
+
declare class ActionCardComponent {
|
|
154
|
+
readonly data: _angular_core.InputSignal<ActionCardData>;
|
|
155
|
+
readonly clickable: _angular_core.InputSignal<boolean>;
|
|
156
|
+
readonly variant: _angular_core.InputSignal<ActionCardLayout>;
|
|
157
|
+
readonly cardClicked: _angular_core.OutputEmitterRef<void>;
|
|
158
|
+
readonly effectiveText: _angular_core.Signal<string>;
|
|
159
|
+
readonly supportingDescription: _angular_core.Signal<string>;
|
|
160
|
+
readonly isInteractive: _angular_core.Signal<boolean>;
|
|
161
|
+
readonly iconToneClass: _angular_core.Signal<"primary" | "secondary" | "neutral">;
|
|
162
|
+
onCardClick(): void;
|
|
163
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
164
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionCardComponent, never>;
|
|
165
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionCardComponent, "c2g-action-card", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "cardClicked": "cardClicked"; }, never, ["[ctas]", "*", "[ctas]"], true, never>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
interface ViewToggleOption<T extends string = string> {
|
|
169
|
+
value: T;
|
|
170
|
+
icon: string;
|
|
171
|
+
label: string;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
declare class ViewToggleComponent<T extends string = string> {
|
|
175
|
+
options: _angular_core.InputSignal<ViewToggleOption<T>[]>;
|
|
176
|
+
activeValue: _angular_core.InputSignal<T | null>;
|
|
177
|
+
valueChange: _angular_core.OutputEmitterRef<T>;
|
|
178
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewToggleComponent<any>, never>;
|
|
179
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewToggleComponent<any>, "app-view-toggle", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "activeValue": { "alias": "activeValue"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
interface SegmentedToggleOption<T extends string = string> {
|
|
183
|
+
value: T;
|
|
184
|
+
label: string;
|
|
185
|
+
icon?: string;
|
|
186
|
+
iconFontSet?: string;
|
|
187
|
+
iconFontIcon?: string;
|
|
188
|
+
iconAriaLabel?: string;
|
|
189
|
+
disabled?: boolean;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
declare class SegmentedToggleComponent<T extends string = string> implements ControlValueAccessor {
|
|
193
|
+
readonly options: _angular_core.InputSignal<SegmentedToggleOption<T>[]>;
|
|
194
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
195
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
196
|
+
readonly iconOnly: _angular_core.InputSignal<boolean>;
|
|
197
|
+
readonly valueChange: _angular_core.OutputEmitterRef<T>;
|
|
198
|
+
readonly value: _angular_core.WritableSignal<T | null>;
|
|
199
|
+
readonly cvaDisabled: _angular_core.WritableSignal<boolean>;
|
|
200
|
+
readonly isDisabled: _angular_core.Signal<boolean>;
|
|
201
|
+
private onChange;
|
|
202
|
+
private onTouched;
|
|
203
|
+
writeValue(value: T | null): void;
|
|
204
|
+
registerOnChange(fn: (value: T) => void): void;
|
|
205
|
+
registerOnTouched(fn: () => void): void;
|
|
206
|
+
setDisabledState(isDisabled: boolean): void;
|
|
207
|
+
tabIndexFor(option: T): number;
|
|
208
|
+
select(next: T): void;
|
|
209
|
+
onKeydown(event: KeyboardEvent, index: number): void;
|
|
210
|
+
private focusValue;
|
|
211
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedToggleComponent<any>, never>;
|
|
212
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedToggleComponent<any>, "c2g-segmented-toggle", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
declare class SearchInputComponent {
|
|
216
|
+
searchChange: _angular_core.OutputEmitterRef<string>;
|
|
217
|
+
onInput(event: Event): void;
|
|
218
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInputComponent, never>;
|
|
219
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInputComponent, "app-search-input", never, {}, { "searchChange": "searchChange"; }, never, never, true, never>;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
interface EmptyStateData {
|
|
223
|
+
icon?: string;
|
|
224
|
+
lottiePreset?: C2gLottieLoaderPreset;
|
|
225
|
+
title: string;
|
|
226
|
+
description?: string;
|
|
227
|
+
actionLabel?: string;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
declare class EmptyStateComponent {
|
|
231
|
+
readonly data: _angular_core.InputSignal<EmptyStateData>;
|
|
232
|
+
readonly actionClicked: _angular_core.OutputEmitterRef<void>;
|
|
233
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
|
|
234
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "c2g-empty-state", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, { "actionClicked": "actionClicked"; }, never, ["*"], true, never>;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
interface PaginationState {
|
|
238
|
+
currentPage: number;
|
|
239
|
+
totalPages: number;
|
|
240
|
+
pageSize?: number;
|
|
241
|
+
totalItems?: number;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
declare class PaginationComponent {
|
|
245
|
+
readonly state: _angular_core.InputSignal<PaginationState>;
|
|
246
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
247
|
+
readonly pageChanged: _angular_core.OutputEmitterRef<number>;
|
|
248
|
+
readonly currentPage: _angular_core.Signal<number>;
|
|
249
|
+
readonly totalPages: _angular_core.Signal<number>;
|
|
250
|
+
readonly hasPrev: _angular_core.Signal<boolean>;
|
|
251
|
+
readonly hasNext: _angular_core.Signal<boolean>;
|
|
252
|
+
readonly visiblePages: _angular_core.Signal<number[]>;
|
|
253
|
+
readonly showStartEllipsis: _angular_core.Signal<boolean>;
|
|
254
|
+
readonly showEndEllipsis: _angular_core.Signal<boolean>;
|
|
255
|
+
go(page: number): void;
|
|
256
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginationComponent, never>;
|
|
257
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginationComponent, "c2g-pagination", never, { "state": { "alias": "state"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "pageChanged": "pageChanged"; }, never, never, true, never>;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
interface C2gTableColumn<T = any> {
|
|
261
|
+
key: string;
|
|
262
|
+
label: string;
|
|
263
|
+
sortable?: boolean;
|
|
264
|
+
width?: string;
|
|
265
|
+
align?: 'left' | 'center' | 'right';
|
|
266
|
+
valueGetter?: (row: T) => string | number;
|
|
267
|
+
}
|
|
268
|
+
type C2gSortDirection = 'asc' | 'desc' | null;
|
|
269
|
+
interface C2gSortState {
|
|
270
|
+
key: string;
|
|
271
|
+
direction: C2gSortDirection;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
declare class TableComponent<T extends Record<string, any> = Record<string, any>> {
|
|
275
|
+
readonly rows: _angular_core.InputSignal<T[]>;
|
|
276
|
+
readonly columns: _angular_core.InputSignal<C2gTableColumn<T>[]>;
|
|
277
|
+
readonly rowHeight: _angular_core.InputSignal<number>;
|
|
278
|
+
readonly maxHeight: _angular_core.InputSignal<string>;
|
|
279
|
+
readonly selectable: _angular_core.InputSignal<boolean>;
|
|
280
|
+
readonly virtualScroll: _angular_core.InputSignal<boolean>;
|
|
281
|
+
readonly sortChanged: _angular_core.OutputEmitterRef<C2gSortState>;
|
|
282
|
+
readonly rowSelected: _angular_core.OutputEmitterRef<T>;
|
|
283
|
+
readonly sortState: _angular_core.WritableSignal<C2gSortState>;
|
|
284
|
+
readonly selectedRow: _angular_core.WritableSignal<T | null>;
|
|
285
|
+
readonly sortedRows: _angular_core.Signal<T[]>;
|
|
286
|
+
getCellValue(row: T, col: C2gTableColumn<T>): string | number;
|
|
287
|
+
sort(key: string): void;
|
|
288
|
+
select(row: T): void;
|
|
289
|
+
isSelected(row: T): boolean;
|
|
290
|
+
sortIcon(key: string): string;
|
|
291
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent<any>, never>;
|
|
292
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent<any>, "c2g-table", never, { "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; }, { "sortChanged": "sortChanged"; "rowSelected": "rowSelected"; }, never, never, true, never>;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
interface C2gTab {
|
|
296
|
+
key: string;
|
|
297
|
+
label: string;
|
|
298
|
+
icon?: string;
|
|
299
|
+
disabled?: boolean;
|
|
300
|
+
badge?: number;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
declare class TabsComponent {
|
|
304
|
+
readonly tabs: _angular_core.InputSignal<C2gTab[]>;
|
|
305
|
+
readonly activeKey: _angular_core.ModelSignal<string>;
|
|
306
|
+
readonly tabChanged: _angular_core.OutputEmitterRef<C2gTab>;
|
|
307
|
+
readonly activeTab: _angular_core.Signal<C2gTab>;
|
|
308
|
+
select(tab: C2gTab): void;
|
|
309
|
+
isActive(tab: C2gTab): boolean;
|
|
310
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsComponent, never>;
|
|
311
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "c2g-tabs", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeKey": { "alias": "activeKey"; "required": false; "isSignal": true; }; }, { "activeKey": "activeKeyChange"; "tabChanged": "tabChanged"; }, never, ["*"], true, never>;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
interface C2gBreadcrumbItem {
|
|
315
|
+
label: string;
|
|
316
|
+
href?: string;
|
|
317
|
+
icon?: string;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
declare class BreadcrumbComponent {
|
|
321
|
+
readonly items: _angular_core.InputSignal<C2gBreadcrumbItem[]>;
|
|
322
|
+
readonly separator: _angular_core.InputSignal<string>;
|
|
323
|
+
readonly itemClicked: _angular_core.OutputEmitterRef<C2gBreadcrumbItem>;
|
|
324
|
+
navigate(event: Event, item: C2gBreadcrumbItem): void;
|
|
325
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
|
|
326
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbComponent, "c2g-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
interface C2gStep {
|
|
330
|
+
key: string;
|
|
331
|
+
label: string;
|
|
332
|
+
description?: string;
|
|
333
|
+
optional?: boolean;
|
|
334
|
+
}
|
|
335
|
+
type C2gStepState = 'completed' | 'active' | 'pending' | 'error';
|
|
336
|
+
|
|
337
|
+
declare class StepperComponent {
|
|
338
|
+
readonly steps: _angular_core.InputSignal<C2gStep[]>;
|
|
339
|
+
readonly activeIndex: _angular_core.ModelSignal<number>;
|
|
340
|
+
readonly completedIndices: _angular_core.InputSignal<number[]>;
|
|
341
|
+
readonly errorIndices: _angular_core.InputSignal<number[]>;
|
|
342
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
343
|
+
readonly stepChanged: _angular_core.OutputEmitterRef<{
|
|
344
|
+
step: C2gStep;
|
|
345
|
+
index: number;
|
|
346
|
+
}>;
|
|
347
|
+
readonly canGoNext: _angular_core.Signal<boolean>;
|
|
348
|
+
readonly canGoPrev: _angular_core.Signal<boolean>;
|
|
349
|
+
getState(index: number): C2gStepState;
|
|
350
|
+
goTo(index: number): void;
|
|
351
|
+
next(): void;
|
|
352
|
+
prev(): void;
|
|
353
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StepperComponent, never>;
|
|
354
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StepperComponent, "c2g-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "completedIndices": { "alias": "completedIndices"; "required": false; "isSignal": true; }; "errorIndices": { "alias": "errorIndices"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "stepChanged": "stepChanged"; }, never, never, true, never>;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
type C2gKpiTrend = 'up' | 'down' | 'neutral';
|
|
358
|
+
type C2gKpiColor = 'primary' | 'success' | 'warning' | 'danger' | 'neutral';
|
|
359
|
+
interface C2gKpiCardData {
|
|
360
|
+
label: string;
|
|
361
|
+
value: string | number;
|
|
362
|
+
unit?: string;
|
|
363
|
+
icon?: string;
|
|
364
|
+
trend?: C2gKpiTrend;
|
|
365
|
+
change?: string | number;
|
|
366
|
+
changeLabel?: string;
|
|
367
|
+
color?: C2gKpiColor;
|
|
368
|
+
/** 5–8 numbers for the mini sparkline, oldest → newest */
|
|
369
|
+
sparkline?: number[];
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
declare class C2gKpiCardComponent implements OnDestroy {
|
|
373
|
+
private el;
|
|
374
|
+
readonly data: _angular_core.InputSignal<C2gKpiCardData>;
|
|
375
|
+
readonly color: _angular_core.Signal<_camp2gether_c2g_ui_layout.C2gKpiColor>;
|
|
376
|
+
readonly hostClass: _angular_core.Signal<string>;
|
|
377
|
+
readonly displayValue: _angular_core.WritableSignal<string>;
|
|
378
|
+
private countUpRaf;
|
|
379
|
+
constructor(el: ElementRef<HTMLElement>);
|
|
380
|
+
private startCountUp;
|
|
381
|
+
readonly sparklinePath: _angular_core.Signal<{
|
|
382
|
+
line: string;
|
|
383
|
+
area: string;
|
|
384
|
+
lastX: number;
|
|
385
|
+
lastY: number;
|
|
386
|
+
} | null>;
|
|
387
|
+
readonly tilt: _angular_core.WritableSignal<{
|
|
388
|
+
x: number;
|
|
389
|
+
y: number;
|
|
390
|
+
}>;
|
|
391
|
+
onMouseMove(e: MouseEvent): void;
|
|
392
|
+
onMouseLeave(): void;
|
|
393
|
+
readonly tiltStyle: _angular_core.Signal<string>;
|
|
394
|
+
readonly trendArrow: _angular_core.Signal<"↑" | "↓" | "→">;
|
|
395
|
+
ngOnDestroy(): void;
|
|
396
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<C2gKpiCardComponent, never>;
|
|
397
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<C2gKpiCardComponent, "c2g-kpi-card", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
interface C2gFilterOption {
|
|
401
|
+
key: string;
|
|
402
|
+
label: string;
|
|
403
|
+
icon?: string;
|
|
404
|
+
count?: number;
|
|
405
|
+
}
|
|
406
|
+
interface C2gFilterGroup {
|
|
407
|
+
key: string;
|
|
408
|
+
label?: string;
|
|
409
|
+
options: C2gFilterOption[];
|
|
410
|
+
multiple?: boolean;
|
|
411
|
+
}
|
|
412
|
+
type C2gFilterState = Record<string, string[]>;
|
|
413
|
+
|
|
414
|
+
declare class FilterBarComponent {
|
|
415
|
+
readonly groups: _angular_core.InputSignal<C2gFilterGroup[]>;
|
|
416
|
+
readonly searchPlaceholder: _angular_core.InputSignal<string>;
|
|
417
|
+
readonly showSearch: _angular_core.InputSignal<boolean>;
|
|
418
|
+
readonly search: _angular_core.ModelSignal<string>;
|
|
419
|
+
readonly activeFilters: _angular_core.ModelSignal<C2gFilterState>;
|
|
420
|
+
readonly filterChanged: _angular_core.OutputEmitterRef<C2gFilterState>;
|
|
421
|
+
readonly searchChanged: _angular_core.OutputEmitterRef<string>;
|
|
422
|
+
readonly activeCount: _angular_core.Signal<number>;
|
|
423
|
+
readonly hasActiveFilters: _angular_core.Signal<boolean>;
|
|
424
|
+
isSelected(groupKey: string, optionKey: string): boolean;
|
|
425
|
+
toggle(groupKey: string, optionKey: string, multiple: boolean): void;
|
|
426
|
+
clearAll(): void;
|
|
427
|
+
onSearch(value: string): void;
|
|
428
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterBarComponent, never>;
|
|
429
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterBarComponent, "c2g-filter-bar", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "activeFilters": { "alias": "activeFilters"; "required": false; "isSignal": true; }; }, { "search": "searchChange"; "activeFilters": "activeFiltersChange"; "filterChanged": "filterChanged"; "searchChanged": "searchChanged"; }, never, never, true, never>;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
declare class SkeletonTableComponent {
|
|
433
|
+
readonly rows: _angular_core.InputSignal<number>;
|
|
434
|
+
readonly columns: _angular_core.InputSignal<number>;
|
|
435
|
+
readonly showHeader: _angular_core.InputSignal<boolean>;
|
|
436
|
+
readonly rowIndices: number[];
|
|
437
|
+
readonly colIndices: number[];
|
|
438
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonTableComponent, never>;
|
|
439
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonTableComponent, "c2g-skeleton-table", never, { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export { ActionCardComponent, BreadcrumbComponent, C2gKpiCardComponent, ContentPanelComponent, CoverageKpiComponent, DangerZoneComponent, DangerZoneItemComponent, EmptyStateComponent, FilterBarComponent, HeroComponent, KpiCardComponent, ListItemComponent, PaginationComponent, SearchInputComponent, SegmentedToggleComponent, SkeletonTableComponent, StatCardComponent, StepperComponent, TableComponent, TabsComponent, ViewToggleComponent };
|
|
443
|
+
export type { ActionCardData, ActionCardLayout, C2gBreadcrumbItem, C2gFilterGroup, C2gFilterOption, C2gFilterState, C2gKpiCardData, C2gKpiColor, C2gKpiTrend, C2gListItemData, C2gSortDirection, C2gSortState, C2gStep, C2gStepState, C2gTab, C2gTableColumn, DangerZoneAction, DangerZoneItem, EmptyStateData, KpiCardTone, PaginationState, SegmentedToggleOption, StatCardData, ViewToggleOption };
|
package/maps/index.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
|
|
3
|
+
import * as L from 'leaflet';
|
|
4
|
+
|
|
5
|
+
type ActivityType = 'water' | 'forest' | 'mountain' | 'desert' | 'urban' | 'adventure' | 'point-of-interest';
|
|
6
|
+
type TourStatus = 'declined' | 'completed' | 'current' | 'upcoming';
|
|
7
|
+
type MarkerSize = 'small' | 'medium' | 'large';
|
|
8
|
+
interface C2gMapMarkerData {
|
|
9
|
+
id: string;
|
|
10
|
+
latitude: number;
|
|
11
|
+
longitude: number;
|
|
12
|
+
activityType?: ActivityType;
|
|
13
|
+
tourStatus?: TourStatus;
|
|
14
|
+
title?: string;
|
|
15
|
+
selected?: boolean;
|
|
16
|
+
size?: MarkerSize;
|
|
17
|
+
variant?: 'default' | 'new-tour';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare class MapComponent implements AfterViewInit, OnDestroy {
|
|
21
|
+
mapContainer: ElementRef<HTMLDivElement>;
|
|
22
|
+
readonly center: _angular_core.InputSignal<[number, number]>;
|
|
23
|
+
readonly zoom: _angular_core.InputSignal<number>;
|
|
24
|
+
readonly height: _angular_core.InputSignal<string>;
|
|
25
|
+
readonly width: _angular_core.InputSignal<string>;
|
|
26
|
+
readonly markers: _angular_core.InputSignal<C2gMapMarkerData[]>;
|
|
27
|
+
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
28
|
+
readonly mapReady: _angular_core.OutputEmitterRef<L.Map>;
|
|
29
|
+
readonly mapClick: _angular_core.OutputEmitterRef<L.LeafletMouseEvent>;
|
|
30
|
+
readonly markerClick: _angular_core.OutputEmitterRef<{
|
|
31
|
+
marker: C2gMapMarkerData;
|
|
32
|
+
event: L.LeafletMouseEvent;
|
|
33
|
+
}>;
|
|
34
|
+
private map?;
|
|
35
|
+
private markerGroup?;
|
|
36
|
+
constructor();
|
|
37
|
+
ngAfterViewInit(): void;
|
|
38
|
+
ngOnDestroy(): void;
|
|
39
|
+
private initializeMap;
|
|
40
|
+
private updateMarkers;
|
|
41
|
+
private buildMarkerHtml;
|
|
42
|
+
private markerIcon;
|
|
43
|
+
private markerSize;
|
|
44
|
+
private markerAnchor;
|
|
45
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapComponent, never>;
|
|
46
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MapComponent, "c2g-map", never, { "center": { "alias": "center"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, { "mapReady": "mapReady"; "mapClick": "mapClick"; "markerClick": "markerClick"; }, never, never, true, never>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare class MapMarkerComponent {
|
|
50
|
+
readonly activityType: _angular_core.InputSignal<ActivityType>;
|
|
51
|
+
readonly tourStatus: _angular_core.InputSignal<TourStatus | null>;
|
|
52
|
+
readonly selected: _angular_core.InputSignal<boolean>;
|
|
53
|
+
readonly size: _angular_core.InputSignal<MarkerSize>;
|
|
54
|
+
readonly variant: _angular_core.InputSignal<"default" | "new-tour">;
|
|
55
|
+
readonly markerType: _angular_core.Signal<string>;
|
|
56
|
+
readonly markerIcon: _angular_core.Signal<string>;
|
|
57
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapMarkerComponent, never>;
|
|
58
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MapMarkerComponent, "c2g-map-marker", never, { "activityType": { "alias": "activityType"; "required": false; "isSignal": true; }; "tourStatus": { "alias": "tourStatus"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { MapComponent, MapMarkerComponent };
|
|
62
|
+
export type { ActivityType, C2gMapMarkerData, MarkerSize, TourStatus };
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@camp2gether/c2g-ui",
|
|
3
|
+
"version": "0.0.7",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"registry": "https://registry.npmjs.org/",
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"peerDependencies": {
|
|
9
|
+
"@angular/common": "^20.3.0",
|
|
10
|
+
"@angular/core": "^20.3.0",
|
|
11
|
+
"@angular/cdk": "^20.2.14",
|
|
12
|
+
"leaflet": "^1.9.4"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"tslib": "^2.3.0"
|
|
16
|
+
},
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"exports": {
|
|
19
|
+
"./src/lib/styles/design-tokens.css": "./src/lib/styles/design-tokens.css",
|
|
20
|
+
"./src/lib/styles/themes.scss": "./src/lib/styles/themes.scss",
|
|
21
|
+
"./package.json": {
|
|
22
|
+
"default": "./package.json"
|
|
23
|
+
},
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./index.d.ts",
|
|
26
|
+
"default": "./fesm2022/camp2gether-c2g-ui.mjs"
|
|
27
|
+
},
|
|
28
|
+
"./charts": {
|
|
29
|
+
"types": "./charts/index.d.ts",
|
|
30
|
+
"default": "./fesm2022/camp2gether-c2g-ui-charts.mjs"
|
|
31
|
+
},
|
|
32
|
+
"./layout": {
|
|
33
|
+
"types": "./layout/index.d.ts",
|
|
34
|
+
"default": "./fesm2022/camp2gether-c2g-ui-layout.mjs"
|
|
35
|
+
},
|
|
36
|
+
"./maps": {
|
|
37
|
+
"types": "./maps/index.d.ts",
|
|
38
|
+
"default": "./fesm2022/camp2gether-c2g-ui-maps.mjs"
|
|
39
|
+
},
|
|
40
|
+
"./presets": {
|
|
41
|
+
"types": "./presets/index.d.ts",
|
|
42
|
+
"default": "./fesm2022/camp2gether-c2g-ui-presets.mjs"
|
|
43
|
+
},
|
|
44
|
+
"./theme": {
|
|
45
|
+
"types": "./theme/index.d.ts",
|
|
46
|
+
"default": "./fesm2022/camp2gether-c2g-ui-theme.mjs"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"module": "fesm2022/camp2gether-c2g-ui.mjs",
|
|
50
|
+
"typings": "index.d.ts"
|
|
51
|
+
}
|