@axos-web-dev/shared-components 0.0.11 → 0.0.13

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.
Files changed (82) hide show
  1. package/dist/ApyCalculator/index.js +3 -2
  2. package/dist/Button/Button.d.ts +24 -0
  3. package/dist/Button/Button.js +47 -0
  4. package/dist/Button/GoBackButton.d.ts +3 -0
  5. package/dist/Button/GoBackButton.js +15 -0
  6. package/dist/Button/index.d.ts +3 -21
  7. package/dist/Button/index.js +5 -20
  8. package/dist/CallToActionBar/index.js +30 -36
  9. package/dist/Chevron/index.js +53 -1
  10. package/dist/CollectInformationAlert/index.js +4 -1
  11. package/dist/ContentBanner/index.js +4 -1
  12. package/dist/Forms/Forms.css.d.ts +1 -0
  13. package/dist/Forms/Forms.css.js +2 -0
  14. package/dist/Forms/ScheduleCall.d.ts +2 -1
  15. package/dist/Forms/ScheduleCall.js +11 -13
  16. package/dist/Forms/index.js +2 -1
  17. package/dist/HeroBanner/index.js +4 -1
  18. package/dist/Hyperlink/index.js +58 -1
  19. package/dist/IconBillboard/IconBillboard.d.ts +3 -1
  20. package/dist/IconBillboard/IconBillboard.interface.d.ts +2 -0
  21. package/dist/IconBillboard/IconBillboard.js +49 -34
  22. package/dist/IconBillboard/IconBillboardSet.js +50 -56
  23. package/dist/ImageBillboard/ImageBillboard.css.d.ts +1 -0
  24. package/dist/ImageBillboard/ImageBillboard.interface.d.ts +3 -0
  25. package/dist/ImageBillboard/ImageBillboard.js +4 -1
  26. package/dist/ImageBillboard/ImageBillboardSet.d.ts +1 -1
  27. package/dist/ImageBillboard/ImageBillboardSet.js +12 -3
  28. package/dist/MainHTML/index.d.ts +1 -1
  29. package/dist/MainHTML/index.js +1 -1
  30. package/dist/Modal/Modal.d.ts +3 -0
  31. package/dist/Modal/Modal.js +95 -0
  32. package/dist/Modal/contextApi/store.d.ts +10 -0
  33. package/dist/Modal/contextApi/store.js +55 -0
  34. package/dist/Modal/index.d.ts +2 -3
  35. package/dist/Modal/index.js +7 -92
  36. package/dist/NavigationMenu/AxosAdvisor/NavBar.css.d.ts +2 -0
  37. package/dist/NavigationMenu/AxosAdvisor/NavBar.css.js +9 -0
  38. package/dist/NavigationMenu/AxosAdvisor/NavBar.module.js +52 -52
  39. package/dist/NavigationMenu/AxosAdvisor/NavData.d.ts +4 -0
  40. package/dist/NavigationMenu/AxosAdvisor/NavData.js +10 -0
  41. package/dist/NavigationMenu/AxosAdvisor/SubNavBar.js +44 -47
  42. package/dist/NavigationMenu/AxosAdvisor/SubNavbar.css.d.ts +4 -0
  43. package/dist/NavigationMenu/AxosAdvisor/SubNavbar.css.js +13 -0
  44. package/dist/NavigationMenu/AxosAdvisor/index.js +273 -203
  45. package/dist/NavigationMenu/AxosFiduciary/NavBar.module.js +40 -40
  46. package/dist/NavigationMenu/AxosFiduciary/index.js +12 -6
  47. package/dist/SecondaryFooter/index.js +2 -1
  48. package/dist/SetContainer/SetContainer.js +30 -1
  49. package/dist/Table/Table.css.d.ts +19 -6
  50. package/dist/Table/Table.css.js +5 -1
  51. package/dist/Table/Table.d.ts +3 -5
  52. package/dist/Table/Table.interface.d.ts +2 -0
  53. package/dist/Table/Table.js +8 -5
  54. package/dist/Table/index.js +3 -1
  55. package/dist/VideoTile/VideoTile.js +2 -2
  56. package/dist/assets/CallToActionBar/CallToActionBar.css +19 -8
  57. package/dist/assets/ContentBanner/ContentBanner.css +2 -0
  58. package/dist/assets/FaqAccordion/FaqAccordion.css +2 -2
  59. package/dist/assets/Forms/Forms.css +9 -1
  60. package/dist/assets/IconBillboard/IconBillboard.css +8 -2
  61. package/dist/assets/ImageBillboard/ImageBillboard.css +29 -0
  62. package/dist/assets/Input/Input.css +2 -1
  63. package/dist/assets/Modal/Modal.css +3 -3
  64. package/dist/assets/NavigationMenu/AxosAdvisor/NavBar.css +9 -0
  65. package/dist/assets/NavigationMenu/AxosAdvisor/NavBar.css.css +125 -122
  66. package/dist/assets/NavigationMenu/AxosAdvisor/SubNavbar.css +17 -0
  67. package/dist/assets/NavigationMenu/AxosFiduciary/NavBar.css.css +82 -82
  68. package/dist/assets/SecondaryFooter/SecondaryFooter.css +0 -2
  69. package/dist/assets/SetContainer/SetContainer.css +6 -1
  70. package/dist/assets/Table/Table.css +61 -21
  71. package/dist/assets/VideoTile/VideoTile.css +1 -0
  72. package/dist/assets/globals.css +0 -3
  73. package/dist/main.js +24 -4
  74. package/dist/utils/allowedAxosDomains.d.ts +2 -0
  75. package/dist/utils/allowedAxosDomains.js +40 -0
  76. package/dist/utils/index.d.ts +2 -0
  77. package/dist/utils/index.js +10 -1
  78. package/dist/utils/validateExternalLinks.d.ts +5 -0
  79. package/dist/utils/validateExternalLinks.js +32 -0
  80. package/package.json +4 -2
  81. package/dist/NavigationMenu/AxosFiduciary/MobileToggle.d.ts +0 -2
  82. package/dist/NavigationMenu/AxosFiduciary/MobileToggle.js +0 -120
package/dist/main.js CHANGED
@@ -4,7 +4,9 @@ import { accordion, bodyAccordion, headerAccordion, headerContent, hide, icon, p
4
4
  import { AlertBanner } from "./AlertBanner/index.js";
5
5
  import { ApyCalculator } from "./ApyCalculator/index.js";
6
6
  import { BulletItem } from "./BulletItem/BulletItem.js";
7
- import { Button } from "./Button/index.js";
7
+ import { Button } from "./Button/Button.js";
8
+ import { button } from "./Button/Button.css.js";
9
+ import { GoBackButton } from "./Button/GoBackButton.js";
8
10
  import { CallToActionBar } from "./CallToActionBar/index.js";
9
11
  import { Carousel, CarouselSlide } from "./Carousel/index.js";
10
12
  import { Chevron } from "./Chevron/index.js";
@@ -14,7 +16,7 @@ import { DownloadTile } from "./DownloadTile/index.js";
14
16
  import { AccordionItem, AccordionItemContent, AccordionItemSummary, FaqAccordion } from "./FaqAccordion/index.js";
15
17
  import { footerContent, footerDisclosure, footerLink, footerParagraph, iconsContent } from "./FooterDisclosure/FooterDisclosure.css.js";
16
18
  import { FooterContent, FooterDisclosure, FooterIcons, FooterParagraph } from "./FooterDisclosure/FooterDisclosure.js";
17
- import { actions, disclosureForm, formContainer, formWrapper, headerForm, iconForm } from "./Forms/Forms.css.js";
19
+ import { actions, disclosureForm, form, formContainer, formWrapper, headerForm, iconForm } from "./Forms/Forms.css.js";
18
20
  import { RenderWebForm, renderSwitch } from "./Forms/RenderForm.js";
19
21
  import { SalesforceFieldsForm, SalesforceSchema } from "./Forms/SalesforceFieldsForm.js";
20
22
  import { ScheduleCall } from "./Forms/ScheduleCall.js";
@@ -27,14 +29,15 @@ import { billboard, billboard_body, billboard_container, billboard_ctas, billboa
27
29
  import { ImageBillboard } from "./ImageBillboard/ImageBillboardSet.js";
28
30
  import { Input } from "./Input/index.js";
29
31
  import { MainHTML } from "./MainHTML/index.js";
30
- import { Modal } from "./Modal/index.js";
32
+ import { Modal } from "./Modal/Modal.js";
33
+ import { GlobalContext, GlobalContextProvider, useGlobalContext } from "./Modal/contextApi/store.js";
31
34
  import { default as default2 } from "./NavigationMenu/AxosAdvisor/index.js";
32
35
  import { default as default3 } from "./NavigationMenu/AxosFiduciary/index.js";
33
36
  import { SecondaryFooter } from "./SecondaryFooter/index.js";
34
37
  import { SetContainer } from "./SetContainer/SetContainer.js";
35
38
  import { inline_container } from "./SetContainer/SetContainer.css.js";
36
39
  import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from "./Table/Table.js";
37
- import { bodyHeader, headerCell, headerVariants, highlight_first_row, highlight_last_row, table, table_container, table_container_text, table_headline, td, th } from "./Table/Table.css.js";
40
+ import { alternate_color_rows, bodyHeader, headerCell, headerVariants, highlight_first_row, highlight_last_row, table, tableWrapper, table_container, table_container_text, table_headline, td, th } from "./Table/Table.css.js";
38
41
  import { TextBlock } from "./TextBlock/TextBlock.js";
39
42
  import { textBlockHeader, textBlockList, textBlockParagraph } from "./TextBlock/TextBlock.css.js";
40
43
  import { VideoInit } from "./VideoTile/VideoInit.js";
@@ -44,7 +47,9 @@ import { VideoWrapper } from "./VideoWrapper/index.js";
44
47
  import { axosTheme, vars } from "./themes/axos.css.js";
45
48
  import { premierTheme } from "./themes/premier.css.js";
46
49
  import { associatedEmail } from "./utils/EverestValidity.js";
50
+ import { findMoreAxosDomains, isAllowedUrl } from "./utils/allowedAxosDomains.js";
47
51
  import { getVariant, getVariantWithRegex } from "./utils/getVariant.js";
52
+ import { isAbsoluteUrl, isEmailLink, isPhoneLink, shortUrl, validateLink } from "./utils/validateExternalLinks.js";
48
53
  export {
49
54
  Accordion,
50
55
  AccordionCtx,
@@ -69,6 +74,9 @@ export {
69
74
  FooterDisclosure,
70
75
  FooterIcons,
71
76
  FooterParagraph,
77
+ GlobalContext,
78
+ GlobalContextProvider,
79
+ GoBackButton,
72
80
  HeroBanner,
73
81
  IconBillboard,
74
82
  IconBillboardSet,
@@ -97,6 +105,7 @@ export {
97
105
  VideoWrapper,
98
106
  accordion,
99
107
  actions,
108
+ alternate_color_rows,
100
109
  associatedEmail,
101
110
  axosTheme,
102
111
  billboard,
@@ -109,15 +118,18 @@ export {
109
118
  body,
110
119
  bodyAccordion,
111
120
  bodyHeader,
121
+ button,
112
122
  buttons,
113
123
  containerIconBillboard,
114
124
  content,
115
125
  disclosureForm,
116
126
  expand_icon,
127
+ findMoreAxosDomains,
117
128
  footerContent,
118
129
  footerDisclosure,
119
130
  footerLink,
120
131
  footerParagraph,
132
+ form,
121
133
  formContainer,
122
134
  formWrapper,
123
135
  getVariant,
@@ -139,6 +151,10 @@ export {
139
151
  iconsContent,
140
152
  imagePlacement,
141
153
  inline_container,
154
+ isAbsoluteUrl,
155
+ isAllowedUrl,
156
+ isEmailLink,
157
+ isPhoneLink,
142
158
  item,
143
159
  layout,
144
160
  list,
@@ -150,10 +166,12 @@ export {
150
166
  section_container,
151
167
  section_text,
152
168
  section_text_ImageBillboard,
169
+ shortUrl,
153
170
  show,
154
171
  single_container,
155
172
  supertag,
156
173
  table,
174
+ tableWrapper,
157
175
  table_container,
158
176
  table_container_text,
159
177
  table_headline,
@@ -169,6 +187,8 @@ export {
169
187
  transcript_container,
170
188
  transcript_content,
171
189
  two_inline,
190
+ useGlobalContext,
191
+ validateLink,
172
192
  vars,
173
193
  video_container,
174
194
  video_title,
@@ -0,0 +1,2 @@
1
+ export declare const isAllowedUrl: (url: string) => boolean;
2
+ export declare const findMoreAxosDomains: (url: string) => string;
@@ -0,0 +1,40 @@
1
+ const moreDomains = {
2
+ "{AXOS}": "www.axos.com",
3
+ "{AXOSBANK}": "www.axosbank.com",
4
+ "{AXOSCLEARING}": "https://axosclearing.com/",
5
+ "{AAS}": "www.axosadvisorservices.com",
6
+ "{NATIONWIDE}": "www.nationwide.axosbank.com",
7
+ // '{ENROLLMENT}': process.env.NEXT_PUBLIC_ENROLLMENT_URL as string,
8
+ // '{SECENROLLMENT}': process.env.NEXT_PUBLIC_ENROLLMENT2_URL as string,
9
+ "{ASSETSURL}": "https://assets.ctfassets.net",
10
+ "{IMAGEASSETSURL}": "https://images.ctfassets.net",
11
+ "{ONLINEBANKING}": "https://onlinebanking.uat.axsobank.com",
12
+ "{UFBDIRECT": "www.ufbdirect.com"
13
+ };
14
+ const isAllowedUrl = (url) => {
15
+ const uri = new URL(url, location.href);
16
+ for (const key in moreDomains) {
17
+ const urlToCompare = new URL(moreDomains[key], location.href);
18
+ if (uri.hostname === urlToCompare.hostname)
19
+ return true;
20
+ }
21
+ return false;
22
+ };
23
+ const findMoreAxosDomains = (url) => {
24
+ const regexSearching = /\{[a-xA-Z]+\}/;
25
+ if (regexSearching.test(url)) {
26
+ const domainToReplace = url.match(regexSearching);
27
+ if (Array.isArray(domainToReplace)) {
28
+ const newURL = url.replace(
29
+ regexSearching,
30
+ moreDomains[domainToReplace[0]]
31
+ );
32
+ return newURL;
33
+ }
34
+ }
35
+ return url;
36
+ };
37
+ export {
38
+ findMoreAxosDomains,
39
+ isAllowedUrl
40
+ };
@@ -1,3 +1,5 @@
1
1
  export * from "./EverestValidity";
2
+ export * from "./allowedAxosDomains";
2
3
  export * from "./getVariant";
4
+ export * from "./validateExternalLinks";
3
5
  export * from "./variant.types";
@@ -1,7 +1,16 @@
1
1
  import { associatedEmail } from "./EverestValidity.js";
2
+ import { findMoreAxosDomains, isAllowedUrl } from "./allowedAxosDomains.js";
2
3
  import { getVariant, getVariantWithRegex } from "./getVariant.js";
4
+ import { isAbsoluteUrl, isEmailLink, isPhoneLink, shortUrl, validateLink } from "./validateExternalLinks.js";
3
5
  export {
4
6
  associatedEmail,
7
+ findMoreAxosDomains,
5
8
  getVariant,
6
- getVariantWithRegex
9
+ getVariantWithRegex,
10
+ isAbsoluteUrl,
11
+ isAllowedUrl,
12
+ isEmailLink,
13
+ isPhoneLink,
14
+ shortUrl,
15
+ validateLink
7
16
  };
@@ -0,0 +1,5 @@
1
+ export declare const isAbsoluteUrl: (url: string) => boolean;
2
+ export declare const shortUrl: (url: string) => string;
3
+ export declare const isEmailLink: (url: string) => boolean;
4
+ export declare const isPhoneLink: (url: string) => boolean;
5
+ export declare const validateLink: (url: string) => boolean;
@@ -0,0 +1,32 @@
1
+ import { isAllowedUrl } from "./allowedAxosDomains.js";
2
+ const isAbsoluteUrl = (url) => {
3
+ const RgExp = new RegExp("^(?:[a-z]+:)?//", "i");
4
+ return RgExp.test(url);
5
+ };
6
+ const shortUrl = (url) => {
7
+ const uri = new URL(url);
8
+ return uri.hostname;
9
+ };
10
+ const isEmailLink = (url) => {
11
+ const uri = new URL(url, location.href);
12
+ return uri.protocol == "mailto:";
13
+ };
14
+ const isPhoneLink = (url) => {
15
+ const uri = new URL(url, location.href);
16
+ return uri.protocol === "tel:";
17
+ };
18
+ const validateLink = (url) => {
19
+ const newUrl = new URL(url, location.href);
20
+ let openModal = false;
21
+ if (isAbsoluteUrl(newUrl.href) && !isEmailLink(newUrl.href) && !isPhoneLink(newUrl.href) && !isAllowedUrl(newUrl.href)) {
22
+ openModal = true;
23
+ }
24
+ return openModal;
25
+ };
26
+ export {
27
+ isAbsoluteUrl,
28
+ isEmailLink,
29
+ isPhoneLink,
30
+ shortUrl,
31
+ validateLink
32
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@axos-web-dev/shared-components",
3
3
  "description": "Axos shared components library for web.",
4
- "version": "0.0.11",
4
+ "version": "0.0.13",
5
5
  "type": "module",
6
6
  "module": "dist/main.js",
7
7
  "types": "dist/main.d.ts",
@@ -47,6 +47,7 @@
47
47
  "@vanilla-extract/css-utils": "^0.1.3",
48
48
  "@vanilla-extract/recipes": "^0.5.1",
49
49
  "@vanilla-extract/vite-plugin": "^4.0.3",
50
+ "next": "^14.1.4",
50
51
  "react": "^18.2.0",
51
52
  "react-dom": "^18.2.0"
52
53
  },
@@ -93,7 +94,8 @@
93
94
  "vite-plugin-dts": "^3.7.3",
94
95
  "vite-plugin-lib-inject-css": "^1.3.0",
95
96
  "vite-plugin-setting-css-module": "^1.1.4",
96
- "vite-tsconfig-paths": "^4.3.1"
97
+ "vite-tsconfig-paths": "^4.3.1",
98
+ "next": "^14.1.4"
97
99
  },
98
100
  "main": "index.js",
99
101
  "directories": {
@@ -1,2 +0,0 @@
1
- declare const MobileToggle: () => import("react/jsx-runtime").JSX.Element;
2
- export default MobileToggle;
@@ -1,120 +0,0 @@
1
- "use client";
2
- import { jsxs, jsx } from "react/jsx-runtime";
3
- import clsx from "clsx";
4
- import { useState } from "react";
5
- import { NavItem } from "../NavItem/index.js";
6
- import styles from "./NavBar.module.js";
7
- import { navItems } from "./NavData.js";
8
- const MobileToggle = () => {
9
- const [isOpenMobile, setisOpenMobile] = useState(false);
10
- const mobileToggle = () => setisOpenMobile(!isOpenMobile);
11
- return /* @__PURE__ */ jsxs("header", { children: [
12
- /* @__PURE__ */ jsx("div", { className: `${styles.header} bg_white`, children: /* @__PURE__ */ jsx("div", { className: styles.wrapper, children: /* @__PURE__ */ jsxs("div", { className: `${styles.header_main_row} flex_row between middle`, children: [
13
- /* @__PURE__ */ jsx(
14
- "button",
15
- {
16
- className: clsx(styles.mobile_only, styles.hamburger),
17
- onClick: mobileToggle,
18
- children: /* @__PURE__ */ jsx(
19
- "svg",
20
- {
21
- width: 24,
22
- height: 24,
23
- viewBox: "0 0 24 24",
24
- fill: "none",
25
- xmlns: "http://www.w3.org/2000/svg",
26
- children: /* @__PURE__ */ jsx(
27
- "path",
28
- {
29
- fillRule: "evenodd",
30
- clipRule: "evenodd",
31
- d: "M22.5 15.75V17.25H1.5V15.75H22.5ZM22.5 11.25V12.75H1.5V11.25H22.5ZM22.5 6.75V8.25H1.5V6.75H22.5Z",
32
- fill: "#4A5560"
33
- }
34
- )
35
- }
36
- )
37
- }
38
- ),
39
- /* @__PURE__ */ jsx("div", { className: `${styles.mobile_only} ${styles.mobile_logo}`, children: /* @__PURE__ */ jsx(
40
- "img",
41
- {
42
- src: "//images.axos.com/o9ov1v03uwqk/70DeSnNiwKxnnpoNEmdHYc/c89285e7f92b31397b49e09ddb9ea14d/afs-logo-mobile.svg",
43
- alt: "",
44
- width: 113,
45
- height: 58
46
- }
47
- ) })
48
- ] }) }) }),
49
- /* @__PURE__ */ jsx(
50
- "div",
51
- {
52
- className: clsx(
53
- styles.mobile_nav,
54
- styles.mobile_only,
55
- "relative",
56
- "bg_white",
57
- isOpenMobile ? styles.mobile_opened : ""
58
- ),
59
- "aria-expanded": isOpenMobile,
60
- role: "menu",
61
- children: /* @__PURE__ */ jsxs("div", { className: clsx(styles.inner_wrapper, "bg_white"), children: [
62
- /* @__PURE__ */ jsxs("div", { className: `${styles.mobile_header} relative text_center`, children: [
63
- /* @__PURE__ */ jsx("p", { role: "heading", children: "Welcome" }),
64
- /* @__PURE__ */ jsx("button", { onClick: mobileToggle, "aria-label": "close navigation menu", children: /* @__PURE__ */ jsx(
65
- "svg",
66
- {
67
- xmlns: "http://www.w3.org/2000/svg",
68
- width: 24,
69
- height: 24,
70
- viewBox: "0 0 24 24",
71
- fill: "none",
72
- children: /* @__PURE__ */ jsx(
73
- "path",
74
- {
75
- d: "M20.2812 2.65625L21.3419 3.71691L13.0602 11.9982L21.3419 20.2812L20.2812 21.3419L11.9982 13.0602L3.71691 21.3419L2.65625 20.2812L10.9377 11.9982L2.65625 3.71691L3.71691 2.65625L11.9982 10.9377L20.2812 2.65625Z",
76
- fill: "#4A5560"
77
- }
78
- )
79
- }
80
- ) })
81
- ] }),
82
- /* @__PURE__ */ jsxs("div", { className: styles.mobile_body, children: [
83
- navItems.map((item, i) => /* @__PURE__ */ jsx(
84
- NavItem,
85
- {
86
- className: styles.main_nav_link,
87
- index: i,
88
- name: item.name,
89
- url: item.url
90
- },
91
- i
92
- )),
93
- /* @__PURE__ */ jsxs("ul", { className: "list_unstyled", children: [
94
- /* @__PURE__ */ jsx("li", { className: `${styles.mobile_nav_item}`, id: "dd_1", children: /* @__PURE__ */ jsx("a", { href: "#", children: "About Us" }) }),
95
- /* @__PURE__ */ jsx("li", { className: `${styles.mobile_nav_item}`, id: "dd_2", children: /* @__PURE__ */ jsx("a", { href: "/services", children: "Services" }) }),
96
- /* @__PURE__ */ jsx("li", { className: `${styles.mobile_nav_item}`, id: "dd_3", children: /* @__PURE__ */ jsx("a", { href: "/Software", children: "Software" }) }),
97
- /* @__PURE__ */ jsx("li", { className: `${styles.mobile_nav_item}`, id: "dd_4", children: /* @__PURE__ */ jsx("a", { href: "/Contact", children: "Contact" }) })
98
- ] })
99
- ] }),
100
- /* @__PURE__ */ jsx("div", { className: styles.mobile_footer, children: /* @__PURE__ */ jsxs("div", { className: "flex_row between", children: [
101
- /* @__PURE__ */ jsxs(
102
- "div",
103
- {
104
- className: `${styles.mobile_footer_content} flex_col between`,
105
- children: [
106
- /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx("strong", { children: "Contact a Specialist Today!" }) }),
107
- /* @__PURE__ */ jsx("div", { className: styles.footer_cta, children: /* @__PURE__ */ jsx("a", { href: "/contact", children: "Talk With Us" }) })
108
- ]
109
- }
110
- ),
111
- /* @__PURE__ */ jsx("div", { className: styles.mobile_footer_media, children: " " })
112
- ] }) })
113
- ] })
114
- }
115
- )
116
- ] });
117
- };
118
- export {
119
- MobileToggle as default
120
- };