@winchsa/ui 0.1.33 → 0.1.34

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 (300) hide show
  1. package/dist/components/Breadcrumbs.d.vue.ts +7 -0
  2. package/dist/components/Breadcrumbs.vue +46 -0
  3. package/dist/components/Breadcrumbs.vue.d.ts +7 -0
  4. package/dist/components/CustomizerSection.d.vue.ts +17 -0
  5. package/dist/components/CustomizerSection.vue +19 -0
  6. package/dist/components/CustomizerSection.vue.d.ts +17 -0
  7. package/dist/components/DialogCloseBtn.d.vue.ts +7 -0
  8. package/dist/components/DialogCloseBtn.vue +20 -0
  9. package/dist/components/DialogCloseBtn.vue.d.ts +7 -0
  10. package/dist/components/Drawer.d.vue.ts +28 -0
  11. package/dist/components/Drawer.vue +60 -0
  12. package/dist/components/Drawer.vue.d.ts +28 -0
  13. package/dist/components/IconBtn.d.vue.ts +18 -0
  14. package/dist/components/IconBtn.vue +24 -0
  15. package/dist/components/IconBtn.vue.d.ts +18 -0
  16. package/dist/components/LoadingBar.d.vue.ts +6 -0
  17. package/dist/components/LoadingBar.vue +31 -0
  18. package/dist/components/LoadingBar.vue.d.ts +6 -0
  19. package/dist/components/LoadingDialog.d.vue.ts +12 -0
  20. package/dist/components/LoadingDialog.vue +41 -0
  21. package/dist/components/LoadingDialog.vue.d.ts +12 -0
  22. package/dist/components/LoadingItem.d.vue.ts +25 -0
  23. package/dist/components/LoadingItem.vue +66 -0
  24. package/dist/components/LoadingItem.vue.d.ts +25 -0
  25. package/dist/components/Modal.d.vue.ts +50 -0
  26. package/dist/components/Modal.vue +155 -0
  27. package/dist/components/Modal.vue.d.ts +50 -0
  28. package/dist/components/MoreBtn.d.vue.ts +17 -0
  29. package/dist/components/MoreBtn.vue +28 -0
  30. package/dist/components/MoreBtn.vue.d.ts +17 -0
  31. package/dist/components/ScrollToTop.d.vue.ts +3 -0
  32. package/dist/components/ScrollToTop.vue +39 -0
  33. package/dist/components/ScrollToTop.vue.d.ts +3 -0
  34. package/dist/components/SiteTitle.d.vue.ts +3 -0
  35. package/dist/components/SiteTitle.vue +14 -0
  36. package/dist/components/SiteTitle.vue.d.ts +3 -0
  37. package/dist/components/Toaster.d.vue.ts +6 -0
  38. package/dist/components/Toaster.vue +19 -0
  39. package/dist/components/Toaster.vue.d.ts +6 -0
  40. package/dist/components/cards/AppCard.d.vue.ts +18 -0
  41. package/dist/components/cards/AppCard.vue +45 -0
  42. package/dist/components/cards/AppCard.vue.d.ts +18 -0
  43. package/dist/components/cards/AppCardActions.d.vue.ts +33 -0
  44. package/dist/components/cards/AppCardActions.vue +126 -0
  45. package/dist/components/cards/AppCardActions.vue.d.ts +33 -0
  46. package/dist/components/cards/CardStatisticsHorizontal.d.vue.ts +9 -0
  47. package/dist/components/cards/CardStatisticsHorizontal.vue +29 -0
  48. package/dist/components/cards/CardStatisticsHorizontal.vue.d.ts +9 -0
  49. package/dist/components/cards/CheckboxesCard.d.vue.ts +18 -0
  50. package/dist/components/cards/CheckboxesCard.vue +108 -0
  51. package/dist/components/cards/CheckboxesCard.vue.d.ts +18 -0
  52. package/dist/components/cards/HeaderCard.d.vue.ts +9 -0
  53. package/dist/components/cards/HeaderCard.vue +31 -0
  54. package/dist/components/cards/HeaderCard.vue.d.ts +9 -0
  55. package/dist/components/cards/ImageCard.d.vue.ts +33 -0
  56. package/dist/components/cards/ImageCard.vue +73 -0
  57. package/dist/components/cards/ImageCard.vue.d.ts +33 -0
  58. package/dist/components/cards/InputCard.d.vue.ts +21 -0
  59. package/dist/components/cards/InputCard.vue +60 -0
  60. package/dist/components/cards/InputCard.vue.d.ts +21 -0
  61. package/dist/components/cards/StaticCard.d.vue.ts +21 -0
  62. package/dist/components/cards/StaticCard.vue +37 -0
  63. package/dist/components/cards/StaticCard.vue.d.ts +21 -0
  64. package/dist/components/forms/Accordion.d.vue.ts +19 -0
  65. package/dist/components/forms/Accordion.vue +43 -0
  66. package/dist/components/forms/Accordion.vue.d.ts +19 -0
  67. package/dist/components/forms/AppBarSearch.d.vue.ts +43 -0
  68. package/dist/components/forms/AppBarSearch.vue +345 -0
  69. package/dist/components/forms/AppBarSearch.vue.d.ts +43 -0
  70. package/dist/components/forms/AppCombobox.d.vue.ts +13 -0
  71. package/dist/components/forms/AppCombobox.vue +60 -0
  72. package/dist/components/forms/AppCombobox.vue.d.ts +13 -0
  73. package/dist/components/forms/AppDrawerHeaderSection.d.vue.ts +20 -0
  74. package/dist/components/forms/AppDrawerHeaderSection.vue +21 -0
  75. package/dist/components/forms/AppDrawerHeaderSection.vue.d.ts +20 -0
  76. package/dist/components/forms/AppLabel.d.vue.ts +24 -0
  77. package/dist/components/forms/AppLabel.vue +47 -0
  78. package/dist/components/forms/AppLabel.vue.d.ts +24 -0
  79. package/dist/components/forms/AppLink.d.vue.ts +19 -0
  80. package/dist/components/forms/AppLink.vue +50 -0
  81. package/dist/components/forms/AppLink.vue.d.ts +19 -0
  82. package/dist/components/forms/AppNumberField.d.vue.ts +20 -0
  83. package/dist/components/forms/AppNumberField.vue +79 -0
  84. package/dist/components/forms/AppNumberField.vue.d.ts +20 -0
  85. package/dist/components/forms/AppOtpInput.d.vue.ts +13 -0
  86. package/dist/components/forms/AppOtpInput.vue +84 -0
  87. package/dist/components/forms/AppOtpInput.vue.d.ts +13 -0
  88. package/dist/components/forms/AppSearchHeader.d.vue.ts +8 -0
  89. package/dist/components/forms/AppSearchHeader.vue +72 -0
  90. package/dist/components/forms/AppSearchHeader.vue.d.ts +8 -0
  91. package/dist/components/forms/AppSelect.d.vue.ts +17 -0
  92. package/dist/components/forms/AppSelect.vue +91 -0
  93. package/dist/components/forms/AppSelect.vue.d.ts +17 -0
  94. package/dist/components/forms/AppStepper.d.vue.ts +21 -0
  95. package/dist/components/forms/AppStepper.vue +232 -0
  96. package/dist/components/forms/AppStepper.vue.d.ts +21 -0
  97. package/dist/components/forms/AppSwitch.d.vue.ts +16 -0
  98. package/dist/components/forms/AppSwitch.vue +59 -0
  99. package/dist/components/forms/AppSwitch.vue.d.ts +16 -0
  100. package/dist/components/forms/AppTextField.d.vue.ts +13 -0
  101. package/dist/components/forms/AppTextField.vue +59 -0
  102. package/dist/components/forms/AppTextField.vue.d.ts +13 -0
  103. package/dist/components/forms/AppTextarea.d.vue.ts +13 -0
  104. package/dist/components/forms/AppTextarea.vue +62 -0
  105. package/dist/components/forms/AppTextarea.vue.d.ts +13 -0
  106. package/dist/components/forms/AttachmentCropperInput.d.vue.ts +18 -0
  107. package/dist/components/forms/AttachmentCropperInput.vue +227 -0
  108. package/dist/components/forms/AttachmentCropperInput.vue.d.ts +18 -0
  109. package/dist/components/forms/AttachmentInput.d.vue.ts +16 -0
  110. package/dist/components/forms/AttachmentInput.vue +116 -0
  111. package/dist/components/forms/AttachmentInput.vue.d.ts +16 -0
  112. package/dist/components/forms/AutocompleteInput.d.vue.ts +84 -0
  113. package/dist/components/forms/AutocompleteInput.vue +760 -0
  114. package/dist/components/forms/AutocompleteInput.vue.d.ts +84 -0
  115. package/dist/components/forms/BankSelect.d.vue.ts +21 -0
  116. package/dist/components/forms/BankSelect.vue +43 -0
  117. package/dist/components/forms/BankSelect.vue.d.ts +21 -0
  118. package/dist/components/forms/BaseButton.d.vue.ts +20 -0
  119. package/dist/components/forms/BaseButton.vue +42 -0
  120. package/dist/components/forms/BaseButton.vue.d.ts +20 -0
  121. package/dist/components/forms/CounterInput.d.vue.ts +13 -0
  122. package/dist/components/forms/CounterInput.vue +71 -0
  123. package/dist/components/forms/CounterInput.vue.d.ts +13 -0
  124. package/dist/components/forms/CustomCheckboxes.d.vue.ts +25 -0
  125. package/dist/components/forms/CustomCheckboxes.vue +69 -0
  126. package/dist/components/forms/CustomCheckboxes.vue.d.ts +25 -0
  127. package/dist/components/forms/CustomCheckboxesWithIcon.d.vue.ts +25 -0
  128. package/dist/components/forms/CustomCheckboxesWithIcon.vue +80 -0
  129. package/dist/components/forms/CustomCheckboxesWithIcon.vue.d.ts +25 -0
  130. package/dist/components/forms/CustomCheckboxesWithImage.d.vue.ts +16 -0
  131. package/dist/components/forms/CustomCheckboxesWithImage.vue +67 -0
  132. package/dist/components/forms/CustomCheckboxesWithImage.vue.d.ts +16 -0
  133. package/dist/components/forms/CustomRadios.d.vue.ts +25 -0
  134. package/dist/components/forms/CustomRadios.vue +69 -0
  135. package/dist/components/forms/CustomRadios.vue.d.ts +25 -0
  136. package/dist/components/forms/CustomRadiosWithIcon.d.vue.ts +28 -0
  137. package/dist/components/forms/CustomRadiosWithIcon.vue +98 -0
  138. package/dist/components/forms/CustomRadiosWithIcon.vue.d.ts +28 -0
  139. package/dist/components/forms/CustomRadiosWithImage.d.vue.ts +35 -0
  140. package/dist/components/forms/CustomRadiosWithImage.vue +69 -0
  141. package/dist/components/forms/CustomRadiosWithImage.vue.d.ts +35 -0
  142. package/dist/components/forms/DatePicker.d.vue.ts +29 -0
  143. package/dist/components/forms/DatePicker.vue +392 -0
  144. package/dist/components/forms/DatePicker.vue.d.ts +29 -0
  145. package/dist/components/forms/DatePickerRange.d.vue.ts +24 -0
  146. package/dist/components/forms/DatePickerRange.vue +127 -0
  147. package/dist/components/forms/DatePickerRange.vue.d.ts +24 -0
  148. package/dist/components/forms/DraggedUploadFile.d.vue.ts +11 -0
  149. package/dist/components/forms/DraggedUploadFile.vue +120 -0
  150. package/dist/components/forms/DraggedUploadFile.vue.d.ts +11 -0
  151. package/dist/components/forms/ImageCardInput.d.vue.ts +35 -0
  152. package/dist/components/forms/ImageCardInput.vue +234 -0
  153. package/dist/components/forms/ImageCardInput.vue.d.ts +35 -0
  154. package/dist/components/forms/InputValidationWrapper.d.vue.ts +26 -0
  155. package/dist/components/forms/InputValidationWrapper.vue +24 -0
  156. package/dist/components/forms/InputValidationWrapper.vue.d.ts +26 -0
  157. package/dist/components/forms/LicensePlateInput.d.vue.ts +21 -0
  158. package/dist/components/forms/LicensePlateInput.vue +175 -0
  159. package/dist/components/forms/LicensePlateInput.vue.d.ts +21 -0
  160. package/dist/components/forms/ManualDate.d.vue.ts +20 -0
  161. package/dist/components/forms/ManualDate.vue +264 -0
  162. package/dist/components/forms/ManualDate.vue.d.ts +20 -0
  163. package/dist/components/forms/MobileInput.d.vue.ts +25 -0
  164. package/dist/components/forms/MobileInput.vue +118 -0
  165. package/dist/components/forms/MobileInput.vue.d.ts +25 -0
  166. package/dist/components/forms/PasswordInput.d.vue.ts +11 -0
  167. package/dist/components/forms/PasswordInput.vue +29 -0
  168. package/dist/components/forms/PasswordInput.vue.d.ts +11 -0
  169. package/dist/components/forms/RangeInput.d.vue.ts +10 -0
  170. package/dist/components/forms/RangeInput.vue +48 -0
  171. package/dist/components/forms/RangeInput.vue.d.ts +10 -0
  172. package/dist/components/forms/Tabs.d.vue.ts +23 -0
  173. package/dist/components/forms/Tabs.vue +35 -0
  174. package/dist/components/forms/Tabs.vue.d.ts +23 -0
  175. package/dist/components/forms/TimePicker.d.vue.ts +18 -0
  176. package/dist/components/forms/TimePicker.vue +370 -0
  177. package/dist/components/forms/TimePicker.vue.d.ts +18 -0
  178. package/dist/components/table/DataTable.d.vue.ts +70 -0
  179. package/dist/components/table/DataTable.vue +361 -0
  180. package/dist/components/table/DataTable.vue.d.ts +70 -0
  181. package/dist/components/table/EditableDataTable.d.vue.ts +21 -0
  182. package/dist/components/table/EditableDataTable.vue +330 -0
  183. package/dist/components/table/EditableDataTable.vue.d.ts +21 -0
  184. package/dist/components/table/EditableDataTableRow.d.vue.ts +20 -0
  185. package/dist/components/table/EditableDataTableRow.vue +253 -0
  186. package/dist/components/table/EditableDataTableRow.vue.d.ts +20 -0
  187. package/dist/components/table/FilterGenerator.d.vue.ts +13 -0
  188. package/dist/components/table/FilterGenerator.vue +231 -0
  189. package/dist/components/table/FilterGenerator.vue.d.ts +13 -0
  190. package/dist/components/table/StaticTable.d.vue.ts +34 -0
  191. package/dist/components/table/StaticTable.vue +152 -0
  192. package/dist/components/table/StaticTable.vue.d.ts +34 -0
  193. package/dist/components/table/TablePagination.d.vue.ts +15 -0
  194. package/dist/components/table/TablePagination.vue +73 -0
  195. package/dist/components/table/TablePagination.vue.d.ts +15 -0
  196. package/dist/composables/useIsMobile.d.ts +1 -0
  197. package/dist/composables/useIsMobile.js +10 -0
  198. package/dist/composables/useIsMobile.mjs +4 -0
  199. package/dist/composables/useTableFilters.d.ts +23 -0
  200. package/dist/composables/useTableFilters.js +197 -0
  201. package/dist/composables/useTableFilters.mjs +184 -0
  202. package/dist/images/avatar.png +0 -0
  203. package/dist/images/sa.svg +1 -0
  204. package/dist/index.d.ts +65 -0
  205. package/dist/index.js +454 -0
  206. package/dist/index.mjs +130 -0
  207. package/dist/lang/ar.json +54 -0
  208. package/dist/lang/en.json +54 -0
  209. package/dist/styles/assets/scss/variables/_template.scss +1 -0
  210. package/dist/styles/assets/scss/variables/_vuetify.scss +1 -0
  211. package/dist/styles/core/base/_components.scss +164 -0
  212. package/dist/styles/core/base/_dark.scss +16 -0
  213. package/dist/styles/core/base/_default-layout-w-vertical-nav.scss +106 -0
  214. package/dist/styles/core/base/_default-layout.scss +16 -0
  215. package/dist/styles/core/base/_index.scss +47 -0
  216. package/dist/styles/core/base/_layouts.scss +63 -0
  217. package/dist/styles/core/base/_misc.scss +20 -0
  218. package/dist/styles/core/base/_mixins.scss +84 -0
  219. package/dist/styles/core/base/_route-transitions.scss +70 -0
  220. package/dist/styles/core/base/_utilities.scss +418 -0
  221. package/dist/styles/core/base/_utils.scss +100 -0
  222. package/dist/styles/core/base/_variables.scss +190 -0
  223. package/dist/styles/core/base/_vertical-nav.scss +264 -0
  224. package/dist/styles/core/base/libs/_perfect-scrollbar.scss +35 -0
  225. package/dist/styles/core/base/libs/vuetify/_index.scss +1 -0
  226. package/dist/styles/core/base/libs/vuetify/_overrides.scss +380 -0
  227. package/dist/styles/core/base/libs/vuetify/_variables.scss +48 -0
  228. package/dist/styles/core/base/placeholders/_default-layout-vertical-nav.scss +48 -0
  229. package/dist/styles/core/base/placeholders/_default-layout.scss +3 -0
  230. package/dist/styles/core/base/placeholders/_index.scss +5 -0
  231. package/dist/styles/core/base/placeholders/_misc.scss +7 -0
  232. package/dist/styles/core/base/placeholders/_nav.scss +26 -0
  233. package/dist/styles/core/base/placeholders/_vertical-nav.scss +84 -0
  234. package/dist/styles/core/base/skins/_bordered.scss +60 -0
  235. package/dist/styles/core/base/skins/_index.scss +1 -0
  236. package/dist/styles/core/template/_components.scss +1035 -0
  237. package/dist/styles/core/template/_default-layout-w-vertical-nav.scss +20 -0
  238. package/dist/styles/core/template/_utilities.scss +20 -0
  239. package/dist/styles/core/template/_variables.scss +67 -0
  240. package/dist/styles/core/template/_vertical-nav.scss +41 -0
  241. package/dist/styles/core/template/index.css +18779 -0
  242. package/dist/styles/core/template/index.scss +15 -0
  243. package/dist/styles/core/template/libs/vuetify/_variables.scss +464 -0
  244. package/dist/styles/core/template/libs/vuetify/index.css +739 -0
  245. package/dist/styles/core/template/libs/vuetify/index.scss +1 -0
  246. package/dist/styles/core/template/pages/misc.css +16 -0
  247. package/dist/styles/core/template/pages/misc.scss +20 -0
  248. package/dist/styles/core/template/placeholders/_default-layout-vertical-nav.scss +9 -0
  249. package/dist/styles/core/template/placeholders/_index.scss +3 -0
  250. package/dist/styles/core/template/placeholders/_nav.scss +15 -0
  251. package/dist/styles/core/template/placeholders/_vertical-nav.scss +18 -0
  252. package/dist/styles/core/template/skins/_bordered.scss +36 -0
  253. package/dist/styles/core/template/skins/_index.scss +1 -0
  254. package/dist/styles/layouts/_classes.scss +3 -0
  255. package/dist/styles/layouts/_dashboard-layout.scss +43 -0
  256. package/dist/styles/layouts/_global.scss +10 -0
  257. package/dist/styles/layouts/_mixins.scss +28 -0
  258. package/dist/styles/layouts/_placeholders.scss +53 -0
  259. package/dist/styles/layouts/_rtl.scss +7 -0
  260. package/dist/styles/layouts/_variables.scss +22 -0
  261. package/dist/styles/layouts/index.css +14 -0
  262. package/dist/styles/layouts/index.scss +2 -0
  263. package/dist/types.d.ts +218 -0
  264. package/dist/utils/apiUrl.d.ts +1 -0
  265. package/dist/utils/apiUrl.js +15 -0
  266. package/dist/utils/apiUrl.mjs +8 -0
  267. package/dist/utils/client.d.ts +9 -0
  268. package/dist/utils/client.js +53 -0
  269. package/dist/utils/client.mjs +39 -0
  270. package/dist/utils/files.d.ts +2 -0
  271. package/dist/utils/files.js +35 -0
  272. package/dist/utils/files.mjs +22 -0
  273. package/dist/utils/formValidation.d.ts +7 -0
  274. package/dist/utils/formValidation.js +20 -0
  275. package/dist/utils/formValidation.mjs +13 -0
  276. package/dist/utils/formatters.d.ts +12 -0
  277. package/dist/utils/formatters.js +84 -0
  278. package/dist/utils/formatters.mjs +56 -0
  279. package/dist/utils/hijriDate.d.ts +58 -0
  280. package/dist/utils/hijriDate.js +168 -0
  281. package/dist/utils/hijriDate.mjs +1951 -0
  282. package/dist/utils/i18n.d.ts +8 -0
  283. package/dist/utils/i18n.js +36 -0
  284. package/dist/utils/i18n.mjs +27 -0
  285. package/dist/utils/index.d.ts +10 -0
  286. package/dist/utils/index.js +115 -0
  287. package/dist/utils/index.mjs +10 -0
  288. package/dist/utils/queryParams.d.ts +4 -0
  289. package/dist/utils/queryParams.js +26 -0
  290. package/dist/utils/queryParams.mjs +18 -0
  291. package/dist/utils/ruleValidator.d.ts +41 -0
  292. package/dist/utils/ruleValidator.js +210 -0
  293. package/dist/utils/ruleValidator.mjs +195 -0
  294. package/dist/utils/toaster.d.ts +12 -0
  295. package/dist/utils/toaster.js +68 -0
  296. package/dist/utils/toaster.mjs +58 -0
  297. package/dist/utils/utils.d.ts +9 -0
  298. package/dist/utils/utils.js +84 -0
  299. package/dist/utils/utils.mjs +67 -0
  300. package/package.json +1 -1
@@ -0,0 +1,1035 @@
1
+ @use 'sass:list';
2
+ @use 'sass:map';
3
+ @use '../base/mixins';
4
+ @use '../../layouts/mixins' as layoutsMixins;
5
+ @use '../../assets/scss/variables/template' as variables;
6
+ @use '../../assets/scss/variables/vuetify';
7
+
8
+ // Autocomplete
9
+ .v-input--density-compact .v-field--variant-plain,
10
+ .v-input--density-compact .v-field--variant-underlined {
11
+ --v-input-control-height: 40px !important;
12
+ }
13
+
14
+ // Body
15
+ // set body font size 15px
16
+ body {
17
+ font-size: 15px !important;
18
+ }
19
+
20
+ // Avatar
21
+ .v-avatar {
22
+ font-weight: 500;
23
+ }
24
+
25
+ // Alert
26
+ // ℹ️ custom icon styling
27
+
28
+ $alert-prepend-icon-font-size: 1.125rem !important;
29
+
30
+ .v-alert {
31
+ font-weight: 500;
32
+
33
+ &:not(.v-alert--prominent) .v-alert__prepend {
34
+ .v-icon {
35
+ block-size: 1.625rem !important;
36
+ font-size: 1.625rem !important;
37
+ inline-size: 1.625rem !important;
38
+ }
39
+ }
40
+
41
+ .v-alert-title {
42
+ margin-block-end: 0.55rem;
43
+ }
44
+
45
+ .v-alert__close {
46
+ .v-btn--icon {
47
+ --v-btn-height: 4px;
48
+
49
+ font-size: 0.5rem;
50
+ margin-block-end: 0.2rem;
51
+
52
+ .v-btn__overlay,
53
+ .v-ripple__container {
54
+ opacity: 0;
55
+ }
56
+ }
57
+ }
58
+
59
+ &:not(.v-alert--prominent) {
60
+ .v-alert__prepend {
61
+ .v-icon {
62
+ padding: 0.275rem;
63
+ border-radius: 0.375rem;
64
+ background-color: rgb(var(--v-theme-surface));
65
+ }
66
+ }
67
+
68
+ &.v-alert--variant-flat,
69
+ &.v-alert--variant-elevated {
70
+ .v-alert__prepend {
71
+ .v-icon {
72
+ background-color: #fff;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ .v-alert.v-alert--density-compact {
80
+ border-radius: 0.25rem;
81
+ }
82
+
83
+ .v-alert.v-alert--density-default {
84
+ border-radius: 0.5rem;
85
+ }
86
+
87
+ @each $color-name in variables.$theme-colors-name {
88
+ .v-alert {
89
+ &:not(.v-alert--prominent) {
90
+ &.bg-#{$color-name},
91
+ &.text-#{$color-name} {
92
+ .v-alert__prepend .v-icon {
93
+ color: rgb(var(--v-theme-#{$color-name})) !important;
94
+ }
95
+ }
96
+ }
97
+
98
+ &.v-alert--variant-outlined,
99
+ &.v-alert--variant-text,
100
+ &.v-alert--variant-plain {
101
+ &:not(.v-alert--prominent) {
102
+ &.text-#{$color-name},
103
+ &.bg-#{$color-name} {
104
+ .v-alert__prepend .v-icon {
105
+ background-color: rgb(var(--v-theme-#{$color-name}));
106
+ color: rgb(var(--v-theme-on-#{$color-name})) !important;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ // Button
115
+ // Above map but opacity values as key and variant as value
116
+ $btn-active-overlay-opacity: (
117
+ 0.08: (
118
+ outlined,
119
+ flat,
120
+ text,
121
+ plain,
122
+ ),
123
+ 0.24: (
124
+ tonal,
125
+ ),
126
+ );
127
+ $btn-hover-overlay-opacity: (
128
+ 0.1: (
129
+ elevated,
130
+ ),
131
+ 0.08: (
132
+ outlined,
133
+ flat,
134
+ text,
135
+ plain,
136
+ ),
137
+ 0.24: (
138
+ tonal,
139
+ ),
140
+ );
141
+
142
+ .v-btn {
143
+ transform: scale(1.001);
144
+
145
+ // ℹ️ This is necessary because as we have darker overlay on hover for elevated variant, button text doesn't get dimmed
146
+ // This style is already applied to `.v-icon`
147
+ .v-btn__content {
148
+ z-index: 0;
149
+ }
150
+
151
+ &:active {
152
+ transform: scale(0.98);
153
+ }
154
+
155
+ // Set icon size to 18px for default button
156
+ .v-icon {
157
+ --v-icon-size-multiplier: 0.799407846;
158
+ }
159
+
160
+ // Add transition on hover
161
+ &:not(.v-btn--loading) .v-btn__overlay {
162
+ transition: opacity 0.15s ease-in-out;
163
+ will-change: opacity;
164
+ }
165
+
166
+ /*
167
+ Loop over $btn-active-overlay-opacity map and add active styles for each variant.
168
+ Group variants with same opacity value.
169
+ */
170
+ @each $opacity, $variants in $btn-active-overlay-opacity {
171
+ $selectors: ();
172
+
173
+ // append each variant to selectors list
174
+ @each $variant in $variants {
175
+ $selectors: list.append($selectors, '&.v-btn--variant-#{$variant}:active > .v-btn__overlay,');
176
+ }
177
+
178
+ #{$selectors} {
179
+ opacity: $opacity;
180
+ }
181
+ }
182
+
183
+ /*
184
+ Loop over $btn-hover-overlay-opacity map and add hover styles for each variant.
185
+ Group variants with same opacity value.
186
+ */
187
+ @each $opacity, $variants in $btn-hover-overlay-opacity {
188
+ $selectors: ();
189
+
190
+ // append each variant to selectors list
191
+ @each $variant in $variants {
192
+ $selectors: list.append($selectors, '&.v-btn--variant-#{$variant}:hover > .v-btn__overlay,');
193
+ }
194
+
195
+ #{$selectors} {
196
+ opacity: $opacity;
197
+ }
198
+ }
199
+
200
+ // Default (elevated) button
201
+ &--variant-elevated,
202
+ &--variant-flat {
203
+ // We want darker background on hover instead of light
204
+ &:not(.v-btn--loading, .v-btn--disabled) .v-btn__overlay {
205
+ background-color: black;
206
+
207
+ // Disable transition because we are getting flash of black color when loading finishes
208
+ transition: none;
209
+ }
210
+ }
211
+
212
+ // Update background color of tonal button
213
+ &.v-btn--variant-tonal .v-btn__underlay {
214
+ opacity: 0.16;
215
+ }
216
+
217
+ // Button border-radius
218
+ &:not(.v-btn--icon).v-btn--size-x-small {
219
+ border-radius: 2px;
220
+ }
221
+
222
+ &:not(.v-btn--icon).v-btn--size-small {
223
+ border-radius: 4px;
224
+ }
225
+
226
+ &:not(.v-btn--icon).v-btn--size-large {
227
+ border-radius: 8px;
228
+ }
229
+
230
+ &:not(.v-btn--icon).v-btn--size-x-large {
231
+ border-radius: 10px;
232
+ }
233
+
234
+ &.bg-primary {
235
+ color: rgb(var(--v-theme-button-on-primary)) !important;
236
+ }
237
+ }
238
+
239
+ // Badge
240
+ .v-badge {
241
+ .v-badge__badge .v-icon {
242
+ font-size: 0.9375rem;
243
+ }
244
+ }
245
+
246
+ // Checkbox
247
+ .v-checkbox {
248
+ .v-label {
249
+ // We adjusted it to vertically align the label
250
+ line-height: 21px;
251
+ }
252
+
253
+ .v-input__details {
254
+ // Remove extra space below the label
255
+ min-block-size: unset !important;
256
+ padding-block-start: 0 !important;
257
+ }
258
+ }
259
+
260
+ // Chip
261
+ .v-chip {
262
+ .v-chip__close {
263
+ font-size: 0.8125rem;
264
+ }
265
+
266
+ .v-icon--start {
267
+ margin-inline-start: 0 !important;
268
+ }
269
+ }
270
+
271
+ // checkbox size and box shadow
272
+ .v-checkbox-btn {
273
+ &.v-selection-control--dirty {
274
+ .v-selection-control__input {
275
+ .v-icon.iconify--custom {
276
+ // ℹ️ Using filter: drop-shadow() instead of box-shadow because box-shadow creates white background for SVG
277
+ // @include mixins.elevation(2);
278
+ filter: drop-shadow(map.get(vuetify.$shadow-key-umbra, 2));
279
+ }
280
+ }
281
+ }
282
+
283
+ /* stylelint-disable-next-line no-descending-specificity */
284
+ .v-selection-control__input {
285
+ /* stylelint-disable-next-line no-descending-specificity */
286
+ .v-icon.iconify--custom {
287
+ block-size: 1.125rem !important;
288
+ font-size: 1.125rem !important;
289
+ inline-size: 1.125rem !important;
290
+ }
291
+ }
292
+ }
293
+
294
+ // Dialog
295
+ .v-dialog {
296
+ // dialog custom close btn
297
+ .v-dialog-close-btn {
298
+ border-radius: 0.375rem;
299
+ background-color: rgb(var(--v-theme-surface)) !important;
300
+ block-size: 2rem;
301
+ inline-size: 2rem;
302
+ inset-block-start: 0;
303
+ inset-inline-end: 0;
304
+ transform: translate(0.5rem, -0.5rem);
305
+
306
+ @include layoutsMixins.rtl {
307
+ transform: translate(-0.5rem, -0.5rem);
308
+ }
309
+
310
+ &:hover {
311
+ background-color: rgb(var(--v-theme-gray-300)) !important;
312
+ }
313
+ }
314
+ }
315
+
316
+ // Expansion panels
317
+ .v-application.v-layout .v-application__wrap .v-expansion-panels {
318
+ // custom style for expansion panels
319
+ &.expansion-panels-width-border {
320
+ border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
321
+ border-radius: 0.375rem;
322
+ }
323
+
324
+ .v-expansion-panel {
325
+ margin-block-start: 0 !important;
326
+
327
+ // expansion panel arrow font size
328
+ .v-expansion-panel-title {
329
+ color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));
330
+ font-weight: 500;
331
+
332
+ .v-expansion-panel-title__icon {
333
+ transition: transform 0.2s ease-in-out;
334
+
335
+ .v-icon {
336
+ font-size: 1.25rem;
337
+ }
338
+ }
339
+ }
340
+
341
+ .v-expansion-panel-title,
342
+ .v-expansion-panel-title--active,
343
+ .v-expansion-panel-title:hover,
344
+ .v-expansion-panel-title:focus,
345
+ .v-expansion-panel-title:focus-visible,
346
+ .v-expansion-panel-title--active:focus,
347
+ .v-expansion-panel-title--active:hover {
348
+ .v-expansion-panel-title__overlay {
349
+ opacity: 0 !important;
350
+ }
351
+ }
352
+
353
+ // Set Elevation when panel open
354
+ &:not(.v-expansion-panels--variant-accordion) {
355
+ &.v-expansion-panel--active {
356
+ .v-expansion-panel__shadow {
357
+ @include mixins.elevation(7);
358
+ }
359
+ }
360
+ }
361
+ }
362
+
363
+ &:not(.no-icon-rotate) {
364
+ .v-expansion-panel {
365
+ .v-expansion-panel-title__icon {
366
+ .v-icon {
367
+ @include layoutsMixins.rtl {
368
+ transform: scaleX(-1);
369
+ }
370
+ }
371
+ }
372
+
373
+ &.v-expansion-panel--active {
374
+ .v-expansion-panel-title__icon {
375
+ transform: rotate(90deg);
376
+
377
+ @include layoutsMixins.rtl {
378
+ transform: rotate(-90deg);
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
384
+
385
+ &:not(.expansion-panels-width-border) {
386
+ .v-expansion-panel {
387
+ &:not(:last-child) {
388
+ margin-block-end: 0.5rem;
389
+ }
390
+
391
+ &:not(:first-child)::after {
392
+ content: none;
393
+ }
394
+
395
+ // ℹ️ we have to use below style of increase the specificity and override the default style
396
+ /* stylelint-disable-next-line no-descending-specificity */
397
+ &:first-child:not(:last-child),
398
+ &:not(:first-child, :last-child),
399
+ &:not(:first-child) {
400
+ border-radius: 0.375rem !important;
401
+ }
402
+ }
403
+ }
404
+ }
405
+
406
+ // Field
407
+ .v-field__input {
408
+ opacity: 1 !important;
409
+ }
410
+
411
+ // Label
412
+ // ℹ️ We need to increase the line height for vertically aligned text
413
+ .v-field {
414
+ line-height: 23px;
415
+ }
416
+
417
+ // List
418
+ .v-list-item {
419
+ --v-hover-opacity: 0.08 !important;
420
+ cursor: pointer;
421
+
422
+ /* stylelint-disable-next-line no-descending-specificity */
423
+ .v-ripple__container {
424
+ display: none;
425
+ }
426
+
427
+ .v-checkbox-btn.v-selection-control--density-compact {
428
+ margin-inline-end: 0.5rem;
429
+ }
430
+
431
+ .v-list-item__overlay {
432
+ transition: none;
433
+ }
434
+
435
+ /* stylelint-disable-next-line no-descending-specificity */
436
+ &.v-list-item--density-comfortable .v-icon {
437
+ font-size: 1.25rem;
438
+ }
439
+
440
+ /* stylelint-disable-next-line no-descending-specificity */
441
+ &.v-list-item--density-compact .v-icon {
442
+ font-size: 1.125rem;
443
+ }
444
+
445
+ // Without this, we get light primary due to the opacity of currentColor (active list item has white color)
446
+ &.v-list-item--active > .v-list-item__overlay {
447
+ opacity: 0 !important;
448
+ }
449
+
450
+ &.v-list-item--active:not(.v-list-group__header) {
451
+ background-color: rgb(var(--v-nav-background));
452
+ color: rgb(var(--v-theme-on-primary));
453
+
454
+ .v-list-item-subtitle {
455
+ color: rgb(var(--v-theme-on-primary));
456
+ }
457
+ }
458
+
459
+ &[tabindex='0']:not(.v-list-item--active) {
460
+ &:hover,
461
+ &:focus-visible {
462
+ color: rgba(var(--v-theme-on-primary));
463
+
464
+ .v-list-item-subtitle {
465
+ color: rgb(var(--v-theme-primary));
466
+ }
467
+ }
468
+ }
469
+
470
+ &.v-list-item--active.v-list-group__header {
471
+ color: rgb(var(--v-theme-primary));
472
+ }
473
+
474
+ &.v-list-item--active {
475
+ .v-list-item__prepend {
476
+ .v-checkbox,
477
+ .v-checkbox-btn {
478
+ .v-selection-control__input > .v-icon {
479
+ rect {
480
+ fill: white;
481
+
482
+ + path {
483
+ stroke: rgb(var(--v-theme-primary));
484
+ }
485
+ }
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+
492
+ // Menu
493
+ // Menu custom style
494
+ .v-menu.v-overlay {
495
+ .v-overlay__content {
496
+ .v-list {
497
+ .v-list-item {
498
+ border-radius: 0.375rem;
499
+ margin-block: 0.25rem;
500
+ margin-inline: 0.5rem;
501
+ min-block-size: 2.375rem;
502
+
503
+ &:first-child {
504
+ margin-block-start: 0;
505
+ }
506
+
507
+ &:last-child {
508
+ margin-block-end: 0;
509
+ }
510
+ }
511
+
512
+ .v-list-item--density-default:not(.v-list-item--nav).v-list-item--one-line {
513
+ padding-block: 0.5rem;
514
+ }
515
+ }
516
+ }
517
+ }
518
+
519
+ // Pagination
520
+ .v-pagination {
521
+ .v-pagination__list .v-pagination__item--is-active {
522
+ .v-btn {
523
+ background-color: rgb(var(--v-theme-primary));
524
+
525
+ .v-btn__underlay {
526
+ opacity: 1 !important;
527
+ }
528
+
529
+ .v-btn__content {
530
+ color: rgb(var(--v-theme-button-on-primary)) !important;
531
+ }
532
+ }
533
+ }
534
+
535
+ // Disable scale animation for button
536
+ .v-pagination__item {
537
+ .v-btn {
538
+ transform: scale(1) !important;
539
+
540
+ // We disabled transition because it looks ugly 🤮
541
+ transition-duration: 0s;
542
+
543
+ &:active {
544
+ transform: scale(1);
545
+ }
546
+ }
547
+ }
548
+
549
+ /* stylelint-disable-next-line no-descending-specificity */
550
+ .v-pagination__next,
551
+ .v-pagination__prev {
552
+ /* stylelint-disable-next-line no-descending-specificity */
553
+ .v-btn--icon .v-icon {
554
+ --v-icon-size-multiplier: 0.889;
555
+ }
556
+ }
557
+ }
558
+
559
+ // Radio
560
+ .v-radio,
561
+ .v-radio-btn {
562
+ .v-selection-control__input {
563
+ .iconify--custom {
564
+ border-radius: 5rem;
565
+ block-size: 1.125rem !important;
566
+ font-size: 1.125rem !important;
567
+ inline-size: 1.125rem !important;
568
+ }
569
+ }
570
+
571
+ &.v-selection-control--dirty {
572
+ .v-selection-control__input {
573
+ .iconify--custom {
574
+ @include mixins.elevation(2);
575
+ }
576
+ }
577
+ }
578
+
579
+ .v-label {
580
+ line-height: 22px;
581
+ }
582
+ }
583
+
584
+ // Radio, Checkbox
585
+ .v-radio,
586
+ .v-checkbox-btn {
587
+ &:not(.v-selection-control--dirty) {
588
+ .v-selection-control__input > svg {
589
+ color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity));
590
+ }
591
+ }
592
+ }
593
+
594
+ // Rating
595
+ .v-rating {
596
+ .v-rating__wrapper {
597
+ .v-btn .v-icon {
598
+ --v-icon-size-multiplier: 1;
599
+ }
600
+
601
+ .v-btn--density-default {
602
+ --v-btn-height: 26px;
603
+ }
604
+
605
+ .v-btn--density-compact {
606
+ --v-btn-height: 30px;
607
+ }
608
+
609
+ .v-btn--density-comfortable {
610
+ --v-btn-height: 32px;
611
+ }
612
+ }
613
+ }
614
+
615
+ // switch
616
+ .v-switch.v-switch--inset {
617
+ .v-switch__track,
618
+ .v-selection-control__wrapper {
619
+ block-size: calc(1.125rem * 1.5);
620
+ inline-size: calc(1.875rem * 1.5);
621
+ }
622
+
623
+ .v-ripple__container {
624
+ opacity: 0;
625
+ }
626
+
627
+ &:not(.v-input--disabled) .v-switch__track {
628
+ border: 1px solid rgba(var(--v-border-color), var(--v-switch-opacity));
629
+ background-color: rgb(var(--v-theme-surface));
630
+ opacity: 1;
631
+ }
632
+
633
+ .v-selection-control__input {
634
+ transform: translateX(-8px);
635
+
636
+ --v-selection-control-size: 1.5rem;
637
+
638
+ .v-switch__thumb {
639
+ background: rgba(var(--v-theme-on-surface), var(--v-switch-opacity));
640
+ block-size: 1rem;
641
+ inline-size: 1rem;
642
+ }
643
+ }
644
+
645
+ .v-selection-control--dirty {
646
+ .v-switch__track {
647
+ border-color: rgba(var(--v-border-color), var(--v-switch-opacity));
648
+ }
649
+
650
+ @each $color-name in variables.$theme-colors-name {
651
+ .text-#{$color-name} {
652
+ .v-switch__track {
653
+ border-color: rgb(var(--v-theme-#{$color-name}));
654
+ background-color: rgb(var(--v-theme-#{$color-name}));
655
+ }
656
+ }
657
+ }
658
+
659
+ .v-selection-control__input {
660
+ transform: translateX(10px);
661
+
662
+ .v-switch__thumb {
663
+ background-color: #fff;
664
+ }
665
+ }
666
+ }
667
+
668
+ // disabled
669
+ &.v-input--disabled {
670
+ &:not(.v-input--dirty) {
671
+ .v-selection-control__input .v-switch__thumb {
672
+ background: rgba(var(--v-theme-on-surface), var(--v-switch-disabled-thumb-opacity));
673
+ }
674
+
675
+ .v-switch__track {
676
+ background-color: rgba(var(--v-theme-on-surface), var(--v-switch-disabled-track-opacity));
677
+ }
678
+ }
679
+
680
+ &.v-input--dirty {
681
+ .v-selection-control--disabled {
682
+ opacity: var(--v-switch-checked-disabled-opacity);
683
+ }
684
+ }
685
+ }
686
+ }
687
+
688
+ .v-switch.v-input,
689
+ .v-checkbox-btn,
690
+ .v-radio-btn,
691
+ .v-radio {
692
+ --v-input-control-height: auto;
693
+
694
+ flex: unset;
695
+ }
696
+
697
+ // Slider
698
+ .v-slider-thumb {
699
+ border: 3px solid rgb(var(--v-theme-surface));
700
+ border-radius: 5rem;
701
+
702
+ @include mixins.elevation(3);
703
+ }
704
+
705
+ .v-slider-thumb__label {
706
+ background: vuetify.$tooltip-background-color !important;
707
+ color: rgb(var(--v-theme-on-primary)) !important;
708
+ font-weight: 500;
709
+ }
710
+
711
+ .v-slider.v-input--horizontal .v-slider-thumb__label::before {
712
+ border-block-start-color: vuetify.$tooltip-background-color !important;
713
+ }
714
+
715
+ .v-slider.v-input--vertical .v-slider-thumb__label::before {
716
+ border-inline-end-color: vuetify.$tooltip-background-color !important;
717
+ }
718
+
719
+ // slider track opacity
720
+ .v-slider-track__background--opacity {
721
+ opacity: 1 !important;
722
+ }
723
+
724
+ // Table
725
+ .v-table {
726
+ --v-table-row-height: 70px;
727
+ --v-table-header-height: 60px !important;
728
+
729
+ color: rgb(var(--v-theme-on-surface)) !important;
730
+
731
+ th {
732
+ color: rgb(var(--v-theme-on-surface)) !important;
733
+ font-weight: 600 !important;
734
+ letter-spacing: 0.0625rem;
735
+ text-transform: uppercase;
736
+
737
+ .v-data-table-header__content {
738
+ display: flex;
739
+ justify-content: space-between;
740
+ }
741
+ }
742
+ }
743
+
744
+ // Tabs
745
+ // v-tab with pill support
746
+ .v-tabs {
747
+ &.v-tabs--vertical {
748
+ --v-tabs-height: 38px !important;
749
+
750
+ &:not(.v-tabs-pill) {
751
+ block-size: 100%;
752
+ border-inline-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
753
+ }
754
+ }
755
+
756
+ &.v-tabs--horizontal:not(.v-tabs-pill) {
757
+ border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
758
+
759
+ .v-tab__slider {
760
+ block-size: 3px;
761
+ }
762
+ }
763
+
764
+ /* stylelint-disable-next-line no-descending-specificity */
765
+ .v-btn {
766
+ font-weight: 400;
767
+ transform: none !important;
768
+
769
+ &.v-btn--stacked {
770
+ /* stylelint-disable-next-line no-descending-specificity */
771
+ .v-icon {
772
+ --v-icon-size-multiplier: 1.1428571429;
773
+ }
774
+ }
775
+
776
+ /* stylelint-disable-next-line no-descending-specificity */
777
+ .v-btn__overlay,
778
+ .v-ripple__container {
779
+ opacity: 0 !important;
780
+ }
781
+
782
+ /* stylelint-disable-next-line no-descending-specificity */
783
+ .v-tab__slider {
784
+ inset-inline-end: 0;
785
+ inset-inline-start: unset;
786
+ }
787
+ }
788
+ }
789
+
790
+ // Tab Pill
791
+ .v-tabs.v-tabs-pill {
792
+ .v-tab--selected {
793
+ @include mixins.elevation(2);
794
+ }
795
+
796
+ &.v-slide-group,
797
+ .v-slide-group__container {
798
+ box-sizing: content-box;
799
+ padding: 1rem;
800
+ margin: -1rem;
801
+ }
802
+
803
+ .v-tab.v-btn {
804
+ &:hover {
805
+ color: rgba(var(--v-theme-primary));
806
+ }
807
+ }
808
+ }
809
+
810
+ // Timeline
811
+ .v-timeline {
812
+ .v-timeline-divider__dot {
813
+ background: none !important;
814
+
815
+ .v-timeline-divider__inner-dot {
816
+ box-shadow: 0 0 0 0.1875rem rgb(var(--v-theme-on-surface-variant));
817
+
818
+ @each $color-name in variables.$theme-colors-name {
819
+ &.bg-#{$color-name} {
820
+ box-shadow: 0 0 0 0.1875rem rgba(var(--v-theme-#{$color-name}), 0.12);
821
+ }
822
+ }
823
+ }
824
+ }
825
+
826
+ // timeline icon only
827
+ &.v-timeline-icon-only {
828
+ .v-timeline-divider__dot {
829
+ .v-timeline-divider__inner-dot {
830
+ background: none;
831
+ box-shadow: none;
832
+
833
+ /* stylelint-disable-next-line no-descending-specificity */
834
+ .v-icon {
835
+ background: rgb(var(--v-theme-background));
836
+ }
837
+ }
838
+ }
839
+ }
840
+
841
+ // we have to override the default bg-color of the timeline dot in the card
842
+ .v-card:not(.v-card--variant-text, .v-card--variant-plain, .v-card--variant-outlined) & {
843
+ &.v-timeline-icon-only {
844
+ .v-timeline-divider__dot {
845
+ .v-timeline-divider__inner-dot {
846
+ /* stylelint-disable-next-line no-descending-specificity */
847
+ .v-icon {
848
+ background: rgb(var(--v-theme-surface));
849
+ }
850
+ }
851
+ }
852
+ }
853
+ }
854
+
855
+ .v-card.v-card--variant-tonal & {
856
+ &.v-timeline-icon-only {
857
+ .v-timeline-divider__dot {
858
+ .v-timeline-divider__inner-dot {
859
+ /* stylelint-disable-next-line no-descending-specificity */
860
+ .v-icon {
861
+ background: none;
862
+ }
863
+ }
864
+ }
865
+ }
866
+ }
867
+ }
868
+ .v-field--variant-outlined.v-field--focused .v-field__outline {
869
+ --v-field-border-width: 1px !important;
870
+ }
871
+ // TextField, Select, AutoComplete, ComboBox, Textarea
872
+ // ℹ️ We added .v-application to increase the specificity of the selector
873
+ .v-application {
874
+ .app-text-field,
875
+ .app-select,
876
+ .app-autocomplete,
877
+ .app-combobox,
878
+ .app-textarea,
879
+ .app-picker-field {
880
+ .v-text-field .v-input__details {
881
+ padding-inline-start: 0;
882
+ }
883
+
884
+ .v-field--variant-outlined.v-field--focused .v-field__outline {
885
+ --v-field-border-width: 1px !important;
886
+ }
887
+
888
+ // Label
889
+ // .v-input {
890
+ // line-height: 22px !important;
891
+ // }
892
+
893
+ // Settings 22px line height causes vertical alignment issues so we need to adjust the input line height
894
+ // .v-field__input {
895
+ // line-height: 21px;
896
+ // }
897
+
898
+ // Density: comfortable
899
+ .v-input--density-comfortable {
900
+ .v-field {
901
+ input,
902
+ .v-select__selection-text {
903
+ font-size: 1.125rem;
904
+ }
905
+ }
906
+ }
907
+
908
+ // Density: default
909
+ .v-input--density-default {
910
+ .v-field {
911
+ input,
912
+ .v-select__selection-text {
913
+ font-size: 1.375rem;
914
+ }
915
+ }
916
+ }
917
+
918
+ // Placeholder transition
919
+ .v-field {
920
+ input,
921
+ .v-field__input {
922
+ &::placeholder {
923
+ transition: transform 0.2s ease-out;
924
+ }
925
+ }
926
+ }
927
+
928
+ .v-field--focused {
929
+ // @include elevation.elevation(1);
930
+ box-shadow: 0 2px 4px rgba(var(--v-shadow-key-umbra-color), 0.12);
931
+ }
932
+ }
933
+
934
+ @mixin style-selectable-component($component-name) {
935
+ .app-#{$component-name} {
936
+ .v-#{$component-name}__selection {
937
+ line-height: 24px;
938
+ margin-block: 0 !important;
939
+ }
940
+
941
+ // Vertical alignment of placeholder & text
942
+ .v-#{$component-name} .v-field .v-field__input > input {
943
+ align-self: center;
944
+ }
945
+
946
+ // Chips
947
+ // .v-#{$component-name}.v-#{$component-name}--chips.v-#{$component-name}--selected {
948
+ .v-#{$component-name}.v-#{$component-name}--chips.v-input--dirty {
949
+ .v-#{$component-name}__selection {
950
+ margin: 0;
951
+ }
952
+
953
+ .v-field__input {
954
+ gap: 3px;
955
+ }
956
+
957
+ &.v-input--density-compact {
958
+ .v-field__input {
959
+ padding-inline-start: 0.5rem;
960
+ }
961
+ }
962
+
963
+ &.v-input--density-comfortable {
964
+ .v-field__input {
965
+ padding-inline-start: 0.75rem;
966
+ }
967
+ }
968
+
969
+ &.v-input--density-default {
970
+ .v-field__input {
971
+ padding-inline-start: 1rem;
972
+ }
973
+ }
974
+ }
975
+ }
976
+ }
977
+
978
+ @include style-selectable-component('autocomplete');
979
+ @include style-selectable-component('select');
980
+ @include style-selectable-component('combobox');
981
+
982
+ .v-input--density-compact {
983
+ .v-field__clearable,
984
+ .v-field__append-inner {
985
+ svg {
986
+ block-size: 0.8em;
987
+ inline-size: 0.8em;
988
+ margin-block-start: 0.15em;
989
+
990
+ // transform: scale(0.75);
991
+ // transform-origin: center;
992
+ }
993
+ }
994
+ }
995
+
996
+ // AutoComplete
997
+ @at-root {
998
+ .app-autocomplete__content {
999
+ .v-list-item--active {
1000
+ .v-autocomplete__mask {
1001
+ background: rgb(var(--v-theme-gray-300));
1002
+ }
1003
+ }
1004
+
1005
+ .v-theme--dark {
1006
+ .v-list-item:not(.v-list-item--active) {
1007
+ .v-autocomplete__mask {
1008
+ background: #3b405c;
1009
+ }
1010
+ }
1011
+ }
1012
+ }
1013
+ }
1014
+ }
1015
+
1016
+ // Style list differently when it's used in a components like select, menu etc
1017
+ .v-menu {
1018
+ .v-list-item {
1019
+ // Adjust padding of list item inside menu
1020
+ padding-block: 8px !important;
1021
+ padding-inline: 16px !important;
1022
+ }
1023
+ }
1024
+
1025
+ .app-inner-list {
1026
+ // Hide checkboxes
1027
+ .v-selection-control {
1028
+ display: none;
1029
+ }
1030
+ }
1031
+
1032
+ // Hide resizer
1033
+ ::-webkit-resizer {
1034
+ background: transparent;
1035
+ }