@internetstiftelsen/styleguide 5.1.9 → 5.1.11-beta.0.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.
@@ -3,12 +3,16 @@
3
3
  function toggleTextOnClick(e) {
4
4
  e.preventDefault();
5
5
  const el = e.target;
6
+ if (!el.dataset.toggleText) {
7
+ console.warn('No data-toggle-text attribute found on element', el);
8
+ return;
9
+ }
6
10
  const target = el.dataset.toggleTarget ? document.getElementById(el.dataset.toggleTarget) : el;
7
11
  const i = parseInt(el.dataset.iteration || 0, 10);
8
12
  const options = el.dataset.toggleText.split('|');
9
13
  const nextIteration = i + 1 === options.length ? 0 : i + 1;
10
14
  const ariaPressed = el.getAttribute('aria-pressed');
11
- el.dataset.iteration = nextIteration;
15
+ el.dataset.iteration = nextIteration.toString();
12
16
  target.innerText = options[nextIteration];
13
17
  if (ariaPressed) {
14
18
  el.setAttribute('aria-pressed', ariaPressed === 'true' ? 'false' : 'true');
@@ -12,7 +12,7 @@ function positionToolTip() {
12
12
  toolTipText.classList.add('down');
13
13
  }
14
14
  }
15
- if (toolTip) {
15
+ if (toolTip && toolTipText) {
16
16
  positionToolTip();
17
17
  window.addEventListener('scroll', positionToolTip);
18
18
  }
@@ -32,6 +32,7 @@ require("./organisms/video-guide/video-guide");
32
32
  require("./organisms/timeline/timeline");
33
33
  require("./molecules/overview-navigation/overview-navigation");
34
34
  require("./organisms/schedule/schedule-filter");
35
+ require("./organisms/selectable/selectable");
35
36
  require("./assets/js/ot");
36
37
  require("./assets/js/charCounter");
37
38
  require("./atoms/range/range");
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ function toggleItems(selectable, value) {
3
+ const items = selectable.querySelectorAll('[data-selectable-item]');
4
+ items.forEach((item)=>{
5
+ item.setAttribute('aria-hidden', item.id === `${selectable.id}-${value}` || value === null ? 'false' : 'true');
6
+ });
7
+ }
8
+ function onChange(selectable, value) {
9
+ toggleItems(selectable, value);
10
+ }
11
+ document.addEventListener('change', (e)=>{
12
+ const container = e.target.closest('[data-selectable]');
13
+ if (container && e.target.matches('[data-selectable-select]')) {
14
+ onChange(container, e.target.value);
15
+ }
16
+ });
17
+ document.addEventListener('click', (e)=>{
18
+ const button = e.target.closest('[data-selectable-all]');
19
+ if (button) {
20
+ const selectable = button.closest('[data-selectable]');
21
+ if (selectable) {
22
+ const select = selectable.querySelector('[data-selectable-select]');
23
+ if (select) {
24
+ select.value = '';
25
+ }
26
+ toggleItems(selectable, null);
27
+ }
28
+ return;
29
+ }
30
+ const copy = e.target.closest('[data-selectable-copy]');
31
+ if (copy) {
32
+ const selectable = copy.closest('[data-selectable]');
33
+ const select = selectable.querySelector('[data-selectable-select]');
34
+ const value = select.value;
35
+ let id = selectable.id;
36
+ if (value) {
37
+ id = `${id}-${value}`;
38
+ }
39
+ const url = window.location.href.replace(/#.*$/, '') + '#' + id;
40
+ navigator.clipboard.writeText(url).then(()=>{
41
+ const text = copy.querySelector('span');
42
+ text.dataset.original = text.innerText;
43
+ text.innerText = text.dataset.copied;
44
+ setTimeout(()=>{
45
+ text.innerText = text.dataset.original;
46
+ }, 1000);
47
+ });
48
+ }
49
+ });
50
+ const selectables = document.querySelectorAll('[data-selectable]');
51
+ selectables.forEach((selectable)=>{
52
+ const select = selectable.querySelector('[data-selectable-select]');
53
+ toggleItems(selectable, select.value);
54
+ });
55
+ // Read current hash and select item
56
+ const hash = window.location.hash.replace(/^#/, '');
57
+ if (hash) {
58
+ const item = document.getElementById(hash);
59
+ if (item) {
60
+ if (item.matches('[data-selectable]')) {
61
+ const select = item.querySelector('[data-selectable-select]');
62
+ if (select) {
63
+ select.value = '';
64
+ }
65
+ toggleItems(item, null);
66
+ } else {
67
+ const selectable = item.closest('[data-selectable]');
68
+ if (selectable) {
69
+ const select = selectable.querySelector('[data-selectable-select]');
70
+ if (select) {
71
+ select.value = hash.replace(`${selectable.id}-`, '');
72
+ }
73
+ toggleItems(selectable, select.value);
74
+ }
75
+ }
76
+ }
77
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetstiftelsen/styleguide",
3
- "version": "5.1.9",
3
+ "version": "5.1.11-beta.0.1",
4
4
  "main": "dist/components.js",
5
5
  "ports": {
6
6
  "fractal": "3000"
package/src/app.scss CHANGED
@@ -93,6 +93,7 @@
93
93
  @use 'organisms/members-service-product/members-service-product';
94
94
  @use 'organisms/schedule/schedule';
95
95
  @use 'organisms/haveibeenpwned/haveibeenpwned';
96
+ @use 'organisms/selectable/selectable';
96
97
  // Structures
97
98
  @use 'structures/manifest';
98
99
 
@@ -3,13 +3,19 @@ function toggleTextOnClick(e) {
3
3
  e.preventDefault();
4
4
 
5
5
  const el = e.target;
6
+
7
+ if (!el.dataset.toggleText) {
8
+ console.warn('No data-toggle-text attribute found on element', el);
9
+ return;
10
+ }
11
+
6
12
  const target = (el.dataset.toggleTarget) ? document.getElementById(el.dataset.toggleTarget) : el;
7
13
  const i = parseInt(el.dataset.iteration || 0, 10);
8
14
  const options = el.dataset.toggleText.split('|');
9
15
  const nextIteration = (i + 1) === options.length ? 0 : i + 1;
10
16
  const ariaPressed = el.getAttribute('aria-pressed');
11
17
 
12
- el.dataset.iteration = nextIteration;
18
+ el.dataset.iteration = nextIteration.toString();
13
19
  target.innerText = options[nextIteration];
14
20
 
15
21
  if (ariaPressed) {
@@ -17,7 +23,7 @@ function toggleTextOnClick(e) {
17
23
  }
18
24
  }
19
25
 
20
-
26
+
21
27
  document.addEventListener('click', (e) => {
22
28
  if (e.target.closest('[data-toggle-text]')) {
23
29
  toggleTextOnClick(e);
Binary file
@@ -0,0 +1,3 @@
1
+ <svg id="icon-at" viewBox="0 0 24 24" height="24" width="24" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10c1.466 0 2.961-.371 4.442-1.104l-.885-1.793C14.353 19.698 13.156 20 12 20c-4.411 0-8-3.589-8-8s3.589-8 8-8 8 3.589 8 8v1c0 .692-.313 2-1.5 2-1.396 0-1.494-1.819-1.5-2V8h-2v.025A4.954 4.954 0 0 0 12 7c-2.757 0-5 2.243-5 5s2.243 5 5 5c1.45 0 2.748-.631 3.662-1.621.524.89 1.408 1.621 2.838 1.621 2.273 0 3.5-2.061 3.5-4v-1c0-5.514-4.486-10-10-10zm0 13c-1.654 0-3-1.346-3-3s1.346-3 3-3 3 1.346 3 3-1.346 3-3 3z"/>
3
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32"><path d="M27.7 4.3c-.3-.1-5.9-2.5-11.7-2.5S4.7 4.2 4.4 4.3l-.5.2v14.1c0 5.08 4.33 8.27 7.8 10.02.01 0 .02.01.03.02a28.129 28.129 0 0 0 3.47 1.46c.3.1.5.1.8.1h.1c.3 0 .5 0 .8-.1.76-.26 2.04-.75 3.47-1.47.01 0 .02-.01.03-.02 3.46-1.75 7.8-4.93 7.8-10.02V4.5zm-1.3 14.3c0 6.1-8.4 9.2-10.1 9.8a.9.9 0 0 1-.25.07.5.5 0 0 1-.25-.07c-1.7-.6-10.1-3.7-10.1-9.8v-13c1.49-.6 5.95-2.08 10.32-2.1l2.9.2c-.94-.12-1.91-.2-2.87-.2h.05c1.02 0 2.05.08 3.04.21h-.22c3.33.41 6.31 1.42 7.48 1.89z"/><path d="M21.07 12.58v-2.22a2.83 2.83 0 0 0-2.85-2.85h-4.44a2.83 2.83 0 0 0-2.85 2.85v2.22H9.72v8.69h12.56v-8.69zm-8.69-2.22c0-.77.63-1.4 1.4-1.4h4.44c.77 0 1.4.63 1.4 1.4v2.22h-7.24zm8.45 9.46h-9.66v-5.8h9.66z"/><path d="M16.92 16.15c0-.53-.43-.92-.92-.92s-.92.43-.92.92c0 .29.1.53.29.68v1.79h1.21v-1.79c.24-.14.34-.39.34-.68"/></svg>
@@ -278,6 +278,10 @@
278
278
  <path d="M.375.454v18.092h25.25V.454H.375zm23.333 5.504v7.997l-6.773-3.72 6.773-4.277zm0 10.184v.488H2.292v-.488l8.627-4.738L13 12.716l2.082-1.312 8.626 4.738zm0-12.451L13 10.45 2.292 3.691v-1.32h21.417v1.32zM2.292 13.954V5.958l6.774 4.276-6.774 3.72z"/>
279
279
  </symbol>
280
280
 
281
+ <symbol id="icon-at" viewbox="0 0 24 24">
282
+ <path d="M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10c1.466 0 2.961-.371 4.442-1.104l-.885-1.793C14.353 19.698 13.156 20 12 20c-4.411 0-8-3.589-8-8s3.589-8 8-8 8 3.589 8 8v1c0 .692-.313 2-1.5 2-1.396 0-1.494-1.819-1.5-2V8h-2v.025A4.954 4.954 0 0 0 12 7c-2.757 0-5 2.243-5 5s2.243 5 5 5c1.45 0 2.748-.631 3.662-1.621.524.89 1.408 1.621 2.838 1.621 2.273 0 3.5-2.061 3.5-4v-1c0-5.514-4.486-10-10-10zm0 13c-1.654 0-3-1.346-3-3s1.346-3 3-3 3 1.346 3 3-1.346 3-3 3z"/>
283
+ </symbol>
284
+
281
285
  <symbol id="icon-headset" viewbox="0 0 25 25">
282
286
  <path d="M22.63 11.185v-1C22.63 4.597 18.084.051 12.496.051S2.362 4.597 2.362 10.185v1H.365v7.258h2.448l3.075 5.808H10v.699h5v-2.997h-5v.698H6.852l-2.49-4.703v-7.763c0-4.485 3.649-8.134 8.134-8.134S20.63 5.7 20.63 10.185v8.258h4.005v-7.258H22.63z"/>
283
287
  </symbol>
@@ -361,6 +365,10 @@
361
365
  <path d="M25.3 15.8c-3.1 0-5.5 2.5-5.5 5.5s2.5 5.5 5.5 5.5 5.5-2.5 5.5-5.5-2.4-5.5-5.5-5.5zm-.7 7.8l-2.3-2.1.5-.6 1.7 1.6 3.2-3.5.6.5-3.7 4.1z"/>
362
366
  </symbol>
363
367
 
368
+ <symbol id="icon-security" viewbox="0 0 32 32">
369
+ <path d="M27.7 4.3c-.3-.1-5.9-2.5-11.7-2.5S4.7 4.2 4.4 4.3l-.5.2v14.1c0 5.08 4.33 8.27 7.8 10.02.01 0 .02.01.03.02a28.129 28.129 0 0 0 3.47 1.46c.3.1.5.1.8.1h.1c.3 0 .5 0 .8-.1.76-.26 2.04-.75 3.47-1.47.01 0 .02-.01.03-.02 3.46-1.75 7.8-4.93 7.8-10.02V4.5zm-1.3 14.3c0 6.1-8.4 9.2-10.1 9.8a.9.9 0 0 1-.25.07.5.5 0 0 1-.25-.07c-1.7-.6-10.1-3.7-10.1-9.8v-13c1.49-.6 5.95-2.08 10.32-2.1l2.9.2c-.94-.12-1.91-.2-2.87-.2h.05c1.02 0 2.05.08 3.04.21h-.22c3.33.41 6.31 1.42 7.48 1.89z"/><path d="M21.07 12.58v-2.22a2.83 2.83 0 0 0-2.85-2.85h-4.44a2.83 2.83 0 0 0-2.85 2.85v2.22H9.72v8.69h12.56v-8.69zm-8.69-2.22c0-.77.63-1.4 1.4-1.4h4.44c.77 0 1.4.63 1.4 1.4v2.22h-7.24zm8.45 9.46h-9.66v-5.8h9.66z"/><path d="M16.92 16.15c0-.53-.43-.92-.92-.92s-.92.43-.92.92c0 .29.1.53.29.68v1.79h1.21v-1.79c.24-.14.34-.39.34-.68"/>
370
+ </symbol>
371
+
364
372
  <symbol id="icon-romance" viewbox="0 0 32 32">
365
373
  <path d="M15.953 29.329l-12.6-12.7c-3.2-3.2-3.2-8.4 0-11.7 1.5-1.6 3.6-2.4 5.8-2.4 2.2 0 4.3.8 5.8 2.4l.9.9.9-.9c3.2-3.2 8.5-3.2 11.7 0 3.2 3.2 3.2 8.5 0 11.7l-12.5 12.7zm-6.8-24.6c-1.6 0-3.2.6-4.4 1.8-2.4 2.4-2.4 6.3 0 8.8l11.1 11.1 11.1-11.1c2.4-2.4 2.4-6.3 0-8.8-2.4-2.4-6.3-2.4-8.8 0l-2.4 2.4-2.4-2.4c-.9-1.2-2.6-1.8-4.2-1.8z"/>
366
374
  <path d="M15.953 29.329l-12.6-12.7c-3.2-3.2-3.2-8.4 0-11.7 1.5-1.6 3.6-2.4 5.8-2.4 2.2 0 4.3.8 5.8 2.4l.9.9.9-.9c3.2-3.2 8.5-3.2 11.7 0 3.2 3.2 3.2 8.5 0 11.7l-12.5 12.7zm-6.8-24.6c-1.6 0-3.2.6-4.4 1.8-2.4 2.4-2.4 6.3 0 8.8l11.1 11.1 11.1-11.1c2.4-2.4 2.4-6.3 0-8.8-2.4-2.4-6.3-2.4-8.8 0l-2.4 2.4-2.4-2.4c-.9-1.2-2.6-1.8-4.2-1.8z"/>
@@ -20,6 +20,13 @@
20
20
 
21
21
  &[disabled] {
22
22
  @extend %disabled;
23
+
24
+ &[disabled] {
25
+ + figure svg {
26
+ opacity: 0.3;
27
+ cursor: not-allowed;
28
+ }
29
+ }
23
30
  }
24
31
 
25
32
  @include bem.m(discreet) {
@@ -259,6 +259,21 @@
259
259
  }
260
260
  }
261
261
  }
262
+
263
+ @include bem.m(right-aligned) {
264
+ left: auto;
265
+ right: 0;
266
+
267
+ &::after,
268
+ &:before {
269
+ left: auto;
270
+ right: func.rhythm(3);
271
+ }
272
+
273
+ &:before {
274
+ margin-right: -1px;
275
+ }
276
+ }
262
277
  }
263
278
  }
264
279
 
@@ -7,8 +7,16 @@
7
7
  @use '../../configurations/colors/colors-functions' as colorFunc;
8
8
  @use '../../vendor/grid/breakpoints' as breakpoint;
9
9
 
10
-
11
10
  @include mixin.atom(progress) {
11
+ -webkit-appearance: none;
12
+ -moz-appearance: none;
13
+ appearance: none;
14
+ padding: 0;
15
+ pointer-events: none;
16
+ cursor: none;
17
+ border-radius: var.$border-radius;
18
+ overflow: hidden;
19
+
12
20
  &[value] {
13
21
  -webkit-appearance: none;
14
22
  -moz-appearance: none;
@@ -18,23 +26,17 @@
18
26
  background: colors.$color-concrete;
19
27
  border: none;
20
28
  width: 100%;
21
- border-radius: 0;
29
+ border-radius: var.$border-radius;
22
30
  height: func.rhythm(1);
31
+ position: relative;
23
32
 
24
33
  @include breakpoint.bp-up(md) {
25
34
  height: func.rhythm(2);
26
35
  }
27
36
  }
28
- &[value]::-webkit-progress-bar {
29
- border-radius: 0;
30
- background: colors.$color-concrete;
31
- }
32
- &[value]::-webkit-progress-value {
33
- border-radius: 0;
34
- background: colors.$color-ocean;
35
- transition: width 5s ease;
36
- }
37
- &[value]::-moz-progress-bar {
37
+
38
+ &[value]::-moz-progress-value,
39
+ &[value]::-moz-meter-optimum {
38
40
  border-radius: 0;
39
41
  background: colors.$color-ocean;
40
42
  transition: padding-bottom 5s ease;
@@ -44,13 +46,77 @@
44
46
  transform-origin: 0 0;
45
47
  transform: rotate(-90deg) translateX(-60px) ;
46
48
  }
49
+
50
+ &[value]::-webkit-progress-bar,
51
+ &[value]::-webkit-meter-bar,
52
+ &[value]::-webkit-meter-optimum-value
53
+ {
54
+ border-radius: 0;
55
+ background: colors.$color-concrete;
56
+ transition: width 5s ease;
57
+ block-size: func.rhythm(1);
58
+
59
+ @include breakpoint.bp-up(md) {
60
+ block-size: func.rhythm(2);
61
+ }
62
+ }
63
+
64
+ &[value]::-webkit-progress-value,
65
+ &[value]::-webkit-meter-optimum-value {
66
+ background: colors.$color-ocean;
67
+ }
68
+
69
+ &::-moz-progress-bar {
70
+ background: colors.$color-ocean;
71
+ }
72
+
73
+ &::-moz-meter-bar {
74
+ background: colors.$color-ocean;
75
+ }
76
+
77
+ &:-moz-meter-optimum::slider-fill {
78
+ background: colors.$color-ocean;
79
+ }
80
+
81
+ @include bem.m(large) {
82
+ &[value],
83
+ &[value]::-webkit-progress-bar,
84
+ &[value]::-webkit-meter-bar,
85
+ &[value]::-webkit-meter-optimum-value {
86
+ height: func.rhythm(4);
87
+ block-size: func.rhythm(4);
88
+ }
89
+ }
90
+
91
+ @include bem.m(heat) {
92
+ &[value]::-webkit-progress-value,
93
+ &[value]::-webkit-meter-optimum-value {
94
+ border-radius: 0;
95
+ transition: width 5s ease;
96
+ background: linear-gradient(90deg, rgba(217, 0, 47, 1) 0%, rgba(217, 0, 47, 1) 19.99%, rgba(255, 64, 105, 1) 20%, rgba(255, 64, 105, 1) 39.99%, rgba(249, 153, 99, 1) 40%, rgba(249, 153, 99, 1) 59.99%, rgba(255, 206, 46, 1) 60%, rgba(255, 206, 46, 1) 79.99%, rgba(37, 194, 121, 1) 80%, rgba(37, 194, 121, 1) 89.99%, rgba(25, 135, 84, 1) 90%, rgba(25, 135, 84, 1) 100%);
97
+ background-size: var(--progressbar-width) 100%; /* This is calculated by JS and set in the DOM */
98
+ background-repeat: no-repeat;
99
+ }
100
+
101
+ &::-moz-progress-bar {
102
+ transition: width 5s ease;
103
+ background: linear-gradient(90deg, rgba(217, 0, 47, 1) 0%, rgba(217, 0, 47, 1) 19.99%, rgba(255, 64, 105, 1) 20%, rgba(255, 64, 105, 1) 39.99%, rgba(249, 153, 99, 1) 40%, rgba(249, 153, 99, 1) 59.99%, rgba(255, 206, 46, 1) 60%, rgba(255, 206, 46, 1) 79.99%, rgba(37, 194, 121, 1) 80%, rgba(37, 194, 121, 1) 89.99%, rgba(25, 135, 84, 1) 90%, rgba(25, 135, 84, 1) 100%);
104
+ background-size: var(--progressbar-width) 100%; /* This is calculated by JS and set in the DOM */
105
+ background-repeat: no-repeat;
106
+ }
107
+ }
47
108
  }
48
109
 
49
110
  @include mixin.atom(progress-label) {
50
111
  display: flex;
51
112
  align-items: center;
52
113
 
53
- > progress {
114
+ > progress,
115
+ > meter {
54
116
  margin-left: func.rhythm(1);
55
117
  }
118
+
119
+ @include bem.m(large) {
120
+ font-size: var.$size-base * 1.5;
121
+ }
56
122
  }
@@ -7,5 +7,22 @@ module.exports = {
7
7
  max: '100',
8
8
  max_width: false,
9
9
  additional_classes: false,
10
- }
10
+ meter: false
11
+ },
12
+ variants: [
13
+ {
14
+ name: 'Heat',
15
+ context: {
16
+ heat: true,
17
+ meter: false,
18
+ value: '100'
19
+ }
20
+ },
21
+ {
22
+ name: 'Meter',
23
+ context: {
24
+ meter: true
25
+ }
26
+ }
27
+ ]
11
28
  };
@@ -0,0 +1,13 @@
1
+ const progressbars = document.querySelectorAll('[data-width-progress]')
2
+
3
+ if (progressbars) {
4
+ function progressBarWidths() {
5
+ progressbars.forEach((container, index) => {
6
+ const width = container.offsetWidth;
7
+ document.documentElement.style.setProperty(`--progressbar-width`, width + 'px');
8
+ });
9
+ }
10
+
11
+ window.addEventListener('DOMContentLoaded', progressBarWidths);
12
+ window.addEventListener('resize', progressBarWidths);
13
+ }
@@ -19,7 +19,7 @@ function positionToolTip() {
19
19
  }
20
20
  }
21
21
 
22
- if (toolTip) {
22
+ if (toolTip && toolTipText) {
23
23
  positionToolTip();
24
24
  window.addEventListener('scroll', positionToolTip);
25
25
  }
package/src/components.js CHANGED
@@ -28,6 +28,7 @@ import './organisms/video-guide/video-guide';
28
28
  import './organisms/timeline/timeline';
29
29
  import './molecules/overview-navigation/overview-navigation';
30
30
  import './organisms/schedule/schedule-filter';
31
+ import './organisms/selectable/selectable';
31
32
  import './assets/js/ot';
32
33
  import './assets/js/charCounter';
33
34
  import './atoms/range/range';
@@ -36,3 +37,4 @@ import './assets/js/textToggle';
36
37
  import './assets/js/iconToggle';
37
38
  import './molecules/multi-select/multi-select';
38
39
  import './organisms/haveibeenpwned/haveibeenpwned';
40
+ import './atoms/progress/progress';
@@ -100,3 +100,22 @@
100
100
  }
101
101
  }
102
102
  }
103
+
104
+ @mixin value-range($from, $to) {
105
+ @for $i from $from through $to {
106
+ // main element
107
+ @at-root #{&}[value="#{$i}"] {
108
+ @content;
109
+ }
110
+
111
+ // WebKit progress bar (Chrome, Safari, Edge)
112
+ @at-root #{&}[value="#{$i}"]::-webkit-progress-value {
113
+ @content;
114
+ }
115
+
116
+ // Firefox progress bar
117
+ @at-root #{&}[value="#{$i}"]::-moz-progress-bar {
118
+ @content;
119
+ }
120
+ }
121
+ }
@@ -26,38 +26,48 @@ $colors: (
26
26
  ruby: (
27
27
  base: colors.$color-ruby,
28
28
  light: colors.$color-ruby-light,
29
+ lighter: colors.$color-ruby-lighter,
29
30
  dark: colors.$color-ruby-dark,
30
31
  medium-dark: colors.$color-ruby-medium-dark
31
32
  ),
32
33
  peacock: (
33
34
  base: colors.$color-peacock,
34
35
  light: colors.$color-peacock-light,
36
+ lighter: colors.$color-peacock-lighter,
35
37
  dark: colors.$color-peacock-dark,
36
38
  medium-dark: colors.$color-peacock-medium-dark
37
39
  ),
38
40
  jade: (
39
41
  base: colors.$color-jade,
40
42
  light: colors.$color-jade-light,
43
+ lighter: colors.$color-jade-lighter,
41
44
  dark: colors.$color-jade-dark,
42
45
  medium-dark: colors.$color-jade-medium-dark
43
46
  ),
44
47
  sandstone: (
45
48
  base: colors.$color-sandstone,
46
49
  light: colors.$color-sandstone-light,
50
+ lighter: colors.$color-sandstone-lighter,
47
51
  dark: colors.$color-sandstone-dark,
48
52
  medium-dark: colors.$color-sandstone-medium-dark
49
53
  ),
50
54
  lemon: (
51
55
  base: colors.$color-lemon,
52
56
  light: colors.$color-lemon-light,
57
+ lighter: colors.$color-lemon-lighter,
53
58
  dark: colors.$color-lemon-dark,
54
59
  medium-dark: colors.$color-lemon-medium-dark
55
60
  ),
56
61
  ocean: (
57
62
  base: colors.$color-ocean,
58
63
  light: colors.$color-ocean-light,
64
+ lighter: colors.$color-ocean-lighter,
59
65
  dark : colors.$color-ocean-dark,
60
66
  medium-dark: colors.$color-ocean-medium-dark
67
+ ),
68
+ success: (
69
+ base: colors.$color-success,
70
+ dark: colors.$color-success-dark
61
71
  )
62
72
  );
63
73
 
@@ -9,16 +9,22 @@ $color-concrete: #d8d8d8;
9
9
  $color-ash: #ededed !default;
10
10
  $color-ruby: #ff4069 !default;
11
11
  $color-ruby-light: #ff9fb4 !default;
12
+ $color-ruby-lighter: color.adjust($color-ruby-light, $lightness: 10%) !default;
12
13
  $color-peacock: #c27fec !default;
13
14
  $color-peacock-light: #e0bff5 !default;
15
+ $color-peacock-lighter: color.adjust($color-peacock-light, $lightness: 10%) !default;
14
16
  $color-jade: #55c7b4 !default;
15
17
  $color-jade-light: #aae3d9 !default;
18
+ $color-jade-lighter: color.adjust($color-jade-light, $lightness: 10%) !default;
16
19
  $color-sandstone: #f99963 !default;
17
20
  $color-sandstone-light: #fcccb1 !default;
21
+ $color-sandstone-lighter: color.adjust($color-sandstone-light, $lightness: 10%) !default;
18
22
  $color-lemon: #ffce2e !default;
19
23
  $color-lemon-light: #ffe696 !default;
24
+ $color-lemon-lighter: color.adjust($color-lemon-light, $lightness: 10%) !default;
20
25
  $color-ocean: #50b2fc !default;
21
26
  $color-ocean-light: #a7d8fd !default;
27
+ $color-ocean-lighter: color.adjust( $color-ocean-light, $lightness: 10%) !default;
22
28
  $color-cyberspace: #1f2a36 !default;
23
29
  $color-dark: #4c4c4c !default;
24
30
  $color-facebook: #0866ff !default;
@@ -40,3 +46,7 @@ $color-jade-medium-dark: color.adjust($color-jade, $lightness: -10%);
40
46
  $color-sandstone-medium-dark: color.adjust($color-sandstone, $lightness: -10%);
41
47
  $color-lemon-medium-dark: color.adjust($color-lemon, $lightness: -10%);
42
48
  $color-ocean-medium-dark: color.adjust($color-ocean, $lightness: -10%);
49
+
50
+ /* Special colors not ound in the graphic profile */
51
+ $color-success: #25c279 !default;
52
+ $color-success-dark: #198754 !default;
@@ -1 +1 @@
1
- [{"id":"search","name":"Search"},{"id":"search-domain","name":"Search Domain"},{"id":"arrow-forwards","name":"Arrow Forwards"},{"id":"arrow-backwards","name":"Arrow Backwards"},{"id":"arrow-down","name":"Arrow Down"},{"id":"arrow-variant","name":"Arrow Variant"},{"id":"hamburger","name":"Hamburger"},{"id":"close","name":"Close"},{"id":"check","name":"Check"},{"id":"quote","name":"Quote"},{"id":"file","name":"File"},{"id":"download","name":"Download"},{"id":"upload","name":"Upload"},{"id":"filter","name":"Filter"},{"id":"read","name":"Read"},{"id":"pin","name":"Pin"},{"id":"user","name":"User"},{"id":"language","name":"Language"},{"id":"linkedin","name":"Linkedin"},{"id":"facebook","name":"Facebook"},{"id":"instagram","name":"Instagram"},{"id":"twitter","name":"Twitter"},{"id":"x","name":"X"},{"id":"external-link","name":"External Link"},{"id":"app-share","name":"App Share"},{"id":"print","name":"Print"},{"id":"chapters","name":"Chapters"},{"id":"article","name":"Article"},{"id":"padlock","name":"Padlock"},{"id":"trash","name":"Trash"},{"id":"link","name":"Link"},{"id":"share","name":"Share"},{"id":"questionmark","name":"Questionmark"},{"id":"info","name":"Info"},{"id":"contrast","name":"Contrast"},{"id":"gauge","name":"Gauge"},{"id":"backward-15","name":"Backward 15"},{"id":"step-backwards","name":"Step Backwards"},{"id":"play","name":"Play"},{"id":"step-forwards","name":"Step Forwards"},{"id":"forward-60","name":"Forward 60"},{"id":"pause","name":"Pause"},{"id":"subtitles","name":"Subtitles"},{"id":"author","name":"Author"},{"id":"copy","name":"Copy"},{"id":"speaker","name":"Speaker"},{"id":"mute","name":"Mute"},{"id":"settings","name":"Settings"},{"id":"lte","name":"Lte"},{"id":"wifi","name":"Wifi"},{"id":"reception","name":"Reception"},{"id":"2g","name":"2g"},{"id":"3g","name":"3g"},{"id":"4g","name":"4g"},{"id":"5g","name":"5g"},{"id":"latency","name":"Latency"},{"id":"spinner","name":"Spinner"},{"id":"spinner-white","name":"Spinner White"},{"id":"3d","name":"3d"},{"id":"accessibility","name":"Accessibility"},{"id":"cafe","name":"Cafe"},{"id":"capacity","name":"Capacity"},{"id":"display","name":"Display"},{"id":"email","name":"Email"},{"id":"headset","name":"Headset"},{"id":"phone","name":"Phone"},{"id":"plus","name":"Plus"},{"id":"podcast","name":"Podcast"},{"id":"richtext-bold","name":"Richtext Bold"},{"id":"richtext-italic","name":"Richtext Italic"},{"id":"richtext-heading-2","name":"Richtext Heading 2"},{"id":"richtext-heading-3","name":"Richtext Heading 3"},{"id":"richtext-bullet-list","name":"Richtext Bullet List"},{"id":"richtext-ordered-list","name":"Richtext Ordered List"},{"id":"streaming","name":"Streaming"},{"id":"time","name":"Time"},{"id":"drag-item","name":"Drag Item"},{"id":"personal-data","name":"Personal Data"},{"id":"romance","name":"Romance"},{"id":"shopping","name":"Shopping"},{"id":"warning","name":"Warning"},{"id":"diamond","name":"Diamond"},{"id":"world","name":"World"},{"id":"table","name":"Table"}]
1
+ [{"id":"search","name":"Search"},{"id":"search-domain","name":"Search Domain"},{"id":"arrow-forwards","name":"Arrow Forwards"},{"id":"arrow-backwards","name":"Arrow Backwards"},{"id":"arrow-down","name":"Arrow Down"},{"id":"arrow-variant","name":"Arrow Variant"},{"id":"hamburger","name":"Hamburger"},{"id":"close","name":"Close"},{"id":"check","name":"Check"},{"id":"quote","name":"Quote"},{"id":"file","name":"File"},{"id":"download","name":"Download"},{"id":"upload","name":"Upload"},{"id":"filter","name":"Filter"},{"id":"read","name":"Read"},{"id":"pin","name":"Pin"},{"id":"user","name":"User"},{"id":"language","name":"Language"},{"id":"linkedin","name":"Linkedin"},{"id":"facebook","name":"Facebook"},{"id":"instagram","name":"Instagram"},{"id":"twitter","name":"Twitter"},{"id":"x","name":"X"},{"id":"external-link","name":"External Link"},{"id":"app-share","name":"App Share"},{"id":"print","name":"Print"},{"id":"chapters","name":"Chapters"},{"id":"article","name":"Article"},{"id":"padlock","name":"Padlock"},{"id":"trash","name":"Trash"},{"id":"link","name":"Link"},{"id":"share","name":"Share"},{"id":"questionmark","name":"Questionmark"},{"id":"info","name":"Info"},{"id":"contrast","name":"Contrast"},{"id":"gauge","name":"Gauge"},{"id":"backward-15","name":"Backward 15"},{"id":"step-backwards","name":"Step Backwards"},{"id":"play","name":"Play"},{"id":"step-forwards","name":"Step Forwards"},{"id":"forward-60","name":"Forward 60"},{"id":"pause","name":"Pause"},{"id":"subtitles","name":"Subtitles"},{"id":"author","name":"Author"},{"id":"copy","name":"Copy"},{"id":"speaker","name":"Speaker"},{"id":"mute","name":"Mute"},{"id":"settings","name":"Settings"},{"id":"lte","name":"Lte"},{"id":"wifi","name":"Wifi"},{"id":"reception","name":"Reception"},{"id":"2g","name":"2g"},{"id":"3g","name":"3g"},{"id":"4g","name":"4g"},{"id":"5g","name":"5g"},{"id":"latency","name":"Latency"},{"id":"spinner","name":"Spinner"},{"id":"spinner-white","name":"Spinner White"},{"id":"3d","name":"3d"},{"id":"accessibility","name":"Accessibility"},{"id":"cafe","name":"Cafe"},{"id":"capacity","name":"Capacity"},{"id":"display","name":"Display"},{"id":"email","name":"Email"},{"id":"at","name":"At"},{"id":"headset","name":"Headset"},{"id":"phone","name":"Phone"},{"id":"plus","name":"Plus"},{"id":"podcast","name":"Podcast"},{"id":"richtext-bold","name":"Richtext Bold"},{"id":"richtext-italic","name":"Richtext Italic"},{"id":"richtext-heading-2","name":"Richtext Heading 2"},{"id":"richtext-heading-3","name":"Richtext Heading 3"},{"id":"richtext-bullet-list","name":"Richtext Bullet List"},{"id":"richtext-ordered-list","name":"Richtext Ordered List"},{"id":"streaming","name":"Streaming"},{"id":"time","name":"Time"},{"id":"drag-item","name":"Drag Item"},{"id":"personal-data","name":"Personal Data"},{"id":"security","name":"Security"},{"id":"romance","name":"Romance"},{"id":"shopping","name":"Shopping"},{"id":"warning","name":"Warning"},{"id":"diamond","name":"Diamond"},{"id":"world","name":"World"},{"id":"table","name":"Table"}]
@@ -0,0 +1,43 @@
1
+ @charset "UTF-8";
2
+ @use "sass:color";
3
+ @use '../../configurations/mixins' as mixin;
4
+ @use '../../configurations/extends';
5
+ @use '../../configurations/bem' as bem;
6
+ @use '../../configurations/variables' as var;
7
+ @use '../../configurations/functions' as func;
8
+ @use '../../configurations/colors/colors' as colors;
9
+ @use '../../vendor/grid/breakpoints' as breakpoint;
10
+
11
+ @include mixin.organism(selectable) {
12
+ padding: func.rhythm(1);
13
+
14
+ [aria-hidden="true"] {
15
+ display: none;
16
+ }
17
+
18
+ @include breakpoint.bp-up(md) {
19
+ padding: func.rhythm(2);
20
+ }
21
+
22
+ @include bem.e(item) {
23
+ border-top: 1px solid colors.$color-concrete;
24
+ padding-top: func.rhythm(2);
25
+ margin-top: func.rhythm(3);
26
+
27
+ .js &:not(:first-child):not([aria-hidden]) {
28
+ display: none;
29
+ }
30
+ }
31
+
32
+ @include bem.m(border-radius) {
33
+ border-radius: var.$border-radius;
34
+ }
35
+
36
+ @include bem.m(shadow-small) {
37
+ @include mixin.box-shadow(colors.$color-cyberspace, 0.2);
38
+ }
39
+
40
+ @include bem.m(shadow-large) {
41
+ @include mixin.card-shadow(colors.$color-cyberspace, 0.2);
42
+ }
43
+ }
@@ -0,0 +1,105 @@
1
+ function toggleItems(selectable, value) {
2
+ const items = selectable.querySelectorAll('[data-selectable-item]');
3
+
4
+ items.forEach((item) => {
5
+ item.setAttribute('aria-hidden', item.id === `${selectable.id}-${value}` || value === null ? 'false' : 'true');
6
+ });
7
+ }
8
+
9
+ function onChange(selectable, value) {
10
+ toggleItems(selectable, value);
11
+ }
12
+
13
+ document.addEventListener('change', (e) => {
14
+ const container = e.target.closest('[data-selectable]');
15
+
16
+ if (container && e.target.matches('[data-selectable-select]')) {
17
+ onChange(container, e.target.value);
18
+ }
19
+ });
20
+
21
+ document.addEventListener('click', (e) => {
22
+ const button = e.target.closest('[data-selectable-all]');
23
+
24
+ if (button) {
25
+ const selectable = button.closest('[data-selectable]');
26
+
27
+ if (selectable) {
28
+ const select = selectable.querySelector('[data-selectable-select]');
29
+
30
+ if (select) {
31
+ select.value = '';
32
+ }
33
+
34
+ toggleItems(selectable, null);
35
+ }
36
+
37
+ return;
38
+ }
39
+
40
+ const copy = e.target.closest('[data-selectable-copy]');
41
+
42
+ if (copy) {
43
+ const selectable = copy.closest('[data-selectable]');
44
+ const select = selectable.querySelector('[data-selectable-select]');
45
+ const value = select.value;
46
+ let id = selectable.id;
47
+
48
+ if (value) {
49
+ id = `${id}-${value}`;
50
+ }
51
+
52
+ const url = window.location.href.replace(/#.*$/, '') + '#' + id;
53
+
54
+ navigator.clipboard.writeText(url)
55
+ .then(() => {
56
+ const text = copy.querySelector('span');
57
+
58
+ text.dataset.original = text.innerText;
59
+ text.innerText = text.dataset.copied;
60
+
61
+ setTimeout(() => {
62
+ text.innerText = text.dataset.original;
63
+ }, 1000);
64
+ });
65
+ }
66
+ });
67
+
68
+ const selectables = document.querySelectorAll('[data-selectable]');
69
+
70
+ selectables.forEach((selectable) => {
71
+ const select = selectable.querySelector('[data-selectable-select]');
72
+
73
+ toggleItems(selectable, select.value);
74
+ })
75
+
76
+ // Read current hash and select item
77
+ const hash = window.location.hash.replace(/^#/, '');
78
+
79
+ if (hash) {
80
+ const item = document.getElementById(hash);
81
+
82
+ if (item) {
83
+ if (item.matches('[data-selectable]')) {
84
+ const select = item.querySelector('[data-selectable-select]');
85
+
86
+ if (select) {
87
+ select.value = '';
88
+ }
89
+
90
+ toggleItems(item, null);
91
+ } else {
92
+ const selectable = item.closest('[data-selectable]');
93
+
94
+ if (selectable) {
95
+ const select = selectable.querySelector('[data-selectable-select]');
96
+
97
+ if (select) {
98
+ select.value = hash.replace(`${selectable.id}-`, '');
99
+ }
100
+
101
+ toggleItems(selectable, select.value);
102
+ }
103
+ }
104
+ }
105
+ }
@@ -25,6 +25,7 @@
25
25
  mask-repeat: repeat-y;
26
26
  mask-position: top right;
27
27
  mask-size: 100% func.rhythm(6);
28
+ pointer-events: none;
28
29
 
29
30
  &::-webkit-scrollbar {
30
31
  position: absolute;
@@ -64,10 +65,16 @@
64
65
  display: flex;
65
66
  flex: 0 0 auto;
66
67
  padding: 0;
68
+ font-size: var.$size-medium;
69
+ pointer-events: auto;
67
70
 
68
71
  + li {
69
72
  margin-left: func.rhythm(1);
70
73
  }
74
+
75
+ @include breakpoint.bp-up(md) {
76
+ font-size: var.$size-base;
77
+ }
71
78
  }
72
79
 
73
80
  @include bem.e(link) {
@@ -76,7 +83,7 @@
76
83
  display: inline-flex;
77
84
  position: relative;
78
85
  align-items: center;
79
- padding: func.rhythm(1.5) func.rhythm(3);
86
+ padding: func.rhythm(1) func.rhythm(2);
80
87
  border-top-left-radius: var.$border-radius;
81
88
  border-top-right-radius: var.$border-radius;
82
89
  background-color: colors.$color-concrete;
@@ -96,6 +103,10 @@
96
103
  &:hover {
97
104
  background-color: color.adjust(colors.$color-concrete, $lightness: -5%);
98
105
  }
106
+
107
+ @include breakpoint.bp-up(md) {
108
+ padding: func.rhythm(1.5) func.rhythm(3);
109
+ }
99
110
  }
100
111
 
101
112
  [data-tab-active] {
@@ -118,7 +129,7 @@
118
129
  position: relative;
119
130
  top: -1px;
120
131
  z-index: 2;
121
- padding: func.rhythm(2) func.rhythm(3);
132
+ padding: func.rhythm(1) func.rhythm(2);
122
133
  border-top-right-radius: var.$border-radius;
123
134
  border-bottom-right-radius: var.$border-radius;
124
135
  border-bottom-left-radius: var.$border-radius;
@@ -137,6 +148,10 @@
137
148
  background-color: colors.$color-ash;
138
149
  border-color: colors.$color-concrete;
139
150
  }
151
+
152
+ @include breakpoint.bp-up(md) {
153
+ padding: func.rhythm(2) func.rhythm(3);
154
+ }
140
155
  }
141
156
 
142
157
  .no-js {
@@ -16,3 +16,27 @@
16
16
  .u-fill-ocean-dark {
17
17
  fill: colors.$color-ocean-dark !important;
18
18
  }
19
+
20
+ .u-fill-jade {
21
+ fill: colors.$color-jade !important;
22
+ }
23
+
24
+ .u-fill-jade-dark {
25
+ fill: colors.$color-jade-dark !important;
26
+ }
27
+
28
+ .u-fill-ruby {
29
+ fill: colors.$color-ruby !important;
30
+ }
31
+
32
+ .u-fill-ruby-dark {
33
+ fill: colors.$color-ruby-dark !important;
34
+ }
35
+
36
+ .u-fill-success {
37
+ fill: colors.$color-success !important;
38
+ }
39
+
40
+ .u-fill-success-dark {
41
+ fill: colors.$color-success-dark !important;
42
+ }