barbican-reset 1.2.7 → 1.3.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.
Files changed (67) hide show
  1. package/components/alert.vue +28 -49
  2. package/components/container.vue +2 -2
  3. package/components/display_stream.vue +70 -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_upper.vue +6 -2
  8. package/components/help_row.vue +33 -0
  9. package/components/radio_group.vue +27 -0
  10. package/components/related_card.vue +38 -0
  11. package/components/related_row.vue +32 -0
  12. package/components/related_title.vue +1 -4
  13. package/components/type_text.vue +14 -14
  14. package/components/wrap.vue +12 -3
  15. package/helpers/mixins/_buttons.scss +32 -2
  16. package/helpers/mixins/_content.scss +3 -3
  17. package/helpers/variables/layout/index.scss +5 -3
  18. package/icons/.DS_Store +0 -0
  19. package/icons/account/index.js +6 -6
  20. package/icons/account/{MembershipIcon.vue → membership.vue} +0 -0
  21. package/icons/account/{OrdersIcon.vue → orders.vue} +0 -0
  22. package/icons/account/{PaymentIcon.vue → payment.vue} +0 -0
  23. package/icons/account/{PersonalIcon.vue → personal.vue} +0 -0
  24. package/icons/account/{SupportIcon.vue → support.vue} +0 -0
  25. package/icons/account/{VideoIcon.vue → video.vue} +0 -0
  26. package/icons/{arrow_icon.vue → arrow.vue} +0 -0
  27. package/icons/{barbican/index.vue → barbican.vue} +8 -1
  28. package/icons/index.js +1 -1
  29. package/icons/password/index.js +2 -2
  30. package/icons/password/{RequestIcon.vue → request.vue} +0 -0
  31. package/icons/password/{ResetIcon.vue → reset.vue} +0 -0
  32. package/icons/power/{AlleyneIcon.vue → alleyne.vue} +0 -0
  33. package/icons/power/{BanffIcon.vue → banff.vue} +0 -0
  34. package/icons/power/{CouncilIcon.vue → council.vue} +0 -0
  35. package/icons/power/index.js +3 -3
  36. package/icons/snippets/{BarbicanIcon.vue → barbican.vue} +0 -0
  37. package/icons/snippets/{ContributorIcon.vue → contributor.vue} +0 -0
  38. package/icons/snippets/index.js +4 -4
  39. package/icons/snippets/{OtherIcon.vue → other.vue} +0 -0
  40. package/icons/snippets/{PinIcon.vue → pin.vue} +0 -0
  41. package/icons/stream/{AirplayIcon.vue → airplay.vue} +0 -0
  42. package/icons/stream/{CastIcon.vue → cast.vue} +0 -0
  43. package/icons/stream/{ChatIcon.vue → chat.vue} +0 -0
  44. package/icons/stream/close.vue +7 -0
  45. package/icons/stream/{CogIcon.vue → cog.vue} +0 -0
  46. package/icons/stream/index.js +7 -7
  47. package/icons/stream/{LiveIcon/index.vue → live.vue} +46 -1
  48. package/icons/stream/{VolumeIcon.vue → volume.vue} +0 -0
  49. package/index.js +15 -5
  50. package/package.json +2 -1
  51. package/scss/_atomic.scss +4 -0
  52. package/scss/_btn.scss +8 -0
  53. package/scss/_radio-group.scss +4 -8
  54. package/scss/card/_account.scss +16 -0
  55. package/scss/card/_related.scss +25 -0
  56. package/scss/card/_video-help.scss +31 -0
  57. package/scss/card/index.scss +3 -0
  58. package/scss/index.scss +8 -2
  59. package/scss/table/_preferences.scss +73 -0
  60. package/scss/table/index.scss +1 -0
  61. package/components/account_card.vue +0 -31
  62. package/components/carousel.vue +0 -116
  63. package/icons/barbican/index.scss +0 -5
  64. package/icons/stream/LiveIcon/live_icon.scss +0 -42
  65. package/icons/stream/close_icon.vue +0 -23
  66. package/scss/_radio.scss +0 -4
  67. 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>
@@ -64,7 +64,7 @@ export default {
64
64
  }
65
65
 
66
66
  .inner {
67
- max-width: $constrained_content_width--wide;
67
+ max-width: $layout-width-wide;
68
68
  margin: 0 auto;
69
69
 
70
70
  &:not(.footer) {
@@ -78,7 +78,7 @@ export default {
78
78
  }
79
79
 
80
80
  &.thin {
81
- max-width: $constrained_content_width--thin;
81
+ max-width: $layout-width-thin;
82
82
  }
83
83
 
84
84
  &.masthead {
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <div :class="styleComponent">
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
+ hero: {
23
+ type: Boolean,
24
+ default: false,
25
+ }
26
+ },
27
+ computed: {
28
+ styleComponent() {
29
+ const style = this.$style;
30
+ let output = [style.component];
31
+ if (this.hero) { output.push(style.hero); }
32
+ return output;
33
+ },
34
+ }
35
+ }
36
+ </script>
37
+
38
+ <style lang="scss" module>
39
+
40
+ .component {
41
+ padding-top: 56.25%;
42
+ position: relative;
43
+ overflow: hidden;
44
+ color: $white;
45
+
46
+ .image {
47
+ position: absolute;
48
+ height: auto;
49
+ width: 100%;
50
+ inset: 0;
51
+ }
52
+
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
+ }
60
+ }
61
+
62
+ .component.hero {
63
+ .title {
64
+ h4 {
65
+ font-size: $h2-font-size;
66
+ }
67
+ }
68
+ }
69
+
70
+ </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>
@@ -28,8 +28,12 @@ export default {
28
28
 
29
29
  .upper {
30
30
  padding-top: 3.75rem;
31
- display: flex;
32
- gap: 3.75rem;
31
+
32
+ @include media-breakpoint-up(md) {
33
+ grid-template-columns: 11rem auto;
34
+ display: grid;
35
+ gap: 1rem;
36
+ }
33
37
 
34
38
  &:not(.splash) {
35
39
  padding-bottom: 3.75rem;
@@ -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,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>
@@ -14,6 +14,10 @@ export default {
14
14
  thin: {
15
15
  type: Boolean,
16
16
  default: false,
17
+ },
18
+ videos: {
19
+ type: Boolean,
20
+ default: false,
17
21
  }
18
22
  },
19
23
  computed: {
@@ -22,6 +26,7 @@ export default {
22
26
  let output = [style.container];
23
27
  if (this.title) { output.push(style.title); }
24
28
  if (this.thin) { output.push(style.thin); }
29
+ if (this.videos) { output.push(style.videos); }
25
30
  return output;
26
31
  }
27
32
  }
@@ -31,16 +36,20 @@ export default {
31
36
  <style lang="scss" module>
32
37
 
33
38
  .container {
34
- max-width: $constrained_content_width--wide;
39
+ max-width: $layout-width-wide;
35
40
  margin-right: auto;
36
41
  margin-left: auto;
37
42
 
38
43
  &.title {
39
- @include narrow-width;
44
+ max-width: $layout-width-title;
45
+ }
46
+
47
+ &.videos {
48
+ max-width: $layout-width-videos;
40
49
  }
41
50
 
42
51
  &.thin {
43
- max-width: $constrained_content_width--thin;
52
+ max-width: $layout-width-thin;
44
53
  }
45
54
  }
46
55
 
@@ -49,6 +49,10 @@
49
49
  background-color: $background;
50
50
  color: $color;
51
51
  }
52
+
53
+ &.hide {
54
+ visibility: hidden;
55
+ }
52
56
  }
53
57
 
54
58
  @mixin button-outline(
@@ -148,17 +152,29 @@
148
152
  }
149
153
  }
150
154
 
155
+ @mixin btn-video-help {
156
+ @include button-link(
157
+ $padding: 1.25rem,
158
+ $background: $c-grey-alpine) {
159
+ background-color: $c-grey-steel;
160
+ color: $white;
161
+ }
162
+ font-weight: 700;
163
+ text-align: left;
164
+ width: 100%;
165
+ }
166
+
151
167
  @mixin btn-exit {
152
168
  @include button-link {
153
169
  @include single-box($c-grey-night);
154
170
  background-color: $white;
155
171
  border-radius: 50%;
156
172
 
157
- path.outline, path.cross {
173
+ [data-outline], [data-cross] {
158
174
  fill: $white;
159
175
  }
160
176
 
161
- path.fill {
177
+ [data-fill] {
162
178
  fill: $c-grey-night;
163
179
  }
164
180
  }
@@ -188,6 +204,20 @@
188
204
  );
189
205
  }
190
206
 
207
+ @mixin btn-invisible {
208
+ &, &:focus {
209
+ background: transparent;
210
+ line-height: 1;
211
+ padding: 0;
212
+
213
+ @include focus {
214
+ background: transparent;
215
+ line-height: 1;
216
+ padding: 0;
217
+ }
218
+ }
219
+ }
220
+
191
221
  @mixin btn-expand {
192
222
  display: block;
193
223
  }
@@ -2,13 +2,13 @@
2
2
  @mixin content_masthead {
3
3
  background-color: white;
4
4
  box-shadow: 0 5px 5px rgba(black, 0.1);
5
- padding: 0 $constrained_grid_padding;
5
+ padding: 0 $layout-padding;
6
6
  // Required to ensure the box-shadow is visible when div.content-main-content uses a background-color.
7
7
  position: relative;
8
8
  }
9
9
 
10
10
  @mixin content_masthead__inner {
11
- max-width: $constrained_content_width--wide;
11
+ max-width: $layout-width-wide;
12
12
  padding: $space--large * 2 0;
13
13
  margin: 0 auto;
14
14
 
@@ -23,7 +23,7 @@
23
23
  }
24
24
 
25
25
  @mixin content-main-content__inner {
26
- max-width: $constrained_content_width--wide;
26
+ max-width: $layout-width-wide;
27
27
  padding: 1.5rem 0;
28
28
  margin: 0 auto;
29
29
 
@@ -1,7 +1,9 @@
1
1
  /// Constrained content
2
- $constrained_grid_padding: 5%;
3
- $constrained_content_width--thin: 50rem;
4
- $constrained_content_width--wide: 75rem;
2
+ $layout-padding: 5%;
3
+ $layout-width-title: 20rem;
4
+ $layout-width-thin: 50rem;
5
+ $layout-width-videos: 60rem;
6
+ $layout-width-wide: 75rem;
5
7
 
6
8
  $space: 0.625rem;
7
9
  // Default large amount of space.
Binary file
@@ -1,9 +1,9 @@
1
- import PersonalIcon from './PersonalIcon'
2
- import MembershipIcon from './MembershipIcon'
3
- import VideoIcon from './VideoIcon'
4
- import PaymentIcon from './PaymentIcon'
5
- import OrdersIcon from './OrdersIcon'
6
- import SupportIcon from './SupportIcon'
1
+ import PersonalIcon from './personal'
2
+ import MembershipIcon from './membership'
3
+ import VideoIcon from './video'
4
+ import PaymentIcon from './payment'
5
+ import OrdersIcon from './orders'
6
+ import SupportIcon from './support'
7
7
 
8
8
  export {
9
9
  PersonalIcon,