@hortiview/shared-components 1.11.0 → 2.0.0

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.
@@ -1,7 +1,7 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- import { useMemo as a } from "react";
3
- import { ContextMenu as x } from "../ContextMenu/ContextMenu.js";
4
- const j = ({
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { useMemo as d } from "react";
3
+ import { ContextMenu as v } from "../ContextMenu/ContextMenu.js";
4
+ const b = ({
5
5
  data: r = [],
6
6
  order: n = [],
7
7
  cellTemplates: e = void 0,
@@ -10,9 +10,9 @@ const j = ({
10
10
  customColumnWidth: o,
11
11
  cardTitleColumn: u,
12
12
  cardSubTitleColumn: s
13
- }) => a(() => {
13
+ }) => d(() => {
14
14
  if (r?.length === 0) return [];
15
- const c = v(r[0], n).map((i) => {
15
+ const c = x(r[0], n).map((i) => {
16
16
  const p = o ? o[i] : void 0;
17
17
  return {
18
18
  id: i,
@@ -20,6 +20,7 @@ const j = ({
20
20
  accessor: i,
21
21
  cellTemplate: e ? e[i] : void 0,
22
22
  cellProps: p ? { width: p } : void 0,
23
+ headerCellProps: p ? { width: p } : void 0,
23
24
  asCardTitle: i === u,
24
25
  asCardSubtitle: i === s
25
26
  };
@@ -37,13 +38,13 @@ const j = ({
37
38
  o,
38
39
  u,
39
40
  s
40
- ]), l = ({
41
+ ]), j = ({
41
42
  data: r = [],
42
43
  getRowActions: n = void 0
43
- }) => a(() => n ? r.map((e) => {
44
- const t = /* @__PURE__ */ d(x, { actions: n(e), iconOrientation: "horizontal" });
44
+ }) => d(() => n ? r.map((e) => {
45
+ const t = /* @__PURE__ */ a(v, { actions: n(e), iconOrientation: "horizontal" });
45
46
  return { ...e, actions: t };
46
- }) : r, [r, n]), v = (r, n) => {
47
+ }) : r, [r, n]), x = (r, n) => {
47
48
  if (!r) return [];
48
49
  let e = Object.keys(r).map((t) => t);
49
50
  return n?.length > 0 && (e = e.sort((t, f) => {
@@ -52,6 +53,6 @@ const j = ({
52
53
  })), e;
53
54
  };
54
55
  export {
55
- j as useGenerateColumns,
56
- l as useGenerateTableData
56
+ b as useGenerateColumns,
57
+ j as useGenerateTableData
57
58
  };
@@ -1,9 +1,8 @@
1
1
  import { jsx as i } from "react/jsx-runtime";
2
2
  import { P as r } from "../../index.es-D-CKRzIB.js";
3
- import '../../assets/main.css';/* empty css */
4
3
  import "react";
5
4
  import "../../isEmpty-B4GG2s-V.js";
6
- import { u as m } from "../../useBreakpoints-MzTZ0tCT.js";
5
+ import { u as d } from "../../useBreakpoints-MzTZ0tCT.js";
7
6
  import "../../react-tooltip.min-DSY6KDqS.js";
8
7
  import "../../orderBy-Bd48bw88.js";
9
8
  import "../../uniqueId-NU3-C36A.js";
@@ -11,8 +10,8 @@ import "react-hook-form";
11
10
  import "../../get-DFv1gXfq.js";
12
11
  import "../../isArray-Dub1wGJM.js";
13
12
  import "../../isString-BW9UHONv.js";
14
- const x = ({ children: o }) => {
15
- const { isDesktop: t } = m();
13
+ const k = ({ children: o }) => {
14
+ const { isDesktop: t } = d();
16
15
  return /* @__PURE__ */ i(
17
16
  r,
18
17
  {
@@ -24,5 +23,5 @@ const x = ({ children: o }) => {
24
23
  );
25
24
  };
26
25
  export {
27
- x as ModulePadding
26
+ k as ModulePadding
28
27
  };
@@ -1,4 +1,6 @@
1
- type SearchBarProps = {
1
+ import { TextfieldProps } from '@element-public/react-textfield';
2
+
3
+ type SearchBarProps = Pick<TextfieldProps, 'placeholder' | 'dense' | 'className' | 'fullWidth'> & {
2
4
  /**
3
5
  * the current search term
4
6
  */
@@ -7,18 +9,6 @@ type SearchBarProps = {
7
9
  * the function to set the search term
8
10
  */
9
11
  setSearchTerm: (value: string) => void;
10
- /**
11
- * the placeholder of the search input
12
- */
13
- placeholder?: string;
14
- /**
15
- * if true the field is smaller, normal size otherwise, default: false
16
- */
17
- dense?: boolean;
18
- /**
19
- * optional className to customize the searchbar style
20
- */
21
- className?: string;
22
12
  };
23
- export declare const SearchBar: ({ className, dense, searchTerm, setSearchTerm, placeholder, }: SearchBarProps) => import("react/jsx-runtime").JSX.Element;
13
+ export declare const SearchBar: ({ className, dense, searchTerm, setSearchTerm, placeholder, fullWidth, }: SearchBarProps) => import("react/jsx-runtime").JSX.Element;
24
14
  export {};
@@ -1,27 +1,28 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
- import { I as c } from "../../index.es-0lQcz8m1.js";
3
- import { T as i } from "../../index.es-25EARqhH.js";
4
- import '../../assets/SearchBar.css';const l = "_searchbar_gnvwc_1", u = {
5
- searchbar: l
6
- }, f = ({
2
+ import { I as i } from "../../index.es-0lQcz8m1.js";
3
+ import { T as l } from "../../index.es-25EARqhH.js";
4
+ import '../../assets/SearchBar.css';const u = "_searchbar_gnvwc_1", b = {
5
+ searchbar: u
6
+ }, p = ({
7
7
  className: o = "",
8
8
  dense: n = !1,
9
9
  searchTerm: a,
10
10
  setSearchTerm: t,
11
- placeholder: s
11
+ placeholder: s,
12
+ fullWidth: e = !0
12
13
  }) => /* @__PURE__ */ r(
13
- i,
14
+ l,
14
15
  {
15
16
  "data-testid": "search-bar-input",
16
- className: `${o ?? ""} ${u.searchbar}`,
17
+ className: `${o ?? ""} ${b.searchbar}`,
17
18
  dense: n,
18
19
  variant: "outlined",
19
20
  placeholder: s,
20
21
  value: a,
21
- onChange: (e) => t(e.target.value),
22
- fullWidth: !0,
22
+ onChange: (c) => t(c.target.value),
23
+ fullWidth: e,
23
24
  trailingIcon: /* @__PURE__ */ r(
24
- c,
25
+ i,
25
26
  {
26
27
  "data-testid": "search-bar-icon-button",
27
28
  icon: a ? "close" : "search",
@@ -31,5 +32,5 @@ import '../../assets/SearchBar.css';const l = "_searchbar_gnvwc_1", u = {
31
32
  }
32
33
  );
33
34
  export {
34
- f as SearchBar
35
+ p as SearchBar
35
36
  };
package/dist/main.d.ts CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  export { AlertBanner } from './components/AlertBanner/AlertBanner';
3
2
  export { BaseView } from './components/BaseView/BaseView';
4
3
  export { BasicHeading } from './components/BasicHeading/BasicHeading';
@@ -40,17 +39,17 @@ export { FormToggle } from './components/FormComponents/FormToggle/FormToggle';
40
39
  export { AvailableCustomIcons } from './enums/AvailableCustomIcons';
41
40
  export { ThemeColor } from './enums/ThemeColor';
42
41
  export { useBreakpoints } from './hooks/useBreakpoints';
43
- export { capitalizeFirstLetters, getNumberAsLocaleString, trimLeadingAndTrailingSpaces } from './services/UtilService';
42
+ export { capitalizeFirstLetters, getNumberAsLocaleString, trimLeadingAndTrailingSpaces, } from './services/UtilService';
44
43
  export type { ActionProps } from './components/ContextMenu/ContextMenu';
45
44
  export type { FormSelectOption } from './components/FormComponents/FormSelect/FormSelect';
46
45
  export type { FormTextProps } from './components/FormComponents/FormText/FormText';
47
46
  export type { HealthCheckFailedProps } from './components/HealthCheckFailed/HealthCheckFailed';
48
47
  export type { FieldItem } from './components/InfoGroup/InfoGroup';
49
48
  export type { LoadingSpinnerProps } from './components/LoadingSpinner/Default/LoadingSpinner';
50
- export type { Step, StepperBaseProps, StepperButtonProps, StepperProps } from './components/Stepper/stepperTypes';
49
+ export type { Step, StepperBaseProps, StepperButtonProps, StepperProps, } from './components/Stepper/stepperTypes';
51
50
  export type { FilterData, FilterOption, FilterSelection } from './types/Filter';
52
51
  export type { CellTemplate, CellTemplateProps, TableLayoutProps } from './types/GenericTable';
53
52
  export type { HashTab } from './types/HashTab';
54
53
  export type { BaseListElement, ListElement } from './types/ListElement';
55
- export { AVAILABLE_COUNTRY_KEYS, AVAILABLE_LOCALES, ENGLISH_LANGUAGE_ID, GERMAN_LANGUAGE_ID, LANGUAGE_CODES_MAPPER, LANGUAGE_ID_MAPPER, SPANISH_LANGUAGE_ID, TURKISH_LANGUAGE_ID } from './types/Languages';
54
+ export { AVAILABLE_COUNTRY_KEYS, AVAILABLE_LOCALES, ENGLISH_LANGUAGE_ID, GERMAN_LANGUAGE_ID, LANGUAGE_CODES_MAPPER, LANGUAGE_ID_MAPPER, SPANISH_LANGUAGE_ID, TURKISH_LANGUAGE_ID, } from './types/Languages';
56
55
  export type { AVAILABLE_LANGUAGE_CODES, LANGUAGE_COUNTRY_CODES } from './types/Languages';
package/dist/main.js CHANGED
@@ -1,99 +1,98 @@
1
- import './assets/main.css';/* empty css */
2
- import { AlertBanner as t } from "./components/AlertBanner/AlertBanner.js";
3
- import { BaseView as p } from "./components/BaseView/BaseView.js";
4
- import { BasicHeading as x } from "./components/BasicHeading/BasicHeading.js";
5
- import { BlockView as i } from "./components/BlockView/BlockView.js";
6
- import { ChipCard as A } from "./components/ChipCard/ChipCard.js";
7
- import { ContextMenu as c } from "./components/ContextMenu/ContextMenu.js";
8
- import { DeleteModal as d } from "./components/DeleteModal/DeleteModal.js";
9
- import { DetailContentWrapper as E } from "./components/DetailContentWrapper/DetailContentWrapper.js";
10
- import { Disclaimer as s } from "./components/Disclaimer/Disclaimer.js";
11
- import { EmptyView as I } from "./components/EmptyView/EmptyView.js";
12
- import { Filter as N } from "./components/Filter/Filter.js";
13
- import { FormattedNumberDisplay as C } from "./components/FormattedNumberDisplay/FormattedNumberDisplay.js";
14
- import { GenericTable as u } from "./components/GenericTable/GenericTable.js";
15
- import { HashTabView as T } from "./components/HashTabView/HashTabView.js";
16
- import { HeaderFilter as H } from "./components/HeaderFilter/HeaderFilter.js";
17
- import { HealthCheckFailed as h } from "./components/HealthCheckFailed/HealthCheckFailed.js";
18
- import { Iconify as P } from "./components/Iconify/Iconify.js";
19
- import { InfoGroup as R } from "./components/InfoGroup/InfoGroup.js";
20
- import { ListArea as w } from "./components/ListArea/ListArea.js";
21
- import { LoadingSpinner as v } from "./components/LoadingSpinner/Default/LoadingSpinner.js";
22
- import { Modal as Y } from "./components/Modal/Modal.js";
23
- import { ModulePadding as z } from "./components/ModulePadding/ModulePadding.js";
24
- import { OverflowTooltip as X } from "./components/OverflowTooltip/OverflowTooltip.js";
25
- import { ScrollbarX as q, ScrollbarY as J } from "./components/Scrollbar/Scrollbar.js";
26
- import { SearchBar as Z } from "./components/SearchBar/SearchBar.js";
27
- import { Select as rr } from "./components/Select/Select.js";
28
- import { StepperHeader as er } from "./components/Stepper/components/StepperHeader.js";
29
- import { StepperIndicator as mr } from "./components/Stepper/components/StepperIndicator.js";
30
- import { Stepper as fr } from "./components/Stepper/Stepper.js";
31
- import { VerticalDivider as ar } from "./components/VerticalDivider/VerticalDivider.js";
32
- import { FormCheckBox as lr } from "./components/FormComponents/FormCheckBox/FormCheckBox.js";
33
- import { FormDatePicker as nr } from "./components/FormComponents/FormDatePicker/FormDatePicker.js";
34
- import { FormNumber as Sr } from "./components/FormComponents/FormNumber/FormNumber.js";
35
- import { FormRadio as Lr } from "./components/FormComponents/FormRadio/FormRadio.js";
36
- import { FormSelect as Gr } from "./components/FormComponents/FormSelect/FormSelect.js";
37
- import { FormSlider as _r } from "./components/FormComponents/FormSlider/FormSlider.js";
38
- import { FormText as Fr } from "./components/FormComponents/FormText/FormText.js";
39
- import { FormToggle as Dr } from "./components/FormComponents/FormToggle/FormToggle.js";
40
- import { AvailableCustomIcons as gr } from "./enums/AvailableCustomIcons.js";
41
- import { ThemeColor as Br } from "./enums/ThemeColor.js";
42
- import { u as br } from "./useBreakpoints-MzTZ0tCT.js";
43
- import { capitalizeFirstLetters as Ur, getNumberAsLocaleString as hr, trimLeadingAndTrailingSpaces as Mr } from "./services/UtilService.js";
44
- import { AVAILABLE_COUNTRY_KEYS as Vr, AVAILABLE_LOCALES as Rr, ENGLISH_LANGUAGE_ID as kr, GERMAN_LANGUAGE_ID as wr, LANGUAGE_CODES_MAPPER as Or, LANGUAGE_ID_MAPPER as vr, SPANISH_LANGUAGE_ID as yr, TURKISH_LANGUAGE_ID as Yr } from "./types/Languages.js";
1
+ import { AlertBanner as e } from "./components/AlertBanner/AlertBanner.js";
2
+ import { BaseView as m } from "./components/BaseView/BaseView.js";
3
+ import { BasicHeading as f } from "./components/BasicHeading/BasicHeading.js";
4
+ import { BlockView as a } from "./components/BlockView/BlockView.js";
5
+ import { ChipCard as l } from "./components/ChipCard/ChipCard.js";
6
+ import { ContextMenu as n } from "./components/ContextMenu/ContextMenu.js";
7
+ import { DeleteModal as S } from "./components/DeleteModal/DeleteModal.js";
8
+ import { DetailContentWrapper as L } from "./components/DetailContentWrapper/DetailContentWrapper.js";
9
+ import { Disclaimer as G } from "./components/Disclaimer/Disclaimer.js";
10
+ import { EmptyView as _ } from "./components/EmptyView/EmptyView.js";
11
+ import { Filter as F } from "./components/Filter/Filter.js";
12
+ import { FormattedNumberDisplay as D } from "./components/FormattedNumberDisplay/FormattedNumberDisplay.js";
13
+ import { GenericTable as g } from "./components/GenericTable/GenericTable.js";
14
+ import { HashTabView as B } from "./components/HashTabView/HashTabView.js";
15
+ import { HeaderFilter as b } from "./components/HeaderFilter/HeaderFilter.js";
16
+ import { HealthCheckFailed as U } from "./components/HealthCheckFailed/HealthCheckFailed.js";
17
+ import { Iconify as M } from "./components/Iconify/Iconify.js";
18
+ import { InfoGroup as V } from "./components/InfoGroup/InfoGroup.js";
19
+ import { ListArea as k } from "./components/ListArea/ListArea.js";
20
+ import { LoadingSpinner as O } from "./components/LoadingSpinner/Default/LoadingSpinner.js";
21
+ import { Modal as y } from "./components/Modal/Modal.js";
22
+ import { ModulePadding as K } from "./components/ModulePadding/ModulePadding.js";
23
+ import { OverflowTooltip as W } from "./components/OverflowTooltip/OverflowTooltip.js";
24
+ import { ScrollbarX as j, ScrollbarY as q } from "./components/Scrollbar/Scrollbar.js";
25
+ import { SearchBar as Q } from "./components/SearchBar/SearchBar.js";
26
+ import { Select as $ } from "./components/Select/Select.js";
27
+ import { StepperHeader as or } from "./components/Stepper/components/StepperHeader.js";
28
+ import { StepperIndicator as tr } from "./components/Stepper/components/StepperIndicator.js";
29
+ import { Stepper as pr } from "./components/Stepper/Stepper.js";
30
+ import { VerticalDivider as xr } from "./components/VerticalDivider/VerticalDivider.js";
31
+ import { FormCheckBox as ir } from "./components/FormComponents/FormCheckBox/FormCheckBox.js";
32
+ import { FormDatePicker as Ar } from "./components/FormComponents/FormDatePicker/FormDatePicker.js";
33
+ import { FormNumber as cr } from "./components/FormComponents/FormNumber/FormNumber.js";
34
+ import { FormRadio as dr } from "./components/FormComponents/FormRadio/FormRadio.js";
35
+ import { FormSelect as Er } from "./components/FormComponents/FormSelect/FormSelect.js";
36
+ import { FormSlider as sr } from "./components/FormComponents/FormSlider/FormSlider.js";
37
+ import { FormText as Ir } from "./components/FormComponents/FormText/FormText.js";
38
+ import { FormToggle as Nr } from "./components/FormComponents/FormToggle/FormToggle.js";
39
+ import { AvailableCustomIcons as Cr } from "./enums/AvailableCustomIcons.js";
40
+ import { ThemeColor as ur } from "./enums/ThemeColor.js";
41
+ import { u as Tr } from "./useBreakpoints-MzTZ0tCT.js";
42
+ import { capitalizeFirstLetters as Hr, getNumberAsLocaleString as Ur, trimLeadingAndTrailingSpaces as hr } from "./services/UtilService.js";
43
+ import { AVAILABLE_COUNTRY_KEYS as Pr, AVAILABLE_LOCALES as Vr, ENGLISH_LANGUAGE_ID as Rr, GERMAN_LANGUAGE_ID as kr, LANGUAGE_CODES_MAPPER as wr, LANGUAGE_ID_MAPPER as Or, SPANISH_LANGUAGE_ID as vr, TURKISH_LANGUAGE_ID as yr } from "./types/Languages.js";
45
44
  export {
46
- Vr as AVAILABLE_COUNTRY_KEYS,
47
- Rr as AVAILABLE_LOCALES,
48
- t as AlertBanner,
49
- gr as AvailableCustomIcons,
50
- p as BaseView,
51
- x as BasicHeading,
52
- i as BlockView,
53
- A as ChipCard,
54
- c as ContextMenu,
55
- d as DeleteModal,
56
- E as DetailContentWrapper,
57
- s as Disclaimer,
58
- kr as ENGLISH_LANGUAGE_ID,
59
- I as EmptyView,
60
- N as Filter,
61
- lr as FormCheckBox,
62
- nr as FormDatePicker,
63
- Sr as FormNumber,
64
- Lr as FormRadio,
65
- Gr as FormSelect,
66
- _r as FormSlider,
67
- Fr as FormText,
68
- Dr as FormToggle,
69
- C as FormattedNumberDisplay,
70
- wr as GERMAN_LANGUAGE_ID,
71
- u as GenericTable,
72
- T as HashTabView,
73
- H as HeaderFilter,
74
- h as HealthCheckFailed,
75
- P as Iconify,
76
- R as InfoGroup,
77
- Or as LANGUAGE_CODES_MAPPER,
78
- vr as LANGUAGE_ID_MAPPER,
79
- w as ListArea,
80
- v as LoadingSpinner,
81
- Y as Modal,
82
- z as ModulePadding,
83
- X as OverflowTooltip,
84
- yr as SPANISH_LANGUAGE_ID,
85
- q as ScrollbarX,
86
- J as ScrollbarY,
87
- Z as SearchBar,
88
- rr as Select,
89
- fr as Stepper,
90
- er as StepperHeader,
91
- mr as StepperIndicator,
92
- Yr as TURKISH_LANGUAGE_ID,
93
- Br as ThemeColor,
94
- ar as VerticalDivider,
95
- Ur as capitalizeFirstLetters,
96
- hr as getNumberAsLocaleString,
97
- Mr as trimLeadingAndTrailingSpaces,
98
- br as useBreakpoints
45
+ Pr as AVAILABLE_COUNTRY_KEYS,
46
+ Vr as AVAILABLE_LOCALES,
47
+ e as AlertBanner,
48
+ Cr as AvailableCustomIcons,
49
+ m as BaseView,
50
+ f as BasicHeading,
51
+ a as BlockView,
52
+ l as ChipCard,
53
+ n as ContextMenu,
54
+ S as DeleteModal,
55
+ L as DetailContentWrapper,
56
+ G as Disclaimer,
57
+ Rr as ENGLISH_LANGUAGE_ID,
58
+ _ as EmptyView,
59
+ F as Filter,
60
+ ir as FormCheckBox,
61
+ Ar as FormDatePicker,
62
+ cr as FormNumber,
63
+ dr as FormRadio,
64
+ Er as FormSelect,
65
+ sr as FormSlider,
66
+ Ir as FormText,
67
+ Nr as FormToggle,
68
+ D as FormattedNumberDisplay,
69
+ kr as GERMAN_LANGUAGE_ID,
70
+ g as GenericTable,
71
+ B as HashTabView,
72
+ b as HeaderFilter,
73
+ U as HealthCheckFailed,
74
+ M as Iconify,
75
+ V as InfoGroup,
76
+ wr as LANGUAGE_CODES_MAPPER,
77
+ Or as LANGUAGE_ID_MAPPER,
78
+ k as ListArea,
79
+ O as LoadingSpinner,
80
+ y as Modal,
81
+ K as ModulePadding,
82
+ W as OverflowTooltip,
83
+ vr as SPANISH_LANGUAGE_ID,
84
+ j as ScrollbarX,
85
+ q as ScrollbarY,
86
+ Q as SearchBar,
87
+ $ as Select,
88
+ pr as Stepper,
89
+ or as StepperHeader,
90
+ tr as StepperIndicator,
91
+ yr as TURKISH_LANGUAGE_ID,
92
+ ur as ThemeColor,
93
+ xr as VerticalDivider,
94
+ Hr as capitalizeFirstLetters,
95
+ Ur as getNumberAsLocaleString,
96
+ hr as trimLeadingAndTrailingSpaces,
97
+ Tr as useBreakpoints
99
98
  };
@@ -41,6 +41,11 @@ export type TableLayoutProps<T> = {
41
41
  * ```
42
42
  */
43
43
  tableActions?: JSX.Element[];
44
+ /**
45
+ * position of the table actions, can be 'start' or 'end'
46
+ * @default 'end'
47
+ */
48
+ tableActionPosition?: 'start' | 'end';
44
49
  /**
45
50
  * text to be displayed when no data is available
46
51
  */
@@ -99,6 +104,16 @@ export type TableLayoutProps<T> = {
99
104
  * @default 'Rows per page'
100
105
  */
101
106
  rowsPerPageTranslation?: string;
107
+ /**
108
+ * the elevation level of the table, used to set the shadow of the table
109
+ * @default 1
110
+ */
111
+ tableElevationLevel?: number;
112
+ /**
113
+ * the layout of the table, can be 'standard' or 'flex'
114
+ * @default 'standard'
115
+ */
116
+ tableLayout?: 'standard' | 'flex';
102
117
  };
103
118
  /**
104
119
  * Props for the CellTemplate component {@link CellTemplate}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hortiview/shared-components",
3
3
  "description": "This is a shared component library. It should used in the HortiView platform and its modules.",
4
- "version": "1.11.0",
4
+ "version": "2.0.0",
5
5
  "type": "module",
6
6
  "repository": "https://dev.azure.com/sdundc/HV%20Platform/_git/HortiView-Frontend-Shared",
7
7
  "author": "Falk Menge <falk.menge.ext@bayer.com>",
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,700|Roboto+Mono:400,500|Material+Icons";