@bagelink/vue 0.0.466 → 0.0.473
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/components/Accordion.vue.d.ts.map +1 -1
- package/dist/components/AccordionItem.vue.d.ts.map +1 -1
- package/dist/components/Alert.vue.d.ts +2 -2
- package/dist/components/Alert.vue.d.ts.map +1 -1
- package/dist/components/Avatar.vue.d.ts.map +1 -1
- package/dist/components/Badge.vue.d.ts +2 -2
- package/dist/components/Badge.vue.d.ts.map +1 -1
- package/dist/components/BglVideo.vue.d.ts +2 -2
- package/dist/components/BglVideo.vue.d.ts.map +1 -1
- package/dist/components/Btn.vue.d.ts +2 -0
- package/dist/components/Btn.vue.d.ts.map +1 -1
- package/dist/components/Card.vue.d.ts.map +1 -1
- package/dist/components/Carousel.vue.d.ts +4 -2
- package/dist/components/Carousel.vue.d.ts.map +1 -1
- package/dist/components/DataPreview.vue.d.ts.map +1 -1
- package/dist/components/Drop.vue.d.ts +34 -0
- package/dist/components/Drop.vue.d.ts.map +1 -0
- package/dist/components/FileUploader.vue.d.ts +60 -0
- package/dist/components/FileUploader.vue.d.ts.map +1 -0
- package/dist/components/Flag.vue.d.ts +2 -2
- package/dist/components/Flag.vue.d.ts.map +1 -1
- package/dist/components/ListItem.vue.d.ts.map +1 -1
- package/dist/components/ListView.vue.d.ts.map +1 -1
- package/dist/components/MapEmbed.vue.d.ts +2 -2
- package/dist/components/MapEmbed.vue.d.ts.map +1 -1
- package/dist/components/MaterialIcon.vue.d.ts.map +1 -1
- package/dist/components/Modal.vue.d.ts +2 -1
- package/dist/components/Modal.vue.d.ts.map +1 -1
- package/dist/components/ModalConfirm.vue.d.ts.map +1 -1
- package/dist/components/ModalForm.vue.d.ts.map +1 -1
- package/dist/components/NavBar.vue.d.ts.map +1 -1
- package/dist/components/PageTitle.vue.d.ts.map +1 -1
- package/dist/components/TableSchema.vue.d.ts.map +1 -1
- package/dist/components/Title.vue.d.ts.map +1 -1
- package/dist/components/dashboard/Lineart.vue.d.ts.map +1 -1
- package/dist/components/dashboard/index.d.ts.map +1 -1
- package/dist/components/form/BglField.vue.d.ts.map +1 -1
- package/dist/components/form/BglForm.vue.d.ts +4 -2
- package/dist/components/form/BglForm.vue.d.ts.map +1 -1
- package/dist/components/form/ItemRef.vue.d.ts +1 -0
- package/dist/components/form/ItemRef.vue.d.ts.map +1 -1
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/ColorPicker.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/FileUpload.vue.d.ts +2 -1
- package/dist/components/form/inputs/FileUpload.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/JSONInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RadioPillsInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectField.vue.d.ts +1 -4
- package/dist/components/form/inputs/SelectField.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SignaturePad.vue.d.ts +56 -0
- package/dist/components/form/inputs/SignaturePad.vue.d.ts.map +1 -0
- package/dist/components/form/inputs/TableField.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TelInput.vue.d.ts +2 -2
- package/dist/components/form/inputs/TelInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/ToggleInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/index.d.ts +1 -0
- package/dist/components/form/inputs/index.d.ts.map +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/layout/BottomMenu.vue.d.ts.map +1 -1
- package/dist/components/layout/Layout.vue.d.ts +2 -2
- package/dist/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/components/layout/SidebarMenu.vue.d.ts.map +1 -1
- package/dist/components/layout/TabbedLayout.vue.d.ts.map +1 -1
- package/dist/components/layout/Tabs.vue.d.ts.map +1 -1
- package/dist/components/layout/TabsBody.vue.d.ts.map +1 -1
- package/dist/components/layout/TabsNav.vue.d.ts.map +1 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/index.cjs +17617 -20818
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +17617 -20818
- package/dist/plugins/bagel.d.ts +1 -1
- package/dist/plugins/bagel.d.ts.map +1 -1
- package/dist/plugins/modal.d.ts +14 -14
- package/dist/plugins/modal.d.ts.map +1 -1
- package/dist/style.css +333 -309
- package/dist/types/BagelForm.d.ts +16 -16
- package/dist/types/BagelForm.d.ts.map +1 -1
- package/dist/types/BtnOptions.d.ts +1 -1
- package/dist/types/BtnOptions.d.ts.map +1 -1
- package/dist/types/NavLink.d.ts +2 -2
- package/dist/types/NavLink.d.ts.map +1 -1
- package/dist/types/file.d.ts +2 -2
- package/dist/types/file.d.ts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/materialIcons.d.ts.map +1 -1
- package/dist/utils/BagelFormUtils.d.ts.map +1 -1
- package/dist/utils/allCountries.d.ts +2 -2
- package/dist/utils/allCountries.d.ts.map +1 -1
- package/dist/utils/clickOutside.d.ts.map +1 -1
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +19 -17
- package/src/components/Accordion.vue +10 -10
- package/src/components/AccordionItem.vue +47 -47
- package/src/components/Alert.vue +21 -21
- package/src/components/Avatar.vue +15 -15
- package/src/components/Badge.vue +17 -16
- package/src/components/BglVideo.vue +43 -43
- package/src/components/Btn.vue +67 -65
- package/src/components/Card.vue +26 -26
- package/src/components/Carousel.vue +130 -134
- package/src/components/DataPreview.vue +30 -30
- package/src/components/Flag.vue +26 -26
- package/src/components/ListItem.vue +13 -13
- package/src/components/ListView.vue +2 -2
- package/src/components/MapEmbed.vue +33 -33
- package/src/components/MaterialIcon.vue +12 -12
- package/src/components/Modal.vue +73 -66
- package/src/components/ModalConfirm.vue +18 -18
- package/src/components/ModalForm.vue +79 -76
- package/src/components/NavBar.vue +33 -30
- package/src/components/PageTitle.vue +10 -8
- package/src/components/TableSchema.vue +126 -113
- package/src/components/Title.vue +8 -8
- package/src/components/dashboard/Lineart.vue +103 -96
- package/src/components/dashboard/index.ts +1 -1
- package/src/components/form/BglField.vue +61 -61
- package/src/components/form/BglFieldSet.vue +9 -8
- package/src/components/form/BglForm.vue +71 -70
- package/src/components/form/index.ts +4 -4
- package/src/components/form/inputs/CheckInput.vue +25 -23
- package/src/components/form/inputs/Checkbox.vue +10 -10
- package/src/components/form/inputs/ColorPicker.vue +26 -24
- package/src/components/form/inputs/DateInput.vue +39 -39
- package/src/components/form/inputs/DatePicker.vue +37 -36
- package/src/components/form/inputs/FileUpload.vue +165 -161
- package/src/components/form/inputs/FileUploadURL.vue +134 -132
- package/src/components/form/inputs/JSONInput.vue +29 -29
- package/src/components/form/inputs/RadioPillsInput.vue +49 -49
- package/src/components/form/inputs/RichText.vue +62 -63
- package/src/components/form/inputs/SelectInput.vue +173 -167
- package/src/components/form/inputs/SignaturePad.vue +150 -0
- package/src/components/form/inputs/TableField.vue +77 -76
- package/src/components/form/inputs/TelInput.vue +280 -285
- package/src/components/form/inputs/TextInput.vue +81 -76
- package/src/components/form/inputs/ToggleInput.vue +13 -13
- package/src/components/form/inputs/index.ts +17 -15
- package/src/components/formkit/FileUploader.vue +162 -158
- package/src/components/formkit/MiscFields.vue +20 -20
- package/src/components/formkit/Toggle.vue +13 -13
- package/src/components/index.ts +28 -28
- package/src/components/layout/BottomMenu.vue +25 -21
- package/src/components/layout/Layout.vue +29 -29
- package/src/components/layout/SidebarMenu.vue +31 -27
- package/src/components/layout/TabbedLayout.vue +47 -45
- package/src/components/layout/Tabs.vue +32 -32
- package/src/components/layout/TabsBody.vue +10 -10
- package/src/components/layout/TabsNav.vue +44 -44
- package/src/components/layout/index.ts +7 -7
- package/src/components/layout/tabsManager.ts +6 -6
- package/src/index.ts +13 -8
- package/src/plugins/bagel.ts +37 -37
- package/src/plugins/modal.ts +66 -67
- package/src/styles/layout.css +5 -3
- package/src/styles/mobilLayout.css +7 -0
- package/src/types/BagelForm.ts +27 -27
- package/src/types/BtnOptions.ts +13 -13
- package/src/types/NavLink.ts +8 -8
- package/src/types/file.ts +11 -11
- package/src/types/index.ts +16 -12
- package/src/types/materialIcons.ts +3249 -3249
- package/src/utils/BagelFormUtils.ts +23 -23
- package/src/utils/allCountries.ts +11 -12
- package/src/utils/clickOutside.ts +6 -6
- package/src/utils/index.ts +39 -41
- package/src/utils/lang.ts +13 -13
- package/src/utils/strings.ts +9 -9
- package/tsconfig.json +0 -1
- package/vite.config.ts +8 -8
- package/dist/components/Popover.vue.d.ts +0 -10
- package/dist/components/Popover.vue.d.ts.map +0 -1
- package/dist/types/materialIcon.d.ts +0 -2
- package/dist/types/materialIcon.d.ts.map +0 -1
|
@@ -1,41 +1,5 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="BglCarousel" :style="{ height: yHeight }" :class="{ autoHeight }">
|
|
3
|
-
<div
|
|
4
|
-
:class="{
|
|
5
|
-
dragging: isDragging,
|
|
6
|
-
clicking: isPressed,
|
|
7
|
-
[`slides-${items}`]: true,
|
|
8
|
-
allowScroll,
|
|
9
|
-
}"
|
|
10
|
-
@scrollend="scrollEnd"
|
|
11
|
-
@mousedown="startDragging"
|
|
12
|
-
class="bgl-slider"
|
|
13
|
-
ref="bglSlider">
|
|
14
|
-
<div v-if="isDragging" class="blocker" />
|
|
15
|
-
<slot />
|
|
16
|
-
</div>
|
|
17
|
-
<div class="Handlers">
|
|
18
|
-
<span @click="prev">
|
|
19
|
-
<slot :prev :index="activeSlideIndex" name="prev" />
|
|
20
|
-
</span>
|
|
21
|
-
<span @click="next">
|
|
22
|
-
<slot :next :index="activeSlideIndex" name="next" />
|
|
23
|
-
</span>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
1
|
<script setup lang="ts">
|
|
29
|
-
import { onMounted,
|
|
30
|
-
|
|
31
|
-
const bglSlider = $ref<HTMLElement>();
|
|
32
|
-
let activeSlideIndex = $ref(0);
|
|
33
|
-
let isDragging = $ref(false);
|
|
34
|
-
let startX = $ref(0);
|
|
35
|
-
let scrollLeft = $ref(0);
|
|
36
|
-
let isPressed = $ref(false);
|
|
37
|
-
|
|
38
|
-
const emit = defineEmits(['update:index']);
|
|
2
|
+
import { onMounted, onUnmounted, watch } from 'vue'
|
|
39
3
|
|
|
40
4
|
const props = defineProps({
|
|
41
5
|
autoHeight: {
|
|
@@ -58,122 +22,154 @@ const props = defineProps({
|
|
|
58
22
|
type: Number,
|
|
59
23
|
default: 0,
|
|
60
24
|
},
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
const
|
|
25
|
+
})
|
|
26
|
+
const emit = defineEmits(['update:index'])
|
|
27
|
+
const bglSlider = $ref<HTMLElement>()
|
|
28
|
+
let activeSlideIndex = $ref(0)
|
|
29
|
+
let isDragging = $ref(false)
|
|
30
|
+
let startX = $ref(0)
|
|
31
|
+
let scrollLeft = $ref(0)
|
|
32
|
+
let isPressed = $ref(false)
|
|
33
|
+
|
|
34
|
+
function disableDrag() {
|
|
64
35
|
bglSlider
|
|
65
36
|
?.querySelectorAll('img')
|
|
66
|
-
.forEach((e) => e.setAttribute('draggable', 'false'))
|
|
37
|
+
.forEach((e) => { e.setAttribute('draggable', 'false') })
|
|
67
38
|
|
|
68
39
|
for (const e of (bglSlider?.children as any[] | undefined) || []) {
|
|
69
|
-
e.setAttribute('draggable', 'false')
|
|
70
|
-
e.addEventListener('click', (e: any) => e.preventDefault())
|
|
40
|
+
e.setAttribute('draggable', 'false')
|
|
41
|
+
e.addEventListener('click', (e: any) => e.preventDefault())
|
|
71
42
|
}
|
|
72
|
-
}
|
|
43
|
+
}
|
|
73
44
|
|
|
74
|
-
let yHeight = $ref('auto')
|
|
75
|
-
|
|
76
|
-
if (!props.autoHeight || !bglSlider) return
|
|
77
|
-
const slidChildren = bglSlider.children[activeSlideIndex].children
|
|
45
|
+
let yHeight = $ref('auto')
|
|
46
|
+
function evalHeight() {
|
|
47
|
+
if (!props.autoHeight || !bglSlider) return
|
|
48
|
+
const slidChildren = bglSlider.children[activeSlideIndex].children
|
|
78
49
|
const height = Array.from(slidChildren)
|
|
79
|
-
.map(
|
|
80
|
-
.reduce((a, b) => a + b, 0)
|
|
50
|
+
.map(el => el.clientHeight)
|
|
51
|
+
.reduce((a, b) => a + b, 0)
|
|
81
52
|
|
|
82
|
-
yHeight = `${height}px
|
|
83
|
-
}
|
|
53
|
+
yHeight = `${height}px`
|
|
54
|
+
}
|
|
84
55
|
|
|
85
|
-
|
|
86
|
-
if (!bglSlider || index < 0 || index > bglSlider.children.length - 1) return
|
|
87
|
-
const slider = bglSlider
|
|
88
|
-
const isRTL = getComputedStyle(bglSlider).direction === 'rtl'
|
|
89
|
-
const scrollX = slider.offsetWidth * index * (isRTL ? -1 : 1)
|
|
90
|
-
slider.scrollTo({ left: scrollX, behavior: 'smooth' })
|
|
91
|
-
activeSlideIndex = index
|
|
92
|
-
evalHeight()
|
|
93
|
-
}
|
|
56
|
+
function goToSlide(index: number) {
|
|
57
|
+
if (!bglSlider || index < 0 || index > bglSlider.children.length - 1) return
|
|
58
|
+
const slider = bglSlider
|
|
59
|
+
const isRTL = getComputedStyle(bglSlider).direction === 'rtl'
|
|
60
|
+
const scrollX = slider.offsetWidth * index * (isRTL ? -1 : 1)
|
|
61
|
+
slider.scrollTo({ left: scrollX, behavior: 'smooth' })
|
|
62
|
+
activeSlideIndex = index
|
|
63
|
+
evalHeight()
|
|
64
|
+
}
|
|
94
65
|
|
|
95
|
-
watch(() => props.index, goToSlide)
|
|
66
|
+
watch(() => props.index, goToSlide)
|
|
96
67
|
|
|
97
68
|
watch(
|
|
98
69
|
() => activeSlideIndex,
|
|
99
|
-
(index) => emit('update:index', index)
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const slider = bglSlider
|
|
104
|
-
if (!slider || props.items !== 1) return
|
|
105
|
-
const nextSlide = Math.round(slider.scrollLeft / slider.offsetWidth)
|
|
106
|
-
goToSlide(nextSlide)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
isPressed = false
|
|
111
|
-
const slider = bglSlider
|
|
112
|
-
if (!slider) return
|
|
113
|
-
const isDragForward = startX > e.pageX + slider.offsetLeft
|
|
70
|
+
(index) => { emit('update:index', index) }
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
function scrollEnd() {
|
|
74
|
+
const slider = bglSlider
|
|
75
|
+
if (!slider || props.items !== 1) return
|
|
76
|
+
const nextSlide = Math.round(slider.scrollLeft / slider.offsetWidth)
|
|
77
|
+
goToSlide(nextSlide)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function stopDragging(e: MouseEvent) {
|
|
81
|
+
isPressed = false
|
|
82
|
+
const slider = bglSlider
|
|
83
|
+
if (!slider) return
|
|
84
|
+
const isDragForward = startX > e.pageX + slider.offsetLeft
|
|
114
85
|
if (isDragForward)
|
|
115
|
-
activeSlideIndex = Math.ceil(slider.scrollLeft / slider.offsetWidth)
|
|
116
|
-
else activeSlideIndex = Math.floor(slider.scrollLeft / slider.offsetWidth)
|
|
117
|
-
if (props.items === 1) goToSlide(activeSlideIndex)
|
|
118
|
-
startX = 0
|
|
119
|
-
document.removeEventListener('mousemove', move)
|
|
120
|
-
document.removeEventListener('mouseup', stopDragging)
|
|
121
|
-
document.removeEventListener('dragend', stopDragging)
|
|
122
|
-
setTimeout(() => (isDragging = false), 100)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (!bglSlider) return
|
|
127
|
-
const x = e.pageX - bglSlider.offsetLeft
|
|
128
|
-
const walk = x - startX
|
|
129
|
-
if (walk > 20 || walk < -20) isDragging = true
|
|
130
|
-
if (!isDragging) return
|
|
131
|
-
const scroll = x - startX
|
|
132
|
-
bglSlider.scrollLeft = scrollLeft - scroll
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
document.addEventListener('
|
|
142
|
-
document.addEventListener('
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (!bglSlider) return;
|
|
165
|
-
goToSlide(activeSlideIndex);
|
|
166
|
-
};
|
|
86
|
+
activeSlideIndex = Math.ceil(slider.scrollLeft / slider.offsetWidth)
|
|
87
|
+
else activeSlideIndex = Math.floor(slider.scrollLeft / slider.offsetWidth)
|
|
88
|
+
if (props.items === 1) goToSlide(activeSlideIndex)
|
|
89
|
+
startX = 0
|
|
90
|
+
document.removeEventListener('mousemove', move)
|
|
91
|
+
document.removeEventListener('mouseup', stopDragging)
|
|
92
|
+
document.removeEventListener('dragend', stopDragging)
|
|
93
|
+
setTimeout(() => (isDragging = false), 100)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function move(e: MouseEvent) {
|
|
97
|
+
if (!bglSlider) return
|
|
98
|
+
const x = e.pageX - bglSlider.offsetLeft
|
|
99
|
+
const walk = x - startX
|
|
100
|
+
if (walk > 20 || walk < -20) isDragging = true
|
|
101
|
+
if (!isDragging) return
|
|
102
|
+
const scroll = x - startX
|
|
103
|
+
bglSlider.scrollLeft = scrollLeft - scroll
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function startDragging(e: MouseEvent) {
|
|
107
|
+
if (e.button !== 0 || !props.freeDrag || !bglSlider) return
|
|
108
|
+
startX = e.pageX - bglSlider.offsetLeft
|
|
109
|
+
scrollLeft = bglSlider.scrollLeft
|
|
110
|
+
isPressed = true
|
|
111
|
+
document.addEventListener('mousemove', move)
|
|
112
|
+
document.addEventListener('mouseup', stopDragging)
|
|
113
|
+
document.addEventListener('dragend', stopDragging)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function next() {
|
|
117
|
+
if (!bglSlider) return
|
|
118
|
+
const slideCount = bglSlider.children.length
|
|
119
|
+
const isLastSlide = activeSlideIndex >= slideCount - 1
|
|
120
|
+
if (isLastSlide) goToSlide(0)
|
|
121
|
+
else goToSlide(activeSlideIndex + 1)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function prev() {
|
|
125
|
+
if (!bglSlider) return
|
|
126
|
+
const slideCount = bglSlider.children.length
|
|
127
|
+
if (activeSlideIndex === 0) goToSlide(slideCount - 1)
|
|
128
|
+
else goToSlide(activeSlideIndex - 1)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function evalWidth() {
|
|
132
|
+
if (!bglSlider) return
|
|
133
|
+
goToSlide(activeSlideIndex)
|
|
134
|
+
}
|
|
167
135
|
|
|
168
136
|
onMounted(() => {
|
|
169
|
-
window.addEventListener('resize', evalWidth)
|
|
170
|
-
evalHeight()
|
|
171
|
-
disableDrag()
|
|
172
|
-
})
|
|
137
|
+
window.addEventListener('resize', evalWidth)
|
|
138
|
+
evalHeight()
|
|
139
|
+
disableDrag()
|
|
140
|
+
})
|
|
173
141
|
|
|
174
|
-
onUnmounted(() => window.removeEventListener('resize', evalWidth))
|
|
142
|
+
onUnmounted(() => { window.removeEventListener('resize', evalWidth) })
|
|
175
143
|
</script>
|
|
176
144
|
|
|
145
|
+
<template>
|
|
146
|
+
<div class="BglCarousel" :style="{ height: yHeight }" :class="{ autoHeight }">
|
|
147
|
+
<div
|
|
148
|
+
ref="bglSlider"
|
|
149
|
+
:class="{
|
|
150
|
+
dragging: isDragging,
|
|
151
|
+
clicking: isPressed,
|
|
152
|
+
[`slides-${items}`]: true,
|
|
153
|
+
allowScroll,
|
|
154
|
+
}"
|
|
155
|
+
class="bgl-slider"
|
|
156
|
+
@scrollend="scrollEnd"
|
|
157
|
+
@mousedown="startDragging"
|
|
158
|
+
>
|
|
159
|
+
<div v-if="isDragging" class="blocker" />
|
|
160
|
+
<slot />
|
|
161
|
+
</div>
|
|
162
|
+
<div class="Handlers">
|
|
163
|
+
<span @click="prev">
|
|
164
|
+
<slot :prev :index="activeSlideIndex" name="prev" />
|
|
165
|
+
</span>
|
|
166
|
+
<span @click="next">
|
|
167
|
+
<slot :next :index="activeSlideIndex" name="next" />
|
|
168
|
+
</span>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</template>
|
|
172
|
+
|
|
177
173
|
<style scoped>
|
|
178
174
|
.blocker {
|
|
179
175
|
position: fixed;
|
|
@@ -1,16 +1,43 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import {
|
|
3
|
+
BglField,
|
|
4
|
+
type BglFormSchemaT,
|
|
5
|
+
Title,
|
|
6
|
+
iffer,
|
|
7
|
+
keyToLabel,
|
|
8
|
+
} from '@bagelink/vue'
|
|
9
|
+
|
|
10
|
+
const props = defineProps<{
|
|
11
|
+
showFields?: string[]
|
|
12
|
+
schema?: BglFormSchemaT
|
|
13
|
+
title?: string
|
|
14
|
+
}>()
|
|
15
|
+
|
|
16
|
+
const itemData = defineModel<Record<string, any>>('data', { default: {} })
|
|
17
|
+
const computedSchema = $computed(() => {
|
|
18
|
+
console.log(itemData.value)
|
|
19
|
+
const schema = Object.keys(itemData.value)
|
|
20
|
+
if (props.showFields && props.showFields.length) {
|
|
21
|
+
return schema.filter((field: any) => props.showFields?.includes(field))
|
|
22
|
+
}
|
|
23
|
+
console.log(schema)
|
|
24
|
+
return schema
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
1
28
|
<template>
|
|
2
29
|
<div v-if="data" class="data">
|
|
3
30
|
<Title v-if="title" :label="title" />
|
|
4
31
|
<template v-for="field in schema" :key="field.id">
|
|
5
|
-
<div
|
|
32
|
+
<div v-if="iffer(field, itemData)" class="data-row">
|
|
6
33
|
<div class="key">
|
|
7
34
|
{{ field?.label || keyToLabel(field.id) }}
|
|
8
35
|
</div>
|
|
9
|
-
<BglField label="" style="width: min-content; min-width: 140px" :field="field"
|
|
36
|
+
<BglField v-model="itemData" label="" style="width: min-content; min-width: 140px" :field="field" />
|
|
10
37
|
</div>
|
|
11
38
|
</template>
|
|
12
39
|
<div v-if="!schema?.length">
|
|
13
|
-
<div
|
|
40
|
+
<div v-for="key in computedSchema" :key class="data-row">
|
|
14
41
|
<div class="key">
|
|
15
42
|
{{ keyToLabel(key) }}
|
|
16
43
|
</div>
|
|
@@ -23,33 +50,6 @@
|
|
|
23
50
|
</div>
|
|
24
51
|
</template>
|
|
25
52
|
|
|
26
|
-
<script lang="ts" setup>
|
|
27
|
-
import {
|
|
28
|
-
type BglFormSchemaT,
|
|
29
|
-
keyToLabel,
|
|
30
|
-
iffer,
|
|
31
|
-
Title,
|
|
32
|
-
BglField,
|
|
33
|
-
} from '@bagelink/vue';
|
|
34
|
-
|
|
35
|
-
const props = defineProps<{
|
|
36
|
-
showFields?: string[],
|
|
37
|
-
schema?: BglFormSchemaT,
|
|
38
|
-
title?: string,
|
|
39
|
-
}>();
|
|
40
|
-
|
|
41
|
-
const itemData = defineModel<Record<string, any>>('data', { default: {} });
|
|
42
|
-
const computedSchema = $computed(() => {
|
|
43
|
-
console.log(itemData.value);
|
|
44
|
-
const schema = Object.keys(itemData.value);
|
|
45
|
-
if (props.showFields && props.showFields.length) {
|
|
46
|
-
return schema?.filter((field:any) => props.showFields?.includes(field));
|
|
47
|
-
}
|
|
48
|
-
console.log(schema);
|
|
49
|
-
return schema;
|
|
50
|
-
});
|
|
51
|
-
</script>
|
|
52
|
-
|
|
53
53
|
<style scoped>
|
|
54
54
|
.data {
|
|
55
55
|
border: 1.1px solid var(--border-color);
|
package/src/components/Flag.vue
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<span
|
|
3
|
-
class="fi"
|
|
4
|
-
:style="{ height, backgroundImage }"
|
|
5
|
-
:class="{ fis, circle }"
|
|
6
|
-
/>
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
1
|
<script lang="ts" setup>
|
|
10
|
-
import { CountryCode } from 'libphonenumber-js'
|
|
2
|
+
import type { CountryCode } from 'libphonenumber-js'
|
|
11
3
|
|
|
12
|
-
|
|
13
|
-
country: CountryCode
|
|
14
|
-
size?: number | string
|
|
15
|
-
circle?: boolean
|
|
16
|
-
square?: boolean
|
|
17
|
-
}
|
|
18
|
-
const props = defineProps<FlagProps>()
|
|
4
|
+
interface FlagProps {
|
|
5
|
+
country: CountryCode
|
|
6
|
+
size?: number | string
|
|
7
|
+
circle?: boolean
|
|
8
|
+
square?: boolean
|
|
9
|
+
}
|
|
10
|
+
const props = defineProps<FlagProps>()
|
|
19
11
|
|
|
20
12
|
const fis = $computed(() => {
|
|
21
|
-
if (props.circle || props.square) return true
|
|
22
|
-
return false
|
|
23
|
-
})
|
|
24
|
-
const height = $computed(() => `${props.size || 1}rem`)
|
|
13
|
+
if (props.circle || props.square) return true
|
|
14
|
+
return false
|
|
15
|
+
})
|
|
16
|
+
const height = $computed(() => `${props.size || 1}rem`)
|
|
25
17
|
|
|
26
18
|
const backgroundImage = $computed(() => {
|
|
27
|
-
let country = props.country.toLowerCase()
|
|
28
|
-
if (country === 'ac') country = 'sh-ac'
|
|
29
|
-
const baseURL = 'https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.0.0/flags'
|
|
30
|
-
if (fis) return `url(${baseURL}/1x1/${country.toLowerCase()}.svg)
|
|
31
|
-
return `url(${baseURL}/4x3/${country.toLowerCase()}.svg)
|
|
32
|
-
})
|
|
19
|
+
let country = props.country.toLowerCase()
|
|
20
|
+
if (country === 'ac') country = 'sh-ac'
|
|
21
|
+
const baseURL = 'https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.0.0/flags'
|
|
22
|
+
if (fis) return `url(${baseURL}/1x1/${country.toLowerCase()}.svg)`
|
|
23
|
+
return `url(${baseURL}/4x3/${country.toLowerCase()}.svg)`
|
|
24
|
+
})
|
|
33
25
|
</script>
|
|
34
26
|
|
|
27
|
+
<template>
|
|
28
|
+
<span
|
|
29
|
+
class="fi"
|
|
30
|
+
:style="{ height, backgroundImage }"
|
|
31
|
+
:class="{ fis, circle }"
|
|
32
|
+
/>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
35
|
<style scoped>
|
|
36
36
|
.fi{
|
|
37
37
|
background-size:contain;
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { Avatar } from '@bagelink/vue'
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
src?: string
|
|
6
|
+
showAvatar?: boolean
|
|
7
|
+
to?: string
|
|
8
|
+
title?: string
|
|
9
|
+
subtitle?: string
|
|
10
|
+
}>()
|
|
11
|
+
</script>
|
|
12
|
+
|
|
1
13
|
<template>
|
|
2
14
|
<component :is="to ? 'RouterLink' : 'div'" :to="to" class="flex list-item gap-1">
|
|
3
|
-
<Avatar style="flex-basis: 1;" :name="title" :src="src"
|
|
15
|
+
<Avatar v-if="src || showAvatar" style="flex-basis: 1;" :name="title" :src="src" :size="40" />
|
|
4
16
|
<div>
|
|
5
17
|
<p class="txt16 no-margin ellipsis">
|
|
6
18
|
{{ title }}
|
|
@@ -13,15 +25,3 @@
|
|
|
13
25
|
</div>
|
|
14
26
|
</component>
|
|
15
27
|
</template>
|
|
16
|
-
|
|
17
|
-
<script lang="ts" setup>
|
|
18
|
-
import { Avatar } from '@bagelink/vue';
|
|
19
|
-
|
|
20
|
-
defineProps<{
|
|
21
|
-
src?: string;
|
|
22
|
-
showAvatar?: boolean;
|
|
23
|
-
to?: string;
|
|
24
|
-
title?: string;
|
|
25
|
-
subtitle?: string;
|
|
26
|
-
}>();
|
|
27
|
-
</script>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
<script lang="ts" setup></script>
|
|
2
|
+
|
|
1
3
|
<template>
|
|
2
4
|
<div class="list-wrap bgl_card thin grid overflow-hidden h-100 p-0">
|
|
3
5
|
<div class="p-1">
|
|
@@ -9,8 +11,6 @@
|
|
|
9
11
|
</div>
|
|
10
12
|
</template>
|
|
11
13
|
|
|
12
|
-
<script lang="ts" setup></script>
|
|
13
|
-
|
|
14
14
|
<style>
|
|
15
15
|
.list-wrap {
|
|
16
16
|
grid-template-rows: auto 1fr;
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="map-test"/>
|
|
3
|
-
<div class="map" id="map" :style="{height: `${height || 400}px`}"/>
|
|
4
|
-
</template>
|
|
5
|
-
|
|
6
1
|
<script setup lang="ts">
|
|
7
|
-
import L from 'leaflet'
|
|
8
|
-
import type { LatLngExpression, Map, Marker } from 'leaflet'
|
|
9
|
-
import 'leaflet/dist/leaflet.css'
|
|
10
|
-
import { onMounted, watch } from 'vue'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
center?: LatLngExpression
|
|
14
|
-
zoom?: number
|
|
15
|
-
height?: number
|
|
16
|
-
address?: string
|
|
17
|
-
}
|
|
2
|
+
import L from 'leaflet'
|
|
3
|
+
import type { LatLngExpression, Map, Marker } from 'leaflet'
|
|
4
|
+
import 'leaflet/dist/leaflet.css'
|
|
5
|
+
import { onMounted, watch } from 'vue'
|
|
6
|
+
|
|
7
|
+
interface MapProps {
|
|
8
|
+
center?: LatLngExpression
|
|
9
|
+
zoom?: number
|
|
10
|
+
height?: number
|
|
11
|
+
address?: string
|
|
12
|
+
}
|
|
18
13
|
|
|
19
|
-
const props = defineProps<MapProps>()
|
|
14
|
+
const props = defineProps<MapProps>()
|
|
20
15
|
|
|
21
|
-
let map = $ref<Map>()
|
|
22
|
-
const markers = $ref<Marker[]>([])
|
|
16
|
+
let map = $ref<Map>()
|
|
17
|
+
const markers = $ref<Marker[]>([])
|
|
23
18
|
|
|
24
19
|
function initializeMap() {
|
|
25
20
|
map = L.map('map', {
|
|
26
21
|
center: props.center || [31.7683, 35.2137],
|
|
27
22
|
zoom: props.zoom || 13,
|
|
28
|
-
})
|
|
29
|
-
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18 }).addTo(map)
|
|
23
|
+
})
|
|
24
|
+
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18 }).addTo(map)
|
|
30
25
|
}
|
|
31
26
|
|
|
32
|
-
onMounted(initializeMap)
|
|
33
|
-
const markerSVG = '<svg width="199" height="284" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M29.859 29.266A99 99 0 0 1 198.862 99.27c0 74.25-99 183.857-99 183.857s-99-109.607-99-183.858A99 99 0 0 1 29.86 29.266Zm70.004 118.961c25.513 0 46.195-20.683 46.195-46.196 0-25.513-20.682-46.195-46.195-46.195S53.667 76.518 53.667 102.03s20.683 46.196 46.196 46.196Z" fill="#F04033"/></svg>'
|
|
27
|
+
onMounted(initializeMap)
|
|
28
|
+
const markerSVG = '<svg width="199" height="284" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M29.859 29.266A99 99 0 0 1 198.862 99.27c0 74.25-99 183.857-99 183.857s-99-109.607-99-183.858A99 99 0 0 1 29.86 29.266Zm70.004 118.961c25.513 0 46.195-20.683 46.195-46.196 0-25.513-20.682-46.195-46.195-46.195S53.667 76.518 53.667 102.03s20.683 46.196 46.196 46.196Z" fill="#F04033"/></svg>'
|
|
34
29
|
|
|
35
30
|
function addMarker(latlng: LatLngExpression) {
|
|
36
31
|
const customIcon = L.icon({
|
|
37
32
|
iconUrl: `data:image/svg+xml;utf8,${encodeURIComponent(markerSVG)}`,
|
|
38
33
|
iconSize: [32, 32],
|
|
39
|
-
})
|
|
40
|
-
const marker = L.marker(latlng, { icon: customIcon }).addTo(map)
|
|
41
|
-
markers.push(marker)
|
|
34
|
+
})
|
|
35
|
+
const marker = L.marker(latlng, { icon: customIcon }).addTo(map)
|
|
36
|
+
markers.push(marker)
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
async function geocodeAddress(address:string) {
|
|
45
|
-
const geocodeUrl = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(address)}
|
|
46
|
-
const res = await fetch(geocodeUrl)
|
|
47
|
-
const data = await res.json() || []
|
|
48
|
-
data.forEach((element) => addMarker([element.lat, element.lon]))
|
|
39
|
+
async function geocodeAddress(address: string) {
|
|
40
|
+
const geocodeUrl = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(address)}`
|
|
41
|
+
const res = await fetch(geocodeUrl)
|
|
42
|
+
const data = await res.json() || []
|
|
43
|
+
data.forEach((element) => { addMarker([element.lat, element.lon]) })
|
|
49
44
|
}
|
|
50
45
|
|
|
51
46
|
watch(() => props.address, (address) => {
|
|
52
|
-
if (address) geocodeAddress(address).catch(console.error)
|
|
53
|
-
}, { immediate: true })
|
|
47
|
+
if (address) geocodeAddress(address).catch(console.error)
|
|
48
|
+
}, { immediate: true })
|
|
54
49
|
</script>
|
|
55
50
|
|
|
51
|
+
<template>
|
|
52
|
+
<div class="map-test" />
|
|
53
|
+
<div id="map" class="map" :style="{ height: `${height || 400}px` }" />
|
|
54
|
+
</template>
|
|
55
|
+
|
|
56
56
|
<style>
|
|
57
57
|
#map {
|
|
58
58
|
height: 100%;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="bgl_icon-font" :style="{ fontSize: `${size}rem`, color }">
|
|
3
|
-
{{ icon || name }}
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
1
|
<script setup lang="ts">
|
|
8
|
-
import type { MaterialIcons } from '@bagelink/vue'
|
|
2
|
+
import type { MaterialIcons } from '@bagelink/vue'
|
|
9
3
|
|
|
10
4
|
defineProps<{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}>()
|
|
5
|
+
icon?: MaterialIcons
|
|
6
|
+
name?: MaterialIcons
|
|
7
|
+
size?: number
|
|
8
|
+
color?: string
|
|
9
|
+
}>()
|
|
16
10
|
</script>
|
|
17
11
|
|
|
12
|
+
<template>
|
|
13
|
+
<div class="bgl_icon-font" :style="{ fontSize: `${size}rem`, color }">
|
|
14
|
+
{{ icon || name }}
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
18
|
<style scoped></style>
|