@documental-xyz/core 0.1.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 (114) hide show
  1. package/README.md +424 -0
  2. package/integration.ts +113 -0
  3. package/package.json +83 -0
  4. package/src/admin/admin.astro +29 -0
  5. package/src/assets/scripts/App.js +70 -0
  6. package/src/assets/scripts/EnteringAnimations.js +34 -0
  7. package/src/assets/scripts/MapBoxHandler.js +680 -0
  8. package/src/assets/scripts/ScrollProgressionBar.js +24 -0
  9. package/src/assets/scripts/utils/ScrollObserver.js +166 -0
  10. package/src/assets/styles/config/_breakpoints.scss +37 -0
  11. package/src/assets/styles/config/_colors.scss +8 -0
  12. package/src/assets/styles/config/_config.scss +5 -0
  13. package/src/assets/styles/config/_functions.scss +90 -0
  14. package/src/assets/styles/config/_grrr.configs.scss +7 -0
  15. package/src/assets/styles/config/_mixins.scss +207 -0
  16. package/src/assets/styles/config/_type.scss +175 -0
  17. package/src/assets/styles/config/_vars.scss +16 -0
  18. package/src/assets/styles/globals/_content.scss +47 -0
  19. package/src/assets/styles/globals/_grrr.scss +18 -0
  20. package/src/assets/styles/globals/_html.scss +25 -0
  21. package/src/assets/styles/globals/_lists.scss +19 -0
  22. package/src/assets/styles/globals/_map-anchors.scss +32 -0
  23. package/src/assets/styles/globals/_reset.scss +240 -0
  24. package/src/assets/styles/globals/_reveal-animations.scss +104 -0
  25. package/src/assets/styles/globals/_root.scss +6 -0
  26. package/src/assets/styles/globals/_scroll-progression-bar.scss +8 -0
  27. package/src/assets/styles/main.scss +17 -0
  28. package/src/assets/styles/utils/.gitkeep +0 -0
  29. package/src/assets/styles/utils/grrr/_grrr.scss +433 -0
  30. package/src/assets/styles/utils/list-styles/_list-styles.scss +190 -0
  31. package/src/components/AnimationToggle.astro +19 -0
  32. package/src/components/BigNumbers.astro +83 -0
  33. package/src/components/Button.astro +49 -0
  34. package/src/components/Caption.astro +15 -0
  35. package/src/components/Card.astro +68 -0
  36. package/src/components/Cards.astro +66 -0
  37. package/src/components/CardsCall.astro +125 -0
  38. package/src/components/ChartBar.astro +217 -0
  39. package/src/components/ChartPercentage.astro +137 -0
  40. package/src/components/Column.astro +54 -0
  41. package/src/components/ColumnSticky.astro +129 -0
  42. package/src/components/Columns.astro +139 -0
  43. package/src/components/Compare.astro +266 -0
  44. package/src/components/Cta.astro +242 -0
  45. package/src/components/Gallery.astro +594 -0
  46. package/src/components/Group.astro +140 -0
  47. package/src/components/HtmlEmbed.astro +98 -0
  48. package/src/components/ImageBlock.astro +134 -0
  49. package/src/components/InnerColumns.astro +54 -0
  50. package/src/components/LogosGroup.astro +102 -0
  51. package/src/components/Map.astro +321 -0
  52. package/src/components/MapBox.astro +96 -0
  53. package/src/components/MapView.astro +30 -0
  54. package/src/components/Menu.astro +278 -0
  55. package/src/components/Pullquote.astro +46 -0
  56. package/src/components/Slider.astro +223 -0
  57. package/src/components/Spacer.astro +25 -0
  58. package/src/components/Text.astro +173 -0
  59. package/src/components/TextPlaceholder.astro +98 -0
  60. package/src/components/Timeline.astro +73 -0
  61. package/src/components/TimelineBullet.astro +67 -0
  62. package/src/components/VideoEmbed.astro +99 -0
  63. package/src/content/loader.ts +29 -0
  64. package/src/content/pages/alter-ameacada.md +80 -0
  65. package/src/content/pages/expulsions.md +1447 -0
  66. package/src/content/pages/home.md +346 -0
  67. package/src/content/pages/nhanderekoa-studio-autonoma.md +3113 -0
  68. package/src/content/pages/nhanderekoa-terra-ind/303/255gena-jaragu/303/241.md +3806 -0
  69. package/src/content/pages/nova-landing-page.md +546 -0
  70. package/src/content/pages/territ/303/263rios-de-exce/303/247/303/243o.md +2199 -0
  71. package/src/content/pages/teste-alter-do-chao.md +955 -0
  72. package/src/content/pages/teste-layout.md +1484 -0
  73. package/src/content/pages/thiago.md +93 -0
  74. package/src/content/schema/blog.ts +11 -0
  75. package/src/content/schema/geostorys.ts +13 -0
  76. package/src/content/schema/index.ts +3 -0
  77. package/src/content/schema/pages.ts +494 -0
  78. package/src/content.config.ts +49 -0
  79. package/src/env.d.ts +1 -0
  80. package/src/integration/override-aliases.ts +67 -0
  81. package/src/layouts/components/ButtonLayout.astro +8 -0
  82. package/src/layouts/components/CardLayout.astro +8 -0
  83. package/src/layouts/components/CardsCallLayout.astro +26 -0
  84. package/src/layouts/components/CardsLayout.astro +14 -0
  85. package/src/layouts/components/ChartBarLayout.astro +21 -0
  86. package/src/layouts/components/ChartPercentageLayout.astro +17 -0
  87. package/src/layouts/components/ColumnLayout.astro +11 -0
  88. package/src/layouts/components/ColumnStickyLayout.astro +10 -0
  89. package/src/layouts/components/ColumnsLayout.astro +13 -0
  90. package/src/layouts/components/CompareLayout.astro +22 -0
  91. package/src/layouts/components/CtaLayout.astro +91 -0
  92. package/src/layouts/components/GalleryLayout.astro +24 -0
  93. package/src/layouts/components/GroupLayout.astro +53 -0
  94. package/src/layouts/components/HtmlEmbedLayout.astro +18 -0
  95. package/src/layouts/components/ImageBlockLayout.astro +20 -0
  96. package/src/layouts/components/InnerColumnsLayout.astro +14 -0
  97. package/src/layouts/components/LogosGroupLayout.astro +22 -0
  98. package/src/layouts/components/MapLayout.astro +41 -0
  99. package/src/layouts/components/MapViewLayout.astro +8 -0
  100. package/src/layouts/components/MapboxLayout.astro +248 -0
  101. package/src/layouts/components/PullquoteLayout.astro +13 -0
  102. package/src/layouts/components/SliderLayout.astro +18 -0
  103. package/src/layouts/components/SpacerLayout.astro +8 -0
  104. package/src/layouts/components/TextLayout.astro +17 -0
  105. package/src/layouts/components/TextPlaceholderLayout.astro +7 -0
  106. package/src/layouts/components/TimelineBulletLayout.astro +14 -0
  107. package/src/layouts/components/TimelineLayout.astro +10 -0
  108. package/src/layouts/components/VideoEmbedLayout.astro +28 -0
  109. package/src/layouts/pages/Layout.astro +90 -0
  110. package/src/layouts/pages/PageLayout.astro +200 -0
  111. package/src/lib/collections.ts +1 -0
  112. package/src/routes/[slug].astro +17 -0
  113. package/src/routes/index.astro +5 -0
  114. package/src/vite/yaml-merge-plugin.ts +234 -0
@@ -0,0 +1,46 @@
1
+ ---
2
+ import Caption from "./Caption.astro";
3
+
4
+ const hasByLine = Astro.slots.has('byline');
5
+ ---
6
+ <div class="pullquote reveal--fadeInLeft">
7
+ <slot />
8
+ {
9
+ hasByLine && (
10
+ <Caption><slot name="byline" /></Caption>
11
+ )
12
+ }
13
+
14
+ </div>
15
+
16
+ <style lang="scss">
17
+ @use "../assets/styles/config/config" as *;
18
+
19
+ .pullquote {
20
+ @include type('h-m');
21
+ font-weight: 600;
22
+
23
+ &:not(:first-child),
24
+ :global(+ *:not(.column)),
25
+ :global(.animation-disabled >) & {
26
+ margin-top: var(--mt-m);
27
+ }
28
+
29
+ @include media-break-down(l) {
30
+ @include type('h-s');
31
+ font-weight: 600;
32
+ }
33
+
34
+ &::before {
35
+ content: '';
36
+ display: block;
37
+ width: 24px;
38
+ height: 20px;
39
+ mask-image: url("data:image/svg+xml,%3Csvg width='24' height='20' viewBox='0 0 24 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_494_4104)'%3E%3Cpath d='M0.0747069 12.4097C0.224121 4.45206 2.08703 0.146326 8.2734 0L9.46553 3.28456C5.96225 3.50405 5.14206 6.05853 5.14206 10.6569H9.76277V20H0C0 17.3724 0 14.7447 0.0747069 12.4082V12.4097ZM14.3104 12.4097C14.4598 4.45206 16.3227 0.146326 22.509 0L23.7012 3.28456C20.1979 3.50405 19.3777 6.05853 19.3777 10.6569H23.9984V20H14.2341C14.2341 17.3724 14.2341 14.7447 14.3088 12.4082L14.3104 12.4097Z' fill='%23FBBAA2'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_494_4104'%3E%3Crect width='24' height='20' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
40
+ mask-repeat: no-repeat;
41
+ mask-size: contain;
42
+ background-color: var(--clr-hl, #000000);
43
+ margin-bottom: 12px;
44
+ }
45
+ }
46
+ </style>
@@ -0,0 +1,223 @@
1
+ ---
2
+ import "swiper/css";
3
+ import "swiper/css/pagination";
4
+ import { Image } from 'astro:assets';
5
+ const { slides } = Astro.props;
6
+ const id = Math.random().toString(36).slice(2, 11)
7
+ ---
8
+
9
+ <div id={id} class="slider reveal--fadeInUp">
10
+ <div class="slider__holder">
11
+ <div class="swiper slider__swiper">
12
+ <div class="swiper-wrapper">
13
+ {
14
+ slides &&
15
+ slides.map((slide) => {
16
+ return (
17
+ <div class="swiper-slide">
18
+ <figure class="slider__slide">
19
+ <Image src={slide.image} alt={slide.caption} width="100%" height="100%" />
20
+ <figcaption>{slide.caption}</figcaption>
21
+ </figure>
22
+ </div>
23
+ );
24
+ })
25
+ }
26
+ </div>
27
+ <div class="swiper-button-prev">
28
+ <svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
29
+ <path d="M22.3599 34.375L24.6293 32.2359L18.6722 26.5718H37.5V23.4282L18.6722 23.4282L24.6293 17.7734L22.3599 15.625L12.5 25L22.3599 34.375Z" fill="#424242"/>
30
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M25 46.875C12.9188 46.875 3.125 37.0812 3.125 25C3.125 12.9188 12.9188 3.125 25 3.125C37.0812 3.125 46.875 12.9188 46.875 25C46.875 37.0812 37.0812 46.875 25 46.875ZM25 50C11.1929 50 0 38.8071 0 25C0 11.1929 11.1929 0 25 0C38.8071 0 50 11.1929 50 25C50 38.8071 38.8071 50 25 50Z" fill="#424242"/>
31
+ </svg>
32
+ </div>
33
+ <div class="swiper-button-next">
34
+ <svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
35
+ <path d="M27.6401 34.375L25.3707 32.2359L31.3278 26.5718H12.5V23.4282L31.3278 23.4282L25.3707 17.7734L27.6401 15.625L37.5 25L27.6401 34.375Z" fill="#424242"/>
36
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M25 46.875C37.0812 46.875 46.875 37.0812 46.875 25C46.875 12.9188 37.0812 3.125 25 3.125C12.9188 3.125 3.125 12.9188 3.125 25C3.125 37.0812 12.9188 46.875 25 46.875ZM25 50C38.8071 50 50 38.8071 50 25C50 11.1929 38.8071 0 25 0C11.1929 0 0 11.1929 0 25C0 38.8071 11.1929 50 25 50Z" fill="#424242"/>
37
+ </svg>
38
+ </div>
39
+ <span class="swiper-pagination"></span>
40
+ </div>
41
+ <div class="slider__footer">
42
+ <span class="slider__pagination"></span>
43
+ <span class="slider__caption"></span>
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <style lang="scss">
49
+ @use "../assets/styles/config/config" as *;
50
+ @use "../assets/styles/utils/grrr/grrr" as *;
51
+
52
+ .slider {
53
+ @extend %grrr--board;
54
+ width: 100%;
55
+ overflow: hidden;
56
+
57
+ &:not(:first-child),
58
+ & :global(+ *:not(.column)),
59
+ :global(.animation-disabled:not(:first-child) >) & {
60
+ margin-top: var(--mt-m);
61
+ }
62
+
63
+ .swiper {
64
+ overflow: visible;
65
+ max-height: 100%;
66
+ }
67
+
68
+ .swiper-slide {
69
+ height: 100%;
70
+ max-height: 85vh;
71
+ aspect-ratio: 1 / 0.6;
72
+ }
73
+
74
+ .swiper-pagination {
75
+ display: none;
76
+ }
77
+
78
+ &__holder {
79
+ grid-column: board-full;
80
+
81
+ @include media-break-up(l) {
82
+ grid-column: board-start 2 / board-end 11;
83
+ }
84
+
85
+ .swiper-button-prev, .swiper-button-next {
86
+ width: fit-content;
87
+ height: fit-content;
88
+ position: absolute;
89
+ bottom: 0;
90
+ z-index: 2;
91
+ cursor: pointer;
92
+
93
+ &:hover {
94
+ opacity: .8;
95
+ }
96
+
97
+ @include media-break-down(l) {
98
+ display: none;
99
+ }
100
+
101
+ &.swiper-button-disabled {
102
+ opacity: .2;
103
+ pointer-events: none;
104
+ }
105
+
106
+ svg {
107
+ display: block;
108
+ }
109
+
110
+ path {
111
+ fill: var(--clr-txt, black);
112
+ }
113
+ }
114
+
115
+ .swiper-button-prev {
116
+ left: calc(-1 * var(--atnl-gutter));
117
+ transform: translateX(-100%);
118
+ }
119
+
120
+ .swiper-button-next {
121
+ right: calc(-1 * var(--atnl-gutter));
122
+ transform: translateX(100%);
123
+ }
124
+ }
125
+
126
+ &__slide {
127
+ height: 100%;
128
+ background-color: rgba(0, 0, 0, 0.05);
129
+ overflow: hidden;
130
+ transition: .5s ease;
131
+
132
+ @include media-break-up(l) {
133
+ .swiper-slide:not(.swiper-slide-active) & {
134
+ transform: scale(.8);
135
+ }
136
+
137
+ .swiper-slide-prev & {
138
+ transform-origin: right top;
139
+ }
140
+
141
+ .swiper-slide-next & {
142
+ transform-origin: left top;
143
+ }
144
+ }
145
+
146
+ img {
147
+ width: 100%;
148
+ height: 100%;
149
+ object-fit: contain;
150
+ }
151
+
152
+ figcaption {
153
+ display: none;
154
+ }
155
+ }
156
+
157
+ &__footer {
158
+ @include type("b-s");
159
+ display: block;
160
+ margin-top: 20px;
161
+ }
162
+
163
+ &__pagination {
164
+ font-variant-numeric: tabular-nums;
165
+ font-weight: 700;
166
+ }
167
+ }
168
+ </style>
169
+
170
+ <script>
171
+ import Swiper from "swiper";
172
+ import { Navigation, Pagination } from "swiper/modules";
173
+
174
+ const swiper = new Swiper(".slider__swiper", {
175
+ spaceBetween: 10,
176
+ modules: [Navigation, Pagination],
177
+ navigation: {
178
+ prevEl: ".swiper-button-prev",
179
+ nextEl: ".swiper-button-next"
180
+ },
181
+ pagination: {
182
+ el: ".swiper-pagination",
183
+ type: "fraction",
184
+ renderFraction: function (currentClass, totalClass) {
185
+ return (
186
+ '<span class="' +
187
+ currentClass +
188
+ '"></span>' +
189
+ "/" +
190
+ '<span class="' +
191
+ totalClass +
192
+ '"></span>'
193
+ );
194
+ },
195
+ },
196
+ on: {
197
+ slideChange: updateCaption,
198
+ init: updateCaption,
199
+ },
200
+ breakpoints: {
201
+ 991: {
202
+ spaceBetween: 40,
203
+ }
204
+ }
205
+ });
206
+
207
+ function updateCaption(swiper) {
208
+ const slider = swiper.el.closest(".slider");
209
+
210
+ let sliderPagination = slider.querySelector(".swiper-pagination");
211
+
212
+
213
+ setTimeout(() => {
214
+ let pagination = slider.querySelector(".slider__pagination");
215
+ let caption = slider.querySelector(".slider__caption");
216
+ caption.innerHTML = " – " + slider.querySelector(
217
+ ".swiper-slide-active figcaption"
218
+ ).innerHTML;
219
+
220
+ pagination.innerText = sliderPagination.innerText;
221
+ }, 250);
222
+ }
223
+ </script>
@@ -0,0 +1,25 @@
1
+ ---
2
+ const {desktop, tablet, mobile} = Astro.props;
3
+ ---
4
+ <div class="spacer"></div>
5
+
6
+ <style lang="scss" define:vars={{ "spacer-d": desktop, "spacer-t": tablet, "spacer-m": mobile }}>
7
+ @use "../assets/styles/config/config" as *;
8
+
9
+ .spacer {
10
+ height: var(--spacer-m, var(--spacer-t, var(--spacer-d)));
11
+
12
+ @include media-break-up(m) {
13
+ height: var(--spacer-t, var(--spacer-d));
14
+ }
15
+
16
+ @include media-break-up(xl) {
17
+ height: var(--spacer-d);
18
+ }
19
+
20
+ &,
21
+ :global(+ *) {
22
+ margin-top: 0!important;
23
+ }
24
+ }
25
+ </style>
@@ -0,0 +1,173 @@
1
+ ---
2
+ const { hasDropCap } = Astro.props
3
+ //hasDropCap recebe booleano
4
+ ---
5
+
6
+ <div class:list={["text reveal--fadeInUp", hasDropCap && "text--has-dropcap"]}>
7
+ <slot />
8
+ </div>
9
+
10
+ <style lang="scss">
11
+ @use "../assets/styles/config/config" as *;
12
+ @use "../assets/styles/utils/list-styles/list-styles" as *;
13
+
14
+ .text {
15
+ &--has-dropcap {
16
+ :global(> p:first-of-type:first-letter) {
17
+ @include type('d-m');
18
+ font-weight: 500;
19
+ color: var(--clr-hl);
20
+ float: left;
21
+ margin-right: 5px;
22
+ margin-top: -4px;
23
+ margin-bottom: -10px;
24
+ }
25
+ }
26
+
27
+ :global(> * + *) {
28
+ margin-top: var(--mt-s, 40px);
29
+ }
30
+
31
+ :global(* + h1),
32
+ :global(* + h2),
33
+ :global(* + h3) {
34
+ margin-top: var(--mt-m, 80px);
35
+ }
36
+
37
+ :global(> p) {
38
+ :global(+ p) {
39
+ margin-top: 1.5em;
40
+ }
41
+ }
42
+
43
+ :global(> h1) {
44
+ @include type('h-xxl');
45
+
46
+ @include media-break-down(l) {
47
+ @include type('h-l');
48
+ }
49
+
50
+ :global(+ *) {
51
+ margin-top: var(--mt-m, 80px);
52
+ }
53
+ }
54
+
55
+ :global(> h2) {
56
+ @include type('h-xl');
57
+
58
+ @include media-break-down(l) {
59
+ @include type('h-m');
60
+ }
61
+
62
+ :global(+ h3),
63
+ :global(+ h4),
64
+ :global(+ h5),
65
+ :global(+ h6) {
66
+ margin-top: var(--mt-s, 40px);
67
+ }
68
+ }
69
+
70
+ :global(> h3) {
71
+ @include type('h-l');
72
+
73
+ @include media-break-down(l) {
74
+ @include type('h-s');
75
+ }
76
+ }
77
+
78
+ :global(> h4) {
79
+ @include type('h-m');
80
+
81
+ @include media-break-down(l) {
82
+ @include type('h-xs');
83
+ }
84
+
85
+ }
86
+
87
+ :global(> h5) {
88
+ @include type('h-s');
89
+
90
+ @include media-break-down(l) {
91
+ @include type('c-m');
92
+ font-weight: 700;
93
+ }
94
+ }
95
+
96
+ :global(> h6) {
97
+ @include type('h-xs');
98
+ @include media-break-down(l) {
99
+ @include type('c-m');
100
+ font-weight: 700;
101
+ }
102
+ }
103
+
104
+ :global(> ul) {
105
+ @extend .atnl-ul;
106
+
107
+ :global(li::before) {
108
+ color: var(--clr-hl);
109
+ }
110
+
111
+ :global(li + li) {
112
+ margin-top: 8px;
113
+ }
114
+ }
115
+
116
+ :global(> ol) {
117
+ --li-marker-sep-end: ".";
118
+ @extend .atnl-ol;
119
+
120
+ :global(li::before) {
121
+ color: var(--clr-hl);
122
+ }
123
+
124
+ :global(li + li) {
125
+ margin-top: 8px;
126
+ }
127
+ }
128
+
129
+ :global(> blockquote) {
130
+ margin-inline: 0;
131
+ margin-bottom: 0;
132
+ padding-left: 1.5em;
133
+ position: relative;
134
+
135
+ &::before {
136
+ content: '';
137
+ display: block;
138
+ width: 4px;
139
+ height: calc(100% - 10px);
140
+ position: absolute;
141
+ left: 0;
142
+ top: 5px;
143
+ background-color: var(--clr-hl);
144
+ }
145
+ }
146
+
147
+ :global(> iframe) {
148
+ max-width: 100%;
149
+ height: auto;
150
+ aspect-ratio: 16 / 9;
151
+ display: block;
152
+
153
+ &,
154
+ :global(+ *) {
155
+ margin-top: 80px;
156
+ }
157
+ }
158
+
159
+ :global(a) {
160
+ text-decoration: underline;
161
+ text-decoration-color: var(--clr-hl);
162
+ text-decoration-thickness: 2px;
163
+ text-decoration-skip-ink: none;
164
+ text-underline-offset: 0;
165
+ transition: ease color 0.5s;
166
+
167
+ &:hover {
168
+ color: var(--clr-hl);
169
+ }
170
+ }
171
+
172
+ }
173
+ </style>
@@ -0,0 +1,98 @@
1
+ ---
2
+ // Exemplo de texto para teste
3
+ ---
4
+
5
+ <h1>
6
+ Et voluptate dolor quis qui eiusmod fugiat in Lorem exercitation consequat ex
7
+ labore quis laboris.
8
+ </h1>
9
+
10
+ <p>
11
+ Soluptate est labore sit tempor exercitation nisi eiusmod pariatur magna est
12
+ aliqua. Magna laborum elit mollit ea occaecat incididunt Lorem Lorem
13
+ incididunt nisi esse fugiat anim exercitation. Mollit velit laboris
14
+ adipisicing enim ad eiusmod deserunt veniam nulla adipisicing amet pariatur
15
+ nostrud exercitation. Velit laborum occaecat nulla ex nulla esse laborum ex
16
+ duis duis magna. Ipsum laboris commodo do do eiusmod. Consectetur culpa fugiat
17
+ occaecat enim ullamco tempor amet velit duis culpa commodo dolor minim. Ea
18
+ sunt culpa id ea amet.
19
+ </p>
20
+
21
+ <p>
22
+ Voluptate est labore sit tempor exercitation nisi eiusmod pariatur magna est
23
+ aliqua. Magna laborum elit mollit ea occaecat incididunt Lorem Lorem
24
+ incididunt nisi esse fugiat anim exercitation. Mollit velit laboris
25
+ adipisicing enim ad eiusmod deserunt veniam nulla adipisicing amet pariatur
26
+ nostrud exercitation. Velit laborum occaecat nulla ex nulla esse laborum ex
27
+ duis duis magna. Ipsum laboris commodo do do eiusmod. Consectetur culpa fugiat
28
+ occaecat enim ullamco tempor amet velit duis culpa commodo dolor minim. Ea
29
+ sunt culpa id ea amet.
30
+ </p>
31
+
32
+ <ul>
33
+ <li>Lorem culpa nostrud magna ipsum.</li>
34
+ <li>Lorem culpa nostrud magna ipsum.</li>
35
+ <li>Lorem culpa nostrud magna ipsum.</li>
36
+ <li>
37
+ Lorem culpa nostrud magna ipsum. Lorem culpa nostrud magna ipsum. Lorem
38
+ culpa nostrud magna ipsum. Lorem culpa nostrud magna ipsum.
39
+ </li>
40
+ </ul>
41
+
42
+ <ol>
43
+ <li>Lorem culpa nostrud magna ipsum.</li>
44
+ <li>Lorem culpa nostrud magna ipsum.</li>
45
+ <li>Lorem culpa nostrud magna ipsum.</li>
46
+ <li>
47
+ Lorem culpa nostrud magna ipsum. Lorem culpa nostrud magna ipsum. Lorem
48
+ culpa nostrud magna ipsum. Lorem culpa nostrud magna ipsum.
49
+ </li>
50
+ </ol>
51
+
52
+ <p>
53
+ Ut esse sit aute ea eu. Pariatur est quis laboris sint. Consequat elit esse
54
+ ullamco laboris deserunt labore. Ut ut nisi ullamco minim incididunt ut
55
+ laborum ea reprehenderit dolor voluptate laboris non enim.
56
+ </p>
57
+
58
+ <h2>
59
+ Et magna excepteur est Lorem qui exercitation anim sunt sit pariatur mollit
60
+ </h2>
61
+ <h3>qui exercitation anim sunt sit pariatur</h3>
62
+ <h4>qui exercitation anim sunt sit pariatur</h4>
63
+ <h5>qui exercitation anim sunt sit pariatur</h5>
64
+ <h6>qui exercitation anim sunt sit pariatur</h6>
65
+
66
+ <p>
67
+ Minim consequat incididunt incididunt in laboris voluptate laboris velit. Sunt
68
+ pariatur dolore reprehenderit dolore ipsum voluptate velit ullamco nulla amet
69
+ irure aute enim sunt. Occaecat Lorem dolor exercitation non et. Reprehenderit
70
+ anim excepteur mollit id et mollit officia cillum aliquip aliqua aliquip. Et
71
+ magna excepteur est Lorem qui exercitation anim sunt sit pariatur mollit elit
72
+ ea deserunt ullamco. Nulla consectetur laborum incididunt nisi ea officia
73
+ excepteur nulla fugiat deserunt excepteur in veniam. Ullamco do sunt ad
74
+ consequat elit dolor proident veniam officia cupidatat irure commodo dolor. Eu
75
+ ex dolor fugiat nisi Lorem veniam proident dolor excepteur.
76
+ </p>
77
+ <blockquote>
78
+ Voluptate est labore sit tempor exercitation nisi eiusmod pariatur magna est
79
+ aliqua. Magna laborum elit mollit ea occaecat incididunt Lorem Lorem
80
+ incididunt nisi esse fugiat anim exercitation.
81
+ </blockquote>
82
+ <p>
83
+ Minim incididunt Lorem aliqua adipisicing nulla enim minim incididunt laboris
84
+ voluptate ea commodo sint elit. Sunt occaecat adipisicing aute eiusmod
85
+ reprehenderit do cupidatat irure laboris nostrud. Esse ullamco laborum in
86
+ veniam enim esse fugiat do. Eu velit pariatur tempor culpa enim laborum nisi
87
+ esse cupidatat cillum mollit adipisicing minim aliqua aute. Fugiat ex qui
88
+ velit exercitation anim eu. Duis labore nostrud commodo aute laboris ut culpa
89
+ et duis magna cupidatat tempor.
90
+ </p>
91
+ <p>
92
+ Irure fugiat laboris do. Velit sunt irure tempor sit ea quis aute. Laboris
93
+ sint sunt amet sunt nisi excepteur amet. Incididunt id anim proident non
94
+ irure. Ad ullamco esse cupidatat ut dolor adipisicing aute enim. Nostrud
95
+ consequat consequat ullamco id fugiat ipsum consequat cupidatat pariatur.
96
+ Fugiat ut nisi enim qui aliqua sunt ex ullamco incididunt eiusmod irure Lorem
97
+ velit nostrud.
98
+ </p>
@@ -0,0 +1,73 @@
1
+ <div class="timeline reveal--fadeIn" data-timeline>
2
+ <slot />
3
+ </div>
4
+
5
+ <style lang="scss">
6
+ .timeline {
7
+ padding-left: 32px;
8
+ position: relative;
9
+
10
+ &:not(:first-child),
11
+ :global(+ *:not(.column)),
12
+ :global(.animation-disabled:not(:first-child) >) & {
13
+ margin-top: var(--mt-m);
14
+ }
15
+
16
+ &::after {
17
+ content: '';
18
+ width: 2px;
19
+ // min-height: 100vh;
20
+ height: 0;
21
+ display: block;
22
+ position: absolute;
23
+ left: 5px;
24
+ top: 5px;
25
+ background-color: var(--clr-txt);
26
+ transition: height 1s ease-out 1s;
27
+ }
28
+
29
+ :global(> div:not(:first-child)) {
30
+ margin-top: var(--mt-m);
31
+ }
32
+
33
+ :global(.animation-disabled) &::after,
34
+ &.reveal::after {
35
+ height: 100%;
36
+ }
37
+
38
+ :global(.map__content) &:last-child {
39
+ &::after {
40
+ height: 120%;
41
+ }
42
+ }
43
+ }
44
+ </style>
45
+ <script>
46
+ import ScrollObserver from "../assets/scripts/utils/ScrollObserver";
47
+
48
+ function activeTimelineBullet() {
49
+ const timelineItems = document.querySelectorAll('[data-timeline-bullet]');
50
+
51
+ timelineItems.forEach((item, index) => {
52
+ const scrollObserver = new ScrollObserver();
53
+
54
+ scrollObserver.observe(item, (data) => {
55
+ const { element, isVisible, boundingRect } = data;
56
+
57
+ if(!isVisible) return;
58
+
59
+ const windowStartingPoint = window.innerHeight * .52;
60
+ const isInRange = boundingRect.top <= windowStartingPoint && boundingRect.bottom >= 0;
61
+
62
+ if (isInRange) {
63
+ element.classList.add('active');
64
+ } else {
65
+ element.classList.remove('active');
66
+ }
67
+ });
68
+ });
69
+ }
70
+
71
+ document.addEventListener('DOMContentLoaded', activeTimelineBullet);
72
+
73
+ </script>
@@ -0,0 +1,67 @@
1
+ ---
2
+ const {text} = Astro.props
3
+ ---
4
+ <span class:list={["timeline__bullet", !text && "timeline__bullet--no-text"]} data-timeline-bullet>{text}</span>
5
+
6
+ <style lang="scss">
7
+ @use "../assets/styles/config/config" as *;
8
+
9
+ .timeline__bullet {
10
+ @include type('c-s');
11
+ color: var(--clr-hl);
12
+ display: block;
13
+ margin-bottom: 8px;
14
+ position: relative;
15
+
16
+ &:not(:first-child) {
17
+ margin-top: var(--mt-m);
18
+ }
19
+
20
+ &::before, {
21
+ content: '';
22
+ display: block;
23
+ width: 12px;
24
+ height: 12px;
25
+ background-color: currentColor;
26
+ position: absolute;
27
+ left: -32px;
28
+ transform: translateY(2px);
29
+ z-index: 10;
30
+ transition: .5s ease;
31
+ scale: .5;
32
+ }
33
+
34
+ &::after {
35
+ content: '';
36
+ display: block;
37
+ width: 4px;
38
+ height: 4px;
39
+ background-color: var(--clr-txt);
40
+ position: absolute;
41
+ left: -28px;
42
+ top: 4px;
43
+ transform: translateY(2px);
44
+ opacity: 0;
45
+ z-index: 10;
46
+ transition: .5s ease;
47
+ scale: .5;
48
+ }
49
+
50
+ &.active {
51
+ &::before {
52
+ scale: 1;
53
+ }
54
+ &::after {
55
+ scale: 1;
56
+ opacity: 1;
57
+ }
58
+ }
59
+
60
+ &--no-text {
61
+ &::before,
62
+ &::after {
63
+ transform: translateY(5px);
64
+ }
65
+ }
66
+ }
67
+ </style>