barbican-reset 3.23.0 → 3.25.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.
- package/components/BrButton.vue +13 -7
- package/components/BrCard.vue +1 -7
- package/components/BrDetails.vue +13 -17
- package/components/BrFormCheckbox.vue +6 -3
- package/components/BrFormRadio.vue +6 -3
- package/components/BrFormRadioGroup.vue +14 -11
- package/components/BrFormRow.vue +4 -3
- package/components/BrWrap.vue +9 -1
- package/package.json +1 -1
- package/scss/_br-wrap.scss +6 -14
- package/scss/_form.scss +0 -5
- package/scss/_variables.scss +1 -1
- package/scss/mixins/_br-card.scss +3 -7
- package/scss/mixins/{input/_radio.scss → _br-form-radio.scss} +7 -3
- package/scss/mixins/_br-form-row.scss +16 -10
- package/scss/mixins/_br-wrap.scss +48 -0
- package/scss/mixins/_input.scss +1 -1
- package/scss/mixins/buttons/custom/_summary.scss +10 -1
- package/scss/mixins/index.scss +1 -0
- package/scss/mixins/table/_details.scss +9 -3
- package/scss/mixins/table/_etickets.scss +6 -2
- package/scss/mixins/table/_generic.scss +6 -2
- package/scss/mixins/table/_gifts.scss +8 -3
- package/scss/mixins/table/_orders.scss +3 -1
- package/scss/mixins/table/_preferences.scss +6 -2
- package/scss/mixins/table/_resale.scss +3 -1
- package/scss/mixins/table/_tickets.scss +7 -3
- package/components/BrButton copy.vue +0 -112
- package/scss/mixins/card/_ticket.scss +0 -11
package/components/BrButton.vue
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<component
|
|
3
|
+
:type="defineType(defineComponent)"
|
|
3
4
|
:class="generateClassnames"
|
|
4
5
|
:aria-busy="defineAriaBusy"
|
|
5
6
|
:aria-live="defineAriaLive"
|
|
6
7
|
@click="emit('click')"
|
|
7
8
|
:is="defineComponent"
|
|
8
|
-
:type="type"
|
|
9
9
|
:to="to"
|
|
10
|
-
ref="button"
|
|
11
|
-
>
|
|
10
|
+
ref="button">
|
|
12
11
|
<template v-if="state == 'default'">
|
|
13
12
|
<slot name="default">default</slot>
|
|
14
13
|
</template>
|
|
@@ -71,10 +70,18 @@ const defineAriaLive = computed(() => {
|
|
|
71
70
|
|
|
72
71
|
const focusButton = () => {
|
|
73
72
|
if (defineComponent.value == 'button' && button) {
|
|
74
|
-
button.value.focus()
|
|
73
|
+
button.value.focus()
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
|
|
77
|
+
const defineType = function (component) {
|
|
78
|
+
if (props.type) return props.type
|
|
79
|
+
|
|
80
|
+
if (component == 'button') return 'button'
|
|
81
|
+
|
|
82
|
+
return null
|
|
83
|
+
}
|
|
84
|
+
|
|
78
85
|
const props = defineProps({
|
|
79
86
|
state: {
|
|
80
87
|
type: String,
|
|
@@ -109,7 +116,6 @@ const props = defineProps({
|
|
|
109
116
|
})
|
|
110
117
|
|
|
111
118
|
defineExpose({
|
|
112
|
-
focusButton
|
|
119
|
+
focusButton,
|
|
113
120
|
})
|
|
114
|
-
|
|
115
|
-
</script>
|
|
121
|
+
</script>
|
package/components/BrCard.vue
CHANGED
|
@@ -35,7 +35,6 @@ const generateClassnames = computed(() => {
|
|
|
35
35
|
if (props.inline) classnames.push('inline')
|
|
36
36
|
if (props.navcard) classnames.push('navcard')
|
|
37
37
|
if (props.navlink) classnames.push('navlink')
|
|
38
|
-
if (props.ticket) classnames.push('ticket')
|
|
39
38
|
if (props.membership) classnames.push('membership')
|
|
40
39
|
if (props.qrcode) classnames.push('qrcode')
|
|
41
40
|
|
|
@@ -52,7 +51,6 @@ const generateClassnames = computed(() => {
|
|
|
52
51
|
!props.navcard &&
|
|
53
52
|
!props.navitem &&
|
|
54
53
|
!props.navlink &&
|
|
55
|
-
!props.ticket &&
|
|
56
54
|
!props.membership &&
|
|
57
55
|
!props.qrcode
|
|
58
56
|
) {
|
|
@@ -79,10 +77,6 @@ const props = defineProps({
|
|
|
79
77
|
type: Boolean,
|
|
80
78
|
default: false,
|
|
81
79
|
},
|
|
82
|
-
ticket: {
|
|
83
|
-
type: Boolean,
|
|
84
|
-
default: false,
|
|
85
|
-
},
|
|
86
80
|
membership: {
|
|
87
81
|
type: Boolean,
|
|
88
82
|
default: false,
|
|
@@ -100,7 +94,7 @@ const props = defineProps({
|
|
|
100
94
|
default: false,
|
|
101
95
|
},
|
|
102
96
|
to: {
|
|
103
|
-
type:
|
|
97
|
+
type: Object || String,
|
|
104
98
|
},
|
|
105
99
|
disabled: {
|
|
106
100
|
type: Boolean,
|
package/components/BrDetails.vue
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="br-details">
|
|
3
3
|
<br-button variant="summary" @click="update">
|
|
4
|
-
<div class="
|
|
5
|
-
<slot name="title">
|
|
6
|
-
<br-card-title>Title goes here</br-card-title>
|
|
7
|
-
</slot>
|
|
4
|
+
<div class="wrap-title">
|
|
5
|
+
<slot name="title">Title goes here</slot>
|
|
8
6
|
</div>
|
|
9
|
-
<span class="
|
|
10
|
-
{{ open ? '–' : '+' }}
|
|
11
|
-
</span>
|
|
7
|
+
<span class="wrap-icon">{{ open ? '–' : '+' }}</span>
|
|
12
8
|
</br-button>
|
|
13
|
-
<div :class="['
|
|
9
|
+
<div :class="['wrap-content', { open }]">
|
|
14
10
|
<slot name="content">Content goes here</slot>
|
|
15
11
|
</div>
|
|
16
12
|
</div>
|
|
@@ -32,28 +28,28 @@ const update = () => emit('update', { open: !props.open })
|
|
|
32
28
|
<style lang="scss" scoped>
|
|
33
29
|
@use '#styles/helpers' as *;
|
|
34
30
|
|
|
35
|
-
.
|
|
36
|
-
text-align: left;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.br-summary-icon {
|
|
31
|
+
.wrap-icon {
|
|
40
32
|
font-size: var(--font-size-h1);
|
|
41
33
|
line-height: 0.6875rem;
|
|
42
34
|
font-weight: normal;
|
|
43
35
|
position: relative;
|
|
44
36
|
padding: 0.375rem;
|
|
45
|
-
width: 2.25rem;
|
|
46
37
|
top: 0.125rem;
|
|
47
38
|
height: 2rem;
|
|
39
|
+
width: 2rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.wrap-title {
|
|
43
|
+
align-self: center;
|
|
48
44
|
}
|
|
49
45
|
|
|
50
|
-
.
|
|
46
|
+
.wrap-content:not(.open) {
|
|
51
47
|
visibility: hidden;
|
|
52
48
|
overflow: hidden;
|
|
53
49
|
height: 0;
|
|
54
50
|
}
|
|
55
51
|
|
|
56
|
-
.
|
|
57
|
-
margin-top: var(--margin-
|
|
52
|
+
.wrap-content.open {
|
|
53
|
+
margin-top: var(--margin-md);
|
|
58
54
|
}
|
|
59
55
|
</style>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="br-form-checkbox">
|
|
3
|
-
<
|
|
3
|
+
<br-form-label
|
|
4
4
|
:class="[{ success }, { error }]"
|
|
5
5
|
:disabled="disabled"
|
|
6
6
|
:id="generateID">
|
|
7
|
-
<
|
|
7
|
+
<br-form-input
|
|
8
8
|
:class="[{ success }, { error }]"
|
|
9
9
|
:disabled="disabled"
|
|
10
10
|
:id="generateID"
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<span class="label-text">
|
|
15
15
|
<slot />
|
|
16
16
|
</span>
|
|
17
|
-
</
|
|
17
|
+
</br-form-label>
|
|
18
18
|
</div>
|
|
19
19
|
</template>
|
|
20
20
|
|
|
@@ -29,6 +29,9 @@ defineOptions({
|
|
|
29
29
|
})
|
|
30
30
|
|
|
31
31
|
const props = defineProps({
|
|
32
|
+
id: {
|
|
33
|
+
type: String,
|
|
34
|
+
},
|
|
32
35
|
disabled: {
|
|
33
36
|
default: false,
|
|
34
37
|
type: Boolean,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="br-form-radio">
|
|
3
|
-
<
|
|
3
|
+
<br-form-label
|
|
4
4
|
:class="[{ success }, { error }]"
|
|
5
5
|
:disabled="disabled"
|
|
6
6
|
:id="generateID">
|
|
7
|
-
<
|
|
7
|
+
<br-form-input
|
|
8
8
|
:class="[{ success }, { error }]"
|
|
9
9
|
:disabled="disabled"
|
|
10
10
|
:id="generateID"
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<span class="label-text">
|
|
15
15
|
<slot />
|
|
16
16
|
</span>
|
|
17
|
-
</
|
|
17
|
+
</br-form-label>
|
|
18
18
|
</div>
|
|
19
19
|
</template>
|
|
20
20
|
|
|
@@ -30,6 +30,9 @@ defineOptions({
|
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
const props = defineProps({
|
|
33
|
+
id: {
|
|
34
|
+
type: String,
|
|
35
|
+
},
|
|
33
36
|
disabled: {
|
|
34
37
|
default: false,
|
|
35
38
|
type: Boolean,
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div role="radiogroup">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
<br-wrap cluster>
|
|
4
|
+
<br-form-radio
|
|
5
|
+
v-for="(option, index) in options"
|
|
6
|
+
:data-test="option['data-test']"
|
|
7
|
+
:key="'radio-option-' + index"
|
|
8
|
+
:disabled="option.disabled"
|
|
9
|
+
:value="option.value"
|
|
10
|
+
v-model="model"
|
|
11
|
+
:name="name">
|
|
12
|
+
<slot v-if="$slots.default" v-bind="option" />
|
|
13
|
+
<template v-else>{{ option.text }}</template>
|
|
14
|
+
</br-form-radio>
|
|
15
|
+
</br-wrap>
|
|
14
16
|
</div>
|
|
15
17
|
</template>
|
|
16
18
|
|
|
17
19
|
<script setup>
|
|
18
20
|
import BrFormRadio from '#components/BrFormRadio.vue'
|
|
21
|
+
import BrWrap from '#components/BrWrap.vue'
|
|
19
22
|
|
|
20
23
|
const model = defineModel()
|
|
21
24
|
|
package/components/BrFormRow.vue
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="generateClasses">
|
|
3
|
-
<
|
|
3
|
+
<br-form-label
|
|
4
4
|
v-if="label"
|
|
5
5
|
:id="generateFor"
|
|
6
6
|
:required="required"
|
|
7
|
-
v-bind="$attrs"
|
|
7
|
+
v-bind="$attrs"
|
|
8
|
+
row>
|
|
8
9
|
{{ label }}
|
|
9
|
-
</
|
|
10
|
+
</br-form-label>
|
|
10
11
|
<div :class="[`content`, { label }, { submit }, { radios }]">
|
|
11
12
|
<slot />
|
|
12
13
|
</div>
|
package/components/BrWrap.vue
CHANGED
|
@@ -18,7 +18,11 @@ const generateComponentClasses = computed(() => {
|
|
|
18
18
|
classnames.push('cluster')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
if (
|
|
21
|
+
if (props.orders) {
|
|
22
|
+
classnames.push('orders')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!props.navcard && !props.cluster && !props.orders) {
|
|
22
26
|
classnames.push('default')
|
|
23
27
|
}
|
|
24
28
|
|
|
@@ -34,5 +38,9 @@ const props = defineProps({
|
|
|
34
38
|
type: Boolean,
|
|
35
39
|
default: false,
|
|
36
40
|
},
|
|
41
|
+
orders: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
default: false,
|
|
44
|
+
},
|
|
37
45
|
})
|
|
38
46
|
</script>
|
package/package.json
CHANGED
package/scss/_br-wrap.scss
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
@use "mixins/breakpoints" as *;
|
|
2
|
+
@use "mixins/br-wrap" as *;
|
|
2
3
|
|
|
3
4
|
.br-wrap.default {
|
|
4
|
-
|
|
5
|
-
margin-right: auto;
|
|
6
|
-
margin-left: auto;
|
|
5
|
+
@include br-wrap--default;
|
|
7
6
|
}
|
|
8
7
|
|
|
9
8
|
.br-wrap.navcard {
|
|
10
|
-
|
|
11
|
-
display: grid;
|
|
12
|
-
|
|
13
|
-
@include medium-up {
|
|
14
|
-
grid-template-columns: repeat(2, 1fr);
|
|
15
|
-
gap: var(--gap-lg);
|
|
16
|
-
}
|
|
9
|
+
@include br-wrap--navcard;
|
|
17
10
|
}
|
|
18
11
|
|
|
19
12
|
.br-wrap.cluster {
|
|
20
|
-
|
|
13
|
+
@include br-wrap--cluster;
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
.br-wrap.
|
|
24
|
-
|
|
25
|
-
vertical-align: middle;
|
|
16
|
+
.br-wrap.orders {
|
|
17
|
+
@include br-wrap--orders;
|
|
26
18
|
}
|
package/scss/_form.scss
CHANGED
package/scss/_variables.scss
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
@use "card/navcard" as *;
|
|
5
5
|
@use "card/navlink" as *;
|
|
6
6
|
@use "card/navitem" as *;
|
|
7
|
-
@use "card/ticket" as *;
|
|
8
7
|
@use "card/membership" as *;
|
|
9
8
|
@use "card/qrcode" as *;
|
|
10
9
|
|
|
@@ -36,10 +35,6 @@
|
|
|
36
35
|
@include br-card--navitem;
|
|
37
36
|
}
|
|
38
37
|
|
|
39
|
-
&.ticket {
|
|
40
|
-
@include br-card--ticket;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
38
|
&.membership {
|
|
44
39
|
@include br-card--membership;
|
|
45
40
|
}
|
|
@@ -133,6 +128,7 @@
|
|
|
133
128
|
}
|
|
134
129
|
|
|
135
130
|
@mixin br-card-text {
|
|
136
|
-
text
|
|
137
|
-
|
|
131
|
+
+.br-card-text {
|
|
132
|
+
margin-top: var(--margin-md);
|
|
133
|
+
}
|
|
138
134
|
}
|
|
@@ -101,9 +101,13 @@
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
@mixin br-form-radio {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
display: inline-flex;
|
|
105
|
+
|
|
106
|
+
/// @TODO: block variant
|
|
107
|
+
|
|
108
|
+
// &:not(:last-child) {
|
|
109
|
+
// margin-bottom: var(--margin-sm);
|
|
110
|
+
// }
|
|
107
111
|
|
|
108
112
|
.br-form-label {
|
|
109
113
|
@include br-form-radio--label;
|
|
@@ -14,30 +14,36 @@
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
@mixin br-form-row {
|
|
17
|
+
& {
|
|
18
|
+
row-gap: var(--gap-md);
|
|
19
|
+
display: grid;
|
|
20
|
+
}
|
|
21
|
+
|
|
17
22
|
&:not(:last-of-type) {
|
|
18
23
|
margin-bottom: var(--margin-md);
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
@include small-up {
|
|
22
27
|
grid-template-columns: 33fr 67fr;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
column-gap: var(--gap-xl);
|
|
29
|
+
align-items: start;
|
|
30
|
+
|
|
31
|
+
>.br-form-label {
|
|
32
|
+
margin-top: var(--margin-lg);
|
|
33
|
+
}
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
>label,
|
|
29
36
|
>.br-form-label {
|
|
30
|
-
|
|
37
|
+
font-weight: bold;
|
|
31
38
|
}
|
|
32
39
|
|
|
33
|
-
.br-form-input[type=
|
|
40
|
+
.br-form-input[type=text],
|
|
41
|
+
.br-form-input[type=email],
|
|
42
|
+
.br-form-input[type=tel],
|
|
43
|
+
.br-form-input[type=date] {
|
|
34
44
|
width: 100%;
|
|
35
45
|
}
|
|
36
46
|
|
|
37
|
-
.content.radios {
|
|
38
|
-
margin: var(--margin-wrap-xs);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
47
|
.content>fieldset {
|
|
42
48
|
margin-top: var(--margin-lg);
|
|
43
49
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
@use "../mixins/breakpoints" as *;
|
|
2
|
+
|
|
3
|
+
@mixin br-wrap--default {
|
|
4
|
+
max-width: var(--width-layout-sm);
|
|
5
|
+
margin-right: auto;
|
|
6
|
+
margin-left: auto;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@mixin br-wrap--navcard {
|
|
10
|
+
gap: var(--gap-md);
|
|
11
|
+
display: grid;
|
|
12
|
+
|
|
13
|
+
@include medium-up {
|
|
14
|
+
grid-template-columns: repeat(2, 1fr);
|
|
15
|
+
gap: var(--gap-lg);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@mixin br-wrap--cluster {
|
|
20
|
+
margin: var(--margin-wrap-xs);
|
|
21
|
+
|
|
22
|
+
>* {
|
|
23
|
+
margin: var(--margin-xs);
|
|
24
|
+
vertical-align: middle;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@mixin br-wrap--orders {
|
|
29
|
+
@include br-wrap--cluster;
|
|
30
|
+
|
|
31
|
+
$margin: calc(var(--margin-xs) * 2);
|
|
32
|
+
|
|
33
|
+
@include medium-down {
|
|
34
|
+
>* {
|
|
35
|
+
width: calc(100% - $margin);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@include medium-up {
|
|
40
|
+
>* {
|
|
41
|
+
width: calc(50% - $margin);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
>*.open {
|
|
45
|
+
width: calc(100% - $margin);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
package/scss/mixins/_input.scss
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
& {
|
|
7
7
|
justify-content: space-between;
|
|
8
8
|
font-weight: inherit;
|
|
9
|
-
align-items:
|
|
9
|
+
align-items: start;
|
|
10
|
+
text-align: left;
|
|
10
11
|
width: 100%;
|
|
11
12
|
}
|
|
12
13
|
|
|
@@ -16,4 +17,12 @@
|
|
|
16
17
|
outline-style: dashed;
|
|
17
18
|
}
|
|
18
19
|
}
|
|
20
|
+
|
|
21
|
+
&:active {
|
|
22
|
+
transform: scale(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&:active .br-summary-icon {
|
|
26
|
+
transform: var(--scale-click);
|
|
27
|
+
}
|
|
19
28
|
}
|
package/scss/mixins/index.scss
CHANGED
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
thead tr {
|
|
17
|
-
border: var(--
|
|
17
|
+
border-color: var(--color-black-25-lighten);
|
|
18
|
+
border-width: var(--border-width-sm);
|
|
19
|
+
border-style: solid;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
tr {
|
|
@@ -30,7 +32,9 @@
|
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
tbody tr {
|
|
33
|
-
border: var(--
|
|
35
|
+
border-color: var(--color-black-25-lighten);
|
|
36
|
+
border-width: var(--border-width-sm);
|
|
37
|
+
border-style: solid;
|
|
34
38
|
|
|
35
39
|
&:not(:last-of-type) {
|
|
36
40
|
margin-bottom: var(--margin-lg);
|
|
@@ -49,7 +53,9 @@
|
|
|
49
53
|
|
|
50
54
|
@include medium-up {
|
|
51
55
|
&:not(:last-of-type) {
|
|
52
|
-
border-right: var(--
|
|
56
|
+
border-right-color: var(--color-black-25-lighten);
|
|
57
|
+
border-right-width: var(--border-width-sm);
|
|
58
|
+
border-right-style: solid;
|
|
53
59
|
}
|
|
54
60
|
|
|
55
61
|
&:last-of-type {
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
thead tr,
|
|
19
19
|
tbody tr.active {
|
|
20
|
-
border: var(--
|
|
20
|
+
border-color: var(--color-black-25-lighten);
|
|
21
|
+
border-width: var(--border-width-sm);
|
|
22
|
+
border-style: solid;
|
|
21
23
|
display: grid;
|
|
22
24
|
|
|
23
25
|
&:not(:last-of-type) {
|
|
@@ -39,7 +41,9 @@
|
|
|
39
41
|
|
|
40
42
|
@include medium-up {
|
|
41
43
|
&:not(:last-of-type) {
|
|
42
|
-
border-right: var(--
|
|
44
|
+
border-right-color: var(--color-black-25-lighten);
|
|
45
|
+
border-right-width: var(--border-width-sm);
|
|
46
|
+
border-right-style: solid;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
&:last-of-type {
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
@use "../../mixins/focus" as *;
|
|
4
4
|
|
|
5
5
|
@mixin table-row($gap: var(--gap-sm)) {
|
|
6
|
-
border-bottom: var(--
|
|
6
|
+
border-bottom-color: var(--color-black-25-lighten);
|
|
7
|
+
border-bottom-width: var(--border-width-sm);
|
|
8
|
+
border-bottom-style: solid;
|
|
7
9
|
padding-bottom: $gap;
|
|
8
10
|
padding-top: $gap;
|
|
9
11
|
}
|
|
@@ -27,7 +29,9 @@
|
|
|
27
29
|
td {
|
|
28
30
|
@include medium-up {
|
|
29
31
|
&:not(:last-of-type) {
|
|
30
|
-
border-right: var(--
|
|
32
|
+
border-right-color: var(--color-black-25-lighten);
|
|
33
|
+
border-right-width: var(--border-width-sm);
|
|
34
|
+
border-right-style: solid;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
&:last-of-type {
|
|
@@ -26,10 +26,13 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
@include x-large-down {
|
|
29
|
+
border-color: var(--color-black-25-lighten);
|
|
29
30
|
border-radius: var(--border-radius-lg);
|
|
30
|
-
border: var(--border-width-sm)
|
|
31
|
-
display: block;
|
|
31
|
+
border-width: var(--border-width-sm);
|
|
32
32
|
padding: var(--padding-lg);
|
|
33
|
+
border-style: solid;
|
|
34
|
+
display: block;
|
|
35
|
+
|
|
33
36
|
|
|
34
37
|
&:not(:last-of-type) {
|
|
35
38
|
margin-bottom: var(--margin-xl);
|
|
@@ -44,8 +47,10 @@
|
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
&:not(:first-of-type):not(:last-of-type) {
|
|
47
|
-
border-top: var(--
|
|
50
|
+
border-top-color: var(--color-black-25-lighten);
|
|
51
|
+
border-top-width: var(--border-width-sm);
|
|
48
52
|
padding-top: var(--padding-sm);
|
|
53
|
+
border-top-style: solid;
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
&:last-of-type {
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
thead tr,
|
|
18
18
|
tbody tr {
|
|
19
|
-
border: var(--
|
|
19
|
+
border-color: var(--color-black-25-lighten);
|
|
20
|
+
border-width: var(--border-width-sm);
|
|
21
|
+
border-style: solid;
|
|
20
22
|
display: grid;
|
|
21
23
|
|
|
22
24
|
&:not(:last-of-type) {
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
tr {
|
|
19
|
-
border: var(--
|
|
19
|
+
border-color: var(--color-black-25-lighten);
|
|
20
|
+
border-width: var(--border-width-sm);
|
|
21
|
+
border-style: solid;
|
|
20
22
|
display: grid;
|
|
21
23
|
|
|
22
24
|
&:not(:last-of-type) {
|
|
@@ -40,7 +42,9 @@
|
|
|
40
42
|
text-align: center;
|
|
41
43
|
|
|
42
44
|
&:not(:last-of-type) {
|
|
43
|
-
border-right: var(--
|
|
45
|
+
border-right-color: var(--color-black-25-lighten);
|
|
46
|
+
border-right-width: var(--border-width-sm);
|
|
47
|
+
border-right-style: solid;
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
&:first-of-type {
|
|
@@ -20,10 +20,12 @@
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
@include small-down {
|
|
23
|
+
border-color: var(--color-black-25-lighten);
|
|
23
24
|
border-radius: var(--border-radius-lg);
|
|
24
|
-
border: var(--border-width-sm)
|
|
25
|
-
display: block;
|
|
25
|
+
border-width: var(--border-width-sm);
|
|
26
26
|
padding: var(--padding-lg);
|
|
27
|
+
border-style: solid;
|
|
28
|
+
display: block;
|
|
27
29
|
|
|
28
30
|
&:first-of-type {
|
|
29
31
|
display: none;
|
|
@@ -43,7 +45,9 @@
|
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
&:not(:first-of-type):not(:last-of-type) {
|
|
46
|
-
border-top: var(--
|
|
48
|
+
border-top-color: var(--color-black-25-lighten);
|
|
49
|
+
border-top-width: var(--border-width-sm);
|
|
50
|
+
border-top-style: solid;
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
&:last-of-type {
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<component
|
|
3
|
-
:class="generateComponentClasses"
|
|
4
|
-
:aria-busy="defineAriaBusy"
|
|
5
|
-
:aria-live="defineAriaLive"
|
|
6
|
-
@click="emit('click')"
|
|
7
|
-
:is="defineComponent"
|
|
8
|
-
:type="type"
|
|
9
|
-
:href="href"
|
|
10
|
-
:to="to">
|
|
11
|
-
<template v-if="state == 'default'">
|
|
12
|
-
<slot name="default">default</slot>
|
|
13
|
-
</template>
|
|
14
|
-
<template v-else-if="state == 'loading'">
|
|
15
|
-
<template v-if="$slots.loading">
|
|
16
|
-
<slot name="loading">loading</slot>
|
|
17
|
-
</template>
|
|
18
|
-
<dot-typing v-else />
|
|
19
|
-
</template>
|
|
20
|
-
<template v-else-if="state == 'loaded'">
|
|
21
|
-
<slot name="loaded">loaded</slot>
|
|
22
|
-
</template>
|
|
23
|
-
<template v-else-if="state == 'error'">
|
|
24
|
-
<slot name="error">error</slot>
|
|
25
|
-
</template>
|
|
26
|
-
</component>
|
|
27
|
-
</template>
|
|
28
|
-
|
|
29
|
-
<script setup>
|
|
30
|
-
import { computed } from 'vue'
|
|
31
|
-
import DotTyping from '#components/BrButton/dot_typing.vue'
|
|
32
|
-
|
|
33
|
-
const emit = defineEmits(['click'])
|
|
34
|
-
|
|
35
|
-
const props = defineProps({
|
|
36
|
-
state: {
|
|
37
|
-
type: String,
|
|
38
|
-
default: 'default',
|
|
39
|
-
},
|
|
40
|
-
variant: {
|
|
41
|
-
type: String,
|
|
42
|
-
default: 'secondary',
|
|
43
|
-
},
|
|
44
|
-
type: {
|
|
45
|
-
type: [String, null],
|
|
46
|
-
},
|
|
47
|
-
to: {
|
|
48
|
-
type: [Object, null],
|
|
49
|
-
},
|
|
50
|
-
href: {
|
|
51
|
-
type: [String, null],
|
|
52
|
-
},
|
|
53
|
-
inline: {
|
|
54
|
-
type: Boolean,
|
|
55
|
-
default: false,
|
|
56
|
-
},
|
|
57
|
-
slim: {
|
|
58
|
-
type: Boolean,
|
|
59
|
-
default: false,
|
|
60
|
-
},
|
|
61
|
-
active: {
|
|
62
|
-
type: Boolean,
|
|
63
|
-
default: false,
|
|
64
|
-
},
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
const generateComponentClasses = computed(() => {
|
|
68
|
-
let classnames = ['btn', 'btn-' + props.variant]
|
|
69
|
-
|
|
70
|
-
if (props.inline) {
|
|
71
|
-
classnames.push('btn-inline')
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (props.slim) {
|
|
75
|
-
classnames.push('btn-slim')
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (props.active) {
|
|
79
|
-
classnames.push('btn-active')
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return classnames
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
const defineComponent = computed(() => {
|
|
86
|
-
if (props.href) {
|
|
87
|
-
return 'a'
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (props.to) {
|
|
91
|
-
return 'router-link'
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return 'button'
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
const defineAriaBusy = computed(() => {
|
|
98
|
-
if (props.to || props.href) {
|
|
99
|
-
return
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return props.state == 'loading' ? 'true' : 'false'
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
const defineAriaLive = computed(() => {
|
|
106
|
-
if (props.to || props.href) {
|
|
107
|
-
return
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return 'polite'
|
|
111
|
-
})
|
|
112
|
-
</script>
|