Skip to content

Commit 1253dbe

Browse files
committed
chore: polish demo to fit the design
1 parent 9d3d13e commit 1253dbe

31 files changed

+148
-233
lines changed

examples-standalone/personal-finance-app/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples-standalone/personal-finance-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"@progress/kendo-angular-utils": "18.1.1",
4646
"@progress/kendo-data-query": "^1.0.0",
4747
"@progress/kendo-drawing": "^1.21.0",
48-
"@progress/kendo-licensing": "^1.5.0",
48+
"@progress/kendo-licensing": "^1.5.1",
4949
"@progress/kendo-svg-icons": "^4.0.0",
5050
"@progress/kendo-theme-default": "^10.2.0",
5151
"@progress/kendo-theme-material": "^10.3.1",

examples-standalone/personal-finance-app/src/app/app.config.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
importProvidersFrom,
55
LOCALE_ID,
66
} from '@angular/core';
7-
import { provideRouter } from '@angular/router';
7+
import { provideRouter, withHashLocation } from '@angular/router';
88
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
99

1010
import '@progress/kendo-angular-intl/locales/en/all';
@@ -16,6 +16,7 @@ import { routes } from './app.routes';
1616
import { Locale, localeData } from '@progress/kendo-angular-intl';
1717
import { CustomMessagesService } from './services/custom-messages.service';
1818
import { MessageService } from '@progress/kendo-angular-l10n';
19+
import { APP_BASE_HREF } from '@angular/common';
1920

2021
const enData: Locale = localeData('en');
2122

@@ -29,9 +30,10 @@ if (enData.numbers && enData.numbers.symbols) {
2930
export const appConfig: ApplicationConfig = {
3031
providers: [
3132
provideZoneChangeDetection({ eventCoalescing: true }),
32-
provideRouter(routes),
33+
provideRouter(routes, withHashLocation()),
3334
importProvidersFrom([BrowserAnimationsModule]),
3435
{ provide: LOCALE_ID, useValue: 'en-US' },
3536
{ provide: MessageService, useClass: CustomMessagesService },
37+
{ provide: APP_BASE_HREF, useValue: '/personal-finance-app/' },
3638
],
3739
};

examples-standalone/personal-finance-app/src/app/components/ai-assistant/ai-assistant.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ <h6 class="k-h6 k-font-medium">{{customMsgService.translate('relatedTopics')}}</
2424
<h6 class="k-h6 k-font-medium">{{customMsgService.translate('chatWithRoby')}}</h6>
2525
</div>
2626
<div class="k-d-flex k-justify-content-center k-align-items-center">
27-
<kendo-aiprompt [style.maxWidth.px]="390" [style.minWidth.px]="390" [style.maxHeight.px]="520"
28-
[style.height.px]="520" #aiPrompt [promptOutputs]=" promptOutputs" [(activeView)]="activeView"
29-
(promptRequest)="onPromptRequest($event)" [promptSuggestions]="promptSuggestions">
27+
<kendo-aiprompt [style.maxHeight.px]="520" [style.maxWidth.px]="390" [style.height.px]="520" #aiPrompt
28+
[promptOutputs]=" promptOutputs" [(activeView)]="activeView" (promptRequest)="onPromptRequest($event)"
29+
[promptSuggestions]="promptSuggestions">
3030
<kendo-aiprompt-prompt-view></kendo-aiprompt-prompt-view>
3131
<kendo-aiprompt-output-view></kendo-aiprompt-output-view>
3232
</kendo-aiprompt>

examples-standalone/personal-finance-app/src/app/components/ai-assistant/ai-assistant.component.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,16 @@ import { CustomMessagesService } from '../../services/custom-messages.service';
3737
export class AiAssistantComponent {
3838
public customMsgService: CustomMessagesService;
3939

40-
public relatedTopics = relatedTopicsDataEn;
40+
public relatedTopics: {
41+
title: string;
42+
description: string;
43+
expanded: boolean;
44+
}[] = [];
4145
public promptSuggestions: string[] = [];
4246
public activeView: number = 0;
4347
public promptOutputs: PromptOutput[] = [];
4448
public emailContent = '';
49+
4550
private currentLocaleId: string = 'en-US';
4651
private defaultMessage = '';
4752
private promptData: { suggestion: string; answer: string }[] = [];
@@ -52,9 +57,14 @@ export class AiAssistantComponent {
5257
) {
5358
this.customMsgService = this.messages as CustomMessagesService;
5459

55-
this.promptSuggestions = this.getPromptSuggestions(this.currentLocaleId);
56-
this.defaultMessage = this.getDefaultMessage(this.currentLocaleId);
57-
this.promptData = this.getPrompts(this.currentLocaleId);
60+
this.promptSuggestions = this.getPromptSuggestions(
61+
this.customMsgService.language
62+
);
63+
this.defaultMessage = this.getDefaultMessage(
64+
this.customMsgService.language
65+
);
66+
this.promptData = this.getPrompts(this.customMsgService.language);
67+
this.relatedTopics = this.getRelatedTopics(this.customMsgService.language);
5868

5969
this.customMsgService.localeChange.subscribe(() => {
6070
this.currentLocaleId = this.customMsgService.language;
@@ -71,8 +81,6 @@ export class AiAssistantComponent {
7181
.slice()
7282
.find((s) => s.suggestion === ev.prompt);
7383

74-
console.log(response, ev.prompt);
75-
7684
const output: PromptOutput = {
7785
id: guid(),
7886
title: ev.prompt,

examples-standalone/personal-finance-app/src/app/components/analytics/analytics.component.css

Whitespace-only changes.

examples-standalone/personal-finance-app/src/app/components/analytics/analytics.component.html

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ <h4 class="k-h4 !k-mb-6 k-text-ellipsis">{{customMsgService.translate('analytics
33

44
<div
55
class="k-col-span-12 k-col-span-xl-12 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-rounded-xxl k-gap-4 k-p-4 k-mb-10 k-pos-relative">
6-
<div
7-
class="k-pos-absolute k-z-10 k-d-flex k-d-flex-row k-justify-content-between k-align-items-center k-gap-0 k-w-100 k-left-0 k-right-0 k-px-4">
6+
<div class="k-d-flex k-d-flex-row k-justify-content-between k-align-items-center k-gap-0 k-w-100 k-px-4">
87
<h6 class="k-h6 k-font-medium k-align-middle k-mb-0">{{customMsgService.translate('moneyCashflow')}}</h6>
9-
108
<kendo-dropdownlist class="k-w-25" [data]="drillDownLevels" [value]="activeSeries"
119
(valueChange)="onDrilldownLevelChange($event)" [textField]="'text'" [valueField]="'value'"
1210
[valuePrimitive]="false" [(value)]="defaultItem" [itemDisabled]="itemDisabled"></kendo-dropdownlist>
@@ -24,8 +22,8 @@ <h6 class="k-h6 k-font-medium k-align-middle k-mb-0">{{customMsgService.translat
2422
<kendo-chart-value-axis-item [labels]="valueAxisLabels">
2523
</kendo-chart-value-axis-item>
2624
</kendo-chart-value-axis>
27-
<kendo-chart-legend position="top">
28-
<kendo-chart-legend-item [visual]="labelsVisual" cursor="pointer">
25+
<kendo-chart-legend [position]="legendPosition">
26+
<kendo-chart-legend-item cursor="pointer">
2927
</kendo-chart-legend-item>
3028
</kendo-chart-legend>
3129
<kendo-chart-series>
@@ -63,7 +61,6 @@ <h6 class="k-h6 k-font-medium k-align-middle k-mb-0">{{customMsgService.translat
6361
</kendo-chart>
6462
</div>
6563
</div>
66-
6764
<div
6865
class="k-col-span-12 k-col-span-xl-12 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-rounded-xxl k-gap-4 k-p-4 k-mb-4">
6966
<div class="k-d-flex k-d-flex-col k-justify-content-between k-align-items-start k-gap-0">

examples-standalone/personal-finance-app/src/app/components/analytics/analytics.component.ts

Lines changed: 15 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,13 @@
11
import { CommonModule } from '@angular/common';
2-
import { Component } from '@angular/core';
2+
import { Component, HostListener } from '@angular/core';
33
import {
44
AxisLabelContentArgs,
55
DrilldownEvent,
66
KENDO_CHARTS,
7-
LegendItemVisualArgs,
87
ValueAxisLabels,
98
} from '@progress/kendo-angular-charts';
109
import { KENDO_DROPDOWNS } from '@progress/kendo-angular-dropdowns';
1110
import { MessageService } from '@progress/kendo-angular-l10n';
12-
import {
13-
Element,
14-
geometry,
15-
Group,
16-
Path,
17-
Rect as RectShape,
18-
Text,
19-
} from '@progress/kendo-drawing';
2011
import {
2112
bondsMonthlyData,
2213
bondsYearlyData,
@@ -28,8 +19,6 @@ import {
2819
import { CustomMessagesService } from '../../services/custom-messages.service';
2920
import { TransactionsGridComponent } from '../transactions-grid/transactions-grid.component';
3021

31-
const { Point, Rect, Size } = geometry;
32-
3322
@Component({
3423
selector: 'app-analytics',
3524
standalone: true,
@@ -40,23 +29,26 @@ const { Point, Rect, Size } = geometry;
4029
KENDO_DROPDOWNS,
4130
],
4231
templateUrl: './analytics.component.html',
43-
styleUrl: './analytics.component.css',
4432
})
4533
export class AnalyticsComponent {
4634
public stocksYearlyData = stocksYearlyData;
4735
public realEstateYearlyData = realEstateYearlyData;
4836
public bondsYearlyData = bondsYearlyData;
49-
37+
public customMsgService: CustomMessagesService;
5038
public stocksMonthlyData = stocksMonthlyData;
5139
public realEstateMonthlyData = realEstateMonthlyData;
5240
public bondsMonthlyData = bondsMonthlyData;
53-
41+
public legendPosition: 'top' | 'bottom' | 'left' | 'right' | 'custom' = 'top';
5442
public drilldownLevel: number = 0;
55-
5643
public isDrilledDown = false;
5744
public activeSeries: string = '';
45+
public defaultItem: { text: string; value: number } = {
46+
text: '',
47+
value: 0,
48+
};
49+
public drillDownLevels: { text: string; value: number }[] = [];
5850

59-
public customMsgService: CustomMessagesService;
51+
private disabledItems: string[] = ['Month', 'Mes', 'Monat', 'Mois'];
6052

6153
constructor(private messages: MessageService) {
6254
this.customMsgService = this.messages as CustomMessagesService;
@@ -73,15 +65,6 @@ export class AnalyticsComponent {
7365
});
7466
}
7567

76-
private disabledItems: string[] = ['Month', 'Mes', 'Monat', 'Mois'];
77-
78-
public defaultItem: { text: string; value: number } = {
79-
text: '',
80-
value: 0,
81-
};
82-
83-
public drillDownLevels: { text: string; value: number }[] = [];
84-
8568
public valueAxisLabels: ValueAxisLabels = {
8669
content: (args) => {
8770
return '$' + args.value / 1000 + 'k';
@@ -101,14 +84,12 @@ export class AnalyticsComponent {
10184
this.categoryAxisLabels = this.categoryAxisLabels.bind(this);
10285
this.isDrilledDown = true;
10386
this.activeSeries = event.series.name;
104-
console.log(this.activeSeries);
10587

10688
this.defaultItem = this.setdDefaultItem('month');
10789
}
10890

10991
public onDrilldownLevelChange(event: any): void {
11092
this.drilldownLevel = event.value;
111-
console.log(this.drilldownLevel);
11293

11394
if (this.drilldownLevel === 0) {
11495
this.drilldownLevel = event.value;
@@ -121,48 +102,13 @@ export class AnalyticsComponent {
121102
return this.disabledItems.indexOf(itemArgs.dataItem.text) !== -1;
122103
};
123104

124-
public labelsVisual = (args: LegendItemVisualArgs): Element => {
125-
const rectOptions = {
126-
stroke: { width: 20, color: 'transparent' },
127-
fill: { color: 'transparent' },
128-
};
129-
const rectGeometry = new Rect(new Point(0, 10), new Size(60, 10));
130-
const rect: RectShape = new RectShape(rectGeometry, rectOptions);
131-
132-
const pathColor = args.options.markers.border.color;
133-
const path1 = new Path({
134-
stroke: {
135-
color: pathColor,
136-
width: 5,
137-
},
138-
});
139-
140-
path1.moveTo(0, 7).lineTo(20, 7).close();
141-
142-
const labelText = this.customMsgService.translate(
143-
this.getLabelText(args.series.name)
144-
);
145-
const labelFont = args.options.labels.font;
146-
const fontColor = args.options.labels.color;
147-
const textOptions = { font: labelFont, fill: { color: fontColor } };
148-
const text = new Text(labelText, new Point(27, 0), textOptions);
149-
150-
const group = new Group();
151-
152-
group.append(rect, path1, text);
153-
154-
if (!args.active) {
155-
group.opacity(0.5);
156-
}
157-
158-
return group;
159-
};
105+
@HostListener('window:resize', ['$event'])
106+
onResize(event: any): void {
107+
this.updateLegendPosition(event.target.innerWidth);
108+
}
160109

161-
private getLabelText(category: string): string {
162-
if (category === 'Real Estate') {
163-
return (category = 'realEstates');
164-
}
165-
return category.toLowerCase();
110+
private updateLegendPosition(width: number): void {
111+
this.legendPosition = width < 768 ? 'bottom' : 'top';
166112
}
167113

168114
private setDrilldownLevelData(): { text: string; value: number }[] {

examples-standalone/personal-finance-app/src/app/components/footer/footer.component.css

Whitespace-only changes.

examples-standalone/personal-finance-app/src/app/components/footer/footer.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { MessageService } from '@progress/kendo-angular-l10n';
77
standalone: true,
88
imports: [],
99
templateUrl: './footer.component.html',
10-
styleUrl: './footer.component.css',
1110
})
1211
export class FooterComponent {
1312
public currentYear = new Date().getFullYear();

examples-standalone/personal-finance-app/src/app/components/header/header.component.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ export class HeaderComponent {
3838
public suggestions: string[] = searchSuggestionsEn;
3939
public selectedLanguage = { locale: 'English', localeId: 'en-US' };
4040
public customMsgService: CustomMessagesService;
41+
public translations: Array<{ locale: string; localeId: string }> = [
42+
{ locale: 'English', localeId: 'en-US' },
43+
{ locale: 'Español', localeId: 'es-ES' },
44+
{ locale: 'Deutsch', localeId: 'de-DE' },
45+
{ locale: 'Français', localeId: 'fr-FR' },
46+
];
4147

4248
constructor(
4349
public messages: MessageService,
@@ -58,13 +64,6 @@ export class HeaderComponent {
5864
});
5965
}
6066

61-
public translations: Array<{ locale: string; localeId: string }> = [
62-
{ locale: 'English', localeId: 'en-US' },
63-
{ locale: 'Español', localeId: 'es-ES' },
64-
{ locale: 'Deutsch', localeId: 'de-DE' },
65-
{ locale: 'Français', localeId: 'fr-FR' },
66-
];
67-
6867
public changeLanguage(item: any): void {
6968
this.selectedLanguage = item;
7069
this.customMsgService.language = item.localeId;

examples-standalone/personal-finance-app/src/app/components/home/card-triple-view/card-triple-view.component.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@ import { MessageService } from '@progress/kendo-angular-l10n';
1818
})
1919
export class CardTripleViewComponent {
2020
@Input() public cardData!: OverviewCard;
21-
2221
public customMsgService: CustomMessagesService;
23-
24-
constructor(public intl: IntlService, public msgService: MessageService) {
25-
this.customMsgService = this.msgService as CustomMessagesService;
26-
}
27-
2822
public customCurrencyOptions: NumberFormatOptions = {
2923
style: 'currency',
3024
currencyDisplay: 'code',
3125
currency: 'USD',
3226
};
27+
28+
constructor(public intl: IntlService, public msgService: MessageService) {
29+
this.customMsgService = this.msgService as CustomMessagesService;
30+
}
3331
}

examples-standalone/personal-finance-app/src/app/components/home/home.component.html

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
<div class="k-px-15 k-px-sm-15 k-px-md-15 k-px-lg-15 k-px-xl-15 k-py-2 k-py-sm-1 k-py-md-1 k-py-lg-2 k-py-xl-2 k-pt-8">
22
<h4 class="k-h4 !k-mb-6 k-text-ellipsis">{{customMsgService.translate('overview')}}</h4>
33
<div class="k-d-grid k-grid-cols-12 k-gap-4 k-gap-lg-6 k-overflow-hidden">
4-
<!-- CMPCTCARD-2 Start -->
54
@for(card of overviewCards; track card){
65
<app-card-triple-view
76
class="k-col-span-12 k-col-span-md-12 k-col-span-lg-4 k-col-span-xl-4 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-align-items-start k-justify-content-center k-px-4 k-py-4 k-gap-2 k-rounded-xxl"
87
[cardData]="card"></app-card-triple-view>
98
}
10-
<!-- CMPCTCARD-2 End -->
11-
<!-- DASHBRDCARD-11 Start -->
129
<div
1310
class="k-col-span-12 k-col-span-xl-6 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-rounded-xxl k-gap-4 k-p-4">
1411
<div class="k-d-flex k-d-flex-col k-justify-content-between k-align-items-start k-gap-0">
@@ -22,8 +19,6 @@ <h6 class="k-h6 k-font-medium">{{customMsgService.translate('savings')}}</h6>
2219
}
2320
</div>
2421
</div>
25-
<!-- DASHBRDCARD-11 End -->
26-
<!-- DASHBRDCARD-11 Start -->
2722
<div
2823
class="k-col-span-12 k-col-span-xl-6 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-rounded-xxl k-gap-4 k-p-4">
2924
<div class="k-d-flex k-d-flex-col k-justify-content-between k-align-items-start k-gap-0">
@@ -51,7 +46,6 @@ <h6 class="k-h6 k-font-medium">{{customMsgService.translate('budgetUtilization')
5146
</div>
5247
</div>
5348
</div>
54-
<!-- DASHBRDCARD-11 End -->
5549
<div
5650
class="k-col-span-12 k-col-span-xl-12 k-d-flex k-flex-col k-flex-basis-0 k-flex-grow k-bg-surface-alt k-rounded-xxl k-gap-4 k-p-4 k-mb-4">
5751
<div class="k-d-flex k-d-flex-col k-justify-content-between k-align-items-start k-gap-0">

examples-standalone/personal-finance-app/src/app/components/home/saving-item/saving-item.component.css

Whitespace-only changes.

0 commit comments

Comments
 (0)