tide-design-system 2.2.6 → 2.2.8

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.
package/package.json CHANGED
@@ -61,7 +61,7 @@
61
61
  "main": "dist/tide-design-system.cjs",
62
62
  "module": "dist/tide-design-system.esm.js",
63
63
  "types": "dist/tide-design-system.esm.d.ts",
64
- "version": "2.2.6",
64
+ "version": "2.2.8",
65
65
  "dependencies": {
66
66
  "@floating-ui/vue": "^1.1.6"
67
67
  }
@@ -41,6 +41,7 @@
41
41
  .lg-tide-axis1-between {justify-content: space-between;}
42
42
  .lg-tide-axis1-center {justify-content: center;}
43
43
  .lg-tide-axis1-end {justify-content: end;}
44
+ .lg-tide-axis1-start {justify-content: start;}
44
45
 
45
46
  .lg-tide-axis2-around {align-items: space-around;}
46
47
  .lg-tide-axis2-center {align-items: center;}
@@ -69,6 +70,7 @@
69
70
  .lg-tide-margin-1 {margin: var(--tide-spacing-1);}
70
71
  .lg-tide-margin-2 {margin: var(--tide-spacing-2);}
71
72
  .lg-tide-margin-4 {margin: var(--tide-spacing-4);}
73
+ .lg-tide-margin-auto {margin: auto;}
72
74
 
73
75
  .lg-tide-margin-x-0 {margin-left: 0; margin-right: 0;}
74
76
  .lg-tide-margin-x-1\/4 {margin-left: var(--tide-spacing-1\/4); margin-right: var(--tide-spacing-1\/4);}
@@ -84,7 +86,7 @@
84
86
  .lg-tide-margin-y-1 {margin-top: var(--tide-spacing-1); margin-bottom: var(--tide-spacing-1);}
85
87
  .lg-tide-margin-y-2 {margin-top: var(--tide-spacing-2); margin-bottom: var(--tide-spacing-2);}
86
88
  .lg-tide-margin-y-4 {margin-top: var(--tide-spacing-4); margin-bottom: var(--tide-spacing-4);}
87
- .lg-tide-margin-y-auto {margin-top: var(--tide-spacing-auto); margin-bottom: var(--tide-spacing-auto);}
89
+ .lg-tide-margin-y-auto {margin-top: auto; margin-bottom: auto;}
88
90
 
89
91
  .lg-tide-margin-top-0 {margin-top: 0;}
90
92
  .lg-tide-margin-top-1\/4 {margin-top: var(--tide-spacing-1\/4);}
@@ -92,7 +94,7 @@
92
94
  .lg-tide-margin-top-1 {margin-top: var(--tide-spacing-1);}
93
95
  .lg-tide-margin-top-2 {margin-top: var(--tide-spacing-2);}
94
96
  .lg-tide-margin-top-4 {margin-top: var(--tide-spacing-4);}
95
- .lg-tide-margin-top-auto {margin-top: var(--tide-spacing-auto);}
97
+ .lg-tide-margin-top-auto {margin-top: auto;}
96
98
 
97
99
  .lg-tide-margin-right-0 {margin-right: 0;}
98
100
  .lg-tide-margin-right-1\/4 {margin-right: var(--tide-spacing-1\/4);}
@@ -108,7 +110,7 @@
108
110
  .lg-tide-margin-bottom-1 {margin-bottom: var(--tide-spacing-1);}
109
111
  .lg-tide-margin-bottom-2 {margin-bottom: var(--tide-spacing-2);}
110
112
  .lg-tide-margin-bottom-4 {margin-bottom: var(--tide-spacing-4);}
111
- .lg-tide-margin-bottom-auto {margin-bottom: var(--tide-spacing-auto);}
113
+ .lg-tide-margin-bottom-auto {margin-bottom: auto;}
112
114
 
113
115
  .lg-tide-margin-left-0 {margin-left: 0;}
114
116
  .lg-tide-margin-left-1\/4 {margin-left: var(--tide-spacing-1\/4);}
@@ -222,8 +224,6 @@
222
224
  .lg-tide-max-height-full {max-height: 100%;}
223
225
  .lg-tide-min-height-0 {min-height: 0;}
224
226
 
225
- .lg-tide-width-container {max-width: 1168px;}
226
-
227
227
  .lg-tide-width-auto {width: auto;}
228
228
  .lg-tide-width-0 {width: 0;}
229
229
  .lg-tide-width-full {width: 100%;}
@@ -232,6 +232,9 @@
232
232
  .lg-tide-height-0 {height: 0;}
233
233
  .lg-tide-height-full {height: 100%;}
234
234
 
235
+ /* Deprecated */
236
+ .lg-tide-width-container {max-width: 1168px;}
237
+
235
238
  /* Background */
236
239
  .lg-tide-bg-initial {background-color: initial;}
237
240
 
@@ -320,6 +323,7 @@
320
323
 
321
324
  .lg-tide-isolate {isolation: isolate;}
322
325
 
326
+ /* Deprecated */
323
327
  .lg-tide-leading-default {line-height: 1.4;}
324
328
  .lg-tide-leading-normal {line-height: normal;}
325
329
 
@@ -1,4 +1,3 @@
1
- /* Medium breakpoint */
2
1
  @media (min-width: 992px) {
3
2
  /* Reusable CSS Utility Library */
4
3
  /* Position */
@@ -42,6 +41,7 @@
42
41
  .md-tide-axis1-between {justify-content: space-between;}
43
42
  .md-tide-axis1-center {justify-content: center;}
44
43
  .md-tide-axis1-end {justify-content: end;}
44
+ .md-tide-axis1-start {justify-content: start;}
45
45
 
46
46
  .md-tide-axis2-around {align-items: space-around;}
47
47
  .md-tide-axis2-center {align-items: center;}
@@ -70,6 +70,7 @@
70
70
  .md-tide-margin-1 {margin: var(--tide-spacing-1);}
71
71
  .md-tide-margin-2 {margin: var(--tide-spacing-2);}
72
72
  .md-tide-margin-4 {margin: var(--tide-spacing-4);}
73
+ .md-tide-margin-auto {margin: auto;}
73
74
 
74
75
  .md-tide-margin-x-0 {margin-left: 0; margin-right: 0;}
75
76
  .md-tide-margin-x-1\/4 {margin-left: var(--tide-spacing-1\/4); margin-right: var(--tide-spacing-1\/4);}
@@ -85,7 +86,7 @@
85
86
  .md-tide-margin-y-1 {margin-top: var(--tide-spacing-1); margin-bottom: var(--tide-spacing-1);}
86
87
  .md-tide-margin-y-2 {margin-top: var(--tide-spacing-2); margin-bottom: var(--tide-spacing-2);}
87
88
  .md-tide-margin-y-4 {margin-top: var(--tide-spacing-4); margin-bottom: var(--tide-spacing-4);}
88
- .md-tide-margin-y-auto {margin-top: var(--tide-spacing-auto); margin-bottom: var(--tide-spacing-auto);}
89
+ .md-tide-margin-y-auto {margin-top: auto; margin-bottom: auto;}
89
90
 
90
91
  .md-tide-margin-top-0 {margin-top: 0;}
91
92
  .md-tide-margin-top-1\/4 {margin-top: var(--tide-spacing-1\/4);}
@@ -93,7 +94,7 @@
93
94
  .md-tide-margin-top-1 {margin-top: var(--tide-spacing-1);}
94
95
  .md-tide-margin-top-2 {margin-top: var(--tide-spacing-2);}
95
96
  .md-tide-margin-top-4 {margin-top: var(--tide-spacing-4);}
96
- .md-tide-margin-top-auto {margin-top: var(--tide-spacing-auto);}
97
+ .md-tide-margin-top-auto {margin-top: auto;}
97
98
 
98
99
  .md-tide-margin-right-0 {margin-right: 0;}
99
100
  .md-tide-margin-right-1\/4 {margin-right: var(--tide-spacing-1\/4);}
@@ -109,7 +110,7 @@
109
110
  .md-tide-margin-bottom-1 {margin-bottom: var(--tide-spacing-1);}
110
111
  .md-tide-margin-bottom-2 {margin-bottom: var(--tide-spacing-2);}
111
112
  .md-tide-margin-bottom-4 {margin-bottom: var(--tide-spacing-4);}
112
- .md-tide-margin-bottom-auto {margin-bottom: var(--tide-spacing-auto);}
113
+ .md-tide-margin-bottom-auto {margin-bottom: auto;}
113
114
 
114
115
  .md-tide-margin-left-0 {margin-left: 0;}
115
116
  .md-tide-margin-left-1\/4 {margin-left: var(--tide-spacing-1\/4);}
@@ -223,8 +224,6 @@
223
224
  .md-tide-max-height-full {max-height: 100%;}
224
225
  .md-tide-min-height-0 {min-height: 0;}
225
226
 
226
- .md-tide-width-container {max-width: 1168px;}
227
-
228
227
  .md-tide-width-auto {width: auto;}
229
228
  .md-tide-width-0 {width: 0;}
230
229
  .md-tide-width-full {width: 100%;}
@@ -233,6 +232,9 @@
233
232
  .md-tide-height-0 {height: 0;}
234
233
  .md-tide-height-full {height: 100%;}
235
234
 
235
+ /* Deprecated */
236
+ .md-tide-width-container {max-width: 1168px;}
237
+
236
238
  /* Background */
237
239
  .md-tide-bg-initial {background-color: initial;}
238
240
 
@@ -321,6 +323,7 @@
321
323
 
322
324
  .md-tide-isolate {isolation: isolate;}
323
325
 
326
+ /* Deprecated */
324
327
  .md-tide-leading-default {line-height: 1.4;}
325
328
  .md-tide-leading-normal {line-height: normal;}
326
329
 
@@ -41,6 +41,7 @@
41
41
  .sm-tide-axis1-between {justify-content: space-between;}
42
42
  .sm-tide-axis1-center {justify-content: center;}
43
43
  .sm-tide-axis1-end {justify-content: end;}
44
+ .sm-tide-axis1-start {justify-content: start;}
44
45
 
45
46
  .sm-tide-axis2-around {align-items: space-around;}
46
47
  .sm-tide-axis2-center {align-items: center;}
@@ -69,6 +70,7 @@
69
70
  .sm-tide-margin-1 {margin: var(--tide-spacing-1);}
70
71
  .sm-tide-margin-2 {margin: var(--tide-spacing-2);}
71
72
  .sm-tide-margin-4 {margin: var(--tide-spacing-4);}
73
+ .sm-tide-margin-auto {margin: auto;}
72
74
 
73
75
  .sm-tide-margin-x-0 {margin-left: 0; margin-right: 0;}
74
76
  .sm-tide-margin-x-1\/4 {margin-left: var(--tide-spacing-1\/4); margin-right: var(--tide-spacing-1\/4);}
@@ -84,7 +86,7 @@
84
86
  .sm-tide-margin-y-1 {margin-top: var(--tide-spacing-1); margin-bottom: var(--tide-spacing-1);}
85
87
  .sm-tide-margin-y-2 {margin-top: var(--tide-spacing-2); margin-bottom: var(--tide-spacing-2);}
86
88
  .sm-tide-margin-y-4 {margin-top: var(--tide-spacing-4); margin-bottom: var(--tide-spacing-4);}
87
- .sm-tide-margin-y-auto {margin-top: var(--tide-spacing-auto); margin-bottom: var(--tide-spacing-auto);}
89
+ .sm-tide-margin-y-auto {margin-top: auto; margin-bottom: auto;}
88
90
 
89
91
  .sm-tide-margin-top-0 {margin-top: 0;}
90
92
  .sm-tide-margin-top-1\/4 {margin-top: var(--tide-spacing-1\/4);}
@@ -92,7 +94,7 @@
92
94
  .sm-tide-margin-top-1 {margin-top: var(--tide-spacing-1);}
93
95
  .sm-tide-margin-top-2 {margin-top: var(--tide-spacing-2);}
94
96
  .sm-tide-margin-top-4 {margin-top: var(--tide-spacing-4);}
95
- .sm-tide-margin-top-auto {margin-top: var(--tide-spacing-auto);}
97
+ .sm-tide-margin-top-auto {margin-top: auto;}
96
98
 
97
99
  .sm-tide-margin-right-0 {margin-right: 0;}
98
100
  .sm-tide-margin-right-1\/4 {margin-right: var(--tide-spacing-1\/4);}
@@ -108,7 +110,7 @@
108
110
  .sm-tide-margin-bottom-1 {margin-bottom: var(--tide-spacing-1);}
109
111
  .sm-tide-margin-bottom-2 {margin-bottom: var(--tide-spacing-2);}
110
112
  .sm-tide-margin-bottom-4 {margin-bottom: var(--tide-spacing-4);}
111
- .sm-tide-margin-bottom-auto {margin-bottom: var(--tide-spacing-auto);}
113
+ .sm-tide-margin-bottom-auto {margin-bottom: auto;}
112
114
 
113
115
  .sm-tide-margin-left-0 {margin-left: 0;}
114
116
  .sm-tide-margin-left-1\/4 {margin-left: var(--tide-spacing-1\/4);}
@@ -222,8 +224,6 @@
222
224
  .sm-tide-max-height-full {max-height: 100%;}
223
225
  .sm-tide-min-height-0 {min-height: 0;}
224
226
 
225
- .sm-tide-width-container {max-width: 1168px;}
226
-
227
227
  .sm-tide-width-auto {width: auto;}
228
228
  .sm-tide-width-0 {width: 0;}
229
229
  .sm-tide-width-full {width: 100%;}
@@ -232,6 +232,9 @@
232
232
  .sm-tide-height-0 {height: 0;}
233
233
  .sm-tide-height-full {height: 100%;}
234
234
 
235
+ /* Deprecated */
236
+ .sm-tide-width-container {max-width: 1168px;}
237
+
235
238
  /* Background */
236
239
  .sm-tide-bg-initial {background-color: initial;}
237
240
 
@@ -320,6 +323,7 @@
320
323
 
321
324
  .sm-tide-isolate {isolation: isolate;}
322
325
 
326
+ /* Deprecated */
323
327
  .sm-tide-leading-default {line-height: 1.4;}
324
328
  .sm-tide-leading-normal {line-height: normal;}
325
329
 
@@ -1,4 +1,4 @@
1
- @media (min-width: 1232px) {
1
+ @media (min-width: 1920px) {
2
2
  /* Reusable CSS Utility Library */
3
3
  /* Position */
4
4
  .xl-tide-position-absolute {position: absolute;}
@@ -41,6 +41,7 @@
41
41
  .xl-tide-axis1-between {justify-content: space-between;}
42
42
  .xl-tide-axis1-center {justify-content: center;}
43
43
  .xl-tide-axis1-end {justify-content: end;}
44
+ .xl-tide-axis1-start {justify-content: start;}
44
45
 
45
46
  .xl-tide-axis2-around {align-items: space-around;}
46
47
  .xl-tide-axis2-center {align-items: center;}
@@ -69,6 +70,7 @@
69
70
  .xl-tide-margin-1 {margin: var(--tide-spacing-1);}
70
71
  .xl-tide-margin-2 {margin: var(--tide-spacing-2);}
71
72
  .xl-tide-margin-4 {margin: var(--tide-spacing-4);}
73
+ .xl-tide-margin-auto {margin: auto;}
72
74
 
73
75
  .xl-tide-margin-x-0 {margin-left: 0; margin-right: 0;}
74
76
  .xl-tide-margin-x-1\/4 {margin-left: var(--tide-spacing-1\/4); margin-right: var(--tide-spacing-1\/4);}
@@ -84,7 +86,7 @@
84
86
  .xl-tide-margin-y-1 {margin-top: var(--tide-spacing-1); margin-bottom: var(--tide-spacing-1);}
85
87
  .xl-tide-margin-y-2 {margin-top: var(--tide-spacing-2); margin-bottom: var(--tide-spacing-2);}
86
88
  .xl-tide-margin-y-4 {margin-top: var(--tide-spacing-4); margin-bottom: var(--tide-spacing-4);}
87
- .xl-tide-margin-y-auto {margin-top: var(--tide-spacing-auto); margin-bottom: var(--tide-spacing-auto);}
89
+ .xl-tide-margin-y-auto {margin-top: auto; margin-bottom: auto;}
88
90
 
89
91
  .xl-tide-margin-top-0 {margin-top: 0;}
90
92
  .xl-tide-margin-top-1\/4 {margin-top: var(--tide-spacing-1\/4);}
@@ -92,7 +94,7 @@
92
94
  .xl-tide-margin-top-1 {margin-top: var(--tide-spacing-1);}
93
95
  .xl-tide-margin-top-2 {margin-top: var(--tide-spacing-2);}
94
96
  .xl-tide-margin-top-4 {margin-top: var(--tide-spacing-4);}
95
- .xl-tide-margin-top-auto {margin-top: var(--tide-spacing-auto);}
97
+ .xl-tide-margin-top-auto {margin-top: auto;}
96
98
 
97
99
  .xl-tide-margin-right-0 {margin-right: 0;}
98
100
  .xl-tide-margin-right-1\/4 {margin-right: var(--tide-spacing-1\/4);}
@@ -108,7 +110,7 @@
108
110
  .xl-tide-margin-bottom-1 {margin-bottom: var(--tide-spacing-1);}
109
111
  .xl-tide-margin-bottom-2 {margin-bottom: var(--tide-spacing-2);}
110
112
  .xl-tide-margin-bottom-4 {margin-bottom: var(--tide-spacing-4);}
111
- .xl-tide-margin-bottom-auto {margin-bottom: var(--tide-spacing-auto);}
113
+ .xl-tide-margin-bottom-auto {margin-bottom: auto;}
112
114
 
113
115
  .xl-tide-margin-left-0 {margin-left: 0;}
114
116
  .xl-tide-margin-left-1\/4 {margin-left: var(--tide-spacing-1\/4);}
@@ -222,8 +224,6 @@
222
224
  .xl-tide-max-height-full {max-height: 100%;}
223
225
  .xl-tide-min-height-0 {min-height: 0;}
224
226
 
225
- .xl-tide-width-container {max-width: 1168px;}
226
-
227
227
  .xl-tide-width-auto {width: auto;}
228
228
  .xl-tide-width-0 {width: 0;}
229
229
  .xl-tide-width-full {width: 100%;}
@@ -232,6 +232,9 @@
232
232
  .xl-tide-height-0 {height: 0;}
233
233
  .xl-tide-height-full {height: 100%;}
234
234
 
235
+ /* Deprecated */
236
+ .xl-tide-width-container {max-width: 1168px;}
237
+
235
238
  /* Background */
236
239
  .xl-tide-bg-initial {background-color: initial;}
237
240
 
@@ -320,6 +323,7 @@
320
323
 
321
324
  .xl-tide-isolate {isolation: isolate;}
322
325
 
326
+ /* Deprecated */
323
327
  .xl-tide-leading-default {line-height: 1.4;}
324
328
  .xl-tide-leading-normal {line-height: normal;}
325
329
 
@@ -40,6 +40,7 @@
40
40
  .tide-axis1-between {justify-content: space-between;}
41
41
  .tide-axis1-center {justify-content: center;}
42
42
  .tide-axis1-end {justify-content: end;}
43
+ .tide-axis1-start {justify-content: start;}
43
44
 
44
45
  .tide-axis2-around {align-items: space-around;}
45
46
  .tide-axis2-center {align-items: center;}
@@ -68,6 +69,7 @@
68
69
  .tide-margin-1 {margin: var(--tide-spacing-1);}
69
70
  .tide-margin-2 {margin: var(--tide-spacing-2);}
70
71
  .tide-margin-4 {margin: var(--tide-spacing-4);}
72
+ .tide-margin-auto {margin: auto;}
71
73
 
72
74
  .tide-margin-x-0 {margin-left: 0; margin-right: 0;}
73
75
  .tide-margin-x-1\/4 {margin-left: var(--tide-spacing-1\/4); margin-right: var(--tide-spacing-1\/4);}
@@ -83,7 +85,7 @@
83
85
  .tide-margin-y-1 {margin-top: var(--tide-spacing-1); margin-bottom: var(--tide-spacing-1);}
84
86
  .tide-margin-y-2 {margin-top: var(--tide-spacing-2); margin-bottom: var(--tide-spacing-2);}
85
87
  .tide-margin-y-4 {margin-top: var(--tide-spacing-4); margin-bottom: var(--tide-spacing-4);}
86
- .tide-margin-y-auto {margin-top: var(--tide-spacing-auto); margin-bottom: var(--tide-spacing-auto);}
88
+ .tide-margin-y-auto {margin-top: auto; margin-bottom: auto;}
87
89
 
88
90
  .tide-margin-top-0 {margin-top: 0;}
89
91
  .tide-margin-top-1\/4 {margin-top: var(--tide-spacing-1\/4);}
@@ -91,7 +93,7 @@
91
93
  .tide-margin-top-1 {margin-top: var(--tide-spacing-1);}
92
94
  .tide-margin-top-2 {margin-top: var(--tide-spacing-2);}
93
95
  .tide-margin-top-4 {margin-top: var(--tide-spacing-4);}
94
- .tide-margin-top-auto {margin-top: var(--tide-spacing-auto);}
96
+ .tide-margin-top-auto {margin-top: auto;}
95
97
 
96
98
  .tide-margin-right-0 {margin-right: 0;}
97
99
  .tide-margin-right-1\/4 {margin-right: var(--tide-spacing-1\/4);}
@@ -107,7 +109,7 @@
107
109
  .tide-margin-bottom-1 {margin-bottom: var(--tide-spacing-1);}
108
110
  .tide-margin-bottom-2 {margin-bottom: var(--tide-spacing-2);}
109
111
  .tide-margin-bottom-4 {margin-bottom: var(--tide-spacing-4);}
110
- .tide-margin-bottom-auto {margin-bottom: var(--tide-spacing-auto);}
112
+ .tide-margin-bottom-auto {margin-bottom: auto;}
111
113
 
112
114
  .tide-margin-left-0 {margin-left: 0;}
113
115
  .tide-margin-left-1\/4 {margin-left: var(--tide-spacing-1\/4);}
@@ -221,8 +223,6 @@
221
223
  .tide-max-height-full {max-height: 100%;}
222
224
  .tide-min-height-0 {min-height: 0;}
223
225
 
224
- .tide-width-container {max-width: 1168px;}
225
-
226
226
  .tide-width-auto {width: auto;}
227
227
  .tide-width-0 {width: 0;}
228
228
  .tide-width-full {width: 100%;}
@@ -231,6 +231,9 @@
231
231
  .tide-height-0 {height: 0;}
232
232
  .tide-height-full {height: 100%;}
233
233
 
234
+ /* Deprecated */
235
+ .tide-width-container {max-width: 1168px;}
236
+
234
237
  /* Background */
235
238
  .tide-bg-initial {background-color: initial;}
236
239
 
@@ -319,6 +322,7 @@
319
322
 
320
323
  .tide-isolate {isolation: isolate;}
321
324
 
325
+ /* Deprecated */
322
326
  .tide-leading-default {line-height: 1.4;}
323
327
  .tide-leading-normal {line-height: normal;}
324
328
 
@@ -6,6 +6,8 @@
6
6
  import { PRIORITY } from '@/types/Priority';
7
7
  import { CSS } from '@/types/Styles';
8
8
 
9
+ import type { Ref } from 'vue';
10
+
9
11
  type Props = {
10
12
  bleed?: number;
11
13
  isFloating?: boolean;
@@ -26,10 +28,16 @@
26
28
  title: undefined,
27
29
  });
28
30
 
29
- const emit = defineEmits(['change']);
31
+ type Emits = {
32
+ (event: 'slideChange', slideIndex: number): void;
33
+ (event: 'slidesAddedToView', slidesInView: number[]): void;
34
+ };
30
35
 
31
- const containerRef = ref();
36
+ const emit = defineEmits<Emits>();
32
37
 
38
+ const containerRef: Ref<HTMLDivElement | null> = ref(null);
39
+ const slideObserver = ref<IntersectionObserver | null>(null);
40
+ const slotObserver = ref<MutationObserver | null>(null);
33
41
  const contentRightEdge = ref();
34
42
  const contentWidth = ref();
35
43
  const currentSlide = ref(0);
@@ -42,6 +50,7 @@
42
50
 
43
51
  const updateContainerBleed = () => {
44
52
  if (props.bleed == undefined) return;
53
+ if (containerRef.value === null) return;
45
54
 
46
55
  if (isLastSlide.value && showButtons.value) {
47
56
  // Prevent gradient from bleeding off left edge in last position.
@@ -61,17 +70,21 @@
61
70
  * the frame.
62
71
  */
63
72
  const measureCurrentSlide = () => {
64
- // Get left offset of each slide.
65
- const slideOffsets = Array.from(containerRef.value.children).map((slide: any) => slide.offsetLeft);
73
+ const container = containerRef.value;
74
+ if (!container) return;
75
+
76
+ // Cast once, so TS knows these are HTMLElements
77
+ const slideOffsets = Array.from(container.children as HTMLCollectionOf<HTMLElement>).map(
78
+ (slide) => slide.offsetLeft
79
+ );
66
80
 
67
81
  if (slideOffsets.length === 0) return;
68
82
 
69
- // Get closest offset to current scroll position.
70
- const closestSlideOffset = slideOffsets.reduce((prev, curr) => {
71
- return Math.abs(curr - containerRef.value.scrollLeft) < Math.abs(prev - containerRef.value.scrollLeft)
72
- ? curr
73
- : prev;
74
- });
83
+ const scrollLeft = container.scrollLeft;
84
+
85
+ const closestSlideOffset = slideOffsets.reduce((prev, curr) =>
86
+ Math.abs(curr - scrollLeft) < Math.abs(prev - scrollLeft) ? curr : prev
87
+ );
75
88
 
76
89
  currentSlide.value = slideOffsets.indexOf(closestSlideOffset);
77
90
 
@@ -79,6 +92,7 @@
79
92
  };
80
93
 
81
94
  const measureDom = () => {
95
+ if (containerRef.value === null) return;
82
96
  contentRightEdge.value = containerRef.value.scrollLeft + containerRef.value.clientWidth;
83
97
  contentWidth.value = containerRef.value.scrollWidth;
84
98
  frameWidth.value = containerRef.value.clientWidth;
@@ -97,17 +111,19 @@
97
111
  };
98
112
 
99
113
  const scrollToSlide = (slideIndex: number) => {
114
+ if (containerRef.value === null) return;
100
115
  containerRef.value.scrollTo({
101
116
  behavior: 'smooth',
102
- left: containerRef.value.children[slideIndex].offsetLeft,
117
+ left: (containerRef.value.children[slideIndex] as HTMLElement).offsetLeft,
103
118
  });
104
119
  };
105
120
 
106
121
  const showNextSlide = () => {
122
+ if (containerRef.value === null) return;
107
123
  if (contentRightEdge.value > contentWidth.value) {
108
124
  containerRef.value.scrollTo({
109
125
  behavior: 'smooth',
110
- left: contentWidth,
126
+ left: contentWidth.value,
111
127
  });
112
128
  } else if (!isLastSlide.value) {
113
129
  scrollToSlide(currentSlide.value + 1);
@@ -120,13 +136,52 @@
120
136
  }
121
137
  };
122
138
 
139
+ const observeSlides = () => {
140
+ const options = {
141
+ root: containerRef?.value,
142
+ rootMargin: '0px',
143
+ threshold: 0.5,
144
+ };
145
+
146
+ slideObserver.value = new IntersectionObserver((entries) => {
147
+ let slides: number[] = [];
148
+
149
+ entries.forEach((entry) => {
150
+ const slideIndex = Array.from(containerRef.value?.children ?? []).indexOf(entry.target);
151
+ if (entry.isIntersecting) {
152
+ slides.push(slideIndex);
153
+ }
154
+ });
155
+
156
+ if (slides.length > 0) emit('slidesAddedToView', slides);
157
+ }, options);
158
+ Array.from(containerRef.value?.children ?? []).forEach((child) => {
159
+ if (slideObserver.value) slideObserver.value.observe(child);
160
+ });
161
+ };
162
+
163
+ const observeSlot = () => {
164
+ const observerCallback = () => {
165
+ observeSlides();
166
+ };
167
+ slotObserver.value = new MutationObserver(observerCallback);
168
+ if (containerRef.value) slotObserver.value.observe(containerRef.value, { childList: true });
169
+ };
170
+
123
171
  onMounted(() => {
172
+ if (window) {
173
+ window.addEventListener('resize', measureDom);
174
+ }
175
+
124
176
  measureDom();
125
- window.addEventListener('resize', measureDom);
177
+ observeSlides();
178
+ observeSlot();
126
179
  });
127
180
 
128
181
  onUnmounted(() => {
129
182
  window.removeEventListener('resize', measureDom);
183
+ slideObserver.value?.disconnect();
184
+ slotObserver.value?.disconnect();
130
185
  });
131
186
 
132
187
  onUpdated(() => {
@@ -134,7 +189,7 @@
134
189
  });
135
190
 
136
191
  watch(currentSlide, () => {
137
- emit('change', currentSlide.value);
192
+ emit('slideChange', currentSlide.value);
138
193
  });
139
194
  </script>
140
195
 
@@ -60,13 +60,18 @@
60
60
  4. Serve the Sandbox App locally:
61
61
 
62
62
  `npm run dev`
63
+
63
64
  3. Via NPM Link
65
+
66
+ Note: If using Windows Subsystem for Linux (WSL), both the TIDE repository and the consumer repository need to be pulled down into the Linux environment.
67
+
64
68
  1. From the local instance of TIDE repository, create local package alias:
65
69
 
66
70
  `npm link`
67
71
  2. From the local instance of the consumer repository, leverage local package alias:
68
72
 
69
- `npm link tide-design-system`
73
+ `npm link tide-design-system`
74
+
70
75
  3. Run the local instance of `tide-design-system`.
71
76
  4. Run the local instance of the consumer repository.
72
77
  5. Visit the local instance of the consumer repository in the browser as normal. All structures imported from the `tide-design-system` dependency will now reflect the local instance.
@@ -1,7 +1,9 @@
1
1
  # TIDE Full Integration
2
2
  1. Install dependency from NPM registry:
3
3
 
4
- `npm install tide-design-system`
4
+ `npm install tide-design-system --save-exact`
5
+
6
+ Note: This will install TIDE **without a caret range**, which requires that the dependency be **upgraded manually**, as our [custom semantic versioning](./development.md#publication-tide-tech-lead-only) rules and distribution of QA resources dictate that consumer repositories must thoroughly test for breaking changes during the upgrade process.
5
7
 
6
8
  2. Use CSS utilities:
7
9
  1. Import global utilities:
@@ -22,6 +24,8 @@
22
24
 
23
25
  `import { CSS } from 'tide-design-system';`
24
26
 
27
+ Note: See the [TypeScript CSS constant](../types/Styles.ts) for full details.
28
+
25
29
  4. Leverage CSS utilities via TypeScript CSS constant:
26
30
 
27
31
  `<div :class="[CSS.POSITION.ABSOLUTE]" />`
@@ -1,7 +1,9 @@
1
1
  # TIDE Partial Integration
2
2
  1. Install dependency from NPM registry:
3
3
 
4
- `npm install tide-design-system`
4
+ `npm install tide-design-system --save-exact`
5
+
6
+ Note: This will install TIDE **without a caret range**, which requires that the dependency be **upgraded manually**, as our [custom semantic versioning](./development.md#publication-tide-tech-lead-only) rules and distribution of QA resources dictate that consumer repositories must thoroughly test for breaking changes during the upgrade process.
5
7
 
6
8
  2. Use CSS utilities:
7
9
  1. Import global utilities one of two ways:
@@ -36,6 +38,8 @@
36
38
 
37
39
  `<div class="tide-position-absolute" />`
38
40
 
41
+ Note: See the [CSS utilities](../assets/css/utilities.ts) for full details.
42
+
39
43
  4. Leverage responsive CSS utilities:
40
44
 
41
45
  `<div class="tide-position-relative md-tide-position-absolute" />`
@@ -10,6 +10,14 @@ The first implementation of the TIDE Design System was developed directly within
10
10
  4. CSS utilities
11
11
  5. Unit tests
12
12
 
13
+ ## Status
14
+ 1. The [legacy code](https://github.com/traderinteractive/marketplace) at the top level of the `marketplace` repository uses a [partial integration](./integration-partial.md) of TIDE, making the CSS utilities available globally.
15
+ 1. Dependency controlled by the top level config: [package.json](https://github.com/traderinteractive/marketplace/blob/qa/package.json). **Version must be upgraded manually.**
16
+ 2. Integration controlled by the [Gulp build](https://github.com/search?q=repo%3Atraderinteractive%2Fmarketplace%20tide%20path%3Agulpfile.js&type=code).
17
+ 2. The [redesign code](https://github.com/traderinteractive/marketplace/tree/qa/frontend) within the `/frontend` subdirectory of the `marketplace` repository uses a [full integration](./integration-full.md) of TIDE, making both the CSS utilities and Vue 3 components available for import from any Vue 3 file.
18
+ 1. Dependency controlled by the nested config: [/frontend/package.json](https://github.com/traderinteractive/marketplace/blob/qa/frontend/package.json). **Version must be upgraded manually.**
19
+ 2. Integration controlled by the [Vite build](https://github.com/search?q=repo%3Atraderinteractive%2Fmarketplace%20tide%20path%3Afrontend%2Fvite.config.ts&type=code).
20
+
13
21
  ## Workflow
14
22
  As TIDE structures become available in the TIDE repository, the TIDE team will work to identify redundant structures within the `marketplace` repository, create tickets detailing the work to reimplement these structures, and work with the relevant product teams to determine priority and ownership of these tasks.
15
23
 
@@ -63,3 +71,4 @@ As TIDE structures become available in the TIDE repository, the TIDE team will w
63
71
 
64
72
  7. Delete unused [JS constants](https://github.com/traderinteractive/marketplace/blob/qa/frontend/src/types/Styles.ts) (CSS_OLD)
65
73
  8. Delete unused [CSS utilities](https://github.com/traderinteractive/marketplace/blob/qa/frontend/src/assets/css/utilities.css)
74
+ 9. Run `npm run precommit` from the `/frontend` directory to identify (and potentially autofix) any ESLint, TypeScript, and/or Vitest issues, as the build server will reject any source branch that contains syntax violations or failing unit tests.
@@ -1,7 +1,7 @@
1
1
  /* eslint vue/sort-keys: 0 */
2
2
 
3
3
  import Border from '@/stories/FoundationsBorder.stories';
4
- import Gap from '@/stories/FoundationsGap.stories';
4
+ import Flexbox from '@/stories/FoundationsFlexbox.stories';
5
5
  import Margin from '@/stories/FoundationsMargin.stories';
6
6
  import Padding from '@/stories/FoundationsPadding.stories';
7
7
  import Shadow from '@/stories/FoundationsShadow.stories';
@@ -93,7 +93,7 @@ export default {
93
93
  argTypes: {
94
94
  ...Border.argTypes,
95
95
  ...Shadow.argTypes,
96
- ...Gap.argTypes,
96
+ ...Flexbox.argTypes,
97
97
  ...Padding.argTypes,
98
98
  children: {
99
99
  control: 'text',
@@ -69,13 +69,13 @@ export default {
69
69
  argTypes: {
70
70
  flexAxis1: {
71
71
  ...formatArgType({ FLEX_AXIS1 }),
72
- description: 'Dictates alignment of children along primary axis',
73
- name: 'Flex Axis Primary',
72
+ description: 'Dictates alignment of children along main axis',
73
+ name: 'Main Axis',
74
74
  },
75
75
  flexAxis2: {
76
76
  ...formatArgType({ FLEX_AXIS2 }),
77
- description: 'Dictates alignment of children along secondary axis',
78
- name: 'Flex Axis Secondary',
77
+ description: 'Dictates alignment of children along cross axis',
78
+ name: 'Cross Axis',
79
79
  },
80
80
  flexDirection: {
81
81
  ...formatArgType({ FLEX_DIRECTION }),
@@ -84,7 +84,7 @@ export default {
84
84
  },
85
85
  flexGap: {
86
86
  ...formatArgType({ GAP }),
87
- description: 'Dictates vertical and/or horizontal spacing between elements within a flexbox container',
87
+ description: 'Dictates spacing between elements along the main axis',
88
88
  name: 'Flex Gap',
89
89
  },
90
90
  flexWrap: {
@@ -103,7 +103,7 @@ export default {
103
103
  parameters,
104
104
  render,
105
105
  tags: ['autodocs'],
106
- title: 'Utilities/Gap',
106
+ title: 'Utilities/Flexbox',
107
107
  };
108
108
 
109
109
  export const Default = {};