refactor: pre release cleanup all over the place

This commit is contained in:
Rainer Killinger
2022-10-21 16:01:44 +00:00
parent c3130a392a
commit acdd93eb99
20 changed files with 215 additions and 139 deletions

View File

@@ -94,12 +94,13 @@ export class AppComponent implements AfterContentInit {
}); });
this.platform.ready().then(async () => { this.platform.ready().then(async () => {
if (Capacitor.isNativePlatform()) { if (Capacitor.isNativePlatform()) {
await StatusBar.setStyle({style: Style.Dark});
if (Capacitor.getPlatform() === 'android') {
await StatusBar.setBackgroundColor({ await StatusBar.setBackgroundColor({
color: getComputedStyle(document.documentElement) color: getComputedStyle(document.documentElement)
.getPropertyValue('--ion-color-primary') .getPropertyValue('--ion-color-primary')
.trim(), .trim(),
}); });
await StatusBar.setStyle({style: Style.Dark});
await StatusBar.setOverlaysWebView({overlay: false}); await StatusBar.setOverlaysWebView({overlay: false});
await NavigationBar.setColor({ await NavigationBar.setColor({
color: getComputedStyle(document.documentElement) color: getComputedStyle(document.documentElement)
@@ -108,6 +109,7 @@ export class AppComponent implements AfterContentInit {
darkButtons: true, darkButtons: true,
}); });
} }
}
await this.authNotificationsInit(); await this.authNotificationsInit();
// set order of categories in settings // set order of categories in settings
@@ -120,7 +122,7 @@ export class AppComponent implements AfterContentInit {
}); });
window.addEventListener('touchmove', this.touchMoveEvent, true); window.addEventListener('touchmove', this.touchMoveEvent, true);
if (Capacitor.isNativePlatform()) { if (Capacitor.getPlatform() === 'ios') {
Keyboard.setResizeMode({mode: KeyboardResize.None}); Keyboard.setResizeMode({mode: KeyboardResize.None});
} }
} }

View File

@@ -46,6 +46,11 @@ export class AddEventActionChipComponent implements OnDestroy {
*/ */
associatedDateSeries: Promise<SCDateSeries[]>; associatedDateSeries: Promise<SCDateSeries[]>;
/**
* Color
*/
color: string;
/** /**
* Disabled * Disabled
*/ */
@@ -56,6 +61,9 @@ export class AddEventActionChipComponent implements OnDestroy {
*/ */
icon: string; icon: string;
/**
* Current state of icon fill
*/
iconFill: boolean; iconFill: boolean;
/** /**
@@ -98,11 +106,12 @@ export class AddEventActionChipComponent implements OnDestroy {
*/ */
applyState(state: AddEventStates) { applyState(state: AddEventStates) {
this.state = state; this.state = state;
const {label, icon, disabled, fill} = this.states[state]; const {label, icon, disabled, fill, color} = this.states[state];
this.label = label; this.label = label;
this.icon = icon; this.icon = icon;
this.iconFill = fill; this.iconFill = fill;
this.disabled = disabled; this.disabled = disabled;
this.color = color;
} }
/** /**

View File

@@ -28,23 +28,27 @@ export const AddEventStatesMap = {
fill: true, fill: true,
label: 'data.chips.add_events.ADDED_ALL', label: 'data.chips.add_events.ADDED_ALL',
disabled: false, disabled: false,
color: 'success',
}, },
[AddEventStates.ADDED_SOME]: { [AddEventStates.ADDED_SOME]: {
icon: SCIcon`event`, icon: SCIcon`event`,
fill: true, fill: true,
label: 'data.chips.add_events.ADDED_SOME', label: 'data.chips.add_events.ADDED_SOME',
disabled: false, disabled: false,
color: 'success',
}, },
[AddEventStates.REMOVED_ALL]: { [AddEventStates.REMOVED_ALL]: {
icon: SCIcon`calendar_today`, icon: SCIcon`calendar_today`,
fill: false, fill: false,
label: 'data.chips.add_events.REMOVED_ALL', label: 'data.chips.add_events.REMOVED_ALL',
disabled: false, disabled: false,
color: 'primary',
}, },
[AddEventStates.UNAVAILABLE]: { [AddEventStates.UNAVAILABLE]: {
icon: SCIcon`event_busy`, icon: SCIcon`event_busy`,
fill: false, fill: false,
label: 'data.chips.add_events.UNAVAILABLE', label: 'data.chips.add_events.UNAVAILABLE',
disabled: true, disabled: true,
color: 'dark',
}, },
}; };

View File

@@ -19,6 +19,8 @@
@chipTransition @chipTransition
[disabled]="disabled" [disabled]="disabled"
(click)="$event.stopPropagation(); editModal.present()" (click)="$event.stopPropagation(); editModal.present()"
[color]="color"
[outline]="true"
> >
<ion-icon [name]="icon" [fill]="iconFill"></ion-icon> <ion-icon [name]="icon" [fill]="iconFill"></ion-icon>
<ion-label>{{ label | translate }}</ion-label> <ion-label>{{ label | translate }}</ion-label>

View File

@@ -19,12 +19,15 @@
}}</ion-card-header> }}</ion-card-header>
<ion-card-content> <ion-card-content>
<div *ngFor="let offer of offers"> <div *ngFor="let offer of offers">
<p *ngIf="offer.inPlace"> <ion-grid>
<ion-row>
<ion-col>
<ion-icon name="pin_drop"></ion-icon> <ion-icon name="pin_drop"></ion-icon>
<a [routerLink]="['/data-detail', offer.inPlace.uid]">{{ <a [routerLink]="['/data-detail', offer.inPlace.uid]">
'name' | thingTranslate: offer.inPlace {{ 'name' | thingTranslate: offer.inPlace }}
}}</a </a>
>,&nbsp; </ion-col>
<ion-col>
<span <span
*ngIf=" *ngIf="
offer.availabilityRange.gt offer.availabilityRange.gt
@@ -32,7 +35,6 @@
: offer.availabilityRange.gte : offer.availabilityRange.gte
" "
> >
<ion-icon name="calendar_today"></ion-icon>
{{ {{
(offer.availabilityRange.gt (offer.availabilityRange.gt
? offer.availabilityRange.gt ? offer.availabilityRange.gt
@@ -40,11 +42,15 @@
) | amDateFormat: 'll' ) | amDateFormat: 'll'
}} }}
</span> </span>
</p> </ion-col>
</ion-row>
</ion-grid>
<ion-grid *ngIf="offer.prices"> <ion-grid *ngIf="offer.prices">
<ion-row *ngFor="let group of objectKeys(offer.prices)"> <ion-row *ngFor="let group of objectKeys(offer.prices)">
<ion-col>{{ group | titlecase }}</ion-col> <ion-col *ngIf="group !== 'default'">{{
<ion-col width-20 text-right> 'data.detail.offers.' + group | translate
}}</ion-col>
<ion-col *ngIf="group !== 'default'" width-20 text-right>
<p> <p>
{{ {{
offer.prices[group] | currency: 'EUR':'symbol':undefined:'de' offer.prices[group] | currency: 'EUR':'symbol':undefined:'de'

View File

@@ -19,6 +19,8 @@ ion-item {
@include border-radius-in-parallax(var(--border-radius-default)); @include border-radius-in-parallax(var(--border-radius-default));
overflow: hidden; overflow: hidden;
--inner-padding-end: 0; --inner-padding-end: 0;
--padding-start: var(--spacing-sm);
margin: var(--spacing-sm);
ion-thumbnail { ion-thumbnail {
--ion-margin: var(--spacing-xs); --ion-margin: var(--spacing-xs);

View File

@@ -20,6 +20,7 @@ import {
AnimationBuilder, AnimationBuilder,
AnimationController, AnimationController,
} from '@ionic/angular'; } from '@ionic/angular';
import {Capacitor} from '@capacitor/core';
import { import {
SCFacet, SCFacet,
SCFeatureConfiguration, SCFeatureConfiguration,
@@ -250,8 +251,10 @@ export class SearchPageComponent implements OnInit, OnDestroy {
* Hides keyboard in native app environments * Hides keyboard in native app environments
*/ */
hideKeyboard() { hideKeyboard() {
if (Capacitor.isNativePlatform()) {
Keyboard.hide(); Keyboard.hide();
} }
}
/** /**
* Set starting values (e.g. forced filter, which can be set in components inheriting this one) * Set starting values (e.g. forced filter, which can be set in components inheriting this one)

View File

@@ -8,15 +8,15 @@
</ion-col> </ion-col>
<ion-col> <ion-col>
<ion-card *ngIf="item.characteristics"> <ion-card *ngIf="item.characteristics">
<ion-card-header>{{ <ion-card-header class="no-padding-inline-start">{{
'characteristics' | propertyNameTranslate: item | titlecase 'data.types.dish.CHARACTERISTICS' | translate
}}</ion-card-header> }}</ion-card-header>
<ion-card-content <ion-card-content class="no-padding-inline-start">
<p
*ngFor=" *ngFor="
let characteristic of 'characteristics' | thingTranslate: item let characteristic of 'characteristics' | thingTranslate: item
" "
> >
<p>
<img <img
*ngIf="characteristic.image" *ngIf="characteristic.image"
[src]="characteristic.image" [src]="characteristic.image"
@@ -33,12 +33,6 @@
*ngIf="item.offers" *ngIf="item.offers"
[offers]="item.offers" [offers]="item.offers"
></stapps-offers-detail> ></stapps-offers-detail>
<stapps-simple-card
*ngIf="item.additives"
[title]="'additives' | propertyNameTranslate: item | titlecase"
[content]="'additives' | thingTranslate: item | join: ', '"
>
</stapps-simple-card>
<ion-card *ngIf="item.nutrition"> <ion-card *ngIf="item.nutrition">
<ion-card-header>{{ <ion-card-header>{{
'data.types.dish.detail.AVG_NUTRITION_INFO' | translate 'data.types.dish.detail.AVG_NUTRITION_INFO' | translate
@@ -88,3 +82,9 @@
</ion-grid> </ion-grid>
</ion-card-content> </ion-card-content>
</ion-card> </ion-card>
<stapps-simple-card
*ngIf="item.additives"
[title]="'additives' | propertyNameTranslate: item | titlecase"
[content]="'additives' | thingTranslate: item | join: ', '"
>
</stapps-simple-card>

View File

@@ -6,7 +6,9 @@
<p class="title-sub ion-hide-sm-down"> <p class="title-sub ion-hide-sm-down">
{{ 'description' | thingTranslate: item }} {{ 'description' | thingTranslate: item }}
</p> </p>
<p>{{ 'categories' | thingTranslate: item | join: ', ' }}</p> <ion-note>{{
'categories' | thingTranslate: item | join: ', '
}}</ion-note>
</div> </div>
</ion-col> </ion-col>
<ion-col width-10 text-right> <ion-col width-10 text-right>

View File

@@ -13,22 +13,43 @@
~ this program. If not, see <https://www.gnu.org/licenses/>. ~ this program. If not, see <https://www.gnu.org/licenses/>.
--> -->
<ion-grid>
<ion-row>
<ion-col>
<stapps-simple-card
*ngIf="item.type === 'academic event' && item.categories"
[title]="'categories' | propertyNameTranslate: item | titlecase"
[content]="'categories' | thingTranslate: item"
>
</stapps-simple-card>
</ion-col>
<ion-col>
<ion-card> <ion-card>
<ion-card-content>
<stapps-add-event-action-chip <stapps-add-event-action-chip
*ngIf="item.type === 'academic event'" *ngIf="item.type === 'academic event'"
[item]="item" [item]="item"
> >
</stapps-add-event-action-chip> </stapps-add-event-action-chip>
</ion-card-content>
</ion-card> </ion-card>
</ion-col>
</ion-row>
</ion-grid>
<stapps-simple-card <stapps-simple-card
*ngIf="item.type === 'academic event' && item.categories" *ngIf="item.performers"
[title]="'categories' | propertyNameTranslate: item" [title]="'performers' | propertyNameTranslate: item | titlecase"
[content]="'categories' | thingTranslate: item" [content]="item.performers"
> ></stapps-simple-card>
</stapps-simple-card> <stapps-simple-card
*ngIf="item.organizers"
[title]="'organizers' | propertyNameTranslate: item | titlecase"
[content]="item.organizers"
></stapps-simple-card>
<stapps-simple-card
*ngIf="item.type === 'academic event' && item.majors | titlecase"
[title]="'majors' | propertyNameTranslate: item"
[content]="item.majors"
></stapps-simple-card>
<ion-card *ngIf="item.catalogs"> <ion-card *ngIf="item.catalogs">
<ion-card-header>{{ <ion-card-header>{{
$any('superCatalogs' | propertyNameTranslate: 'catalog') | titlecase $any('superCatalogs' | propertyNameTranslate: 'catalog') | titlecase
@@ -45,18 +66,3 @@
</event-route-path> </event-route-path>
</ion-card-content> </ion-card-content>
</ion-card> </ion-card>
<stapps-simple-card
*ngIf="item.performers"
[title]="'performers' | propertyNameTranslate: item"
[content]="item.performers"
></stapps-simple-card>
<stapps-simple-card
*ngIf="item.organizers"
[title]="'organizers' | propertyNameTranslate: item"
[content]="item.organizers"
></stapps-simple-card>
<stapps-simple-card
*ngIf="item.type === 'academic event' && item.majors"
[title]="'majors' | propertyNameTranslate: item"
[content]="item.majors"
></stapps-simple-card>

View File

@@ -2,23 +2,32 @@
<ion-row *ngIf="item.type === 'academic event'"> <ion-row *ngIf="item.type === 'academic event'">
<ion-col> <ion-col>
<div class="ion-text-wrap"> <div class="ion-text-wrap">
<ion-label class="title">{{ item.name }}</ion-label> <ion-label class="title">{{ 'name' | thingTranslate: item }}</ion-label>
<p *ngIf="item.description" class="title-sub">{{ item.description }}</p> <p *ngIf="item.description" class="title-sub">
<p *ngIf="item.academicTerms" class="title-sub"> {{ 'description' | thingTranslate: item }}
{{ item.academicTerms[0].name }}
</p> </p>
<ion-note>{{ item.type }} ({{ item.categories.join(', ') }})</ion-note> <p *ngIf="item.academicTerms" class="title-sub">
{{ 'name' | thingTranslate: item.academicTerms[0] }}
</p>
<ion-note *ngIf="!item.categories">{{
'type' | thingTranslate: item
}}</ion-note>
<ion-note *ngIf="item.categories">
{{ 'categories' | thingTranslate: item | join: ', ' }}
</ion-note>
</div> </div>
</ion-col> </ion-col>
</ion-row> </ion-row>
<ion-row *ngIf="item.type === 'sport course'"> <ion-row *ngIf="item.type === 'sport course'">
<ion-col> <ion-col>
<ion-label class="title">{{ item.name }}</ion-label> <ion-label class="title">{{ 'name' | thingTranslate: item }}</ion-label>
<p *ngIf="item.description" class="title-sub">{{ item.description }}</p> <p *ngIf="item.description" class="title-sub">
<p *ngIf="item.academicTerms" class="title-sub"> {{ 'description' | thingTranslate: item }}
{{ item.academicTerms[0].name }}
</p> </p>
<ion-note>{{ item.type }}</ion-note> <p *ngIf="item.academicTerms" class="title-sub">
{{ 'name' | thingTranslate: item.academicTerms[0] }}
</p>
<ion-note>{{ 'type' | thingTranslate: item }}</ion-note>
</ion-col> </ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>

View File

@@ -1,5 +1,6 @@
<ng-container> <ng-container>
<div *ngIf="dishes | async as dishes; else loading"> <ng-container *ngIf="dishes | async as dishes; else loading">
<ng-container *ngIf="(dishes | json) !== '{}'; else empty">
<ion-segment [(ngModel)]="selectedDay" mode="md"> <ion-segment [(ngModel)]="selectedDay" mode="md">
<ion-segment-button <ion-segment-button
*ngFor="let day of dishes | keyvalue" *ngFor="let day of dishes | keyvalue"
@@ -13,8 +14,8 @@
}}</ion-label> }}</ion-label>
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
<div [ngSwitch]="selectedDay"> <ng-container [ngSwitch]="selectedDay">
<div *ngFor="let date of dishes | keyvalue"> <ng-container *ngFor="let date of dishes | keyvalue">
<ion-list *ngSwitchCase="date.key"> <ion-list *ngSwitchCase="date.key">
<ng-container *ngFor="let dish of date.value; index as i"> <ng-container *ngFor="let dish of date.value; index as i">
<stapps-data-list-item <stapps-data-list-item
@@ -23,9 +24,10 @@
></stapps-data-list-item> ></stapps-data-list-item>
</ng-container> </ng-container>
</ion-list> </ion-list>
</div> </ng-container>
</div> </ng-container>
</div> </ng-container>
</ng-container>
<ng-template #loading> <ng-template #loading>
<ion-segment> <ion-segment>
<stapps-skeleton-segment-button <stapps-skeleton-segment-button
@@ -38,4 +40,13 @@
></stapps-skeleton-list-item> ></stapps-skeleton-list-item>
</ion-list> </ion-list>
</ng-template> </ng-template>
<ng-template #empty>
<ion-card>
<ion-card-header>
<ion-label class="title">
{{ 'data.types.dish.EMPTY_DISHES' | translate }}
</ion-label>
</ion-card-header>
</ion-card>
</ng-template>
</ng-container> </ng-container>

View File

@@ -289,8 +289,10 @@ export class MapPageComponent {
* Hides keyboard in native app environments * Hides keyboard in native app environments
*/ */
hideKeyboard() { hideKeyboard() {
if (Capacitor.isNativePlatform()) {
Keyboard.hide(); Keyboard.hide();
} }
}
/** /**
* Subscribe to needed observables and get the location status when user is entering the page * Subscribe to needed observables and get the location status when user is entering the page

View File

@@ -46,6 +46,7 @@
width: 100%; width: 100%;
padding-right: 0; padding-right: 0;
} }
margin-bottom: var(--spacing-md);
} }
ion-button.hidden { ion-button.hidden {

View File

@@ -33,6 +33,7 @@
margin-bottom: var(--spacing-md); margin-bottom: var(--spacing-md);
} }
.user-card-wrapper { .user-card-wrapper {
margin-bottom: 0;
.user-card { .user-card {
border-radius: var(--border-radius-default); border-radius: var(--border-radius-default);
position: relative; position: relative;

View File

@@ -59,7 +59,7 @@ export interface SCSection extends SCThing {
export const profilePageSections: SCSection[] = [ export const profilePageSections: SCSection[] = [
{ {
name: 'Your StApps', name: '',
links: [ links: [
{ {
name: 'Favorites', name: 'Favorites',
@@ -89,7 +89,7 @@ export const profilePageSections: SCSection[] = [
link: ['/catalog'], link: ['/catalog'],
translations: { translations: {
de: { de: {
name: 'Vorlesungs Verzeichnis', name: 'Vorlesungs-verzeichnis',
}, },
}, },
...SCSectionLinkConstantValues, ...SCSectionLinkConstantValues,
@@ -117,12 +117,12 @@ export const profilePageSections: SCSection[] = [
...SCSectionLinkConstantValues, ...SCSectionLinkConstantValues,
}, },
{ {
name: 'About StApps', name: 'About Open StApps',
icon: SCIcon`info`, icon: SCIcon`info`,
link: ['/about'], link: ['/about'],
translations: { translations: {
de: { de: {
name: 'Über StApps', name: 'Über Open StApps',
}, },
}, },
...SCSectionLinkConstantValues, ...SCSectionLinkConstantValues,
@@ -130,7 +130,7 @@ export const profilePageSections: SCSection[] = [
], ],
translations: { translations: {
de: { de: {
name: 'Dein StApps', name: '',
}, },
}, },
...SCSectionConstantValues, ...SCSectionConstantValues,
@@ -164,12 +164,12 @@ export const profilePageSections: SCSection[] = [
authProvider: 'paia', authProvider: 'paia',
links: [ links: [
{ {
name: 'Library Search', name: 'Library Catalog',
icon: SCIcon`local_library`, icon: SCIcon`local_library`,
link: ['/hebis-search'], link: ['/hebis-search'],
translations: { translations: {
de: { de: {
name: 'Bibliotheks Suche', name: 'Bibliotheks-katalog',
}, },
}, },
...SCSectionLinkConstantValues, ...SCSectionLinkConstantValues,
@@ -181,7 +181,7 @@ export const profilePageSections: SCSection[] = [
link: ['/library-account/profile'], link: ['/library-account/profile'],
translations: { translations: {
de: { de: {
name: 'Bibliotheks Konto', name: 'Bibliotheks-konto',
}, },
}, },
...SCSectionLinkConstantValues, ...SCSectionLinkConstantValues,

View File

@@ -66,7 +66,7 @@
}}</ion-label> }}</ion-label>
</ion-item> </ion-item>
--> -->
<ion-item> <ion-item *ngIf="!isWeb">
<ion-button <ion-button
[disabled]="isWeb || !syncEnabled" [disabled]="isWeb || !syncEnabled"
fill="clear" fill="clear"
@@ -77,10 +77,10 @@
</ion-button> </ion-button>
</ion-item> </ion-item>
<ion-item *ngIf="isWeb"> <ion-item *ngIf="isWeb">
<ion-label color="medium" <ion-label color="medium" class="ion-text-wrap"
><i>{{ ><b>{{
'settings.calendar.sync.unavailableWeb' | translate 'settings.calendar.sync.unavailableWeb' | translate
}}</i></ion-label }}</b></ion-label
> >
</ion-item> </ion-item>
</ion-item-group> </ion-item-group>

View File

@@ -65,7 +65,7 @@
"title_morning": "Guten Morgen", "title_morning": "Guten Morgen",
"title_day": "Guten Tag", "title_day": "Guten Tag",
"title_evening": "Guten Abend", "title_evening": "Guten Abend",
"title_night": "Hallo" "title_night": "Gute Nacht"
}, },
"navigation": { "navigation": {
"title": "Dashboard", "title": "Dashboard",
@@ -118,7 +118,11 @@
"POST_OFFICE_BOX": "Postfach" "POST_OFFICE_BOX": "Postfach"
}, },
"offers": { "offers": {
"TITLE": "Angebote" "TITLE": "Angebote",
"default": "Standard",
"employee": "Angestellte",
"guest": "Gäste",
"student": "Studuierende"
} }
}, },
"chips": { "chips": {
@@ -137,6 +141,8 @@
}, },
"types": { "types": {
"dish": { "dish": {
"CHARACTERISTICS": "Zutaten",
"EMPTY_DISHES": "Keine Angebote verfügbar",
"detail": { "detail": {
"AVG_NUTRITION_INFO": "Durchschnittliche Nährwertangaben", "AVG_NUTRITION_INFO": "Durchschnittliche Nährwertangaben",
"CALORIES": "Brennwert", "CALORIES": "Brennwert",
@@ -429,7 +435,7 @@
} }
}, },
"profile": { "profile": {
"title": "Studium", "title": "Meine App",
"titleLogins": "Logins", "titleLogins": "Logins",
"titleCourses": "Meine Kurse", "titleCourses": "Meine Kurse",
"role_guest": "Gastnutzer", "role_guest": "Gastnutzer",

View File

@@ -65,7 +65,7 @@
"title_morning": "Good Morning", "title_morning": "Good Morning",
"title_day": "Good Day", "title_day": "Good Day",
"title_evening": "Good Evening", "title_evening": "Good Evening",
"title_night": "Hello" "title_night": "Good Night"
}, },
"navigation": { "navigation": {
"title": "Dashboard", "title": "Dashboard",
@@ -118,7 +118,11 @@
"POST_OFFICE_BOX": "post office box" "POST_OFFICE_BOX": "post office box"
}, },
"offers": { "offers": {
"TITLE": "offers" "TITLE": "offers",
"default": "Default",
"employee": "Employees",
"guest": "Guests",
"student": "Students"
} }
}, },
"chips": { "chips": {
@@ -137,6 +141,8 @@
}, },
"types": { "types": {
"dish": { "dish": {
"CHARACTERISTICS": "Ingredients",
"EMPTY_DISHES": "No Offers Available",
"detail": { "detail": {
"AVG_NUTRITION_INFO": "Average Nutrition Facts", "AVG_NUTRITION_INFO": "Average Nutrition Facts",
"CALORIES": "Calories", "CALORIES": "Calories",
@@ -429,7 +435,7 @@
} }
}, },
"profile": { "profile": {
"title": "Study", "title": "My App",
"titleLogins": "Logins", "titleLogins": "Logins",
"titleCourses": "My Courses", "titleCourses": "My Courses",
"role_guest": "guest user", "role_guest": "guest user",

View File

@@ -2,6 +2,10 @@
padding-right: 0 !important; padding-right: 0 !important;
} }
.no-padding-inline-start {
padding-inline-start: 0 !important;
}
.display-flex { .display-flex {
display: flex; display: flex;
} }