@koumoul/vjsf 3.22.1 → 3.23.0
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 +2 -2
- package/src/components/fragments/list-select-key.vue +12 -5
- package/src/components/nodes/list.vue +40 -29
- package/src/components/nodes/textarea.vue +4 -0
- package/src/options.js +2 -1
- package/src/types.ts +1 -0
- package/types/options.d.ts +1 -0
- package/types/options.d.ts.map +1 -1
- package/types/types.d.ts +1 -0
- package/types/types.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koumoul/vjsf",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.23.0",
|
|
4
4
|
"description": "Generate forms for the vuetify UI library (vuejs) based on annotated JSON schemas.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test-tz1": "TZ=Europe/Paris vitest run",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"vuetify": "^3.8.12"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@json-layout/core": "~2.
|
|
75
|
+
"@json-layout/core": "~2.2.1",
|
|
76
76
|
"@json-layout/vocabulary": "~2.9.0",
|
|
77
77
|
"@vueuse/core": "^12.5.0",
|
|
78
78
|
"debug": "^4.3.4"
|
|
@@ -32,24 +32,31 @@ export default defineComponent({
|
|
|
32
32
|
emits: ['update:modelValue'],
|
|
33
33
|
setup (props, { emit }) {
|
|
34
34
|
useDefaults({}, 'VjsfListSelectKey')
|
|
35
|
-
const vSelectProps = useCompDefaults('
|
|
35
|
+
const vSelectProps = useCompDefaults('VjsfIndexedList-VSelect', { variant: 'outlined', class: 'mt-2' })
|
|
36
36
|
const avatarProps = useCompDefaults('VjsfSelectItem-VAvatar', { rounded: false, size: 'small' })
|
|
37
37
|
|
|
38
38
|
// @ts-ignore
|
|
39
39
|
const { getItems, selectProps, selectSlots } = useSelectNode(toRef(props, 'listNode'), props.statefulLayout, avatarProps.value, 'v-select')
|
|
40
40
|
|
|
41
|
+
const fixedSelectProps = computed(() => {
|
|
42
|
+
const fixedSelectProps = { ...selectProps.value }
|
|
43
|
+
delete fixedSelectProps.hint
|
|
44
|
+
fixedSelectProps.label = props.listNode.messages.addItem
|
|
45
|
+
return fixedSelectProps
|
|
46
|
+
})
|
|
47
|
+
|
|
41
48
|
const fieldProps = computed(() => {
|
|
42
|
-
const fieldProps = mergePropsLevels([vSelectProps.value,
|
|
43
|
-
fieldProps.label = props.listNode.messages.addItem
|
|
49
|
+
const fieldProps = mergePropsLevels([vSelectProps.value, fixedSelectProps.value])
|
|
44
50
|
fieldProps.loading = getItems.loading.value
|
|
45
51
|
fieldProps.items = getItems.items.value
|
|
46
52
|
delete fieldProps.clearable
|
|
47
53
|
delete fieldProps['onBlur']
|
|
48
54
|
fieldProps.rules = props.rules
|
|
49
55
|
fieldProps.active = false
|
|
50
|
-
fieldProps.modelValue = props.modelValue
|
|
56
|
+
if (props.modelValue) fieldProps.modelValue = props.modelValue
|
|
57
|
+
else delete fieldProps.modelValue
|
|
51
58
|
fieldProps['onUpdate:modelValue'] = (/** @type string */value) => {
|
|
52
|
-
emit('update:modelValue', value)
|
|
59
|
+
if (value) emit('update:modelValue', value)
|
|
53
60
|
}
|
|
54
61
|
return fieldProps
|
|
55
62
|
})
|
|
@@ -115,12 +115,18 @@ const itemSubtitles = computed(() => {
|
|
|
115
115
|
return sortableArray.value.map((child) => props.statefulLayout.evalNodeExpression(props.modelValue, expr, child.data))
|
|
116
116
|
})
|
|
117
117
|
|
|
118
|
+
const activateOrFocus = (/** @type number | string */childKey) => {
|
|
119
|
+
if (layout.value.listEditMode === 'inline-single' || layout.value.listEditMode === 'dialog') {
|
|
120
|
+
props.statefulLayout.activateItem(props.modelValue, childKey)
|
|
121
|
+
} else {
|
|
122
|
+
props.statefulLayout.focusNode(props.modelValue.fullKey + '/' + childKey)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
118
126
|
const pushEmptyItem = () => {
|
|
119
127
|
const newData = (props.modelValue.data ?? []).concat([undefined])
|
|
120
128
|
props.statefulLayout.input(props.modelValue, newData)
|
|
121
|
-
|
|
122
|
-
props.statefulLayout.activateItem(props.modelValue, newData.length - 1)
|
|
123
|
-
}
|
|
129
|
+
activateOrFocus(newData.length - 1)
|
|
124
130
|
}
|
|
125
131
|
|
|
126
132
|
const newKey = ref('')
|
|
@@ -132,13 +138,22 @@ const pushEmptyIndexedItem = () => {
|
|
|
132
138
|
if (!newKeyForm.value.isValid) return
|
|
133
139
|
const newData = { ...(props.modelValue.data ?? {}), [newKey.value]: undefined }
|
|
134
140
|
props.statefulLayout.input(props.modelValue, newData)
|
|
135
|
-
|
|
136
|
-
props.statefulLayout.activateItem(props.modelValue, Object.keys(newData).length - 1)
|
|
137
|
-
}
|
|
141
|
+
activateOrFocus(newKey.value)
|
|
138
142
|
newKey.value = ''
|
|
139
143
|
newKeyForm.value?.reset()
|
|
140
144
|
}
|
|
141
145
|
|
|
146
|
+
/**
|
|
147
|
+
* @param {number} childIndex
|
|
148
|
+
*/
|
|
149
|
+
const clickDeleteItem = (childIndex) => {
|
|
150
|
+
if (options.value.confirmDeleteItem) {
|
|
151
|
+
preparedDelete.value = true
|
|
152
|
+
} else {
|
|
153
|
+
deleteItem(childIndex)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
142
157
|
/**
|
|
143
158
|
* @param {number} childIndex
|
|
144
159
|
*/
|
|
@@ -169,9 +184,7 @@ const duplicateItem = (child, childIndex) => {
|
|
|
169
184
|
const newItem = props.modelValue.layout.itemCopy ? props.statefulLayout.evalNodeExpression(props.modelValue, props.modelValue.layout.itemCopy, clone(child.data)) : clone(child.data)
|
|
170
185
|
const newData = [...props.modelValue.data.slice(0, childIndex + 1), newItem, ...props.modelValue.data.slice(childIndex + 1)]
|
|
171
186
|
props.statefulLayout.input(props.modelValue, newData)
|
|
172
|
-
|
|
173
|
-
props.statefulLayout.activateItem(props.modelValue, childIndex + 1)
|
|
174
|
-
}
|
|
187
|
+
activateOrFocus(childIndex + 1)
|
|
175
188
|
menuOpened.value = -1
|
|
176
189
|
}
|
|
177
190
|
|
|
@@ -194,9 +207,7 @@ const pasteItem = (child) => {
|
|
|
194
207
|
const newItem = props.modelValue.layout.itemCopy ? props.statefulLayout.evalNodeExpression(props.modelValue, props.modelValue.layout.itemCopy, clone(copiedItem)) : clone(copiedItem)
|
|
195
208
|
const newData = [...(props.modelValue.data ?? []), newItem]
|
|
196
209
|
props.statefulLayout.input(props.modelValue, newData)
|
|
197
|
-
|
|
198
|
-
props.statefulLayout.activateItem(props.modelValue, newData.length - 1)
|
|
199
|
-
}
|
|
210
|
+
activateOrFocus(newData.length - 1)
|
|
200
211
|
}
|
|
201
212
|
|
|
202
213
|
const itemBorderColor = computed(() => (/** @type {import('@json-layout/core').StateNode} */child, /** @type {number} */childIndex) => {
|
|
@@ -270,7 +281,7 @@ const indexedListRules = computed(() => {
|
|
|
270
281
|
style="visibility:hidden"
|
|
271
282
|
variant="text"
|
|
272
283
|
:density="buttonDensity"
|
|
273
|
-
:icon="
|
|
284
|
+
:icon="options.icons.edit"
|
|
274
285
|
:disabled="modelValue.loading"
|
|
275
286
|
/>
|
|
276
287
|
</v-list-item-action>
|
|
@@ -279,7 +290,7 @@ const indexedListRules = computed(() => {
|
|
|
279
290
|
>
|
|
280
291
|
<v-btn
|
|
281
292
|
:title="modelValue.messages.close"
|
|
282
|
-
:icon="
|
|
293
|
+
:icon="options.icons.edit"
|
|
283
294
|
variant="flat"
|
|
284
295
|
color="primary"
|
|
285
296
|
:density="buttonDensity"
|
|
@@ -292,7 +303,7 @@ const indexedListRules = computed(() => {
|
|
|
292
303
|
>
|
|
293
304
|
<v-btn
|
|
294
305
|
:title="modelValue.messages.sort"
|
|
295
|
-
:icon="
|
|
306
|
+
:icon="options.icons.sort"
|
|
296
307
|
variant="flat"
|
|
297
308
|
color="primary"
|
|
298
309
|
:density="buttonDensity"
|
|
@@ -314,7 +325,7 @@ const indexedListRules = computed(() => {
|
|
|
314
325
|
<template #activator="{props: activatorProps}">
|
|
315
326
|
<v-btn
|
|
316
327
|
v-bind="activatorProps"
|
|
317
|
-
:icon="
|
|
328
|
+
:icon="options.icons.menu"
|
|
318
329
|
variant="plain"
|
|
319
330
|
slim
|
|
320
331
|
:disabled="modelValue.loading"
|
|
@@ -341,7 +352,7 @@ const indexedListRules = computed(() => {
|
|
|
341
352
|
@click="statefulLayout.activateItem(modelValue, childIndex);"
|
|
342
353
|
>
|
|
343
354
|
<template #prepend>
|
|
344
|
-
<v-icon :icon="
|
|
355
|
+
<v-icon :icon="options.icons.edit" />
|
|
345
356
|
</template>
|
|
346
357
|
{{ modelValue.messages.edit }}
|
|
347
358
|
</v-list-item>
|
|
@@ -364,7 +375,7 @@ const indexedListRules = computed(() => {
|
|
|
364
375
|
@click="statefulLayout.activateItem(modelValue, childIndex); menuOpened = -1"
|
|
365
376
|
>
|
|
366
377
|
<template #prepend>
|
|
367
|
-
<v-icon :icon="
|
|
378
|
+
<v-icon :icon="options.icons.edit" />
|
|
368
379
|
</template>
|
|
369
380
|
{{ modelValue.messages.edit }}
|
|
370
381
|
</v-list-item>
|
|
@@ -374,7 +385,7 @@ const indexedListRules = computed(() => {
|
|
|
374
385
|
@click="duplicateItem(child, childIndex)"
|
|
375
386
|
>
|
|
376
387
|
<template #prepend>
|
|
377
|
-
<v-icon :icon="
|
|
388
|
+
<v-icon :icon="options.icons.duplicate" />
|
|
378
389
|
</template>
|
|
379
390
|
{{ modelValue.messages.duplicate }}
|
|
380
391
|
</v-list-item>
|
|
@@ -383,7 +394,7 @@ const indexedListRules = computed(() => {
|
|
|
383
394
|
@click="copyItem(child)"
|
|
384
395
|
>
|
|
385
396
|
<template #prepend>
|
|
386
|
-
<v-icon :icon="
|
|
397
|
+
<v-icon :icon="options.icons.copy" />
|
|
387
398
|
</template>
|
|
388
399
|
{{ modelValue.messages.copy }}
|
|
389
400
|
</v-list-item>
|
|
@@ -393,7 +404,7 @@ const indexedListRules = computed(() => {
|
|
|
393
404
|
@click="prepareDrag(childIndex)"
|
|
394
405
|
>
|
|
395
406
|
<template #prepend>
|
|
396
|
-
<v-icon :icon="
|
|
407
|
+
<v-icon :icon="options.icons.sort" />
|
|
397
408
|
</template>
|
|
398
409
|
{{ modelValue.messages.sort }}
|
|
399
410
|
</v-list-item>
|
|
@@ -403,7 +414,7 @@ const indexedListRules = computed(() => {
|
|
|
403
414
|
@click="statefulLayout.input(modelValue, moveDataItem(modelValue.data, childIndex, childIndex - 1)); menuOpened = -1"
|
|
404
415
|
>
|
|
405
416
|
<template #prepend>
|
|
406
|
-
<v-icon :icon="
|
|
417
|
+
<v-icon :icon="options.icons.sortUp" />
|
|
407
418
|
</template>
|
|
408
419
|
{{ modelValue.messages.up }}
|
|
409
420
|
</v-list-item>
|
|
@@ -413,17 +424,17 @@ const indexedListRules = computed(() => {
|
|
|
413
424
|
@click="statefulLayout.input(modelValue, moveDataItem(modelValue.data, childIndex, childIndex + 1)); menuOpened = -1"
|
|
414
425
|
>
|
|
415
426
|
<template #prepend>
|
|
416
|
-
<v-icon :icon="
|
|
427
|
+
<v-icon :icon="options.icons.sortDown" />
|
|
417
428
|
</template>
|
|
418
429
|
{{ modelValue.messages.down }}
|
|
419
430
|
</v-list-item>
|
|
420
431
|
<v-list-item
|
|
421
432
|
v-if="modelValue.layout.listActions.includes('delete')"
|
|
422
433
|
base-color="warning"
|
|
423
|
-
@click="
|
|
434
|
+
@click="clickDeleteItem(childIndex)"
|
|
424
435
|
>
|
|
425
436
|
<template #prepend>
|
|
426
|
-
<v-icon :icon="
|
|
437
|
+
<v-icon :icon="options.icons.delete" />
|
|
427
438
|
</template>
|
|
428
439
|
{{ modelValue.messages.delete }}
|
|
429
440
|
</v-list-item>
|
|
@@ -477,7 +488,7 @@ const indexedListRules = computed(() => {
|
|
|
477
488
|
<v-icon
|
|
478
489
|
color="primary"
|
|
479
490
|
size="large"
|
|
480
|
-
:icon="
|
|
491
|
+
:icon="options.icons.add"
|
|
481
492
|
@click="pushEmptyIndexedItem"
|
|
482
493
|
/>
|
|
483
494
|
</template>
|
|
@@ -488,7 +499,7 @@ const indexedListRules = computed(() => {
|
|
|
488
499
|
<v-btn
|
|
489
500
|
v-if="modelValue.layout.listActions.includes('add')"
|
|
490
501
|
color="primary"
|
|
491
|
-
:prepend-icon="
|
|
502
|
+
:prepend-icon="options.icons.add"
|
|
492
503
|
class="mr-2"
|
|
493
504
|
@click="pushEmptyItem"
|
|
494
505
|
>
|
|
@@ -497,7 +508,7 @@ const indexedListRules = computed(() => {
|
|
|
497
508
|
<v-btn
|
|
498
509
|
v-if="modelValue.layout.listActions.includes('paste') && clipboard !== null"
|
|
499
510
|
color="primary"
|
|
500
|
-
:prepend-icon="
|
|
511
|
+
:prepend-icon="options.icons.paste"
|
|
501
512
|
@click="pasteItem"
|
|
502
513
|
>
|
|
503
514
|
{{ modelValue.messages.paste }}
|
|
@@ -519,7 +530,7 @@ const indexedListRules = computed(() => {
|
|
|
519
530
|
<v-spacer />
|
|
520
531
|
<v-btn
|
|
521
532
|
:title="modelValue.messages.close"
|
|
522
|
-
:icon="
|
|
533
|
+
:icon="options.icons.close"
|
|
523
534
|
variant="flat"
|
|
524
535
|
density="comfortable"
|
|
525
536
|
:disabled="modelValue.loading"
|
package/src/options.js
CHANGED
package/src/types.ts
CHANGED
|
@@ -66,6 +66,7 @@ export type VjsfStatefulLayoutOptions = Partial<StatefulLayoutOptions> & {
|
|
|
66
66
|
plugins: Plugin[],
|
|
67
67
|
pluginsOptions: Record<string, unknown>,
|
|
68
68
|
icons: VjsfIcons
|
|
69
|
+
confirmDeleteItem: boolean
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
export type VjsfCompileOptions = Partial<CompileOptions> & {
|
package/types/options.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export namespace defaultOptions {
|
|
|
4
4
|
let nodeComponents: {};
|
|
5
5
|
let plugins: never[];
|
|
6
6
|
let pluginsOptions: {};
|
|
7
|
+
let confirmDeleteItem: boolean;
|
|
7
8
|
}
|
|
8
9
|
export function getFullOptions(options: Partial<import("./types.js").VjsfOptions> | null, form: any, width: number, locale: string, globalDefaults: Record<string, unknown> | undefined, slots: import("vue").Slots, defaultNodeComponents: Record<string, import('vue').Component>, onData: (data: any) => void, onUpdate: (statefulLayout: import('@json-layout/core').StatefulLayout) => void, onAutofocus: (key: string) => void): import("./types.js").VjsfOptions;
|
|
9
10
|
//# sourceMappingURL=options.d.ts.map
|
package/types/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.js"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,2BADW,OAAO,YAAY,EAAE,SAAS,CAmBxC
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.js"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,2BADW,OAAO,YAAY,EAAE,SAAS,CAmBxC;;;;;;;AAuBM,wCAZI,QAAQ,OAAO,YAAY,EAAE,WAAW,CAAC,GAAG,IAAI,QAChD,GAAG,SACH,MAAM,UACN,MAAM,kBACN,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,SACnC,OAAO,KAAK,EAAE,KAAK,yBACnB,OAAO,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,CAAC,iBAChC,GAAG,KAAK,IAAI,6BACF,OAAO,mBAAmB,EAAE,cAAc,KAAK,IAAI,qBAC9D,MAAM,KAAK,IAAI,oCAgC/B"}
|
package/types/types.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export type VjsfStatefulLayoutOptions = Partial<StatefulLayoutOptions> & {
|
|
|
29
29
|
plugins: Plugin[];
|
|
30
30
|
pluginsOptions: Record<string, unknown>;
|
|
31
31
|
icons: VjsfIcons;
|
|
32
|
+
confirmDeleteItem: boolean;
|
|
32
33
|
};
|
|
33
34
|
export type VjsfCompileOptions = Partial<CompileOptions> & {
|
|
34
35
|
pluginsImports: string[];
|
package/types/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,cAAc,EACf,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAA;AAE3D,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,SAAS,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAKD,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG;IACvE,SAAS,EAAE,KAAK,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,KAAK,EAAE,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|