@winchsa/ui 0.1.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 (305) hide show
  1. package/README.md +166 -0
  2. package/dist/components/Breadcrumbs.vue +46 -0
  3. package/dist/components/Breadcrumbs.vue.d.ts +6 -0
  4. package/dist/components/Drawer.vue +60 -0
  5. package/dist/components/Drawer.vue.d.ts +44 -0
  6. package/dist/components/IconBtn.vue +18 -0
  7. package/dist/components/IconBtn.vue.d.ts +30 -0
  8. package/dist/components/Modal.vue +155 -0
  9. package/dist/components/Modal.vue.d.ts +0 -0
  10. package/dist/components/SiteTitle.vue +14 -0
  11. package/dist/components/SiteTitle.vue.d.ts +2 -0
  12. package/dist/components/Toaster.vue +19 -0
  13. package/dist/components/Toaster.vue.d.ts +5 -0
  14. package/dist/components/cards/CheckboxesCard.vue +76 -0
  15. package/dist/components/cards/CheckboxesCard.vue.d.ts +20 -0
  16. package/dist/components/cards/HeaderCard.vue +31 -0
  17. package/dist/components/cards/HeaderCard.vue.d.ts +8 -0
  18. package/dist/components/cards/ImageCard.vue +73 -0
  19. package/dist/components/cards/ImageCard.vue.d.ts +63 -0
  20. package/dist/components/cards/InputCard.vue +60 -0
  21. package/dist/components/cards/InputCard.vue.d.ts +41 -0
  22. package/dist/components/cards/StaticCard.vue +37 -0
  23. package/dist/components/cards/StaticCard.vue.d.ts +33 -0
  24. package/dist/components/core/AppBarSearch.vue +345 -0
  25. package/dist/components/core/AppBarSearch.vue.d.ts +1587 -0
  26. package/dist/components/core/AppDrawerHeaderSection.vue +21 -0
  27. package/dist/components/core/AppDrawerHeaderSection.vue.d.ts +30 -0
  28. package/dist/components/core/AppSearchHeader.vue +72 -0
  29. package/dist/components/core/AppSearchHeader.vue.d.ts +7 -0
  30. package/dist/components/core/AppStepper.vue +232 -0
  31. package/dist/components/core/AppStepper.vue.d.ts +25 -0
  32. package/dist/components/core/CustomizerSection.vue +19 -0
  33. package/dist/components/core/CustomizerSection.vue.d.ts +25 -0
  34. package/dist/components/core/DialogCloseBtn.vue +20 -0
  35. package/dist/components/core/DialogCloseBtn.vue.d.ts +9 -0
  36. package/dist/components/core/MoreBtn.vue +27 -0
  37. package/dist/components/core/MoreBtn.vue.d.ts +25 -0
  38. package/dist/components/core/ScrollToTop.vue +39 -0
  39. package/dist/components/core/ScrollToTop.vue.d.ts +2 -0
  40. package/dist/components/core/app-form-elements/AppCombobox.vue +67 -0
  41. package/dist/components/core/app-form-elements/AppCombobox.vue.d.ts +0 -0
  42. package/dist/components/core/app-form-elements/AppSelect.vue +98 -0
  43. package/dist/components/core/app-form-elements/AppSelect.vue.d.ts +0 -0
  44. package/dist/components/core/app-form-elements/AppSwitch.vue +59 -0
  45. package/dist/components/core/app-form-elements/AppSwitch.vue.d.ts +27 -0
  46. package/dist/components/core/app-form-elements/AppTextField.vue +66 -0
  47. package/dist/components/core/app-form-elements/AppTextField.vue.d.ts +26 -0
  48. package/dist/components/core/app-form-elements/AppTextarea.vue +69 -0
  49. package/dist/components/core/app-form-elements/AppTextarea.vue.d.ts +26 -0
  50. package/dist/components/core/app-form-elements/CustomCheckboxes.vue +69 -0
  51. package/dist/components/core/app-form-elements/CustomCheckboxes.vue.d.ts +39 -0
  52. package/dist/components/core/app-form-elements/CustomCheckboxesWithIcon.vue +80 -0
  53. package/dist/components/core/app-form-elements/CustomCheckboxesWithIcon.vue.d.ts +39 -0
  54. package/dist/components/core/app-form-elements/CustomCheckboxesWithImage.vue +67 -0
  55. package/dist/components/core/app-form-elements/CustomCheckboxesWithImage.vue.d.ts +15 -0
  56. package/dist/components/core/app-form-elements/CustomRadios.vue +69 -0
  57. package/dist/components/core/app-form-elements/CustomRadios.vue.d.ts +40 -0
  58. package/dist/components/core/app-form-elements/CustomRadiosWithIcon.vue +98 -0
  59. package/dist/components/core/app-form-elements/CustomRadiosWithIcon.vue.d.ts +45 -0
  60. package/dist/components/core/app-form-elements/CustomRadiosWithImage.vue +69 -0
  61. package/dist/components/core/app-form-elements/CustomRadiosWithImage.vue.d.ts +53 -0
  62. package/dist/components/core/cards/AppCard.vue +45 -0
  63. package/dist/components/core/cards/AppCard.vue.d.ts +26 -0
  64. package/dist/components/core/cards/AppCardActions.vue +126 -0
  65. package/dist/components/core/cards/AppCardActions.vue.d.ts +79 -0
  66. package/dist/components/core/cards/CardStatisticsHorizontal.vue +29 -0
  67. package/dist/components/core/cards/CardStatisticsHorizontal.vue.d.ts +10 -0
  68. package/dist/components/forms/Accordion.vue +43 -0
  69. package/dist/components/forms/Accordion.vue.d.ts +35 -0
  70. package/dist/components/forms/AppLabel.vue +47 -0
  71. package/dist/components/forms/AppLabel.vue.d.ts +36 -0
  72. package/dist/components/forms/AppLink.vue +50 -0
  73. package/dist/components/forms/AppLink.vue.d.ts +27 -0
  74. package/dist/components/forms/AppNumberField.vue +85 -0
  75. package/dist/components/forms/AppNumberField.vue.d.ts +45 -0
  76. package/dist/components/forms/AppOtpInput.vue +84 -0
  77. package/dist/components/forms/AppOtpInput.vue.d.ts +16 -0
  78. package/dist/components/forms/AttachmentCropperInput.vue +228 -0
  79. package/dist/components/forms/AttachmentCropperInput.vue.d.ts +25 -0
  80. package/dist/components/forms/AttachmentInput.vue +116 -0
  81. package/dist/components/forms/AttachmentInput.vue.d.ts +20 -0
  82. package/dist/components/forms/AutocompleteInput.vue +759 -0
  83. package/dist/components/forms/AutocompleteInput.vue.d.ts +0 -0
  84. package/dist/components/forms/BankSelect.vue +43 -0
  85. package/dist/components/forms/BankSelect.vue.d.ts +19 -0
  86. package/dist/components/forms/BaseButton.vue +42 -0
  87. package/dist/components/forms/BaseButton.vue.d.ts +31 -0
  88. package/dist/components/forms/CounterInput.vue +71 -0
  89. package/dist/components/forms/CounterInput.vue.d.ts +15 -0
  90. package/dist/components/forms/DatePicker.vue +400 -0
  91. package/dist/components/forms/DatePicker.vue.d.ts +34 -0
  92. package/dist/components/forms/DatePickerRange.vue +129 -0
  93. package/dist/components/forms/DatePickerRange.vue.d.ts +23 -0
  94. package/dist/components/forms/DraggedUploadFile.vue +120 -0
  95. package/dist/components/forms/DraggedUploadFile.vue.d.ts +10 -0
  96. package/dist/components/forms/ImageCardInput.vue +234 -0
  97. package/dist/components/forms/ImageCardInput.vue.d.ts +0 -0
  98. package/dist/components/forms/InputValidationWrapper.vue +24 -0
  99. package/dist/components/forms/InputValidationWrapper.vue.d.ts +33 -0
  100. package/dist/components/forms/LicensePlateInput.vue +159 -0
  101. package/dist/components/forms/LicensePlateInput.vue.d.ts +16 -0
  102. package/dist/components/forms/ManualDate.vue +262 -0
  103. package/dist/components/forms/ManualDate.vue.d.ts +17 -0
  104. package/dist/components/forms/MobileInput.vue +118 -0
  105. package/dist/components/forms/MobileInput.vue.d.ts +49 -0
  106. package/dist/components/forms/PasswordInput.vue +29 -0
  107. package/dist/components/forms/PasswordInput.vue.d.ts +13 -0
  108. package/dist/components/forms/RangeInput.vue +48 -0
  109. package/dist/components/forms/RangeInput.vue.d.ts +5 -0
  110. package/dist/components/forms/Tabs.vue +35 -0
  111. package/dist/components/forms/Tabs.vue.d.ts +42 -0
  112. package/dist/components/forms/TimePicker.vue +370 -0
  113. package/dist/components/forms/TimePicker.vue.d.ts +23 -0
  114. package/dist/components/icons/EndMarker.vue +25 -0
  115. package/dist/components/icons/EndMarker.vue.d.ts +17 -0
  116. package/dist/components/icons/RedXIcon.vue +36 -0
  117. package/dist/components/icons/RedXIcon.vue.d.ts +2 -0
  118. package/dist/components/icons/StarFillIcon.vue +28 -0
  119. package/dist/components/icons/StarFillIcon.vue.d.ts +2 -0
  120. package/dist/components/icons/StartMarker.vue +25 -0
  121. package/dist/components/icons/StartMarker.vue.d.ts +17 -0
  122. package/dist/components/icons/WorkerIcon.vue +39 -0
  123. package/dist/components/icons/WorkerIcon.vue.d.ts +2 -0
  124. package/dist/components/loading/LoadingBar.vue +31 -0
  125. package/dist/components/loading/LoadingBar.vue.d.ts +5 -0
  126. package/dist/components/loading/LoadingDialog.vue +41 -0
  127. package/dist/components/loading/LoadingDialog.vue.d.ts +11 -0
  128. package/dist/components/loading/LoadingItem.vue +66 -0
  129. package/dist/components/loading/LoadingItem.vue.d.ts +47 -0
  130. package/dist/components/table/DataTable.vue +319 -0
  131. package/dist/components/table/DataTable.vue.d.ts +0 -0
  132. package/dist/components/table/EditableDataTable.vue +329 -0
  133. package/dist/components/table/EditableDataTable.vue.d.ts +73 -0
  134. package/dist/components/table/EditableDataTableRow.vue +243 -0
  135. package/dist/components/table/EditableDataTableRow.vue.d.ts +18 -0
  136. package/dist/components/table/FilterGenerator.vue +232 -0
  137. package/dist/components/table/FilterGenerator.vue.d.ts +14 -0
  138. package/dist/components/table/StaticTable.vue +152 -0
  139. package/dist/components/table/StaticTable.vue.d.ts +25 -0
  140. package/dist/components/table/TablePagination.vue +73 -0
  141. package/dist/components/table/TablePagination.vue.d.ts +13 -0
  142. package/dist/composables/use-is-mobile.d.ts +1 -0
  143. package/dist/composables/use-is-mobile.js +10 -0
  144. package/dist/composables/use-is-mobile.mjs +4 -0
  145. package/dist/composables/use-table-filters.d.ts +23 -0
  146. package/dist/composables/use-table-filters.js +196 -0
  147. package/dist/composables/use-table-filters.mjs +183 -0
  148. package/dist/fonts/NotoSans-Medium.ttf +0 -0
  149. package/dist/fonts/NotoSansArabic-Medium.ttf +0 -0
  150. package/dist/fonts/saudi_riyal_symbol/saudi_riyal_symbol.eot +0 -0
  151. package/dist/fonts/saudi_riyal_symbol/saudi_riyal_symbol.svg +9 -0
  152. package/dist/fonts/saudi_riyal_symbol/saudi_riyal_symbol.ttf +0 -0
  153. package/dist/fonts/saudi_riyal_symbol/saudi_riyal_symbol.woff +0 -0
  154. package/dist/fonts/saudi_riyal_symbol/saudi_riyal_symbol.woff2 +0 -0
  155. package/dist/images/avatar.png +0 -0
  156. package/dist/images/sa.svg +1 -0
  157. package/dist/images/successful-registration.svg +15 -0
  158. package/dist/index.d.ts +66 -0
  159. package/dist/index.js +447 -0
  160. package/dist/index.mjs +128 -0
  161. package/dist/styles/@core/scss/base/_components.scss +164 -0
  162. package/dist/styles/@core/scss/base/_dark.scss +16 -0
  163. package/dist/styles/@core/scss/base/_default-layout-w-vertical-nav.scss +106 -0
  164. package/dist/styles/@core/scss/base/_default-layout.scss +16 -0
  165. package/dist/styles/@core/scss/base/_index.scss +47 -0
  166. package/dist/styles/@core/scss/base/_layouts.scss +63 -0
  167. package/dist/styles/@core/scss/base/_misc.scss +20 -0
  168. package/dist/styles/@core/scss/base/_mixins.scss +84 -0
  169. package/dist/styles/@core/scss/base/_route-transitions.scss +70 -0
  170. package/dist/styles/@core/scss/base/_utilities.scss +418 -0
  171. package/dist/styles/@core/scss/base/_utils.scss +100 -0
  172. package/dist/styles/@core/scss/base/_variables.scss +190 -0
  173. package/dist/styles/@core/scss/base/_vertical-nav.scss +264 -0
  174. package/dist/styles/@core/scss/base/libs/_perfect-scrollbar.scss +35 -0
  175. package/dist/styles/@core/scss/base/libs/vuetify/_index.scss +1 -0
  176. package/dist/styles/@core/scss/base/libs/vuetify/_overrides.scss +385 -0
  177. package/dist/styles/@core/scss/base/libs/vuetify/_variables.scss +48 -0
  178. package/dist/styles/@core/scss/base/placeholders/_default-layout-vertical-nav.scss +48 -0
  179. package/dist/styles/@core/scss/base/placeholders/_default-layout.scss +3 -0
  180. package/dist/styles/@core/scss/base/placeholders/_index.scss +5 -0
  181. package/dist/styles/@core/scss/base/placeholders/_misc.scss +7 -0
  182. package/dist/styles/@core/scss/base/placeholders/_nav.scss +26 -0
  183. package/dist/styles/@core/scss/base/placeholders/_vertical-nav.scss +84 -0
  184. package/dist/styles/@core/scss/base/skins/_bordered.scss +60 -0
  185. package/dist/styles/@core/scss/base/skins/_index.scss +1 -0
  186. package/dist/styles/@core/scss/template/_components.scss +1035 -0
  187. package/dist/styles/@core/scss/template/_default-layout-w-vertical-nav.scss +20 -0
  188. package/dist/styles/@core/scss/template/_utilities.scss +20 -0
  189. package/dist/styles/@core/scss/template/_variables.scss +67 -0
  190. package/dist/styles/@core/scss/template/_vertical-nav.scss +41 -0
  191. package/dist/styles/@core/scss/template/index.css +18764 -0
  192. package/dist/styles/@core/scss/template/index.scss +15 -0
  193. package/dist/styles/@core/scss/template/libs/apex-chart.css +90 -0
  194. package/dist/styles/@core/scss/template/libs/apex-chart.scss +99 -0
  195. package/dist/styles/@core/scss/template/libs/shepherd.css +82 -0
  196. package/dist/styles/@core/scss/template/libs/shepherd.scss +88 -0
  197. package/dist/styles/@core/scss/template/libs/vuetify/_variables.scss +461 -0
  198. package/dist/styles/@core/scss/template/libs/vuetify/index.css +741 -0
  199. package/dist/styles/@core/scss/template/libs/vuetify/index.scss +1 -0
  200. package/dist/styles/@core/scss/template/pages/misc.css +16 -0
  201. package/dist/styles/@core/scss/template/pages/misc.scss +20 -0
  202. package/dist/styles/@core/scss/template/placeholders/_default-layout-vertical-nav.scss +9 -0
  203. package/dist/styles/@core/scss/template/placeholders/_index.scss +3 -0
  204. package/dist/styles/@core/scss/template/placeholders/_nav.scss +15 -0
  205. package/dist/styles/@core/scss/template/placeholders/_vertical-nav.scss +18 -0
  206. package/dist/styles/@core/scss/template/skins/_bordered.scss +36 -0
  207. package/dist/styles/@core/scss/template/skins/_index.scss +1 -0
  208. package/dist/styles/@layouts/styles/_classes.scss +3 -0
  209. package/dist/styles/@layouts/styles/_dashboard-layout.scss +43 -0
  210. package/dist/styles/@layouts/styles/_global.scss +10 -0
  211. package/dist/styles/@layouts/styles/_mixins.scss +28 -0
  212. package/dist/styles/@layouts/styles/_placeholders.scss +53 -0
  213. package/dist/styles/@layouts/styles/_rtl.scss +7 -0
  214. package/dist/styles/@layouts/styles/_variables.scss +22 -0
  215. package/dist/styles/@layouts/styles/index.css +14 -0
  216. package/dist/styles/@layouts/styles/index.scss +2 -0
  217. package/dist/styles/assets/scss/styles.css +16099 -0
  218. package/dist/styles/assets/scss/styles.scss +246 -0
  219. package/dist/styles/assets/scss/variables/_template.scss +1 -0
  220. package/dist/styles/assets/scss/variables/_vuetify.scss +1 -0
  221. package/dist/types.d.ts +226 -0
  222. package/dist/utils/apiUrl.d.ts +1 -0
  223. package/dist/utils/apiUrl.js +15 -0
  224. package/dist/utils/apiUrl.mjs +8 -0
  225. package/dist/utils/client.d.ts +9 -0
  226. package/dist/utils/client.js +39 -0
  227. package/dist/utils/client.mjs +25 -0
  228. package/dist/utils/files.d.ts +2 -0
  229. package/dist/utils/files.js +35 -0
  230. package/dist/utils/files.mjs +22 -0
  231. package/dist/utils/formValidation.d.ts +7 -0
  232. package/dist/utils/formValidation.js +20 -0
  233. package/dist/utils/formValidation.mjs +13 -0
  234. package/dist/utils/formatters.d.ts +12 -0
  235. package/dist/utils/formatters.js +84 -0
  236. package/dist/utils/formatters.mjs +56 -0
  237. package/dist/utils/index.d.ts +9 -0
  238. package/dist/utils/index.js +104 -0
  239. package/dist/utils/index.mjs +9 -0
  240. package/dist/utils/queryParams.d.ts +4 -0
  241. package/dist/utils/queryParams.js +26 -0
  242. package/dist/utils/queryParams.mjs +18 -0
  243. package/dist/utils/ruleValidator.d.ts +28 -0
  244. package/dist/utils/ruleValidator.js +158 -0
  245. package/dist/utils/ruleValidator.mjs +144 -0
  246. package/dist/utils/toaster.d.ts +12 -0
  247. package/dist/utils/toaster.js +71 -0
  248. package/dist/utils/toaster.mjs +59 -0
  249. package/dist/utils/utils.d.ts +8 -0
  250. package/dist/utils/utils.js +70 -0
  251. package/dist/utils/utils.mjs +56 -0
  252. package/package.json +79 -0
  253. package/src/styles/@core/scss/base/_components.scss +164 -0
  254. package/src/styles/@core/scss/base/_dark.scss +16 -0
  255. package/src/styles/@core/scss/base/_default-layout-w-vertical-nav.scss +106 -0
  256. package/src/styles/@core/scss/base/_default-layout.scss +16 -0
  257. package/src/styles/@core/scss/base/_index.scss +47 -0
  258. package/src/styles/@core/scss/base/_layouts.scss +63 -0
  259. package/src/styles/@core/scss/base/_misc.scss +20 -0
  260. package/src/styles/@core/scss/base/_mixins.scss +84 -0
  261. package/src/styles/@core/scss/base/_route-transitions.scss +70 -0
  262. package/src/styles/@core/scss/base/_utilities.scss +418 -0
  263. package/src/styles/@core/scss/base/_utils.scss +100 -0
  264. package/src/styles/@core/scss/base/_variables.scss +190 -0
  265. package/src/styles/@core/scss/base/_vertical-nav.scss +264 -0
  266. package/src/styles/@core/scss/base/libs/_perfect-scrollbar.scss +35 -0
  267. package/src/styles/@core/scss/base/libs/vuetify/_index.scss +1 -0
  268. package/src/styles/@core/scss/base/libs/vuetify/_overrides.scss +385 -0
  269. package/src/styles/@core/scss/base/libs/vuetify/_variables.scss +48 -0
  270. package/src/styles/@core/scss/base/placeholders/_default-layout-vertical-nav.scss +48 -0
  271. package/src/styles/@core/scss/base/placeholders/_default-layout.scss +3 -0
  272. package/src/styles/@core/scss/base/placeholders/_index.scss +5 -0
  273. package/src/styles/@core/scss/base/placeholders/_misc.scss +7 -0
  274. package/src/styles/@core/scss/base/placeholders/_nav.scss +26 -0
  275. package/src/styles/@core/scss/base/placeholders/_vertical-nav.scss +84 -0
  276. package/src/styles/@core/scss/base/skins/_bordered.scss +60 -0
  277. package/src/styles/@core/scss/base/skins/_index.scss +1 -0
  278. package/src/styles/@core/scss/template/_components.scss +1035 -0
  279. package/src/styles/@core/scss/template/_default-layout-w-vertical-nav.scss +20 -0
  280. package/src/styles/@core/scss/template/_utilities.scss +20 -0
  281. package/src/styles/@core/scss/template/_variables.scss +67 -0
  282. package/src/styles/@core/scss/template/_vertical-nav.scss +41 -0
  283. package/src/styles/@core/scss/template/index.scss +15 -0
  284. package/src/styles/@core/scss/template/libs/apex-chart.scss +99 -0
  285. package/src/styles/@core/scss/template/libs/shepherd.scss +88 -0
  286. package/src/styles/@core/scss/template/libs/vuetify/_variables.scss +461 -0
  287. package/src/styles/@core/scss/template/libs/vuetify/index.scss +1 -0
  288. package/src/styles/@core/scss/template/pages/misc.scss +20 -0
  289. package/src/styles/@core/scss/template/placeholders/_default-layout-vertical-nav.scss +9 -0
  290. package/src/styles/@core/scss/template/placeholders/_index.scss +3 -0
  291. package/src/styles/@core/scss/template/placeholders/_nav.scss +15 -0
  292. package/src/styles/@core/scss/template/placeholders/_vertical-nav.scss +18 -0
  293. package/src/styles/@core/scss/template/skins/_bordered.scss +36 -0
  294. package/src/styles/@core/scss/template/skins/_index.scss +1 -0
  295. package/src/styles/@layouts/styles/_classes.scss +3 -0
  296. package/src/styles/@layouts/styles/_dashboard-layout.scss +43 -0
  297. package/src/styles/@layouts/styles/_global.scss +10 -0
  298. package/src/styles/@layouts/styles/_mixins.scss +28 -0
  299. package/src/styles/@layouts/styles/_placeholders.scss +53 -0
  300. package/src/styles/@layouts/styles/_rtl.scss +7 -0
  301. package/src/styles/@layouts/styles/_variables.scss +22 -0
  302. package/src/styles/@layouts/styles/index.scss +2 -0
  303. package/src/styles/assets/scss/styles.scss +246 -0
  304. package/src/styles/assets/scss/variables/_template.scss +1 -0
  305. package/src/styles/assets/scss/variables/_vuetify.scss +1 -0
@@ -0,0 +1,100 @@
1
+ @use 'sass:map';
2
+ @use 'sass:list';
3
+ @use '../../../assets/scss/variables/template' as variables;
4
+
5
+ // Thanks: https://css-tricks.com/snippets/sass/deep-getset-maps/
6
+ @function map-deep-get($map, $keys...) {
7
+ @each $key in $keys {
8
+ $map: map.get($map, $key);
9
+ }
10
+
11
+ @return $map;
12
+ }
13
+
14
+ @function map-deep-set($map, $keys, $value) {
15
+ $maps: ($map);
16
+ $result: null;
17
+
18
+ // If the last key is a map already
19
+ // Warn the user we will be overriding it with $value
20
+ @if type-of(nth($keys, -1)) == 'map' {
21
+ @warn "The last key you specified is a map; it will be overrided with `#{$value}`.";
22
+ }
23
+
24
+ // If $keys is a single key
25
+ // Just merge and return
26
+ @if length($keys) == 1 {
27
+ @return map-merge(
28
+ $map,
29
+ (
30
+ $keys: $value,
31
+ )
32
+ );
33
+ }
34
+
35
+ // Loop from the first to the second to last key from $keys
36
+ // Store the associated map to this key in the $maps list
37
+ // If the key doesn't exist, throw an error
38
+ @for $i from 1 through length($keys) - 1 {
39
+ $current-key: list.nth($keys, $i);
40
+ $current-map: list.nth($maps, -1);
41
+ $current-get: map.get($current-map, $current-key);
42
+
43
+ @if not $current-get {
44
+ @error "Key `#{$key}` doesn't exist at current level in map.";
45
+ }
46
+
47
+ $maps: list.append($maps, $current-get);
48
+ }
49
+
50
+ // Loop from the last map to the first one
51
+ // Merge it with the previous one
52
+ @for $i from length($maps) through 1 {
53
+ $current-map: list.nth($maps, $i);
54
+ $current-key: list.nth($keys, $i);
55
+ $current-val: if($i == list.length($maps), $value, $result);
56
+ $result: map.map-merge(
57
+ $current-map,
58
+ (
59
+ $current-key: $current-val,
60
+ )
61
+ );
62
+ }
63
+
64
+ // Return result
65
+ @return $result;
66
+ }
67
+
68
+ // font size utility classes
69
+ @each $name, $size in variables.$font-sizes {
70
+ .text-#{$name} {
71
+ font-size: $size;
72
+ line-height: map.get(variables.$font-line-height, $name);
73
+ }
74
+ }
75
+
76
+ // truncate utility class
77
+ .truncate {
78
+ overflow: hidden;
79
+ text-overflow: ellipsis;
80
+ white-space: nowrap;
81
+ }
82
+
83
+ // gap utility class
84
+ @each $name, $size in variables.$gap {
85
+ .gap-#{$name} {
86
+ gap: $size;
87
+ }
88
+
89
+ .gap-x-#{$name} {
90
+ column-gap: $size;
91
+ }
92
+
93
+ .gap-y-#{$name} {
94
+ row-gap: $size;
95
+ }
96
+ }
97
+
98
+ .list-none {
99
+ list-style-type: none;
100
+ }
@@ -0,0 +1,190 @@
1
+ @use 'vuetify/lib/styles/tools/functions' as *;
2
+
3
+ /*
4
+ TODO: Add docs on when to use placeholder vs when to use SASS variable
5
+
6
+ Placeholder
7
+ - When we want to keep customization to our self between templates use it
8
+
9
+ Variables
10
+ - When we want to allow customization from both user and our side
11
+ - You can also use variable for consistency (e.g. mx 1 rem should be applied to both vertical nav items and vertical nav header)
12
+ */
13
+
14
+ @forward '../../../@layouts/styles/variables' with (
15
+ // Adjust z-index so vertical nav & overlay stays on top of v-layout in v-main. E.g. Email app
16
+ $layout-vertical-nav-z-index: 1004,
17
+ $layout-overlay-z-index: 1003
18
+ );
19
+ @use '../../../@layouts/styles/variables' as *;
20
+
21
+ // Default layout
22
+
23
+ $navbar-high-emphasis-text: true !default;
24
+
25
+ // @forward "@layouts/styles/variables" with (
26
+ // $layout-vertical-nav-width: 350px !default,
27
+ // );
28
+
29
+ $theme-colors-name: ('primary', 'secondary', 'error', 'info', 'success', 'warning') !default;
30
+
31
+ // Default layout with vertical nav
32
+
33
+ $default-layout-with-vertical-nav-navbar-footer-roundness: 10px !default;
34
+
35
+ // Vertical nav
36
+ $vertical-nav-background-color-rgb: var(--v-theme-background) !default;
37
+ $vertical-nav-background-color: rgb(#{$vertical-nav-background-color-rgb}) !default;
38
+
39
+ // ℹ️ This is used to keep consistency between nav items and nav header left & right margin
40
+ // This is used by nav items & nav header
41
+ $vertical-nav-horizontal-spacing: 1rem !default;
42
+ $vertical-nav-horizontal-padding: 0.75rem !default;
43
+
44
+ // Vertical nav header height. Mostly we will align it with navbar height;
45
+ $vertical-nav-header-height: $layout-vertical-nav-navbar-height !default;
46
+ $vertical-nav-navbar-elevation: 3 !default;
47
+ $vertical-nav-navbar-style: 'elevated' !default; // options: elevated, floating
48
+ $vertical-nav-floating-navbar-top: 1rem !default;
49
+
50
+ // Vertical nav header padding
51
+ $vertical-nav-header-padding: 1rem $vertical-nav-horizontal-padding !default;
52
+ $vertical-nav-header-inline-spacing: $vertical-nav-horizontal-spacing !default;
53
+
54
+ // Move logo when vertical nav is mini (collapsed but not hovered)
55
+ $vertical-nav-header-logo-translate-x-when-vertical-nav-mini: -4px !default;
56
+
57
+ // Space between logo and title
58
+ $vertical-nav-header-logo-title-spacing: 0.9rem !default;
59
+
60
+ // Section title margin top (when its not first child)
61
+ $vertical-nav-section-title-mt: 1.5rem !default;
62
+
63
+ // Section title margin bottom
64
+ $vertical-nav-section-title-mb: 0.5rem !default;
65
+
66
+ // Vertical nav icons
67
+ $vertical-nav-items-icon-size: 1.5rem !default;
68
+ $vertical-nav-items-nested-icon-size: 0.9rem !default;
69
+ $vertical-nav-items-icon-margin-inline-end: 0.5rem !default;
70
+
71
+ // Transition duration for nav group arrow
72
+ $vertical-nav-nav-group-arrow-transition-duration: 0.15s !default;
73
+
74
+ // Timing function for nav group arrow
75
+ $vertical-nav-nav-group-arrow-transition-timing-function: ease-in-out !default;
76
+
77
+ // Horizontal nav
78
+
79
+ /*
80
+ ❗ Heads up
81
+ ==================
82
+ Here we assume we will always use shorthand property which will apply same padding on four side
83
+ This is because this have been used as value of top property by `.popper-content`
84
+ */
85
+ $horizontal-nav-padding: 0.6875rem !default;
86
+
87
+ // Gap between top level horizontal nav items
88
+ $horizontal-nav-top-level-items-gap: 4px !default;
89
+
90
+ // Horizontal nav icons
91
+ $horizontal-nav-items-icon-size: 1.5rem !default;
92
+ $horizontal-nav-third-level-icon-size: 0.9rem !default;
93
+ $horizontal-nav-items-icon-margin-inline-end: 0.625rem !default;
94
+
95
+ // ℹ️ We used SCSS variable because we want to allow users to update max height of popper content
96
+ // 120px is combined height of navbar & horizontal nav
97
+ $horizontal-nav-popper-content-max-height: calc((var(--vh, 1vh) * 100) - 120px - 4rem) !default;
98
+
99
+ // ℹ️ This variable is used for horizontal nav popper content's `margin-top` and "The bridge"'s height. We need to sync both values.
100
+ $horizontal-nav-popper-content-top: calc($horizontal-nav-padding + 0.375rem) !default;
101
+
102
+ // Plugins
103
+
104
+ $plugin-ps-thumb-y-dark: rgba(var(--v-theme-surface-variant), 0.35) !default;
105
+
106
+ // Vuetify
107
+
108
+ // Used in src/@core/scss/base/libs/vuetify/_overrides.scss
109
+ $vuetify-reduce-default-compact-button-icon-size: true !default;
110
+
111
+ // Custom variables
112
+ // for utility classes
113
+ $font-sizes: () !default;
114
+ $font-sizes: map-deep-merge(
115
+ (
116
+ 'xs': 0.75rem,
117
+ 'sm': 0.875rem,
118
+ 'base': 1rem,
119
+ 'lg': 1.125rem,
120
+ 'xl': 1.25rem,
121
+ '2xl': 1.5rem,
122
+ '3xl': 1.875rem,
123
+ '4xl': 2.25rem,
124
+ '5xl': 3rem,
125
+ '6xl': 3.75rem,
126
+ '7xl': 4.5rem,
127
+ '8xl': 6rem,
128
+ '9xl': 8rem,
129
+ ),
130
+ $font-sizes
131
+ );
132
+
133
+ // line height
134
+ $font-line-height: () !default;
135
+ $font-line-height: map-deep-merge(
136
+ (
137
+ 'xs': 1rem,
138
+ 'sm': 1.25rem,
139
+ 'base': 1.5rem,
140
+ 'lg': 1.75rem,
141
+ 'xl': 1.75rem,
142
+ '2xl': 2rem,
143
+ '3xl': 2.25rem,
144
+ '4xl': 2.5rem,
145
+ '5xl': 1,
146
+ '6xl': 1,
147
+ '7xl': 1,
148
+ '8xl': 1,
149
+ '9xl': 1,
150
+ ),
151
+ $font-line-height
152
+ );
153
+
154
+ // gap utility class
155
+ $gap: () !default;
156
+ $gap: map-deep-merge(
157
+ (
158
+ '0': 0,
159
+ '1': 0.25rem,
160
+ '2': 0.5rem,
161
+ '3': 0.75rem,
162
+ '4': 1rem,
163
+ '5': 1.25rem,
164
+ '6': 1.5rem,
165
+ '7': 1.75rem,
166
+ '8': 2rem,
167
+ '9': 2.25rem,
168
+ '10': 2.5rem,
169
+ '11': 2.75rem,
170
+ '12': 3rem,
171
+ '14': 3.5rem,
172
+ '16': 4rem,
173
+ '20': 5rem,
174
+ '24': 6rem,
175
+ '28': 7rem,
176
+ '32': 8rem,
177
+ '36': 9rem,
178
+ '40': 10rem,
179
+ '44': 11rem,
180
+ '48': 12rem,
181
+ '52': 13rem,
182
+ '56': 14rem,
183
+ '60': 15rem,
184
+ '64': 16rem,
185
+ '72': 18rem,
186
+ '80': 20rem,
187
+ '96': 24rem,
188
+ ),
189
+ $gap
190
+ );
@@ -0,0 +1,264 @@
1
+ @use 'placeholders' as *;
2
+ @use '../template/placeholders' as *;
3
+ @use '../../../@layouts/styles/mixins' as layoutsMixins;
4
+ @use '../../../assets/scss/variables/template' as variables;
5
+ @use 'mixins' as mixins;
6
+ @use 'vuetify/lib/styles/tools/states' as vuetifyStates;
7
+
8
+ .layout-nav-type-vertical {
9
+ // Layout Vertical nav
10
+ .layout-vertical-nav {
11
+ $sl-layout-nav-type-vertical: &;
12
+
13
+ @extend %nav;
14
+
15
+ @at-root {
16
+ // ℹ️ Add styles for collapsed vertical nav
17
+ .layout-vertical-nav-collapsed#{$sl-layout-nav-type-vertical}.hovered {
18
+ @include mixins.elevation(6);
19
+ }
20
+ }
21
+
22
+ background-color: variables.$vertical-nav-background-color;
23
+
24
+ // Nav header
25
+ .nav-header {
26
+ overflow: hidden;
27
+ padding: variables.$vertical-nav-header-padding;
28
+ margin-inline: variables.$vertical-nav-header-inline-spacing;
29
+ min-block-size: variables.$vertical-nav-header-height;
30
+
31
+ // TEMPLATE: Check if we need to move this to master
32
+ .app-logo {
33
+ flex-shrink: 0;
34
+ transition: transform 0.25s ease-in-out;
35
+
36
+ @at-root {
37
+ // Move logo a bit to align center with the icons in vertical nav mini variant
38
+ .layout-vertical-nav-collapsed#{$sl-layout-nav-type-vertical}:not(.hovered)
39
+ .nav-header
40
+ .app-logo {
41
+ transform: translateX(
42
+ variables.$vertical-nav-header-logo-translate-x-when-vertical-nav-mini
43
+ );
44
+
45
+ @include layoutsMixins.rtl {
46
+ transform: translateX(
47
+ -(variables.$vertical-nav-header-logo-translate-x-when-vertical-nav-mini)
48
+ );
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ .header-action {
55
+ @extend %nav-header-action;
56
+ }
57
+ }
58
+
59
+ // Nav items shadow
60
+ .vertical-nav-items-shadow {
61
+ position: absolute;
62
+ z-index: 1;
63
+ background: linear-gradient(
64
+ rgb(#{variables.$vertical-nav-background-color-rgb}) 5%,
65
+ rgba(#{variables.$vertical-nav-background-color-rgb}, 75%) 45%,
66
+ rgba(#{variables.$vertical-nav-background-color-rgb}, 20%) 80%,
67
+ transparent
68
+ );
69
+ block-size: 55px;
70
+ inline-size: 100%;
71
+ inset-block-start: calc(#{variables.$vertical-nav-header-height} - 2px);
72
+ opacity: 0;
73
+ pointer-events: none;
74
+ transition: opacity 0.15s ease-in-out;
75
+ will-change: opacity;
76
+
77
+ @include layoutsMixins.rtl {
78
+ transform: translateX(8px);
79
+ }
80
+ }
81
+
82
+ &.scrolled {
83
+ .vertical-nav-items-shadow {
84
+ opacity: 1;
85
+ }
86
+ }
87
+
88
+ .ps__rail-y {
89
+ // ℹ️ Setting z-index: 1 will make perfect scrollbar thumb appear on top of vertical nav items shadow
90
+ z-index: 1;
91
+ }
92
+
93
+ // Nav section title
94
+ .nav-section-title {
95
+ @extend %vertical-nav-item;
96
+ @extend %vertical-nav-section-title;
97
+
98
+ margin-block-end: variables.$vertical-nav-section-title-mb;
99
+
100
+ &:not(:first-child) {
101
+ margin-block-start: variables.$vertical-nav-section-title-mt;
102
+ }
103
+
104
+ .placeholder-icon {
105
+ margin-inline: auto;
106
+ }
107
+ }
108
+
109
+ // Nav item badge
110
+ .nav-item-badge {
111
+ @extend %vertical-nav-item-badge;
112
+ }
113
+
114
+ // Nav group & Link
115
+ .nav-link,
116
+ .nav-group {
117
+ overflow: hidden;
118
+
119
+ > :first-child {
120
+ @extend %vertical-nav-item;
121
+ @extend %vertical-nav-item-interactive;
122
+ }
123
+
124
+ .nav-item-icon {
125
+ @extend %vertical-nav-items-icon;
126
+ }
127
+
128
+ &.disabled {
129
+ opacity: var(--v-disabled-opacity);
130
+ pointer-events: none;
131
+ }
132
+ }
133
+
134
+ // Vertical nav link
135
+ .nav-link {
136
+ @extend %nav-link;
137
+
138
+ > .router-link-exact-active {
139
+ @extend %nav-link-active;
140
+ }
141
+
142
+ > a {
143
+ // Adds before psudo element to style hover state
144
+ transition: background 0.3s ease-in-out;
145
+ &:hover {
146
+ background: rgb(var(--v-theme-gray-200));
147
+ }
148
+
149
+ // Adds vuetify states
150
+ @include vuetifyStates.states($active: false);
151
+ }
152
+ }
153
+
154
+ // Vertical nav group
155
+ .nav-group {
156
+ // Reduce the size of icon if link/group is inside group
157
+ .nav-group,
158
+ .nav-link {
159
+ .nav-item-icon {
160
+ @extend %vertical-nav-items-nested-icon;
161
+ }
162
+ }
163
+
164
+ // Hide icons after 2nd level
165
+ & .nav-group {
166
+ .nav-link,
167
+ .nav-group {
168
+ .nav-item-icon {
169
+ @extend %vertical-nav-items-icon-after-2nd-level;
170
+ }
171
+ }
172
+ }
173
+
174
+ .nav-group-arrow {
175
+ flex-shrink: 0;
176
+ transform-origin: center;
177
+ transition: transform variables.$vertical-nav-nav-group-arrow-transition-duration
178
+ variables.$vertical-nav-nav-group-arrow-transition-timing-function;
179
+ will-change: auto;
180
+ }
181
+
182
+ // Rotate arrow icon if group is opened
183
+ &.open {
184
+ > .nav-group-label {
185
+ background: rgb(var(--v-theme-gray-200));
186
+ .nav-group-arrow {
187
+ transform: rotateZ(90deg);
188
+ }
189
+ }
190
+ }
191
+
192
+ &:hover {
193
+ > .nav-group-label {
194
+ background: rgb(var(--v-theme-gray-200));
195
+ }
196
+ }
197
+
198
+ // Nav group label
199
+ > :first-child {
200
+ // Adds before psudo element to style hover state
201
+ @include mixins.before-pseudo;
202
+
203
+ // Adds vuetify states
204
+ @include vuetifyStates.states($active: false);
205
+ }
206
+
207
+ // Active & open states for nav group label
208
+ &.active,
209
+ &.open {
210
+ > :first-child {
211
+ @extend %vertical-nav-group-open-active;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+
218
+ // SECTION: Transitions
219
+ .vertical-nav-section-title-enter-active,
220
+ .vertical-nav-section-title-leave-active {
221
+ transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
222
+ }
223
+
224
+ .vertical-nav-section-title-enter-from,
225
+ .vertical-nav-section-title-leave-to {
226
+ opacity: 0;
227
+ transform: translateX(15px);
228
+
229
+ @include layoutsMixins.rtl {
230
+ transform: translateX(-15px);
231
+ }
232
+ }
233
+
234
+ .transition-slide-x-enter-active,
235
+ .transition-slide-x-leave-active {
236
+ transition: opacity 0.1s ease-in-out, transform 0.12s ease-in-out;
237
+ }
238
+
239
+ .transition-slide-x-enter-from,
240
+ .transition-slide-x-leave-to {
241
+ opacity: 0;
242
+ transform: translateX(-15px);
243
+
244
+ @include layoutsMixins.rtl {
245
+ transform: translateX(15px);
246
+ }
247
+ }
248
+
249
+ .vertical-nav-app-title-enter-active,
250
+ .vertical-nav-app-title-leave-active {
251
+ transition: all 0.2;
252
+ }
253
+
254
+ .vertical-nav-app-title-enter-from,
255
+ .vertical-nav-app-title-leave-to {
256
+ opacity: 0;
257
+ transform: translateX(-15px);
258
+
259
+ @include layoutsMixins.rtl {
260
+ transform: translateX(15px);
261
+ }
262
+ }
263
+
264
+ // !SECTION
@@ -0,0 +1,35 @@
1
+ $ps-size: 0.25rem;
2
+ $ps-hover-size: 0.375rem;
3
+ $ps-track-size: 0.5rem;
4
+
5
+ .ps__thumb-y {
6
+ inline-size: $ps-size;
7
+ inset-inline-end: 0.0625rem;
8
+ }
9
+
10
+ .ps__thumb-x {
11
+ block-size: $ps-size !important;
12
+ }
13
+
14
+ .ps__rail-x {
15
+ background: transparent !important;
16
+ block-size: $ps-track-size;
17
+ }
18
+
19
+ .ps__rail-y {
20
+ background: transparent !important;
21
+ inline-size: $ps-track-size !important;
22
+ inset-inline-end: 0.125rem !important;
23
+ inset-inline-start: unset !important;
24
+ }
25
+
26
+ .ps__rail-y.ps--clicking .ps__thumb-y,
27
+ .ps__rail-y:focus > .ps__thumb-y,
28
+ .ps__rail-y:hover > .ps__thumb-y {
29
+ inline-size: $ps-hover-size;
30
+ }
31
+
32
+ .ps__thumb-x,
33
+ .ps__thumb-y {
34
+ background-color: rgb(var(--v-theme-silver)) !important;
35
+ }
@@ -0,0 +1 @@
1
+ @use 'overrides';