@propelinc/citrus-ui 0.6.0 → 1.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.
Files changed (355) hide show
  1. package/README.md +54 -60
  2. package/dist/colors/colors.d.ts +31 -0
  3. package/dist/colors/theme.d.ts +2 -11
  4. package/dist/colors/util-classes.d.ts +11 -0
  5. package/dist/components/CAccordion.vue.d.ts +21 -0
  6. package/dist/components/CAccordionItem.vue.d.ts +41 -0
  7. package/dist/components/CAppBar.vue.d.ts +156 -0
  8. package/dist/components/CBadge.vue.d.ts +52 -0
  9. package/dist/components/CBottomSheet.vue.d.ts +226 -0
  10. package/dist/components/CButton/CButton.vue.d.ts +231 -0
  11. package/dist/components/CButton/types.d.ts +5 -0
  12. package/dist/components/CButtonStack.vue.d.ts +24 -0
  13. package/dist/components/CCard.vue.d.ts +107 -0
  14. package/dist/components/CCardFooter.vue.d.ts +26 -0
  15. package/dist/components/CCardHeader.vue.d.ts +3 -0
  16. package/dist/components/CCardSection.vue.d.ts +17 -0
  17. package/dist/components/CCheckbox.vue.d.ts +145 -0
  18. package/dist/components/CCol.vue.d.ts +21 -0
  19. package/dist/components/CDivider.vue.d.ts +17 -0
  20. package/dist/components/CDobField.vue.d.ts +2109 -0
  21. package/dist/components/CDobSelect.vue.d.ts +398 -0
  22. package/dist/components/CEmailField.vue.d.ts +699 -0
  23. package/dist/components/CExpandTransition.vue.d.ts +19 -0
  24. package/dist/components/CFadeTransition.vue.d.ts +3 -0
  25. package/dist/components/CFileInput.vue.d.ts +98 -0
  26. package/dist/components/CFixedPageFooter.vue.d.ts +106 -0
  27. package/dist/components/CForm.vue.d.ts +29 -0
  28. package/dist/components/CFormFieldCounter.vue.d.ts +42 -0
  29. package/dist/components/CIconButton.vue.d.ts +390 -0
  30. package/dist/components/CLabel.vue.d.ts +32 -0
  31. package/dist/components/CListItem.vue.d.ts +208 -0
  32. package/dist/components/CListItemContent.vue.d.ts +27 -0
  33. package/dist/components/CListItemIcon.vue.d.ts +54 -0
  34. package/dist/components/CLoader.vue.d.ts +73 -0
  35. package/dist/components/CLogo.vue.d.ts +19 -0
  36. package/dist/components/CMaskedTextField.vue.d.ts +2012 -0
  37. package/dist/components/CMenu.vue.d.ts +6 -0
  38. package/dist/components/CMenuItem.vue.d.ts +170 -0
  39. package/dist/components/CMenuLabel.vue.d.ts +3 -0
  40. package/dist/components/CModal.vue.d.ts +206 -0
  41. package/dist/components/CModalLoading.vue.d.ts +230 -0
  42. package/dist/components/CNotification.vue.d.ts +589 -0
  43. package/dist/components/CPhoneField.vue.d.ts +2088 -0
  44. package/dist/components/CPill.vue.d.ts +42 -0
  45. package/dist/components/CPillGroup.vue.d.ts +70 -0
  46. package/dist/components/CPopup.vue.d.ts +21 -0
  47. package/dist/components/CProgressLinear.vue.d.ts +61 -0
  48. package/dist/components/CProgressRing.vue.d.ts +103 -0
  49. package/dist/components/CRadio.vue.d.ts +73 -0
  50. package/dist/components/CRadioGroup.vue.d.ts +123 -0
  51. package/dist/components/CRebrand.vue.d.ts +28 -0
  52. package/dist/components/CRow.vue.d.ts +67 -0
  53. package/dist/components/CSafeArea.vue.d.ts +18 -0
  54. package/dist/components/CSectionHeader.vue.d.ts +28 -0
  55. package/dist/components/CSelect.vue.d.ts +293 -0
  56. package/dist/components/CSkeleton.vue.d.ts +3 -0
  57. package/dist/components/CSkeletonLoaderCard.vue.d.ts +21 -0
  58. package/dist/components/CSkeletonLoaderCircle.vue.d.ts +5 -0
  59. package/dist/components/CSkeletonLoaderText.vue.d.ts +44 -0
  60. package/dist/components/CSlideFadeTransition.vue.d.ts +58 -0
  61. package/dist/components/CSplitInput.vue.d.ts +2131 -0
  62. package/dist/components/CSquaredIcon.vue.d.ts +47 -0
  63. package/dist/components/CSsnField.vue.d.ts +2083 -0
  64. package/dist/components/CStatusDot.vue.d.ts +27 -0
  65. package/dist/components/CSwitch.vue.d.ts +54 -0
  66. package/dist/components/CSwitchListItem.vue.d.ts +392 -0
  67. package/dist/components/CTextArea.vue.d.ts +240 -0
  68. package/dist/components/CTextField.vue.d.ts +647 -0
  69. package/dist/components/CTextLink.vue.d.ts +55 -0
  70. package/dist/components/CThirdPartyLogo.vue.d.ts +128 -0
  71. package/dist/components/CTimeago.vue.d.ts +12 -0
  72. package/dist/components/CToast.vue.d.ts +458 -0
  73. package/dist/components/CToastsList.vue.d.ts +430 -0
  74. package/dist/components/CValidationMessage.vue.d.ts +45 -0
  75. package/dist/components/CZipcodeField.vue.d.ts +2080 -0
  76. package/dist/components/index.d.ts +66 -25
  77. package/dist/components/internal/CCloseButton.vue.d.ts +14 -0
  78. package/dist/composables/accessibility.d.ts +1 -0
  79. package/dist/composables/animation.d.ts +12 -0
  80. package/dist/composables/binding.d.ts +19 -0
  81. package/dist/composables/colors.d.ts +13 -0
  82. package/dist/composables/elements.d.ts +3 -0
  83. package/dist/composables/fields.d.ts +9 -0
  84. package/dist/composables/gestures.d.ts +53 -0
  85. package/dist/composables/i18n.d.ts +3 -0
  86. package/dist/composables/id.d.ts +11 -0
  87. package/dist/composables/input-mask.d.ts +18 -0
  88. package/dist/composables/router.d.ts +30 -0
  89. package/dist/composables/slots.d.ts +2 -0
  90. package/dist/composables/toast.d.ts +21 -0
  91. package/dist/composables/validations.d.ts +77 -0
  92. package/dist/index.css +1 -0
  93. package/dist/index.d.ts +5 -4
  94. package/dist/index.mjs +11738 -0
  95. package/dist/index.mjs.map +1 -0
  96. package/dist/plugin.d.ts +2 -2
  97. package/dist/services/animation.d.ts +17 -0
  98. package/dist/services/directives/index.d.ts +2 -0
  99. package/dist/services/directives/scroll-into-view.d.ts +7 -0
  100. package/dist/services/directives/tap-animation.d.ts +6 -0
  101. package/dist/services/id.d.ts +22 -0
  102. package/dist/services/injections/accordions.d.ts +3 -0
  103. package/dist/services/injections/animations.d.ts +2 -0
  104. package/dist/services/injections/buttons.d.ts +4 -0
  105. package/dist/services/injections/forms.d.ts +6 -0
  106. package/dist/services/injections/icon-buttons.d.ts +3 -0
  107. package/dist/services/injections/pills.d.ts +4 -0
  108. package/dist/services/injections/radio.d.ts +10 -0
  109. package/dist/styles/main.css +3002 -0
  110. package/dist/styles/utils.css +2319 -0
  111. package/dist/theme/icons.d.ts +35 -2
  112. package/dist/types/CForm.d.ts +12 -0
  113. package/dist/types/font-awesome.d.ts +5 -0
  114. package/dist/types.d.ts +12 -0
  115. package/index.ts +2 -0
  116. package/package.json +60 -45
  117. package/src/assets/fonts/grenette-regular.woff2 +0 -0
  118. package/src/assets/fonts/grenette-semibold.woff2 +0 -0
  119. package/src/assets/fonts/polymath.woff2 +0 -0
  120. package/src/assets/logos/propel/icon.svg +15 -0
  121. package/src/assets/logos/propel/lockup.svg +11 -0
  122. package/src/colors/colors.ts +173 -0
  123. package/src/colors/theme.ts +8 -14
  124. package/src/colors/util-classes.ts +49 -0
  125. package/src/componentResolver.js +33 -0
  126. package/src/components/CAccordion.vue +32 -7
  127. package/src/components/CAccordionItem.vue +109 -36
  128. package/src/components/CAppBar.vue +237 -0
  129. package/src/components/CBadge.vue +74 -0
  130. package/src/components/CBottomSheet.vue +430 -0
  131. package/src/components/CButton/CButton.vue +347 -0
  132. package/src/components/CButton/types.ts +5 -0
  133. package/src/components/CButtonStack.vue +36 -0
  134. package/src/components/CCard.vue +149 -41
  135. package/src/components/CCardFooter.vue +11 -27
  136. package/src/components/CCardHeader.vue +30 -21
  137. package/src/components/CCardSection.vue +23 -12
  138. package/src/components/CCheckbox.vue +191 -21
  139. package/src/components/CCol.vue +55 -0
  140. package/src/components/CDivider.vue +46 -0
  141. package/src/components/CDobField.vue +153 -0
  142. package/src/components/CDobSelect.vue +274 -0
  143. package/src/components/CEmailField.vue +61 -0
  144. package/src/components/CExpandTransition.vue +55 -0
  145. package/src/components/CFadeTransition.vue +23 -0
  146. package/src/components/CFileInput.vue +186 -0
  147. package/src/components/CFixedPageFooter.vue +76 -0
  148. package/src/components/CForm.vue +86 -0
  149. package/src/components/CFormFieldCounter.vue +40 -0
  150. package/src/components/CIconButton.vue +175 -59
  151. package/src/components/CLabel.vue +52 -0
  152. package/src/components/CListItem.vue +149 -45
  153. package/src/components/CListItemContent.vue +60 -0
  154. package/src/components/CListItemIcon.vue +27 -31
  155. package/src/components/CLoader.vue +156 -0
  156. package/src/components/CLogo.vue +23 -0
  157. package/src/components/CMaskedTextField.vue +118 -0
  158. package/src/components/CMenu.vue +24 -0
  159. package/src/components/CMenuItem.vue +106 -0
  160. package/src/components/CMenuLabel.vue +26 -0
  161. package/src/components/CModal.vue +198 -79
  162. package/src/components/CModalLoading.vue +27 -9
  163. package/src/components/CNotification.vue +86 -53
  164. package/src/components/CPhoneField.vue +69 -0
  165. package/src/components/CPill.vue +162 -0
  166. package/src/components/CPillGroup.vue +73 -0
  167. package/src/components/CPopup.vue +66 -0
  168. package/src/components/CProgressLinear.vue +52 -0
  169. package/src/components/CProgressRing.vue +126 -0
  170. package/src/components/CRadio.vue +138 -0
  171. package/src/components/CRadioGroup.vue +142 -0
  172. package/src/components/CRebrand.vue +28 -0
  173. package/src/components/CRow.vue +62 -0
  174. package/src/components/CSafeArea.vue +23 -0
  175. package/src/components/CSectionHeader.vue +50 -0
  176. package/src/components/CSelect.vue +223 -74
  177. package/src/components/CSkeleton.vue +65 -0
  178. package/src/components/CSkeletonLoaderCard.vue +29 -0
  179. package/src/components/CSkeletonLoaderCircle.vue +18 -14
  180. package/src/components/CSkeletonLoaderText.vue +127 -17
  181. package/src/components/CSlideFadeTransition.vue +100 -0
  182. package/src/components/CSplitInput.vue +111 -0
  183. package/src/components/CSquaredIcon.vue +83 -0
  184. package/src/components/CSsnField.vue +86 -0
  185. package/src/components/CStatusDot.vue +70 -0
  186. package/src/components/CSwitch.vue +125 -0
  187. package/src/components/CSwitchListItem.vue +110 -0
  188. package/src/components/CTextArea.vue +193 -47
  189. package/src/components/CTextField.vue +450 -93
  190. package/src/components/CTextLink.vue +48 -38
  191. package/src/components/CThirdPartyLogo.vue +127 -0
  192. package/src/components/CTimeago.vue +63 -0
  193. package/src/components/CToast.vue +259 -0
  194. package/src/components/CToastsList.vue +32 -0
  195. package/src/components/CValidationMessage.vue +70 -0
  196. package/src/components/CZipcodeField.vue +69 -0
  197. package/src/components/index.ts +66 -25
  198. package/src/components/internal/CCloseButton.vue +57 -0
  199. package/src/composables/accessibility.ts +29 -0
  200. package/src/composables/animation.ts +95 -0
  201. package/src/composables/binding.ts +34 -0
  202. package/src/composables/colors.ts +59 -0
  203. package/src/composables/elements.ts +72 -0
  204. package/src/composables/fields.ts +19 -0
  205. package/src/composables/gestures.ts +197 -0
  206. package/src/composables/i18n.ts +13 -0
  207. package/src/composables/id.ts +23 -0
  208. package/src/composables/input-mask.ts +139 -0
  209. package/src/composables/router.ts +64 -0
  210. package/src/composables/slots.ts +57 -0
  211. package/src/composables/toast.ts +64 -0
  212. package/src/composables/validations.ts +214 -0
  213. package/src/index.ts +7 -7
  214. package/src/plugin.ts +13 -6
  215. package/src/services/animation.ts +101 -0
  216. package/src/services/directives/index.ts +2 -0
  217. package/src/services/directives/scroll-into-view.ts +86 -0
  218. package/src/services/directives/tap-animation.ts +71 -0
  219. package/src/services/id.ts +31 -0
  220. package/src/services/injections/accordions.ts +4 -0
  221. package/src/services/injections/animations.ts +3 -0
  222. package/src/services/injections/buttons.ts +5 -0
  223. package/src/services/injections/forms.ts +8 -0
  224. package/src/services/injections/icon-buttons.ts +4 -0
  225. package/src/services/injections/pills.ts +7 -0
  226. package/src/services/injections/radio.ts +12 -0
  227. package/src/shims-vue.d.ts +6 -3
  228. package/src/styles/_animation.scss +19 -0
  229. package/src/styles/_button.scss +61 -0
  230. package/src/styles/_colors.scss +58 -11
  231. package/src/styles/_core.scss +248 -87
  232. package/src/styles/_form-fields.scss +68 -15
  233. package/src/styles/_grenette.scss +13 -0
  234. package/src/styles/_polymath.scss +14 -0
  235. package/src/styles/_reset.scss +105 -0
  236. package/src/styles/_shoelace.scss +46 -0
  237. package/src/styles/_typography.scss +40 -10
  238. package/src/styles/main.scss +6 -3
  239. package/src/styles/utils/a11y.scss +18 -0
  240. package/src/styles/utils/typography.scss +13 -0
  241. package/src/styles/utils.scss +560 -0
  242. package/src/styles/variables.scss +27 -15
  243. package/src/theme/icons.ts +16 -5
  244. package/src/types/CForm.ts +15 -0
  245. package/src/types/font-awesome.ts +6 -0
  246. package/src/types.ts +15 -0
  247. package/.browserslistrc +0 -3
  248. package/.eslintrc.js +0 -4
  249. package/.stylelintrc.js +0 -3
  250. package/babel.config.js +0 -3
  251. package/dist/citrus-ui.common.js +0 -43434
  252. package/dist/citrus-ui.common.js.map +0 -1
  253. package/dist/citrus-ui.css +0 -1
  254. package/dist/citrus-ui.umd.js +0 -43444
  255. package/dist/citrus-ui.umd.js.map +0 -1
  256. package/dist/citrus-ui.umd.min.js +0 -27
  257. package/dist/citrus-ui.umd.min.js.map +0 -1
  258. package/dist/demo.html +0 -10
  259. package/dist/fonts/Blitz-Script.85ed9abe.woff2 +0 -0
  260. package/dist/fonts/ObjectSans-Bold.5492f3d5.woff2 +0 -0
  261. package/dist/fonts/ObjectSans-BoldSlanted.29e2a87e.woff2 +0 -0
  262. package/dist/fonts/ObjectSans-Heavy.d0b2f035.woff2 +0 -0
  263. package/dist/fonts/ObjectSans-HeavySlanted.45e9c063.woff2 +0 -0
  264. package/dist/fonts/ObjectSans-Light.f885dec3.woff2 +0 -0
  265. package/dist/fonts/ObjectSans-LightSlanted.b8eb7c12.woff2 +0 -0
  266. package/dist/fonts/ObjectSans-Regular.e4ea0b90.woff2 +0 -0
  267. package/dist/fonts/ObjectSans-Slanted.57a90be9.woff2 +0 -0
  268. package/dist/fonts/ObjectSans-Thin.86d44227.woff2 +0 -0
  269. package/dist/fonts/ObjectSans-ThinSlanted.20342160.woff2 +0 -0
  270. package/jest.config.js +0 -9
  271. package/plopfile.js +0 -67
  272. package/project.json +0 -69
  273. package/src/assets/fonts/Blitz-Script.woff2 +0 -0
  274. package/src/assets/fonts/ObjectSans-Bold.woff2 +0 -0
  275. package/src/assets/fonts/ObjectSans-BoldSlanted.woff2 +0 -0
  276. package/src/assets/fonts/ObjectSans-Heavy.woff2 +0 -0
  277. package/src/assets/fonts/ObjectSans-HeavySlanted.woff2 +0 -0
  278. package/src/assets/fonts/ObjectSans-Light.woff2 +0 -0
  279. package/src/assets/fonts/ObjectSans-LightSlanted.woff2 +0 -0
  280. package/src/assets/fonts/ObjectSans-Regular.woff2 +0 -0
  281. package/src/assets/fonts/ObjectSans-Slanted.woff2 +0 -0
  282. package/src/assets/fonts/ObjectSans-Thin.woff2 +0 -0
  283. package/src/assets/fonts/ObjectSans-ThinSlanted.woff2 +0 -0
  284. package/src/components/CAlert.vue +0 -78
  285. package/src/components/CBanner.vue +0 -47
  286. package/src/components/CButton.vue +0 -146
  287. package/src/components/CListItemAction.vue +0 -29
  288. package/src/components/CSegmentedButton.vue +0 -47
  289. package/src/components/CSegmentedButtonOption.vue +0 -42
  290. package/src/components/helpers/FormField.vue +0 -48
  291. package/src/components/helpers/SelectInput.vue +0 -115
  292. package/src/shims-scss.d.ts +0 -4
  293. package/src/shims-vuetify.d.ts +0 -4
  294. package/src/styles/_blitz.scss +0 -8
  295. package/src/styles/_object-sans.scss +0 -23
  296. package/storybook-static/0.799c368cbe88266827ba.manager.bundle.js +0 -1
  297. package/storybook-static/0.a9f0a9ad.iframe.bundle.js +0 -3
  298. package/storybook-static/0.a9f0a9ad.iframe.bundle.js.LICENSE.txt +0 -8
  299. package/storybook-static/0.a9f0a9ad.iframe.bundle.js.map +0 -1
  300. package/storybook-static/1.0438fd8d.iframe.bundle.js +0 -3
  301. package/storybook-static/1.0438fd8d.iframe.bundle.js.LICENSE.txt +0 -17
  302. package/storybook-static/1.0438fd8d.iframe.bundle.js.map +0 -1
  303. package/storybook-static/1.9ebd2fb519f6726108de.manager.bundle.js +0 -1
  304. package/storybook-static/10.348d8814.iframe.bundle.js +0 -3
  305. package/storybook-static/10.348d8814.iframe.bundle.js.LICENSE.txt +0 -30
  306. package/storybook-static/10.348d8814.iframe.bundle.js.map +0 -1
  307. package/storybook-static/10.a85ea1a67689be8e19ff.manager.bundle.js +0 -1
  308. package/storybook-static/11.f4e922583ae35da460f3.manager.bundle.js +0 -2
  309. package/storybook-static/11.f4e922583ae35da460f3.manager.bundle.js.LICENSE.txt +0 -12
  310. package/storybook-static/12.1415460941f0bdcb8fa8.manager.bundle.js +0 -1
  311. package/storybook-static/2.75a17459.iframe.bundle.js +0 -3
  312. package/storybook-static/2.75a17459.iframe.bundle.js.LICENSE.txt +0 -26
  313. package/storybook-static/2.75a17459.iframe.bundle.js.map +0 -1
  314. package/storybook-static/5.f459d151315e6780c20f.manager.bundle.js +0 -2
  315. package/storybook-static/5.f459d151315e6780c20f.manager.bundle.js.LICENSE.txt +0 -8
  316. package/storybook-static/6.3bd64d820f3745f262ff.manager.bundle.js +0 -1
  317. package/storybook-static/6.ce8d99b4.iframe.bundle.js +0 -1
  318. package/storybook-static/7.3d04765dbf3f1dcd706c.manager.bundle.js +0 -1
  319. package/storybook-static/7.6633a922.iframe.bundle.js +0 -3
  320. package/storybook-static/7.6633a922.iframe.bundle.js.LICENSE.txt +0 -12
  321. package/storybook-static/7.6633a922.iframe.bundle.js.map +0 -1
  322. package/storybook-static/8.b541eadfcb9164835dfc.manager.bundle.js +0 -1
  323. package/storybook-static/8.fc5e1ebf.iframe.bundle.js +0 -1
  324. package/storybook-static/9.411ac8e451bbb10926c7.manager.bundle.js +0 -1
  325. package/storybook-static/9.724ac3ed.iframe.bundle.js +0 -3
  326. package/storybook-static/9.724ac3ed.iframe.bundle.js.LICENSE.txt +0 -15
  327. package/storybook-static/9.724ac3ed.iframe.bundle.js.map +0 -1
  328. package/storybook-static/css/main.95216119.css +0 -1
  329. package/storybook-static/css/vendors~main.02dc89bf.css +0 -1
  330. package/storybook-static/favicon.ico +0 -0
  331. package/storybook-static/fonts/Blitz-Script.85ed9abe.woff2 +0 -0
  332. package/storybook-static/fonts/ObjectSans-Bold.5492f3d5.woff2 +0 -0
  333. package/storybook-static/fonts/ObjectSans-BoldSlanted.29e2a87e.woff2 +0 -0
  334. package/storybook-static/fonts/ObjectSans-Heavy.d0b2f035.woff2 +0 -0
  335. package/storybook-static/fonts/ObjectSans-HeavySlanted.45e9c063.woff2 +0 -0
  336. package/storybook-static/fonts/ObjectSans-Light.f885dec3.woff2 +0 -0
  337. package/storybook-static/fonts/ObjectSans-LightSlanted.b8eb7c12.woff2 +0 -0
  338. package/storybook-static/fonts/ObjectSans-Regular.e4ea0b90.woff2 +0 -0
  339. package/storybook-static/fonts/ObjectSans-Slanted.57a90be9.woff2 +0 -0
  340. package/storybook-static/fonts/ObjectSans-Thin.86d44227.woff2 +0 -0
  341. package/storybook-static/fonts/ObjectSans-ThinSlanted.20342160.woff2 +0 -0
  342. package/storybook-static/iframe.html +0 -348
  343. package/storybook-static/index.html +0 -51
  344. package/storybook-static/main.7b4aec9c4352d4bb535b.manager.bundle.js +0 -1
  345. package/storybook-static/main.9e8c64c7.iframe.bundle.js +0 -1
  346. package/storybook-static/runtime~main.91a0c7330ab317d35c4a.manager.bundle.js +0 -1
  347. package/storybook-static/runtime~main.e4da100f.iframe.bundle.js +0 -1
  348. package/storybook-static/vendors~main.6660eda6.iframe.bundle.js +0 -7
  349. package/storybook-static/vendors~main.6660eda6.iframe.bundle.js.LICENSE.txt +0 -80
  350. package/storybook-static/vendors~main.6660eda6.iframe.bundle.js.map +0 -1
  351. package/storybook-static/vendors~main.f7f16cebbf3aa96a4f89.manager.bundle.js +0 -2
  352. package/storybook-static/vendors~main.f7f16cebbf3aa96a4f89.manager.bundle.js.LICENSE.txt +0 -110
  353. package/tsconfig.dist.json +0 -7
  354. package/tsconfig.json +0 -24
  355. package/vue.config.js +0 -5
@@ -1,120 +1,220 @@
1
1
  // ****************************************************************************
2
2
  // This file contains our Citrus-specific Sass variables. These are intended to
3
- // be used to style Citrus and imported into stylesheets in freshcard-app
4
- // and freshebt-vue.
3
+ // be used to style Citrus and imported into stylesheets in freshebt-vue
4
+ // and microfrontends.
5
+ //
6
+ // VARIABLES AND MIXINS ONLY.
7
+ //
8
+ // NOTE(slanden): Be sure to update the colors.ts file when updating this file.
5
9
  // ****************************************************************************
6
10
 
7
11
  // COLORS
8
- $color-providers-green-tint-2: #ecfde8;
9
- $color-providers-green-tint-1: #d1fac7;
10
- $color-providers-green: #b3f6a2;
11
- $color-accent-green: #51d156;
12
- $color-accent-green-shade-1: #49a24c;
13
- $color-accent-green-shade-2: #3a823d;
12
+
13
+ // Neutrals
14
+ $color-black: #000;
15
+ $color-gray-500: rgba(0, 0, 0, 0.69);
16
+ $color-gray-400: rgba(0, 0, 0, 0.48);
17
+ $color-gray-300: rgba(0, 0, 0, 0.31);
18
+ $color-gray-200: rgba(0, 0, 0, 0.1);
19
+ $color-gray-100: rgba(0, 0, 0, 0.04);
20
+ $color-white: #fff;
21
+
22
+ // Blues
23
+ $color-blue-500: #1a43d7;
24
+ $color-blue-400: #496ae0;
25
+ $color-blue-300: #7a95f8;
26
+ $color-blue-200: #b2cffa;
27
+ $color-blue-100: #e0edff;
28
+
29
+ // Purples
30
+ $color-purple-500: #6431d0;
31
+ $color-purple-400: #804fe8;
32
+ $color-purple-300: #ac8eff;
33
+ $color-purple-200: #cdbcff;
34
+ $color-purple-100: #ebe4ff;
35
+
36
+ // Greens
37
+ $color-green-500: #1f7400;
38
+ $color-green-400: #3fa41c;
39
+ $color-green-300: #8bc95a;
40
+ $color-green-200: #b8da96;
41
+ $color-green-100: #dcf2cb;
42
+
43
+ // Golds
44
+ $color-gold-500: #f47500;
45
+ $color-gold-400: #f99500;
46
+ $color-gold-300: #ffc120;
47
+ $color-gold-200: #fcde74;
48
+ $color-gold-100: #fff0ba;
49
+
50
+ // Reds
51
+ $color-red-500: #cd000c;
52
+ $color-red-400: #f52323;
53
+ $color-red-300: #ff6969;
54
+ $color-red-200: #ffaaa5;
55
+ $color-red-100: #ffe5dd;
56
+
57
+ $color-providers-green-tint-2: #d1fac7;
58
+ $color-providers-green-tint-1: #b3f6a2;
59
+ $color-providers-green: #51d156;
60
+ $color-accent-green: #49a24c;
61
+ $color-accent-green-shade-1: #3a823d;
62
+ $color-accent-green-shade-2: #17551a;
14
63
 
15
64
  $color-providers-blue-tint-2: #e8ebfd;
16
65
  $color-providers-blue-tint-1: #d1d7fc;
17
- $color-providers-blue: #a3b0f9;
66
+ $color-providers-blue: black;
18
67
  $color-accent-blue: #5560cb;
19
68
  $color-accent-blue-shade-1: #404898;
20
69
  $color-accent-blue-shade-2: #2f3570;
21
70
 
22
- $color-navy-tint-4: #d1d3d7;
23
- $color-navy-tint-3: #a4a8af;
24
- $color-navy-tint-2: #767c88;
25
- $color-navy-tint-1: #495160;
26
- $color-navy: #1b2538;
27
-
28
- $color-neutral: #faf8f6;
29
- $color-neutral-shade: #e9e6e1;
30
- $color-white: #fff;
31
-
32
- $color-purple: #7c3872;
71
+ $color-pink-tint-2: #ffdef1;
72
+ $color-pink-tint-1: #fdc3e4;
33
73
  $color-pink: #f6a0d1;
34
- $color-orange: #fc8247;
35
- $color-peach: #fdcab7;
74
+ $color-accent-pink: #d75fae;
75
+ $color-accent-pink-shade-1: #7c3872;
76
+ $color-accent-pink-shade-2: #56204e;
77
+
78
+ $color-orange-tint-2: #ffdbce;
79
+ $color-orange-tint-1: #fdcab7;
80
+ $color-orange: #ffa895;
81
+ $color-accent-orange: #fc8247;
82
+ $color-accent-orange-shade-1: #e15c1b;
83
+ $color-accent-orange-shade-2: #a9440b;
84
+
85
+ $color-yellow-tint-2: #fee69a;
86
+ $color-yellow-tint-1: #ffdc6b;
36
87
  $color-yellow: #ffc200;
37
- $color-lemon: #fee69a;
38
88
 
39
89
  $color-alert-red: #c34459;
90
+ $color-accent-red-shade-1: #981d31;
91
+ $color-accent-red-shade-2: #701323;
92
+
93
+ // BACKGROUND
94
+ $color-background: $color-white;
95
+ $color-button-background: $color-black;
40
96
 
41
97
  // BORDERS
42
- $color-border: $color-neutral-shade;
98
+ $color-border: $color-gray-200;
43
99
  $border-width: 1px;
44
100
  $border: $border-width solid $color-border;
45
101
 
46
102
  $border-radius: 8px;
103
+ $border-radius-next: 12px;
47
104
 
48
- // TYPOGRAPHY
49
- $font-family-object-sans: objectsans;
50
- $font-family-blitz: blitz;
105
+ // STATUS
106
+ $color-status-success: $color-green-500;
107
+ $color-status-warning: $color-gold-500;
108
+ $color-status-error: $color-red-500;
109
+
110
+ // SHADOWS
111
+ $box-shadow-neutral: 0 1px 4px $color-gray-200;
112
+ $box-shadow-toast: 0 4px 20px 0 rgba(0, 0, 0, 0.12);
113
+ $box-shadow-page-footer: 0 -1px 4px rgba($color-black, 0.25);
51
114
 
52
- $font-family-base: $font-family-object-sans, sans-serif;
53
- $font-family-script: $font-family-blitz, script;
115
+ // TYPOGRAPHY
116
+ $font-family-polymath: 'Polymath';
117
+ $font-family-grenette: 'Grenette';
118
+
119
+ // stylelint-disable-next-line scss/dollar-variable-colon-space-after
120
+ $font-family-base:
121
+ $font-family-polymath,
122
+ -apple-system,
123
+ blinkmacsystemfont,
124
+ 'Segoe UI',
125
+ roboto,
126
+ 'Helvetica Neue',
127
+ arial,
128
+ sans-serif;
129
+ $font-family-serif: $font-family-grenette, serif;
130
+
131
+ $color-text-primary: $color-black;
132
+ $color-text-secondary: $color-gray-500;
133
+ $color-text-placeholder: $color-gray-400;
134
+ $color-text-disabled: $color-gray-300;
54
135
 
55
136
  $font-weight-thin: 100;
56
137
  $font-weight-light: 300;
57
138
  $font-weight-normal: 400;
58
139
  $font-weight-medium: 500; // Currently unused, but holding its place in case we add it.
140
+ $font-weight-semibold: 650;
141
+ $font-weight-emphasized: $font-weight-semibold;
59
142
  $font-weight-bold: 700;
60
143
  $font-weight-heavy: 800;
61
144
  $font-weight-black: 900; // Currently unused, but holding its place in case we add it.
62
145
 
63
- $font-size-3x-large: 48px;
64
- $font-size-2x-large: 35px;
65
- $font-size-x-large: 26px;
66
- $font-size-large: 21px;
67
- $font-size-medium: 15px;
68
- $font-size-small: 12px;
146
+ $font-size-3x-large: 32px;
147
+ $font-size-2x-large: 26px;
148
+ $font-size-x-large: 24px;
149
+ $font-size-large: 20px;
150
+ $font-size-medium: 16px;
151
+ $font-size-small: 14px;
152
+ $font-size-x-small: 12px;
153
+ $font-size-wallet-caption: 13px; // Only to be used in the wallet on Home.
154
+
155
+ $line-height-small: 120%;
156
+ $line-height-medium: 125%;
157
+ $line-height-large: 140%;
158
+
159
+ $letter-spacing-tighten-medium: -0.5px;
160
+ $letter-spacing-tighten-small: -0.25px;
161
+ $letter-spacing-normal: normal;
162
+ $letter-spacing-extend-small: 0.25px;
163
+ $letter-spacing-extend-medium: 0.5px;
69
164
 
70
165
  $balance: (
71
166
  'size': $font-size-2x-large,
72
- 'weight': $font-weight-thin,
167
+ 'weight': $font-weight-bold,
73
168
  'line-height': 100%,
74
- 'letter-spacing': normal,
169
+ 'letter-spacing': $letter-spacing-extend-small,
75
170
  );
76
171
 
77
- $balance-dollar: (
78
- 'size': $font-size-x-large,
79
- 'weight': $font-weight-light,
80
- 'line-height': 100%,
81
- 'letter-spacing': normal,
172
+ // NOTE(slanden): These typography definitions don't correctly line up with
173
+ // the definitions in the design system - e.g., x-large-headline here is actually
174
+ // the same as Headline Large in the design system, etc.
175
+ $x-large-headline: (
176
+ 'font-family': var(--font-family-headline, #{$font-family-base}),
177
+ 'size': $font-size-3x-large,
178
+ 'weight': $font-weight-semibold,
179
+ 'line-height': $line-height-small,
180
+ 'letter-spacing': $letter-spacing-tighten-medium,
82
181
  );
83
182
 
84
183
  $large-headline: (
85
- 'size': $font-size-x-large,
86
- 'weight': $font-weight-bold,
87
- 'line-height': 130%,
88
- 'letter-spacing': normal,
89
- );
90
-
91
- $large-headline-script: (
184
+ 'font-family': var(--font-family-headline, #{$font-family-base}),
92
185
  'size': $font-size-2x-large,
93
- 'weight': $font-weight-normal,
94
- 'line-height': 85%,
95
- 'letter-spacing': normal,
96
- 'font-family': $font-family-script,
186
+ 'weight': $font-weight-semibold,
187
+ 'line-height': $line-height-small,
188
+ 'letter-spacing': $letter-spacing-tighten-medium,
97
189
  );
98
190
 
99
191
  $headline: (
192
+ 'font-family': var(--font-family-headline, #{$font-family-base}),
100
193
  'size': $font-size-large,
101
- 'weight': $font-weight-bold,
102
- 'line-height': 130%,
103
- 'letter-spacing': normal,
194
+ 'weight': $font-weight-semibold,
195
+ 'line-height': $line-height-medium,
196
+ 'letter-spacing': $letter-spacing-tighten-small,
104
197
  );
105
198
 
106
199
  $subheadline: (
107
200
  'size': $font-size-medium,
108
- 'weight': $font-weight-bold,
109
- 'line-height': 150%,
110
- 'letter-spacing': normal,
201
+ 'weight': $font-weight-semibold,
202
+ 'line-height': $line-height-large,
203
+ 'letter-spacing': $letter-spacing-extend-small,
111
204
  );
112
205
 
113
206
  $body: (
114
207
  'size': $font-size-medium,
115
208
  'weight': $font-weight-normal,
116
- 'line-height': 150%,
117
- 'letter-spacing': normal,
209
+ 'line-height': $line-height-large,
210
+ 'letter-spacing': $letter-spacing-extend-small,
211
+ );
212
+
213
+ $body-emphasized: map-merge(
214
+ $body,
215
+ (
216
+ 'weight': $font-weight-emphasized,
217
+ )
118
218
  );
119
219
 
120
220
  $statement: map-merge(
@@ -127,15 +227,29 @@ $statement: map-merge(
127
227
  $caption: (
128
228
  'size': $font-size-small,
129
229
  'weight': $font-weight-normal,
130
- 'line-height': 130%,
131
- 'letter-spacing': normal,
230
+ 'line-height': $line-height-large,
231
+ 'letter-spacing': $letter-spacing-extend-small,
132
232
  );
133
233
 
134
- $overline: (
135
- 'size': $font-size-small,
136
- 'weight': $font-weight-heavy,
137
- 'line-height': 100%,
138
- 'letter-spacing': 0.5px,
234
+ $caption-emphasized: map-merge(
235
+ $caption,
236
+ (
237
+ 'weight': $font-weight-emphasized,
238
+ )
239
+ );
240
+
241
+ $wallet-caption: (
242
+ 'size': $font-size-wallet-caption,
243
+ 'weight': $font-weight-normal,
244
+ 'line-height': $line-height-large,
245
+ 'letter-spacing': $letter-spacing-extend-small,
246
+ );
247
+
248
+ $eyebrow: (
249
+ 'size': $font-size-x-small,
250
+ 'weight': $font-weight-bold,
251
+ 'line-height': $line-height-small,
252
+ 'letter-spacing': $letter-spacing-extend-medium,
139
253
  'text-transform': uppercase,
140
254
  );
141
255
 
@@ -152,18 +266,14 @@ $overline: (
152
266
  @include create-type-mixin($balance);
153
267
  }
154
268
 
155
- @mixin balance-dollar {
156
- @include create-type-mixin($balance-dollar);
269
+ @mixin x-large-headline {
270
+ @include create-type-mixin($x-large-headline);
157
271
  }
158
272
 
159
273
  @mixin large-headline {
160
274
  @include create-type-mixin($large-headline);
161
275
  }
162
276
 
163
- @mixin large-headline-script {
164
- @include create-type-mixin($large-headline-script);
165
- }
166
-
167
277
  @mixin headline {
168
278
  @include create-type-mixin($headline);
169
279
  }
@@ -176,6 +286,10 @@ $overline: (
176
286
  @include create-type-mixin($body);
177
287
  }
178
288
 
289
+ @mixin body-emphasized {
290
+ @include create-type-mixin($body-emphasized);
291
+ }
292
+
179
293
  @mixin statement {
180
294
  @include create-type-mixin($statement);
181
295
  }
@@ -184,10 +298,39 @@ $overline: (
184
298
  @include create-type-mixin($caption);
185
299
  }
186
300
 
187
- @mixin overline {
188
- @include create-type-mixin($overline);
301
+ @mixin caption-emphasized {
302
+ @include create-type-mixin($caption-emphasized);
303
+ }
304
+
305
+ @mixin wallet-caption {
306
+ @include create-type-mixin($wallet-caption);
189
307
  }
190
308
 
309
+ @mixin eyebrow {
310
+ @include create-type-mixin($eyebrow);
311
+ }
312
+
313
+ @mixin link-underline {
314
+ // TODO(mohan): Remove important when we remove the v-application a tag styling
315
+ text-decoration: underline !important;
316
+ text-decoration-skip-ink: none;
317
+ text-underline-offset: 3px;
318
+ }
319
+
320
+ /** NOTE(ej): These styles address an issue with 'ghost' hover states caused
321
+ * by Vuetify's default hover styles compatible with browser-based apps that
322
+ * support hovering. If an additional component is reported displaying a 'ghost'
323
+ * hover use this mixin in that component's scoped styles.
324
+ * Original bug ticket: https://join-propel.atlassian.net/browse/EUFL-15
325
+ */
326
+ @mixin no-web-effect {
327
+ opacity: 0 !important;
328
+ }
329
+
330
+ // BUTTONS
331
+ $button-size-medium: 40px;
332
+ $button-size-large: 48px;
333
+
191
334
  // ICONS
192
335
  $font-size-icon-medium: 16px;
193
336
  $font-size-icon-large: 20px;
@@ -200,24 +343,42 @@ $card-v-spacing: 12px;
200
343
  $skeleton-loader-animation-duration: 3s;
201
344
  $skeleton-loader-animation: skeleton-loader-animation $skeleton-loader-animation-duration infinite;
202
345
 
203
- @keyframes skeleton-loader-animation {
204
- 0% {
205
- background-position: 150%;
206
- }
207
- 100% {
208
- background-position: -50%;
209
- }
210
- }
211
-
212
- @mixin skeleton-loader($color-base: $color-navy-tint-3, $color-highlight: $color-navy-tint-4) {
346
+ @mixin skeleton-loader($color-base: $color-gray-300, $color-highlight: $color-gray-200) {
213
347
  animation: $skeleton-loader-animation;
214
348
  background: linear-gradient(75deg, $color-base 30%, $color-highlight 50%, $color-base 70%);
215
349
  background-size: 200% 150%;
216
350
  }
217
351
 
218
- @mixin skeleton-loader-text($color-font: $color-navy, $color-highlight: $color-navy-tint-2) {
352
+ @mixin skeleton-loader-text($color-font: $color-black, $color-highlight: $color-gray-400) {
219
353
  @include skeleton-loader($color-font, $color-highlight);
220
354
 
221
355
  background-clip: text;
222
356
  -webkit-text-fill-color: transparent;
223
357
  }
358
+
359
+ // LOADING SPINNER
360
+ $loader-spin-animation-duration: 3.5s;
361
+ $loader-spin-animation: loader-spin-fast-slow $loader-spin-animation-duration infinite
362
+ cubic-bezier(0.35, 0.16, 0.65, 0.84);
363
+
364
+ @mixin contained-input {
365
+ background: $color-white;
366
+ border: 1px solid $color-gray-200;
367
+ border-radius: $border-radius;
368
+ padding: 16px 12px;
369
+ }
370
+
371
+ @mixin override-input-label {
372
+ //NOTE(ej) Checkboxes and Radios are constructed using the HTML label element
373
+ // This requires us to override the heavier default label styles
374
+ // for this component
375
+ font-weight: $font-weight-normal !important;
376
+ margin-bottom: 0;
377
+ }
378
+
379
+ // APP BAR
380
+ $app-bar-height: 42px;
381
+
382
+ // MAX LAYOUT WIDTH
383
+ // Used for responsive breakpoints in web layouts
384
+ $max-layout-width: 480px;
@@ -1,26 +1,79 @@
1
- @import '~@/styles/core.scss';
1
+ @import '@propelinc/citrus-ui/src/styles/core';
2
+ @import '@propelinc/citrus-ui/src/styles/utils/a11y';
2
3
 
3
- $color-disabled-text: $color-navy-tint-2;
4
+ $color-disabled-text: $color-gray-400;
5
+ $color-placeholder-text: $color-gray-400;
4
6
 
5
- @mixin form-field() {
6
- &.v-input--is-focused::v-deep .v-input__slot,
7
- &.v-input--has-state::v-deep .v-input__slot {
8
- border-color: currentColor;
7
+ $sl-field-transition-duration: 0.2s;
8
+ $citrus-field-transition-duration: 0.2s;
9
+
10
+ @mixin sl-field($input-part: '', $input-text-part: '') {
11
+ // NOTE(ej): This removes the default focus ring from the input
12
+ // Focus state is still indicated by a change in border color
13
+ --sl-focus-ring-width: 0;
14
+
15
+ &::part(form-control-label) {
16
+ @include body-emphasized;
17
+
18
+ transition: color $sl-field-transition-duration ease;
19
+ }
20
+
21
+ &::part(form-control-help-text) {
22
+ @include caption;
23
+
24
+ color: $color-text-secondary;
25
+ margin-top: 4px;
26
+ }
27
+
28
+ @if $input-part != '' {
29
+ &::part(#{$input-part}) {
30
+ border-width: $border-width;
31
+ transition: border-color $sl-field-transition-duration ease;
32
+ }
33
+ }
34
+
35
+ @if $input-text-part != '' {
36
+ &::part(#{$input-text-part}) {
37
+ @include body;
38
+
39
+ color: $color-text-primary;
40
+ transition: color $sl-field-transition-duration ease;
41
+ }
9
42
  }
43
+ }
44
+
45
+ @mixin sl-field-disabled() {
46
+ &::part(form-control-label) {
47
+ color: $color-text-disabled;
48
+ }
49
+ }
10
50
 
11
- &::v-deep .v-input__slot {
12
- border: 1px solid $color-neutral-shade;
13
- transition: border-color ease-in-out 0.3s;
51
+ @mixin sl-field-focused($input-part: 'base') {
52
+ &::part(#{$input-part}) {
53
+ border-color: $color-black;
14
54
  }
15
55
  }
16
56
 
17
- @mixin form-field-disabled() {
18
- &::v-deep .v-input__slot {
19
- background: $color-neutral-shade !important;
57
+ @mixin sl-field-invalid($input-part: '', $input-text-part: '') {
58
+ @if $input-part != '' {
59
+ &::part(#{$input-part}) {
60
+ border-color: $color-status-error;
61
+ }
20
62
  }
21
63
 
22
- &::v-deep input,
23
- &::v-deep select {
24
- color: $color-disabled-text;
64
+ @if $input-text-part != '' {
65
+ &::part(#{$input-text-part}) {
66
+ color: $color-status-error;
67
+ }
68
+ }
69
+
70
+ &::part(form-control-label) {
71
+ color: $color-status-error;
72
+ }
73
+ }
74
+
75
+ @mixin sl-field-hide-label() {
76
+ &::part(form-control-label) {
77
+ @include sr-only;
25
78
  }
26
79
  }
@@ -0,0 +1,13 @@
1
+ @import './core';
2
+
3
+ @mixin grenette($font-weight, $file-name) {
4
+ @font-face {
5
+ font-family: $font-family-grenette;
6
+ font-style: normal;
7
+ font-weight: $font-weight;
8
+ src: url('@propelinc/citrus-ui/src/assets/fonts/#{$file-name}.woff2') format('woff2');
9
+ }
10
+ }
11
+
12
+ @include grenette($font-weight-normal, 'grenette-regular');
13
+ @include grenette($font-weight-semibold, 'grenette-semibold');
@@ -0,0 +1,14 @@
1
+ @import './core';
2
+
3
+ $font-styles: normal, italic;
4
+
5
+ // NOTE(mohan): We don't want polymath to show up in italics, so we're defining
6
+ // both italic and normal to be the normal style.
7
+ @each $font-style in $font-styles {
8
+ @font-face {
9
+ font-family: $font-family-polymath;
10
+ font-style: $font-style;
11
+ font-weight: 100 900;
12
+ src: url('@propelinc/citrus-ui/src/assets/fonts/polymath.woff2') format('woff2');
13
+ }
14
+ }
@@ -0,0 +1,105 @@
1
+ // ****************************************************************************
2
+ // This file contains the reset styles.
3
+ //
4
+ // They are taken from https://www.joshwcomeau.com/css/custom-css-reset/
5
+ // ****************************************************************************
6
+
7
+ /* 1. Use a more-intuitive box-sizing model */
8
+ *,
9
+ *::before,
10
+ *::after {
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ /* 2. Remove default padding and margin */
15
+ * {
16
+ margin: 0;
17
+ padding: 0;
18
+ }
19
+
20
+ /* 3. Enable keyword animations */
21
+ @media (prefers-reduced-motion: no-preference) {
22
+ html {
23
+ // stylelint-disable-next-line property-no-unknown
24
+ interpolate-size: allow-keywords;
25
+ }
26
+ }
27
+
28
+ body {
29
+ /* 5. Improve text rendering */
30
+ -webkit-font-smoothing: antialiased;
31
+
32
+ /* 4. Add accessible line-height */
33
+ line-height: 1.5;
34
+ }
35
+
36
+ /* 6. Improve media defaults
37
+ * `svg` and `img` were in this list, but we've had to remove them. On device, this was
38
+ * causing issues with giant sized icons.
39
+ */
40
+ picture,
41
+ video,
42
+ canvas {
43
+ display: block;
44
+ max-width: 100%;
45
+ }
46
+
47
+ /* 7. Inherit fonts for form controls */
48
+ input,
49
+ button,
50
+ textarea,
51
+ select {
52
+ background: transparent; // This was in the old reset
53
+ border-style: none; // This was in the old reset
54
+ color: inherit; // This was in the old reset
55
+ font: inherit;
56
+ }
57
+
58
+ /* 8. Avoid text overflows */
59
+ p,
60
+ h1,
61
+ h2,
62
+ h3,
63
+ h4,
64
+ h5,
65
+ h6 {
66
+ overflow-wrap: break-word;
67
+ }
68
+
69
+ p {
70
+ margin-bottom: 16px; // matches old defaults
71
+
72
+ /* 9. Improve line wrapping */
73
+ text-wrap: pretty;
74
+ }
75
+
76
+ h1,
77
+ h2,
78
+ h3,
79
+ h4,
80
+ h5,
81
+ h6 {
82
+ text-wrap: balance;
83
+ }
84
+
85
+ /* 10. Remove default tap highlight */
86
+ button,
87
+ a {
88
+ -webkit-tap-highlight-color: transparent;
89
+ }
90
+
91
+ /* 11. Add default padding to lists */
92
+ ol,
93
+ ul {
94
+ padding-left: 24px;
95
+ }
96
+
97
+ /* 12. Remove default link styles
98
+ * This was moved from the `_providers.scss` file to citrus-ui so that link styles are consistent
99
+ * when CMS content is used in MFEs.
100
+ */
101
+ a,
102
+ a:active,
103
+ a:hover {
104
+ text-decoration: none !important;
105
+ }