@bagelink/vue 0.0.1008 → 0.0.1014
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/form/BglField.vue.d.ts.map +1 -1
- package/dist/components/form/FieldArray.vue.d.ts +34 -0
- package/dist/components/form/FieldArray.vue.d.ts.map +1 -0
- package/dist/components/form/index.d.ts +1 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
- package/dist/index.cjs +185 -82
- package/dist/index.mjs +185 -82
- package/dist/style.css +31 -21
- package/package.json +1 -1
- package/src/components/AccordionItem.vue +3 -3
- package/src/components/form/BglField.vue +2 -0
- package/src/components/form/FieldArray.vue +103 -0
- package/src/components/form/index.ts +1 -0
- package/src/components/form/inputs/RichText/index.vue +9 -1
package/dist/style.css
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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
|
-
.accordion-item[data-v-
|
|
2
|
+
.accordion-item[data-v-1e73ca3e] {
|
|
3
3
|
border-bottom: 1px solid var(--border-color);
|
|
4
4
|
transition: all 0.2s;
|
|
5
5
|
cursor: pointer;
|
|
6
6
|
overflow: hidden;
|
|
7
7
|
}
|
|
8
|
-
.accordion-item button[data-v-
|
|
8
|
+
.accordion-item button[data-v-1e73ca3e] {
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
}
|
|
11
|
-
.accordion-head[data-v-
|
|
11
|
+
.accordion-head[data-v-1e73ca3e] {
|
|
12
12
|
height: var(--input-height);
|
|
13
13
|
background: transparent;
|
|
14
14
|
display: flex;
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
border: none;
|
|
19
19
|
color: inherit !important;
|
|
20
20
|
}
|
|
21
|
-
.accordion-icon[data-v-
|
|
21
|
+
.accordion-icon[data-v-1e73ca3e] {
|
|
22
22
|
transition: all 0.2s ease;
|
|
23
23
|
display: flex;
|
|
24
24
|
align-items: center;
|
|
@@ -28,16 +28,16 @@
|
|
|
28
28
|
padding-inline: calc(var(--btn-padding) / 3);
|
|
29
29
|
justify-content: center;
|
|
30
30
|
}
|
|
31
|
-
[aria-expanded="true"] .accordion-icon[data-v-
|
|
31
|
+
[aria-expanded="true"] .accordion-icon[data-v-1e73ca3e] {
|
|
32
32
|
transform: rotate(180deg);
|
|
33
33
|
}
|
|
34
|
-
.accordion-label[data-v-
|
|
34
|
+
.accordion-label[data-v-1e73ca3e] {
|
|
35
35
|
font-weight: bold;
|
|
36
36
|
}
|
|
37
|
-
.flat.accordion-item[data-v-
|
|
37
|
+
.flat.accordion-item[data-v-1e73ca3e] {
|
|
38
38
|
border-bottom: none
|
|
39
39
|
}
|
|
40
|
-
.accordion-head:hover .accordion-label[data-v-
|
|
40
|
+
.accordion-head:hover .accordion-label[data-v-1e73ca3e] {
|
|
41
41
|
text-decoration: underline;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -605,6 +605,10 @@ data[data-v-6c27f163] {
|
|
|
605
605
|
transform: translateY(-2.6rem);
|
|
606
606
|
}
|
|
607
607
|
|
|
608
|
+
.itemBox[data-v-e8cf25b3]:hover {
|
|
609
|
+
outline: 1px solid var(--bgl-primary);
|
|
610
|
+
}
|
|
611
|
+
|
|
608
612
|
.primary-checkbox input[data-v-73f1d9ad] {
|
|
609
613
|
appearance: none;
|
|
610
614
|
accent-color: var(--bgl-accent-color);
|
|
@@ -1184,26 +1188,32 @@ pre code.hljs{
|
|
|
1184
1188
|
color: white;
|
|
1185
1189
|
}
|
|
1186
1190
|
|
|
1187
|
-
.
|
|
1191
|
+
.content-area p,
|
|
1192
|
+
.content-area span,
|
|
1193
|
+
.content-area li{
|
|
1194
|
+
line-height: 1.65;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
.rich-text-editor[data-v-7a98aefd] {
|
|
1188
1198
|
background: var(--input-bg);
|
|
1189
1199
|
border: 1px solid var(--border-color);
|
|
1190
1200
|
transition: all 0.3s ease;
|
|
1191
1201
|
}
|
|
1192
|
-
.editor-container[data-v-
|
|
1202
|
+
.editor-container[data-v-7a98aefd] {
|
|
1193
1203
|
display: flex;
|
|
1194
1204
|
gap: 1rem;
|
|
1195
1205
|
}
|
|
1196
|
-
.content-area[data-v-
|
|
1197
|
-
.preview-area[data-v-
|
|
1206
|
+
.content-area[data-v-7a98aefd],
|
|
1207
|
+
.preview-area[data-v-7a98aefd] {
|
|
1198
1208
|
flex: 1;
|
|
1199
1209
|
min-height: 200px;
|
|
1200
1210
|
background: var(--bgl-richtext-color);
|
|
1201
1211
|
}
|
|
1202
|
-
.split-view[data-v-
|
|
1212
|
+
.split-view[data-v-7a98aefd] {
|
|
1203
1213
|
display: grid;
|
|
1204
1214
|
grid-template-columns: 1fr 1fr;
|
|
1205
1215
|
}
|
|
1206
|
-
.editableContent[data-v-
|
|
1216
|
+
.editableContent[data-v-7a98aefd] {
|
|
1207
1217
|
width: 100%;
|
|
1208
1218
|
min-height: 240px;
|
|
1209
1219
|
height: 100%;
|
|
@@ -1211,7 +1221,7 @@ pre code.hljs{
|
|
|
1211
1221
|
outline: none;
|
|
1212
1222
|
background: transparent;
|
|
1213
1223
|
}
|
|
1214
|
-
.html-editor[data-v-
|
|
1224
|
+
.html-editor[data-v-7a98aefd] {
|
|
1215
1225
|
width: 100%;
|
|
1216
1226
|
height: 100%;
|
|
1217
1227
|
min-height: 200px;
|
|
@@ -1222,12 +1232,12 @@ pre code.hljs{
|
|
|
1222
1232
|
color: white;
|
|
1223
1233
|
background-color: var(--bgl-black);
|
|
1224
1234
|
}
|
|
1225
|
-
.preview-area[data-v-
|
|
1235
|
+
.preview-area[data-v-7a98aefd] {
|
|
1226
1236
|
font-family: monospace;
|
|
1227
1237
|
white-space: pre-wrap;
|
|
1228
1238
|
overflow-x: auto;
|
|
1229
1239
|
}
|
|
1230
|
-
.fullscreen-mode[data-v-
|
|
1240
|
+
.fullscreen-mode[data-v-7a98aefd] {
|
|
1231
1241
|
position: fixed;
|
|
1232
1242
|
top: 0;
|
|
1233
1243
|
left: 0;
|
|
@@ -1236,15 +1246,15 @@ pre code.hljs{
|
|
|
1236
1246
|
z-index: 9999;
|
|
1237
1247
|
padding: 2rem;
|
|
1238
1248
|
}
|
|
1239
|
-
.fullscreen-mode .editor-container[data-v-
|
|
1249
|
+
.fullscreen-mode .editor-container[data-v-7a98aefd] {
|
|
1240
1250
|
height: calc(100vh - 4rem);
|
|
1241
1251
|
}
|
|
1242
|
-
.fullscreen-mode .content-area[data-v-
|
|
1243
|
-
.fullscreen-mode .preview-area[data-v-
|
|
1252
|
+
.fullscreen-mode .content-area[data-v-7a98aefd],
|
|
1253
|
+
.fullscreen-mode .preview-area[data-v-7a98aefd] {
|
|
1244
1254
|
height: 100%;
|
|
1245
1255
|
overflow-y: auto;
|
|
1246
1256
|
}
|
|
1247
|
-
.fullscreen-mode .code-editor[data-v-
|
|
1257
|
+
.fullscreen-mode .code-editor[data-v-7a98aefd]{
|
|
1248
1258
|
height: 100% !important;
|
|
1249
1259
|
}
|
|
1250
1260
|
.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.v-popper__popper{z-index:10000;top:0;left:0;outline:none}.v-popper__popper.v-popper__popper--hidden{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s;pointer-events:none}.v-popper__popper.v-popper__popper--shown{visibility:visible;opacity:1;transition:opacity .15s}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{transition:none!important}.v-popper__backdrop{position:absolute;top:0;left:0;width:100%;height:100%;display:none}.v-popper__inner{position:relative;box-sizing:border-box;overflow-y:auto}.v-popper__inner>div{position:relative;z-index:1;max-width:inherit;max-height:inherit}.v-popper__arrow-container{position:absolute;width:10px;height:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;position:absolute;top:0;left:0;width:0;height:0}.v-popper__arrow-inner{visibility:hidden;border-width:7px}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{border-top-width:0;border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{border-left-width:0;border-left-color:transparent!important;border-top-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{border-right-width:0;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{left:-2px}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);color:#fff;border-radius:6px;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.v-popper--theme-dropdown .v-popper__inner{background:#fff;color:#000;border-radius:6px;border:1px solid #ddd;box-shadow:0 6px 30px #0000001a}.v-popper--theme-dropdown .v-popper__arrow-inner{visibility:visible;border-color:#fff}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@ const props = defineProps<{
|
|
|
14
14
|
|
|
15
15
|
const emit = defineEmits(['update:open'])
|
|
16
16
|
|
|
17
|
-
let openVal = $ref(
|
|
17
|
+
let openVal = $ref(!!props.open)
|
|
18
18
|
|
|
19
19
|
let isOpen = $computed({
|
|
20
20
|
get: () => openVal,
|
|
@@ -28,7 +28,7 @@ interface AccordionState {
|
|
|
28
28
|
openItem?: string
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const accordionState = inject<AccordionState>('accordionState'
|
|
31
|
+
const accordionState = inject<AccordionState>('accordionState')
|
|
32
32
|
const id = props.id || Math.random().toString(36).slice(7)
|
|
33
33
|
|
|
34
34
|
const computedIcon = computed(() => {
|
|
@@ -38,7 +38,7 @@ const computedIcon = computed(() => {
|
|
|
38
38
|
})
|
|
39
39
|
const iconPosition = computed(() => props.iconPosition || 'end')
|
|
40
40
|
|
|
41
|
-
watch(() => props.open,
|
|
41
|
+
watch(() => props.open, () => isOpen = props.open, { immediate: true })
|
|
42
42
|
|
|
43
43
|
if (accordionState) {
|
|
44
44
|
watch(
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
CheckInput,
|
|
4
4
|
DateInput,
|
|
5
|
+
FieldArray,
|
|
5
6
|
type Field,
|
|
6
7
|
FileUpload,
|
|
7
8
|
RichText,
|
|
@@ -33,6 +34,7 @@ const is = $computed(() => {
|
|
|
33
34
|
customAttrs.multiline = true
|
|
34
35
|
return TextInput
|
|
35
36
|
}
|
|
37
|
+
if (props.field.$el === 'array') return FieldArray
|
|
36
38
|
if (props.field.$el === 'select') return SelectInput
|
|
37
39
|
if (props.field.$el === 'toggle') return ToggleInput
|
|
38
40
|
if (props.field.$el === 'check') return CheckInput
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
<script lang="ts" setup generic="T extends Record<string, any>">
|
|
2
|
+
import type {
|
|
3
|
+
AttributeFn,
|
|
4
|
+
AttributeValue,
|
|
5
|
+
Attributes,
|
|
6
|
+
BagelFieldOptions,
|
|
7
|
+
BglFormSchemaFnT,
|
|
8
|
+
Field,
|
|
9
|
+
} from '@bagelink/vue'
|
|
10
|
+
import { BglForm, Btn } from '@bagelink/vue'
|
|
11
|
+
import Card from '../Card.vue'
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(
|
|
14
|
+
defineProps<{
|
|
15
|
+
el?: any
|
|
16
|
+
id: string
|
|
17
|
+
label?: string
|
|
18
|
+
placeholder?: string
|
|
19
|
+
children?: Field<T>[]
|
|
20
|
+
class?: AttributeValue | AttributeFn<T>
|
|
21
|
+
attrs?: Attributes<T>
|
|
22
|
+
required?: boolean
|
|
23
|
+
disabled?: boolean
|
|
24
|
+
helptext?: string
|
|
25
|
+
options?: BagelFieldOptions<T>
|
|
26
|
+
defaultValue?: any
|
|
27
|
+
add?: boolean
|
|
28
|
+
delete?: boolean
|
|
29
|
+
schema: BglFormSchemaFnT
|
|
30
|
+
modelValue: T[]
|
|
31
|
+
}>(),
|
|
32
|
+
{
|
|
33
|
+
delete: true,
|
|
34
|
+
add: true,
|
|
35
|
+
el: 'div',
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
const emit = defineEmits(['update:modelValue'])
|
|
40
|
+
|
|
41
|
+
const data = $ref<T[]>(props.modelValue || [])
|
|
42
|
+
|
|
43
|
+
function emitValue() {
|
|
44
|
+
emit('update:modelValue', data)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function deleteItem(i: number) {
|
|
48
|
+
data.splice(i, 1)
|
|
49
|
+
emitValue()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function addItem() {
|
|
53
|
+
data.push({} as any)
|
|
54
|
+
emitValue()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const computedField = $computed(
|
|
58
|
+
() => ({
|
|
59
|
+
label: props.label,
|
|
60
|
+
placeholder: props.placeholder,
|
|
61
|
+
children: props.children,
|
|
62
|
+
class: props.class,
|
|
63
|
+
attrs: props.attrs,
|
|
64
|
+
required: props.required,
|
|
65
|
+
disabled: props.disabled,
|
|
66
|
+
helptext: props.helptext,
|
|
67
|
+
options: props.options,
|
|
68
|
+
defaultValue: props.defaultValue,
|
|
69
|
+
$el: props.el,
|
|
70
|
+
}) as Field<T>
|
|
71
|
+
) as Field<Record<string, any>>
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<template>
|
|
75
|
+
<div>
|
|
76
|
+
<p class="label mb-05">
|
|
77
|
+
{{ label }}
|
|
78
|
+
</p>
|
|
79
|
+
<div>
|
|
80
|
+
<Card v-for="(_, i) in data" :key="i" outline thin class="mb-05 itemBox bg-white transition">
|
|
81
|
+
<BglForm v-if="schema" v-model="data[i]" :schema="schema" @update:model-value="emitValue" />
|
|
82
|
+
<Btn
|
|
83
|
+
v-if="props.delete"
|
|
84
|
+
icon="delete"
|
|
85
|
+
value="Delete"
|
|
86
|
+
class="txt10 opacity-7 color-red"
|
|
87
|
+
thin
|
|
88
|
+
flat
|
|
89
|
+
@click="deleteItem(i)"
|
|
90
|
+
/>
|
|
91
|
+
</Card>
|
|
92
|
+
<Btn v-if="add" icon="add" color="gray" class="w-100" @click="addItem">
|
|
93
|
+
<p>Add {{ label }}</p>
|
|
94
|
+
</Btn>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</template>
|
|
98
|
+
|
|
99
|
+
<style scoped>
|
|
100
|
+
.itemBox:hover {
|
|
101
|
+
outline: 1px solid var(--bgl-primary);
|
|
102
|
+
}
|
|
103
|
+
</style>
|
|
@@ -2,4 +2,5 @@ export { default as BglField } from './BglField.vue'
|
|
|
2
2
|
export { default as BglForm } from './BglForm.vue'
|
|
3
3
|
export { default as BagelForm } from './BglForm.vue'
|
|
4
4
|
export { default as BglMultiStepForm } from './BglMultiStepForm.vue'
|
|
5
|
+
export { default as FieldArray } from './FieldArray.vue'
|
|
5
6
|
export * from './inputs'
|
|
@@ -67,6 +67,14 @@ watch(() => editor.state.content, (newValue) => {
|
|
|
67
67
|
</div>
|
|
68
68
|
</template>
|
|
69
69
|
|
|
70
|
+
<style>
|
|
71
|
+
.content-area p,
|
|
72
|
+
.content-area span,
|
|
73
|
+
.content-area li{
|
|
74
|
+
line-height: 1.65;
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
77
|
+
|
|
70
78
|
<style scoped>
|
|
71
79
|
.rich-text-editor {
|
|
72
80
|
background: var(--input-bg);
|
|
@@ -140,4 +148,4 @@ watch(() => editor.state.content, (newValue) => {
|
|
|
140
148
|
.fullscreen-mode .code-editor{
|
|
141
149
|
height: 100% !important;
|
|
142
150
|
}
|
|
143
|
-
</style
|
|
151
|
+
</style
|