@dolanske/vui 0.3.4 → 0.4.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 (110) hide show
  1. package/LICENSE +673 -673
  2. package/README.md +49 -40
  3. package/dist/components/Dropdown/DropdownItem.vue.d.ts +1 -0
  4. package/dist/style.css +1 -1
  5. package/dist/vui.js +864 -859
  6. package/package.json +68 -68
  7. package/src/App.vue +198 -175
  8. package/src/components/Accordion/Accordion.vue +91 -91
  9. package/src/components/Accordion/AccordionGroup.vue +43 -43
  10. package/src/components/Accordion/accordion.scss +80 -80
  11. package/src/components/Alert/Alert.vue +53 -53
  12. package/src/components/Alert/alert.scss +80 -80
  13. package/src/components/Avatar/Avatar.vue +50 -50
  14. package/src/components/Avatar/avatar.scss +52 -52
  15. package/src/components/Badge/Badge.vue +21 -21
  16. package/src/components/Badge/badge.scss +89 -89
  17. package/src/components/Breadcrumbs/BreadcrumbItem.vue +26 -26
  18. package/src/components/Breadcrumbs/Breadcrumbs.vue +33 -33
  19. package/src/components/Breadcrumbs/breadcrumbs.scss +30 -30
  20. package/src/components/Button/Button.vue +90 -90
  21. package/src/components/Button/button.scss +176 -176
  22. package/src/components/ButtonGroup/ButtonGroup.vue +25 -25
  23. package/src/components/ButtonGroup/button-group.scss +51 -51
  24. package/src/components/Calendar/Calendar.vue +60 -60
  25. package/src/components/Calendar/calendar.scss +56 -56
  26. package/src/components/Card/Card.vue +48 -48
  27. package/src/components/Card/card.scss +53 -53
  28. package/src/components/Checkbox/Checkbox.vue +52 -52
  29. package/src/components/Checkbox/checkbox.scss +66 -66
  30. package/src/components/CopyClipboard/CopyClipboard.vue +82 -82
  31. package/src/components/CopyClipboard/copy-clipboard.scss +17 -17
  32. package/src/components/Divider/Divider.vue +44 -44
  33. package/src/components/Divider/divider.scss +35 -35
  34. package/src/components/Drawer/Drawer.vue +97 -97
  35. package/src/components/Drawer/drawer.scss +36 -36
  36. package/src/components/Dropdown/Dropdown.vue +111 -111
  37. package/src/components/Dropdown/DropdownItem.vue +32 -29
  38. package/src/components/Dropdown/DropdownTitle.vue +8 -8
  39. package/src/components/Dropdown/dropdown.scss +118 -117
  40. package/src/components/Flex/Flex.vue +110 -106
  41. package/src/components/Grid/Grid.vue +57 -54
  42. package/src/components/Input/Counter.vue +70 -70
  43. package/src/components/Input/Dropzone.vue +65 -65
  44. package/src/components/Input/File.vue +15 -15
  45. package/src/components/Input/Input.vue +121 -121
  46. package/src/components/Input/Password.vue +47 -47
  47. package/src/components/Input/Textarea.vue +76 -76
  48. package/src/components/Input/input.scss +208 -208
  49. package/src/components/Kbd/Kbd.vue +48 -48
  50. package/src/components/Kbd/KbdGroup.vue +31 -31
  51. package/src/components/Kbd/kbd.scss +18 -18
  52. package/src/components/Modal/Confirm.vue +56 -56
  53. package/src/components/Modal/Modal.vue +91 -91
  54. package/src/components/Modal/modal.scss +49 -49
  55. package/src/components/OTP/OTP.vue +133 -133
  56. package/src/components/OTP/OTPItem.vue +37 -37
  57. package/src/components/OTP/otp.scss +83 -83
  58. package/src/components/Pagination/Pagination.vue +74 -74
  59. package/src/components/Pagination/pagination.ts +78 -78
  60. package/src/components/Popout/Popout.vue +42 -42
  61. package/src/components/Popout/popout.scss +8 -8
  62. package/src/components/Progress/Progress.vue +90 -90
  63. package/src/components/Progress/progress.scss +41 -41
  64. package/src/components/Radio/Radio.vue +36 -36
  65. package/src/components/Radio/RadioGroup.vue +40 -40
  66. package/src/components/Radio/radio.scss +59 -59
  67. package/src/components/Select/Select.vue +180 -180
  68. package/src/components/Select/select.scss +44 -44
  69. package/src/components/Sheet/Sheet.vue +92 -92
  70. package/src/components/Sheet/sheet.scss +60 -60
  71. package/src/components/Sidebar/Sidebar.vue +85 -0
  72. package/src/components/Sidebar/sidebar.scss +123 -0
  73. package/src/components/Skeleton/Skeleton.vue +43 -43
  74. package/src/components/Skeleton/skeleton.scss +14 -14
  75. package/src/components/Spinner/Spinner.vue +42 -42
  76. package/src/components/Spinner/spinner.scss +46 -46
  77. package/src/components/Switch/Switch.vue +30 -30
  78. package/src/components/Switch/switch.scss +52 -52
  79. package/src/components/Table/Cell.vue +23 -23
  80. package/src/components/Table/Header.vue +59 -59
  81. package/src/components/Table/Row.vue +9 -9
  82. package/src/components/Table/SelectAll.vue +23 -23
  83. package/src/components/Table/SelectRow.vue +29 -29
  84. package/src/components/Table/Table.vue +66 -66
  85. package/src/components/Table/table.scss +134 -134
  86. package/src/components/Table/table.ts +244 -244
  87. package/src/components/Tabs/Tab.vue +27 -27
  88. package/src/components/Tabs/Tabs.vue +82 -82
  89. package/src/components/Tabs/tabs.scss +79 -79
  90. package/src/components/Toast/Toasts.vue +47 -47
  91. package/src/components/Toast/toast.scss +41 -41
  92. package/src/components/Toast/toast.ts +68 -68
  93. package/src/components/Tooltip/Tooltip.vue +86 -86
  94. package/src/components/Tooltip/tooltip.scss +4 -4
  95. package/src/index.scss +1 -1
  96. package/src/index.ts +119 -119
  97. package/src/internal/Backdrop/Backdrop.vue +22 -22
  98. package/src/internal/Backdrop/backdrop.scss +28 -28
  99. package/src/main.ts +5 -5
  100. package/src/shared/helpers.ts +74 -74
  101. package/src/shared/types.ts +29 -29
  102. package/src/style/animation.scss +21 -21
  103. package/src/style/core.scss +148 -148
  104. package/src/style/fonts.scss +53 -53
  105. package/src/style/layout.scss +136 -136
  106. package/src/style/media-query.scss +29 -29
  107. package/src/style/reset.scss +135 -135
  108. package/src/style/tooltip.scss +128 -128
  109. package/src/style/typography.scss +338 -338
  110. package/src/style/utils.scss +36 -36
@@ -1,33 +1,33 @@
1
- <script setup lang='ts'>
2
- import type { VNode } from 'vue'
3
- import type { BreadcrumbItemProps } from './BreadcrumbItem.vue'
4
- import { Icon } from '@iconify/vue'
5
- import './breadcrumbs.scss'
6
-
7
- interface Props {
8
- separator?: string
9
- }
10
-
11
- const {
12
- separator = 'ph:caret-right',
13
- } = defineProps<Props>()
14
-
15
- const slots = defineSlots<{
16
- default: () => Array<VNode & { props: BreadcrumbItemProps }>
17
- }>()
18
- </script>
19
-
20
- <template>
21
- <ul class="vui-breadcrumbs">
22
- <template v-for="(vnode, index) of slots.default()" :key="vnode.props.label">
23
- <component
24
- :is="vnode"
25
- v-bind="vnode.props"
26
- />
27
- <template v-if="index !== slots.default().length - 1">
28
- <Icon v-if="separator.length > 1 && separator.includes(':')" class="vui-breadcrumb-custom-separator" :icon="separator" />
29
- <span v-else class="vui-breadcrumb-custom-separator">{{ separator }}</span>
30
- </template>
31
- </template>
32
- </ul>
33
- </template>
1
+ <script setup lang='ts'>
2
+ import type { VNode } from 'vue'
3
+ import type { BreadcrumbItemProps } from './BreadcrumbItem.vue'
4
+ import { Icon } from '@iconify/vue'
5
+ import './breadcrumbs.scss'
6
+
7
+ interface Props {
8
+ separator?: string
9
+ }
10
+
11
+ const {
12
+ separator = 'ph:caret-right',
13
+ } = defineProps<Props>()
14
+
15
+ const slots = defineSlots<{
16
+ default: () => Array<VNode & { props: BreadcrumbItemProps }>
17
+ }>()
18
+ </script>
19
+
20
+ <template>
21
+ <ul class="vui-breadcrumbs">
22
+ <template v-for="(vnode, index) of slots.default()" :key="vnode.props.label">
23
+ <component
24
+ :is="vnode"
25
+ v-bind="vnode.props"
26
+ />
27
+ <template v-if="index !== slots.default().length - 1">
28
+ <Icon v-if="separator.length > 1 && separator.includes(':')" class="vui-breadcrumb-custom-separator" :icon="separator" />
29
+ <span v-else class="vui-breadcrumb-custom-separator">{{ separator }}</span>
30
+ </template>
31
+ </template>
32
+ </ul>
33
+ </template>
@@ -1,30 +1,30 @@
1
- .vui-breadcrumbs {
2
- display: flex;
3
- gap: var(--space-m);
4
- align-items: center;
5
-
6
- .vui-breadcrumb-custom-separator {
7
- color: var(--color-text-lighter);
8
- }
9
-
10
- li {
11
- font-size: var(--font-size-s);
12
- color: var(--color-text-lighter);
13
-
14
- .vui-breadcrumb-text-simple {
15
- color: var(--color-text-lighter);
16
- }
17
-
18
- .vui-breadcrumb-link {
19
- color: var(--color-text);
20
- background: transparent;
21
- text-underline-offset: 4px;
22
- text-decoration: none;
23
-
24
- &:hover {
25
- text-decoration: underline;
26
- }
27
- // cursor: pointer;
28
- }
29
- }
30
- }
1
+ .vui-breadcrumbs {
2
+ display: flex;
3
+ gap: var(--space-m);
4
+ align-items: center;
5
+
6
+ .vui-breadcrumb-custom-separator {
7
+ color: var(--color-text-lighter);
8
+ }
9
+
10
+ li {
11
+ font-size: var(--font-size-s);
12
+ color: var(--color-text-lighter);
13
+
14
+ .vui-breadcrumb-text-simple {
15
+ color: var(--color-text-lighter);
16
+ }
17
+
18
+ .vui-breadcrumb-link {
19
+ color: var(--color-text);
20
+ background: transparent;
21
+ text-underline-offset: 4px;
22
+ text-decoration: none;
23
+
24
+ &:hover {
25
+ text-decoration: underline;
26
+ }
27
+ // cursor: pointer;
28
+ }
29
+ }
30
+ }
@@ -1,90 +1,90 @@
1
- <script setup lang="ts">
2
- import type { Sizes } from '../../shared/types'
3
- import { Icon } from '@iconify/vue'
4
- import { computed } from 'vue'
5
- import { Size } from '../../shared/types'
6
- import Spinner from '../Spinner/Spinner.vue'
7
- import './button.scss'
8
-
9
- export type Variants = 'default' | 'danger' | 'success' | 'link' | 'blue' | 'accent'
10
-
11
- interface Props {
12
- // Provide URL to turn button into anchor
13
- // href?: string
14
- // target?: string
15
-
16
- // State props
17
- loading?: boolean
18
- expand?: boolean
19
- square?: boolean
20
- dashed?: boolean
21
- disabled?: boolean
22
- size?: Sizes
23
- /**
24
- * Sets the hover styling property
25
- */
26
- active?: boolean
27
- /**
28
- * No styling applied to the button unless hovered
29
- */
30
- plain?: boolean
31
- variant?: Variants
32
- /**
33
- * The children will be set to an icon and the icon will become a square
34
- */
35
- icon?: string
36
- }
37
-
38
- const {
39
- loading,
40
- disabled,
41
- expand,
42
- size = 'm',
43
- variant = 'default',
44
- icon,
45
- dashed,
46
- } = defineProps<Props>()
47
-
48
- const height = computed(() => {
49
- switch (size) {
50
- case Size.s: return '24px'
51
- case Size.l: return '40px'
52
- case Size.m:
53
- default: return '34px'
54
- }
55
- })
56
-
57
- const padding = computed(() => {
58
- switch (size) {
59
- case Size.s: return '5px'
60
- case Size.l: return '16px'
61
- case Size.m:
62
- default: return '8px'
63
- }
64
- })
65
- </script>
66
-
67
- <template>
68
- <button
69
- class="vui-button"
70
- :class="[{ loading, expand, disabled, plain, active, icon, square, dashed }, `vui-button-variant-${variant}`]"
71
- :disabled
72
- role="button"
73
- :style="{
74
- '--button-height': height,
75
- '--button-padding': padding,
76
- }"
77
- >
78
- <Spinner size="s" />
79
- <div class="vui-button-slot">
80
- <div class="vui-button-slot-start">
81
- <slot name="start" />
82
- </div>
83
- <Icon v-if="icon" :icon="icon" />
84
- <slot v-else />
85
- <div class="vui-button-slot-end">
86
- <slot name="end" />
87
- </div>
88
- </div>
89
- </button>
90
- </template>
1
+ <script setup lang="ts">
2
+ import type { Sizes } from '../../shared/types'
3
+ import { Icon } from '@iconify/vue'
4
+ import { computed } from 'vue'
5
+ import { Size } from '../../shared/types'
6
+ import Spinner from '../Spinner/Spinner.vue'
7
+ import './button.scss'
8
+
9
+ export type Variants = 'default' | 'danger' | 'success' | 'link' | 'blue' | 'accent'
10
+
11
+ interface Props {
12
+ // Provide URL to turn button into anchor
13
+ // href?: string
14
+ // target?: string
15
+
16
+ // State props
17
+ loading?: boolean
18
+ expand?: boolean
19
+ square?: boolean
20
+ dashed?: boolean
21
+ disabled?: boolean
22
+ size?: Sizes
23
+ /**
24
+ * Sets the hover styling property
25
+ */
26
+ active?: boolean
27
+ /**
28
+ * No styling applied to the button unless hovered
29
+ */
30
+ plain?: boolean
31
+ variant?: Variants
32
+ /**
33
+ * The children will be set to an icon and the icon will become a square
34
+ */
35
+ icon?: string
36
+ }
37
+
38
+ const {
39
+ loading,
40
+ disabled,
41
+ expand,
42
+ size = 'm',
43
+ variant = 'default',
44
+ icon,
45
+ dashed,
46
+ } = defineProps<Props>()
47
+
48
+ const height = computed(() => {
49
+ switch (size) {
50
+ case Size.s: return '24px'
51
+ case Size.l: return '40px'
52
+ case Size.m:
53
+ default: return '34px'
54
+ }
55
+ })
56
+
57
+ const padding = computed(() => {
58
+ switch (size) {
59
+ case Size.s: return '5px'
60
+ case Size.l: return '16px'
61
+ case Size.m:
62
+ default: return '8px'
63
+ }
64
+ })
65
+ </script>
66
+
67
+ <template>
68
+ <button
69
+ class="vui-button"
70
+ :class="[{ loading, expand, disabled, plain, active, icon, square, dashed }, `vui-button-variant-${variant}`]"
71
+ :disabled
72
+ role="button"
73
+ :style="{
74
+ '--button-height': height,
75
+ '--button-padding': padding,
76
+ }"
77
+ >
78
+ <Spinner size="s" />
79
+ <div class="vui-button-slot">
80
+ <div class="vui-button-slot-start">
81
+ <slot name="start" />
82
+ </div>
83
+ <Icon v-if="icon" :icon="icon" />
84
+ <slot v-else />
85
+ <div class="vui-button-slot-end">
86
+ <slot name="end" />
87
+ </div>
88
+ </div>
89
+ </button>
90
+ </template>
@@ -1,176 +1,176 @@
1
- .vui-button {
2
- --button-height: 34px;
3
- --button-padding: 8px;
4
-
5
- &.disabled {
6
- pointer-events: none;
7
- color: var(--color-text-lighter) !important;
8
- cursor: not-allowed !important;
9
- filter: saturate(50%) opacity(0.65);
10
-
11
- svg path {
12
- color: var(--color-text-lighter) !important;
13
- }
14
- }
15
-
16
- &.expand {
17
- width: 100%;
18
- }
19
-
20
- &.loading {
21
- .vui-spinner {
22
- opacity: 1;
23
- }
24
-
25
- .vui-button-slot {
26
- opacity: 0;
27
- }
28
- }
29
-
30
- &.icon {
31
- width: var(--button-height);
32
- padding: 0;
33
-
34
- .vui-button-slot {
35
- svg {
36
- width: 18px;
37
- height: 18px;
38
- }
39
- }
40
- }
41
-
42
- &.square {
43
- width: var(--button-height);
44
- padding: 0;
45
- }
46
-
47
- &.dashed {
48
- border-style: dashed;
49
- }
50
-
51
- height: var(--button-height);
52
- display: flex;
53
- align-items: center;
54
- justify-content: center;
55
- border-radius: var(--border-radius-s);
56
- background: transparent;
57
- padding-inline: var(--button-padding);
58
- font-size: var(--font-size-s);
59
- position: relative;
60
- transition: var(--transition);
61
- border: 1px solid transparent;
62
- background-color: transparent;
63
- color: var(--color-text);
64
-
65
- // Default gray
66
-
67
- .vui-button-slot {
68
- display: flex;
69
- place-items: center;
70
- transition: var(--transition);
71
- opacity: 1;
72
- }
73
-
74
- .vui-button-slot-start,
75
- .vui-button-slot-end {
76
- display: flex;
77
- place-items: center;
78
- }
79
-
80
- .vui-button-slot-start {
81
- margin-right: 6px;
82
- }
83
-
84
- .vui-button-slot-end {
85
- margin-left: 6px;
86
- }
87
-
88
- .vui-spinner {
89
- transition: var(--transition);
90
- opacity: 0;
91
- position: absolute;
92
- pointer-events: none;
93
- }
94
-
95
- // Variants
96
- &.vui-button-variant-default {
97
- &:not(.plain) {
98
- color: var(--color-text);
99
- background-color: var(--color-button-gray);
100
- border: 1px solid var(--color-border);
101
- }
102
-
103
- &.active,
104
- &:hover {
105
- background-color: var(--color-button-gray-hover);
106
- }
107
- }
108
-
109
- &.vui-button-variant-danger {
110
- &:not(.plain) {
111
- color: var(--color-text);
112
- background-color: var(--color-bg-red-lowered);
113
- border: 1px solid var(--color-border-red);
114
- }
115
-
116
- &.active,
117
- &:hover {
118
- border: 1px solid var(--color-bg-red-raised);
119
- background-color: var(--color-bg-red-raised);
120
- }
121
- }
122
-
123
- &.vui-button-variant-success {
124
- &:not(.plain) {
125
- color: var(--color-text);
126
- background-color: var(--color-bg-green-lowered);
127
- border: 1px solid var(--color-border-green);
128
- }
129
-
130
- &.active,
131
- &:hover {
132
- border: 1px solid var(--color-bg-green-raised);
133
- background-color: var(--color-bg-green-raised);
134
- }
135
- }
136
-
137
- &.vui-button-variant-blue {
138
- &:not(.plain) {
139
- color: var(--color-text);
140
- background-color: var(--color-bg-blue-lowered);
141
- border: 1px solid var(--color-border-blue);
142
- }
143
-
144
- &.active,
145
- &:hover {
146
- border: 1px solid var(--color-bg-blue-raised);
147
- background-color: var(--color-bg-blue-raised);
148
- }
149
- }
150
-
151
- &.vui-button-variant-accent {
152
- &:not(.plain) {
153
- color: var(--color-text);
154
- background-color: var(--color-bg-accent-lowered);
155
- border: 1px solid var(--color-border-accent);
156
- }
157
-
158
- &.active,
159
- &:hover {
160
- border: 1px solid var(--color-bg-accent-raised);
161
- background-color: var(--color-bg-accent-raised);
162
- }
163
- }
164
-
165
- &.vui-button-variant-link {
166
- color: var(--color-text);
167
- background: transparent;
168
- text-underline-offset: 4px;
169
- cursor: pointer;
170
-
171
- &.active,
172
- &:hover {
173
- text-decoration: underline;
174
- }
175
- }
176
- }
1
+ .vui-button {
2
+ --button-height: 34px;
3
+ --button-padding: 8px;
4
+
5
+ &.disabled {
6
+ pointer-events: none;
7
+ color: var(--color-text-lighter) !important;
8
+ cursor: not-allowed !important;
9
+ filter: saturate(50%) opacity(0.65);
10
+
11
+ svg path {
12
+ color: var(--color-text-lighter) !important;
13
+ }
14
+ }
15
+
16
+ &.expand {
17
+ width: 100%;
18
+ }
19
+
20
+ &.loading {
21
+ .vui-spinner {
22
+ opacity: 1;
23
+ }
24
+
25
+ .vui-button-slot {
26
+ opacity: 0;
27
+ }
28
+ }
29
+
30
+ &.icon {
31
+ width: var(--button-height);
32
+ padding: 0;
33
+
34
+ .vui-button-slot {
35
+ svg {
36
+ width: 18px;
37
+ height: 18px;
38
+ }
39
+ }
40
+ }
41
+
42
+ &.square {
43
+ width: var(--button-height);
44
+ padding: 0;
45
+ }
46
+
47
+ &.dashed {
48
+ border-style: dashed;
49
+ }
50
+
51
+ height: var(--button-height);
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ border-radius: var(--border-radius-s);
56
+ background: transparent;
57
+ padding-inline: var(--button-padding);
58
+ font-size: var(--font-size-s);
59
+ position: relative;
60
+ transition: var(--transition);
61
+ border: 1px solid transparent;
62
+ background-color: transparent;
63
+ color: var(--color-text);
64
+
65
+ // Default gray
66
+
67
+ .vui-button-slot {
68
+ display: flex;
69
+ place-items: center;
70
+ transition: var(--transition);
71
+ opacity: 1;
72
+ }
73
+
74
+ .vui-button-slot-start,
75
+ .vui-button-slot-end {
76
+ display: flex;
77
+ place-items: center;
78
+ }
79
+
80
+ .vui-button-slot-start {
81
+ margin-right: 6px;
82
+ }
83
+
84
+ .vui-button-slot-end {
85
+ margin-left: 6px;
86
+ }
87
+
88
+ .vui-spinner {
89
+ transition: var(--transition);
90
+ opacity: 0;
91
+ position: absolute;
92
+ pointer-events: none;
93
+ }
94
+
95
+ // Variants
96
+ &.vui-button-variant-default {
97
+ &:not(.plain) {
98
+ color: var(--color-text);
99
+ background-color: var(--color-button-gray);
100
+ border: 1px solid var(--color-border);
101
+ }
102
+
103
+ &.active,
104
+ &:hover {
105
+ background-color: var(--color-button-gray-hover);
106
+ }
107
+ }
108
+
109
+ &.vui-button-variant-danger {
110
+ &:not(.plain) {
111
+ color: var(--color-text);
112
+ background-color: var(--color-bg-red-lowered);
113
+ border: 1px solid var(--color-border-red);
114
+ }
115
+
116
+ &.active,
117
+ &:hover {
118
+ border: 1px solid var(--color-bg-red-raised);
119
+ background-color: var(--color-bg-red-raised);
120
+ }
121
+ }
122
+
123
+ &.vui-button-variant-success {
124
+ &:not(.plain) {
125
+ color: var(--color-text);
126
+ background-color: var(--color-bg-green-lowered);
127
+ border: 1px solid var(--color-border-green);
128
+ }
129
+
130
+ &.active,
131
+ &:hover {
132
+ border: 1px solid var(--color-bg-green-raised);
133
+ background-color: var(--color-bg-green-raised);
134
+ }
135
+ }
136
+
137
+ &.vui-button-variant-blue {
138
+ &:not(.plain) {
139
+ color: var(--color-text);
140
+ background-color: var(--color-bg-blue-lowered);
141
+ border: 1px solid var(--color-border-blue);
142
+ }
143
+
144
+ &.active,
145
+ &:hover {
146
+ border: 1px solid var(--color-bg-blue-raised);
147
+ background-color: var(--color-bg-blue-raised);
148
+ }
149
+ }
150
+
151
+ &.vui-button-variant-accent {
152
+ &:not(.plain) {
153
+ color: var(--color-text);
154
+ background-color: var(--color-bg-accent-lowered);
155
+ border: 1px solid var(--color-border-accent);
156
+ }
157
+
158
+ &.active,
159
+ &:hover {
160
+ border: 1px solid var(--color-bg-accent-raised);
161
+ background-color: var(--color-bg-accent-raised);
162
+ }
163
+ }
164
+
165
+ &.vui-button-variant-link {
166
+ color: var(--color-text);
167
+ background: transparent;
168
+ text-underline-offset: 4px;
169
+ cursor: pointer;
170
+
171
+ &.active,
172
+ &:hover {
173
+ text-decoration: underline;
174
+ }
175
+ }
176
+ }