@json-layout/core 0.1.0 → 0.2.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 +4 -3
- package/src/compile/index.js +14 -2
- package/src/compile/serialize.js +3 -2
- package/src/compile/skeleton-node.js +34 -7
- package/src/compile/skeleton-tree.js +3 -1
- package/src/compile/types.ts +3 -2
- package/src/i18n/en.js +2 -1
- package/src/i18n/fr.js +2 -1
- package/src/i18n/types.ts +1 -0
- package/src/state/index.js +45 -16
- package/src/state/state-node.js +3 -2
- package/src/state/types.ts +28 -1
- package/types/compile/index.d.ts.map +1 -1
- package/types/compile/serialize.d.ts.map +1 -1
- package/types/compile/skeleton-node.d.ts +2 -1
- package/types/compile/skeleton-node.d.ts.map +1 -1
- package/types/compile/skeleton-tree.d.ts +2 -1
- package/types/compile/skeleton-tree.d.ts.map +1 -1
- package/types/compile/types.d.ts +2 -1
- package/types/compile/types.d.ts.map +1 -1
- package/types/i18n/types.d.ts +1 -0
- package/types/i18n/types.d.ts.map +1 -1
- package/types/state/index.d.ts +15 -3
- package/types/state/index.d.ts.map +1 -1
- package/types/state/state-node.d.ts.map +1 -1
- package/types/state/types.d.ts +9 -1
- package/types/state/types.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@json-layout/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Compilation and state management utilities for JSON Layout.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"src",
|
|
22
|
-
"types"
|
|
22
|
+
"types",
|
|
23
|
+
"LICENSE"
|
|
23
24
|
],
|
|
24
25
|
"scripts": {
|
|
25
26
|
"test:single": "node --no-experimental-fetch --test --test-only test/*.spec.js",
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
},
|
|
47
48
|
"homepage": "https://github.com/json-layout/json-layout#readme",
|
|
48
49
|
"dependencies": {
|
|
49
|
-
"@json-layout/vocabulary": "^0.
|
|
50
|
+
"@json-layout/vocabulary": "^0.2.0",
|
|
50
51
|
"@types/markdown-it": "^13.0.1",
|
|
51
52
|
"ajv": "^8.12.0",
|
|
52
53
|
"ajv-errors": "^3.0.0",
|
package/src/compile/index.js
CHANGED
|
@@ -27,7 +27,7 @@ const Ajv = /** @type {typeof ajvModule.default} */ (ajvModule)
|
|
|
27
27
|
// @ts-ignore
|
|
28
28
|
const ajvLocalize = /** @type {typeof ajvLocalizeModule.default} */ (ajvLocalizeModule)
|
|
29
29
|
|
|
30
|
-
const expressionsParams = ['data', 'options', 'display']
|
|
30
|
+
const expressionsParams = ['data', 'options', 'context', 'display']
|
|
31
31
|
|
|
32
32
|
const clone = rfdc()
|
|
33
33
|
// const exprEvalParser = new ExprEvalParser()
|
|
@@ -87,8 +87,19 @@ export function compile (_schema, partialOptions = {}) {
|
|
|
87
87
|
const normalizedLayouts = {}
|
|
88
88
|
/** @type {import('@json-layout/vocabulary').Expression[]} */
|
|
89
89
|
const expressionsDefinitions = []
|
|
90
|
+
/** @type {Record<string, string[]>} */
|
|
91
|
+
const validationErrors = {}
|
|
90
92
|
|
|
91
|
-
const skeletonTree = makeSkeletonTree(
|
|
93
|
+
const skeletonTree = makeSkeletonTree(
|
|
94
|
+
schema,
|
|
95
|
+
options,
|
|
96
|
+
validatePointers,
|
|
97
|
+
validationErrors,
|
|
98
|
+
normalizedLayouts,
|
|
99
|
+
expressionsDefinitions,
|
|
100
|
+
`${schema.$id}#`,
|
|
101
|
+
'main'
|
|
102
|
+
)
|
|
92
103
|
|
|
93
104
|
options.ajv.addSchema(schema)
|
|
94
105
|
|
|
@@ -126,6 +137,7 @@ export function compile (_schema, partialOptions = {}) {
|
|
|
126
137
|
schema,
|
|
127
138
|
skeletonTree,
|
|
128
139
|
validates,
|
|
140
|
+
validationErrors,
|
|
129
141
|
normalizedLayouts,
|
|
130
142
|
expressions,
|
|
131
143
|
locale: options.locale,
|
package/src/compile/serialize.js
CHANGED
|
@@ -26,7 +26,7 @@ export function serialize (compiledLayout) {
|
|
|
26
26
|
|
|
27
27
|
code = code.replace('"use strict";', '')
|
|
28
28
|
|
|
29
|
-
// some internal imports to ajv are not translated to
|
|
29
|
+
// some internal imports to ajv are not translated to esm, we do it here
|
|
30
30
|
// cf https://github.com/ajv-validator/ajv-formats/pull/73
|
|
31
31
|
if (code.includes('require("ajv-formats/dist/formats")')) {
|
|
32
32
|
code = 'import { fullFormats } from "ajv-formats/dist/formats.js";\n' + code
|
|
@@ -37,7 +37,7 @@ export function serialize (compiledLayout) {
|
|
|
37
37
|
code = code.replace(/require\("ajv\/dist\/runtime\/ucs2length"\)/g, 'ucs2length')
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// import only the current locale from ajv-i18n
|
|
41
41
|
code = `import localizeErrors from "ajv-i18n/localize/${compiledLayout.locale}/index.js";
|
|
42
42
|
export const exportLocalizeErrors = localizeErrors;\n` + code
|
|
43
43
|
|
|
@@ -55,6 +55,7 @@ export const exportLocalizeErrors = localizeErrors;\n` + code
|
|
|
55
55
|
skeletonTree: compiledLayout.skeletonTree,
|
|
56
56
|
normalizedLayouts: compiledLayout.normalizedLayouts,
|
|
57
57
|
validates: {},
|
|
58
|
+
validationErrors: compiledLayout.validationErrors,
|
|
58
59
|
expressions: expressionsNodes,
|
|
59
60
|
locale: compiledLayout.locale,
|
|
60
61
|
messages: compiledLayout.messages,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// import Debug from 'debug'
|
|
2
|
-
import { normalizeLayoutFragment, isSwitchStruct, isGetItemsExpression,
|
|
2
|
+
import { normalizeLayoutFragment, isSwitchStruct, isGetItemsExpression, isGetItemsFetch, isItemsLayout } from '@json-layout/vocabulary'
|
|
3
3
|
import { makeSkeletonTree } from './skeleton-tree.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -20,6 +20,7 @@ const pushExpression = (expressions, expression) => {
|
|
|
20
20
|
* @param {any} schema
|
|
21
21
|
* @param {import('./index.js').CompileOptions} options
|
|
22
22
|
* @param {string[]} validates
|
|
23
|
+
* @param {Record<string, string[]>} validationErrors
|
|
23
24
|
* @param {Record<string, import('@json-layout/vocabulary').NormalizedLayout>} normalizedLayouts
|
|
24
25
|
* @param {import('@json-layout/vocabulary').Expression[]} expressions
|
|
25
26
|
* @param {string | number} key
|
|
@@ -32,6 +33,7 @@ export function makeSkeletonNode (
|
|
|
32
33
|
schema,
|
|
33
34
|
options,
|
|
34
35
|
validates,
|
|
36
|
+
validationErrors,
|
|
35
37
|
normalizedLayouts,
|
|
36
38
|
expressions,
|
|
37
39
|
key,
|
|
@@ -44,20 +46,26 @@ export function makeSkeletonNode (
|
|
|
44
46
|
|
|
45
47
|
// improve on ajv error messages based on ajv-errors (https://ajv.js.org/packages/ajv-errors.html)
|
|
46
48
|
schema.errorMessage = schema.errorMessage ?? {}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
if (!normalizedLayouts[pointer]) {
|
|
50
|
+
const normalizationResult = normalizeLayoutFragment(/** @type {import('@json-layout/vocabulary').SchemaFragment} */(schema), pointer, options.markdown)
|
|
51
|
+
normalizedLayouts[pointer] = normalizationResult.layout
|
|
52
|
+
if (normalizationResult.errors.length) {
|
|
53
|
+
validationErrors[pointer.replace('_jl#', '/')] = normalizationResult.errors
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const normalizedLayout = normalizedLayouts[pointer]
|
|
50
57
|
|
|
51
58
|
const compObjects = isSwitchStruct(normalizedLayout) ? normalizedLayout.switch : [normalizedLayout]
|
|
52
59
|
for (const compObject of compObjects) {
|
|
53
60
|
if (schema.description && !compObject.help) compObject.help = schema.description
|
|
54
61
|
if (compObject.if) pushExpression(expressions, compObject.if)
|
|
55
|
-
if (
|
|
62
|
+
if (isItemsLayout(compObject) && compObject.getItems) {
|
|
56
63
|
if (isGetItemsExpression(compObject.getItems)) pushExpression(expressions, compObject.getItems)
|
|
57
64
|
if (isGetItemsFetch(compObject.getItems)) pushExpression(expressions, compObject.getItems.url)
|
|
58
65
|
if (compObject.getItems.itemTitle) pushExpression(expressions, compObject.getItems.itemTitle)
|
|
59
66
|
if (compObject.getItems.itemKey) pushExpression(expressions, compObject.getItems.itemKey)
|
|
60
67
|
if (compObject.getItems.itemValue) pushExpression(expressions, compObject.getItems.itemValue)
|
|
68
|
+
if (compObject.getItems.itemIcon) pushExpression(expressions, compObject.getItems.itemIcon)
|
|
61
69
|
if (compObject.getItems.itemsResults) pushExpression(expressions, compObject.getItems.itemsResults)
|
|
62
70
|
}
|
|
63
71
|
}
|
|
@@ -82,6 +90,7 @@ export function makeSkeletonNode (
|
|
|
82
90
|
schema.properties[propertyKey],
|
|
83
91
|
options,
|
|
84
92
|
validates,
|
|
93
|
+
validationErrors,
|
|
85
94
|
normalizedLayouts,
|
|
86
95
|
expressions,
|
|
87
96
|
propertyKey,
|
|
@@ -102,6 +111,7 @@ export function makeSkeletonNode (
|
|
|
102
111
|
schema.allOf[i],
|
|
103
112
|
options,
|
|
104
113
|
validates,
|
|
114
|
+
validationErrors,
|
|
105
115
|
normalizedLayouts,
|
|
106
116
|
expressions,
|
|
107
117
|
`$allOf-${i}`,
|
|
@@ -113,14 +123,29 @@ export function makeSkeletonNode (
|
|
|
113
123
|
}
|
|
114
124
|
if (schema.oneOf) {
|
|
115
125
|
const oneOfPointer = `${pointer}/oneOf`
|
|
116
|
-
|
|
126
|
+
if (!normalizedLayouts[oneOfPointer]) {
|
|
127
|
+
const normalizationResult = normalizeLayoutFragment(schema, oneOfPointer, options.markdown, 'oneOf')
|
|
128
|
+
normalizedLayouts[oneOfPointer] = normalizationResult.layout
|
|
129
|
+
if (normalizationResult.errors.length) {
|
|
130
|
+
validationErrors[oneOfPointer.replace('_jl#', '/')] = normalizationResult.errors
|
|
131
|
+
}
|
|
132
|
+
}
|
|
117
133
|
/** @type {import('./types.js').SkeletonTree[]} */
|
|
118
134
|
const childrenTrees = []
|
|
119
135
|
for (let i = 0; i < schema.oneOf.length; i++) {
|
|
120
136
|
if (!schema.oneOf[i].type) schema.oneOf[i].type = schema.type
|
|
121
137
|
const title = schema.oneOf[i].title ?? `option ${i}`
|
|
122
138
|
delete schema.oneOf[i].title
|
|
123
|
-
childrenTrees.push(makeSkeletonTree(
|
|
139
|
+
childrenTrees.push(makeSkeletonTree(
|
|
140
|
+
schema.oneOf[i],
|
|
141
|
+
options,
|
|
142
|
+
validates,
|
|
143
|
+
validationErrors,
|
|
144
|
+
normalizedLayouts,
|
|
145
|
+
expressions,
|
|
146
|
+
`${oneOfPointer}/${i}`,
|
|
147
|
+
title
|
|
148
|
+
))
|
|
124
149
|
}
|
|
125
150
|
node.children = node.children ?? []
|
|
126
151
|
node.children.push({ key: '$oneOf', pointer: `${pointer}/oneOf`, parentPointer: pointer, childrenTrees })
|
|
@@ -136,6 +161,7 @@ export function makeSkeletonNode (
|
|
|
136
161
|
itemSchema,
|
|
137
162
|
options,
|
|
138
163
|
validates,
|
|
164
|
+
validationErrors,
|
|
139
165
|
normalizedLayouts,
|
|
140
166
|
expressions,
|
|
141
167
|
i,
|
|
@@ -150,6 +176,7 @@ export function makeSkeletonNode (
|
|
|
150
176
|
schema.items,
|
|
151
177
|
options,
|
|
152
178
|
validates,
|
|
179
|
+
validationErrors,
|
|
153
180
|
normalizedLayouts,
|
|
154
181
|
expressions,
|
|
155
182
|
`${pointer}/items`,
|
|
@@ -7,6 +7,7 @@ import { makeSkeletonNode } from './skeleton-node.js'
|
|
|
7
7
|
* @param {any} schema
|
|
8
8
|
* @param {import('./index.js').CompileOptions} options
|
|
9
9
|
* @param {string[]} validates
|
|
10
|
+
* @param {Record<string, string[]>} validationErrors
|
|
10
11
|
* @param {Record<string, import('@json-layout/vocabulary').NormalizedLayout>} normalizedLayouts
|
|
11
12
|
* @param {import('@json-layout/vocabulary').Expression[]} expressions
|
|
12
13
|
* @param {string} pointer
|
|
@@ -17,12 +18,13 @@ export function makeSkeletonTree (
|
|
|
17
18
|
schema,
|
|
18
19
|
options,
|
|
19
20
|
validates,
|
|
21
|
+
validationErrors,
|
|
20
22
|
normalizedLayouts,
|
|
21
23
|
expressions,
|
|
22
24
|
pointer,
|
|
23
25
|
title
|
|
24
26
|
) {
|
|
25
|
-
const root = makeSkeletonNode(schema, options, validates, normalizedLayouts, expressions, '', pointer, null, true)
|
|
27
|
+
const root = makeSkeletonNode(schema, options, validates, validationErrors, normalizedLayouts, expressions, '', pointer, null, true)
|
|
26
28
|
validates.push(pointer)
|
|
27
29
|
return { title, root }
|
|
28
30
|
}
|
package/src/compile/types.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type ajvModule from 'ajv'
|
|
2
2
|
import type MarkdownIt from 'markdown-it'
|
|
3
3
|
import { type NormalizedLayout, type StateNodeOptions } from '@json-layout/vocabulary'
|
|
4
|
-
import { type ValidateFunction, type SchemaObject } from 'ajv'
|
|
4
|
+
import { type ValidateFunction, type SchemaObject, type ErrorObject } from 'ajv'
|
|
5
5
|
import { type Display } from '../state/utils/display.js'
|
|
6
6
|
import { type LocaleMessages } from '../i18n/types.js'
|
|
7
7
|
|
|
8
|
-
export type CompiledExpression = (data: any, options: StateNodeOptions, display: Display) => any
|
|
8
|
+
export type CompiledExpression = (data: any, options: StateNodeOptions, context: object, display: Display) => any
|
|
9
9
|
|
|
10
10
|
export interface CompileOptions {
|
|
11
11
|
ajv: ajvModule.default
|
|
@@ -23,6 +23,7 @@ export interface CompiledLayout {
|
|
|
23
23
|
schema?: SchemaObject
|
|
24
24
|
skeletonTree: SkeletonTree
|
|
25
25
|
validates: Record<string, ValidateFunction>
|
|
26
|
+
validationErrors: Record<string, string[]>
|
|
26
27
|
normalizedLayouts: Record<string, NormalizedLayout>
|
|
27
28
|
expressions: CompiledExpression[]
|
|
28
29
|
locale: string
|
package/src/i18n/en.js
CHANGED
package/src/i18n/fr.js
CHANGED
package/src/i18n/types.ts
CHANGED
package/src/state/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import debug from 'debug'
|
|
|
4
4
|
import { evalExpression, producePatchedData } from './state-node.js'
|
|
5
5
|
import { createStateTree } from './state-tree.js'
|
|
6
6
|
import { Display } from './utils/display.js'
|
|
7
|
-
import { isGetItemsExpression, isGetItemsFetch } from '@json-layout/vocabulary'
|
|
7
|
+
import { isGetItemsExpression, isGetItemsFetch, isItemsLayout } from '@json-layout/vocabulary'
|
|
8
8
|
|
|
9
9
|
export { Display } from './utils/display.js'
|
|
10
10
|
|
|
@@ -20,6 +20,8 @@ export { Display } from './utils/display.js'
|
|
|
20
20
|
* @typedef {import('./types.js').SliderNode} SliderNode
|
|
21
21
|
* @typedef {import('./types.js').SectionNode} SectionNode
|
|
22
22
|
* @typedef {import('./types.js').SelectNode} SelectNode
|
|
23
|
+
* @typedef {import('./types.js').AutocompleteNode} AutocompleteNode
|
|
24
|
+
* @typedef {import('./types.js').ComboboxNode} ComboboxNode
|
|
23
25
|
* @typedef {import('./types.js').CheckboxNode} CheckboxNode
|
|
24
26
|
* @typedef {import('./types.js').SwitchNode} SwitchNode
|
|
25
27
|
* @typedef {import('./types.js').ColorPickerNode} ColorPickerNode
|
|
@@ -36,8 +38,8 @@ export { Display } from './utils/display.js'
|
|
|
36
38
|
/** @type {(node: StateNode | undefined) => node is SectionNode} */
|
|
37
39
|
export const isSection = (node) => !!node && node.layout.comp === 'section'
|
|
38
40
|
|
|
39
|
-
/** @type {(node: StateNode | undefined) => node is SelectNode} */
|
|
40
|
-
export const
|
|
41
|
+
/** @type {(node: StateNode | undefined) => node is SelectNode | ComboboxNode | AutocompleteNode} */
|
|
42
|
+
export const isItemsNode = (node) => !!node && isItemsLayout(node.layout)
|
|
41
43
|
|
|
42
44
|
const logDataBinding = debug('jl:data-binding')
|
|
43
45
|
|
|
@@ -303,12 +305,15 @@ export class StatefulLayout {
|
|
|
303
305
|
}
|
|
304
306
|
|
|
305
307
|
/**
|
|
308
|
+
* @private
|
|
306
309
|
* @param {StateNode} node
|
|
307
|
-
* @
|
|
310
|
+
* @param {string} q
|
|
311
|
+
* @returns {Promise<[import('@json-layout/vocabulary').SelectItems, boolean]>}
|
|
308
312
|
*/
|
|
309
|
-
async
|
|
310
|
-
if (!
|
|
311
|
-
|
|
313
|
+
async getSourceItems (node, q = '') {
|
|
314
|
+
if (!isItemsNode(node)) throw new Error('node is not a component with an items list')
|
|
315
|
+
|
|
316
|
+
if (node.layout.items) return [node.layout.items, false]
|
|
312
317
|
|
|
313
318
|
/** @type {(expression: import('@json-layout/vocabulary').Expression, data: any) => any} */
|
|
314
319
|
const evalSelectExpression = (expression, data) => {
|
|
@@ -316,12 +321,24 @@ export class StatefulLayout {
|
|
|
316
321
|
}
|
|
317
322
|
|
|
318
323
|
let rawItems
|
|
324
|
+
let appliedQ = false
|
|
319
325
|
if (node.layout.getItems && isGetItemsExpression(node.layout.getItems)) {
|
|
320
326
|
rawItems = evalSelectExpression(node.layout.getItems, null)
|
|
321
327
|
if (!Array.isArray(rawItems)) throw new Error('getItems expression didn\'t return an array')
|
|
322
328
|
}
|
|
323
329
|
if (node.layout.getItems && isGetItemsFetch(node.layout.getItems)) {
|
|
324
|
-
const url = evalSelectExpression(node.layout.getItems.url, null)
|
|
330
|
+
const url = new URL(evalSelectExpression(node.layout.getItems.url, null))
|
|
331
|
+
let qSearchParam = node.layout.getItems.qSearchParam
|
|
332
|
+
if (!qSearchParam) {
|
|
333
|
+
for (const searchParam of url.searchParams.entries()) {
|
|
334
|
+
if (searchParam[1] === '{q}') qSearchParam = searchParam[0]
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (qSearchParam) {
|
|
338
|
+
appliedQ = true
|
|
339
|
+
if (q) url.searchParams.set(qSearchParam, q)
|
|
340
|
+
else url.searchParams.delete(qSearchParam)
|
|
341
|
+
}
|
|
325
342
|
rawItems = await (await fetch(url)).json()
|
|
326
343
|
}
|
|
327
344
|
|
|
@@ -329,28 +346,40 @@ export class StatefulLayout {
|
|
|
329
346
|
if (node.layout.getItems?.itemsResults) {
|
|
330
347
|
rawItems = evalSelectExpression(node.layout.getItems.itemsResults, rawItems)
|
|
331
348
|
}
|
|
332
|
-
|
|
349
|
+
/** @type {import('@json-layout/vocabulary').SelectItems} */
|
|
350
|
+
const items = rawItems.map((/** @type {any} */ rawItem) => {
|
|
351
|
+
/** @type {Partial<import('@json-layout/vocabulary').SelectItem>} */
|
|
352
|
+
const item = {}
|
|
333
353
|
if (typeof rawItem === 'object') {
|
|
334
|
-
/** @type {Partial<import('@json-layout/vocabulary').SelectItem>} */
|
|
335
|
-
const item = {}
|
|
336
354
|
item.value = node.layout.getItems?.itemValue ? evalSelectExpression(node.layout.getItems.itemValue, rawItem) : (node.layout.getItems?.returnObjects ? rawItem : rawItem.value)
|
|
337
355
|
item.key = node.layout.getItems?.itemKey ? evalSelectExpression(node.layout.getItems.itemKey, rawItem) : rawItem.key
|
|
338
356
|
item.title = node.layout.getItems?.itemTitle ? evalSelectExpression(node.layout.getItems.itemTitle, rawItem) : rawItem.title
|
|
339
357
|
item.value = item.value ?? item.key
|
|
340
358
|
item.key = item.key ?? item.value + ''
|
|
341
359
|
item.title = item.title ?? item.key
|
|
342
|
-
|
|
360
|
+
if (!item.icon && rawItem.icon) item.icon = rawItem.icon
|
|
343
361
|
} else {
|
|
344
|
-
/** @type {Partial<import('@json-layout/vocabulary').SelectItem>} */
|
|
345
|
-
const item = {}
|
|
346
362
|
item.value = node.layout.getItems?.itemValue ? evalSelectExpression(node.layout.getItems.itemValue, rawItem) : rawItem
|
|
347
363
|
item.key = node.layout.getItems?.itemKey ? evalSelectExpression(node.layout.getItems.itemKey, rawItem) : item.value
|
|
348
364
|
item.title = node.layout.getItems?.itemTitle ? evalSelectExpression(node.layout.getItems.itemTitle, rawItem) : item.value
|
|
349
|
-
return item
|
|
350
365
|
}
|
|
366
|
+
if (node.layout.getItems?.itemIcon) item.icon = evalSelectExpression(node.layout.getItems?.itemIcon, rawItem)
|
|
367
|
+
return item
|
|
351
368
|
})
|
|
369
|
+
return [items, appliedQ]
|
|
352
370
|
}
|
|
353
|
-
throw new Error(
|
|
371
|
+
throw new Error(`node ${node.fullKey} is missing items or getItems parameters`)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* @param {StateNode} node
|
|
376
|
+
* @param {string} q
|
|
377
|
+
* @returns {Promise<import('@json-layout/vocabulary').SelectItems>}
|
|
378
|
+
*/
|
|
379
|
+
async getItems (node, q = '') {
|
|
380
|
+
const [sourceItems, appliedQ] = await this.getSourceItems(node, q)
|
|
381
|
+
if (q && !appliedQ) return sourceItems.filter(item => item.title.toLowerCase().includes(q.toLowerCase()))
|
|
382
|
+
return sourceItems
|
|
354
383
|
}
|
|
355
384
|
|
|
356
385
|
/**
|
package/src/state/state-node.js
CHANGED
|
@@ -125,7 +125,7 @@ export function evalExpression (expressions, expression, data, options, display)
|
|
|
125
125
|
if (expression.ref === undefined) throw new Error('expression was not compiled : ' + JSON.stringify(expression))
|
|
126
126
|
const compiledExpression = expressions[expression.ref]
|
|
127
127
|
// console.log(expression.expr, context, mode, display)
|
|
128
|
-
return compiledExpression(data, options, display)
|
|
128
|
+
return compiledExpression(data, options, options.context, display)
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
/**
|
|
@@ -192,7 +192,8 @@ export function createStateNode (
|
|
|
192
192
|
const options = produceNodeOptions(
|
|
193
193
|
reusedNode?.options ?? /** @type {import('./types.js').StatefulLayoutOptions} */({}),
|
|
194
194
|
parentOptions,
|
|
195
|
-
layout.options,
|
|
195
|
+
layout.options,
|
|
196
|
+
display.width
|
|
196
197
|
)
|
|
197
198
|
|
|
198
199
|
/** @type {import('./types.js').StateNode[] | undefined} */
|
package/src/state/types.ts
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
import { type ErrorObject } from 'ajv'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
type CompObject,
|
|
4
|
+
type Cols,
|
|
5
|
+
type StateNodeOptions,
|
|
6
|
+
type TextField,
|
|
7
|
+
type Textarea,
|
|
8
|
+
type NumberField,
|
|
9
|
+
type Slider,
|
|
10
|
+
type Checkbox,
|
|
11
|
+
type Switch,
|
|
12
|
+
type DatePicker,
|
|
13
|
+
type DateTimePicker,
|
|
14
|
+
type TimePicker,
|
|
15
|
+
type ColorPicker,
|
|
16
|
+
type Section,
|
|
17
|
+
type OneOfSelect,
|
|
18
|
+
type Select,
|
|
19
|
+
type Autocomplete,
|
|
20
|
+
type Tabs,
|
|
21
|
+
type VerticalTabs,
|
|
22
|
+
type ExpansionPanels,
|
|
23
|
+
type List,
|
|
24
|
+
type Combobox
|
|
25
|
+
} from '@json-layout/vocabulary'
|
|
3
26
|
import { type SkeletonTree, type SkeletonNode, type StatefulLayout } from '../index.js'
|
|
4
27
|
import { type LocaleMessages } from '../i18n/types.js'
|
|
5
28
|
|
|
@@ -80,6 +103,8 @@ export type OneOfSelectNode = StateNode & { layout: OneOfSelect, data: Record<st
|
|
|
80
103
|
|
|
81
104
|
export type SelectNode = Omit<StateNode, 'children'> & { layout: Select, data: any }
|
|
82
105
|
|
|
106
|
+
export type AutocompleteNode = Omit<StateNode, 'children'> & { layout: Autocomplete, data: any }
|
|
107
|
+
|
|
83
108
|
export type TabsNode = StateNode & { layout: Tabs, children: StateNode[] }
|
|
84
109
|
|
|
85
110
|
export type VerticalTabsNode = StateNode & { layout: VerticalTabs, children: StateNode[] }
|
|
@@ -87,3 +112,5 @@ export type VerticalTabsNode = StateNode & { layout: VerticalTabs, children: Sta
|
|
|
87
112
|
export type ExpansionPanelsNode = StateNode & { layout: ExpansionPanels, children: StateNode[] }
|
|
88
113
|
|
|
89
114
|
export type ListNode = StateNode & { layout: List, data: any[], children: StateNode[], childrenTrees: SkeletonTree[] }
|
|
115
|
+
|
|
116
|
+
export type ComboboxNode = Omit<StateNode, 'children'> & { layout: Combobox, data: any[] }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compile/index.js"],"names":[],"mappings":"AAsEA;;;;GAIG;AACH,iCAJW,MAAM,4EAEJ,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compile/index.js"],"names":[],"mappings":"AAsEA;;;;GAIG;AACH,iCAJW,MAAM,4EAEJ,cAAc,CA0E1B;;2BAnIY,OAAO,YAAY,EAAE,YAAY;2BACjC,OAAO,YAAY,EAAE,YAAY;6BACjC,OAAO,YAAY,EAAE,cAAc;6BACnC,OAAO,YAAY,EAAE,cAAc;oCACnC,OAAO,YAAY,EAAE,qBAAqB;iCAC1C,OAAO,YAAY,EAAE,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/compile/serialize.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,0CAHW,OAAO,YAAY,EAAE,cAAc,GACjC,MAAM,
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/compile/serialize.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,0CAHW,OAAO,YAAY,EAAE,cAAc,GACjC,MAAM,CAoElB"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @param {any} schema
|
|
3
3
|
* @param {import('./index.js').CompileOptions} options
|
|
4
4
|
* @param {string[]} validates
|
|
5
|
+
* @param {Record<string, string[]>} validationErrors
|
|
5
6
|
* @param {Record<string, import('@json-layout/vocabulary').NormalizedLayout>} normalizedLayouts
|
|
6
7
|
* @param {import('@json-layout/vocabulary').Expression[]} expressions
|
|
7
8
|
* @param {string | number} key
|
|
@@ -10,5 +11,5 @@
|
|
|
10
11
|
* @param {boolean} required
|
|
11
12
|
* @returns {import('./types.js').SkeletonNode}
|
|
12
13
|
*/
|
|
13
|
-
export function makeSkeletonNode(schema: any, options: import('./index.js').CompileOptions, validates: string[], normalizedLayouts: Record<string, import('@json-layout/vocabulary').NormalizedLayout>, expressions: import('@json-layout/vocabulary').Expression[], key: string | number, pointer: string, parentPointer: string | null, required: boolean): import('./types.js').SkeletonNode;
|
|
14
|
+
export function makeSkeletonNode(schema: any, options: import('./index.js').CompileOptions, validates: string[], validationErrors: Record<string, string[]>, normalizedLayouts: Record<string, import('@json-layout/vocabulary').NormalizedLayout>, expressions: import('@json-layout/vocabulary').Expression[], key: string | number, pointer: string, parentPointer: string | null, required: boolean): import('./types.js').SkeletonNode;
|
|
14
15
|
//# sourceMappingURL=skeleton-node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-node.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-node.js"],"names":[],"mappings":"AAkBA
|
|
1
|
+
{"version":3,"file":"skeleton-node.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-node.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;GAYG;AACH,yCAZW,GAAG,WACH,OAAO,YAAY,EAAE,cAAc,aACnC,MAAM,EAAE,oBACR,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC,qBACxB,OAAO,MAAM,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,eAClE,OAAO,yBAAyB,EAAE,UAAU,EAAE,OAC9C,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,OAAO,GACL,OAAO,YAAY,EAAE,YAAY,CA+J7C"}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* @param {any} schema
|
|
3
3
|
* @param {import('./index.js').CompileOptions} options
|
|
4
4
|
* @param {string[]} validates
|
|
5
|
+
* @param {Record<string, string[]>} validationErrors
|
|
5
6
|
* @param {Record<string, import('@json-layout/vocabulary').NormalizedLayout>} normalizedLayouts
|
|
6
7
|
* @param {import('@json-layout/vocabulary').Expression[]} expressions
|
|
7
8
|
* @param {string} pointer
|
|
8
9
|
* @param {string} title
|
|
9
10
|
* @returns {import('./types.js').SkeletonTree}
|
|
10
11
|
*/
|
|
11
|
-
export function makeSkeletonTree(schema: any, options: import('./index.js').CompileOptions, validates: string[], normalizedLayouts: Record<string, import('@json-layout/vocabulary').NormalizedLayout>, expressions: import('@json-layout/vocabulary').Expression[], pointer: string, title: string): import('./types.js').SkeletonTree;
|
|
12
|
+
export function makeSkeletonTree(schema: any, options: import('./index.js').CompileOptions, validates: string[], validationErrors: Record<string, string[]>, normalizedLayouts: Record<string, import('@json-layout/vocabulary').NormalizedLayout>, expressions: import('@json-layout/vocabulary').Expression[], pointer: string, title: string): import('./types.js').SkeletonTree;
|
|
12
13
|
//# sourceMappingURL=skeleton-tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-tree.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-tree.js"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"skeleton-tree.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-tree.js"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,yCAVW,GAAG,WACH,OAAO,YAAY,EAAE,cAAc,aACnC,MAAM,EAAE,oBACR,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC,qBACxB,OAAO,MAAM,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,eAClE,OAAO,yBAAyB,EAAE,UAAU,EAAE,WAC9C,MAAM,SACN,MAAM,GACJ,OAAO,YAAY,EAAE,YAAY,CAe7C"}
|
package/types/compile/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type NormalizedLayout, type StateNodeOptions } from '@json-layout/vocab
|
|
|
4
4
|
import { type ValidateFunction, type SchemaObject } from 'ajv';
|
|
5
5
|
import { type Display } from '../state/utils/display.js';
|
|
6
6
|
import { type LocaleMessages } from '../i18n/types.js';
|
|
7
|
-
export type CompiledExpression = (data: any, options: StateNodeOptions, display: Display) => any;
|
|
7
|
+
export type CompiledExpression = (data: any, options: StateNodeOptions, context: object, display: Display) => any;
|
|
8
8
|
export interface CompileOptions {
|
|
9
9
|
ajv: ajvModule.default;
|
|
10
10
|
code: boolean;
|
|
@@ -21,6 +21,7 @@ export interface CompiledLayout {
|
|
|
21
21
|
schema?: SchemaObject;
|
|
22
22
|
skeletonTree: SkeletonTree;
|
|
23
23
|
validates: Record<string, ValidateFunction>;
|
|
24
|
+
validationErrors: Record<string, string[]>;
|
|
24
25
|
normalizedLayouts: Record<string, NormalizedLayout>;
|
|
25
26
|
expressions: CompiledExpression[];
|
|
26
27
|
locale: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,KAAK,CAAA;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,KAAK,CAAA;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAoB,MAAM,KAAK,CAAA;AAChF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,GAAG,CAAA;AAEjH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC,OAAO,CAAA;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAAA;AAEtH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC3C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACnD,WAAW,EAAE,kBAAkB,EAAE,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAA;CAC1D;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,YAAY,CAAA;CACnB;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B"}
|
package/types/i18n/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,oBAAoB,CAAA"}
|
package/types/state/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export { Display } from "./utils/display.js";
|
|
|
11
11
|
* @typedef {import('./types.js').SliderNode} SliderNode
|
|
12
12
|
* @typedef {import('./types.js').SectionNode} SectionNode
|
|
13
13
|
* @typedef {import('./types.js').SelectNode} SelectNode
|
|
14
|
+
* @typedef {import('./types.js').AutocompleteNode} AutocompleteNode
|
|
15
|
+
* @typedef {import('./types.js').ComboboxNode} ComboboxNode
|
|
14
16
|
* @typedef {import('./types.js').CheckboxNode} CheckboxNode
|
|
15
17
|
* @typedef {import('./types.js').SwitchNode} SwitchNode
|
|
16
18
|
* @typedef {import('./types.js').ColorPickerNode} ColorPickerNode
|
|
@@ -25,8 +27,8 @@ export { Display } from "./utils/display.js";
|
|
|
25
27
|
*/
|
|
26
28
|
/** @type {(node: StateNode | undefined) => node is SectionNode} */
|
|
27
29
|
export const isSection: (node: StateNode | undefined) => node is import("./types.js").SectionNode;
|
|
28
|
-
/** @type {(node: StateNode | undefined) => node is SelectNode} */
|
|
29
|
-
export const
|
|
30
|
+
/** @type {(node: StateNode | undefined) => node is SelectNode | ComboboxNode | AutocompleteNode} */
|
|
31
|
+
export const isItemsNode: (node: StateNode | undefined) => node is import("./types.js").SelectNode | import("./types.js").AutocompleteNode | import("./types.js").ComboboxNode;
|
|
30
32
|
export class StatefulLayout {
|
|
31
33
|
/**
|
|
32
34
|
* @param {import("../index.js").CompiledLayout} compiledLayout
|
|
@@ -144,11 +146,19 @@ export class StatefulLayout {
|
|
|
144
146
|
* @param {StateNode} node
|
|
145
147
|
*/
|
|
146
148
|
blur(node: StateNode): void;
|
|
149
|
+
/**
|
|
150
|
+
* @private
|
|
151
|
+
* @param {StateNode} node
|
|
152
|
+
* @param {string} q
|
|
153
|
+
* @returns {Promise<[import('@json-layout/vocabulary').SelectItems, boolean]>}
|
|
154
|
+
*/
|
|
155
|
+
private getSourceItems;
|
|
147
156
|
/**
|
|
148
157
|
* @param {StateNode} node
|
|
158
|
+
* @param {string} q
|
|
149
159
|
* @returns {Promise<import('@json-layout/vocabulary').SelectItems>}
|
|
150
160
|
*/
|
|
151
|
-
|
|
161
|
+
getItems(node: StateNode, q?: string): Promise<import('@json-layout/vocabulary').SelectItems>;
|
|
152
162
|
/**
|
|
153
163
|
* @param {StateNode} node
|
|
154
164
|
* @param {number} key
|
|
@@ -170,6 +180,8 @@ export type NumberFieldNode = import('./types.js').NumberFieldNode;
|
|
|
170
180
|
export type SliderNode = import('./types.js').SliderNode;
|
|
171
181
|
export type SectionNode = import('./types.js').SectionNode;
|
|
172
182
|
export type SelectNode = import('./types.js').SelectNode;
|
|
183
|
+
export type AutocompleteNode = import('./types.js').AutocompleteNode;
|
|
184
|
+
export type ComboboxNode = import('./types.js').ComboboxNode;
|
|
173
185
|
export type CheckboxNode = import('./types.js').CheckboxNode;
|
|
174
186
|
export type SwitchNode = import('./types.js').SwitchNode;
|
|
175
187
|
export type ColorPickerNode = import('./types.js').ColorPickerNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":";AAUA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":";AAUA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,mEAAmE;AACnE,+BADkB,SAAS,GAAG,SAAS,8CACoC;AAE3E,oGAAoG;AACpG,iCADkB,SAAS,GAAG,SAAS,yHACkC;AA6BzE;IAoGE;;;;;OAKG;IACH,4BALW,OAAO,aAAa,EAAE,cAAc,gBACpC,OAAO,aAAa,EAAE,YAAY,WAClC,QAAQ,qBAAqB,CAAC,SAC9B,OAAO,EAYjB;IAnHD;;;OAGG;IACH,iBAFU,OAAO,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAEhD;IAEN;;;;OAIG;IACH,iCAAe;IACf,mEAAqD;IAErD;;;OAGG;IAEH,mBAAU;IACV,gDAA2C;IAE3C;;;OAGG;IACH,uBAFU,OAAO,aAAa,EAAE,YAAY,CAEhC;IAEZ;;;OAGG;IAEH,iBAAQ;IACR,uBAAuC;IAEvC;;;OAGG;IAEH,yBAAgB;IAQhB;;;OAGG;IACH,+DAOC;IAlBD;;OAEG;IACH,4DAEC;IAeD;;;OAGG;IAEH,iBAAQ;IAKR;;OAEG;IACH,6DAGC;IAVD;;OAEG;IACH,0DAAuC;IASvC;;;OAGG;IACH,cAAK;IAEL,uBAIC;IALD,oBAAiC;IAOjC;;;OAGG;IAEH,oCAA2B;IAwN3B;;OAEG;IACH,aAFU,OAAO,MAAM,EAAE,MAAM,CAAC,CAErB;IAvMX;;;OAGG;IACH,uBAGC;IAED;;OAEG;IACH,4BAOC;IAED;;OAEG;IACH,oBAUC;IAED;;OAEG;IACH,wBAiBC;IAED,iBAEC;IAED,wBAGC;IAED;;OAEG;IACH,qBAEC;IAED;;OAEG;IACH,8BAEC;IAED;;;;OAIG;IACH,YAJW,SAAS,QACT,OAAO,0CAoBjB;IAED;;OAEG;IACH,WAFW,SAAS,QAUnB;IAED;;;;;OAKG;IACH,uBA2DC;IAED;;;;OAIG;IACH,eAJW,SAAS,MACT,MAAM,GACJ,QAAQ,OAAO,yBAAyB,EAAE,WAAW,CAAC,CAMlE;IAOD;;;OAGG;IACH,mBAHW,SAAS,OACT,MAAM,QAShB;IAED;;OAEG;IACH,qBAFW,SAAS,QAKnB;CACF;wBA9YY,OAAO,YAAY,EAAE,SAAS;wBAC9B,OAAO,YAAY,EAAE,SAAS;oCAC9B,OAAO,YAAY,EAAE,qBAAqB;mCAC1C,OAAO,YAAY,EAAE,oBAAoB;qCACzC,OAAO,YAAY,EAAE,sBAAsB;4BAC3C,OAAO,YAAY,EAAE,aAAa;2BAClC,OAAO,YAAY,EAAE,YAAY;8BACjC,OAAO,YAAY,EAAE,eAAe;yBACpC,OAAO,YAAY,EAAE,UAAU;0BAC/B,OAAO,YAAY,EAAE,WAAW;yBAChC,OAAO,YAAY,EAAE,UAAU;+BAC/B,OAAO,YAAY,EAAE,gBAAgB;2BACrC,OAAO,YAAY,EAAE,YAAY;2BACjC,OAAO,YAAY,EAAE,YAAY;yBACjC,OAAO,YAAY,EAAE,UAAU;8BAC/B,OAAO,YAAY,EAAE,eAAe;6BACpC,OAAO,YAAY,EAAE,cAAc;iCACnC,OAAO,YAAY,EAAE,kBAAkB;6BACvC,OAAO,YAAY,EAAE,cAAc;kCACnC,OAAO,YAAY,EAAE,mBAAmB;uBACxC,OAAO,YAAY,EAAE,QAAQ;+BAC7B,OAAO,YAAY,EAAE,gBAAgB;8BACrC,OAAO,YAAY,EAAE,eAAe;uBACpC,OAAO,YAAY,EAAE,QAAQ;wBA7BlB,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"AAmHA;;;;;;;GAOG;AACH,4CAPW,OAAO,aAAa,EAAE,kBAAkB,EAAE,cAC1C,OAAO,yBAAyB,EAAE,UAAU,QAC5C,GAAG,WACH,OAAO,YAAY,EAAE,qBAAqB,WAC1C,OAAO,oBAAoB,EAAE,OAAO,GAClC,GAAG,CAOf;AAuBD;;;;;;;;;;;;;;;;;GAiBG;AACH,yCAhBW,OAAO,YAAY,EAAE,sBAAsB,iBAC3C,OAAO,YAAY,EAAE,qBAAqB,kBAC1C,OAAO,aAAa,EAAE,cAAc,OACpC,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,MAAM,kBACN,MAAM,GAAG,IAAI,YACb,OAAO,aAAa,EAAE,YAAY,mBAClC,OAAO,yBAAyB,EAAE,KAAK,GAAG,IAAI,iBAC9C,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,mBACP,OAAO,YAAY,EAAE,eAAe,4DAElC,OAAO,YAAY,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"AAmHA;;;;;;;GAOG;AACH,4CAPW,OAAO,aAAa,EAAE,kBAAkB,EAAE,cAC1C,OAAO,yBAAyB,EAAE,UAAU,QAC5C,GAAG,WACH,OAAO,YAAY,EAAE,qBAAqB,WAC1C,OAAO,oBAAoB,EAAE,OAAO,GAClC,GAAG,CAOf;AAuBD;;;;;;;;;;;;;;;;;GAiBG;AACH,yCAhBW,OAAO,YAAY,EAAE,sBAAsB,iBAC3C,OAAO,YAAY,EAAE,qBAAqB,kBAC1C,OAAO,aAAa,EAAE,cAAc,OACpC,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,MAAM,kBACN,MAAM,GAAG,IAAI,YACb,OAAO,aAAa,EAAE,YAAY,mBAClC,OAAO,yBAAyB,EAAE,KAAK,GAAG,IAAI,iBAC9C,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,mBACP,OAAO,YAAY,EAAE,eAAe,4DAElC,OAAO,YAAY,EAAE,SAAS,CA4I1C;AAED,uFAAuF;AACvF,yCADmB,GAAG,QAAQ,OAAO,YAAY,EAAE,SAAS,QAAQ,OAAO,KAAK,GAAG,CAQlF"}
|
package/types/state/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ErrorObject } from 'ajv';
|
|
2
|
-
import { type CompObject, type Cols, type StateNodeOptions, type TextField, type Textarea, type NumberField, type Slider, type Checkbox, type Switch, type DatePicker, type DateTimePicker, type TimePicker, type ColorPicker, type Section, type OneOfSelect, type Select, type Tabs, type VerticalTabs, type ExpansionPanels, type List } from '@json-layout/vocabulary';
|
|
2
|
+
import { type CompObject, type Cols, type StateNodeOptions, type TextField, type Textarea, type NumberField, type Slider, type Checkbox, type Switch, type DatePicker, type DateTimePicker, type TimePicker, type ColorPicker, type Section, type OneOfSelect, type Select, type Autocomplete, type Tabs, type VerticalTabs, type ExpansionPanels, type List, type Combobox } from '@json-layout/vocabulary';
|
|
3
3
|
import { type SkeletonTree, type SkeletonNode, type StatefulLayout } from '../index.js';
|
|
4
4
|
import { type LocaleMessages } from '../i18n/types.js';
|
|
5
5
|
export interface StateNode {
|
|
@@ -98,6 +98,10 @@ export type SelectNode = Omit<StateNode, 'children'> & {
|
|
|
98
98
|
layout: Select;
|
|
99
99
|
data: any;
|
|
100
100
|
};
|
|
101
|
+
export type AutocompleteNode = Omit<StateNode, 'children'> & {
|
|
102
|
+
layout: Autocomplete;
|
|
103
|
+
data: any;
|
|
104
|
+
};
|
|
101
105
|
export type TabsNode = StateNode & {
|
|
102
106
|
layout: Tabs;
|
|
103
107
|
children: StateNode[];
|
|
@@ -116,4 +120,8 @@ export type ListNode = StateNode & {
|
|
|
116
120
|
children: StateNode[];
|
|
117
121
|
childrenTrees: SkeletonTree[];
|
|
118
122
|
};
|
|
123
|
+
export type ComboboxNode = Omit<StateNode, 'children'> & {
|
|
124
|
+
layout: Combobox;
|
|
125
|
+
data: any[];
|
|
126
|
+
};
|
|
119
127
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"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"}
|