barbican-reset 1.3.7 → 1.4.1

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,5 +1,5 @@
1
1
  <template>
2
- <div :class="styleContainer">
2
+ <div :class="styleContainer" :data-test="testData">
3
3
  <div :class="styleWrap">
4
4
  <span :class="styleSpan">
5
5
  <div :class="$style.title" v-if="title.length > 0 && !toggle">{{ title }}</div>
@@ -56,6 +56,13 @@ export default {
56
56
  }
57
57
  },
58
58
  computed: {
59
+ testData() {
60
+ if (this.error) {
61
+ return 'alert-error';
62
+ } else if (this.success) {
63
+ return 'alert-success';
64
+ } return 'alert-neutral';
65
+ },
59
66
  styleContainer() {
60
67
  let style = this.$style;
61
68
  let output = [style.container];
@@ -1,5 +1,11 @@
1
1
  <template>
2
2
  <div :class="styleComponent">
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>
8
+ </div>
3
9
  <img :class="$style.image" :src="image">
4
10
  <div v-if="expired" :class="$style.title">
5
11
  <h4>Expired</h4>
@@ -8,8 +14,10 @@
8
14
  </template>
9
15
 
10
16
  <script>
17
+ import { LiveIcon } from 'barbican-reset/icons/stream'
11
18
  export default {
12
19
  name: "CardDisplay",
20
+ components: { LiveIcon },
13
21
  props: {
14
22
  image: {
15
23
  type: String,
@@ -22,7 +30,11 @@ export default {
22
30
  hero: {
23
31
  type: Boolean,
24
32
  default: false,
25
- }
33
+ },
34
+ type: {
35
+ type: String,
36
+ default: 'concert',
37
+ },
26
38
  },
27
39
  computed: {
28
40
  styleComponent() {
@@ -31,35 +43,74 @@ export default {
31
43
  if (this.hero) { output.push(style.hero); }
32
44
  return output;
33
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
+ }
34
52
  }
35
53
  }
36
54
  </script>
37
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
+
38
74
  <style lang="scss" module>
39
75
 
76
+ .svg {
77
+ fill: white;
78
+ }
79
+
40
80
  .component {
41
81
  padding-top: 56.25%;
42
82
  position: relative;
43
83
  overflow: hidden;
44
84
  color: $white;
85
+ }
45
86
 
46
- .image {
47
- position: absolute;
48
- height: auto;
49
- width: 100%;
50
- inset: 0;
51
- }
87
+ .icon {
88
+ position: absolute;
89
+ right: 1rem;
90
+ top: 1rem;
91
+ }
52
92
 
53
- .title {
54
- background-color: rgba($c-grey-midnight, 0.85);
55
- place-items: center;
56
- position: absolute;
57
- display: grid;
58
- inset: 0;
59
- }
93
+ .image {
94
+ position: absolute;
95
+ height: auto;
96
+ width: 100%;
97
+ inset: 0;
98
+ }
99
+
100
+ .title {
101
+ background-color: rgba($c-grey-midnight, 0.85);
102
+ place-items: center;
103
+ position: absolute;
104
+ display: grid;
105
+ inset: 0;
60
106
  }
61
107
 
62
108
  .component.hero {
109
+ .icon {
110
+ right: 1.5rem;
111
+ top: 1.5rem;
112
+ }
113
+
63
114
  .title {
64
115
  h4 {
65
116
  font-size: $h2-font-size;
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <div>
3
+ <svg :class="$style.logo" role="presentation">
4
+ <slot />
5
+ </svg>
6
+ <div :class="$style.label">{{ label }}</div>
7
+ </div>
8
+ </template>
9
+
10
+ <script>
11
+ export default {
12
+ name: 'PaymentLogo',
13
+ props: {
14
+ label: {
15
+ type: String,
16
+ default: 'visa'
17
+ }
18
+ }
19
+ }
20
+ </script>
21
+
22
+ <style lang="scss" module>
23
+
24
+ .label {
25
+ @include hide-text;
26
+ text-transform: uppercase;
27
+ height: 0;
28
+ width: 0;
29
+ }
30
+
31
+ .logo {
32
+ display: block;
33
+ height: 2.5rem;
34
+ width: 4rem;
35
+ }
36
+
37
+ </style>
@@ -17,15 +17,17 @@ export default {
17
17
  margin-left: auto;
18
18
  max-width: 20rem;
19
19
 
20
+ @include media-breakpoint-down(md) {
21
+ .card + .card {
22
+ margin-top: 1.25rem;
23
+ }
24
+ }
25
+
20
26
  @include media-breakpoint-up(md) {
21
27
  grid-template-columns: repeat(3, 1fr);
22
28
  column-gap: 1.25rem;
23
29
  max-width: 60rem;
24
30
  display: grid;
25
-
26
- .card {
27
- margin-bottom: 0;
28
- }
29
31
  }
30
32
  }
31
33
 
@@ -0,0 +1,78 @@
1
+ <template>
2
+
3
+ <div>
4
+
5
+ <fluid-iframe v-if="data.type === 'jwplayer'" :src="data.url" />
6
+
7
+ <template v-if="data.type === 'brightcove'">
8
+
9
+ <div v-html="data.markup" :class="$style.brightcove"></div>
10
+
11
+ <alert v-if="data.isExpired" error center inline>Event has passed.</alert>
12
+
13
+ </template>
14
+
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>
36
+
37
+ </div>
38
+
39
+ </template>
40
+
41
+ <script>
42
+ import { FluidIframe, Alert } from 'barbican-reset'
43
+ export default {
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 },
62
+ methods: {
63
+ formatDateTime(date) {
64
+ return this.$moment(date).format("LT ddd D MMM YYYY");
65
+ }
66
+ }
67
+ }
68
+ </script>
69
+
70
+ <style lang="scss" module>
71
+
72
+ .brightcove {
73
+ border-radius: $border-radius-lg;
74
+ margin-bottom: 2rem;
75
+ overflow: hidden;
76
+ }
77
+
78
+ </style>
@@ -202,6 +202,7 @@
202
202
  $color: $white,
203
203
  $background: transparent
204
204
  );
205
+
205
206
  @include focus {
206
207
  &.member {
207
208
  color: $c-member;
@@ -226,6 +227,28 @@
226
227
  fill: $white;
227
228
  }
228
229
 
230
+ @mixin btn-carousel {
231
+ @include button-solid($c-grey-night);
232
+ @include single-box($white);
233
+ border-radius: 50%;
234
+ font-size: 0;
235
+ fill: $white;
236
+
237
+ @include media-breakpoint-down(lg) {
238
+ padding: 0.75rem;
239
+ }
240
+
241
+ &:disabled {
242
+ background-color: $c-grey-pearl;
243
+ border-color: $c-grey-pearl;
244
+ opacity: 1;
245
+ }
246
+
247
+ label {
248
+ visibility: hidden;
249
+ }
250
+ }
251
+
229
252
  @mixin btn-invisible {
230
253
  &, &:focus {
231
254
  background: transparent;
@@ -1,5 +1,5 @@
1
1
  // paths more explicit for gulp-sass
2
2
  @import "colors/index.scss";
3
- @import "layout/index.scss";
3
+ @import "layout.scss";
4
4
  @import "breakpoints.scss";
5
5
  @import "typography.scss";
package/icons/arrow.vue CHANGED
@@ -1,9 +1,5 @@
1
1
  <template>
2
- <svg
3
- xmlns="http://www.w3.org/2000/svg"
4
- viewBox="0 0 83.2 80.9"
5
- height="12"
6
- width="12">
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 83.2 80.9" height="12" width="12">
7
3
  <path fill="white" d="M42.8.4L31.9 11.2l23.7 22.2H0V48h55.6l-24 21.6 11.2 11.3 40.4-40.7z"></path>
8
4
  </svg>
9
5
  </template>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
3
+ <path d="M17.51 3.87L15.73 2.1 5.84 12l9.9 9.9 1.77-1.77L9.38 12l8.13-8.13z"/>
4
+ </svg>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'ArrowBack'
10
+ }
11
+ </script>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
3
+ <polygon points="6.23,20.23 8,22 18,12 8,2 6.23,3.77 14.46,12"/>
4
+ </svg>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'ArrowForward'
10
+ }
11
+ </script>
package/icons/index.js CHANGED
@@ -4,6 +4,8 @@ import CityOfLondonLockup from './city_of_london_lockup'
4
4
  import ArrowIcon from './arrow'
5
5
  import BackArrow from './back_arrow'
6
6
  import CartIcon from './cart'
7
+ import ArrowBack from './arrow_back'
8
+ import ArrowForward from './arrow_forward'
7
9
 
8
10
  export {
9
11
  BarbicanLogo,
@@ -11,5 +13,7 @@ export {
11
13
  CityOfLondonLockup,
12
14
  ArrowIcon,
13
15
  BackArrow,
14
- CartIcon
16
+ CartIcon,
17
+ ArrowBack,
18
+ ArrowForward
15
19
  };
@@ -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/index.js CHANGED
@@ -20,6 +20,8 @@ import FooterLogos from './components/footer_logos'
20
20
  import FooterLower from './components/footer_lower'
21
21
  import FluidIframe from './components/fluid_iframe'
22
22
  import HelpRow from './components/help_row'
23
+ import VideoContent from './components/video_content'
24
+ import PaymentLogo from './components/payment_logo'
23
25
 
24
26
  export {
25
27
  Loader,
@@ -43,4 +45,6 @@ export {
43
45
  FluidIframe,
44
46
  HelpRow,
45
47
  CardDisplay,
48
+ VideoContent,
49
+ PaymentLogo
46
50
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "barbican-reset",
3
- "version": "1.3.7",
3
+ "version": "1.4.1",
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
  }
@@ -16,16 +16,12 @@ $aligns: "left", "center", "right";
16
16
  }
17
17
  }
18
18
 
19
- .margin-0 {
20
- margin: 0;
19
+ .border-radius-lg {
20
+ border-radius: $border-radius-lg;
21
21
  }
22
22
 
23
- .margin-top-05 {
24
- margin-top: 0.5rem;
25
- }
26
-
27
- .width-100 {
28
- width: 100%;
23
+ .color-orange {
24
+ color: $c-brand-orange;
29
25
  }
30
26
 
31
27
  .font-weight-700 {
@@ -44,12 +40,24 @@ $aligns: "left", "center", "right";
44
40
  font-size: $h3-font-size;
45
41
  }
46
42
 
47
- .c-brand-orange {
48
- color: $c-brand-orange;
49
- }
50
-
51
43
  .list-style-none {
52
44
  list-style-type: none;
53
45
  padding: 0;
54
46
  margin: 0;
47
+ }
48
+
49
+ .margin-0 {
50
+ margin: 0;
51
+ }
52
+
53
+ .margin-top-05 {
54
+ margin-top: 0.5rem;
55
+ }
56
+
57
+ .overflow-hidden {
58
+ overflow: hidden;
59
+ }
60
+
61
+ .width-100 {
62
+ width: 100%;
55
63
  }
package/scss/_btn.scss CHANGED
@@ -68,6 +68,10 @@
68
68
  @include btn-cta;
69
69
  }
70
70
 
71
+ &.btn-carousel {
72
+ @include btn-carousel;
73
+ }
74
+
71
75
  &.btn-invisible {
72
76
  @include btn-invisible;
73
77
  }
@@ -10,8 +10,8 @@
10
10
  }
11
11
 
12
12
  .card {
13
- margin-bottom: 0;
14
13
  max-width: 20rem;
14
+ margin-top: 0;
15
15
  }
16
16
 
17
17
  .card-title {
@@ -3,6 +3,10 @@
3
3
  border: 1px solid $c-grey-pearl;
4
4
  overflow: hidden;
5
5
 
6
+ + .card {
7
+ margin-top: 0;
8
+ }
9
+
6
10
  img {
7
11
  max-width: 100%;
8
12
  }
@@ -2,7 +2,6 @@
2
2
  $border: 1px solid $c-grey-pearl;
3
3
 
4
4
  .card[video-help] {
5
- margin-bottom: 0;
6
5
  overflow: hidden;
7
6
  border: $border;
8
7
 
@@ -17,6 +16,10 @@ $border: 1px solid $c-grey-pearl;
17
16
  border-bottom: 0;
18
17
  }
19
18
 
19
+ + .card {
20
+ margin-top: 0;
21
+ }
22
+
20
23
  .card-header {
21
24
  border-radius: 0;
22
25
  border-bottom: 0;
@@ -11,11 +11,10 @@
11
11
  .card {
12
12
  border: 1px solid $c-grey-pearl;
13
13
  border-radius: $border-radius-lg;
14
- margin-bottom: 1.25rem;
14
+ }
15
15
 
16
- &:last-child {
17
- margin-bottom: 0;
18
- }
16
+ .card + .card {
17
+ margin-top: 1.25rem;
19
18
  }
20
19
 
21
20
  .card-header {
@@ -28,4 +28,9 @@ table.basket tr {
28
28
  width: 100%;
29
29
  }
30
30
  }
31
- }
31
+ }
32
+
33
+ table.basket .promo-form {
34
+ @include basket-row-grid;
35
+ margin-top: 0.5rem;
36
+ }
@@ -4,6 +4,7 @@ table.details {
4
4
 
5
5
  thead {
6
6
  background-color: $c-grey-alpine;
7
+ margin-bottom: 1rem;
7
8
  font-weight: 700;
8
9
  display: block;
9
10
 
@@ -29,16 +30,10 @@ table.details {
29
30
  }
30
31
 
31
32
  tbody tr {
32
- border-bottom: 1px solid $c-grey-pearl;
33
- border-right: 1px solid $c-grey-pearl;
34
- border-left: 1px solid $c-grey-pearl;
35
-
36
- @include media-breakpoint-down($mq) {
37
- border-top: 1px solid $c-grey-pearl;
33
+ border: 1px solid $c-grey-pearl;
38
34
 
39
- &:not(:last-of-type) {
40
- margin-bottom: 1rem;
41
- }
35
+ &:not(:last-of-type) {
36
+ margin-bottom: 1rem;
42
37
  }
43
38
  }
44
39
 
@@ -13,12 +13,16 @@ table.etickets {
13
13
  }
14
14
  }
15
15
 
16
- tr {
16
+ thead tr, tbody tr.active {
17
17
  border: 1px solid $c-grey-pearl;
18
18
  display: grid;
19
19
 
20
+ &:not(:last-of-type) {
21
+ margin-bottom: 1rem;
22
+ }
23
+
20
24
  @include media-breakpoint-up($mq) {
21
- grid-template-columns: 9rem auto 9rem;
25
+ grid-template-columns: 10rem auto 8rem;
22
26
  }
23
27
 
24
28
  @include media-breakpoint-down($mq) {
@@ -47,8 +51,4 @@ table.etickets {
47
51
  display: none;
48
52
  }
49
53
  }
50
-
51
- tbody > div:not(:last-of-type) {
52
- margin-bottom: 1rem;
53
- }
54
54
  }
@@ -0,0 +1,6 @@
1
+
2
+ table.details.membership tr {
3
+ @include media-breakpoint-up(md) {
4
+ grid-template-columns: auto 10rem 10rem 8rem;
5
+ }
6
+ }
@@ -13,12 +13,16 @@ table.orders {
13
13
  }
14
14
  }
15
15
 
16
- tr {
16
+ thead tr, tbody tr.active {
17
17
  border: 1px solid $c-grey-pearl;
18
18
  display: grid;
19
19
 
20
+ &:not(:last-of-type) {
21
+ margin-bottom: 1rem;
22
+ }
23
+
20
24
  @include media-breakpoint-up($mq) {
21
- grid-template-columns: 9rem 8rem auto 7rem;
25
+ grid-template-columns: 10rem 8rem auto 8rem;
22
26
  }
23
27
 
24
28
  @include media-breakpoint-down($mq) {
@@ -47,8 +51,4 @@ table.orders {
47
51
  display: none;
48
52
  }
49
53
  }
50
-
51
- tbody > div:not(:last-of-type) {
52
- margin-bottom: 1rem;
53
- }
54
54
  }
@@ -6,6 +6,7 @@
6
6
  @import "details.scss";
7
7
  @import "preferences.scss";
8
8
  @import "etickets.scss";
9
+ @import "membership.scss";
9
10
 
10
11
  table {
11
12
  border-spacing: 0;