@koumoul/vjsf 4.1.1 → 4.1.3

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.
Files changed (50) hide show
  1. package/package.json +4 -1
  2. package/src/components/fragments/help-message.vue +2 -2
  3. package/src/components/fragments/section-header.vue +5 -5
  4. package/src/components/node-content.vue +137 -0
  5. package/src/components/node.vue +35 -121
  6. package/src/components/nodes/autocomplete.vue +3 -2
  7. package/src/components/nodes/checkbox.vue +6 -5
  8. package/src/components/nodes/color-picker.vue +4 -4
  9. package/src/components/nodes/combobox.vue +3 -1
  10. package/src/components/nodes/date-time-picker.vue +6 -3
  11. package/src/components/nodes/file-input.vue +3 -1
  12. package/src/components/nodes/list.vue +1 -1
  13. package/src/components/nodes/number-combobox.vue +3 -1
  14. package/src/components/nodes/number-field.vue +6 -6
  15. package/src/components/nodes/radio-group.vue +1 -5
  16. package/src/components/nodes/select.vue +3 -2
  17. package/src/components/nodes/slider.vue +6 -5
  18. package/src/components/nodes/switch.vue +6 -5
  19. package/src/components/nodes/text-field.vue +4 -2
  20. package/src/components/nodes/textarea.vue +7 -6
  21. package/src/components/nodes/time-picker.vue +3 -1
  22. package/src/composables/use-vjsf.js +26 -9
  23. package/src/composables/use-webmcp.js +28 -0
  24. package/src/types.ts +1 -1
  25. package/types/components/fragments/help-message.vue.d.ts.map +1 -1
  26. package/types/components/node-content.vue.d.ts +26 -0
  27. package/types/components/node-content.vue.d.ts.map +1 -0
  28. package/types/components/node.vue.d.ts +3 -1
  29. package/types/components/node.vue.d.ts.map +1 -1
  30. package/types/components/nodes/autocomplete.vue.d.ts.map +1 -1
  31. package/types/components/nodes/checkbox.vue.d.ts.map +1 -1
  32. package/types/components/nodes/combobox.vue.d.ts.map +1 -1
  33. package/types/components/nodes/date-time-picker.vue.d.ts.map +1 -1
  34. package/types/components/nodes/file-input.vue.d.ts.map +1 -1
  35. package/types/components/nodes/number-combobox.vue.d.ts.map +1 -1
  36. package/types/components/nodes/radio-group.vue.d.ts.map +1 -1
  37. package/types/components/nodes/select.vue.d.ts.map +1 -1
  38. package/types/components/nodes/slider.vue.d.ts.map +1 -1
  39. package/types/components/nodes/switch.vue.d.ts.map +1 -1
  40. package/types/components/nodes/text-field.vue.d.ts.map +1 -1
  41. package/types/components/nodes/textarea.vue.d.ts.map +1 -1
  42. package/types/components/nodes/time-picker.vue.d.ts.map +1 -1
  43. package/types/composables/use-vjsf.d.ts.map +1 -1
  44. package/types/composables/use-webmcp.d.ts +11 -0
  45. package/types/composables/use-webmcp.d.ts.map +1 -0
  46. package/types/types.d.ts +1 -0
  47. package/types/types.d.ts.map +1 -1
  48. package/src/components/vjsf-webmcp.vue +0 -83
  49. package/types/components/vjsf-webmcp.vue.d.ts +0 -70
  50. package/types/components/vjsf-webmcp.vue.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koumoul/vjsf",
3
- "version": "4.1.1",
3
+ "version": "4.1.3",
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",
@@ -79,6 +79,9 @@
79
79
  },
80
80
  "devDependencies": {
81
81
  "@types/debug": "^4.1.8",
82
+ "@vitejs/plugin-vue": "^5.0.0",
83
+ "@vue/test-utils": "^2.4.6",
84
+ "happy-dom": "^15.0.0",
82
85
  "vitest": "^1.1.1",
83
86
  "vue": "^3.5.6",
84
87
  "vue-tsc": "^3.2.2"
@@ -45,7 +45,7 @@ import { VBtn } from 'vuetify/components/VBtn'
45
45
  import { ref } from 'vue'
46
46
  import useZIndexStack from '../../composables/use-z-index-stack.js'
47
47
 
48
- const props = defineProps({
48
+ const { node } = defineProps({
49
49
  node: {
50
50
  /** @type import('vue').PropType<import('../../types.js').VjsfNode> */
51
51
  type: Object,
@@ -53,7 +53,7 @@ const props = defineProps({
53
53
  }
54
54
  })
55
55
 
56
- const zIndex = useZIndexStack(props.node.fullKey)
56
+ const zIndex = useZIndexStack(node.fullKey)
57
57
 
58
58
  const show = ref(false)
59
59
  </script>
@@ -22,7 +22,7 @@ const titleDepthBase = computed(() => {
22
22
 
23
23
  const classes = ['text-display-large', 'text-display-medium', 'text-display-small', 'text-headline-large', 'text-headline-medium', 'text-headline-small', 'text-body-large', 'text-body-large']
24
24
  const titleClass = computed(() => {
25
- const index = props.node.options.titleDepth
25
+ const index = props.node.titleDepth
26
26
  if (props.node.options.density === 'compact') return classes[index + 2]
27
27
  if (props.node.options.density === 'comfortable') return classes[index + 1]
28
28
  return classes[index]
@@ -32,10 +32,10 @@ const titleClass = computed(() => {
32
32
  <template>
33
33
  <div
34
34
  v-if="(node.layout.title && !hideTitle) || node.layout.subtitle || (node.error && node.validated)"
35
- :class="`mb-${titleDepthBase - node.options.titleDepth} mt-${hideTitle ? 0 : (titleDepthBase - node.options.titleDepth)}`"
35
+ :class="`mb-${titleDepthBase - node.titleDepth} mt-${hideTitle ? 0 : (titleDepthBase - node.titleDepth)}`"
36
36
  >
37
37
  <component
38
- :is="`h${node.options.titleDepth}`"
38
+ :is="`h${node.titleDepth}`"
39
39
  v-if="node.layout.title && !hideTitle"
40
40
  :class="`${titleClass}`"
41
41
  >
@@ -43,13 +43,13 @@ const titleClass = computed(() => {
43
43
  </component>
44
44
  <p
45
45
  v-if="node.layout.subtitle"
46
- :class="`text-subtitle mt-${hideTitle ? 0 : (titleDepthBase - node.options.titleDepth)}`"
46
+ :class="`text-subtitle mt-${hideTitle ? 0 : (titleDepthBase - node.titleDepth)}`"
47
47
  v-html="node.layout.subtitle"
48
48
  />
49
49
  <v-alert
50
50
  v-if="node.error && node.validated"
51
51
  type="error"
52
- :class="`mt-${titleDepthBase - node.options.titleDepth}`"
52
+ :class="`mt-${titleDepthBase - node.titleDepth}`"
53
53
  >
54
54
  {{ node.error }}
55
55
  </v-alert>
@@ -0,0 +1,137 @@
1
+ <script setup>
2
+ import Debug from 'debug'
3
+ import { computed, onRenderTriggered, onUpdated } from 'vue'
4
+ import { useTheme, useDefaults } from 'vuetify'
5
+ import { VCol } from 'vuetify/components/VGrid'
6
+ import { VDefaultsProvider } from 'vuetify/components/VDefaultsProvider'
7
+ import NodeSlot from './fragments/node-slot.vue'
8
+ import HelpMessage from './fragments/help-message.vue'
9
+
10
+ const debugRender = Debug('vjsf:render')
11
+
12
+ useDefaults({}, 'VjsfNode')
13
+
14
+ const props = defineProps({
15
+ modelValue: {
16
+ /** @type import('vue').PropType<import('../types.js').VjsfNode> */
17
+ type: Object,
18
+ required: true
19
+ },
20
+ statefulLayout: {
21
+ /** @type import('vue').PropType<import('../types.js').VjsfStatefulLayout> */
22
+ type: Object,
23
+ required: true
24
+ }
25
+ })
26
+
27
+ /** @type Record<import('../types.js').Density, string> */
28
+ const beforeAfterClasses = {
29
+ compact: 'my-1',
30
+ comfortable: 'my-2',
31
+ default: 'my-3'
32
+ }
33
+
34
+ const theme = useTheme()
35
+
36
+ if (debugRender.enabled) {
37
+ debugRender('setup node', props.modelValue.fullKey, props.modelValue.layout.comp)
38
+ onRenderTriggered(() => {
39
+ debugRender('render node', props.modelValue.fullKey, props.modelValue.layout.comp)
40
+ })
41
+ }
42
+
43
+ // dev/test render counting: track how many times each node re-renders
44
+ if (props.statefulLayout._renderCounts) {
45
+ const renderCounts = props.statefulLayout._renderCounts
46
+ const fullKey = props.modelValue.fullKey
47
+ renderCounts.set(fullKey, (renderCounts.get(fullKey) ?? 0))
48
+ onUpdated(() => {
49
+ renderCounts.set(fullKey, (renderCounts.get(fullKey) ?? 0) + 1)
50
+ })
51
+ }
52
+
53
+ const densityDefaults = computed(() => ({ global: { density: props.modelValue.options.density } }))
54
+
55
+ const indent = computed(() => {
56
+ if (props.modelValue.parentFullKey === null) return 0
57
+ if (!props.modelValue.options.indent) return 0
58
+ if (props.modelValue.layout.comp !== 'section') return 0
59
+ if (!props.modelValue.layout.title) return 0
60
+ if (typeof props.modelValue.options.indent === 'number') return props.modelValue.options.indent
61
+ if (props.modelValue.options.density === 'compact') return 2
62
+ if (props.modelValue.options.density === 'comfortable') return 4
63
+ return 6
64
+ })
65
+
66
+ const showHelp = computed(() => {
67
+ return (props.modelValue.layout.help || props.modelValue.layout.warning) && !props.modelValue.options.summary
68
+ })
69
+
70
+ const nodeClasses = computed(() => {
71
+ let classes = `vjsf-node vjsf-node-${props.modelValue.layout.comp} vjsf-density-${props.modelValue.options.density}`
72
+ if (props.modelValue.options.readOnly) classes += ' vjsf-readonly'
73
+ if (props.modelValue.options.summary) classes += ' vjsf-summary'
74
+ if (theme.current.value.dark) classes += ' vjsf-dark'
75
+ if (indent.value) classes += ' ml-' + indent.value
76
+ if (showHelp.value) classes += ' vjsf-has-help'
77
+ return classes
78
+ })
79
+
80
+ if (props.modelValue.layout.comp !== 'none' && !props.modelValue.slots?.component && !props.modelValue.slots?.compositeComponent && !props.statefulLayout.options.nodeComponents[props.modelValue.layout.comp]) {
81
+ console.error(`vjsf: missing component to render vjsf node "${props.modelValue.layout.comp}", maybe you forgot to register a component from a plugin ?`)
82
+ }
83
+
84
+ </script>
85
+
86
+ <template>
87
+ <v-defaults-provider :defaults="densityDefaults">
88
+ <v-col
89
+ v-if="modelValue.layout.comp !== 'none'"
90
+ :cols="modelValue.cols"
91
+ :class="nodeClasses"
92
+ >
93
+ <node-slot
94
+ v-if="modelValue.slots?.before"
95
+ key="before"
96
+ :layout-slot="modelValue.slots?.before"
97
+ :node="modelValue"
98
+ :stateful-layout="statefulLayout"
99
+ :class="beforeAfterClasses[modelValue.options.density]"
100
+ />
101
+
102
+ <help-message
103
+ v-if="showHelp"
104
+ :node="modelValue"
105
+ />
106
+ <node-slot
107
+ v-if="modelValue.slots?.component"
108
+ key="component"
109
+ :layout-slot="modelValue.slots?.component"
110
+ :node="modelValue"
111
+ :stateful-layout="statefulLayout"
112
+ />
113
+ <node-slot
114
+ v-else-if="modelValue.slots?.compositeComponent"
115
+ key="compositeComponent"
116
+ :layout-slot="modelValue.slots?.compositeComponent"
117
+ :node="modelValue"
118
+ :stateful-layout="statefulLayout"
119
+ />
120
+ <component
121
+ :is="props.statefulLayout.options.nodeComponents[modelValue.layout.comp]"
122
+ v-else
123
+ :model-value="modelValue"
124
+ :stateful-layout="statefulLayout"
125
+ />
126
+
127
+ <node-slot
128
+ v-if="modelValue.slots?.after"
129
+ key="after"
130
+ :layout-slot="modelValue.slots?.after"
131
+ :node="modelValue"
132
+ :stateful-layout="statefulLayout"
133
+ :class="beforeAfterClasses[modelValue.options.density]"
134
+ />
135
+ </v-col>
136
+ </v-defaults-provider>
137
+ </template>
@@ -1,125 +1,39 @@
1
- <script setup>
2
- import Debug from 'debug'
3
- import { computed, onRenderTriggered } from 'vue'
4
- import { useTheme, useDefaults } from 'vuetify'
5
- import { VCol } from 'vuetify/components/VGrid'
6
- import { VDefaultsProvider } from 'vuetify/components/VDefaultsProvider'
7
- import NodeSlot from './fragments/node-slot.vue'
8
- import HelpMessage from './fragments/help-message.vue'
9
-
10
- const debugRender = Debug('vjsf:render')
11
-
12
- useDefaults({}, 'VjsfNode')
13
-
14
- const props = defineProps({
15
- modelValue: {
16
- /** @type import('vue').PropType<import('../types.js').VjsfNode> */
17
- type: Object,
18
- required: true
1
+ <script>
2
+ import { defineComponent, h } from 'vue'
3
+ import NodeContent from './node-content.vue'
4
+
5
+ export default defineComponent({
6
+ name: 'VjsfNode',
7
+ props: {
8
+ modelValue: {
9
+ /** @type import('vue').PropType<import('../types.js').VjsfNode> */
10
+ type: Object,
11
+ required: true
12
+ },
13
+ statefulLayout: {
14
+ /** @type import('vue').PropType<import('../types.js').VjsfStatefulLayout> */
15
+ type: Object,
16
+ required: true
17
+ }
19
18
  },
20
- statefulLayout: {
21
- /** @type import('vue').PropType<import('../types.js').VjsfStatefulLayout> */
22
- type: Object,
23
- required: true
19
+ setup (props) {
20
+ /** @type import('../types.js').VjsfNode | null */
21
+ let prevModelValue = null
22
+ /** @type import('vue').VNode | null */
23
+ let cachedVNode = null
24
+
25
+ // this component acts as a simple wrapper that prevents re-rendering of unchanged immutable node
26
+ return () => {
27
+ if (props.modelValue === prevModelValue && cachedVNode) {
28
+ return cachedVNode
29
+ }
30
+ prevModelValue = props.modelValue
31
+ cachedVNode = h(NodeContent, {
32
+ modelValue: props.modelValue,
33
+ statefulLayout: props.statefulLayout
34
+ })
35
+ return cachedVNode
36
+ }
24
37
  }
25
38
  })
26
-
27
- /** @type Record<import('../types.js').Density, string> */
28
- const beforeAfterClasses = {
29
- compact: 'my-1',
30
- comfortable: 'my-2',
31
- default: 'my-3'
32
- }
33
-
34
- const theme = useTheme()
35
-
36
- if (debugRender.enabled) {
37
- debugRender('setup node', props.modelValue.fullKey, props.modelValue.layout.comp)
38
- onRenderTriggered(() => {
39
- debugRender('render node', props.modelValue.fullKey, props.modelValue.layout.comp)
40
- })
41
- }
42
-
43
- const indent = computed(() => {
44
- if (props.modelValue.parentFullKey === null) return 0
45
- if (!props.modelValue.options.indent) return 0
46
- if (props.modelValue.layout.comp !== 'section') return 0
47
- if (!props.modelValue.layout.title) return 0
48
- if (typeof props.modelValue.options.indent === 'number') return props.modelValue.options.indent
49
- if (props.modelValue.options.density === 'compact') return 2
50
- if (props.modelValue.options.density === 'comfortable') return 4
51
- return 6
52
- })
53
-
54
- const showHelp = computed(() => {
55
- return (props.modelValue.layout.help || props.modelValue.layout.warning) && !props.modelValue.options.summary
56
- })
57
-
58
- const nodeClasses = computed(() => {
59
- let classes = `vjsf-node vjsf-node-${props.modelValue.layout.comp} vjsf-density-${props.modelValue.options.density}`
60
- if (props.modelValue.options.readOnly) classes += ' vjsf-readonly'
61
- if (props.modelValue.options.summary) classes += ' vjsf-summary'
62
- if (theme.current.value.dark) classes += ' vjsf-dark'
63
- if (indent.value) classes += ' ml-' + indent.value
64
- if (showHelp.value) classes += ' vjsf-has-help'
65
- return classes
66
- })
67
-
68
- if (props.modelValue.layout.comp !== 'none' && !props.modelValue.slots?.component && !props.modelValue.slots?.compositeComponent && !props.statefulLayout.options.nodeComponents[props.modelValue.layout.comp]) {
69
- console.error(`vjsf: missing component to render vjsf node "${props.modelValue.layout.comp}", maybe you forgot to register a component from a plugin ?`)
70
- }
71
-
72
39
  </script>
73
-
74
- <template>
75
- <v-defaults-provider :defaults="{global: { density: props.modelValue.options.density }}">
76
- <v-col
77
- v-if="modelValue.layout.comp !== 'none'"
78
- :cols="modelValue.cols"
79
- :class="nodeClasses"
80
- >
81
- <node-slot
82
- v-if="modelValue.slots?.before"
83
- key="before"
84
- :layout-slot="modelValue.slots?.before"
85
- :node="modelValue"
86
- :stateful-layout="statefulLayout"
87
- :class="beforeAfterClasses[modelValue.options.density]"
88
- />
89
-
90
- <help-message
91
- v-if="showHelp"
92
- :node="modelValue"
93
- />
94
- <node-slot
95
- v-if="modelValue.slots?.component"
96
- key="component"
97
- :layout-slot="modelValue.slots?.component"
98
- :node="modelValue"
99
- :stateful-layout="statefulLayout"
100
- />
101
- <node-slot
102
- v-else-if="modelValue.slots?.compositeComponent"
103
- key="compositeComponent"
104
- :layout-slot="modelValue.slots?.compositeComponent"
105
- :node="modelValue"
106
- :stateful-layout="statefulLayout"
107
- />
108
- <component
109
- :is="props.statefulLayout.options.nodeComponents[modelValue.layout.comp]"
110
- v-else
111
- :model-value="modelValue"
112
- :stateful-layout="statefulLayout"
113
- />
114
-
115
- <node-slot
116
- v-if="modelValue.slots?.after"
117
- key="after"
118
- :layout-slot="modelValue.slots?.after"
119
- :node="modelValue"
120
- :stateful-layout="statefulLayout"
121
- :class="beforeAfterClasses[modelValue.options.density]"
122
- />
123
- </v-col>
124
- </v-defaults-provider>
125
- </template>
@@ -32,12 +32,13 @@ export default defineComponent({
32
32
  }
33
33
  fieldProps.items = getItems.items.value
34
34
  fieldProps.loading = getItems.loading.value
35
- fieldProps.modelValue = localData.value
36
35
  return fieldProps
37
36
  })
38
37
 
38
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
39
+
39
40
  // @ts-ignore
40
- return () => h(VAutocomplete, fieldProps.value, selectSlots.value)
41
+ return () => h(VAutocomplete, fullProps.value, selectSlots.value)
41
42
  }
42
43
  })
43
44
 
@@ -22,14 +22,15 @@ export default defineComponent({
22
22
 
23
23
  const { inputProps, localData, compSlots } = useNode(toRef(props, 'modelValue'), props.statefulLayout)
24
24
 
25
- const fullProps = computed(() => {
26
- const fullProps = { ...inputProps.value }
25
+ const fieldProps = computed(() => {
26
+ const fieldProps = { ...inputProps.value }
27
27
  // it is not very common to show an error below checkboxes and switches and without hide-details=auto they take a lot of space
28
- if (!('hideDetails' in inputProps)) fullProps.hideDetails = 'auto'
29
- fullProps.modelValue = localData.value
30
- return fullProps
28
+ if (!('hideDetails' in inputProps)) fieldProps.hideDetails = 'auto'
29
+ return fieldProps
31
30
  })
32
31
 
32
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
33
+
33
34
  return () => h(VCheckbox, fullProps.value, compSlots.value)
34
35
  }
35
36
  })
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import { defineComponent, h, toRef, watch, computed } from 'vue'
2
+ import { defineComponent, h, toRef, computed } from 'vue'
3
3
  import { VColorInput } from 'vuetify/labs/VColorInput'
4
4
  import useNode from '../../composables/use-node.js'
5
5
  import { useDefaults } from 'vuetify'
@@ -26,11 +26,11 @@ export default defineComponent({
26
26
  toRef(props, 'modelValue'), props.statefulLayout, { layoutPropsMap: ['placeholder'] }
27
27
  )
28
28
 
29
- const colorInputProps = computed(() => ({
30
- ...vColorInputDefaults.value, ...inputProps.value, modelValue: localData.value
29
+ const fieldProps = computed(() => ({
30
+ ...vColorInputDefaults.value, ...inputProps.value
31
31
  }))
32
- watch(colorInputProps, () => console.log('colorInputProps', colorInputProps.value), { immediate: true })
33
32
 
33
+ const colorInputProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
34
34
  return () => h(VColorInput, colorInputProps.value, compSlots.value)
35
35
  }
36
36
  })
@@ -47,8 +47,10 @@ export default defineComponent({
47
47
  return fieldProps
48
48
  })
49
49
 
50
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
51
+
50
52
  // @ts-ignore
51
- return () => h(VCombobox, { ...fieldProps.value, modelValue: localData.value }, compSlots.value)
53
+ return () => h(VCombobox, fullProps.value, compSlots.value)
52
54
  }
53
55
  })
54
56
 
@@ -8,7 +8,7 @@ import { VIcon } from 'vuetify/components/VIcon'
8
8
  import { VSheet } from 'vuetify/components/VSheet'
9
9
  import { useDate, useDefaults } from 'vuetify'
10
10
  import { computed, ref, watch, toRef } from 'vue'
11
- import { getDateTimeParts, getDateTimeWithOffset, getShortTime } from '../../utils/dates.js'
11
+ import { getDateTime, getDateTimeParts, getDateTimeWithOffset, getShortTime } from '../../utils/dates.js'
12
12
  import useNode from '../../composables/use-node.js'
13
13
  import useCompDefaults from '../../composables/use-comp-defaults.js'
14
14
 
@@ -29,6 +29,8 @@ const props = defineProps({
29
29
  }
30
30
  })
31
31
 
32
+ const defaultDensityDefaults = { global: { density: 'default' } }
33
+
32
34
  const vDate = useDate()
33
35
 
34
36
  const tab = ref('date')
@@ -47,7 +49,8 @@ const datePickerProps = computed(() => {
47
49
  if (localData.value) {
48
50
  // replace date part of current value
49
51
  const datePart = value && getDateTimeParts(/** @type Date */(/** @type unknown */(value)))[0]
50
- props.statefulLayout.input(props.modelValue, datePart + localData.value.slice(10))
52
+ const timePart = getShortTime(localData.value.slice(11))
53
+ props.statefulLayout.input(props.modelValue, getDateTime([datePart, timePart]))
51
54
  } else {
52
55
  props.statefulLayout.input(props.modelValue, getDateTimeWithOffset(value))
53
56
  }
@@ -98,7 +101,7 @@ const timePickerProps = computed(() => {
98
101
  <v-date-picker v-bind="datePickerProps" />
99
102
  </v-tabs-window-item>
100
103
  <v-tabs-window-item value="time">
101
- <v-defaults-provider :defaults="{global: { density: 'default' }}">
104
+ <v-defaults-provider :defaults="defaultDensityDefaults">
102
105
  <v-time-picker v-bind="timePickerProps" />
103
106
  </v-defaults-provider>
104
107
  </v-tabs-window-item>
@@ -33,8 +33,10 @@ export default defineComponent({
33
33
  return fieldProps
34
34
  })
35
35
 
36
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
37
+
36
38
  // @ts-ignore
37
- return () => h(VFileInput, { ...fieldProps.value, modelValue: localData.value }, compSlots.value)
39
+ return () => h(VFileInput, fullProps.value, compSlots.value)
38
40
  }
39
41
  })
40
42
 
@@ -241,7 +241,7 @@ const toggleDialog = (/** @type {boolean} */value) => {
241
241
  </v-list-subheader>
242
242
  <template
243
243
  v-for="(child, childIndex) of sortableArray"
244
- :key="children.findIndex(c => c === child)"
244
+ :key="child.fullKey"
245
245
  >
246
246
  <v-list-item
247
247
  v-bind="itemBind(childIndex, vListItemProps)"
@@ -49,8 +49,10 @@ export default defineComponent({
49
49
  return fieldProps
50
50
  })
51
51
 
52
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
53
+
52
54
  // @ts-ignore
53
- return () => h(VCombobox, { ...fieldProps.value, modelValue: localData.value }, compSlots.value)
55
+ return () => h(VCombobox, fullProps.value, compSlots.value)
54
56
  }
55
57
  })
56
58
 
@@ -24,14 +24,14 @@ export default defineComponent({
24
24
  toRef(props, 'modelValue'), props.statefulLayout, { layoutPropsMap: ['step', 'min', 'max', 'precision', 'placeholder'] }
25
25
  )
26
26
 
27
- const fullProps = computed(() => {
28
- const fullProps = { ...inputProps.value }
29
- fullProps.modelValue = localData.value
30
- if (fullProps.precision === undefined) fullProps.precision = null
31
-
32
- return fullProps
27
+ const fieldProps = computed(() => {
28
+ const fieldProps = { ...inputProps.value }
29
+ if (fieldProps.precision === undefined) fieldProps.precision = null
30
+ return fieldProps
33
31
  })
34
32
 
33
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
34
+
35
35
  return () => h(VNumberInput, fullProps.value, compSlots.value)
36
36
  }
37
37
  })
@@ -27,11 +27,7 @@ export default defineComponent({
27
27
  const getItems = useGetItems(nodeRef, props.statefulLayout)
28
28
  const { inputProps, compSlots, localData } = useNode(nodeRef, props.statefulLayout)
29
29
 
30
- const fieldProps = computed(() => {
31
- const fieldProps = { ...inputProps.value }
32
- fieldProps.modelValue = localData.value
33
- return fieldProps
34
- })
30
+ const fieldProps = computed(() => ({ ...inputProps.value, modelValue: localData.value }))
35
31
 
36
32
  const fieldSlots = computed(() => {
37
33
  const slots = { ...compSlots.value }
@@ -28,12 +28,13 @@ export default defineComponent({
28
28
  const fieldProps = { ...selectProps.value }
29
29
  fieldProps.loading = getItems.loading.value
30
30
  fieldProps.items = getItems.items.value
31
- fieldProps.modelValue = localData.value
32
31
  return fieldProps
33
32
  })
34
33
 
34
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
35
+
35
36
  // @ts-ignore
36
- return () => h(VSelect, fieldProps.value, selectSlots.value)
37
+ return () => h(VSelect, fullProps.value, selectSlots.value)
37
38
  }
38
39
  })
39
40
 
@@ -24,17 +24,18 @@ export default defineComponent({
24
24
  toRef(props, 'modelValue'), props.statefulLayout, { layoutPropsMap: ['step', 'min', 'max'] }
25
25
  )
26
26
 
27
- const fullProps = computed(() => {
28
- const fullProps = { ...inputProps.value }
29
- fullProps.modelValue = localData.value
30
- fullProps['onUpdate:modelValue'] = (/** @type string */value) => {
27
+ const fieldProps = computed(() => {
28
+ const fieldProps = { ...inputProps.value }
29
+ fieldProps['onUpdate:modelValue'] = (/** @type string */value) => {
31
30
  const newData = value && Number(value)
32
31
  localData.value = newData
33
32
  props.statefulLayout.input(props.modelValue, newData)
34
33
  }
35
- return fullProps
34
+ return fieldProps
36
35
  })
37
36
 
37
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
38
+
38
39
  return () => h(VSlider, fullProps.value, compSlots.value)
39
40
  }
40
41
  })
@@ -22,14 +22,15 @@ export default defineComponent({
22
22
 
23
23
  const { inputProps, localData, compSlots } = useNode(toRef(props, 'modelValue'), props.statefulLayout)
24
24
 
25
- const fullProps = computed(() => {
26
- const fullProps = { ...inputProps.value }
25
+ const fieldProps = computed(() => {
26
+ const fieldProps = { ...inputProps.value }
27
27
  // it is not very common to show an error below checkboxes and switches and without hide-details=auto they take a lot of space
28
- if (!('hideDetails' in inputProps)) fullProps.hideDetails = 'auto'
29
- fullProps.modelValue = localData.value
30
- return fullProps
28
+ if (!('hideDetails' in inputProps)) fieldProps.hideDetails = 'auto'
29
+ return fieldProps
31
30
  })
32
31
 
32
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
33
+
33
34
  return () => h(VSwitch, fullProps.value, compSlots.value)
34
35
  }
35
36
  })
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import { defineComponent, h, toRef } from 'vue'
2
+ import { defineComponent, h, toRef, computed } from 'vue'
3
3
  import { VTextField } from 'vuetify/components/VTextField'
4
4
  import useNode from '../../composables/use-node.js'
5
5
  import { useDefaults } from 'vuetify'
@@ -24,7 +24,9 @@ export default defineComponent({
24
24
  toRef(props, 'modelValue'), props.statefulLayout, { layoutPropsMap: ['placeholder'] }
25
25
  )
26
26
 
27
- return () => h(VTextField, { ...inputProps.value, modelValue: localData.value }, compSlots.value)
27
+ const fullProps = computed(() => ({ ...inputProps.value, modelValue: localData.value }))
28
+
29
+ return () => h(VTextField, fullProps.value, compSlots.value)
28
30
  }
29
31
  })
30
32
 
@@ -29,14 +29,15 @@ export default defineComponent({
29
29
 
30
30
  const defaultRows = computed(() => options.value.readOnly && options.value.summary ? 3 : undefined)
31
31
 
32
- const fullProps = computed(() => {
33
- const fullProps = { ...inputProps.value }
34
- fullProps.ref = textarea
35
- fullProps.rows = fullProps.rows ?? defaultRows.value
36
- fullProps.modelValue = localData.value
37
- return fullProps
32
+ const fieldProps = computed(() => {
33
+ const fieldProps = { ...inputProps.value }
34
+ fieldProps.ref = textarea
35
+ fieldProps.rows = fieldProps.rows ?? defaultRows.value
36
+ return fieldProps
38
37
  })
39
38
 
39
+ const fullProps = computed(() => ({ ...fieldProps.value, modelValue: localData.value }))
40
+
40
41
  watch(() => options.value.readOnly, (readOnly) => {
41
42
  if (readOnly && textarea.value) {
42
43
  textarea.value.scrollTop = 0
@@ -26,6 +26,8 @@ const props = defineProps({
26
26
  }
27
27
  })
28
28
 
29
+ const defaultDensityDefaults = { global: { density: 'default' } }
30
+
29
31
  const vDate = useDate()
30
32
 
31
33
  const { compProps, localData } = useNode(toRef(props, 'modelValue'), props.statefulLayout)
@@ -48,7 +50,7 @@ const timePickerProps = computed(() => {
48
50
  <v-icon :icon="statefulLayout.options.icons.clock" />
49
51
  </template>
50
52
  <v-sheet>
51
- <v-defaults-provider :defaults="{global: { density: 'default' }}">
53
+ <v-defaults-provider :defaults="defaultDensityDefaults">
52
54
  <v-time-picker
53
55
  v-bind="timePickerProps"
54
56
  @update:model-value="value => {statefulLayout.input(props.modelValue, value && getLongTime(value))}"
@@ -1,6 +1,6 @@
1
1
  import { useDefaults, useLocale } from 'vuetify'
2
2
  import { StatefulLayout } from '@json-layout/core/state'
3
- import { inject, toRaw, shallowRef, computed, ref, watch, useSlots, getCurrentInstance, nextTick } from 'vue'
3
+ import { inject, provide, toRaw, shallowRef, computed, ref, watch, useSlots, getCurrentInstance, nextTick } from 'vue'
4
4
  import { useElementSize } from '@vueuse/core'
5
5
  import { getFullOptions } from '../options.js'
6
6
  import { createClipboard } from './use-clipboard.js'
@@ -48,8 +48,16 @@ export const useVjsf = (schema, modelValue, options, nodeComponents, emit, compi
48
48
  const defaults = (inject(Symbol.for('vuetify:defaults')))?.value
49
49
  debug('provided defaults', defaults)
50
50
 
51
- // TODO: apply a debounce to width ?
52
- const { width } = useElementSize(el)
51
+ const { width: rawWidth } = useElementSize(el)
52
+ // quantize width to avoid triggering full state updates on every pixel change during resize
53
+ const width = computed(() => {
54
+ const w = rawWidth.value
55
+ if (!w) return 0
56
+ // use the same breakpoints as json-layout's Display class
57
+ if (w < 600) return w // xs: small screens, keep exact width
58
+ if (w < 960) return Math.round(w / 20) * 20 // sm: quantize to 20px
59
+ return Math.round(w / 50) * 50 // md+: quantize to 50px
60
+ })
53
61
 
54
62
  /** @type import('vue').ShallowRef<import('../types.js').VjsfStatefulLayout | null> */
55
63
  const statefulLayout = shallowRef(null)
@@ -75,12 +83,18 @@ export const useVjsf = (schema, modelValue, options, nodeComponents, emit, compi
75
83
  console.warn('Vjsf should be wrapped in VForm')
76
84
  }
77
85
 
86
+ // Prevent individual Vuetify form components (VTextField/VInput) inside vjsf
87
+ // from registering with the outer VForm. VJSF manages validation itself and
88
+ // registers as a single form member above. Without this, each VInput registers
89
+ // separately, causing VForm to cascade updates to all N fields on every keystroke.
90
+ provide(Symbol.for('vuetify:form'), null)
91
+
78
92
  const slots = useSlots()
79
93
 
80
94
  /* Callbacks from json layout stateful layout */
81
- /**
82
- * @param {import('@json-layout/core').StatefulLayout} statefulLayout
83
- */
95
+ /** @type {boolean | null | undefined} */
96
+ let lastFormValidationState
97
+ /** @param {import('@json-layout/core').StatefulLayout} statefulLayout */
84
98
  const onStatefulLayoutUpdate = (statefulLayout) => {
85
99
  debug('onStatefulLayoutUpdate', statefulLayout)
86
100
  if (!statefulLayout) return
@@ -89,9 +103,12 @@ export const useVjsf = (schema, modelValue, options, nodeComponents, emit, compi
89
103
  emit('update:state', statefulLayout)
90
104
  if (form) {
91
105
  // cf https://vuetifyjs.com/en/components/forms/#validation-state
92
- if (statefulLayout.valid) form.update(formMemberId, true, [])
93
- else if (statefulLayout.hasHiddenError) form.update(formMemberId, null, [])
94
- else form.update(formMemberId, false, [])
106
+ /** @type {boolean | null} */
107
+ const validationState = statefulLayout.valid ? true : (statefulLayout.hasHiddenError ? null : false)
108
+ if (validationState !== lastFormValidationState) {
109
+ lastFormValidationState = validationState
110
+ form.update(formMemberId, validationState, validationState === true ? [] : statefulLayout.errors)
111
+ }
95
112
  }
96
113
  }
97
114
 
@@ -0,0 +1,28 @@
1
+ import { shallowRef, onScopeDispose, toValue } from 'vue'
2
+ import { WebMCP } from '@json-layout/core/webmcp'
3
+
4
+ /**
5
+ * @param {{ prefixName?: string | import('vue').Ref<string | null>, dataTitle?: string | import('vue').Ref<string | null>, schema: object | import('vue').Ref<object> }} options
6
+ */
7
+ export function useWebMCP (options) {
8
+ /** @type import('vue').ShallowRef<WebMCP | null> */
9
+ const webMCP = shallowRef(null)
10
+
11
+ /**
12
+ * @param {import('@json-layout/core').StatefulLayout} statefulLayout
13
+ */
14
+ function onStateUpdate (statefulLayout) {
15
+ if (webMCP.value) webMCP.value.unregisterTools()
16
+ webMCP.value = new WebMCP(
17
+ /** @type {import('@json-layout/core').StatefulLayout} */(/** @type {unknown} */(statefulLayout)),
18
+ { prefixName: toValue(options.prefixName) ?? undefined, dataTitle: toValue(options.dataTitle) ?? undefined, schema: toValue(options.schema) }
19
+ )
20
+ webMCP.value.registerTools()
21
+ }
22
+
23
+ onScopeDispose(() => {
24
+ if (webMCP.value) webMCP.value.unregisterTools()
25
+ })
26
+
27
+ return { onStateUpdate }
28
+ }
package/src/types.ts CHANGED
@@ -78,7 +78,7 @@ export type VjsfOptions = PartialVjsfCompileOptions & VjsfStatefulLayoutOptions
78
78
  export type PartialVjsfOptions = PartialVjsfCompileOptions & Partial<Omit<VjsfStatefulLayoutOptions, 'width' | 'vjsfSlots' | 'onData' | 'onUpdate' | 'onAutofocus'>>
79
79
  export type FullVjsfNodeOptions = Required<VjsfOptions>
80
80
 
81
- export type VjsfStatefulLayout = Omit<StatefulLayout, 'options'> & {options: VjsfStatefulLayoutOptions}
81
+ export type VjsfStatefulLayout = Omit<StatefulLayout, 'options'> & {options: VjsfStatefulLayoutOptions, _renderCounts?: Map<string, number>}
82
82
 
83
83
  export type VjsfNode = Omit<StateNode, 'options'> & {options: FullVjsfNodeOptions}
84
84
  export type VjsfTabsNode = Omit<TabsNode, 'options'> & {options: FullVjsfNodeOptions}
@@ -1 +1 @@
1
- {"version":3,"file":"help-message.vue.d.ts","sourceRoot":"","sources":["../../../src/components/fragments/help-message.vue"],"names":[],"mappings":"wBA0NqB,OAAO,YAAY;;AATxC;;QAGI,sEAAsE;cAA5D,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,QAAQ,CAAC;;;;;QAAnE,sEAAsE;cAA5D,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,QAAQ,CAAC;;;6IAKpE"}
1
+ {"version":3,"file":"help-message.vue.d.ts","sourceRoot":"","sources":["../../../src/components/fragments/help-message.vue"],"names":[],"mappings":"wBA2NqB,OAAO,YAAY;;AATxC;;QAGI,sEAAsE;cAA5D,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,QAAQ,CAAC;;;;;QAAnE,sEAAsE;cAA5D,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,QAAQ,CAAC;;;6IAKpE"}
@@ -0,0 +1,26 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
4
+ modelValue: {
5
+ /** @type import('vue').PropType<import('../types.js').VjsfNode> */
6
+ type: import("vue").PropType<import("../types.js").VjsfNode>;
7
+ required: true;
8
+ };
9
+ statefulLayout: {
10
+ /** @type import('vue').PropType<import('../types.js').VjsfStatefulLayout> */
11
+ type: import("vue").PropType<import("../types.js").VjsfStatefulLayout>;
12
+ required: true;
13
+ };
14
+ }>, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
15
+ modelValue: {
16
+ /** @type import('vue').PropType<import('../types.js').VjsfNode> */
17
+ type: import("vue").PropType<import("../types.js").VjsfNode>;
18
+ required: true;
19
+ };
20
+ statefulLayout: {
21
+ /** @type import('vue').PropType<import('../types.js').VjsfStatefulLayout> */
22
+ type: import("vue").PropType<import("../types.js").VjsfStatefulLayout>;
23
+ required: true;
24
+ };
25
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, true, {}, any>;
26
+ //# sourceMappingURL=node-content.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-content.vue.d.ts","sourceRoot":"","sources":["../../src/components/node-content.vue"],"names":[],"mappings":"wBAiYqB,OAAO,YAAY;;AAdxC;;QAGI,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;;;QAL1E,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;6IAK3E"}
@@ -11,7 +11,9 @@ declare const __VLS_export: import("vue", { with: { "resolution-mode": "import"
11
11
  type: import("vue").PropType<import("../types.js").VjsfStatefulLayout>;
12
12
  required: true;
13
13
  };
14
- }>, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
14
+ }>, () => import("vue", { with: { "resolution-mode": "import" } }).VNode<import("vue", { with: { "resolution-mode": "import" } }).RendererNode, import("vue", { with: { "resolution-mode": "import" } }).RendererElement, {
15
+ [key: string]: any;
16
+ }>, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
15
17
  modelValue: {
16
18
  /** @type import('vue').PropType<import('../types.js').VjsfNode> */
17
19
  type: import("vue").PropType<import("../types.js").VjsfNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"node.vue.d.ts","sourceRoot":"","sources":["../../src/components/node.vue"],"names":[],"mappings":"wBAwWqB,OAAO,YAAY;;AAdxC;;QAGI,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;;;QAL1E,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;6IAK3E"}
1
+ {"version":3,"file":"node.vue.d.ts","sourceRoot":"","sources":["../../src/components/node.vue"],"names":[],"mappings":"wBA6CqB,OAAO,YAAY;;AAQxC;;QAIM,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;;;;;QAL1E,mEAAmE;cAAzD,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,QAAQ,CAAC;;;;QAKhE,6EAA6E;cAAnE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,CAAC;;;6IAwB7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/autocomplete.vue"],"names":[],"mappings":"wBAqDqB,OAAO,YAAY;;AAQxC;;QAGI,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKvE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL/E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKvE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IA0BhF"}
1
+ {"version":3,"file":"autocomplete.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/autocomplete.vue"],"names":[],"mappings":"wBAsDqB,OAAO,YAAY;;AAQxC;;QAGI,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKvE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL/E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKvE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IA2BhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/checkbox.vue"],"names":[],"mappings":"wBA6CqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAoBhF"}
1
+ {"version":3,"file":"checkbox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/checkbox.vue"],"names":[],"mappings":"wBA8CqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAqBhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/combobox.vue"],"names":[],"mappings":"wBAiEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAoChF"}
1
+ {"version":3,"file":"combobox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/combobox.vue"],"names":[],"mappings":"wBAmEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAsChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-picker.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/date-time-picker.vue"],"names":[],"mappings":"wBA8ZqB,OAAO,YAAY;;AAdxC;;QAGI,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAK9E"}
1
+ {"version":3,"file":"date-time-picker.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/date-time-picker.vue"],"names":[],"mappings":"wBAqaqB,OAAO,YAAY;;AAdxC;;QAGI,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAK9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"file-input.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/file-input.vue"],"names":[],"mappings":"wBAuDqB,OAAO,YAAY;;AAQxC;;QAGM,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAwBhF"}
1
+ {"version":3,"file":"file-input.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/file-input.vue"],"names":[],"mappings":"wBAyDqB,OAAO,YAAY;;AAQxC;;QAGM,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IA0BhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"number-combobox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/number-combobox.vue"],"names":[],"mappings":"wBAmEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAsChF"}
1
+ {"version":3,"file":"number-combobox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/number-combobox.vue"],"names":[],"mappings":"wBAqEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAwChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/radio-group.vue"],"names":[],"mappings":"wBAqEqB,OAAO,YAAY;;AAQxC;;QAGM,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAsChF"}
1
+ {"version":3,"file":"radio-group.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/radio-group.vue"],"names":[],"mappings":"wBAiEqB,OAAO,YAAY;;AAQxC;;QAGM,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAkChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"select.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/select.vue"],"names":[],"mappings":"wBAiDqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAsBhF"}
1
+ {"version":3,"file":"select.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/select.vue"],"names":[],"mappings":"wBAkDqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAuBhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"slider.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/slider.vue"],"names":[],"mappings":"wBAiDqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAyBhF"}
1
+ {"version":3,"file":"slider.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/slider.vue"],"names":[],"mappings":"wBAkDqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IA0BhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"switch.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/switch.vue"],"names":[],"mappings":"wBA6CqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAoBhF"}
1
+ {"version":3,"file":"switch.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/switch.vue"],"names":[],"mappings":"wBA8CqB,OAAO,YAAY;;AAQxC;;QAGM,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,4EAA4E;cAAlE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,cAAc,CAAC;;;;QAKzE,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAqBhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"text-field.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/text-field.vue"],"names":[],"mappings":"wBA6CqB,OAAO,YAAY;;AAQxC;;QAGM,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAchF"}
1
+ {"version":3,"file":"text-field.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/text-field.vue"],"names":[],"mappings":"wBA+CqB,OAAO,YAAY;;AAQxC;;QAGM,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,iBAAiB,CAAC;;;;QAK5E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAgBhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/textarea.vue"],"names":[],"mappings":"wBAqEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAiChF"}
1
+ {"version":3,"file":"textarea.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/textarea.vue"],"names":[],"mappings":"wBAsEqB,OAAO,YAAY;;AAQxC;;QAGM,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;;;QAL7E,8EAA8E;cAApE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;;;;QAK3E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAkChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/time-picker.vue"],"names":[],"mappings":"wBAwNqB,OAAO,YAAY;;AAdxC;;QAGI,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAK9E"}
1
+ {"version":3,"file":"time-picker.vue.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/time-picker.vue"],"names":[],"mappings":"wBA6NqB,OAAO,YAAY;;AAdxC;;QAGI,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;;QAL7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;;QAK7E,gFAAgF;cAAtE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC;;;6IAK9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-vjsf.d.ts","sourceRoot":"","sources":["../../src/composables/use-vjsf.js"],"names":[],"mappings":"AAcA;IACE;;MAEE;gCADO,GAAG;IAGZ;;MAEE;4BADO,OAAO,aAAa,EAAE,kBAAkB;EAGlD;AAiBM,gCAdI,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,cACzB,OAAO,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,WACtB,OAAO,KAAK,EAAE,GAAG,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC,kBAClE,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,CAAC,QACvC,GAAG,YACH,cAAc,2BAA2B,EAAE,OAAO,0BAClD,cAAc,2BAA2B,EAAE,qBAAqB,sBAChE,OAAO,KAAK,EAAE,GAAG,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC,GAC3D;IACV,EAAE,EAAE,OAAO,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,cAAc,EAAE,OAAO,KAAK,EAAE,UAAU,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC1F,SAAS,EAAE,OAAO,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,EAAE,SAAS,GAAG,IAAI,CAAC,CAAA;CAChF,CAsJH"}
1
+ {"version":3,"file":"use-vjsf.d.ts","sourceRoot":"","sources":["../../src/composables/use-vjsf.js"],"names":[],"mappings":"AAcA;IACE;;MAEE;gCADO,GAAG;IAGZ;;MAEE;4BADO,OAAO,aAAa,EAAE,kBAAkB;EAGlD;AAiBM,gCAdI,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,cACzB,OAAO,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,WACtB,OAAO,KAAK,EAAE,GAAG,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC,kBAClE,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,CAAC,QACvC,GAAG,YACH,cAAc,2BAA2B,EAAE,OAAO,0BAClD,cAAc,2BAA2B,EAAE,qBAAqB,sBAChE,OAAO,KAAK,EAAE,GAAG,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC,GAC3D;IACV,EAAE,EAAE,OAAO,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,cAAc,EAAE,OAAO,KAAK,EAAE,UAAU,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC1F,SAAS,EAAE,OAAO,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,EAAE,SAAS,GAAG,IAAI,CAAC,CAAA;CAChF,CAuKH"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @param {{ prefixName?: string | import('vue').Ref<string | null>, dataTitle?: string | import('vue').Ref<string | null>, schema: object | import('vue').Ref<object> }} options
3
+ */
4
+ export function useWebMCP(options: {
5
+ prefixName?: string | import("vue").Ref<string | null>;
6
+ dataTitle?: string | import("vue").Ref<string | null>;
7
+ schema: object | import("vue").Ref<object>;
8
+ }): {
9
+ onStateUpdate: (statefulLayout: import("@json-layout/core").StatefulLayout) => void;
10
+ };
11
+ //# sourceMappingURL=use-webmcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-webmcp.d.ts","sourceRoot":"","sources":["../../src/composables/use-webmcp.js"],"names":[],"mappings":"AAGA;;GAEG;AACH,mCAFW;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE;oCAO3J,OAAO,mBAAmB,EAAE,cAAc;EAgBtD"}
package/types/types.d.ts CHANGED
@@ -40,6 +40,7 @@ export type PartialVjsfOptions = PartialVjsfCompileOptions & Partial<Omit<VjsfSt
40
40
  export type FullVjsfNodeOptions = Required<VjsfOptions>;
41
41
  export type VjsfStatefulLayout = Omit<StatefulLayout, 'options'> & {
42
42
  options: VjsfStatefulLayoutOptions;
43
+ _renderCounts?: Map<string, number>;
43
44
  };
44
45
  export type VjsfNode = Omit<StateNode, 'options'> & {
45
46
  options: FullVjsfNodeOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG;IACzD,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AACD,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAEnE,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,yBAAyB,CAAA;AAC/E,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC,CAAA;AACpK,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;AAEvD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,yBAAyB,CAAC;IAAC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAC,CAAA;AAE5I,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAClF,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC7F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACnG,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACjG,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACzG,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC3G,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACrF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACnG,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACnG,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC3F,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACzF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACjG,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACvG,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACnG,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACzF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACzF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC/F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC7F,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AACrG,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC3F,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC7F,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA;AAC/F,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAC,CAAA"}
@@ -1,83 +0,0 @@
1
- <script setup>
2
- import { computed, shallowRef, watch } from 'vue'
3
-
4
- import { compile, produceCompileOptions } from '@json-layout/core/compile'
5
- import { WebMCP } from '@json-layout/core/webmcp'
6
- import Tree from './tree.vue'
7
- import { useVjsf, emits } from '../composables/use-vjsf.js'
8
- import '../styles/vjsf.css'
9
- import { nodeComponents } from './nodes/index.js'
10
-
11
- const props = defineProps({
12
- schema: {
13
- type: Object,
14
- required: true
15
- },
16
- precompiledLayout: {
17
- /** @type import('vue').PropType<import('@json-layout/core').CompiledLayout> */
18
- type: Object,
19
- default: null
20
- },
21
- modelValue: {
22
- type: null,
23
- default: null
24
- },
25
- options: {
26
- /** @type import('vue').PropType<import('../types.js').PartialVjsfOptions | null> */
27
- type: Object,
28
- default: null
29
- },
30
- prefixName: {
31
- type: String,
32
- default: null
33
- },
34
- dataTitle: {
35
- type: String,
36
- default: null
37
- }
38
- })
39
-
40
- const emit = defineEmits(emits)
41
-
42
- const { el, statefulLayout, stateTree } = useVjsf(
43
- computed(() => props.schema),
44
- computed(() => props.modelValue),
45
- computed(() => props.options),
46
- nodeComponents,
47
- emit,
48
- compile,
49
- produceCompileOptions,
50
- computed(() => props.precompiledLayout)
51
- )
52
-
53
- /** @type import('vue').ShallowRef<WebMCP | null> */
54
- const webMCP = shallowRef(null)
55
- watch(statefulLayout, () => {
56
- if (webMCP.value) webMCP.value.unregisterTools()
57
- if (statefulLayout.value) {
58
- webMCP.value = new WebMCP(
59
- /** @type {import('@json-layout/core').StatefulLayout} */(/** @type {unknown} */(statefulLayout.value)),
60
- { prefixName: props.prefixName, dataTitle: props.dataTitle, schema: props.schema }
61
- )
62
- webMCP.value.registerTools()
63
- }
64
- }, { immediate: true })
65
-
66
- </script>
67
-
68
- <template>
69
- <div
70
- ref="el"
71
- class="vjsf"
72
- >
73
- <tree
74
- v-if="statefulLayout && stateTree"
75
- :model-value="stateTree"
76
- :stateful-layout="statefulLayout"
77
- />
78
- </div>
79
- </template>
80
-
81
- <style lang="css">
82
- /* nothing here, use ../styles/vjsf.css */
83
- </style>
@@ -1,70 +0,0 @@
1
- declare const _default: typeof __VLS_export;
2
- export default _default;
3
- declare const __VLS_export: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
4
- schema: {
5
- type: ObjectConstructor;
6
- required: true;
7
- };
8
- precompiledLayout: {
9
- /** @type import('vue').PropType<import('@json-layout/core').CompiledLayout> */
10
- type: import("vue").PropType<import("@json-layout/core").CompiledLayout>;
11
- default: null;
12
- };
13
- modelValue: {
14
- type: null;
15
- default: null;
16
- };
17
- options: {
18
- /** @type import('vue').PropType<import('../types.js').PartialVjsfOptions | null> */
19
- type: import("vue").PropType<import("../types.js").PartialVjsfOptions | null>;
20
- default: null;
21
- };
22
- prefixName: {
23
- type: StringConstructor;
24
- default: null;
25
- };
26
- dataTitle: {
27
- type: StringConstructor;
28
- default: null;
29
- };
30
- }>, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {
31
- "update:state": (state: import("../types.js", { with: { "resolution-mode": "import" } }).VjsfStatefulLayout) => void;
32
- "update:modelValue": (data: any) => void;
33
- }, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<import("vue", { with: { "resolution-mode": "import" } }).ExtractPropTypes<{
34
- schema: {
35
- type: ObjectConstructor;
36
- required: true;
37
- };
38
- precompiledLayout: {
39
- /** @type import('vue').PropType<import('@json-layout/core').CompiledLayout> */
40
- type: import("vue").PropType<import("@json-layout/core").CompiledLayout>;
41
- default: null;
42
- };
43
- modelValue: {
44
- type: null;
45
- default: null;
46
- };
47
- options: {
48
- /** @type import('vue').PropType<import('../types.js').PartialVjsfOptions | null> */
49
- type: import("vue").PropType<import("../types.js").PartialVjsfOptions | null>;
50
- default: null;
51
- };
52
- prefixName: {
53
- type: StringConstructor;
54
- default: null;
55
- };
56
- dataTitle: {
57
- type: StringConstructor;
58
- default: null;
59
- };
60
- }>> & Readonly<{
61
- "onUpdate:state"?: ((state: import("../types.js", { with: { "resolution-mode": "import" } }).VjsfStatefulLayout) => any) | undefined;
62
- "onUpdate:modelValue"?: ((data: any) => any) | undefined;
63
- }>, {
64
- options: import("../types.js", { with: { "resolution-mode": "import" } }).PartialVjsfOptions | null;
65
- modelValue: any;
66
- precompiledLayout: import("../../../node_modules/@json-layout/core/types/compile/types.js", { with: { "resolution-mode": "import" } }).CompiledLayout;
67
- prefixName: string;
68
- dataTitle: string;
69
- }, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, true, {}, any>;
70
- //# sourceMappingURL=vjsf-webmcp.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vjsf-webmcp.vue.d.ts","sourceRoot":"","sources":["../../src/components/vjsf-webmcp.vue"],"names":[],"mappings":"wBAgOqB,OAAO,YAAY;;AA/BxC;;;;;;QAQI,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC;;;;;;;;QAS5E,oFAAoF;cAA1E,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;QATjF,+EAA+E;cAArE,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC;;;;;;;;QAS5E,oFAAoF;cAA1E,OAAO,KAAK,EAAE,QAAQ,CAAC,OAAO,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;wHAalF"}