Commit ac7b7e19 authored by Sandeep Sagar Panjala's avatar Sandeep Sagar Panjala

initial commit

parent 71a17529
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { ICubicle } from '../entities';
import { IResource } from '../models';
@Injectable()
export class SettingService {
private source = new Subject<boolean>();
get: Observable<boolean> = this.source.asObservable();
set(isRefresh: boolean) {
this.source.next(isRefresh);
}
cubicles: Array<ICubicle> = new Array<ICubicle>();
selectedCubicleId?: number = null;
selectedConsultantDoctor?: IResource;
}
import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import { Subject } from "rxjs";
@Injectable()
export class SharedService {
private _listners = new Subject<any>();
listen(): Observable<any> {
return this._listners.asObservable();
}
filter(filterBy: string) {
this._listners.next(filterBy);
}
}
import { DatePipe } from '@angular/common';
import { Injectable } from "@angular/core";
import { Timeline } from "@shared/entities";
import { ApiResources } from "@shared/helpers";
import { HttpService } from "@src/app/shared/services";
import { finalize } from "rxjs/operators";
@Injectable()
export class TimelineToggleService {
showBox = true;
encryptedAppointmentId: string;
isAdmission: boolean;
loading: boolean;
records: Array<Timeline>;
constructor(private readonly httpService: HttpService,
private datePipe: DatePipe) {
this.records = new Array<Timeline>();
}
public toggle(isTrigger: boolean = null) {
this.showBox = isTrigger !== null ? isTrigger : !this.showBox;
if (this.showBox) {
this.fetch();
}
}
public loadMore() {
this.fetch(this.records.length);
}
public fetch(skip = 0, take = 5) {
if (!this.encryptedAppointmentId) return;
const request = {
appointmentEid: this.encryptedAppointmentId,
isAdmission: this.isAdmission,
patientEid: null,
skip: skip,
take: take
}
this.httpService
.post<Array<Timeline>>(ApiResources.getURI(ApiResources.timeline.base, ApiResources.timeline.fetch), request)
.pipe(finalize(() => this.loading = false))
.subscribe(
(response: Array<Timeline>) => {
if (response) {
response.forEach(record => {
if (record.data) {
const parsed = JSON.parse(record.data);
if (parsed) {
switch (record.timelineActionId) {
case 8:
case 9:
record.showCase = parsed[0]["medicineName"];
break;
case 10:
case 11:
record.showCase = parsed["notes"].replace(/<[^>]*>/g, '');
break;
case 12:
case 13:
record.showCase = this.datePipe.transform(new Date(parsed["followUpDate"]), 'MMM d, y, h:mm:ss a');
break;
}
}
}
});
}
if (skip === 0) {
this.records = response;
} else {
this.records.push(...response);
}
},
() => {
this.records = new Array<Timeline>();
}
);
}
}
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import { ApiResources } from "@shared/helpers";
@Injectable()
export class UrlService {
constructor(private readonly http: HttpClient) {
}
encode(value: string) {
return this.post(ApiResources.getURI(ApiResources.application.base, ApiResources.application.encode), { json: value });
}
decode(value: string) {
return this.post(ApiResources.getURI(ApiResources.application.base, ApiResources.application.decode), { json: value });
}
private post(apiEndPoint: string, request?: any): Observable<string> {
let headers = new HttpHeaders();
headers = headers.append("Auth", "False");
return this.http.post<string>(apiEndPoint, request, { headers: headers });
}
}
\ No newline at end of file
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import { ApiResources } from "@shared/helpers";
@Injectable()
export class ValidatorService {
constructor(private readonly http: HttpClient) { }
validateEmail(query: string, type: string, referenceId: number) {
return this.validate(ApiResources.getURI(ApiResources.validators.base, ApiResources.validators.email), { query: query, type: type, referenceId: referenceId });
}
validateMobile(query: string, countryId: number, type: string, referenceId: number) {
return this.validate(ApiResources.getURI(ApiResources.validators.base, ApiResources.validators.mobile), { query: query, countryId: countryId, type: type, referenceId: referenceId });
}
validateNpi(query: string, providerId: number) {
return this.validate(ApiResources.getURI(ApiResources.validators.base, ApiResources.validators.npi), { query: query, referenceId: providerId });
}
validatePharmacyProduct(query: string, productId?: number) {
return this.validate(ApiResources.getURI(ApiResources.validators.base, ApiResources.validators.pharmacyProduct), { query: query, pharmacyProductId: productId });
}
validateUserName(query: string, type: string, referenceId: number) {
return this.validate(ApiResources.getURI(ApiResources.validators.base, ApiResources.validators.userName), { query: query, type: type, referenceId: referenceId });
}
private validate(apiEndPoint: string, request: any): Observable<boolean> {
let headers = new HttpHeaders();
headers = headers.append("Auth", "False");
return this.http.post<boolean>(apiEndPoint, request, { headers: headers });
}
}
import { Injectable } from "@angular/core";
import { HttpService } from "@shared/services";
import { ApiResources } from "@shared/helpers";
import { finalize } from "rxjs/operators";
@Injectable()
export class VideoLinkService {
isLoading: boolean;
constructor(
private readonly httpService: HttpService
) {
}
send(appointmentNo: string, onSuccess: (response: any) => void) {
this.httpService
.post<object>(ApiResources.getURI(ApiResources.webTelemedicine.base, ApiResources.webTelemedicine.sendLink),
{appointmentNo: appointmentNo})
.pipe(finalize(() => this.isLoading = false))
.subscribe(
(response: object) => {
onSuccess(response);
},
(error: any) => {
console.error(error);
onSuccess(null);
}
);
}
}
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class AgeValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
if (!value || !control.parent) {
return null;
}
if (!RegExHelper.numbersOnly.test(value)) {
return { 'invalidAge': true };
}
if (parseInt(value) < 18) {
return { 'invalid': true };
}
return null;
}
}
\ No newline at end of file
import { FormGroup } from "@angular/forms";
export class CompareValidator {
static compare(lhsKey: string, rhsKey: string) {
return (group: FormGroup) => {
const lhsControl = group.controls[lhsKey];
const rhsControl = group.controls[rhsKey];
const errors = $.extend(true, {}, rhsControl.errors);
const conditions = [];
if (errors) {
delete errors["notEquivalent"];
}
const keys = Object.keys(errors);
keys.forEach(key => {
conditions.push(errors[key]);
});
const condition = eval(conditions.join(" &&"));
if (!condition) {
if (rhsControl.value && lhsControl.value !== rhsControl.value) {
return rhsControl.setErrors({ "notEquivalent": true });
} else {
return rhsControl.setErrors(null);
}
}
}
}
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class EmailValidator {
static isValid(control: FormControl) {
const value = control.value;
if (!value) {
return null;
}
if (!RegExHelper.email.test(value) && !RegExHelper.emailFormat.test(value)) {
return { 'invalidEmail': true };
} else {
return null;
}
}
}
\ No newline at end of file
export * from "./compare.validator";
export * from "./email.validator";
export * from "./password.validator";
export * from "./mobile.validator";
export * from "./npi.validator";
export * from "./zipcode.validator";
export * from "./uniq-email.Validator";
export * from "./uniq-mobile.validator";
export * from "./uniq-npi.validator";
export * from "./age.validator";
export * from "./whitespace.validator";
export * from "./sp.validator";
export * from "./uniq-pharmacy-product.validator";
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class MobileValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
if (!value || !control.parent) {
return null;
}
const countryControl = control.parent.get("countryId");
if (countryControl) {
const countryId = countryControl.value;
if (countryId) {
if (!RegExHelper.numbersOnly.test(value) || (countryId === 3 ? !/^\b\d{8}?\b$/.test(value) : !/^\b\d{10}?\b$/.test(value))) {
return { 'invalidMobile': true };
}
}
return null;
} else {
if (!RegExHelper.numbersOnly.test(value) || !/^\b\d{10}(-\d{8})?\b$/.test(value)) {
return { 'invalidMobile': true };
}
return null;
}
}
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class NPIValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
// Empty Value
if (!value) {
return null;
}
// Min Length
if (!RegExHelper.npi.test(value) || !RegExHelper.numbersOnly.test(value)) {
return { 'invalidNpi': true };
}
return null;
}
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class PasswordValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
// Empty Value
if (!value) {
return null;
}
// Min Length
if (!RegExHelper.length10.test(value)) {
return { 'minLength': true };
}
// One UpperCase
if (!RegExHelper.oneUpperCase.test(value)) {
return { 'upperCase': true };
}
// One Number
if (!RegExHelper.oneNumber.test(value)) {
return { 'number': true };
}
// One Special Character
if (!RegExHelper.oneSpecialChar.test(value)) {
return { 'specialChar': true };
}
return null;
}
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class SpValidator {
static isValid(control: FormControl) {
const value = control.value;
if (!value) {
return null;
}
if (!RegExHelper.sp.test(value)) {
return { 'invalidSp': true };
} else {
return null;
}
}
}
\ No newline at end of file
import { AsyncValidatorFn, FormControl, ValidationErrors } from "@angular/forms";
import { Observable, timer } from "rxjs";
import { map, switchMap } from "rxjs/operators";
import { ValidatorService } from "@shared/services";
export function uniqEmailValidator(validatorService: ValidatorService, type: string, referenceIdKey: string): AsyncValidatorFn {
return (control: FormControl): Promise<ValidationErrors | (Object | null)> | Observable<ValidationErrors | (Object | null)> => {
return timer(500).pipe(
switchMap(() => {
const referenceId: number = (control.parent.controls as any)[referenceIdKey] ? (control.parent.controls as any)[referenceIdKey].value : 0;
return validatorService.validateEmail(control.value, type, referenceId)
.pipe(
map((res: boolean) => {
return res ? { emailExists: true } : null;
})
);
})
);
};
}
import { AsyncValidatorFn, FormControl, ValidationErrors } from "@angular/forms";
import { Observable, timer } from "rxjs";
import { map, switchMap } from "rxjs/operators";
import { ValidatorService } from "@shared/services";
export function uniqMobileValidator(validatorService: ValidatorService, type: string, referenceIdKey: string): AsyncValidatorFn {
return (control: FormControl): Promise<ValidationErrors | (Object | null)> | Observable<ValidationErrors | (Object | null)> => {
return timer(500).pipe(
switchMap(() => {
const countryId: number = (control.parent.controls as any)["countryId"] ? (control.parent.controls as any)["countryId"].value : 0;
const referenceId: number = (control.parent.controls as any)[referenceIdKey] ? (control.parent.controls as any)[referenceIdKey].value : 0;
return validatorService.validateMobile(control.value, countryId || 0, type, referenceId)
.pipe(
map((res: boolean) => {
return res && control.value !== null ? { mobileExists: true } : null;
})
);
})
);
};
}
import { AsyncValidatorFn, FormControl, ValidationErrors } from "@angular/forms";
import { Observable, timer } from "rxjs";
import { map, switchMap } from "rxjs/operators";
import { ValidatorService } from "@shared/services";
export function uniqNpiValidator(validatorService: ValidatorService): AsyncValidatorFn {
return (control: FormControl): Promise<ValidationErrors | (Object | null)> | Observable<ValidationErrors | (Object | null)> => {
return timer(500).pipe(
switchMap(() => {
const referenceId: number = (control.parent.controls as any)["providerId"] ? (control.parent.controls as any)["providerId"].value : 0;
return validatorService.validateNpi(control.value, referenceId)
.pipe(
map((res: boolean) => {
return res ? { npiExists: true } : null;
})
);
})
);
};
}
import { AsyncValidatorFn, FormControl, ValidationErrors } from "@angular/forms";
import { Observable, timer } from "rxjs";
import { map, switchMap } from "rxjs/operators";
import { ValidatorService } from "@shared/services";
export function uniqPharmacyProductValidator(validatorService: ValidatorService, key: string): AsyncValidatorFn {
return (control: FormControl): Promise<ValidationErrors | (Object | null)> | Observable<ValidationErrors | (Object | null)> => {
return timer(500).pipe(
switchMap(() => {
const productId: number = (control.parent.controls as any)[key] ? (control.parent.controls as any)[key].value : 0;
return validatorService.validatePharmacyProduct(control.value, productId)
.pipe(
map((res: boolean) => {
return res ? { productExists: true } : null;
})
);
})
);
};
}
import { AsyncValidatorFn, FormControl, ValidationErrors } from "@angular/forms";
import { Observable, timer } from "rxjs";
import { map, switchMap } from "rxjs/operators";
import { ValidatorService } from "@shared/services";
export function uniqUserNameValidator(validatorService: ValidatorService, type: string, referenceIdKey: string): AsyncValidatorFn {
return (control: FormControl): Promise<ValidationErrors | (Object | null)> | Observable<ValidationErrors | (Object | null)> => {
return timer(500).pipe(
switchMap(() => {
const referenceId: number = (control.parent.controls as any)[referenceIdKey] ? (control.parent.controls as any)[referenceIdKey].value : 0;
return validatorService.validateUserName(control.value, type, referenceId)
.pipe(
map((res: boolean) => {
return res ? { userNameExists: true } : null;
})
);
})
);
};
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class WhiteSpaceValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
if (!value) {
return null;
}
if (RegExHelper.whiteSpace.test(value)) {
return { 'whiteSpaces': true };
}
return null;
}
}
\ No newline at end of file
import { FormControl } from "@angular/forms";
import { RegExHelper } from "@shared/helpers";
export class ZipcodeValidator {
static isValid(control: FormControl): object | null {
const value = control.value;
if (!value || !control.parent) {
return null;
}
const countryControl = control.parent.get("countryId");
if (countryControl) {
const countryId = countryControl.value;
if (countryId) {
if (!RegExHelper.numbersOnly.test(value)) {
return { 'invalidZipcode': true };
}
if(countryId === 1 && !/^\b\d{6}?\b$/.test(value)) {
return { 'invalidZipcode': true };
}
if(countryId === 2 && !/^\b\d{5}?\b$/.test(value)) {
return { 'invalidZipcode': true };
}
if(countryId === 3 && !/^\b\d{4}?\b$/.test(value)) {
return { 'invalidZipcode': true };
}
}
return null;
} else {
if (!RegExHelper.numbersOnly.test(value) || !/^\b\d{6}(-\d{4})?\b$/.test(value)) {
return { 'invalidZipcode': true };
}
return null;
}
}
}
\ No newline at end of file
<form [formGroup]="form" (ngSubmit)="onValidate()">
<div class="d-block text-center">
<img width="200" class="mb-3" src="assets/images/otp.png" alt="OTP" />
</div>
<p class="text-center" *ngIf="model.countryId !== 0"><b>Verification code</b> has been sent to your mobile number (+{{model.countryCode}}) {{model.username}}, please enter the same here.</p>
<p class="text-center" *ngIf="model.countryId === 0"><b>Verification code</b> has been sent to your email address {{model.username}}, please enter the same here.</p>
<p class="text-center" *ngIf="otpExpiresIn">Verification code will expires in <b>{{otpExpiresIn | minuteSeconds}}</b></p>
<p class="text-center" *ngIf="!otpExpiresIn">
<ng-container *ngIf="!submitting">Verification code is expired. <a href="javascript:;" (click)="onSendOTP()">Resend new</a></ng-container>
<ng-container *ngIf="submitting"><span class="spinner-border-sm spinner-border text-warning mr-2"></span>Please wait while sending new Verification code...</ng-container>
</p>
<div class="row justify-content-center">
<div class="form-group mb-4 col-sm-2" *ngFor="let input of formInput; index as i">
<input #formRow type="text" formControlName="{{input}}" block autocomplete="nope" numbersOnly class="form-control" [ngClass]="{ 'is-invalid': submitted && (form.get(input).errors || !otpValid) }" maxlength="1" (keyup)="onKeyUpEvent($event, i)">
</div>
</div>
<button type="submit" [disabled]="submitting" class="btn btn-primary btn-block">Submit</button>
</form>
\ No newline at end of file
import { HttpErrorResponse } from "@angular/common/http";
import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, Output, ViewChildren, ViewEncapsulation } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { ApiResources, UtilHelper } from "@shared/helpers";
import { OTPResponse, Page } from "@shared/models";
import { HttpService, NotifyService } from "@shared/services";
import { Subscription, interval } from "rxjs";
import { finalize, takeUntil } from "rxjs/operators";
class OTPModel {
username: string;
countryId: number;
countryCode: string;
}
@Component({
templateUrl: "./otp.html",
selector: "otp",
encapsulation: ViewEncapsulation.None
})
export class OTPWidget implements AfterViewInit, OnDestroy {
@ViewChildren("formRow") rows: any;
@Input() model: OTPModel;
@Input() otp: string;
@Input() otpExpiresIn: number;
@Output() validateOTPEmitter = new EventEmitter<boolean>();
page: Page;
formInput = ["input1", "input2", "input3", "input4"];
form: FormGroup;
submitting: boolean;
submitted: boolean;
otpSession: Subscription;
otpValid: boolean;
constructor(
private readonly httpService: HttpService,
private readonly notifyService: NotifyService
) {
this.page = new Page();
this.startOTPSession();
this.buildForm();
}
private buildForm() {
this.form = this.toFormGroup(this.formInput);
}
private toFormGroup(elements) {
const group: any = {};
elements.forEach(key => {
group[key] = new FormControl("", Validators.required);
});
return new FormGroup(group);
}
onKeyUpEvent(event, index: number) {
const position = event.keyCode === 8 && event.which === 8 ? index - 1 : index + 1;
if (position > -1 && position < this.formInput.length) {
this.rows._results[position].nativeElement.focus();
}
}
private startOTPSession() {
this.otpSession = interval(1000).subscribe(() => {
if (this.otpExpiresIn === 0) {
this.endOTPSession();
return;
}
this.otpExpiresIn--;
});
}
private endOTPSession() {
this.otpSession.unsubscribe();
this.otpExpiresIn = undefined;
}
onSendOTP() {
this.buildForm();
this.submitting = true;
this.httpService
.post<OTPResponse>(ApiResources.getURI(ApiResources.application.base, ApiResources.application.sendOtp), this.model, false)
.pipe(finalize(() => { this.submitted = false, this.submitting = false }))
.pipe(takeUntil(this.page.unSubscribe))
.subscribe(
(response: OTPResponse) => {
if (response.error) {
this.notifyService.warning(response.errorDescription);
} else {
this.otp = response.otp;
this.otpExpiresIn = response.otpExpiresIn;
this.startOTPSession();
}
},
(error: HttpErrorResponse) => {
const errorMessage = UtilHelper.handleError(error);
if (errorMessage) {
this.notifyService.warning(errorMessage);
} else {
this.notifyService.defaultError();
}
}
);
}
onValidate() {
this.submitted = true;
if (!this.form.valid) {
return;
}
const otp: string = this.rows._results.map(m => m.nativeElement.value).join("");
if (this.otp === otp) {
this.otpValid = true;
this.validateOTPEmitter.emit(true);
} else {
this.otpValid = false;
}
}
ngAfterViewInit() {
this.rows._results[0].nativeElement.focus();
}
ngOnDestroy() {
this.endOTPSession();
this.page.unsubscribeAll();
}
}
\ No newline at end of file
@media print {
@page {
margin-top: 0.01mm !important;
margin-left: 15mm !important;
margin-bottom:20mm !important;
padding: 0 !important;
size: 2.8in 1.9in !important;
}
}
This diff is collapsed.
body[data-topbar-color="light"] .navbar-custom {
background-color: #ffffff !important;
box-shadow: 0 0 35px 0 rgba(154, 161, 171, 0.15);
/* Search */
}
body[data-layout-mode="two-column"] .sidebar-icon-menu .logo {
display: block;
width: 80px;
height: 65px;
line-height: 65px;
text-align: center;
z-index: 1002;
background-color: #0766ff;
}
body[data-layout-mode="two-column"] .left-side-menu {
background-color: #4d92ff;
box-shadow: none;
}
body[data-layout-mode="two-column"] .layout-sidebar-main-menu {
display: block;
position: fixed;
width: 254px;
background-color: #4087f9;
top: 0;
bottom: 6px;
left: 88px;
padding: 4px 0px;
box-shadow: 0 0 35px 0 rgba(154, 161, 171, 0.15);
transition: all .1s ease-out;
}
body[data-layout-mode="two-column"] .sidebar-icon-menu {
position: fixed;
width: 80px;
z-index: 500;
top: 0;
bottom: 0;
padding-bottom: 20px;
background: #0766ff;
overflow: hidden auto;
}
.widget-count {
height: 100%;
box-shadow: 0 3px 10px rgb(0 0 0 / 20%);
border-radius: 30px;
color: #0a67eb;
border: 2px solid rgb(119 172 247);
background-image: url("assets/images/pattern.png");
background-position: left;
}
.count-filter-btn-block {
position: absolute;
cursor: pointer;
right: 10px;
top: 10px;
cursor: pointer;
padding: 1px 5px;
background-color: #0a67eb;
border-radius: 50%;
color: #FFF;
}
.widget-graph .filter-btn-block {
cursor: pointer;
padding: 5px 9px;
background-color: #0a67eb;
border-radius: 50%;
color: #FFF;
}
.widget-table, .widget-graph {
box-shadow: 0 3px 10px rgb(0 0 0 / 20%) !important;
border-radius: 20px;
color: #0a67eb;
border: 2px solid rgb(119 172 247);
}
.layout-main-menu-active .menu-active i {
color: #0a67eb !important;
}
.layout-main-menu-active .menu-active a:hover i {
color: #0a67eb !important;
}
.layout-main-menu-active .menu-active .text-white {
color: #0a67eb !important;
}
a:hover {
color: #095cd2;
text-decoration: none;
}
.Bookedlayout-main-menu-inactive .inactive-highlight i {
color: #0a67eb !important;
}
.layout-main-menu-inactive .inactive-highlight i {
color: #0a67eb !important;
}
.layout-main-menu-inactive .inactive-highlight a:hover i {
color: #0a67eb !important;
}
.layout-main-menu-inactive .inactive-highlight .text-white {
color: #0a67eb !important;
}
.custom-modal .modal-header {
background: #3283f6 url(../images/hero_bg_1.svg) repeat fixed;
}
.anchorFocus:focus {
border: 1px solid #3283f6 !important;
display: flex;
align-items: center;
}
.fe-menu:before {
content: "\e88f";
border-radius: 4px;
background-color: white;
padding: 2px;
border: 1px solid #3283f6;
}
[class^="fe-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'feather' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/*color: #0d6df4;*/
z-index: 10;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.trapezium {
height: 0px;
min-width: 80px;
display: inline-block;
border-bottom: 30px solid #589bf7;
border-right: 15px solid transparent;
text-align: center;
max-width:100%;
}
.headingStyle {
color: white;
font-size: clamp(13px, 2vmin, 1rem);
line-height: 30px;
border-bottom: 2px solid #589bf7;
height: 32px;
}
.encounter-menu .dropdown-item.active {
background: #ffffff;
color: black;
}
.actions-dropdown {
background: linear-gradient(to bottom, #3283f6 0, #0a67eb 100%);
}
body[data-topbar-color="light"] .navbar-custom .button-menu-mobile {
color: #3283f6;
}
/*copied bootstrap classes responsible for primary and white colors which is overided in yellow and gray theme*/
.btn-primary:hover {
color: #fff !important;
background-color: #0d6df4;
border-color: #0a67eb;
}
.form-control:focus {
color: #5a5a5a;
background-color: #fff;
border-color: #0a67eb;
outline: 0;
box-shadow: none;
}
.bg-primary {
background-color: #3283f6 !important;
}
.btn-primary {
color: #fff;
background-color: #3283f6;
border-color: #3283f6;
}
.btn-outline-primary:hover {
color: #fff;
background-color: #3283f6;
border-color: #3283f6;
}
.btn-outline-primary {
color: #3283f6;
border-color: #3283f6;
}
.badge-primary {
color: #fff;
background-color: #3283f6;
}
.text-primary {
color: #3283f6 !important;
}
a {
color: #3283f6;
text-decoration: none;
background-color: transparent;
}
.page-item.active .page-link {
z-index: 3;
color: #fff;
background-color: #3283f6;
border-color: #3283f6;
}
.border-primary {
border-color: #3283f6 !important;
}
a.bg-primary:hover, a.bg-primary:focus,
button.bg-primary:hover,
button.bg-primary:focus {
background-color: #0a67eb !important;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/*full callendar css start
*/
.fc .fc-timegrid-slot {
height: 3em !important;
}
.fc .fc-daygrid-day.fc-day-today {
background-color: white !important;
}
/*.fc .fc-event, .fc .fc-scrollgrid table tr {
height: 4em !important;
}*/
.fc-timegrid-body {
background-color: white !important;
}
.fc-timegrid-now-indicator-container {
background-color: white !important;
}
.fc-media-screen {
background-color: white !important;
}
.fc-v-event .fc-event-main-frame {
text-align: left !important;
/*display: flex !important;*/
align-items: center;
gap: 10px;
flex-direction: row !important;
}
.fc-v-event .fc-event-title {
font-size: 12px !important;
padding-left: 5px !important;
font-weight: bold !important;
}
/*.fc-timegrid-event-harness > .fc-timegrid-event {*/
/*position: unset !important;*/
/*padding: 0px 10px !important;
width:100%;
}*/
/*.fc-event {
margin: 0px 7px !important;
}*/
/*.fc-timegrid-event-harness {
overflow: auto;
}*/
/*.fc-timegrid-event-harness:hover {
z-index: 2442342423423423424234234 !important;
}*/
.fc-timegrid-event .fc-event-main {
padding: 0px !important;
}
.fc .fc-non-business {
background: lightgray !important;
}
#providerHeader > .ng-select-container {
overflow: auto;
height: 20px;
width: 300px;
}
.fc-agenda-slots td div {
height: 20px;
}
.fc-timegrid-slot {
height: 30em;
border-bottom: 0 !important;
}
.fc-timegrid-event .fc-event-time {
margin-bottom: 0px !important;
}
.fc .fc-button-primary:not(:disabled).fc-button-active, .fc .fc-button-primary:not(:disabled):active {
background-color: #0d6df4 !important;
border-color: #0a67eb !important;
color: white !important;
margin-right: 5px;
}
.fc .fc-button-primary {
border-color: #0a67eb !important;
background-color: white !important;
color: #3283f6 !important;
}
.transform_li {
border: 1px solid #ababab;
}
.transform_li:hover {
transform: translate(-7px, 0px);
border-bottom: 1px solid #1d75f0 !important;
background: #3283f6 !important;
color: #ffffff !important;
z-index: 1;
box-shadow: 2px 2px 3px #aaaaaa;
transition: .8s;
}
.draggable > li:nth-child(even) {
background-color: #FCF5DF;
}
/*.fc-dayView-button {
background: #dee2e6 !important;
border: none !important;
color: #5a5a5a !important;
text-transform: capitalize !important;
box-shadow: none !important;
border-radius: 3px !important;
margin: 0 3px !important;
padding: 6px 12px !important;
height: auto !important;
}*/
/*full calendar css end*/
This diff is collapsed.
/**
* placeholder-loading v0.2.6
* Author: Zalog (https://www.zalog.ro/)
* License: MIT
**/
.ph-item{direction:ltr;position:relative;display:flex;flex-wrap:wrap;padding:30px 15px 15px;overflow:hidden;margin-bottom:30px;background-color:#fff;border:1px solid #e6e6e6;border-radius:2px}.ph-item,.ph-item *,.ph-item :after,.ph-item :before{box-sizing:border-box}.ph-item:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:50%;z-index:1;width:500%;margin-left:-250%;-webkit-animation:phAnimation .8s linear infinite;animation:phAnimation .8s linear infinite;background:linear-gradient(90deg,hsla(0,0%,100%,0) 46%,hsla(0,0%,100%,.35) 50%,hsla(0,0%,100%,0) 54%) 50% 50%}.ph-item>*{flex:1 1 auto;display:flex;flex-flow:column;padding-right:15px;padding-left:15px}.ph-row{display:flex;flex-wrap:wrap;margin-bottom:7.5px}.ph-row div{height:10px;margin-bottom:7.5px;background-color:#ced4da}.ph-row .big,.ph-row.big div{height:20px;margin-bottom:15px}.ph-row .empty{background-color:hsla(0,0%,100%,0)}.ph-col-2{flex:0 0 16.66667%}.ph-col-4{flex:0 0 33.33333%}.ph-col-6{flex:0 0 50%}.ph-col-8{flex:0 0 66.66667%}.ph-col-10{flex:0 0 83.33333%}.ph-col-12{flex:0 0 100%}.ph-avatar{position:relative;width:100%;min-width:60px;background-color:#ced4da;margin-bottom:15px;border-radius:50%;overflow:hidden}.ph-avatar:before{content:" ";display:block;padding-top:100%}.ph-picture{width:100%;height:120px;background-color:#ced4da;margin-bottom:15px}@-webkit-keyframes phAnimation{0%{transform:translate3d(-30%,0,0)}to{transform:translate3d(30%,0,0)}}@keyframes phAnimation{0%{transform:translate3d(-30%,0,0)}to{transform:translate3d(30%,0,0)}}
\ No newline at end of file
This diff is collapsed.
/* DayGridView
--------------------------------------------------------------------------------------------------*/
/* day row structure */
.fc-dayGridWeek-view .fc-content-skeleton,
.fc-dayGridDay-view .fc-content-skeleton {
/* there may be week numbers in these views, so no padding-top */
padding-bottom: 1em;
/* ensure a space at bottom of cell for user selecting/clicking */
}
.fc-dayGrid-view .fc-body .fc-row {
min-height: 4em;
/* ensure that all rows are at least this tall */
}
/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
.fc-row.fc-rigid {
overflow: hidden;
}
.fc-row.fc-rigid .fc-content-skeleton {
position: absolute;
top: 0;
left: 0;
right: 0;
}
/* week and day number styling */
.fc-day-top.fc-other-month {
opacity: 0.3;
}
.fc-dayGrid-view .fc-week-number,
.fc-dayGrid-view .fc-day-number {
padding: 2px;
}
.fc-dayGrid-view th.fc-week-number,
.fc-dayGrid-view th.fc-day-number {
padding: 0 2px;
/* column headers can't have as much v space */
}
.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number {
float: right;
}
.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number {
float: left;
}
.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number {
float: left;
border-radius: 0 0 3px 0;
}
.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number {
float: right;
border-radius: 0 0 0 3px;
}
.fc-dayGrid-view .fc-day-top .fc-week-number {
min-width: 1.5em;
text-align: center;
background-color: #f2f2f2;
color: #808080;
}
/* when week/day number have own column */
.fc-dayGrid-view td.fc-week-number {
text-align: center;
}
.fc-dayGrid-view td.fc-week-number > * {
/* work around the way we do column resizing and ensure a minimum width */
display: inline-block;
min-width: 1.25em;
}
This diff is collapsed.
@media print {
@page {
margin-top: 85mm;
margin-bottom: 70mm;
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment