@bagelink/vue 0.0.726 → 0.0.728

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/dist/style.css CHANGED
@@ -1,78 +1,47 @@
1
1
  @import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200");@import url("https://fonts.googleapis.com/css2?family=Lexend:wght@100;200;300;400;500;600;700;800;900&display=swap");
2
- .lightbox-overlay[data-v-c003c59a] {
3
- position: fixed;
4
- top: 0;
5
- left: 0;
6
- width: 100%;
7
- height: 100%;
2
+ .bgl-lightbox-overlay[data-v-b3a3d091] {
8
3
  background: rgba(0, 0, 0, 0.8);
9
- display: flex;
10
- justify-content: center;
11
- align-items: center;
12
- z-index: 1000;
13
4
  }
14
- .lightbox[data-v-c003c59a] {
15
- position: relative;
5
+ .bgl-lightbox[data-v-b3a3d091] {
16
6
  max-height: 90%;
17
- width: 90vw;
18
- text-align: center;
19
7
  }
20
- .close-button[data-v-c003c59a] {
21
- position: fixed;
22
- top: 1rem;
23
- inset-inline-end: 1rem;
8
+ .bgl-lightbox-item[data-v-b3a3d091]{
9
+ animation: 500ms ease bgl-lightbox-load-b3a3d091;
10
+ }
11
+ @keyframes bgl-lightbox-load-b3a3d091 {
12
+ from {
13
+ scale:0.7;
24
14
  }
25
- .lightbox-item[data-v-c003c59a] * {
15
+ to {
16
+ scale:1;
17
+ }
18
+ }
19
+ .bgl-lightbox-item[data-v-b3a3d091] * {
26
20
  max-width: 90%;
27
21
  max-height: calc(80vh - 90px);
28
22
  border-radius: 3px;
23
+ margin: auto;
24
+ animation: 200ms ease bgl-lightbox-load-b3a3d091;
29
25
  }
30
- .navigation[data-v-c003c59a] {
31
- display: flex;
32
- justify-content: space-between;
33
- width: 100%;
34
- position: absolute;
26
+ .navigation[data-v-b3a3d091] {
35
27
  top: 50%;
36
28
  transform: translateY(-50%);
37
29
  }
38
- .navigation-btn[data-v-c003c59a] {
39
- user-select: none;
30
+ .navigation-btn[data-v-b3a3d091] {
40
31
  width: var(--input-height);
41
32
  height: var(--input-height);
42
- border-radius: 100%;
43
33
  }
44
- .thumbnails[data-v-c003c59a] {
45
- display: flex;
46
- justify-content: center;
47
- margin-top: 10px;
48
- overflow: auto;
49
- padding: 1rem;
50
- position: fixed;
51
- bottom: 0;
52
- left: 0;
53
- right: 0;
54
- }
55
- .thumbnail[data-v-c003c59a] {
34
+ .thumbnail[data-v-b3a3d091] {
56
35
  height: 50px;
57
36
  width: 50px;
58
- object-fit: cover;
59
- margin: 0 5px;
60
- cursor: pointer;
61
- opacity: 0.5;
62
- border-radius: 3px;
63
- transition: all 200ms ease;
64
- background-color: white;
65
- display: flex;
66
- justify-content: center;
67
- align-items: center;
68
37
  }
69
- .thumbnail[data-v-c003c59a]:hover {
38
+ .thumbnail[data-v-b3a3d091]:hover {
70
39
  opacity: 1;
71
40
  }
72
- .thumbnail[data-v-c003c59a]:active {
41
+ .thumbnail[data-v-b3a3d091]:active {
73
42
  opacity: 0.8;
74
43
  }
75
- .thumbnail.active[data-v-c003c59a] {
44
+ .thumbnail.active[data-v-b3a3d091] {
76
45
  opacity: 1;
77
46
  outline: 2px solid white;
78
47
  }
@@ -500,6 +469,24 @@ a[data-v-895cf824] {
500
469
  height: fit-content;
501
470
  }
502
471
 
472
+ .is-active .modal {
473
+ animation: 200ms ease bgl-modal-animation;
474
+
475
+ }
476
+
477
+ @keyframes bgl-modal-animation {
478
+ from {
479
+ scale: 0.7;
480
+ transform: translateY(2rem);
481
+ }
482
+
483
+ to {
484
+ scale: 1;
485
+ transform: translateY(0);
486
+
487
+ }
488
+ }
489
+
503
490
  .small-modal .modal {
504
491
  max-width: 300px;
505
492
  text-align: center;
@@ -1144,14 +1131,15 @@ display: block;
1144
1131
  color: var(--bgl-red);
1145
1132
  }
1146
1133
 
1147
- .bgl_vid iframe[data-v-862e1f20],
1148
- .bgl_vid video[data-v-862e1f20] {
1134
+ .bgl_vid iframe[data-v-8495afe2],
1135
+ .bgl_vid video[data-v-8495afe2] {
1149
1136
  width: 100%;
1150
1137
  height: auto;
1151
1138
  display: block;
1139
+ margin: auto;
1152
1140
  border-radius: var(--input-border-radius);
1153
1141
  }
1154
- .bgl_vid.vid_empty[data-v-862e1f20] {
1142
+ .bgl_vid.vid_empty[data-v-8495afe2] {
1155
1143
  padding-top: 56.25%;
1156
1144
  background: var(--input-bg);
1157
1145
  border-radius: var(--input-border-radius);
@@ -2301,23 +2289,48 @@ p {
2301
2289
  8 #818181 /* few chars */
2302
2290
  ;
2303
2291
  }
2304
- .preview-area[data-v-ee96aa53]{
2292
+ .preview-area[data-v-c9729efd]{
2305
2293
  font-family: "FontWithASyntaxHighlighter", monospace;
2306
2294
  font-palette: --myCustomPalette;
2307
2295
  }
2308
- .rich-text-editor[data-v-ee96aa53] {
2296
+ .rich-text-editor[data-v-c9729efd] {
2309
2297
  background: var(--input-bg);
2310
2298
  margin-bottom: 0.5rem;
2311
2299
  width: 100%;
2312
2300
  }
2313
- .editableContent[data-v-ee96aa53]{
2301
+ .editableContent[data-v-c9729efd]{
2314
2302
  min-height: 100%;
2315
2303
  white-space: pre-wrap;
2316
2304
  outline: none;
2317
2305
  }
2318
- .content-area[data-v-ee96aa53], .preview-area[data-v-ee96aa53]{
2306
+ .content-area[data-v-c9729efd], .preview-area[data-v-c9729efd]{
2319
2307
  min-height: 200px;
2320
2308
  }
2309
+ .fullscreen-mode[data-v-c9729efd] {
2310
+ position: fixed;
2311
+ top: 0;
2312
+ left: 0;
2313
+ width: 100%;
2314
+ height: 100%;
2315
+ z-index: 9999;
2316
+ background: var(--input-bg);
2317
+ padding: 2rem;
2318
+ overflow: auto;
2319
+ border-radius: 0;
2320
+ }
2321
+ .fullscreen-mode .content-area[data-v-c9729efd]{
2322
+ height: calc(100vh - 5rem);
2323
+ padding: 4rem !important;
2324
+ max-width: 900px;
2325
+ margin-inline: auto ;
2326
+ overflow-y: auto;
2327
+ }
2328
+ .fullscreen-mode .toolbar[data-v-c9729efd]{
2329
+ max-width: 900px;
2330
+ margin-inline: auto ;
2331
+ /* border-bottom: 1px solid var(--border-color); */
2332
+ /* margin-bottom: 2rem; */
2333
+ }
2321
2334
 
2322
2335
  /* [contenteditable='true'] {
2323
2336
  white-space: pre-wrap;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "0.0.726",
4
+ "version": "0.0.728",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -26,7 +26,10 @@ const videoUrl = $computed(() => {
26
26
  if (embedType) {
27
27
  if (embedType === 'YouTube') {
28
28
  const videoId = props.src?.split(/v=|youtu\.be\//)[1]?.split('&')?.[0]
29
- return `https://www.youtube.com/embed/${videoId}`
29
+ const queryParams = new URLSearchParams({
30
+ autoplay: props.autoplay ? '1' : '0'
31
+ })
32
+ return `https://www.youtube.com/embed/${videoId}?${queryParams}`
30
33
  }
31
34
  if (embedType === 'Vimeo') {
32
35
  const vimeoRegex
@@ -38,8 +41,6 @@ const videoUrl = $computed(() => {
38
41
  }
39
42
  return props.src
40
43
  })
41
-
42
- console.log('Video URL:', videoUrl)
43
44
  </script>
44
45
 
45
46
  <template>
@@ -51,6 +52,7 @@ console.log('Video URL:', videoUrl)
51
52
  frameborder="0"
52
53
  allowfullscreen
53
54
  title="Video"
55
+ allow="autoplay"
54
56
  />
55
57
  <video
56
58
  v-else-if="src"
@@ -71,6 +73,7 @@ console.log('Video URL:', videoUrl)
71
73
  width: 100%;
72
74
  height: auto;
73
75
  display: block;
76
+ margin: auto;
74
77
  border-radius: var(--input-border-radius);
75
78
  }
76
79
 
@@ -6,45 +6,46 @@ import type { ToolbarConfig, ToolbarConfigOption } from './richtext-types'
6
6
  defineProps<{ config: ToolbarConfig }>()
7
7
  const emit = defineEmits(['action'])
8
8
 
9
- const colorPicker = $ref<HTMLInputElement | null>(null)
10
- const fontSizeInput = $ref<HTMLInputElement | null>(null)
9
+ // const colorPicker = $ref<HTMLInputElement | null>(null)
10
+ // const fontSizeInput = $ref<HTMLInputElement | null>(null)
11
11
 
12
12
  interface toolbarOption {
13
13
  name: ToolbarConfigOption | 'separator'
14
- icon: MaterialIcons
14
+ label?: string
15
+ icon?: MaterialIcons
16
+ class?: string
15
17
  }
16
-
17
18
  const toolbarOptions: toolbarOption[] = [
18
19
  { name: 'separator' },
19
- { name: 'bold', icon: 'format_bold' },
20
- { name: 'italic', icon: 'format_italic' },
21
- { name: 'underline', icon: 'format_underlined' },
20
+ { name: 'bold', label: 'Bold', icon: 'format_bold' },
21
+ { name: 'italic', label: 'Italic', icon: 'format_italic' },
22
+ { name: 'underline', label: 'Underline', icon: 'format_underlined' },
22
23
  { name: 'separator' },
23
- { name: 'orderedList', icon: 'format_list_numbered' },
24
- { name: 'unorderedList', icon: 'format_list_bulleted' },
24
+ { name: 'orderedList', label: 'Ordered List', icon: 'format_list_numbered' },
25
+ { name: 'unorderedList', label: 'Unordered List', icon: 'format_list_bulleted' },
25
26
  { name: 'separator' },
26
- { name: 'link', icon: 'add_link' },
27
- { name: 'image', icon: 'add_photo_alternate' },
28
- { name: 'youtube', icon: 'youtube_activity' },
27
+ { name: 'link', label: 'Link', icon: 'add_link' },
28
+ { name: 'image', label: 'Image', icon: 'add_photo_alternate' },
29
+ { name: 'youtube', label: 'YouTube', icon: 'youtube_activity' },
29
30
  { name: 'separator' },
30
- { name: 'splitView', icon: 'code' },
31
- { name: 'clear', icon: 'format_clear' },
32
-
31
+ { name: 'splitView', label: 'Split View', icon: 'code' },
32
+ { name: 'clear', label: 'Clear Formatting', icon: 'format_clear' },
33
+ { name: 'fullScreen', label: 'Full Screen', icon: 'fullscreen', class: 'ms-auto' },
33
34
  ]
34
35
 
35
- function handleColorPick(type: 'textColor' | 'backgroundColor') {
36
- const color = colorPicker?.value
37
- if (color) {
38
- emit('action', type, color)
39
- }
40
- }
36
+ // function handleColorPick(type: 'textColor' | 'backgroundColor') {
37
+ // const color = colorPicker?.value
38
+ // if (color) {
39
+ // emit('action', type, color)
40
+ // }
41
+ // }
41
42
 
42
- function handleFontSizeChange() {
43
- const size = fontSizeInput?.value
44
- if (size) {
45
- emit('action', 'fontSize', size)
46
- }
47
- }
43
+ // function handleFontSizeChange() {
44
+ // const size = fontSizeInput?.value
45
+ // if (size) {
46
+ // emit('action', 'fontSize', size)
47
+ // }
48
+ // }
48
49
  function handleSelectChange(selectedOption: string) {
49
50
  emit('action', 'formatBlock', selectedOption)
50
51
  }
@@ -62,9 +63,10 @@ function handleSelectChange(selectedOption: string) {
62
63
  <Btn
63
64
  v-if="action.name !== 'separator' && config.includes(action.name)"
64
65
  :key="action.name"
65
- v-tooltip="action.name"
66
+ v-tooltip="action.label"
66
67
  thin
67
68
  flat
69
+ :class="action.class"
68
70
  class="rounded"
69
71
  :aria-label="action.name"
70
72
  :icon="action.icon"
@@ -33,6 +33,7 @@ const defaultConfig: ToolbarConfig = [
33
33
  'youtube',
34
34
  'codeView',
35
35
  'clear',
36
+ 'fullScreen'
36
37
  ]
37
38
  const config = $ref<ToolbarConfig>(props.toolbarConfig || defaultConfig)
38
39
  let contentHtml = $ref(props.modelValue)
@@ -69,6 +70,9 @@ function handleToolbarAction(action: string, value?: string) {
69
70
  case 'codeView':
70
71
  isCodeView = !isCodeView
71
72
  break
73
+ case 'fullScreen':
74
+ toggleFullScreen()
75
+ break
72
76
  default:
73
77
  applyFormatting(action, value)
74
78
  break
@@ -76,6 +80,13 @@ function handleToolbarAction(action: string, value?: string) {
76
80
  updateContent()
77
81
  }
78
82
 
83
+ function toggleFullScreen() {
84
+ const editor = document.querySelector('.rich-text-editor')
85
+ if (editor) {
86
+ editor.classList.toggle('fullscreen-mode')
87
+ }
88
+ }
89
+
79
90
  watch(() => props.modelValue, (newValue) => {
80
91
  if (newValue !== contentHtml) {
81
92
  contentHtml = newValue
@@ -125,8 +136,8 @@ function handleKeyDown(event: KeyboardEvent) {
125
136
  <template>
126
137
  <div class="rich-text-editor round pt-05 px-1 pb-1">
127
138
  <Toolbar :config @action="handleToolbarAction" />
128
- <div class="editor-container flex flex-stretch" :class="{ 'split-view': isSplitView }">
129
- <div class="content-area rounded p-1 bg-white shadow-light w-100 grid" :class="{ 'code-view': isCodeView }">
139
+ <div class="editor-container flex flex-stretch gap-1 m_column">
140
+ <div class="content-area rounded p-1 bg-white shadow-light w-100 grid">
130
141
  <textarea v-if="isCodeView" v-model="contentHtml" @input="updateContent" />
131
142
  <div
132
143
  v-else
@@ -186,6 +197,31 @@ function handleKeyDown(event: KeyboardEvent) {
186
197
  .content-area, .preview-area{
187
198
  min-height: 200px;
188
199
  }
200
+ .fullscreen-mode {
201
+ position: fixed;
202
+ top: 0;
203
+ left: 0;
204
+ width: 100%;
205
+ height: 100%;
206
+ z-index: 9999;
207
+ background: var(--input-bg);
208
+ padding: 2rem;
209
+ overflow: auto;
210
+ border-radius: 0;
211
+ }
212
+ .fullscreen-mode .content-area{
213
+ height: calc(100vh - 5rem);
214
+ padding: 4rem !important;
215
+ max-width: 900px;
216
+ margin-inline: auto ;
217
+ overflow-y: auto;
218
+ }
219
+ .fullscreen-mode .toolbar{
220
+ max-width: 900px;
221
+ margin-inline: auto ;
222
+ /* border-bottom: 1px solid var(--border-color); */
223
+ /* margin-bottom: 2rem; */
224
+ }
189
225
 
190
226
  /* [contenteditable='true'] {
191
227
  white-space: pre-wrap;
@@ -21,5 +21,8 @@ export type ToolbarConfigOption = 'bold'
21
21
  | 'codeBlock'
22
22
  | 'splitView'
23
23
  | 'codeView'
24
+ | 'youtube'
25
+ | 'clear'
26
+ | 'fullScreen'
24
27
 
25
28
  export type ToolbarConfig = ToolbarConfigOption[]
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Btn, Icon } from '@bagelink/vue'
2
+ import { BglVideo, Btn, Icon } from '@bagelink/vue'
3
3
  import { watch } from 'vue'
4
4
  import type { LightboxItem } from './lightbox.types'
5
5
 
@@ -66,153 +66,134 @@ defineExpose({ open, close })
66
66
  </script>
67
67
 
68
68
  <template>
69
- <div
70
- v-if="isOpen"
71
- class="lightbox-overlay"
72
- @keydown.esc="close"
73
- @keydown.left="prev"
74
- @keydown.right="next"
75
- @click="close"
76
- >
77
- <div class="lightbox" @click.stop>
78
- <Btn flat class="close-button color-white" icon="close" @click="close" />
79
- <div class="lightbox-item">
80
- <template v-if="currentItem?.type === 'image'">
81
- <img :src="currentItem?.src" alt="Preview">
82
- </template>
83
- <template v-else-if="currentItem?.type === 'video'">
84
- <video controls autoplay>
85
- <source :src="currentItem?.src" type="video/mp4">
86
- <track kind="captions" src="#" srclang="en" label="English">
87
- </video>
88
- </template>
89
- <template v-else-if="currentItem?.type === 'pdf'">
90
- <embed
91
- :src="normalizeURL(currentItem?.src)"
92
- type="application/pdf"
93
- width="100%"
94
- height="1080"
95
- :title="currentItem?.name"
96
- >
97
- </template>
98
- <template v-else>
99
- <div class="file-info txt-white">
100
- <p>File: {{ currentItem?.name }}</p>
101
- <p>Type: {{ currentItem?.type }}</p>
102
- <a :href="currentItem?.src" target="_blank">Open file</a>
103
- </div>
104
- </template>
105
- </div>
106
- <div class="navigation">
107
- <Btn
108
- class="navigation-btn"
109
- icon="arrow_back"
110
- @click="prev"
111
- />
112
- <Btn
113
- class="navigation-btn"
114
- icon="arrow_forward"
115
- @click="next"
116
- />
117
- </div>
118
- <div v-if="group && group.length > 1" class="thumbnails">
119
- <template
120
- v-for="(item, index) in group"
121
- :key="index"
69
+ <transition name="fade">
70
+ <div
71
+ v-if="isOpen"
72
+ class="bgl-lightbox-overlay fixed w-100 h-100 flex justify-content-center z-999 inset mx-auto"
73
+ @keydown.esc="close"
74
+ @keydown.left="prev"
75
+ @keydown.right="next"
76
+ @click="close"
77
+ >
78
+ <div class="bgl-lightbox relative vw90 txt-center" @click.stop>
79
+ <Btn flat class="fixed top-1 end-1 color-white" icon="close" @click="close" />
80
+ <div class="bgl-lightbox-item">
81
+ <template v-if="currentItem?.type === 'image'">
82
+ <img :src="currentItem?.src" alt="Preview">
83
+ </template>
84
+ <template v-else-if="currentItem?.type === 'video'">
85
+ <BglVideo
86
+ :src="currentItem?.src"
87
+ autoplay
88
+ controls
89
+ />
90
+ </template>
91
+ <template v-else-if="currentItem?.type === 'pdf'">
92
+ <embed
93
+ :src="normalizeURL(currentItem?.src)"
94
+ type="application/pdf"
95
+ width="100%"
96
+ height="1080"
97
+ :title="currentItem?.name"
98
+ >
99
+ </template>
100
+ <template v-else>
101
+ <div class="file-info txt-white">
102
+ <p>File: {{ currentItem?.name }}</p>
103
+ <p>Type: {{ currentItem?.type }}</p>
104
+ <a :href="currentItem?.src" target="_blank">Open file</a>
105
+ </div>
106
+ </template>
107
+ </div>
108
+ <div v-if="group.length" class="navigation flex space-between w-100 absolute">
109
+ <Btn
110
+ class="navigation-btn oval user-select-none"
111
+ icon="arrow_back"
112
+ @click="prev"
113
+ />
114
+ <Btn
115
+ class="navigation-btn oval user-select-none"
116
+ icon="arrow_forward"
117
+ @click="next"
118
+ />
119
+ </div>
120
+ <div
121
+ v-if="group && group.length > 1"
122
+ class="flex justify-content-center mt-2 overflow
123
+ p-1 fixed bottom start end gap-1 m_justify-content-start"
122
124
  >
123
- <img
124
- v-if="item.type === 'image'"
125
- class="thumbnail"
126
- :src="item.src"
127
- alt=""
128
- @click="selectItem(index)"
125
+ <template
126
+ v-for="(item, index) in group"
127
+ :key="index"
129
128
  >
130
- <Icon
131
- v-else
132
- class="thumbnail"
133
- icon="description"
134
- @click="selectItem(index)"
135
- />
136
- </template>
129
+ <img
130
+ v-if="item.type === 'image'"
131
+ class="thumbnail object-fit-cover hover
132
+ opacity-5 round flex bg-white justify-content-center align-items-center flex-shrink-0"
133
+ :src="item.src"
134
+ alt=""
135
+ :class="{ active: currentIndex === index }"
136
+ @click="selectItem(index)"
137
+ >
138
+ <Icon
139
+ v-else
140
+ class="thumbnail object-fit-cover hover
141
+ opacity-5 round flex bg-white justify-content-center align-items-center flex-shrink-0"
142
+ icon="description"
143
+ :class="{ active: currentIndex === index }"
144
+ @click="selectItem(index)"
145
+ />
146
+ </template>
147
+ </div>
137
148
  </div>
138
149
  </div>
139
- </div>
150
+ </transition>
140
151
  </template>
141
152
 
142
153
  <style scoped>
143
- .lightbox-overlay {
144
- position: fixed;
145
- top: 0;
146
- left: 0;
147
- width: 100%;
148
- height: 100%;
154
+ .bgl-lightbox-overlay {
149
155
  background: rgba(0, 0, 0, 0.8);
150
- display: flex;
151
- justify-content: center;
152
- align-items: center;
153
- z-index: 1000;
154
156
  }
155
157
 
156
- .lightbox {
157
- position: relative;
158
+ .bgl-lightbox {
158
159
  max-height: 90%;
159
- width: 90vw;
160
- text-align: center;
161
160
  }
162
161
 
163
- .close-button {
164
- position: fixed;
165
- top: 1rem;
166
- inset-inline-end: 1rem;
162
+ .bgl-lightbox-item{
163
+ animation: 500ms ease bgl-lightbox-load;
167
164
  }
165
+ @keyframes bgl-lightbox-load {
166
+ from {
167
+ scale:0.7;
168
+ }
168
169
 
169
- .lightbox-item * {
170
+ to {
171
+ scale:1;
172
+
173
+ }
174
+ }
175
+
176
+ .bgl-lightbox-item * {
170
177
  max-width: 90%;
171
178
  max-height: calc(80vh - 90px);
172
179
  border-radius: 3px;
180
+ margin: auto;
181
+ animation: 200ms ease bgl-lightbox-load;
173
182
  }
174
183
 
175
184
  .navigation {
176
- display: flex;
177
- justify-content: space-between;
178
- width: 100%;
179
- position: absolute;
180
185
  top: 50%;
181
186
  transform: translateY(-50%);
182
187
  }
183
188
 
184
189
  .navigation-btn {
185
- user-select: none;
186
190
  width: var(--input-height);
187
191
  height: var(--input-height);
188
- border-radius: 100%;
189
- }
190
-
191
- .thumbnails {
192
- display: flex;
193
- justify-content: center;
194
- margin-top: 10px;
195
- overflow: auto;
196
- padding: 1rem;
197
- position: fixed;
198
- bottom: 0;
199
- left: 0;
200
- right: 0;
201
192
  }
202
193
 
203
194
  .thumbnail {
204
195
  height: 50px;
205
196
  width: 50px;
206
- object-fit: cover;
207
- margin: 0 5px;
208
- cursor: pointer;
209
- opacity: 0.5;
210
- border-radius: 3px;
211
- transition: all 200ms ease;
212
- background-color: white;
213
- display: flex;
214
- justify-content: center;
215
- align-items: center;
216
197
  }
217
198
  .thumbnail:hover {
218
199
  opacity: 1;