Browse Source

Merge branch 'main' into bugfix/fix-big.js-exception-in-report-endpoint

pull/1586/head
Thomas Kaul 3 years ago
committed by GitHub
parent
commit
81713658f0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      CHANGELOG.md
  2. 73
      README.md
  3. 5
      apps/api/src/app/info/info.service.ts
  4. 2
      apps/client/src/app/app.component.scss
  5. 2
      apps/client/src/app/components/access-table/access-table.component.scss
  6. 2
      apps/client/src/app/components/accounts-table/accounts-table.component.scss
  7. 2
      apps/client/src/app/components/admin-jobs/admin-jobs.scss
  8. 2
      apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.scss
  9. 2
      apps/client/src/app/components/admin-market-data/admin-market-data.scss
  10. 2
      apps/client/src/app/components/admin-overview/admin-overview.scss
  11. 2
      apps/client/src/app/components/admin-users/admin-users.scss
  12. 2
      apps/client/src/app/components/header/header.component.scss
  13. 2
      apps/client/src/app/components/home-holdings/home-holdings.scss
  14. 2
      apps/client/src/app/components/home-market/home-market.scss
  15. 2
      apps/client/src/app/components/home-overview/home-overview.scss
  16. 2
      apps/client/src/app/components/home-summary/home-summary.scss
  17. 2
      apps/client/src/app/components/positions/positions.component.scss
  18. 9
      apps/client/src/app/components/world-map-chart/world-map-chart.component.ts
  19. 4
      apps/client/src/app/pages/account/account-page.html
  20. 2
      apps/client/src/app/pages/admin/admin-page.scss
  21. 2
      apps/client/src/app/pages/home/home-page.scss
  22. 18
      apps/client/src/app/pages/landing/landing-page.component.ts
  23. 15
      apps/client/src/app/pages/landing/landing-page.html
  24. 2
      apps/client/src/app/pages/landing/landing-page.module.ts
  25. 6
      apps/client/src/app/pages/landing/landing-page.scss
  26. 4
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  27. 6
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  28. 3
      apps/client/src/app/pages/portfolio/allocations/allocations-page.html
  29. 2
      apps/client/src/app/pages/portfolio/portfolio-page.scss
  30. 2
      apps/client/src/app/pages/zen/zen-page.scss
  31. 638
      apps/client/src/locales/messages.fr.xlf
  32. 4
      apps/client/src/styles.scss
  33. 74
      apps/client/src/styles/bootstrap.scss
  34. 2
      apps/client/src/styles/ghostfolio-style.scss
  35. 1
      libs/common/src/lib/config.ts
  36. 2
      libs/common/src/lib/interfaces/info-item.interface.ts
  37. 2
      libs/ui/src/lib/activities-filter/activities-filter.component.scss
  38. 2
      libs/ui/src/lib/activities-table/activities-table.component.scss
  39. 2
      libs/ui/src/lib/holdings-table/holdings-table.component.scss

10
CHANGELOG.md

@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Added
- Extended the landing page by a global heat map of subscribers
- Added support for the thousand separator in the global heat map component
### Changed
- Improved the form of the import dividends dialog (disable while loading)
- Removed the deprecated `~` in _Sass_ imports
### Fixed
- Fixed an exception in the _X-ray_ section

73
README.md

@ -1,34 +1,26 @@
<div align="center">
<a href="https://ghostfol.io">
<img
alt="Ghostfolio Logo"
src="https://avatars.githubusercontent.com/u/82473144?s=200"
width="100"
/>
</a>
<h1>Ghostfolio</h1>
<p>
<strong>Open Source Wealth Management Software</strong>
</p>
<p>
<a href="https://ghostfol.io"><strong>Ghostfol.io</strong></a><a href="https://ghostfol.io/en/demo"><strong>Live Demo</strong></a> | <a href="https://ghostfol.io/en/pricing"><strong>Ghostfolio Premium</strong></a> | <a href="https://ghostfol.io/en/faq"><strong>FAQ</strong></a> | <a href="https://ghostfol.io/en/blog"><strong>Blog</strong></a> | <a href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"><strong>Slack</strong></a> | <a href="https://twitter.com/ghostfolio_"><strong>Twitter</strong></a>
</p>
<p>
<a href="https://www.buymeacoffee.com/ghostfolio">
<img src="https://img.shields.io/badge/Buy%20me%20a%20coffee-Support-yellow?logo=buymeacoffee"/></a>
<a href="#contributing">
<img src="https://img.shields.io/badge/Contributions-Welcome-orange.svg"/></a>
<a href="https://www.gnu.org/licenses/agpl-3.0" rel="nofollow">
<img src="https://img.shields.io/badge/License-AGPL%20v3-blue.svg" alt="License: AGPL v3"/></a>
</p>
[<img src="https://avatars.githubusercontent.com/u/82473144?s=200" width="100" alt="Ghostfolio logo">](https://ghostfol.io)
# Ghostfolio
**Open Source Wealth Management Software**
[**Ghostfol.io**](https://ghostfol.io) | [**Live Demo**](https://ghostfol.io/en/demo) | [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) | [**FAQ**](https://ghostfol.io/en/faq) |
[**Blog**](https://ghostfol.io/en/blog) | [**Slack**](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) | [**Twitter**](https://twitter.com/ghostfolio_)
[![Shield: Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-Support-yellow?logo=buymeacoffee)](https://www.buymeacoffee.com/ghostfolio)
[![Shield: Contributions Welcome](https://img.shields.io/badge/Contributions-Welcome-orange.svg)](#contributing)
[![Shield: License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
</div>
**Ghostfolio** is an open source wealth management software built with web technology. The application empowers busy people to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. The software is designed for personal use in continuous operation.
<div align="center" style="margin-top: 1rem; margin-bottom: 1rem;">
<a href="https://www.youtube.com/watch?v=yY6ObSQVJZk">
<img src="./apps/client/src/assets/images/video-preview.jpg" width="600"></a>
<div align="center">
[<img src="./apps/client/src/assets/images/video-preview.jpg" width="600" alt="Preview image of the Ghostfolio video trailer">](https://www.youtube.com/watch?v=yY6ObSQVJZk)
</div>
## Ghostfolio Premium
@ -63,8 +55,10 @@ Ghostfolio is for you if you are...
- ✅ Zen Mode
- ✅ Progressive Web App (PWA) with a mobile-first design
<div align="center" style="margin-top: 1rem; margin-bottom: 1rem;">
<img src="./apps/client/src/assets/images/screenshot.png" width="300">
<div align="center">
<img src="./apps/client/src/assets/images/screenshot.png" width="300" alt="Image of a phone showing the Ghostfolio app open">
</div>
## Technology Stack
@ -84,13 +78,9 @@ The frontend is built with [Angular](https://angular.io) and uses [Angular Mater
We provide official container images hosted on [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio) for `linux/amd64` and `linux/arm64`.
<div align="center">
<a href="https://www.buymeacoffee.com/ghostfolio">
<img
alt="Buy me a coffee button"
src="./apps/client/src/assets/images/button-buy-me-a-coffee.png"
width="150"
/>
</a>
[<img src="./apps/client/src/assets/images/button-buy-me-a-coffee.png" width="150" alt="Buy me a coffee button"/>](https://www.buymeacoffee.com/ghostfolio)
</div>
### Supported Environment Variables
@ -175,10 +165,13 @@ Please follow the instructions of the Ghostfolio [Unraid Community App](https://
### Start Server
<ol type="a">
<li>Debug: Run <code>yarn watch:server</code> and click "Launch Program" in <a href="https://code.visualstudio.com">Visual Studio Code</a></li>
<li>Serve: Run <code>yarn start:server</code></li>
</ol>
#### Debug
Run `yarn watch:server` and click _Launch Program_ in [Visual Studio Code](https://code.visualstudio.com)
#### Serve
Run `yarn start:server`
### Start Client
@ -278,7 +271,7 @@ Ghostfolio is **100% free** and **open source**. We encourage and support an act
Not sure what to work on? We have got some ideas. Please join the Ghostfolio [Slack channel](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg), tweet to [@ghostfolio\_](https://twitter.com/ghostfolio_) or send an e-mail to hi@ghostfol.io. We would love to hear from you.
If you like to support this project, get **[Ghostfolio Premium](https://ghostfol.io/en/pricing)** or **[Buy me a coffee](https://www.buymeacoffee.com/ghostfolio)**.
If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio).
## License

5
apps/api/src/app/info/info.service.ts

@ -7,6 +7,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import {
DEMO_USER_ID,
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_SLACK_COMMUNITY_USERS,
PROPERTY_STRIPE_CONFIG,
@ -92,6 +93,10 @@ export class InfoService {
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
globalPermissions.push(permissions.enableSubscription);
info.countriesOfSubscribers =
((await this.propertyService.getByKey(
PROPERTY_COUNTRIES_OF_SUBSCRIBERS
)) as string[]) ?? [];
info.stripePublicKey = this.configurationService.get('STRIPE_PUBLIC_KEY');
}

2
apps/client/src/app/app.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/access-table/access-table.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/accounts-table/accounts-table.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/admin-jobs/admin-jobs.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/admin-market-data/admin-market-data.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/admin-overview/admin-overview.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/admin-users/admin-users.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/header/header.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/home-holdings/home-holdings.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/home-market/home-market.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/home-overview/home-overview.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/home-summary/home-summary.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
apps/client/src/app/components/positions/positions.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

9
apps/client/src/app/components/world-map-chart/world-map-chart.component.ts

@ -7,6 +7,7 @@ import {
OnDestroy,
OnInit
} from '@angular/core';
import { getNumberFormatGroup } from '@ghostfolio/common/helper';
import svgMap from 'svgmap';
@Component({
@ -16,9 +17,10 @@ import svgMap from 'svgmap';
styleUrls: ['./world-map-chart.component.scss']
})
export class WorldMapChartComponent implements OnChanges, OnDestroy, OnInit {
@Input() baseCurrency: string;
@Input() countries: { [code: string]: { name: string; value: number } };
@Input() countries: { [code: string]: { name?: string; value: number } };
@Input() format: string;
@Input() isInPercent = false;
@Input() locale: string;
public isLoading = true;
public svgMapElement;
@ -71,7 +73,8 @@ export class WorldMapChartComponent implements OnChanges, OnDestroy, OnInit {
applyData: 'value',
data: {
value: {
format: this.isInPercent ? `{0}%` : `{0} ${this.baseCurrency}`
format: this.format,
thousandSeparator: getNumberFormatGroup(this.locale)
}
},
values: this.countries

4
apps/client/src/app/pages/account/account-page.html

@ -135,10 +135,10 @@
>Español (<ng-container i18n>Community</ng-container
>)</mat-option
>
<!--<mat-option value="fr"
<mat-option value="fr"
>Français (<ng-container i18n>Community</ng-container
>)</mat-option
>-->
>
<mat-option value="it"
>Italiano (<ng-container i18n>Community</ng-container
>)</mat-option

2
apps/client/src/app/pages/admin/admin-page.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
color: rgb(var(--dark-primary-text));

2
apps/client/src/app/pages/home/home-page.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
color: rgb(var(--dark-primary-text));

18
apps/client/src/app/pages/landing/landing-page.component.ts

@ -13,10 +13,14 @@ import { Subject } from 'rxjs';
templateUrl: './landing-page.html'
})
export class LandingPageComponent implements OnDestroy, OnInit {
public countriesOfSubscribersMap: {
[code: string]: { value: number };
} = {};
public currentYear = format(new Date(), 'yyyy');
public demoAuthToken: string;
public deviceType: string;
public hasPermissionForStatistics: boolean;
public hasPermissionForSubscription: boolean;
public hasPermissionToCreateUser: boolean;
public statistics: Statistics;
public testimonials = [
@ -48,13 +52,25 @@ export class LandingPageComponent implements OnDestroy, OnInit {
private dataService: DataService,
private deviceService: DeviceDetectorService
) {
const { globalPermissions, statistics } = this.dataService.fetchInfo();
const { countriesOfSubscribers, globalPermissions, statistics } =
this.dataService.fetchInfo();
for (const country of countriesOfSubscribers) {
this.countriesOfSubscribersMap[country] = {
value: 1
};
}
this.hasPermissionForStatistics = hasPermission(
globalPermissions,
permissions.enableStatistics
);
this.hasPermissionForSubscription = hasPermission(
globalPermissions,
permissions.enableSubscription
);
this.hasPermissionToCreateUser = hasPermission(
globalPermissions,
permissions.createUserAccount

15
apps/client/src/app/pages/landing/landing-page.html

@ -269,6 +269,21 @@
</div>
</div>
<div *ngIf="hasPermissionForSubscription" class="row my-5">
<div class="col-12">
<h2 class="h4 text-center">
Members from around the globe are using
<a href="pricing"><strong>Ghostfolio Premium</strong></a>
</h2>
</div>
<div class="col-md-8 customer-map-container offset-md-2">
<gf-world-map-chart
format="👻"
[countries]="countriesOfSubscribersMap"
></gf-world-map-chart>
</div>
</div>
<div class="row my-3">
<div class="col-12">
<h2 class="h4 mb-1 text-center">

2
apps/client/src/app/pages/landing/landing-page.module.ts

@ -3,6 +3,7 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module';
import { GfLogoModule } from '@ghostfolio/ui/logo';
import { GfValueModule } from '@ghostfolio/ui/value';
@ -15,6 +16,7 @@ import { LandingPageComponent } from './landing-page.component';
CommonModule,
GfLogoModule,
GfValueModule,
GfWorldMapChartModule,
LandingPageRoutingModule,
MatButtonModule,
MatCardModule,

6
apps/client/src/app/pages/landing/landing-page.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;
@ -9,6 +9,10 @@
}
}
.customer-map-container {
aspect-ratio: 16 / 9;
}
.downloads {
img {
height: 2.5rem;

4
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts

@ -56,6 +56,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.data?.activityTypes?.[0] === 'DIVIDEND'
) {
this.mode = 'DIVIDEND';
this.uniqueAssetForm.controls['uniqueAsset'].disable();
this.dataService
.fetchPositions({
@ -72,6 +73,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.holdings = sortBy(positions, ({ name }) => {
return name.toLowerCase();
});
this.uniqueAssetForm.controls['uniqueAsset'].enable();
this.changeDetectorRef.markForCheck();
});
@ -111,6 +113,8 @@ export class ImportActivitiesDialog implements OnDestroy {
}
public onLoadDividends() {
this.uniqueAssetForm.controls['uniqueAsset'].disable();
const { dataSource, symbol } =
this.uniqueAssetForm.controls['uniqueAsset'].value;

6
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

@ -84,6 +84,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
};
public user: User;
public worldMapChartFormat: string;
private unsubscribeSubject = new Subject<void>();
@ -193,6 +194,11 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
...tagFilters
];
this.worldMapChartFormat =
this.hasImpersonationId || this.user.settings.isRestrictedView
? `{0}%`
: `{0} ${this.user?.settings?.baseCurrency}`;
this.changeDetectorRef.markForCheck();
}
});

3
apps/client/src/app/pages/portfolio/allocations/allocations-page.html

@ -257,9 +257,10 @@
</mat-card-header>
<mat-card-content>
<gf-world-map-chart
[baseCurrency]="user?.settings?.baseCurrency"
[countries]="countries"
[format]="worldMapChartFormat"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[locale]="user?.settings?.locale"
></gf-world-map-chart>
<div class="row">
<div class="col-xs-12 col-md-4 my-2">

2
apps/client/src/app/pages/portfolio/portfolio-page.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
color: rgb(var(--dark-primary-text));

2
apps/client/src/app/pages/zen/zen-page.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
color: rgb(var(--dark-primary-text));

638
apps/client/src/locales/messages.fr.xlf

File diff suppressed because it is too large

4
apps/client/src/styles.scss

@ -3,9 +3,9 @@
@import './styles/bootstrap';
@import './styles/table';
@import '~angular-material-css-vars/src/lib/main';
@import 'node_modules/angular-material-css-vars/src/lib/main';
@import '~svgmap/dist/svgMap';
@import 'node_modules/svgmap/dist/svgMap';
$mat-css-dark-theme-selector: '.is-dark-theme';
$mat-css-light-theme-selector: '.is-light-theme';

74
apps/client/src/styles/bootstrap.scss

@ -5,40 +5,40 @@
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@import '~bootstrap/scss/functions';
@import '~bootstrap/scss/variables';
@import '~bootstrap/scss/mixins';
@import '~bootstrap/scss/root';
@import '~bootstrap/scss/reboot';
@import '~bootstrap/scss/type';
@import '~bootstrap/scss/images';
// @import '~bootstrap/scss/code';
@import '~bootstrap/scss/grid';
// @import '~bootstrap/scss/tables';
// @import '~bootstrap/scss/forms';
// @import '~bootstrap/scss/buttons';
// @import '~bootstrap/scss/transitions';
// @import '~bootstrap/scss/dropdown';
// @import '~bootstrap/scss/button-group';
// @import '~bootstrap/scss/input-group';
// @import '~bootstrap/scss/custom-forms';
// @import '~bootstrap/scss/nav';
// @import '~bootstrap/scss/navbar';
// @import '~bootstrap/scss/card';
// @import '~bootstrap/scss/breadcrumb';
// @import '~bootstrap/scss/pagination';
@import '~bootstrap/scss/badge';
// @import '~bootstrap/scss/jumbotron';
// @import '~bootstrap/scss/alert';
// @import '~bootstrap/scss/progress';
// @import '~bootstrap/scss/media';
// @import '~bootstrap/scss/list-group';
// @import '~bootstrap/scss/close';
// @import '~bootstrap/scss/toasts';
// @import '~bootstrap/scss/modal';
// @import '~bootstrap/scss/tooltip';
// @import '~bootstrap/scss/popover';
// @import '~bootstrap/scss/carousel';
// @import '~bootstrap/scss/spinners';
@import '~bootstrap/scss/utilities';
// @import '~bootstrap/scss/print';
@import 'node_modules/bootstrap/scss/functions';
@import 'node_modules/bootstrap/scss/variables';
@import 'node_modules/bootstrap/scss/mixins';
@import 'node_modules/bootstrap/scss/root';
@import 'node_modules/bootstrap/scss/reboot';
@import 'node_modules/bootstrap/scss/type';
@import 'node_modules/bootstrap/scss/images';
// @import 'node_modules/bootstrap/scss/code';
@import 'node_modules/bootstrap/scss/grid';
// @import 'node_modules/bootstrap/scss/tables';
// @import 'node_modules/bootstrap/scss/forms';
// @import 'node_modules/bootstrap/scss/buttons';
// @import 'node_modules/bootstrap/scss/transitions';
// @import 'node_modules/bootstrap/scss/dropdown';
// @import 'node_modules/bootstrap/scss/button-group';
// @import 'node_modules/bootstrap/scss/input-group';
// @import 'node_modules/bootstrap/scss/custom-forms';
// @import 'node_modules/bootstrap/scss/nav';
// @import 'node_modules/bootstrap/scss/navbar';
// @import 'node_modules/bootstrap/scss/card';
// @import 'node_modules/bootstrap/scss/breadcrumb';
// @import 'node_modules/bootstrap/scss/pagination';
@import 'node_modules/bootstrap/scss/badge';
// @import 'node_modules/bootstrap/scss/jumbotron';
// @import 'node_modules/bootstrap/scss/alert';
// @import 'node_modules/bootstrap/scss/progress';
// @import 'node_modules/bootstrap/scss/media';
// @import 'node_modules/bootstrap/scss/list-group';
// @import 'node_modules/bootstrap/scss/close';
// @import 'node_modules/bootstrap/scss/toasts';
// @import 'node_modules/bootstrap/scss/modal';
// @import 'node_modules/bootstrap/scss/tooltip';
// @import 'node_modules/bootstrap/scss/popover';
// @import 'node_modules/bootstrap/scss/carousel';
// @import 'node_modules/bootstrap/scss/spinners';
@import 'node_modules/bootstrap/scss/utilities';
// @import 'node_modules/bootstrap/scss/print';

2
apps/client/src/styles/ghostfolio-style.scss

@ -1,6 +1,6 @@
$mat-css-dark-theme-selector: '.is-dark-theme';
@import '~angular-material-css-vars/src/lib/public-util';
@import 'node_modules/angular-material-css-vars/src/lib/public-util';
$alpha-disabled-text: 0.38;
$alpha-hover: 0.04;

1
libs/common/src/lib/config.ts

@ -72,6 +72,7 @@ export const GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS: JobOptions = {
export const MAX_CHART_ITEMS = 365;
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
export const PROPERTY_COUPONS = 'COUPONS';
export const PROPERTY_CURRENCIES = 'CURRENCIES';
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';

2
libs/common/src/lib/interfaces/info-item.interface.ts

@ -6,12 +6,12 @@ import { Subscription } from './subscription.interface';
export interface InfoItem {
baseCurrency: string;
benchmarks: Partial<SymbolProfile>[];
countriesOfSubscribers?: string[];
currencies: string[];
demoAuthToken: string;
fearAndGreedDataSource?: string;
globalPermissions: string[];
isReadOnlyMode?: boolean;
lastDataGathering?: Date;
platforms: { id: string; name: string }[];
statistics: Statistics;
stripePublicKey?: string;

2
libs/ui/src/lib/activities-filter/activities-filter.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
libs/ui/src/lib/activities-table/activities-table.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

2
libs/ui/src/lib/holdings-table/holdings-table.component.scss

@ -1,4 +1,4 @@
@import '~apps/client/src/styles/ghostfolio-style';
@import 'apps/client/src/styles/ghostfolio-style';
:host {
display: block;

Loading…
Cancel
Save