@dvrd/dvr-controls 1.0.14 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +8 -1
- package/package.json +29 -23
- package/src/js/button/button.tsx +102 -0
- package/src/js/button/buttonController.tsx +179 -0
- package/src/js/button/closeButton.tsx +29 -0
- package/src/js/button/dvrdButton.tsx +128 -0
- package/src/js/button/outlinedButton.tsx +105 -0
- package/src/js/button/simpleButton.tsx +163 -0
- package/src/js/button/style/button.scss +95 -0
- package/src/js/button/style/closeButton.scss +15 -0
- package/src/js/button/style/dvrdButton.scss +30 -0
- package/src/js/button/style/outlinedButton.scss +84 -0
- package/src/js/button/style/simpleButton.scss +80 -0
- package/src/js/carousel/DVRCarousel.tsx +163 -0
- package/src/js/carousel/DVRCarouselController.tsx +95 -0
- package/src/js/carousel/style/DVRCarousel.scss +38 -0
- package/src/js/checkbox/checkbox.tsx +148 -0
- package/src/js/checkbox/checkboxController.tsx +131 -0
- package/src/js/checkbox/style/checkbox.scss +109 -0
- package/src/js/colorPicker/colorPicker.tsx +118 -0
- package/src/js/colorPicker/style/colorPicker.scss +20 -0
- package/src/js/date/dvrdDatePicker.tsx +357 -0
- package/src/js/date/style/dvrdDatePicker.scss +307 -0
- package/src/js/dialog/dialog.tsx +207 -0
- package/src/js/dialog/dialogController.tsx +70 -0
- package/src/js/dialog/inlineDialog.tsx +127 -0
- package/src/js/dialog/style/dialog.scss +61 -0
- package/src/js/events/withEvents.tsx +40 -0
- package/src/js/head/DVRHead.tsx +49 -0
- package/src/js/header/DVRHeader.tsx +417 -0
- package/src/js/header/style/header.scss +206 -0
- package/src/js/icon/awesomeIcon.tsx +20 -0
- package/src/js/image/imageUpload.tsx +69 -0
- package/src/js/image/style/imageUpload.scss +11 -0
- package/src/js/info/info.tsx +136 -0
- package/src/js/info/style/info.scss +39 -0
- package/src/js/input/animated/animatedTextField.tsx +159 -0
- package/src/js/input/date/dateField.tsx +360 -0
- package/src/js/input/date/dateFieldController.tsx +245 -0
- package/src/js/input/date/datePicker/datePicker.tsx +186 -0
- package/src/js/input/date/datePicker/style/datePicker.scss +102 -0
- package/src/js/input/date/input/dateInput.tsx +214 -0
- package/src/js/input/date/style/dateField.scss +40 -0
- package/src/js/input/date/timePicker/style/timePicker.scss +95 -0
- package/src/js/input/date/timePicker/timePicker.tsx +143 -0
- package/src/js/input/editor/DVREditor.tsx +21 -0
- package/src/js/input/number/numberInput.tsx +157 -0
- package/src/js/input/password/passwordInput.tsx +140 -0
- package/src/js/input/password/passwordRules.tsx +48 -0
- package/src/js/input/password/style/passwordInput.scss +39 -0
- package/src/js/input/password/style/passwordRules.scss +41 -0
- package/src/js/input/simple/style/simpleInput.scss +98 -0
- package/src/js/input/simple/v2/simpleInputV2.tsx +178 -0
- package/src/js/input/style/input.scss +138 -0
- package/src/js/input/v2/inputController_v2.tsx +250 -0
- package/src/js/input/v2/input_v2.tsx +7 -0
- package/src/js/label/label.tsx +196 -0
- package/src/js/label/style/label.scss +4 -0
- package/src/js/link/link.tsx +38 -0
- package/src/js/link/style/link.scss +30 -0
- package/src/js/loader/loader.tsx +79 -0
- package/src/js/loader/loaderController.tsx +61 -0
- package/src/js/loader/style/loader.scss +53 -0
- package/src/js/media/media.tsx +72 -0
- package/src/js/navigator/navigator.tsx +51 -0
- package/src/js/optionsList/dvrdOptionsList.tsx +112 -0
- package/src/js/optionsList/style/dvrdOptionsList.scss +84 -0
- package/src/js/optionsMenu/optionsMenu.tsx +187 -0
- package/src/js/optionsMenu/style/optionsMenu.scss +70 -0
- package/src/js/pdf/element/pdfElement.tsx +315 -0
- package/src/js/pdf/element/style/pdfElement.scss +111 -0
- package/src/js/pdf/history/pdfHistory.ts +57 -0
- package/src/js/pdf/image/pdfImage.tsx +175 -0
- package/src/js/pdf/image/style/pdfImage.scss +34 -0
- package/src/js/pdf/invoiceTable/pdfInvoiceTable.tsx +176 -0
- package/src/js/pdf/invoiceTable/style/pdfInvoiceTable.scss +32 -0
- package/src/js/pdf/pdfTemplateCreator.tsx +279 -0
- package/src/js/pdf/settings/buttons/iconButton.tsx +49 -0
- package/src/js/pdf/settings/buttons/style/iconButton.scss +50 -0
- package/src/js/pdf/settings/image/pdfImageSettings.tsx +82 -0
- package/src/js/pdf/settings/image/style/pdfImageSettings.scss +9 -0
- package/src/js/pdf/settings/invoiceTable/pdfInvoiceTableSettings.tsx +141 -0
- package/src/js/pdf/settings/invoiceTable/style/pdfInvoiceTableSettings.scss +38 -0
- package/src/js/pdf/settings/pdfElementSettings.tsx +86 -0
- package/src/js/pdf/settings/style/pdfElementSettings.scss +56 -0
- package/src/js/pdf/settings/text/pdfTextSettings.tsx +202 -0
- package/src/js/pdf/settings/text/style/pdfTextSettings.scss +94 -0
- package/src/js/pdf/style/pdfTemplateCreator.scss +118 -0
- package/src/js/pdf/text/pdfText.tsx +267 -0
- package/src/js/pdf/text/style/pdfText.scss +22 -0
- package/src/js/pdf/v2/pdfElement/pdfDraggableElement.tsx +193 -0
- package/src/js/pdf/v2/types/pdfTemplateTypes.ts +27 -0
- package/src/js/popup/style/withBackground.scss +29 -0
- package/src/js/popup/withBackground.tsx +92 -0
- package/src/js/select/async/asyncSelect.tsx +46 -0
- package/src/js/select/async/style/asyncSelect.scss +23 -0
- package/src/js/select/dvrdSelect.tsx +214 -0
- package/src/js/select/dvrdSelectController.tsx +81 -0
- package/src/js/select/select.tsx +310 -0
- package/src/js/select/selectController.tsx +341 -0
- package/src/js/select/style/dvrdSelect.scss +140 -0
- package/src/js/select/style/select.scss +199 -0
- package/src/js/sidebarMenu/sidebarMenu.tsx +167 -0
- package/src/js/sidebarMenu/style/sidebarMenu.scss +167 -0
- package/src/js/slider/DVRSlider.tsx +107 -0
- package/src/js/slider/style/DVRSlider.scss +88 -0
- package/src/js/snackbar/snackbar.tsx +72 -0
- package/src/js/snackbar/snackbarController.tsx +104 -0
- package/src/js/snackbar/style/snackbar.scss +46 -0
- package/src/js/switch/dvrdSwitch.tsx +53 -0
- package/src/js/switch/style/dvrdSwitch.scss +47 -0
- package/src/js/switch/style/switch.scss +84 -0
- package/src/js/switch/switch.tsx +115 -0
- package/src/js/switch/switchController.tsx +97 -0
- package/src/js/textField/dvrdInput.tsx +219 -0
- package/src/js/textField/dvrdInputController.tsx +97 -0
- package/src/js/textField/dvrdNumberInput.tsx +141 -0
- package/src/js/textField/dvrdPasswordInput.tsx +40 -0
- package/src/js/textField/style/dvrdInput.scss +114 -0
- package/src/js/textField/style/dvrdPassword.scss +15 -0
- package/src/js/topButton/style/topButton.scss +54 -0
- package/src/js/topButton/topButton.tsx +136 -0
- package/src/js/util/analyticsUtil.ts +41 -0
- package/src/js/util/colorUtil.ts +230 -0
- package/src/js/util/componentUtil.tsx +59 -0
- package/src/js/util/constants.ts +12 -0
- package/src/js/util/controlContext.tsx +46 -0
- package/src/js/util/controlUtil.ts +107 -0
- package/src/js/util/cookieUtil.ts +17 -0
- package/src/js/util/eventUtil.ts +65 -0
- package/src/js/util/googleUtil.ts +88 -0
- package/src/js/util/interfaces.ts +180 -0
- package/src/js/util/jwtUtil.ts +72 -0
- package/src/js/util/miscUtil.ts +170 -0
- package/src/js/util/momentUtil.ts +45 -0
- package/src/js/util/pdfUtil.ts +124 -0
- package/src/js/util/requestUtil.ts +145 -0
- package/src/js/util/responsiveUtil.ts +37 -0
- package/src/js/util/validationUtil.ts +13 -0
- package/src/res/img/lock-handle.png +0 -0
- package/src/res/img/lock-handle.webp +0 -0
- package/src/res/img/lock.png +0 -0
- package/src/res/img/lock.webp +0 -0
- package/src/style/common-icons-variables.scss +140 -0
- package/src/style/common-icons.scss +714 -0
- package/src/style/common-variables.scss +243 -0
- package/src/style/display-breakpoints.scss +141 -0
- package/src/style/fonts/common-icons.eot +0 -0
- package/src/style/fonts/common-icons.svg +150 -0
- package/src/style/fonts/common-icons.ttf +0 -0
- package/src/style/fonts/common-icons.woff +0 -0
- package/src/style/fonts/common-icons.woff2 +0 -0
- package/src/style/fonts/fontAwesome/css/all.css +7003 -0
- package/src/style/fonts/fontAwesome/css/all.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/brands.css +1423 -0
- package/src/style/fonts/fontAwesome/css/brands.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/fontawesome.css +5519 -0
- package/src/style/fonts/fontAwesome/css/fontawesome.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/regular.css +19 -0
- package/src/style/fonts/fontAwesome/css/regular.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/solid.css +19 -0
- package/src/style/fonts/fontAwesome/css/solid.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/svg-with-js.css +634 -0
- package/src/style/fonts/fontAwesome/css/svg-with-js.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/v4-font-face.css +26 -0
- package/src/style/fonts/fontAwesome/css/v4-font-face.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/v4-shims.css +2146 -0
- package/src/style/fonts/fontAwesome/css/v4-shims.min.css +6 -0
- package/src/style/fonts/fontAwesome/css/v5-font-face.css +22 -0
- package/src/style/fonts/fontAwesome/css/v5-font-face.min.css +6 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-brands-400.ttf +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-brands-400.woff2 +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-regular-400.ttf +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-regular-400.woff2 +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-solid-900.ttf +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-solid-900.woff2 +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-v4compatibility.ttf +0 -0
- package/src/style/fonts/fontAwesome/webfonts/fa-v4compatibility.woff2 +0 -0
- package/src/style/variables.scss +11 -0
- package/.gitignore +0 -31
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {IndexedObject} from "./interfaces";
|
|
6
|
+
import React from "react";
|
|
7
|
+
import DOMPurify from "dompurify";
|
|
8
|
+
|
|
9
|
+
declare global {
|
|
10
|
+
// noinspection JSUnusedGlobalSymbols
|
|
11
|
+
interface Window {
|
|
12
|
+
log: Function;
|
|
13
|
+
settings: IndexedObject<any>;
|
|
14
|
+
allowCookies: boolean;
|
|
15
|
+
gtag?: Function;
|
|
16
|
+
gapi?: any;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const getSetting = (name: string): any => {
|
|
21
|
+
const settings: IndexedObject<any> = window.settings;
|
|
22
|
+
if (settings.hasOwnProperty(name))
|
|
23
|
+
return settings[name];
|
|
24
|
+
console.warn(`Global settings does not contain a value for '${name}'`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const getMode = (): 'prod' | 'test' | 'dev' | 'accept' => {
|
|
28
|
+
return window.settings.mode;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const log = (message: any, obj?: any, force: boolean = false) => {
|
|
32
|
+
if (getMode() !== 'prod' || force) {
|
|
33
|
+
if (obj !== undefined && obj !== null) console.log(message, obj);
|
|
34
|
+
else console.log(message);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const warn = (message: string | number | boolean | object, obj?: any, force: boolean = false) => {
|
|
39
|
+
if (getMode() !== 'prod' || force) {
|
|
40
|
+
if (obj !== undefined && obj !== null) console.warn(message, obj);
|
|
41
|
+
else console.warn(message);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const error = (message: string | number | boolean, obj?: any, force: boolean = false) => {
|
|
46
|
+
if (getMode() !== 'prod' || force) {
|
|
47
|
+
if (obj !== undefined && obj !== null) console.error(message, obj);
|
|
48
|
+
else console.error(message);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const debug = (message: string | number | boolean | object, obj?: any, force: boolean = false) => {
|
|
53
|
+
if (getMode() !== 'prod' || force) {
|
|
54
|
+
if (obj !== undefined && obj !== null) console.debug(message, obj);
|
|
55
|
+
else console.debug(message);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getRootFontSize = (): number => {
|
|
60
|
+
const root = document.documentElement,
|
|
61
|
+
fontString = window.getComputedStyle(root, null).getPropertyValue('font-size');
|
|
62
|
+
return parseInt(fontString.slice(0, fontString.length - 2), 10);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const roundTo = (number: number, digits: number = 0): string => {
|
|
66
|
+
const isNegative = number < 0, multiplicator = Math.pow(10, digits);
|
|
67
|
+
if (isNegative) number = number * -1;
|
|
68
|
+
number = parseFloat((number * multiplicator).toFixed(11));
|
|
69
|
+
let numberString = (Math.round(number) / multiplicator).toFixed(digits);
|
|
70
|
+
if (isNegative)
|
|
71
|
+
numberString = (parseFloat(numberString) * -1).toFixed(digits);
|
|
72
|
+
return numberString;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const roundToNumber = (number: number, decimals: number = 0): number => {
|
|
76
|
+
return Number(roundTo(number, decimals).replace(',', '.'));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const parseMoney = (money: number): string => {
|
|
80
|
+
let moneyString: string;
|
|
81
|
+
if (money === 0 || money % 1 === 0) moneyString = money + ',-';
|
|
82
|
+
else moneyString = roundTo(money, 2).replace('.', ',');
|
|
83
|
+
if (/^0+[1-9]/.test(moneyString)) moneyString = moneyString.replace(/^0+/, '');
|
|
84
|
+
return moneyString;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const capitalize = (text: string): string => text.length ?
|
|
88
|
+
text.substr(0, 1).toUpperCase() + text.substr(1) : text;
|
|
89
|
+
|
|
90
|
+
export const getSearchParams = (search?: string, removeQuery: boolean = false): URLSearchParams => {
|
|
91
|
+
search = search === undefined || search === null ? location.search : search;
|
|
92
|
+
const params = new URLSearchParams(search);
|
|
93
|
+
if (removeQuery) window.history.pushState({}, document.title, window.location.pathname);
|
|
94
|
+
return params;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const downloadFile = (blob: Blob, fileName: string) => {
|
|
98
|
+
const link = document.createElement('a');
|
|
99
|
+
link.href = URL.createObjectURL(blob);
|
|
100
|
+
link.type = 'download';
|
|
101
|
+
link.download = fileName;
|
|
102
|
+
link.click();
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export const downloadRequiredFile = (path: string | { default: string }, fileName?: string) => {
|
|
106
|
+
if (typeof path !== 'string') path = path.default;
|
|
107
|
+
const name = getFileName(path, fileName);
|
|
108
|
+
const link = document.createElement('a');
|
|
109
|
+
link.href = path;
|
|
110
|
+
link.type = 'download';
|
|
111
|
+
link.download = name;
|
|
112
|
+
link.click();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const getFileName = (path: string, fileName?: string): string => {
|
|
116
|
+
if (fileName?.length) return fileName;
|
|
117
|
+
let pathName = path.substr(path.lastIndexOf('/') + 1, path.length);
|
|
118
|
+
const cacheReg = /-[a-zA-Z\d]+-cache/;
|
|
119
|
+
if (pathName.match(cacheReg))
|
|
120
|
+
pathName = pathName.replace(cacheReg, '');
|
|
121
|
+
return pathName;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export const preventDefault = (evt: Event | React.SyntheticEvent) => {
|
|
125
|
+
evt.preventDefault();
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const shuffleArray = (arr: any[]): any[] => {
|
|
129
|
+
let counter: number = arr.length;
|
|
130
|
+
if (counter === 0) return arr;
|
|
131
|
+
while (counter > 0) {
|
|
132
|
+
const randomIndex = Math.floor(Math.random() * counter--), temp = arr[counter];
|
|
133
|
+
arr[counter] = arr[randomIndex];
|
|
134
|
+
arr[randomIndex] = temp;
|
|
135
|
+
}
|
|
136
|
+
return arr;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const nullify = <T extends string | Array<any>>(value?: T | null): T | null => {
|
|
140
|
+
return value?.length ? value : null;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export const undefine = (value?: string | null): string | undefined => {
|
|
144
|
+
return value?.length ? value : undefined;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export const sanitizeHtml = (html: string) => {
|
|
148
|
+
return DOMPurify().sanitize(html);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export const copyToClipboard = (text: string): Promise<void> => {
|
|
152
|
+
return copyClipboard(text);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export const copyClipboard = (text: string): Promise<void> => {
|
|
156
|
+
return window.navigator.clipboard.writeText(text);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function webpSupported(): boolean {
|
|
160
|
+
try {
|
|
161
|
+
return document.createElement('canvas').toDataURL('image/webp')
|
|
162
|
+
.indexOf('data:image/webp') === 0;
|
|
163
|
+
} catch {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function isAbsoluteLink(link: string): boolean {
|
|
169
|
+
return /^(https?|www).*/.test(link);
|
|
170
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import moment, {Moment} from "moment";
|
|
6
|
+
|
|
7
|
+
export const MOMENT_FORMATS: string[] = [
|
|
8
|
+
'MM/DD/YYYY HH:mm:ss',
|
|
9
|
+
'MM-DD-YYYY HH:mm:ss',
|
|
10
|
+
'DD/MM/YYYY HH:mm:ss',
|
|
11
|
+
'DD-MM-YYYY HH:mm:ss',
|
|
12
|
+
'YYYY-MM-DD HH:mm:ss',
|
|
13
|
+
'YYYY/MM/DD HH:mm:ss',
|
|
14
|
+
'DD/MM/YYYYTHH:mm:ss',
|
|
15
|
+
'DD-MM-YYYYTHH:mm:ss',
|
|
16
|
+
'YYYY-MM-DDTHH:mm:ss',
|
|
17
|
+
'MM/DD/YYYY HH:mm',
|
|
18
|
+
'MM-DD-YYYY HH:mm',
|
|
19
|
+
'DD/MM/YYYY HH:mm',
|
|
20
|
+
'DD-MM-YYYY HH:mm',
|
|
21
|
+
'YYYY-MM-DD HH:mm',
|
|
22
|
+
'YYYY/MM/DD HH:mm',
|
|
23
|
+
'DD/MM/YYYYTHH:mm',
|
|
24
|
+
'DD-MM-YYYYTHH:mm',
|
|
25
|
+
'YYYY-MM-DDTHH:mm',
|
|
26
|
+
'YYYY/MM/DDTHH:mm',
|
|
27
|
+
'YYYY-MM-DD',
|
|
28
|
+
'YYYY/MM/DD',
|
|
29
|
+
'MM-DD-YYYY',
|
|
30
|
+
'MM/DD/YYYY',
|
|
31
|
+
'DD-MM-YYYY',
|
|
32
|
+
'DD/MM/YYYY',
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
export const toMoment = (dateValue?: string | Moment | null | Date, formats: string[] | string = MOMENT_FORMATS): Moment => {
|
|
36
|
+
if (moment.isMoment(dateValue)) return dateValue;
|
|
37
|
+
if(dateValue instanceof Date) return moment(dateValue);
|
|
38
|
+
if (!dateValue || !dateValue.length) return moment();
|
|
39
|
+
return moment(dateValue, formats);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const formatMoment = (date?: Moment, format: string = 'YYYY-MM-DDTHH:mm:ss'): string => {
|
|
43
|
+
if (!date) date = toMoment();
|
|
44
|
+
return date.format(format);
|
|
45
|
+
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {DefaultPDFElementParams, IndexedObject, PdfFont, PDFTextVariables, SelectItemShape} from "./interfaces";
|
|
6
|
+
|
|
7
|
+
export const mmToPt = (mm: number) => Math.round(pxToPt(mmToPx(mm)));
|
|
8
|
+
export const mmToPx = (mm: number, toTens: boolean = true) => {
|
|
9
|
+
const value: number = Math.round(mm / 0.264583333);
|
|
10
|
+
return toTens ? roundToTens(value) : value;
|
|
11
|
+
}
|
|
12
|
+
export const pxToMm = (pixels: number) => Math.round(pixels * 0.264583333);
|
|
13
|
+
export const pxToPt = (px: number) => Math.round(px * .75);
|
|
14
|
+
export const ptToPx = (pt: number, toTens: boolean = true) => {
|
|
15
|
+
const value: number = Math.round(pt / .75);
|
|
16
|
+
return toTens ? roundToTens(value) : value;
|
|
17
|
+
}
|
|
18
|
+
export const ptToMm = (pt: number) => pxToMm(ptToPx(pt));
|
|
19
|
+
export const PAGE_WIDTH = 794, PAGE_HEIGHT = 1122; // In pixels
|
|
20
|
+
|
|
21
|
+
export const PDF_VARIABLES: PDFTextVariables = {
|
|
22
|
+
company: {
|
|
23
|
+
bedrijf_naam: 'Bedrijfsnaam',
|
|
24
|
+
bedrijf_adres: 'Adres',
|
|
25
|
+
bedrijf_postcode: 'Postcode',
|
|
26
|
+
bedrijf_stad: 'Stad',
|
|
27
|
+
bedrijf_land: 'Land',
|
|
28
|
+
bedrijf_email: 'E-mailadres',
|
|
29
|
+
bedrijf_telefoon: 'Telefoonnummer',
|
|
30
|
+
bedrijf_iban: 'IBAN',
|
|
31
|
+
bedrijf_btw: 'BTW-nummer',
|
|
32
|
+
bedrijf_kvk: 'KvK nummer'
|
|
33
|
+
},
|
|
34
|
+
client: {
|
|
35
|
+
klant_naam: 'Klantnaam',
|
|
36
|
+
klant_adres: 'Adres',
|
|
37
|
+
klant_postcode: 'Postcode',
|
|
38
|
+
klant_stad: 'Stad',
|
|
39
|
+
klant_land: 'Land',
|
|
40
|
+
klant_extra: 'Adres toevoeging',
|
|
41
|
+
klant_email: 'E-mailadres',
|
|
42
|
+
klant_telefoon: 'Telefoonnummer',
|
|
43
|
+
// klant_iban: 'IBAN',
|
|
44
|
+
klant_btw: 'BTW-nummer',
|
|
45
|
+
klant_kvk: 'KvK nummer',
|
|
46
|
+
klant_bedrijf: 'Bedrijfsnaam',
|
|
47
|
+
},
|
|
48
|
+
invoice: {
|
|
49
|
+
datum: 'Huidige datum',
|
|
50
|
+
factuurnummer: 'Factuurnummer',
|
|
51
|
+
subtotaal: 'Subtotaal',
|
|
52
|
+
btw_totaal: 'Totaal BTW (\u20ac)',
|
|
53
|
+
factuurtotaal: 'Factuurtotaal',
|
|
54
|
+
factuurdatum: 'Factuur datum',
|
|
55
|
+
factuurref: 'Factuur referentie'
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const getPdfVariables = (customVariables?: PDFTextVariables): PDFTextVariables => {
|
|
60
|
+
const variables = PDF_VARIABLES;
|
|
61
|
+
if (customVariables) {
|
|
62
|
+
const {company, invoice, client} = customVariables;
|
|
63
|
+
for (const key of Object.keys(company))
|
|
64
|
+
variables.company[key] = company[key];
|
|
65
|
+
for (const key of Object.keys(invoice))
|
|
66
|
+
variables.invoice[key] = invoice[key];
|
|
67
|
+
for (const key of Object.keys(client))
|
|
68
|
+
variables.client[key] = client[key];
|
|
69
|
+
}
|
|
70
|
+
return variables;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const setPdfVariables = (text: string, values: IndexedObject<string>) => {
|
|
74
|
+
for (const key of Object.keys(values)) {
|
|
75
|
+
const value = values[key];
|
|
76
|
+
if (text.includes(`{${key}}`) && value.length) text =
|
|
77
|
+
text.replace(new RegExp('\{' + key + '\}', 'g'), value);
|
|
78
|
+
}
|
|
79
|
+
return text;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const setElementSettings = (element: DefaultPDFElementParams<any, any>, convertUnits: boolean = true) => {
|
|
83
|
+
const {dimensions, options} = element;
|
|
84
|
+
if (convertUnits) {
|
|
85
|
+
if (dimensions?.width) dimensions.width = ptToPx(dimensions.width, false);
|
|
86
|
+
if (dimensions?.height) dimensions.height = ptToPx(dimensions.height, false);
|
|
87
|
+
if (options?.fontSize) options.fontSize = ptToPx(element.options.fontSize, false);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const fontItems: SelectItemShape[] = [
|
|
92
|
+
{label: 'Helvetica', value: PdfFont.HELVETICA, labelStyle: {fontFamily: 'helvetica'}},
|
|
93
|
+
{label: 'Lato', value: PdfFont.LATO, labelStyle: {fontFamily: 'lato'}},
|
|
94
|
+
{label: 'Merriweather', value: PdfFont.MERRIWEATHER, labelStyle: {fontFamily: 'merriweather'}},
|
|
95
|
+
{label: 'Noto Sans', value: PdfFont.NOTO_SANS, labelStyle: {fontFamily: 'noto-sans'}},
|
|
96
|
+
{label: 'Noto Serif', value: PdfFont.NOTO_SERIF, labelStyle: {fontFamily: 'noto-serif'}},
|
|
97
|
+
{label: 'Open Sans', value: PdfFont.OPEN_SANS, labelStyle: {fontFamily: 'open-sans'}},
|
|
98
|
+
{label: 'Playfair Display', value: PdfFont.PLAYFAIR, labelStyle: {fontFamily: 'playfair'}},
|
|
99
|
+
{label: 'PT Serif', value: PdfFont.PT_SERIF, labelStyle: {fontFamily: 'pt-serif'}},
|
|
100
|
+
{label: 'Roboto', value: PdfFont.ROBOTO, labelStyle: {fontFamily: 'roboto'}},
|
|
101
|
+
{label: 'Roboto Mono', value: PdfFont.ROBOTO_MONO, labelStyle: {fontFamily: 'roboto-mono'}},
|
|
102
|
+
{label: 'Source Sans Pro', value: PdfFont.SOURCE_SANS_PRO, labelStyle: {fontFamily: 'source-sans-pro'}}
|
|
103
|
+
];
|
|
104
|
+
|
|
105
|
+
export const parsePrice = (price: number) => {
|
|
106
|
+
return price.toFixed(2).replace('.', ',').replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const roundToTens = (value: number): number => {
|
|
110
|
+
const remainder = value % 10;
|
|
111
|
+
if (remainder === 0) return value;
|
|
112
|
+
if (remainder > 4) return value + (10 - remainder);
|
|
113
|
+
return value - remainder;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const waitForFonts = (callback: Function) => {
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
if (document.fonts && document.fonts.ready) {
|
|
119
|
+
// @ts-ignore
|
|
120
|
+
document.fonts.ready.then(() => {
|
|
121
|
+
callback();
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {OutgoingHttpHeaders} from "http";
|
|
6
|
+
import {showDialog} from './eventUtil';
|
|
7
|
+
import {warn} from "./miscUtil";
|
|
8
|
+
import {FetchMethod, ResponseData} from './interfaces';
|
|
9
|
+
import {getJwt} from './jwtUtil';
|
|
10
|
+
import {voidFunction} from "./controlUtil";
|
|
11
|
+
|
|
12
|
+
type ResponseHandler = (response: Response, config: FetchOptions) => void;
|
|
13
|
+
|
|
14
|
+
export interface FetchOptions {
|
|
15
|
+
baseUrl?: string | null;
|
|
16
|
+
url: string;
|
|
17
|
+
method?: FetchMethod;
|
|
18
|
+
data?: {};
|
|
19
|
+
stringifyData?: boolean;
|
|
20
|
+
headers?: OutgoingHttpHeaders;
|
|
21
|
+
callback?: Function;
|
|
22
|
+
errorCallback?: (response: Response | string) => void;
|
|
23
|
+
credentials?: string;
|
|
24
|
+
responseParser?: ResponseHandler;
|
|
25
|
+
errorHandler?: ResponseHandler;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let abortController: AbortController;
|
|
29
|
+
let signal: AbortSignal;
|
|
30
|
+
let defaultHeaders: OutgoingHttpHeaders = {};
|
|
31
|
+
let defaultErrorHandler: ResponseHandler | null = null;
|
|
32
|
+
|
|
33
|
+
function getAbortController(): AbortController | null {
|
|
34
|
+
try {
|
|
35
|
+
if (!('AbortController' in window)) return null;
|
|
36
|
+
return new AbortController();
|
|
37
|
+
} catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const responseDataIsSuccess = (data: ResponseData): boolean => data.status === 'success';
|
|
43
|
+
|
|
44
|
+
export const setDefaultHeaders = (headers: OutgoingHttpHeaders) => {
|
|
45
|
+
defaultHeaders = headers;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function setDefaultErrorHandler(errorHandler: ResponseHandler | null) {
|
|
49
|
+
defaultErrorHandler = errorHandler;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Cancel all running requests and refresh the abort controller and signal
|
|
54
|
+
*/
|
|
55
|
+
export const cancelAllFetch = () => {
|
|
56
|
+
if (abortController) {
|
|
57
|
+
abortController.abort();
|
|
58
|
+
abortController = new AbortController;
|
|
59
|
+
signal = abortController.signal;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export function sendFetch(config: FetchOptions, legacySupport: boolean = false): AbortController | null {
|
|
64
|
+
const baseUrl = config.baseUrl || window.settings.platformUrl;
|
|
65
|
+
if (!baseUrl) throw new Error('Base url is not set!');
|
|
66
|
+
|
|
67
|
+
config = _prepareConfig(config, legacySupport);
|
|
68
|
+
const {url, method, headers, data} = config;
|
|
69
|
+
const options: { [index: string]: any } = {
|
|
70
|
+
headers,
|
|
71
|
+
method,
|
|
72
|
+
body: config.stringifyData === false ? data : JSON.stringify(data),
|
|
73
|
+
cache: 'no-store',
|
|
74
|
+
};
|
|
75
|
+
const abortController = getAbortController();
|
|
76
|
+
if (abortController) options.signal = abortController.signal;
|
|
77
|
+
|
|
78
|
+
options['mode'] = 'cors';
|
|
79
|
+
fetch(baseUrl + url, options).then((response: Response) => {
|
|
80
|
+
_handleResponse(response, config);
|
|
81
|
+
}).catch((reason: any) => {
|
|
82
|
+
if (reason.code === DOMException.ABORT_ERR) {/*Request aborted*/
|
|
83
|
+
} else if (config.errorCallback)
|
|
84
|
+
config.errorCallback(reason);
|
|
85
|
+
});
|
|
86
|
+
return abortController;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function _handleResponse(response: Response, config: FetchOptions) {
|
|
90
|
+
if (config.responseParser)
|
|
91
|
+
return config.responseParser(response, config);
|
|
92
|
+
|
|
93
|
+
if (response.ok) {
|
|
94
|
+
if (!config.callback) return;
|
|
95
|
+
if (response.headers.get('content-type') === 'application/json') {
|
|
96
|
+
response.json().then((data: any) => {
|
|
97
|
+
if (data.message === 'Invalid rights') {
|
|
98
|
+
showDialog('Je hebt niet genoeg rechten voor deze actie.');
|
|
99
|
+
data.handled = true;
|
|
100
|
+
if (config.callback) config.callback(data);
|
|
101
|
+
} else if (config.callback) {
|
|
102
|
+
data.success = responseDataIsSuccess(data);
|
|
103
|
+
config.callback(data);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
} else config.callback(response);
|
|
107
|
+
} else
|
|
108
|
+
_onErrorResponse(response, config);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function _onErrorResponse(response: Response, config: FetchOptions) {
|
|
112
|
+
if (config.errorHandler) config.errorHandler(response, config);
|
|
113
|
+
else if (config.errorCallback) config.errorCallback(response);
|
|
114
|
+
else if (config.callback) config.callback({status: 'error', message: 'Er is iets misgegaan in het systeem.'});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function _prepareConfig(options: FetchOptions, legacySupport: boolean = true): FetchOptions {
|
|
118
|
+
const fetchOptions: FetchOptions = Object.assign({}, options);
|
|
119
|
+
if (!fetchOptions.method) fetchOptions.method = FetchMethod.GET;
|
|
120
|
+
if (!fetchOptions.callback) fetchOptions.callback = voidFunction;
|
|
121
|
+
|
|
122
|
+
if ([FetchMethod.POST, FetchMethod.PUT].includes(fetchOptions.method) && !fetchOptions.data)
|
|
123
|
+
throw new Error('Cannot send POST or PUT without data.');
|
|
124
|
+
else if (fetchOptions.method === FetchMethod.GET && fetchOptions.data)
|
|
125
|
+
warn('Cannot send data with GET requests, data will be ignored.');
|
|
126
|
+
|
|
127
|
+
if (fetchOptions.credentials === undefined) fetchOptions.credentials = 'same-origin';
|
|
128
|
+
|
|
129
|
+
if (legacySupport && fetchOptions.callback) {
|
|
130
|
+
const legacyCallback = fetchOptions.callback;
|
|
131
|
+
fetchOptions.callback = (data: ResponseData) => {
|
|
132
|
+
legacyCallback({data});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return setAuthHeader(fetchOptions);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function setAuthHeader(options: FetchOptions): FetchOptions {
|
|
139
|
+
const headers: OutgoingHttpHeaders = Object.assign({}, defaultHeaders, options.headers || {});
|
|
140
|
+
const jwt = getJwt();
|
|
141
|
+
if (jwt)
|
|
142
|
+
headers.Authorization = `JWT ${jwt}`;
|
|
143
|
+
options.headers = headers;
|
|
144
|
+
return options;
|
|
145
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {Breakpoint} from "./interfaces";
|
|
6
|
+
import {warn} from "./miscUtil";
|
|
7
|
+
|
|
8
|
+
export const getScreenWidth = (includeScrollBars: boolean = false): number => {
|
|
9
|
+
if (includeScrollBars)
|
|
10
|
+
return document.documentElement.offsetWidth || 0;
|
|
11
|
+
return Math.min(document.documentElement.clientWidth, window.innerWidth || 0);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const getScreenHeight = (): number => Math.min(document.documentElement.clientHeight, window.innerHeight || 0);
|
|
15
|
+
|
|
16
|
+
export const getBreakPoint = (): Breakpoint => {
|
|
17
|
+
const screenWidth: number = getScreenWidth();
|
|
18
|
+
if (screenWidth >= Breakpoint.XL) return Breakpoint.XL;
|
|
19
|
+
if (screenWidth >= Breakpoint.LG) return Breakpoint.LG;
|
|
20
|
+
if (screenWidth >= Breakpoint.MD) return Breakpoint.MD;
|
|
21
|
+
if (screenWidth >= Breakpoint.SM) return Breakpoint.SM;
|
|
22
|
+
return Breakpoint.XS;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const deviceIsMobile = (): boolean => {
|
|
26
|
+
return window.matchMedia(`(max-width: ${Breakpoint.SM}px)`).matches;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const matchBreakpoint = (breakPoint: Breakpoint, matchType: 'less' | 'more' = 'less',
|
|
30
|
+
allowEqual: boolean = true): boolean => {
|
|
31
|
+
if (breakPoint === Breakpoint.XS) warn(
|
|
32
|
+
'Do not use Breakpoint.XS for matching breakpoints. Breakpoint.XS is equal to 0');
|
|
33
|
+
const actualBreakpoint: Breakpoint = getBreakPoint();
|
|
34
|
+
if (breakPoint === actualBreakpoint) return allowEqual;
|
|
35
|
+
else if (matchType === 'less') return actualBreakpoint < breakPoint;
|
|
36
|
+
else return actualBreakpoint > breakPoint;
|
|
37
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export const validateEmail = (email: string, allowMultiple?: boolean): boolean =>
|
|
6
|
+
allowMultiple ? validateMultipleEmails(email) :
|
|
7
|
+
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
|
|
8
|
+
email);
|
|
9
|
+
|
|
10
|
+
function validateMultipleEmails(emails: string): boolean {
|
|
11
|
+
return /^(,?(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))+$/.test(
|
|
12
|
+
emails);
|
|
13
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2021. Dave van Rijn Development
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
$icomoon-font-path: "./fonts" !default;
|
|
6
|
+
|
|
7
|
+
$common-icon-education-2: "\e95f";
|
|
8
|
+
$common-icon-suitcase: "\e910";
|
|
9
|
+
$common-icon-facebook: "\e95e";
|
|
10
|
+
$common-icon-instagram: "\e964";
|
|
11
|
+
$common-icon-linkedin: "\e965";
|
|
12
|
+
$common-icon-sms3: "\e958";
|
|
13
|
+
$common-icon-calender: "\e956";
|
|
14
|
+
$common-icon-dashboard: "\e957";
|
|
15
|
+
$common-icon-email: "\e959";
|
|
16
|
+
$common-icon-messenger: "\e95a";
|
|
17
|
+
$common-icon-sms: "\e95b";
|
|
18
|
+
$common-icon-triangle: "\e95c";
|
|
19
|
+
$common-icon-whatsapp: "\e95d";
|
|
20
|
+
$common-icon-arrow_bothways: "\e955";
|
|
21
|
+
$common-icon-note: "\e947";
|
|
22
|
+
$common-icon-contact: "\e94e";
|
|
23
|
+
$common-icon-files: "\e94f";
|
|
24
|
+
$common-icon-alarm: "\e950";
|
|
25
|
+
$common-icon-bar-magnifier: "\e954";
|
|
26
|
+
$common-icon-course: "\e94b";
|
|
27
|
+
$common-icon-recovery-place: "\e948";
|
|
28
|
+
$common-icon-orthodontist: "\e949";
|
|
29
|
+
$common-icon-ying-yang: "\e94a";
|
|
30
|
+
$common-icon-star-half: "\e952";
|
|
31
|
+
$common-icon-star-full: "\e945";
|
|
32
|
+
$common-icon-star-empty: "\e946";
|
|
33
|
+
$common-icon-acne: "\e953";
|
|
34
|
+
$common-icon-anti-conception: "\e960";
|
|
35
|
+
$common-icon-edit: "\e968";
|
|
36
|
+
$common-icon-feetcare: "\e969";
|
|
37
|
+
$common-icon-info: "\e96c";
|
|
38
|
+
$common-icon-medical-supply: "\e96d";
|
|
39
|
+
$common-icon-medicine: "\e96e";
|
|
40
|
+
$common-icon-piggy-bank: "\e96f";
|
|
41
|
+
$common-icon-dentist: "\e94c";
|
|
42
|
+
$common-icon-pregnancy-care: "\e94d";
|
|
43
|
+
$common-icon-physio: "\e951";
|
|
44
|
+
$common-icon-trash: "\e944";
|
|
45
|
+
$common-icon-book: "\e943";
|
|
46
|
+
$common-icon-file-checklist: "\e941";
|
|
47
|
+
$common-icon-safe: "\e942";
|
|
48
|
+
$common-icon-bike: "\e919";
|
|
49
|
+
$common-icon-boiler: "\e91a";
|
|
50
|
+
$common-icon-camera-2: "\e91b";
|
|
51
|
+
$common-icon-camping-equipment: "\e91c";
|
|
52
|
+
$common-icon-caravan: "\e91d";
|
|
53
|
+
$common-icon-couche: "\e91e";
|
|
54
|
+
$common-icon-desktop: "\e91f";
|
|
55
|
+
$common-icon-display: "\e920";
|
|
56
|
+
$common-icon-document-2: "\e921";
|
|
57
|
+
$common-icon-dumbbell: "\e922";
|
|
58
|
+
$common-icon-education: "\e923";
|
|
59
|
+
$common-icon-electronics: "\e924";
|
|
60
|
+
$common-icon-glasses: "\e925";
|
|
61
|
+
$common-icon-glue: "\e926";
|
|
62
|
+
$common-icon-gramophone: "\e927";
|
|
63
|
+
$common-icon-health-insurance: "\e928";
|
|
64
|
+
$common-icon-hearing-aid: "\e929";
|
|
65
|
+
$common-icon-kitchen-mixer: "\e92a";
|
|
66
|
+
$common-icon-laptop: "\e92b";
|
|
67
|
+
$common-icon-medical: "\e92c";
|
|
68
|
+
$common-icon-mobile-2: "\e92d";
|
|
69
|
+
$common-icon-mobile: "\e92e";
|
|
70
|
+
$common-icon-moped-front: "\e92f";
|
|
71
|
+
$common-icon-moped: "\e930";
|
|
72
|
+
$common-icon-motor-helmet: "\e931";
|
|
73
|
+
$common-icon-personal-info: "\e932";
|
|
74
|
+
$common-icon-radio: "\e933";
|
|
75
|
+
$common-icon-sailing-boat: "\e934";
|
|
76
|
+
$common-icon-ski: "\e935";
|
|
77
|
+
$common-icon-sofa: "\e936";
|
|
78
|
+
$common-icon-sport-shirt: "\e937";
|
|
79
|
+
$common-icon-sport-shoes: "\e938";
|
|
80
|
+
$common-icon-tablet: "\e939";
|
|
81
|
+
$common-icon-tax-office: "\e93a";
|
|
82
|
+
$common-icon-tax: "\e93b";
|
|
83
|
+
$common-icon-tent-2: "\e93c";
|
|
84
|
+
$common-icon-tent: "\e93d";
|
|
85
|
+
$common-icon-tv: "\e93e";
|
|
86
|
+
$common-icon-vacuum-cleaner: "\e93f";
|
|
87
|
+
$common-icon-work-office: "\e940";
|
|
88
|
+
$common-icon-profile: "\e918";
|
|
89
|
+
$common-icon-car-speed-gauge: "\e915";
|
|
90
|
+
$common-icon-file-add: "\e916";
|
|
91
|
+
$common-icon-travel-beach: "\e917";
|
|
92
|
+
$common-icon-banking-spending: "\e914";
|
|
93
|
+
$common-icon-car: "\e913";
|
|
94
|
+
$common-icon-first-aid-kit: "\e901";
|
|
95
|
+
$common-icon-money-bag: "\e902";
|
|
96
|
+
$common-icon-pasport: "\e903";
|
|
97
|
+
$common-icon-home: "\e904";
|
|
98
|
+
$common-icon-travel-insurance: "\e905";
|
|
99
|
+
$common-icon-clock: "\e906";
|
|
100
|
+
$common-icon-alarm-clock: "\e907";
|
|
101
|
+
$common-icon-sms2: "\e908";
|
|
102
|
+
$common-icon-email2: "\e909";
|
|
103
|
+
$common-icon-check: "\e90a";
|
|
104
|
+
$common-icon-plus: "\e90b";
|
|
105
|
+
$common-icon-document: "\e90c";
|
|
106
|
+
$common-icon-arrow-left: "\e90d";
|
|
107
|
+
$common-icon-arrow-right: "\e90e";
|
|
108
|
+
$common-icon-person: "\e90f";
|
|
109
|
+
$common-icon-world: "\e911";
|
|
110
|
+
$common-icon-user2: "\e912";
|
|
111
|
+
$common-icon-camera: "\e963";
|
|
112
|
+
$common-icon-bulb: "\e962";
|
|
113
|
+
$common-icon-folder-open2: "\e961";
|
|
114
|
+
$common-icon-play: "\ea15";
|
|
115
|
+
$common-icon-excel: "\e900";
|
|
116
|
+
$common-icon-powerpoint: "\e966";
|
|
117
|
+
$common-icon-word: "\e967";
|
|
118
|
+
$common-icon-pdf: "\e96a";
|
|
119
|
+
$common-icon-caret-down: "\f0d7";
|
|
120
|
+
$common-icon-th-large: "\f009";
|
|
121
|
+
$common-icon-th-list: "\f00b";
|
|
122
|
+
$common-icon-image: "\f03e";
|
|
123
|
+
$common-icon-user3: "\f008";
|
|
124
|
+
$common-icon-lock2: "\f024";
|
|
125
|
+
$common-icon-shield2: "\f133";
|
|
126
|
+
$common-icon-email-2: "\e96b";
|
|
127
|
+
$common-icon-sms-2: "\e970";
|
|
128
|
+
$common-icon-menu: "\f0c9";
|
|
129
|
+
$common-icon-euro: "\f153";
|
|
130
|
+
$common-icon-pin: "\f08e";
|
|
131
|
+
$common-icon-back: "\f112";
|
|
132
|
+
$common-icon-student: "\e971";
|
|
133
|
+
$common-icon-youngprof: "\e972";
|
|
134
|
+
$common-icon-cross: "\e973";
|
|
135
|
+
$common-icon-opera: "\f26a";
|
|
136
|
+
$common-icon-safari: "\f267";
|
|
137
|
+
$common-icon-chrome: "\f268";
|
|
138
|
+
$common-icon-firefox: "\f269";
|
|
139
|
+
$common-icon-list-numbered: "\e9b9";
|
|
140
|
+
|