vultus-core 0.5.2 → 0.5.4
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/README.md +176 -4
- package/dist/FieldContext.d.ts +37 -1
- package/dist/FieldContext.d.ts.map +1 -1
- package/dist/FieldContext.js +68 -11
- package/dist/FieldContext.js.map +1 -1
- package/dist/field.d.ts +12 -1
- package/dist/field.d.ts.map +1 -1
- package/dist/field.js +6 -1
- package/dist/field.js.map +1 -1
- package/dist/fieldGroupValues.d.ts +63 -0
- package/dist/fieldGroupValues.d.ts.map +1 -0
- package/dist/fieldGroupValues.js +119 -0
- package/dist/fieldGroupValues.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/kindHooks.d.ts +23 -0
- package/dist/kindHooks.d.ts.map +1 -0
- package/dist/kindHooks.js +38 -0
- package/dist/kindHooks.js.map +1 -0
- package/dist/kinds.d.ts +19 -14
- package/dist/kinds.d.ts.map +1 -1
- package/dist/kinds.js +40 -14
- package/dist/kinds.js.map +1 -1
- package/dist/tree.d.ts +17 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +27 -0
- package/dist/tree.js.map +1 -1
- package/dist/useArg.d.ts +6 -0
- package/dist/useArg.d.ts.map +1 -1
- package/dist/useArg.js +6 -2
- package/dist/useArg.js.map +1 -1
- package/dist/useFieldGroup.d.ts +80 -0
- package/dist/useFieldGroup.d.ts.map +1 -0
- package/dist/useFieldGroup.js +266 -0
- package/dist/useFieldGroup.js.map +1 -0
- package/dist/useOneOfTreeField.d.ts +79 -0
- package/dist/useOneOfTreeField.d.ts.map +1 -0
- package/dist/useOneOfTreeField.js +117 -0
- package/dist/useOneOfTreeField.js.map +1 -0
- package/dist/useStoredField.d.ts +9 -0
- package/dist/useStoredField.d.ts.map +1 -1
- package/dist/useStoredField.js +7 -5
- package/dist/useStoredField.js.map +1 -1
- package/package.json +1 -1
- package/src/FieldContext.tsx +73 -11
- package/src/field.ts +25 -5
- package/src/fieldGroupValues.ts +169 -0
- package/src/index.ts +7 -1
- package/src/kindHooks.ts +52 -0
- package/src/kinds.ts +38 -14
- package/src/tree.ts +34 -0
- package/src/useArg.ts +6 -2
- package/src/useFieldGroup.ts +346 -0
- package/src/useOneOfTreeField.ts +182 -0
- package/src/useStoredField.ts +10 -6
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { extendFieldContext, guardKeys, MissingKeyError } from './FieldContext.js';
|
|
2
|
+
import { initialValueOf, sanitizeStored } from './kinds.js';
|
|
3
|
+
const WHERE = 'Field group';
|
|
4
|
+
const INITIAL_VALUE_READS_VALUES = "initialValue cannot read other fields' values";
|
|
5
|
+
const NOT_IN_A_GROUP = 'a mixed-boolean field shows an aggregate of other data, not a value of its own, so it cannot be in a field group';
|
|
6
|
+
function silently(_message) { }
|
|
7
|
+
/**
|
|
8
|
+
* A definition as its values are computed from it. Its `initialValue` function receives
|
|
9
|
+
* `initialCtx`, whose `values` throws: a default cannot depend on other fields' values. A
|
|
10
|
+
* number's or range's display options (`step`, `unit`, `format`) are left out, because resolving
|
|
11
|
+
* its bounds (resolveNumeric) resolves them too, and an option that never affects the value
|
|
12
|
+
* (`unit: (ctx) => ctx.values.copies === 1 ? ...`) must not count as a dependency, nor form a
|
|
13
|
+
* cycle.
|
|
14
|
+
*/
|
|
15
|
+
function forComputingValues(definition, initialCtx) {
|
|
16
|
+
const computing = { ...definition };
|
|
17
|
+
const { initialValue } = definition;
|
|
18
|
+
if (typeof initialValue === 'function') {
|
|
19
|
+
Object.assign(computing, { initialValue: () => initialValue(initialCtx) });
|
|
20
|
+
}
|
|
21
|
+
if (computing.kind === 'numeric' || computing.kind === 'range') {
|
|
22
|
+
delete computing.step;
|
|
23
|
+
delete computing.unit;
|
|
24
|
+
delete computing.format;
|
|
25
|
+
}
|
|
26
|
+
return computing;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The values of a field group for one render, computed from its definitions and kept values.
|
|
30
|
+
*
|
|
31
|
+
* Every option function of the definitions receives `ctx`: the app's field context and
|
|
32
|
+
* `values`, the fields' shown values by id. A field's value is computed when an option (or the
|
|
33
|
+
* caller) first reads it, and kept for the rest of this snapshot; a new render makes a new one.
|
|
34
|
+
* The shown value is the kept value (else the current default) checked against the field's
|
|
35
|
+
* options as they are now, as a store's value is (sanitizeStored); one that no longer fits
|
|
36
|
+
* shows the fallback, which the other fields see too.
|
|
37
|
+
*
|
|
38
|
+
* Throws here for two definitions with the same id and for a mixed-boolean definition (naming
|
|
39
|
+
* the field), and for an app context that already has `values`. Throws when read, naming the
|
|
40
|
+
* field and the option, for an option reading an id not in the group and for `initialValue`
|
|
41
|
+
* reading `values`. Fields whose values depend on each other throw when read, naming the cycle
|
|
42
|
+
* (`Fields 'a' -> 'b' -> 'a' depend on each other's values`): a field's value and default are in
|
|
43
|
+
* progress while its options run, and reading one in progress is a cycle. Options that never
|
|
44
|
+
* affect a value (`visible`, `label`, `unit`, ...) are not run here, so they cannot form one.
|
|
45
|
+
*/
|
|
46
|
+
export function createGroupValues({ definitions, appCtx, kept, warn }) {
|
|
47
|
+
const ids = definitions.map((definition) => definition.id);
|
|
48
|
+
for (const definition of definitions) {
|
|
49
|
+
if (ids.indexOf(definition.id) !== ids.lastIndexOf(definition.id)) {
|
|
50
|
+
throw new Error(`Field '${definition.id}': another field in the group has the same id`);
|
|
51
|
+
}
|
|
52
|
+
if (definition.kind === 'mixed-boolean')
|
|
53
|
+
throw new Error(`Field '${definition.id}': ${NOT_IN_A_GROUP}`);
|
|
54
|
+
}
|
|
55
|
+
const noField = (id) => `no field '${id}' in the group (fields: ${ids.join(', ')})`;
|
|
56
|
+
const getters = {};
|
|
57
|
+
for (const id of ids)
|
|
58
|
+
Object.defineProperty(getters, id, { get: () => valueOf(id), enumerable: true });
|
|
59
|
+
// Own keys only: `values.toString` is a typo for an id, not Object's member. `constructor`
|
|
60
|
+
// reads as usual, as the probes do, because printers (vitest's) name an object by it.
|
|
61
|
+
const values = guardKeys(getters, noField, (target, key) => key === 'constructor' || Object.hasOwn(target, key));
|
|
62
|
+
const ctx = extendFieldContext(appCtx, { values }, WHERE);
|
|
63
|
+
// `values` not enumerable: a missing key's message lists the keys provided, and this one only throws.
|
|
64
|
+
const initialCtx = extendFieldContext(appCtx, Object.defineProperty({}, 'values', {
|
|
65
|
+
get() {
|
|
66
|
+
throw new MissingKeyError(INITIAL_VALUE_READS_VALUES);
|
|
67
|
+
},
|
|
68
|
+
}), WHERE);
|
|
69
|
+
const computingDefinitions = new Map(definitions.map((definition) => [definition.id, forComputingValues(definition, initialCtx)]));
|
|
70
|
+
const shown = new Map();
|
|
71
|
+
const defaults = new Map();
|
|
72
|
+
/** The fields whose value or default is being computed, outermost first. */
|
|
73
|
+
const inProgress = [];
|
|
74
|
+
function definitionOf(id) {
|
|
75
|
+
const definition = computingDefinitions.get(id);
|
|
76
|
+
if (definition === undefined)
|
|
77
|
+
throw new MissingKeyError(noField(id));
|
|
78
|
+
return definition;
|
|
79
|
+
}
|
|
80
|
+
/** Runs `compute` with `id` in progress; reading `id` again before it returns is a cycle. */
|
|
81
|
+
function computing(id, compute) {
|
|
82
|
+
const at = inProgress.indexOf(id);
|
|
83
|
+
if (at !== -1) {
|
|
84
|
+
const cycle = [...inProgress.slice(at), id].map((each) => `'${each}'`).join(' -> ');
|
|
85
|
+
throw new Error(`Fields ${cycle} depend on each other's values`);
|
|
86
|
+
}
|
|
87
|
+
inProgress.push(id);
|
|
88
|
+
try {
|
|
89
|
+
return compute();
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
inProgress.pop();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** The default, computed as part of `id`'s own value or default (already in progress). */
|
|
96
|
+
function ownDefault(id) {
|
|
97
|
+
if (!defaults.has(id))
|
|
98
|
+
defaults.set(id, initialValueOf(definitionOf(id), ctx));
|
|
99
|
+
return defaults.get(id);
|
|
100
|
+
}
|
|
101
|
+
function defaultOf(id) {
|
|
102
|
+
definitionOf(id);
|
|
103
|
+
return defaults.has(id) ? defaults.get(id) : computing(id, () => ownDefault(id));
|
|
104
|
+
}
|
|
105
|
+
function valueOf(id) {
|
|
106
|
+
const definition = definitionOf(id);
|
|
107
|
+
if (!shown.has(id)) {
|
|
108
|
+
shown.set(id, computing(id, () => {
|
|
109
|
+
const value = kept(id);
|
|
110
|
+
return value === undefined
|
|
111
|
+
? sanitizeStored(definition, ownDefault(id), ctx, silently)
|
|
112
|
+
: sanitizeStored(definition, value, ctx, (message) => warn(id, message));
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
return shown.get(id);
|
|
116
|
+
}
|
|
117
|
+
return { ctx, valueOf, defaultOf, values };
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=fieldGroupValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldGroupValues.js","sourceRoot":"","sources":["../src/fieldGroupValues.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,8 +17,9 @@ export { useManyOfField, manyOfInitialValue, type ManyOfFieldControls, type Many
|
|
|
17
17
|
export { clamp, resolveNumeric, type NumericBounds, type ResolvedNumeric } from './numeric.js';
|
|
18
18
|
export { useNumericField, numericInitialValue, type NumericFieldControls, type NumericFieldOptions, type NumericOwnOptions, } from './useNumericField.js';
|
|
19
19
|
export { useRangeField, rangeInitialValue, type NumberRange, type RangeFieldControls, type RangeFieldOptions, type RangeOwnOptions, } from './useRangeField.js';
|
|
20
|
-
export { normalizeTreeValue, coveredNodes, toggleTreeValue, expandedTreeKeys, filterTree, type TreeNode, type TreeNodeControls, type TreeSelection, type TreeExpand, } from './tree.js';
|
|
20
|
+
export { normalizeTreeValue, coveredNodes, toggleTreeValue, expandedTreeKeys, filterTree, canChooseNode, choosableValues, treePath, type TreeNode, type TreeNodeControls, type TreeSelection, type TreeExpand, type TreeChoose, } from './tree.js';
|
|
21
21
|
export { useManyOfTreeField, manyOfTreeInitialValue, type ManyOfTreeFieldControls, type ManyOfTreeFieldOptions, type ManyOfTreeOwnOptions, } from './useManyOfTreeField.js';
|
|
22
|
+
export { useOneOfTreeField, oneOfTreeInitialValue, type OneOfTreeFieldControls, type OneOfTreeFieldOptions, type OneOfTreeOwnOptions, type OneOfTreeNodeControls, } from './useOneOfTreeField.js';
|
|
22
23
|
export { useTextField, textInitialValue, type TextFieldControls, type TextFieldOptions, type TextOwnOptions, } from './useTextField.js';
|
|
23
24
|
export { booleanType, stringType, stringSetType, numberType, rangeType, type ValueType, } from './valueTypes.js';
|
|
24
25
|
export { initialValueOf, valueTypeOf, sanitizeStored, type FieldDefinition } from './kinds.js';
|
|
@@ -27,6 +28,7 @@ export { localStorageStore } from './localStorageStore.js';
|
|
|
27
28
|
export { ArgStoreProvider, useArgStore } from './ArgStoreContext.js';
|
|
28
29
|
export { useArg, useArgWriter, setArg, resetArg, type ArgDefinition, type ArgControls, type ArgChange, } from './useArg.js';
|
|
29
30
|
export { argOf, useStoredField, useStoredFields, type StoredField, type StoredFields, } from './useStoredField.js';
|
|
31
|
+
export { useFieldGroup, type FieldGroup } from './useFieldGroup.js';
|
|
30
32
|
export { InternalLinkContext, useInternalLink, type InternalLinkComponent } from './LinkContext.js';
|
|
31
33
|
export { MessageSinkContext, useMessageSink, type MessageSink } from './MessageSink.js';
|
|
32
34
|
export { VultusComponentsContext, useVultusComponents, SpinnerScope, useSpinnerKey, type VultusComponents, type SpinnerProps, type SpinnerComponent, } from './Components.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAC3F,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,GACjH,MAAM,YAAY,CAAC;AACpB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,QAAQ,GAC3F,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAClE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EACxH,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,GAC/C,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EACL,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,EACvD,KAAK,SAAS,EAAE,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,GACxE,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,GACxG,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EAAE,kBAAkB,EAClC,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,GACpG,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EACL,eAAe,EAAE,mBAAmB,EACpC,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,GAC5E,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EAAE,iBAAiB,EAChC,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,GACxF,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAC/E,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,8 +16,9 @@ export { useManyOfField, manyOfInitialValue, } from './useManyOfField.js';
|
|
|
16
16
|
export { clamp, resolveNumeric } from './numeric.js';
|
|
17
17
|
export { useNumericField, numericInitialValue, } from './useNumericField.js';
|
|
18
18
|
export { useRangeField, rangeInitialValue, } from './useRangeField.js';
|
|
19
|
-
export { normalizeTreeValue, coveredNodes, toggleTreeValue, expandedTreeKeys, filterTree, } from './tree.js';
|
|
19
|
+
export { normalizeTreeValue, coveredNodes, toggleTreeValue, expandedTreeKeys, filterTree, canChooseNode, choosableValues, treePath, } from './tree.js';
|
|
20
20
|
export { useManyOfTreeField, manyOfTreeInitialValue, } from './useManyOfTreeField.js';
|
|
21
|
+
export { useOneOfTreeField, oneOfTreeInitialValue, } from './useOneOfTreeField.js';
|
|
21
22
|
export { useTextField, textInitialValue, } from './useTextField.js';
|
|
22
23
|
export { booleanType, stringType, stringSetType, numberType, rangeType, } from './valueTypes.js';
|
|
23
24
|
export { initialValueOf, valueTypeOf, sanitizeStored } from './kinds.js';
|
|
@@ -26,6 +27,7 @@ export { localStorageStore } from './localStorageStore.js';
|
|
|
26
27
|
export { ArgStoreProvider, useArgStore } from './ArgStoreContext.js';
|
|
27
28
|
export { useArg, useArgWriter, setArg, resetArg, } from './useArg.js';
|
|
28
29
|
export { argOf, useStoredField, useStoredFields, } from './useStoredField.js';
|
|
30
|
+
export { useFieldGroup } from './useFieldGroup.js';
|
|
29
31
|
export { InternalLinkContext, useInternalLink } from './LinkContext.js';
|
|
30
32
|
export { MessageSinkContext, useMessageSink } from './MessageSink.js';
|
|
31
33
|
export { VultusComponentsContext, useVultusComponents, SpinnerScope, useSpinnerKey, } from './Components.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,GAC5E,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,GAGnE,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAA8C,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAiD,MAAM,mBAAmB,CAAC;AAClH,OAAO,EACL,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,GAExD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EAAE,iBAAiB,GACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EAAE,kBAAkB,GAEnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,cAAc,EAA4C,MAAM,cAAc,CAAC;AAC/F,OAAO,EACL,eAAe,EAAE,mBAAmB,GAErC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EAAE,iBAAiB,GAEjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,GAC5E,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,GAGnE,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAA8C,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAiD,MAAM,mBAAmB,CAAC;AAClH,OAAO,EACL,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,GAExD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EAAE,iBAAiB,GACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EAAE,kBAAkB,GAEnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,cAAc,EAA4C,MAAM,cAAc,CAAC;AAC/F,OAAO,EACL,eAAe,EAAE,mBAAmB,GAErC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EAAE,iBAAiB,GAEjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAC/E,aAAa,EAAE,eAAe,EAAE,QAAQ,GAEzC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAAE,sBAAsB,GAE3C,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EAAE,qBAAqB,GAEzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,EAAE,gBAAgB,GAE/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,GAC9D,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAoD,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,GAEvC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EAAE,cAAc,EAAE,eAAe,GACvC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAA8B,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,kBAAkB,CAAC;AACxF,OAAO,EACL,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,GAE1E,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FieldControls } from './field.js';
|
|
2
|
+
import type { FieldDefinition } from './kinds.js';
|
|
3
|
+
/**
|
|
4
|
+
* A definition in its outside form, as its kind's hook takes it: without `initialValue` (whoever
|
|
5
|
+
* keeps the value keeps its default too), with the value, its writer, and the link a value
|
|
6
|
+
* amounts to where whoever keeps it has one.
|
|
7
|
+
*/
|
|
8
|
+
export type KindFieldOptions = OutsideForm<FieldDefinition>;
|
|
9
|
+
/** The outside form of a definition, member by member for a union (the conditional type distributes). */
|
|
10
|
+
type OutsideForm<D> = D extends FieldDefinition ? Omit<D, 'initialValue'> & {
|
|
11
|
+
value: unknown;
|
|
12
|
+
onChange(value: any): void;
|
|
13
|
+
hrefFor?(value: any): string | undefined;
|
|
14
|
+
} : never;
|
|
15
|
+
/**
|
|
16
|
+
* Runs the hook of `definition`'s kind with `options` and returns its controls, exactly as that
|
|
17
|
+
* hook returns them. The hook called depends on the kind, so a caller running several fields
|
|
18
|
+
* (useFieldGroup) keeps each field's kind the same across renders. A kind that is none of
|
|
19
|
+
* FieldKind's (plain data can carry anything) throws, naming the field.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useKindField(definition: FieldDefinition, options: KindFieldOptions): FieldControls<any, any>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=kindHooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kindHooks.d.ts","sourceRoot":"","sources":["../src/kindHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAWlD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AAE5D,yGAAyG;AACzG,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,eAAe,GAC3C,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAClH,KAAK,CAAC;AAkBV;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAK5G"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useBoolField } from './useBoolField.js';
|
|
2
|
+
import { useManyOfField } from './useManyOfField.js';
|
|
3
|
+
import { useManyOfTreeField } from './useManyOfTreeField.js';
|
|
4
|
+
import { useMixedBoolField } from './useMixedBoolField.js';
|
|
5
|
+
import { useNumericField } from './useNumericField.js';
|
|
6
|
+
import { useOneOfField } from './useOneOfField.js';
|
|
7
|
+
import { useOneOfTreeField } from './useOneOfTreeField.js';
|
|
8
|
+
import { useRangeField } from './useRangeField.js';
|
|
9
|
+
import { useTextField } from './useTextField.js';
|
|
10
|
+
/**
|
|
11
|
+
* Each kind's hook. Its options are checked against the definition in kinds.ts
|
|
12
|
+
* (DefinitionsFitTheirHooks); the mapped type makes leaving a kind out a compile error.
|
|
13
|
+
*/
|
|
14
|
+
const KIND_HOOKS = {
|
|
15
|
+
boolean: useBoolField,
|
|
16
|
+
'mixed-boolean': useMixedBoolField,
|
|
17
|
+
oneOf: useOneOfField,
|
|
18
|
+
manyOf: useManyOfField,
|
|
19
|
+
numeric: useNumericField,
|
|
20
|
+
range: useRangeField,
|
|
21
|
+
manyOfTree: useManyOfTreeField,
|
|
22
|
+
oneOfTree: useOneOfTreeField,
|
|
23
|
+
text: useTextField,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Runs the hook of `definition`'s kind with `options` and returns its controls, exactly as that
|
|
27
|
+
* hook returns them. The hook called depends on the kind, so a caller running several fields
|
|
28
|
+
* (useFieldGroup) keeps each field's kind the same across renders. A kind that is none of
|
|
29
|
+
* FieldKind's (plain data can carry anything) throws, naming the field.
|
|
30
|
+
*/
|
|
31
|
+
export function useKindField(definition, options) {
|
|
32
|
+
const { id, kind } = definition;
|
|
33
|
+
if (!Object.hasOwn(KIND_HOOKS, kind))
|
|
34
|
+
throw new Error(`Field '${id}': unknown kind '${String(kind)}'`);
|
|
35
|
+
const useHook = KIND_HOOKS[kind];
|
|
36
|
+
return useHook(options);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=kindHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kindHooks.js","sourceRoot":"","sources":["../src/kindHooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAcjD;;;GAGG;AACH,MAAM,UAAU,GAAoE;IAClF,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,iBAAiB;IAClC,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;IACpB,UAAU,EAAE,kBAAkB;IAC9B,SAAS,EAAE,iBAAiB;IAC5B,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,UAA2B,EAAE,OAAyB;IACjF,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/kinds.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { type ManyOfOwnOptions } from './useManyOfField.js';
|
|
|
5
5
|
import { type MixedBool } from './useMixedBoolField.js';
|
|
6
6
|
import { type NumericOwnOptions } from './useNumericField.js';
|
|
7
7
|
import { type OneOfOwnOptions } from './useOneOfField.js';
|
|
8
|
+
import { type OneOfTreeOwnOptions } from './useOneOfTreeField.js';
|
|
8
9
|
import { type NumberRange, type RangeOwnOptions } from './useRangeField.js';
|
|
9
10
|
import { type TextOwnOptions } from './useTextField.js';
|
|
10
11
|
import { type ManyOfTreeOwnOptions } from './useManyOfTreeField.js';
|
|
@@ -24,14 +25,15 @@ type Definition<K extends FieldKind, V, Own, Ctx> = {
|
|
|
24
25
|
* by `kind`, a definition is its kind's hook options as they are: `useOneOfField(definition)`.
|
|
25
26
|
* Its functions receive the field context `Ctx` (see FieldContextProvider).
|
|
26
27
|
*/
|
|
27
|
-
export type FieldDefinition<Ctx = any> = Definition<'boolean', boolean, {}, Ctx> | Definition<'mixed-boolean', MixedBool, {}, Ctx> | Definition<'oneOf', string, OneOfOwnOptions<string, Ctx>, Ctx> | Definition<'manyOf', string[], ManyOfOwnOptions<string, Ctx>, Ctx> | Definition<'numeric', number, NumericOwnOptions<Ctx>, Ctx> | Definition<'range', NumberRange, RangeOwnOptions<Ctx>, Ctx> | Definition<'manyOfTree', string[], ManyOfTreeOwnOptions<string, Ctx>, Ctx> | Definition<'text', string, TextOwnOptions, Ctx>;
|
|
28
|
+
export type FieldDefinition<Ctx = any> = Definition<'boolean', boolean, {}, Ctx> | Definition<'mixed-boolean', MixedBool, {}, Ctx> | Definition<'oneOf', string, OneOfOwnOptions<string, Ctx>, Ctx> | Definition<'manyOf', string[], ManyOfOwnOptions<string, Ctx>, Ctx> | Definition<'numeric', number, NumericOwnOptions<Ctx>, Ctx> | Definition<'range', NumberRange, RangeOwnOptions<Ctx>, Ctx> | Definition<'manyOfTree', string[], ManyOfTreeOwnOptions<string, Ctx>, Ctx> | Definition<'oneOfTree', string, OneOfTreeOwnOptions<string, Ctx>, Ctx> | Definition<'text', string, TextOwnOptions, Ctx>;
|
|
28
29
|
/**
|
|
29
30
|
* A definition's default: `initialValue` resolved with the field context, else its kind's
|
|
30
31
|
* implicit initial value (false; the first enabled choice; the empty list; `min`, or 0, clamped
|
|
31
|
-
* into the bounds; `[min, max]`; the empty string). A tree's comes normalized under its
|
|
32
|
+
* into the bounds; `[min, max]`; the empty string). A many-of tree's comes normalized under its
|
|
32
33
|
* selection, as the hook shows it, so a value equal to what the field shows by default is equal
|
|
33
|
-
* to the default too
|
|
34
|
-
*
|
|
34
|
+
* to the default too; a one-of tree's is `''` when `optional`, else the first node it can choose
|
|
35
|
+
* in pre-order, else `''` (none can be chosen). It is what a store falls back to, what a reset
|
|
36
|
+
* restores, and what "is it set?" compares against; the kind's hook starts at the same value.
|
|
35
37
|
*/
|
|
36
38
|
export declare function initialValueOf(definition: FieldDefinition, ctx: FieldCtx): unknown;
|
|
37
39
|
/** How a kind's value is kept in a store. A mixed-boolean field shows an aggregate of other data, so it has none and throws. */
|
|
@@ -39,16 +41,19 @@ export declare function valueTypeOf(kind: FieldKind): ValueType<any>;
|
|
|
39
41
|
/**
|
|
40
42
|
* A stored value (already parsed by the kind's value type) made fit for the definition as it is
|
|
41
43
|
* now: choices, nodes and bounds follow the data, and an old URL may not. A one-of value that is
|
|
42
|
-
* not a choice becomes the initial value; many-of
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
44
|
+
* not a choice becomes the initial value; many-of values that are not choices or nodes are
|
|
45
|
+
* dropped. A one-of tree value is replaced by the initial value too, when it names no node, when
|
|
46
|
+
* the node it names cannot be chosen (a folder, or one a context change disabled), or when it is
|
|
47
|
+
* `''` and the field is not optional. Numbers and ranges are clamped into the bounds, then
|
|
48
|
+
* rounded when the field is `integer` (so a stored `2.5` reads `3`; a whole number inside the
|
|
49
|
+
* bounds, see `fit`), with one warning for whichever of the two actually changed the value:
|
|
50
|
+
* "outside its bounds" when clamping did (whether or not rounding also did), "not a whole
|
|
51
|
+
* number" ("has ends that are not whole numbers" for a range) when only rounding did. Each such
|
|
52
|
+
* change warns, naming the field: the value came from outside, so it is not an error. Reordering
|
|
53
|
+
* is silent: lists come back in choice order or normalized under the tree's selection (a store
|
|
54
|
+
* keeps them sorted, so a warning would come on every read), and a range's ends in order. The
|
|
55
|
+
* warnings go to `warn`, console.warn unless a caller that only summarizes (useStoredFields)
|
|
56
|
+
* silences them.
|
|
52
57
|
*/
|
|
53
58
|
export declare function sanitizeStored(definition: FieldDefinition, value: unknown, ctx: FieldCtx, warn?: (message: string) => void): unknown;
|
|
54
59
|
export {};
|
package/dist/kinds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../src/kinds.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAsB,KAAK,gBAAgB,EAAuB,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAyB,KAAK,SAAS,EAA0B,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAuB,KAAK,iBAAiB,EAAwB,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAqB,KAAK,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAoB,KAAK,cAAc,EAAqB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAA0B,KAAK,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAiE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhH;;;;GAIG;AACH,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAC9C;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;CAAE,GAAG,GAAG,CAAC;AAEtF;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,GAAG,GAAG,GAAG,IACjC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,GAC/C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAC9D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAClE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAC1D,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAC3D,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAC1E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../src/kinds.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAsB,KAAK,gBAAgB,EAAuB,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAyB,KAAK,SAAS,EAA0B,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAuB,KAAK,iBAAiB,EAAwB,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAqB,KAAK,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAyB,KAAK,mBAAmB,EAA0B,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAoB,KAAK,cAAc,EAAqB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAA0B,KAAK,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAiE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhH;;;;GAIG;AACH,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAC9C;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;CAAE,GAAG,GAAG,CAAC;AAEtF;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,GAAG,GAAG,GAAG,IACjC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,GAC/C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAC9D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAClE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAC1D,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAC3D,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAC1E,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GACtE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;AAiDpD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAelF;AAED,gIAAgI;AAChI,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAa3D;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,QAAQ,EACb,IAAI,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAyC,GACnE,OAAO,CAwET"}
|
package/dist/kinds.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { resolveChoice } from './choices.js';
|
|
2
2
|
import { clamp, fit, resolveNumeric } from './numeric.js';
|
|
3
3
|
import { resolveIn } from './resolve.js';
|
|
4
|
-
import { normalizeTreeValue } from './tree.js';
|
|
4
|
+
import { choosableValues, normalizeTreeValue } from './tree.js';
|
|
5
5
|
import { boolInitialValue } from './useBoolField.js';
|
|
6
6
|
import { manyOfInitialValue } from './useManyOfField.js';
|
|
7
7
|
import { mixedBoolInitialValue } from './useMixedBoolField.js';
|
|
8
8
|
import { numericInitialValue } from './useNumericField.js';
|
|
9
9
|
import { oneOfInitialValue } from './useOneOfField.js';
|
|
10
|
+
import { oneOfTreeInitialValue } from './useOneOfTreeField.js';
|
|
10
11
|
import { rangeInitialValue } from './useRangeField.js';
|
|
11
12
|
import { textInitialValue } from './useTextField.js';
|
|
12
13
|
import { manyOfTreeInitialValue } from './useManyOfTreeField.js';
|
|
@@ -38,10 +39,11 @@ function nodesOf(definition, ctx) {
|
|
|
38
39
|
/**
|
|
39
40
|
* A definition's default: `initialValue` resolved with the field context, else its kind's
|
|
40
41
|
* implicit initial value (false; the first enabled choice; the empty list; `min`, or 0, clamped
|
|
41
|
-
* into the bounds; `[min, max]`; the empty string). A tree's comes normalized under its
|
|
42
|
+
* into the bounds; `[min, max]`; the empty string). A many-of tree's comes normalized under its
|
|
42
43
|
* selection, as the hook shows it, so a value equal to what the field shows by default is equal
|
|
43
|
-
* to the default too
|
|
44
|
-
*
|
|
44
|
+
* to the default too; a one-of tree's is `''` when `optional`, else the first node it can choose
|
|
45
|
+
* in pre-order, else `''` (none can be chosen). It is what a store falls back to, what a reset
|
|
46
|
+
* restores, and what "is it set?" compares against; the kind's hook starts at the same value.
|
|
45
47
|
*/
|
|
46
48
|
export function initialValueOf(definition, ctx) {
|
|
47
49
|
const { id } = definition;
|
|
@@ -54,6 +56,7 @@ export function initialValueOf(definition, ctx) {
|
|
|
54
56
|
case 'range': return rangeInitialValue(definition, ctx, id);
|
|
55
57
|
case 'manyOfTree':
|
|
56
58
|
return normalizeTreeValue(nodesOf(definition, ctx), manyOfTreeInitialValue(definition, ctx, id), definition.selection ?? 'topmost');
|
|
59
|
+
case 'oneOfTree': return oneOfTreeInitialValue(definition, ctx, id, nodesOf(definition, ctx));
|
|
57
60
|
case 'text': return textInitialValue(definition, ctx, id);
|
|
58
61
|
default: return unknownKind(definition);
|
|
59
62
|
}
|
|
@@ -63,6 +66,7 @@ export function valueTypeOf(kind) {
|
|
|
63
66
|
switch (kind) {
|
|
64
67
|
case 'boolean': return booleanType;
|
|
65
68
|
case 'oneOf':
|
|
69
|
+
case 'oneOfTree':
|
|
66
70
|
case 'text': return stringType;
|
|
67
71
|
case 'manyOf':
|
|
68
72
|
case 'manyOfTree': return stringSetType;
|
|
@@ -81,16 +85,19 @@ function warnDropped(id, among, dropped, warn) {
|
|
|
81
85
|
/**
|
|
82
86
|
* A stored value (already parsed by the kind's value type) made fit for the definition as it is
|
|
83
87
|
* now: choices, nodes and bounds follow the data, and an old URL may not. A one-of value that is
|
|
84
|
-
* not a choice becomes the initial value; many-of
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
88
|
+
* not a choice becomes the initial value; many-of values that are not choices or nodes are
|
|
89
|
+
* dropped. A one-of tree value is replaced by the initial value too, when it names no node, when
|
|
90
|
+
* the node it names cannot be chosen (a folder, or one a context change disabled), or when it is
|
|
91
|
+
* `''` and the field is not optional. Numbers and ranges are clamped into the bounds, then
|
|
92
|
+
* rounded when the field is `integer` (so a stored `2.5` reads `3`; a whole number inside the
|
|
93
|
+
* bounds, see `fit`), with one warning for whichever of the two actually changed the value:
|
|
94
|
+
* "outside its bounds" when clamping did (whether or not rounding also did), "not a whole
|
|
95
|
+
* number" ("has ends that are not whole numbers" for a range) when only rounding did. Each such
|
|
96
|
+
* change warns, naming the field: the value came from outside, so it is not an error. Reordering
|
|
97
|
+
* is silent: lists come back in choice order or normalized under the tree's selection (a store
|
|
98
|
+
* keeps them sorted, so a warning would come on every read), and a range's ends in order. The
|
|
99
|
+
* warnings go to `warn`, console.warn unless a caller that only summarizes (useStoredFields)
|
|
100
|
+
* silences them.
|
|
94
101
|
*/
|
|
95
102
|
export function sanitizeStored(definition, value, ctx, warn = (message) => console.warn(message)) {
|
|
96
103
|
const { id } = definition;
|
|
@@ -122,6 +129,25 @@ export function sanitizeStored(definition, value, ctx, warn = (message) => conso
|
|
|
122
129
|
warnDropped(id, 'nodes', stored.filter((v) => !known.has(v)), warn);
|
|
123
130
|
return normalizeTreeValue(nodes, stored.filter((v) => known.has(v)), definition.selection ?? 'topmost');
|
|
124
131
|
}
|
|
132
|
+
case 'oneOfTree': {
|
|
133
|
+
const stored = value;
|
|
134
|
+
const nodes = nodesOf(definition, ctx);
|
|
135
|
+
if (stored === '') {
|
|
136
|
+
if (definition.optional ?? false)
|
|
137
|
+
return stored;
|
|
138
|
+
const fallback = oneOfTreeInitialValue(definition, ctx, id, nodes);
|
|
139
|
+
if (fallback !== stored)
|
|
140
|
+
warn(`Field '${id}': stored value '' is empty but the field is not optional, using '${fallback}'`);
|
|
141
|
+
return fallback;
|
|
142
|
+
}
|
|
143
|
+
if (choosableValues(nodes, definition.choose ?? 'any').includes(stored))
|
|
144
|
+
return stored;
|
|
145
|
+
const fallback = oneOfTreeInitialValue(definition, ctx, id, nodes);
|
|
146
|
+
const reason = nodeValues(nodes).has(stored) ? 'cannot be chosen' : 'names no node';
|
|
147
|
+
if (fallback !== stored)
|
|
148
|
+
warn(`Field '${id}': stored value '${stored}' ${reason}, using '${fallback}'`);
|
|
149
|
+
return fallback;
|
|
150
|
+
}
|
|
125
151
|
case 'numeric': {
|
|
126
152
|
const stored = value;
|
|
127
153
|
const { min, max, integer } = resolveNumeric(id, definition, ctx);
|
package/dist/kinds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.js","sourceRoot":"","sources":["../src/kinds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8C,MAAM,cAAc,CAAC;AAGzF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAiB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"kinds.js","sourceRoot":"","sources":["../src/kinds.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { OneOfChoice, OneOfChoiceControls } from './choices.js';
|
|
|
2
2
|
/** A node of a tree field (Praeceptor's categories): a choice with children. */
|
|
3
3
|
export interface TreeNode<T extends string = string> extends OneOfChoice<T> {
|
|
4
4
|
children?: TreeNode<T>[];
|
|
5
|
+
/** Whether the one-of tree may choose this node (default true); a folder when false. Ignored by the many-of tree. */
|
|
6
|
+
choosable?: boolean;
|
|
5
7
|
}
|
|
6
8
|
/** A node as the widgets get it: the resolved choice, its children likewise, and whether it shows checked. */
|
|
7
9
|
export interface TreeNodeControls<T extends string = string> extends OneOfChoiceControls<T> {
|
|
@@ -78,4 +80,19 @@ export declare function filterTree<N extends {
|
|
|
78
80
|
value: string;
|
|
79
81
|
children?: N[];
|
|
80
82
|
}>(nodes: N[], query: string): N[];
|
|
83
|
+
/**
|
|
84
|
+
* Which nodes the one-of tree field may choose: `'any'` node, or only `'leaves'` (a node with
|
|
85
|
+
* no children).
|
|
86
|
+
*/
|
|
87
|
+
export type TreeChoose = 'any' | 'leaves';
|
|
88
|
+
/**
|
|
89
|
+
* Whether the one-of tree field may choose `node` under `choose` (see TreeChoose): choosable
|
|
90
|
+
* (its `choosable` is not `false`), enabled (as nodeEnabled resolves it), and, under `'leaves'`,
|
|
91
|
+
* has no children.
|
|
92
|
+
*/
|
|
93
|
+
export declare function canChooseNode(node: TreeNode, choose: TreeChoose): boolean;
|
|
94
|
+
/** The values canChooseNode accepts, in tree pre-order. */
|
|
95
|
+
export declare function choosableValues<T extends string>(nodes: TreeNode<T>[], choose: TreeChoose): T[];
|
|
96
|
+
/** The values from the root down to `value` inclusive, in tree order; `[]` when no node has it. */
|
|
97
|
+
export declare function treePath<T extends string>(nodes: TreeNode<T>[], value: T): T[];
|
|
81
98
|
//# sourceMappingURL=tree.d.ts.map
|
package/dist/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIrE,gFAAgF;AAChF,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIrE,gFAAgF;AAChF,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,qHAAqH;IACrH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,8GAA8G;AAC9G,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IACzF,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;IAC5C,6FAA6F;IAC7F,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEzE;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;AA0F7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,EAAE,CAOpH;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,GAAE,aAAyB,GAAG,CAAC,EAAE,CAE1H;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,EAAE,CAoB1H;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,CAU5G;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAYtH;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAIzE;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,CAG/F;AAED,mGAAmG;AACnG,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAM9E"}
|
package/dist/tree.js
CHANGED
|
@@ -191,4 +191,31 @@ export function filterTree(nodes, query) {
|
|
|
191
191
|
});
|
|
192
192
|
return keep(nodes, false);
|
|
193
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Whether the one-of tree field may choose `node` under `choose` (see TreeChoose): choosable
|
|
196
|
+
* (its `choosable` is not `false`), enabled (as nodeEnabled resolves it), and, under `'leaves'`,
|
|
197
|
+
* has no children.
|
|
198
|
+
*/
|
|
199
|
+
export function canChooseNode(node, choose) {
|
|
200
|
+
if (node.choosable === false)
|
|
201
|
+
return false;
|
|
202
|
+
if (!nodeEnabled(node))
|
|
203
|
+
return false;
|
|
204
|
+
return choose !== 'leaves' || !hasChildren(node);
|
|
205
|
+
}
|
|
206
|
+
/** The values canChooseNode accepts, in tree pre-order. */
|
|
207
|
+
export function choosableValues(nodes, choose) {
|
|
208
|
+
const { order } = indexTree(nodes);
|
|
209
|
+
return order.filter((node) => canChooseNode(node, choose)).map((node) => node.value);
|
|
210
|
+
}
|
|
211
|
+
/** The values from the root down to `value` inclusive, in tree order; `[]` when no node has it. */
|
|
212
|
+
export function treePath(nodes, value) {
|
|
213
|
+
const { order, parent } = indexTree(nodes);
|
|
214
|
+
if (!order.some((node) => node.value === value))
|
|
215
|
+
return [];
|
|
216
|
+
const path = [value];
|
|
217
|
+
for (let up = parent.get(value); up !== undefined; up = parent.get(up))
|
|
218
|
+
path.unshift(up);
|
|
219
|
+
return path;
|
|
220
|
+
}
|
|
194
221
|
//# sourceMappingURL=tree.js.map
|
package/dist/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
|