barbican-reset 1.4.0 → 1.4.4

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.
@@ -1,7 +1,10 @@
1
1
  <template>
2
2
  <div :class="styleComponent">
3
- <div v-if="type === 'live'" :class="$style.icon">
4
- <div class="btn btn-secondary">live</div>
3
+ <div v-if="type === 'concert'" :class="$style.icon">
4
+ <div :class="[`btn btn-secondary`, { hero }]">
5
+ <template v-if="hero">Live event</template>
6
+ <live-icon :class="$style.svg" />
7
+ </div>
5
8
  </div>
6
9
  <img :class="$style.image" :src="image">
7
10
  <div v-if="expired" :class="$style.title">
@@ -11,8 +14,10 @@
11
14
  </template>
12
15
 
13
16
  <script>
17
+ import { LiveIcon } from 'barbican-reset/icons/stream'
14
18
  export default {
15
19
  name: "CardDisplay",
20
+ components: { LiveIcon },
16
21
  props: {
17
22
  image: {
18
23
  type: String,
@@ -28,7 +33,7 @@ export default {
28
33
  },
29
34
  type: {
30
35
  type: String,
31
- default: 'live',
36
+ default: 'concert',
32
37
  },
33
38
  },
34
39
  computed: {
@@ -38,12 +43,42 @@ export default {
38
43
  if (this.hero) { output.push(style.hero); }
39
44
  return output;
40
45
  },
46
+ styleButton() {
47
+ const style = this.$style;
48
+ let output = [style.button];
49
+ if (this.hero) { output.push(style.hero); }
50
+ return output;
51
+ }
41
52
  }
42
53
  }
43
54
  </script>
44
55
 
56
+ <style lang="scss" scoped>
57
+
58
+ .btn.btn-secondary {
59
+ &:not(.hero) {
60
+ border-radius: 50%;
61
+ padding: 0.5rem;
62
+ }
63
+
64
+ &.hero {
65
+ align-items: center;
66
+ padding: 0.75rem;
67
+ display: flex;
68
+ gap: 0.5rem;
69
+ }
70
+ }
71
+
72
+ </style>
73
+
45
74
  <style lang="scss" module>
46
75
 
76
+ @import "../helpers/mixins/index.scss";
77
+
78
+ .svg {
79
+ fill: white;
80
+ }
81
+
47
82
  .component {
48
83
  padding-top: 56.25%;
49
84
  position: relative;
@@ -58,18 +93,18 @@ export default {
58
93
  }
59
94
 
60
95
  .image {
96
+ @include inset(0);
61
97
  position: absolute;
62
98
  height: auto;
63
99
  width: 100%;
64
- inset: 0;
65
100
  }
66
101
 
67
102
  .title {
103
+ @include inset(0);
68
104
  background-color: rgba($c-grey-midnight, 0.85);
69
105
  place-items: center;
70
106
  position: absolute;
71
107
  display: grid;
72
- inset: 0;
73
108
  }
74
109
 
75
110
  .component.hero {
@@ -24,6 +24,8 @@ export default {
24
24
 
25
25
  <style lang="scss" module>
26
26
 
27
+ @import "../helpers/mixins/index.scss";
28
+
27
29
  .component {
28
30
  border-radius: $border-radius-lg;
29
31
  padding-top: 56.25%;
@@ -33,7 +35,7 @@ export default {
33
35
 
34
36
  .component > iframe {
35
37
  position: absolute;
36
- inset: 0;
38
+ @include inset(0);
37
39
  }
38
40
 
39
41
  </style>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div :class="$style.container">
3
- <div :class="$style.input"><slot /></div>
4
- <b-button class="btn-update" @click.prevent="$emit('update')">update</b-button>
3
+ <div :class="$style.input" data-test="email"><slot /></div>
4
+ <b-button class="btn-update" @click.prevent="$emit('update')" data-test="update">update</b-button>
5
5
  </div>
6
6
  </template>
7
7
 
@@ -2,27 +2,63 @@
2
2
 
3
3
  <div>
4
4
 
5
- <fluid-iframe v-if="type === 'jwplayer'" :src="url" />
5
+ <fluid-iframe v-if="data.type === 'jwplayer'" :src="data.url" />
6
6
 
7
- <div v-if="type === 'brightcove'" v-html="markup" :class="$style.brightcove"></div>
7
+ <template v-if="data.type === 'brightcove'">
8
8
 
9
- <h2 v-html="title" class="margin-bottom-1"></h2>
9
+ <div v-html="data.markup" :class="$style.brightcove"></div>
10
10
 
11
- <p v-html="lead_description"></p>
11
+ <alert v-if="data.isExpired" error center inline>Event has passed.</alert>
12
12
 
13
- <p v-html="long_description"></p>
13
+ </template>
14
14
 
15
- <p>Until {{ formatDateTime(expires) }}</p>
15
+ <h2 v-html="data.title" class="margin-bottom-1"></h2>
16
+
17
+ <p v-html="data.lead_description"></p>
18
+
19
+ <template v-if="data.long_description">
20
+
21
+ <p v-html="data.long_description"></p>
22
+
23
+ </template>
24
+
25
+ <template v-if="data.expires">
26
+
27
+ <p>Until {{ formatDateTime(data.expires) }}</p>
28
+
29
+ </template>
30
+
31
+ <template v-if="data.programme">
32
+
33
+ <p>Read tonight's <a :href="data.programme" target="_blank">Digital Programme</a></p>
34
+
35
+ </template>
16
36
 
17
37
  </div>
18
38
 
19
39
  </template>
20
40
 
21
41
  <script>
22
- import { FluidIframe } from 'barbican-reset'
42
+ import { FluidIframe, Alert } from 'barbican-reset'
23
43
  export default {
24
- props: ['type','url','markup','title','lead_description','long_description','expires'],
25
- components: { FluidIframe },
44
+ props: {
45
+ data: {
46
+ type: Object
47
+ },
48
+ concert: {
49
+ type: Boolean,
50
+ default: false,
51
+ }
52
+ },
53
+ created() {
54
+ if (this.concert) {
55
+ this.data.expires = this.data.brightcove.expires;
56
+ this.data.markup = this.data.brightcove.markup;
57
+ this.data.script = this.data.brightcove.script;
58
+ this.data.isExpired = this.data.brightcove.isExpired;
59
+ }
60
+ },
61
+ components: { FluidIframe, Alert },
26
62
  methods: {
27
63
  formatDateTime(date) {
28
64
  return this.$moment(date).format("LT ddd D MMM YYYY");
@@ -197,6 +197,16 @@
197
197
  }
198
198
  }
199
199
 
200
+ @mixin btn-remove-gift {
201
+ @include media-breakpoint-down(xl) {
202
+ @include btn-remove;
203
+ width: 100%;
204
+ }
205
+ @include media-breakpoint-up(xl) {
206
+ @include btn-link;
207
+ }
208
+ }
209
+
200
210
  @mixin btn-membership-card {
201
211
  @include button-outline(
202
212
  $color: $white,
@@ -1,5 +1,13 @@
1
1
  // paths more explicit for gulp-sass
2
2
  @import "~bourbon/core/bourbon.scss";
3
+
4
+ @mixin inset($val: 0) {
5
+ bottom: $val;
6
+ right: $val;
7
+ left: $val;
8
+ top: $val;
9
+ }
10
+
3
11
  @import "account/orders.scss";
4
12
  @import "basket.scss";
5
13
  @import "buttons.scss";
@@ -1,106 +1,11 @@
1
1
  <template>
2
- <div class="live-icon__container">
3
- <div class="live-icon__title">Live event</div>
4
- <svg
5
- class="live-icon__svg"
6
- :class="{ animate: animate }"
7
- xmlns="http://www.w3.org/2000/svg"
8
- viewBox="0 0 14 15"
9
- >
10
- <path
11
- class="big-echo"
12
- d="M14,7.5c0-2.8-1.1-5.3-2.9-7.1l-1,1.1c1.5,1.5,2.5,3.7,2.5,6s-1,4.5-2.5,6l1.1,1.1 C12.9,12.8,14,10.3,14,7.5z"
13
- />
14
- <path
15
- class="small-echo"
16
- d="M8.6,7.5C8.6,9,8,10.4,7,11.4l1,1.1c1.3-1.3,2-3,2-5S9.2,3.8,8,2.6l-1.1,1C7.9,4.6,8.6,6,8.6,7.5z"
17
- />
18
- <path
19
- class="echo-ball"
20
- d="M6,7.5c0,1.7-1.3,3-3,3s-3-1.3-3-3s1.3-3,3-3S6,5.8,6,7.5z"
21
- />
22
- </svg>
23
- </div>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
3
+ <path d="M7.76,16.24C6.67,15.16,6,13.66,6,12s0.67-3.16,1.76-4.24l1.42,1.42C8.45,9.9,8,10.9,8,12c0,1.1,0.45,2.1,1.17,2.83 L7.76,16.24z M16.24,16.24C17.33,15.16,18,13.66,18,12s-0.67-3.16-1.76-4.24l-1.42,1.42C15.55,9.9,16,10.9,16,12 c0,1.1-0.45,2.1-1.17,2.83L16.24,16.24z M12,10c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S13.1,10,12,10z M20,12 c0,2.21-0.9,4.21-2.35,5.65l1.42,1.42C20.88,17.26,22,14.76,22,12s-1.12-5.26-2.93-7.07l-1.42,1.42C19.1,7.79,20,9.79,20,12z M6.35,6.35L4.93,4.93C3.12,6.74,2,9.24,2,12s1.12,5.26,2.93,7.07l1.42-1.42C4.9,16.21,4,14.21,4,12S4.9,7.79,6.35,6.35z"/>
4
+ </svg>
24
5
  </template>
25
6
 
26
7
  <script>
27
- import { gsap } from "gsap";
28
8
  export default {
29
- name: "LiveIcon",
30
- props: {
31
- animate: {
32
- type: Boolean,
33
- },
34
- },
35
- methods: {
36
- doAnimate(input) {
37
- if (input) {
38
- let tl = gsap.timeline({ repeat: -1, repeatDelay: 0.5 });
39
- let parent = ".live-icon__svg.animate";
40
- let all = [
41
- `${parent} .echo-ball`,
42
- `${parent} .small-echo`,
43
- `${parent} .big-echo`,
44
- ];
45
- tl.set(all, {
46
- opacity: 0.1,
47
- }).to(all, {
48
- opacity: 1,
49
- stagger: 0.3,
50
- duration: 1,
51
- });
52
- }
53
- },
54
- },
55
- mounted() {
56
- this.doAnimate(this.animate);
57
- },
9
+ name: "LiveIcon"
58
10
  };
59
11
  </script>
60
-
61
- <style lang="scss" scoped>
62
-
63
- .live-icon {
64
- &__container {
65
- background-color: $c-grey-midnight;
66
- border-radius: $border-radius;
67
- font-size: $font-size-sm;
68
- padding: 0.6rem 0.8rem;
69
- border-color: white;
70
- position: absolute;
71
- font-weight: bold;
72
- border: 1px solid;
73
- color: white;
74
- right: 1rem;
75
- top: 1rem;
76
-
77
- @include media-breakpoint-up(sm) {
78
- font-size: $font-size-base;
79
- padding: 0.8rem 1rem;
80
- }
81
-
82
- @include media-breakpoint-up(md) {
83
- right: 2rem;
84
- top: 2rem;
85
- }
86
- }
87
-
88
- &__title {
89
- vertical-align: middle;
90
- display: inline-block;
91
- margin-right: 0.5rem;
92
- }
93
-
94
- &__svg {
95
- vertical-align: middle;
96
- display: inline-block;
97
- height: 1.5rem;
98
- fill: white;
99
-
100
- @include media-breakpoint-up(sm) {
101
- height: 1.75rem;
102
- }
103
- }
104
- }
105
-
106
- </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "barbican-reset",
3
- "version": "1.4.0",
3
+ "version": "1.4.4",
4
4
  "description": "A collection of useful scss imports and js scripts, that provide consistent styling and functionality across barbican projects.",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/scss/_atomic.scss CHANGED
@@ -1,11 +1,11 @@
1
1
 
2
- $margins: "margin-top", "margin-bottom", "min-height";
2
+ $gaps: "margin-top", "margin-bottom", "min-height", "padding-left", "padding-right";
3
3
  $aligns: "left", "center", "right";
4
4
 
5
- @each $margin in $margins {
5
+ @each $gap in $gaps {
6
6
  @for $i from 1 to 5 {
7
- .#{$margin}-#{$i} {
8
- #{$margin}: 1rem * $i;
7
+ .#{$gap}-#{$i} {
8
+ #{$gap}: 1rem * $i;
9
9
  }
10
10
  }
11
11
  }
@@ -54,6 +54,10 @@ $aligns: "left", "center", "right";
54
54
  margin-top: 0.5rem;
55
55
  }
56
56
 
57
+ .margin-top-025 {
58
+ margin-top: 0.25rem;
59
+ }
60
+
57
61
  .overflow-hidden {
58
62
  overflow: hidden;
59
63
  }
package/scss/_btn.scss CHANGED
@@ -52,6 +52,10 @@
52
52
  @include btn-remove-ticket;
53
53
  }
54
54
 
55
+ &.btn-remove-gift {
56
+ @include btn-remove-gift;
57
+ }
58
+
55
59
  &.btn-membership-card {
56
60
  @include btn-membership-card;
57
61
  }
@@ -0,0 +1,8 @@
1
+ .custom-select {
2
+ background-color: $c-grey-alpine;
3
+ border-color: $c-grey-concrete;
4
+ border-radius: $border-radius;
5
+ padding: 0.75rem 0.5rem;
6
+ color: $c-grey-night;
7
+ width: 100%;
8
+ }
@@ -0,0 +1,11 @@
1
+ .promo-form {
2
+ @include basket-row-grid;
3
+ margin-top: 0.5rem;
4
+ }
5
+
6
+ .promo-added {
7
+ justify-content: space-between;
8
+ align-items: center;
9
+ display: flex;
10
+ gap: 1rem;
11
+ }
package/scss/index.scss CHANGED
@@ -13,6 +13,7 @@
13
13
  @import "loading-animation.scss";
14
14
  @import "close-icon.scss";
15
15
  @import "table/index.scss";
16
+ @import "promo.scss";
16
17
 
17
18
  // bootstrap component styles
18
19
  @import "btn.scss";
@@ -20,6 +21,7 @@
20
21
  @import "card-group.scss";
21
22
  @import "checkbox.scss";
22
23
  @import "checkbox-group.scss";
24
+ @import "custom-select.scss";
23
25
  @import "form.scss";
24
26
  @import "list.scss";
25
27
  @import "input.scss";
@@ -28,9 +28,4 @@ table.basket tr {
28
28
  width: 100%;
29
29
  }
30
30
  }
31
- }
32
-
33
- table.basket .promo-form {
34
- @include basket-row-grid;
35
- margin-top: 0.5rem;
36
- }
31
+ }
@@ -0,0 +1,56 @@
1
+ table.gifts {
2
+
3
+ $mq: xl;
4
+
5
+ thead {
6
+ @include media-breakpoint-down($mq) {
7
+ display: none;
8
+ }
9
+ }
10
+
11
+ th {
12
+ font-weight: 700;
13
+ }
14
+
15
+ tr {
16
+ @include media-breakpoint-up($mq) {
17
+ @include table-row;
18
+ grid-template-columns: 3fr 5fr 5fr 2fr 2fr;
19
+ display: grid;
20
+ gap: 0.75rem;
21
+
22
+ label {
23
+ display: none;
24
+ }
25
+ }
26
+
27
+ @include media-breakpoint-down($mq) {
28
+ border-radius: $border-radius-lg;
29
+ border: 1px solid $c-grey-pearl;
30
+ display: block;
31
+ padding: 1rem;
32
+
33
+ &:not(:last-of-type) {
34
+ margin-bottom: 1rem;
35
+ }
36
+
37
+ td {
38
+ justify-content: space-between;
39
+ display: flex;
40
+
41
+ &:not(:last-of-type) {
42
+ padding-bottom: 0.25rem;
43
+ padding-top: 0.25rem;
44
+ }
45
+
46
+ &:not(:first-of-type):not(:last-of-type) {
47
+ border-top: 1px solid $c-grey-pearl;
48
+ }
49
+
50
+ &:last-of-type {
51
+ margin-top: 0.5rem;
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
@@ -66,7 +66,7 @@ table.preferences {
66
66
 
67
67
  input[type=radio] {
68
68
  position: relative;
69
- inset: auto;
69
+ @include inset(auto);
70
70
  }
71
71
  }
72
72
  }
@@ -7,6 +7,7 @@
7
7
  @import "preferences.scss";
8
8
  @import "etickets.scss";
9
9
  @import "membership.scss";
10
+ @import "gifts.scss";
10
11
 
11
12
  table {
12
13
  border-spacing: 0;