barbican-reset 1.2.6 → 1.3.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 (73) hide show
  1. package/components/alert.vue +28 -49
  2. package/components/container.vue +15 -7
  3. package/components/display_stream.vue +55 -0
  4. package/components/event_summary.vue +1 -1
  5. package/components/fluid_iframe.vue +39 -0
  6. package/components/footer_logos.vue +30 -0
  7. package/components/footer_lower.vue +20 -0
  8. package/components/footer_upper.vue +43 -0
  9. package/components/form_update.vue +2 -3
  10. package/components/help_row.vue +33 -0
  11. package/components/new_carousel.vue +31 -0
  12. package/components/radio_group.vue +27 -0
  13. package/components/related_card.vue +38 -0
  14. package/components/related_row.vue +32 -0
  15. package/components/related_title.vue +1 -4
  16. package/components/type_text.vue +14 -14
  17. package/components/videos_row.vue +41 -0
  18. package/helpers/mixins/_buttons.scss +28 -2
  19. package/icons/.DS_Store +0 -0
  20. package/icons/account/index.js +6 -6
  21. package/icons/account/{MembershipIcon.vue → membership.vue} +0 -0
  22. package/icons/account/{OrdersIcon.vue → orders.vue} +0 -0
  23. package/icons/account/{PaymentIcon.vue → payment.vue} +0 -0
  24. package/icons/account/{PersonalIcon.vue → personal.vue} +0 -0
  25. package/icons/account/{SupportIcon.vue → support.vue} +0 -0
  26. package/icons/account/{VideoIcon.vue → video.vue} +0 -0
  27. package/icons/{arrow_icon.vue → arrow.vue} +0 -0
  28. package/icons/{barbican/index.vue → barbican.vue} +8 -1
  29. package/icons/city_of_london_lockup.vue +30 -0
  30. package/icons/index.js +3 -1
  31. package/icons/password/index.js +2 -2
  32. package/icons/password/{RequestIcon.vue → request.vue} +0 -0
  33. package/icons/password/{ResetIcon.vue → reset.vue} +0 -0
  34. package/icons/power/alleyne.vue +3 -0
  35. package/icons/power/banff.vue +3 -0
  36. package/icons/power/council.vue +13 -0
  37. package/icons/power/index.js +3 -3
  38. package/icons/snippets/{BarbicanIcon.vue → barbican.vue} +0 -0
  39. package/icons/snippets/{ContributorIcon.vue → contributor.vue} +0 -0
  40. package/icons/snippets/index.js +4 -4
  41. package/icons/snippets/{OtherIcon.vue → other.vue} +0 -0
  42. package/icons/snippets/{PinIcon.vue → pin.vue} +0 -0
  43. package/icons/stream/{AirplayIcon.vue → airplay.vue} +0 -0
  44. package/icons/stream/{CastIcon.vue → cast.vue} +0 -0
  45. package/icons/stream/{ChatIcon.vue → chat.vue} +0 -0
  46. package/icons/stream/close.vue +7 -0
  47. package/icons/stream/{CogIcon.vue → cog.vue} +0 -0
  48. package/icons/stream/index.js +7 -7
  49. package/icons/stream/{LiveIcon/index.vue → live.vue} +46 -1
  50. package/icons/stream/{VolumeIcon.vue → volume.vue} +0 -0
  51. package/index.js +23 -3
  52. package/package.json +2 -1
  53. package/scss/_btn.scss +8 -0
  54. package/scss/_radio-group.scss +4 -8
  55. package/scss/card/_account.scss +16 -0
  56. package/scss/card/_related.scss +9 -0
  57. package/scss/card/_video-help.scss +31 -0
  58. package/scss/card/index.scss +3 -0
  59. package/scss/index.scss +9 -3
  60. package/scss/table/_details.scss +66 -0
  61. package/scss/table/_orders.scss +7 -5
  62. package/scss/table/_preferences.scss +73 -0
  63. package/scss/table/_tickets.scss +5 -3
  64. package/scss/table/index.scss +2 -0
  65. package/components/account_card.vue +0 -31
  66. package/icons/barbican/index.scss +0 -5
  67. package/icons/power/AlleyneIcon.vue +0 -16
  68. package/icons/power/BanffIcon.vue +0 -41
  69. package/icons/power/CouncilIcon.vue +0 -56
  70. package/icons/stream/LiveIcon/live_icon.scss +0 -42
  71. package/icons/stream/close_icon.vue +0 -23
  72. package/scss/_radio.scss +0 -4
  73. package/scss/_type-text.scss +0 -9
@@ -5,18 +5,20 @@
5
5
  <div :class="$style.title" v-if="title.length > 0 && !toggle">{{ title }}</div>
6
6
  <slot />
7
7
  </span>
8
- <button v-if="toggle" :class="$style.button" @click="() => $emit('close')">
9
- <close-icon :class="styleIcon" />
10
- </button>
8
+ <b-button v-if="toggle" variant="invisible" :class="styleButton" @click="$emit('close')">
9
+ <close-icon />
10
+ </b-button>
11
11
  </div>
12
12
  </div>
13
13
  </template>
14
14
 
15
15
  <script>
16
+ import { BButton } from 'bootstrap-vue'
16
17
  import { CloseIcon } from 'barbican-reset/icons/stream'
17
18
  export default {
18
19
  name: "Alert",
19
20
  components: {
21
+ BButton,
20
22
  CloseIcon,
21
23
  },
22
24
  props: {
@@ -57,7 +59,6 @@ export default {
57
59
  styleContainer() {
58
60
  let style = this.$style;
59
61
  let output = [style.container];
60
-
61
62
  if (this.center) { output.push(style.center); }
62
63
  if (this.margin) {
63
64
  switch (this.margin) {
@@ -66,35 +67,29 @@ export default {
66
67
  default: output.push(style.margin_sm); break;
67
68
  }
68
69
  }
69
-
70
70
  return output;
71
71
  },
72
72
  styleWrap() {
73
73
  let style = this.$style;
74
74
  let output = [style.wrap];
75
-
76
75
  if (this.error) { output.push(style.error, 'error'); }
77
76
  if (this.success) { output.push(style.success, 'success'); }
78
77
  if (this.inline) { output.push(style.inline); }
79
78
  if (this.toggle) { output.push(style.toggle); }
80
-
81
79
  return output;
82
80
  },
83
81
  styleSpan() {
84
82
  let style = this.$style;
85
83
  let output = [];
86
-
87
84
  if (this.flex) { output.push(style.flex); }
88
-
89
85
  return output;
90
86
  },
91
- styleIcon() {
87
+ styleButton() {
92
88
  let style = this.$style;
93
- let output = [style.icon];
94
-
89
+ let output = [style.button];
95
90
  if (this.error) { output.push(style.error); }
96
- if (this.success) { output.push(style.success); }
97
-
91
+ else if (this.success) { output.push(style.success); }
92
+ else { output.push(style.neutral); }
98
93
  return output;
99
94
  }
100
95
  }
@@ -103,29 +98,21 @@ export default {
103
98
 
104
99
  <style lang="scss" module>
105
100
 
101
+ $neutral-colors: $c-status-neutral, $c-status-neutral-fade;
106
102
  $success-colors: $c-status-success, $c-status-success-fade;
107
103
  $error-colors: $c-status-error, $c-status-error-fade;
108
104
 
109
- @mixin icon(
110
- $color: $c-status-neutral,
111
- $fade: $c-status-neutral-fade) {
112
-
113
- path[data-fill] { fill: $fade; }
114
- path[data-outline],
115
- path[data-cross] { fill: $color; }
105
+ @mixin icon($color, $fade) {
106
+ [data-fill] { fill: $fade; }
107
+ [data-outline],
108
+ [data-cross] { fill: $color; }
116
109
 
117
110
  @include focus {
118
- path[data-fill] { fill: $color; }
119
- path[data-cross] { fill: $fade; }
111
+ [data-fill] { fill: $color; }
112
+ [data-cross] { fill: $fade; }
120
113
  }
121
114
  }
122
115
 
123
- @mixin invisible {
124
- background: transparent;
125
- line-height: 1;
126
- padding: 0;
127
- }
128
-
129
116
  .container {
130
117
  @include media-breakpoint-down(xs) {
131
118
  font-size: $font-size-sm;
@@ -205,26 +192,6 @@ $error-colors: $c-status-error, $c-status-error-fade;
205
192
  }
206
193
  }
207
194
 
208
- .button, .button:focus {
209
- @include invisible;
210
- @include focus {
211
- @include invisible;
212
- }
213
- }
214
-
215
- .icon {
216
- @include icon;
217
- width: 1.375rem;
218
-
219
- &.error {
220
- @include icon($error-colors...);
221
- }
222
-
223
- &.success {
224
- @include icon($success-colors...);
225
- }
226
- }
227
-
228
195
  .title {
229
196
  margin-bottom: 0.25rem;
230
197
  font-weight: 700;
@@ -235,6 +202,18 @@ $error-colors: $c-status-error, $c-status-error-fade;
235
202
  display: flex;
236
203
  }
237
204
 
205
+ .button.neutral {
206
+ @include icon($neutral-colors...);
207
+ }
208
+
209
+ .button.success {
210
+ @include icon($success-colors...);
211
+ }
212
+
213
+ .button.error {
214
+ @include icon($error-colors...);
215
+ }
216
+
238
217
  </style>
239
218
 
240
219
  <style lang="scss" scoped>
@@ -20,6 +20,10 @@ export default {
20
20
  thin: {
21
21
  type: Boolean,
22
22
  default: false
23
+ },
24
+ footer: {
25
+ type: Boolean,
26
+ default: false
23
27
  }
24
28
  },
25
29
  computed: {
@@ -35,6 +39,7 @@ export default {
35
39
  let output = [style.inner];
36
40
  if (this.masthead) { output.push(style.masthead); }
37
41
  if (this.thin) { output.push(style.thin); }
42
+ if (this.footer) { output.push(style.footer); }
38
43
  return output;
39
44
  }
40
45
  }
@@ -49,7 +54,7 @@ export default {
49
54
 
50
55
  &.splash {
51
56
  padding-right: 10%;
52
- padding-left: 10%;
57
+ padding-left: 10%;
53
58
  }
54
59
 
55
60
  &.masthead {
@@ -60,15 +65,18 @@ export default {
60
65
 
61
66
  .inner {
62
67
  max-width: $constrained_content_width--wide;
63
- padding-bottom: 1.5rem;
64
- padding-top: 1.5rem;
65
68
  margin: 0 auto;
66
69
 
67
- @include media-breakpoint-up(sm) {
68
- padding-bottom: 2.5rem;
69
- padding-top: 2.5rem;
70
- }
70
+ &:not(.footer) {
71
+ padding-bottom: 1.5rem;
72
+ padding-top: 1.5rem;
71
73
 
74
+ @include media-breakpoint-up(sm) {
75
+ padding-bottom: 2.5rem;
76
+ padding-top: 2.5rem;
77
+ }
78
+ }
79
+
72
80
  &.thin {
73
81
  max-width: $constrained_content_width--thin;
74
82
  }
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div :class="$style.component">
3
+ <img :class="$style.image" :src="image">
4
+ <div v-if="expired" :class="$style.title">
5
+ <h4>Expired</h4>
6
+ </div>
7
+ </div>
8
+ </template>
9
+
10
+ <script>
11
+ export default {
12
+ name: "DisplayStream",
13
+ props: {
14
+ image: {
15
+ type: String,
16
+ required: true,
17
+ },
18
+ expired: {
19
+ type: Boolean,
20
+ default: false,
21
+ }
22
+ }
23
+ }
24
+ </script>
25
+
26
+ <style lang="scss" module>
27
+
28
+ .component {
29
+ border-radius: $border-radius-lg;
30
+ padding-top: 56.25%;
31
+ position: relative;
32
+ overflow: hidden;
33
+ color: $white;
34
+
35
+ .image {
36
+ position: absolute;
37
+ height: auto;
38
+ width: 100%;
39
+ inset: 0;
40
+ }
41
+
42
+ .title {
43
+ background-color: rgba($c-grey-night, 0.8);
44
+ place-items: center;
45
+ position: absolute;
46
+ display: grid;
47
+ inset: 0;
48
+
49
+ h4 {
50
+ font-size: $h2-font-size;
51
+ }
52
+ }
53
+ }
54
+
55
+ </style>
@@ -12,7 +12,7 @@
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script type="text/javascript">
15
+ <script>
16
16
  export default {
17
17
  name: "EventSummary",
18
18
  props: {
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <div :class="$style.component">
3
+ <iframe
4
+ scrolling="auto"
5
+ allowfullscreen
6
+ frameborder="0"
7
+ height="100%"
8
+ width="100%"
9
+ :src="src" />
10
+ </div>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'FluidIframe',
16
+ props: {
17
+ src: {
18
+ type: String,
19
+ required: true
20
+ }
21
+ }
22
+ };
23
+ </script>
24
+
25
+ <style lang="scss" module>
26
+
27
+ .component {
28
+ border-radius: $border-radius-lg;
29
+ padding-top: 56.25%;
30
+ position: relative;
31
+ overflow: hidden;
32
+ }
33
+
34
+ .component > iframe {
35
+ position: absolute;
36
+ inset: 0;
37
+ }
38
+
39
+ </style>
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <div :class="$style.logos">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'FooterLogos'
10
+ }
11
+ </script>
12
+
13
+ <style lang="scss" module>
14
+
15
+ .logos {
16
+ margin: -1rem;
17
+
18
+ > * {
19
+ margin: 1rem;
20
+ }
21
+
22
+ > svg {
23
+ display: inline-block;
24
+ height: 3rem;
25
+ fill: $white;
26
+ width: auto;
27
+ }
28
+ }
29
+
30
+ </style>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <div :class="$style.lower">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'FooterLower'
10
+ }
11
+ </script>
12
+
13
+ <style lang="scss" module>
14
+
15
+ .lower {
16
+ padding-bottom: 1.875rem;
17
+ padding-top: 1.875rem;
18
+ }
19
+
20
+ </style>
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <div :class="styleUpper">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'FooterUpper',
10
+ props: {
11
+ splash: {
12
+ type: Boolean,
13
+ default: false
14
+ }
15
+ },
16
+ computed: {
17
+ styleUpper() {
18
+ const style = this.$style;
19
+ let output = [style.upper];
20
+ if (this.splash) { output.push(style.splash); }
21
+ return output;
22
+ },
23
+ }
24
+ }
25
+ </script>
26
+
27
+ <style lang="scss" module>
28
+
29
+ .upper {
30
+ padding-top: 3.75rem;
31
+
32
+ @include media-breakpoint-up(md) {
33
+ grid-template-columns: 11rem auto;
34
+ display: grid;
35
+ gap: 1rem;
36
+ }
37
+
38
+ &:not(.splash) {
39
+ padding-bottom: 3.75rem;
40
+ }
41
+ }
42
+
43
+ </style>
@@ -14,12 +14,11 @@
14
14
  <style lang="scss" module>
15
15
 
16
16
  .container {
17
- grid-template-columns: auto 6rem;
18
- column-gap: 0.5rem;
19
17
  display: grid;
18
+ gap: 1rem;
20
19
 
21
20
  @include media-breakpoint-up(sm) {
22
- column-gap: 1rem;
21
+ grid-template-columns: auto 6rem;
23
22
  }
24
23
  }
25
24
 
@@ -0,0 +1,33 @@
1
+ <template>
2
+ <b-card video-help no-body>
3
+ <b-card-header>
4
+ <b-button variant="video-help" v-b-toggle="`help-${id}`">
5
+ {{ title }}
6
+ </b-button>
7
+ </b-card-header>
8
+ <b-collapse :id="`help-${id}`">
9
+ <b-card-body>
10
+ <slot />
11
+ </b-card-body>
12
+ </b-collapse>
13
+ </b-card>
14
+ </template>
15
+
16
+ <script>
17
+ import { BCard, BCardHeader, BCollapse, BCardBody, BButton } from 'bootstrap-vue'
18
+
19
+ export default {
20
+ name: 'HelpRow',
21
+ components: { BCard, BCardHeader, BCollapse, BCardBody, BButton },
22
+ props: {
23
+ id: {
24
+ type: String,
25
+ required: true,
26
+ },
27
+ title: {
28
+ type: String,
29
+ required: true,
30
+ },
31
+ },
32
+ };
33
+ </script>
@@ -0,0 +1,31 @@
1
+ <template>
2
+ <div :class="$style.component">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+
9
+ export default {
10
+ name: "NewCarousel",
11
+ };
12
+ </script>
13
+
14
+ <style lang="scss" module>
15
+
16
+ .component {
17
+ column-gap: 0.75rem;
18
+ display: grid;
19
+
20
+ @include media-breakpoint-up(sm) {
21
+ grid-template-columns: repeat(2, 1fr);
22
+ }
23
+ @include media-breakpoint-up(md) {
24
+ grid-template-columns: repeat(3, 1fr);
25
+ }
26
+ @include media-breakpoint-up(lg) {
27
+ grid-template-columns: repeat(4, 1fr);
28
+ }
29
+ }
30
+
31
+ </style>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <div :class="styleGroup">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script type="text/javascript">
8
+ export default {
9
+ name: 'RadioGroup',
10
+ props: {
11
+ error: {
12
+ type: Boolean
13
+ },
14
+ success: {
15
+ type: Boolean
16
+ }
17
+ },
18
+ computed: {
19
+ styleGroup() {
20
+ let styles = ['radio-group'];
21
+ if (this.error) { styles.push('error'); }
22
+ if (this.success) { styles.push('success'); }
23
+ return styles;
24
+ }
25
+ }
26
+ }
27
+ </script>
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <b-card related no-body>
3
+ <b-img v-if="content.image" :src="content.image" />
4
+ <b-card-body>
5
+ <b-link :href="content.link" target="_blank">
6
+ <b-card-title v-html="content.title" />
7
+ <b-card-sub-title v-if="content.start_date" v-html="handleDate(content.start_date)" />
8
+ <b-card-text v-html="limitLength(content.description)" />
9
+ </b-link>
10
+ </b-card-body>
11
+ </b-card>
12
+ </template>
13
+
14
+ <script>
15
+ import moment from 'moment'
16
+ import { BCard, BImg, BCardBody, BLink, BCardTitle, BCardSubTitle, BCardText } from 'bootstrap-vue'
17
+
18
+ export default {
19
+ name: "RelatedCard",
20
+ props: ['content'],
21
+ components: { BCard, BImg, BCardBody, BLink, BCardTitle, BCardSubTitle, BCardText },
22
+ methods: {
23
+ limitLength(title, limit = 140, output) {
24
+ if (title.length > limit) {
25
+ output = title.slice(0, limit);
26
+ output = output.substr(0, Math.min(output.length, output.lastIndexOf(' ')));
27
+ output += ' ...';
28
+ } else {
29
+ output = title;
30
+ }
31
+ return output;
32
+ },
33
+ handleDate(date) {
34
+ return moment(date).format("MMM Do, h:mma");
35
+ },
36
+ },
37
+ };
38
+ </script>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="component">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'RelatedRow'
10
+ }
11
+ </script>
12
+
13
+ <style lang="scss" scoped>
14
+
15
+ .component {
16
+ margin-right: auto;
17
+ margin-left: auto;
18
+ max-width: 20rem;
19
+
20
+ @include media-breakpoint-up(md) {
21
+ grid-template-columns: repeat(3, 1fr);
22
+ column-gap: 1.25rem;
23
+ max-width: 60rem;
24
+ display: grid;
25
+
26
+ .card {
27
+ margin-bottom: 0;
28
+ }
29
+ }
30
+ }
31
+
32
+ </style>
@@ -2,7 +2,7 @@
2
2
  <div :class="$style.container">
3
3
  <div :class="styleTitle">
4
4
  <div :class="$style.line"></div>
5
- <div :class="$style.text">{{ title }}</div>
5
+ <div :class="$style.text"><slot /></div>
6
6
  <div :class="$style.line"></div>
7
7
  </div>
8
8
  <span v-if="tagline" :class="$style.tagline" v-html="tagline"></span>
@@ -13,9 +13,6 @@
13
13
  export default {
14
14
  name: "RelatedTitle",
15
15
  props: {
16
- title: {
17
- type: String,
18
- },
19
16
  tagline: {
20
17
  type: String,
21
18
  },
@@ -1,25 +1,15 @@
1
1
  <template>
2
- <p ref="checking" class="loading-message" :class="{ slim }">
3
- {{ message }}
2
+ <p ref="checking" :class="$style.component">
3
+ <slot />
4
4
  </p>
5
5
  </template>
6
6
 
7
7
  <script>
8
- import { gsap } from "gsap";
9
- import { TextPlugin } from "gsap/TextPlugin";
8
+ import { gsap } from 'gsap'
9
+ import { TextPlugin } from 'gsap/TextPlugin'
10
10
  gsap.registerPlugin(TextPlugin);
11
11
 
12
12
  export default {
13
- props: {
14
- message: {
15
- type: String,
16
- default: "Loading",
17
- },
18
- slim: {
19
- type: Boolean,
20
- default: false,
21
- },
22
- },
23
13
  methods: {
24
14
  loadingAnim(target) {
25
15
  const message = target.innerText;
@@ -54,3 +44,13 @@ export default {
54
44
  },
55
45
  };
56
46
  </script>
47
+
48
+ <style lang="scss" module>
49
+
50
+ .component {
51
+ font-size: $h4-font-size;
52
+ min-height: 2.25rem;
53
+ text-align: center;
54
+ }
55
+
56
+ </style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <div>
3
+ <h4 :class="$style.title">{{ title }}</h4>
4
+ <div :class="$style.slider">
5
+ <b-button @click="$emit('back')">back</b-button>
6
+ <new-carousel>
7
+ <slot />
8
+ </new-carousel>
9
+ <b-button @click="$emit('next')">next</b-button>
10
+ </div>
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ import { NewCarousel, Alert } from '../index'
16
+ export default {
17
+ name: "VideosRow",
18
+ components: { NewCarousel, Alert },
19
+ props: {
20
+ title: {
21
+ type: String
22
+ }
23
+ }
24
+ }
25
+ </script>
26
+
27
+ <style lang="scss" module>
28
+
29
+ .title {
30
+ border-bottom: 1px solid $c-grey-steel;
31
+ margin-bottom: 1.5rem;
32
+ padding-bottom: 1rem;
33
+ }
34
+
35
+ .slider {
36
+ align-items: center;
37
+ display: flex;
38
+ gap: 1.5rem;
39
+ }
40
+
41
+ </style>