@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/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-3a286d21] {
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-3a286d21] {
8
+ .accordion-item button[data-v-1e73ca3e] {
9
9
  cursor: pointer;
10
10
  }
11
- .accordion-head[data-v-3a286d21] {
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-3a286d21] {
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-3a286d21] {
31
+ [aria-expanded="true"] .accordion-icon[data-v-1e73ca3e] {
32
32
  transform: rotate(180deg);
33
33
  }
34
- .accordion-label[data-v-3a286d21] {
34
+ .accordion-label[data-v-1e73ca3e] {
35
35
  font-weight: bold;
36
36
  }
37
- .flat.accordion-item[data-v-3a286d21] {
37
+ .flat.accordion-item[data-v-1e73ca3e] {
38
38
  border-bottom: none
39
39
  }
40
- .accordion-head:hover .accordion-label[data-v-3a286d21] {
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
- .rich-text-editor[data-v-e274dd3b] {
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-e274dd3b] {
1202
+ .editor-container[data-v-7a98aefd] {
1193
1203
  display: flex;
1194
1204
  gap: 1rem;
1195
1205
  }
1196
- .content-area[data-v-e274dd3b],
1197
- .preview-area[data-v-e274dd3b] {
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-e274dd3b] {
1212
+ .split-view[data-v-7a98aefd] {
1203
1213
  display: grid;
1204
1214
  grid-template-columns: 1fr 1fr;
1205
1215
  }
1206
- .editableContent[data-v-e274dd3b] {
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-e274dd3b] {
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-e274dd3b] {
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-e274dd3b] {
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-e274dd3b] {
1249
+ .fullscreen-mode .editor-container[data-v-7a98aefd] {
1240
1250
  height: calc(100vh - 4rem);
1241
1251
  }
1242
- .fullscreen-mode .content-area[data-v-e274dd3b],
1243
- .fullscreen-mode .preview-area[data-v-e274dd3b] {
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-e274dd3b]{
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "0.0.1008",
4
+ "version": "0.0.1014",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -14,7 +14,7 @@ const props = defineProps<{
14
14
 
15
15
  const emit = defineEmits(['update:open'])
16
16
 
17
- let openVal = $ref(false)
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', { openItem: undefined })
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, val => isOpen = !!val, { immediate: true })
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