@bagelink/vue 1.5.30 → 1.6.2

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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.5.30",
4
+ "version": "1.6.2",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -21,6 +21,7 @@ const props = withDefaults(
21
21
  fullWidth?: boolean
22
22
  ellipsis?: boolean
23
23
  ripple?: boolean
24
+ tiny?: boolean
24
25
  onClick?: () => void
25
26
  }>(),
26
27
  {
@@ -30,9 +31,9 @@ const props = withDefaults(
30
31
  )
31
32
 
32
33
  const isComponent = $computed(() => {
33
- if (props.to) {return 'router-link'}
34
- if (props.href) {return 'a'}
35
- if (props.onClick) {return 'button'}
34
+ if (props.to) { return 'router-link' }
35
+ if (props.href) { return 'a' }
36
+ if (props.onClick) { return 'button' }
36
37
  return 'div'
37
38
  })
38
39
 
@@ -42,15 +43,15 @@ const isClickable = $computed(() => {
42
43
 
43
44
  const bind = $computed(() => {
44
45
  const obj: { [key: string]: any } = {}
45
- if (props.to) {obj.to = props.to}
46
- else if (props.href) {obj.href = props.href}
47
- if (props.target && (props.to || props.href)) {obj.target = props.target}
46
+ if (props.to) { obj.to = props.to }
47
+ else if (props.href) { obj.href = props.href }
48
+ if (props.target && (props.to || props.href)) { obj.target = props.target }
48
49
 
49
50
  obj.class = {
50
51
  'notClickable': !(props.to || props.onClick),
51
52
  'no-border-list': props.flat,
52
53
  }
53
- if (props.disabled) {obj.disabled = true}
54
+ if (props.disabled) { obj.disabled = true }
54
55
  return obj
55
56
  })
56
57
  </script>
@@ -60,8 +61,9 @@ const bind = $computed(() => {
60
61
  <component
61
62
  :is="isComponent" v-bind="bind" v-ripple="ripple && isClickable"
62
63
  class="flex flex-grow-1 gap-05 list-item" :class="{
63
- 'py-1': !props.thin,
64
+ 'py-1': !props.thin && !props.tiny,
64
65
  'py-05': props.thin,
66
+ 'py-0': props.tiny,
65
67
  'px-1': !props.fullWidth,
66
68
  'px-0': props.fullWidth,
67
69
  }" @click="onClick"
@@ -0,0 +1,79 @@
1
+ <script setup lang="ts" generic="T = unknown">
2
+ import type { Ref, WritableComputedRef } from 'vue'
3
+
4
+ import { Btn } from '@bagelink/vue'
5
+ import { computed, ref, watch } from 'vue'
6
+
7
+ const props = defineProps<{
8
+ label?: string
9
+ helpText?: string
10
+ modelValue: T[]
11
+ allowAdd?: boolean
12
+ allowDelete?: boolean
13
+ }>()
14
+
15
+ const emit = defineEmits(['update:modelValue'])
16
+
17
+ defineSlots<{
18
+ default: (props: { item: WritableComputedRef<T>, index: number }) => unknown
19
+ }>()
20
+
21
+ const items = ref(Array.isArray(props.modelValue) ? [...props.modelValue] : []) as Ref<T[]>
22
+
23
+ watch(
24
+ () => props.modelValue,
25
+ (newVal) => {
26
+ if (Array.isArray(newVal)) {
27
+ items.value = [...newVal]
28
+ }
29
+ }
30
+ )
31
+
32
+ function addItem() {
33
+ items.value.push(undefined as T)
34
+ updateModel()
35
+ }
36
+
37
+ function deleteItem(i: number) {
38
+ items.value.splice(i, 1)
39
+ updateModel()
40
+ }
41
+
42
+ function updateModel() {
43
+ emit('update:modelValue', [...items.value])
44
+ }
45
+
46
+ function onUpdate(value: T, i: number) {
47
+ items.value[i] = value
48
+ updateModel()
49
+ }
50
+
51
+ // Create a writable computed ref for each item
52
+ function getItemRef(i: number) {
53
+ return computed({
54
+ get: () => items.value[i],
55
+ set: (value) => {
56
+ onUpdate(value, i)
57
+ }
58
+ })
59
+ }
60
+ </script>
61
+
62
+ <template>
63
+ <div>
64
+ <label v-if="label" class="txt12 txt-gray-90 mb-025">
65
+ {{ label }}
66
+ </label>
67
+ <p v-if="helpText" class="txt12 txt-gray-50 mb-05">
68
+ {{ helpText }}
69
+ </p>
70
+ <div
71
+ v-for="(_, i) in items" :key="i" class="array-input-row"
72
+ style="display: flex; align-items: center; gap: 0.5rem;"
73
+ >
74
+ <slot :item="getItemRef(i)" :index="i" />
75
+ <Btn v-if="allowDelete" v-tooltip="'Delete'" flat icon="delete" size="xs" @click="deleteItem(i)" />
76
+ </div>
77
+ <Btn v-if="allowAdd" icon="add" size="small" value="Add" @click="addItem" />
78
+ </div>
79
+ </template>
@@ -13,7 +13,7 @@ const props = withDefaults(defineProps<PropTypes>(), {
13
13
 
14
14
  const emit = defineEmits(['update:modelValue'])
15
15
 
16
- const isAsyncSource = (src: OptionsSource): src is (q: string) => Promise<Option[]> => 'function' === typeof src
16
+ const isAsyncSource = (src: OptionsSource): src is (q: string) => Promise<Option[]> => typeof src === 'function'
17
17
 
18
18
  type Primitive = string | number | boolean
19
19
 
@@ -48,8 +48,8 @@ let selected = $ref(false)
48
48
  let open = $ref(false)
49
49
 
50
50
  const selectedLabel = $computed((): string => {
51
- if (0 === selectedItemCount) {return props.placeholder}
52
- if (4 < selectedItemCount) {
51
+ if (selectedItemCount === 0) { return props.placeholder }
52
+ if (selectedItemCount > 4) {
53
53
  const str = selectedItems
54
54
  .slice(0, 4)
55
55
  .map(item => getLabel(item))
@@ -77,30 +77,30 @@ function navigate(direction: 'up' | 'down') {
77
77
  setTimeout(() => { navigate(direction) }, 210)
78
78
  return
79
79
  }
80
- if ('up' === direction) {
81
- highlightedIndex = 0 < highlightedIndex ? highlightedIndex - 1 : results.value.length - 1
82
- } else if ('down' === direction) {
80
+ if (direction === 'up') {
81
+ highlightedIndex = highlightedIndex > 0 ? highlightedIndex - 1 : results.value.length - 1
82
+ } else if (direction === 'down') {
83
83
  highlightedIndex = highlightedIndex < results.value.length - 1 ? highlightedIndex + 1 : 0
84
84
  }
85
85
  setTimeout(() => {
86
86
  const el = selectOptions?.children[highlightedIndex] as HTMLElement
87
- if (el) {el.focus()}
88
- else {highlightedIndex = -1}
87
+ if (el) { el.focus() }
88
+ else { highlightedIndex = -1 }
89
89
  }, 10)
90
90
  }
91
91
 
92
92
  const isSelected = (option: Option) => selectedItems.find(item => getValue(option) === getValue(item)) !== undefined
93
93
 
94
94
  function scrollToSelectedItem() {
95
- if (!selectOptions || 0 === selectedItemCount) {return}
95
+ if (!selectOptions || selectedItemCount === 0) { return }
96
96
 
97
97
  // Find the first selected item in the results
98
98
  const selectedIndex = results.value.findIndex(option => isSelected(option))
99
- if (-1 === selectedIndex) {return}
99
+ if (selectedIndex === -1) { return }
100
100
 
101
101
  // Get the selected option element
102
102
  const selectedElement = selectOptions.children[selectedIndex] as HTMLElement
103
- if (!selectedElement) {return}
103
+ if (!selectedElement) { return }
104
104
 
105
105
  // Scroll the selected item into view
106
106
  selectedElement.scrollIntoView({
@@ -110,22 +110,22 @@ function scrollToSelectedItem() {
110
110
  }
111
111
 
112
112
  function getLabel(option: Option) {
113
- if (null == option) {return ''}
114
- if ('object' === typeof option) {return option.label ?? String((option as any).value ?? '')}
115
- if ('boolean' === typeof option) {return option ? 'Yes' : 'No'}
113
+ if (option == null) { return '' }
114
+ if (typeof option === 'object') { return option.label ?? String((option as any).value ?? '') }
115
+ if (typeof option === 'boolean') { return option ? 'Yes' : 'No' }
116
116
  return String(option)
117
117
  }
118
118
 
119
119
  function getValue(option?: Option): Primitive | undefined {
120
- if (null == option) {return}
121
- if ('object' === typeof option) {return option.value as Primitive}
120
+ if (option == null) { return }
121
+ if (typeof option === 'object') { return option.value as Primitive }
122
122
  return option as Primitive
123
123
  }
124
124
 
125
125
  function focusInput() {
126
126
  open = true
127
127
  setTimeout(() => {
128
- if (searchInput) {searchInput.focus()}
128
+ if (searchInput) { searchInput.focus() }
129
129
  }, 10)
130
130
  }
131
131
 
@@ -134,7 +134,7 @@ function select(option: Option) {
134
134
  const existingIndex = selectedItems.findIndex(
135
135
  item => getValue(item) === getValue(option),
136
136
  )
137
- if (-1 < existingIndex) {
137
+ if (existingIndex > -1) {
138
138
  selectedItems.splice(existingIndex, 1)
139
139
  }
140
140
  else if (props.multiselect) {
@@ -148,7 +148,7 @@ function select(option: Option) {
148
148
 
149
149
  // Move focus away from popper content before it gets aria-hidden
150
150
  const active = document.activeElement as HTMLElement | null
151
- if (active && selectOptions?.contains(active)) {active.blur()}
151
+ if (active && selectOptions?.contains(active)) { active.blur() }
152
152
 
153
153
  if (!props.multiselect) {
154
154
  open = false
@@ -169,7 +169,7 @@ function emitUpdate() {
169
169
  }
170
170
 
171
171
  function compareArrays(arr1: Option[], arr2: Option[]) {
172
- if (arr1.length !== arr2.length) {return false}
172
+ if (arr1.length !== arr2.length) { return false }
173
173
  const s1 = arr1.map(getValue).filter(Boolean).map(String).sort()
174
174
  const s2 = arr2.map(getValue).filter(Boolean).map(String).sort()
175
175
  return s1.every((v, i) => v === s2[i])
@@ -182,7 +182,7 @@ watch(
182
182
  const newOption = Array.isArray(props.options)
183
183
  ? (props.options.find(o => getValue(o) === newVal) ?? newVal)
184
184
  : newVal
185
- if (newOption && !isSelected(newOption)) {selectedItems = [newOption]}
185
+ if (newOption && !isSelected(newOption)) { selectedItems = [newOption] }
186
186
  } else {
187
187
  const newData = [newVal].flat()
188
188
  const isSame = compareArrays(newData, selectedItems)
@@ -206,13 +206,13 @@ watch(
206
206
  () => props.options,
207
207
  () => {
208
208
  const opts = props.options
209
- if (!Array.isArray(opts)) {return}
209
+ if (!Array.isArray(opts)) { return }
210
210
  selectedItems.forEach((option, i) => {
211
211
  const exists = opts.find(
212
212
  (o: Option) => getValue(o) === getValue(option),
213
213
  )
214
- if (exists === undefined) {selectedItems.splice(i, 1)}
215
- else {selectedItems.splice(i, 1, exists)}
214
+ if (exists === undefined) { selectedItems.splice(i, 1) }
215
+ else { selectedItems.splice(i, 1, exists) }
216
216
  })
217
217
  // const original = JSON.stringify(props.options.map(getValue));
218
218
  // const newSelection = JSON.stringify(selectedItems.map(getValue));
@@ -225,11 +225,11 @@ watch(
225
225
  watch(
226
226
  () => results.value,
227
227
  (newResults) => {
228
- if (isAsyncSource(props.options) && 0 < newResults.length) {
228
+ if (isAsyncSource(props.options) && newResults.length > 0) {
229
229
  selectedItems.forEach((option, i) => {
230
230
  const optionValue = getValue(option)
231
231
  // If the selected item is just a primitive value (no label), find the full option
232
- if ('object' !== typeof option || !option.label) {
232
+ if (typeof option !== 'object' || !option.label) {
233
233
  const fullOption = newResults.find(
234
234
  (o: Option) => getValue(o) === optionValue,
235
235
  )
@@ -250,7 +250,7 @@ onMounted(() => {
250
250
  (o: Option) => getValue(o) === getValue(props.defaultValue),
251
251
  )
252
252
 
253
- if (defaultOption === undefined) {return}
253
+ if (defaultOption === undefined) { return }
254
254
 
255
255
  selectedItems = [defaultOption]
256
256
  }
@@ -411,7 +411,7 @@ onMounted(() => {
411
411
  .v-popper--theme-dropdown .v-popper__inner {
412
412
  border: none;
413
413
  /* background: transparent; if anyone is changing this please talk to me first*/
414
- border-radius: var(--card-border-radius);
414
+ border-radius: var(--popper-border-radius);
415
415
  color: var(--dropdown-color);
416
416
  }
417
417
  </style>
@@ -1,3 +1,4 @@
1
+ export { default as ArrayInput } from './ArrayInput.vue'
1
2
  export { default as Checkbox } from './Checkbox.vue'
2
3
  export { default as CheckInput } from './CheckInput.vue'
3
4
  export { default as CodeEditor } from './CodeEditor/Index.vue'
@@ -22,14 +22,14 @@ function close() {
22
22
  }
23
23
 
24
24
  function next() {
25
- if (1 < group.length) {
25
+ if (group.length > 1) {
26
26
  currentIndex = (currentIndex + 1) % group.length
27
27
  currentItem = group[currentIndex]
28
28
  }
29
29
  }
30
30
 
31
31
  function prev() {
32
- if (1 < group.length) {
32
+ if (group.length > 1) {
33
33
  currentIndex = (currentIndex - 1 + group.length) % group.length
34
34
  currentItem = group[currentIndex]
35
35
  }
@@ -41,16 +41,16 @@ function selectItem(index: number) {
41
41
  }
42
42
 
43
43
  watch(() => isOpen, (val) => {
44
- if (val) {document.body.style.overflow = 'hidden'}
45
- else {document.body.style.overflow = ''}
44
+ if (val) { document.body.style.overflow = 'hidden' }
45
+ else { document.body.style.overflow = '' }
46
46
  })
47
47
 
48
48
  function handleKeydown(event: KeyboardEvent) {
49
- if ('Escape' === event.key) {
49
+ if (event.key === 'Escape') {
50
50
  close()
51
- } else if ('ArrowLeft' === event.key) {
51
+ } else if (event.key === 'ArrowLeft') {
52
52
  prev()
53
- } else if ('ArrowRight' === event.key) {
53
+ } else if (event.key === 'ArrowRight') {
54
54
  next()
55
55
  }
56
56
  }
@@ -58,7 +58,7 @@ function handleKeydown(event: KeyboardEvent) {
58
58
  const zoom = $ref(1)
59
59
 
60
60
  function clickOutside() {
61
- if (1 === zoom) {close()}
61
+ if (zoom === 1) { close() }
62
62
  }
63
63
 
64
64
  defineExpose({ open, close })
@@ -69,25 +69,15 @@ defineExpose({ open, close })
69
69
  <div
70
70
  v-if="isOpen"
71
71
  class="bgl-lightbox-overlay fixed w-100 h-100 flex justify-content-center z-9999 inset mx-auto"
72
- @keydown.esc="close"
73
- @keydown.left="prev"
74
- @keydown.right="next"
75
- @click="clickOutside"
72
+ @keydown.esc="close" @keydown.left="prev" @keydown.right="next" @click="clickOutside"
76
73
  >
77
- <div v-if="group && group.length > 1" class="navigation flex space-between px-3 w-100 absolute m_px-1 m_none z-9">
78
- <Btn
79
- class="oval opacity-8"
80
- icon="arrow_back"
81
- color="black"
82
- @click="prev"
83
- />
84
-
85
- <Btn
86
- class="oval opacity-8"
87
- icon="arrow_forward"
88
- color="black"
89
- @click="next"
90
- />
74
+ <div
75
+ v-if="group && group.length > 1"
76
+ class="navigation flex space-between px-3 w-100 absolute m_px-1 m_none z-9"
77
+ >
78
+ <Btn class="oval opacity-8" icon="arrow_back" color="black" @click="prev" />
79
+
80
+ <Btn class="oval opacity-8" icon="arrow_forward" color="black" @click="next" />
91
81
  </div>
92
82
  <div class="bgl-lightbox relative txt-center" @click.stop>
93
83
  <div class="flex start fixed top-1 w-100 space-between px-1 z-9">
@@ -98,44 +88,37 @@ defineExpose({ open, close })
98
88
  <Btn flat class="color-white" icon="add" :disabled="zoom === 3" @click="zoom++" />
99
89
  </div>
100
90
  <Btn
101
- v-if="currentItem?.openFile && currentItem?.src" class="color-white" round thin flat iconEnd="arrow_outward"
102
- value="Open File"
103
- :href="currentItem?.src"
104
- target="_blank"
91
+ v-if="currentItem?.openFile && currentItem?.src" class="color-white" round thin flat
92
+ iconEnd="arrow_outward" value="Open File" :href="currentItem?.src" target="_blank"
105
93
  />
106
94
  <Btn
107
- v-if="currentItem?.download && currentItem?.src" class="color-white" round thin flat icon="download"
108
- value="Download File"
109
- @click="downloadFile(currentItem?.src)"
95
+ v-if="currentItem?.download && currentItem?.src" class="color-white" round thin flat
96
+ icon="download" value="Download File" @click="downloadFile(currentItem?.src)"
110
97
  />
111
98
  <div v-if="!currentItem?.openFile && !currentItem?.download" />
112
99
  </div>
113
100
 
114
- <Carousel v-model:index="currentIndex" :items="1" class="bgl-lightbox-item" :class="{ zoomed: zoom > 1 }" :freeDrag="zoom === 1">
101
+ <Carousel
102
+ v-model:index="currentIndex" :items="1" class="bgl-lightbox-item"
103
+ :class="{ zoomed: zoom > 1 }" :freeDrag="zoom === 1"
104
+ >
115
105
  <template v-for="item in group" :key="item.src">
116
- <Zoomer v-if="item.type === 'image'" v-model:zoom="zoom" :disabled="!item?.enableZoom" :mouse-wheel-to-zoom="false">
106
+ <Zoomer
107
+ v-if="item.type === 'image'" v-model:zoom="zoom" :disabled="!item?.enableZoom"
108
+ :mouse-wheel-to-zoom="false"
109
+ >
117
110
  <Image :draggable="false" :src="item?.src" alt="Preview" class="vw90 lightbox-image" />
118
111
  </Zoomer>
119
112
 
120
113
  <BglVideo
121
- v-else-if="item?.type === 'video' && item?.src"
122
- :src="item?.src"
123
- autoplay
124
- controls
114
+ v-else-if="item?.type === 'video' && item?.src" :src="item?.src" autoplay controls
125
115
  class="vw90"
126
116
  />
127
117
 
128
- <div
129
- v-else-if="item?.type === 'pdf' && item?.src"
130
- class="vw90"
131
- >
118
+ <div v-else-if="item?.type === 'pdf' && item?.src" class="vw90">
132
119
  <embed
133
- :src="normalizeURL(item?.src)"
134
- type="application/pdf"
135
- width="100%"
136
- height="1080"
137
- :title="item?.name"
138
- class="vw90"
120
+ :src="normalizeURL(item?.src)" type="application/pdf" width="100%" height="1080"
121
+ :title="item?.name" class="vw90"
139
122
  >
140
123
  </div>
141
124
  <div v-else class="vw90">
@@ -164,30 +147,19 @@ defineExpose({ open, close })
164
147
  </template>
165
148
  </Carousel>
166
149
  <div
167
- v-if="group && group.length > 1"
168
- class="flex justify-content-center mt-2 overflow
150
+ v-if="group && group.length > 1" class="flex justify-content-center mt-2 overflow
169
151
  p-1 fixed bottom start end gap-1 m_justify-content-start"
170
152
  >
171
- <template
172
- v-for="(item, index) in group"
173
- :key="index"
174
- >
153
+ <template v-for="(item, index) in group" :key="index">
175
154
  <Image
176
- v-if="item.type === 'image'"
177
- class="thumbnail object-fit-cover hover
178
- opacity-5 rounded flex bg-popup justify-content-center align-items-center flex-shrink-0"
179
- :src="item.src"
180
- alt=""
181
- :class="{ active: currentIndex === index }"
182
- @click="selectItem(index)"
155
+ v-if="item.type === 'image'" class="thumbnail object-fit-cover hover
156
+ opacity-5 rounded flex bg-popup justify-content-center align-items-center flex-shrink-0" :src="item.src" alt=""
157
+ :class="{ active: currentIndex === index }" @click="selectItem(index)"
183
158
  />
184
159
  <Icon
185
- v-else
186
- class="thumbnail object-fit-cover hover
187
- opacity-5 ed flex bg-popup justify-content-center align-items-center flex-shrink-0"
188
- icon="description"
189
- :class="{ active: currentIndex === index }"
190
- @click="selectItem(index)"
160
+ v-else class="thumbnail object-fit-cover hover
161
+ opacity-5 ed flex bg-popup justify-content-center align-items-center flex-shrink-0" icon="description"
162
+ :class="{ active: currentIndex === index }" @click="selectItem(index)"
191
163
  />
192
164
  </template>
193
165
  </div>
@@ -200,15 +172,18 @@ defineExpose({ open, close })
200
172
  .bgl-lightbox:has(.bgl_vid) {
201
173
  width: 90vw;
202
174
  }
175
+
203
176
  .bgl-lightbox:has(.vid_short) {
204
177
  width: auto;
205
178
  aspect-ratio: 9/16;
206
179
  height: 90vh;
207
180
  }
181
+
208
182
  .bgl-lightbox:has(.vid_short) .bgl-lightbox-item * {
209
- max-height:unset !important;
183
+ max-height: unset !important;
210
184
  }
211
- .lightbox-image{
185
+
186
+ .lightbox-image {
212
187
  object-fit: contain;
213
188
  width: fit-content;
214
189
  }
@@ -221,18 +196,19 @@ defineExpose({ open, close })
221
196
  max-height: 90%;
222
197
  }
223
198
 
224
- .bgl-lightbox-item{
199
+ .bgl-lightbox-item {
225
200
  animation: 500ms ease bgl-lightbox-load;
226
201
  }
202
+
227
203
  @keyframes bgl-lightbox-load {
228
- from {
229
- scale:0.7;
230
- }
204
+ from {
205
+ scale: 0.7;
206
+ }
231
207
 
232
- to {
233
- scale:1;
208
+ to {
209
+ scale: 1;
234
210
 
235
- }
211
+ }
236
212
  }
237
213
 
238
214
  .bgl-lightbox-item * {
@@ -248,6 +224,14 @@ defineExpose({ open, close })
248
224
  height: calc(100vh - 90px);
249
225
  }
250
226
 
227
+ .bgl-lightbox-item.zoomed {
228
+ pointer-events: none;
229
+ }
230
+
231
+ .bgl-lightbox-item.zoomed .vue-zoomer {
232
+ pointer-events: auto;
233
+ }
234
+
251
235
  .navigation {
252
236
  top: 50%;
253
237
  transform: translateY(-50%);
@@ -257,9 +241,11 @@ defineExpose({ open, close })
257
241
  height: 50px;
258
242
  width: 50px;
259
243
  }
244
+
260
245
  .thumbnail:hover {
261
246
  opacity: 1;
262
247
  }
248
+
263
249
  .thumbnail:active {
264
250
  opacity: 0.8;
265
251
  }
@@ -268,18 +254,21 @@ defineExpose({ open, close })
268
254
  opacity: 1;
269
255
  outline: 2px solid white;
270
256
  }
271
- .file-info{
257
+
258
+ .file-info {
272
259
  max-width: 420px
273
260
  }
261
+
274
262
  @media screen and (max-width: 910px) {
275
- .file-info{
276
- max-width: 220px;
277
- text-align: center !important;
278
- }
279
- .file-info *{
280
- text-align: center !important;
281
- margin-inline: 0 !important;
282
- max-width: 100% !important;
283
- }
263
+ .file-info {
264
+ max-width: 220px;
265
+ text-align: center !important;
266
+ }
267
+
268
+ .file-info * {
269
+ text-align: center !important;
270
+ margin-inline: 0 !important;
271
+ max-width: 100% !important;
272
+ }
284
273
  }
285
274
  </style>
@@ -1391,6 +1391,22 @@
1391
1391
  white-space: nowrap;
1392
1392
  }
1393
1393
 
1394
+ .white-space-break-spaces {
1395
+ white-space: break-spaces;
1396
+ }
1397
+
1398
+ .white-space-pre {
1399
+ white-space: pre;
1400
+ }
1401
+
1402
+ .white-space-pre-line {
1403
+ white-space: pre-line;
1404
+ }
1405
+
1406
+ .white-space-pre-wrap {
1407
+ white-space: pre-wrap;
1408
+ }
1409
+
1394
1410
  .notranslate {
1395
1411
  translate: none !important;
1396
1412
  -webkit-translate: none !important;
@@ -2791,4 +2807,24 @@
2791
2807
  .m_capitalize {
2792
2808
  text-transform: capitalize;
2793
2809
  }
2810
+
2811
+ .m_white-space {
2812
+ white-space: nowrap;
2813
+ }
2814
+
2815
+ .m_white-space-break-spaces {
2816
+ white-space: break-spaces;
2817
+ }
2818
+
2819
+ .m_white-space-pre {
2820
+ white-space: pre;
2821
+ }
2822
+
2823
+ .m_white-space-pre-line {
2824
+ white-space: pre-line;
2825
+ }
2826
+
2827
+ .m_white-space-pre-wrap {
2828
+ white-space: pre-wrap;
2829
+ }
2794
2830
  }
@@ -24,6 +24,7 @@
24
24
  --bgl-box-bg: var(--bgl-white);
25
25
  --bgl-popup-bg: var(--bgl-white);
26
26
  --bgl-popup-text: var(--bgl-black);
27
+ --popper-border-radius: var(--card-border-radius);
27
28
  --bgl-text-color: var(--bgl-black);
28
29
  --bgl-light-text: var(--bgl-white);
29
30
  --bgl-richtext-color: var(--bgl-white);