@ai-matrx/chat 0.5.17 → 0.6.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/CHANGELOG.md +12 -0
- package/dist/agents/components/identity-refs/AiIdentityRef.d.ts +33 -0
- package/dist/agents/components/identity-refs/AiIdentityRef.js +138 -0
- package/dist/agents/components/inputs/smart-input/QuicksetPanel.js +5 -9
- package/dist/agents/components/inputs/smart-input/RunSkillPicker.js +1 -1
- package/dist/agents/components/inputs/smart-input/RunToolPicker.js +6 -11
- package/dist/agents/components/inputs/smart-input/ShapeChipsRow.js +1 -1
- package/dist/agents/components/inputs/smart-input/composer/ComposerEffortPill.js +1 -1
- package/dist/agents/components/inputs/smart-input/composer/ComposerOutput.js +1 -1
- package/dist/agents/components/inputs/smart-input/composer/ComposerPlusMenu.js +1 -1
- package/dist/agents/components/inputs/smart-input/composer/useComposerAgent.js +1 -1
- package/dist/agents/components/inputs/smart-input/composer/useRunControlCounts.d.ts +3 -0
- package/dist/agents/components/inputs/smart-input/composer/useRunControlCounts.js +54 -0
- package/dist/agents/components/model-tiers/ModelTierIdentityList.js +1 -1
- package/dist/agents/components/run-controls/RunConfigOverrides.js +1 -1
- package/dist/agents/components/run-controls/RunInputCapabilities.js +1 -1
- package/dist/agents/components/run-controls/panels/shared.d.ts +0 -2
- package/dist/agents/hooks/useDiffEnrichment.js +3 -6
- package/dist/agents/identity/agent-catalog-lists.js +2 -1
- package/dist/agents/identity/agent-identity.js +2 -1
- package/dist/agents/identity/model-catalog.d.ts +9 -0
- package/dist/agents/identity/model-catalog.js +25 -0
- package/dist/agents/identity/preferred-chat-model.d.ts +9 -0
- package/dist/agents/identity/preferred-chat-model.js +33 -0
- package/dist/agents/identity/settings-store.d.ts +10 -0
- package/dist/agents/identity/settings-store.js +49 -0
- package/dist/agents/identity/skill-catalog.d.ts +27 -0
- package/dist/agents/identity/skill-catalog.js +100 -0
- package/dist/agents/identity/tool-catalog.d.ts +15 -0
- package/dist/agents/identity/tool-catalog.js +67 -0
- package/dist/agents/redux/agent-definition/cache-bust-middleware.d.ts +0 -1
- package/dist/agents/redux/agent-definition/cache-bust-middleware.js +1 -13
- package/dist/agents/redux/agent-definition/selectors.d.ts +12 -546
- package/dist/agents/redux/agent-settings/internal-utils.d.ts +2 -123
- package/dist/agents/redux/agent-settings/internal-utils.js +1 -315
- package/dist/agents/redux/agent-settings/settings-catalogue.d.ts +2 -78
- package/dist/agents/redux/agent-settings/settings-catalogue.js +1 -176
- package/dist/agents/redux/agent-settings/types.d.ts +2 -148
- package/dist/agents/redux/agent-settings/types.js +1 -0
- package/dist/agents/redux/agent-settings/ui-gates.d.ts +2 -54
- package/dist/agents/redux/agent-settings/ui-gates.js +1 -38
- package/dist/agents/redux/agent-shortcut-categories/selectors.d.ts +0 -100
- package/dist/agents/redux/agent-shortcuts/selectors.d.ts +0 -294
- package/dist/agents/redux/conversation-history/selectors.d.ts +0 -32
- package/dist/agents/redux/conversation-list/conversation-list.selectors.d.ts +0 -4
- package/dist/agents/redux/execution-system/active-requests/active-requests.selectors.d.ts +0 -108
- package/dist/agents/redux/execution-system/context-state/context-state.selectors.d.ts +0 -28
- package/dist/agents/redux/execution-system/conversations/conversations.selectors.d.ts +0 -10
- package/dist/agents/redux/execution-system/instance-context/instance-context.selectors.d.ts +0 -6
- package/dist/agents/redux/execution-system/instance-model-overrides/launch-model-overrides.js +1 -1
- package/dist/agents/redux/execution-system/instance-resources/instance-resources.selectors.d.ts +0 -16
- package/dist/agents/redux/execution-system/instance-ui-state/instance-ui-state.selectors.d.ts +0 -10
- package/dist/agents/redux/execution-system/instance-variable-values/instance-variable-values.selectors.d.ts +0 -14
- package/dist/agents/redux/execution-system/messages/messages.selectors.d.ts +0 -2
- package/dist/agents/redux/execution-system/observability/observability.selectors.d.ts +0 -14
- package/dist/agents/redux/execution-system/observational-memory/observational-memory.selectors.d.ts +0 -2
- package/dist/agents/redux/execution-system/selectors/aggregate.selectors.d.ts +0 -28
- package/dist/agents/redux/execution-system/thunks/execute-instance.thunk.js +1 -1
- package/dist/agents/redux/execution-system/thunks/load-conversation.thunk.js +13 -2
- package/dist/agents/redux/execution-system/thunks/process-stream.js +2 -5
- package/dist/agents/redux/execution-system/thunks/resolve-base-url.js +2 -1
- package/dist/agents/redux/execution-system/utils/loaded-skill-sources.d.ts +1 -1
- package/dist/agents/redux/execution-system/utils/loaded-skill-sources.js +3 -3
- package/dist/agents/redux/execution-system/utils/required-organization.d.ts +10 -0
- package/dist/agents/redux/execution-system/utils/required-organization.js +6 -1
- package/dist/agents/redux/proposed-directives/proposedDirectivesSlice.d.ts +0 -2
- package/dist/agents/types/instance.types.d.ts +9 -0
- package/dist/agents/ui-first-tools/redux/agent-lists.selectors.d.ts +0 -4
- package/dist/host/ui-slots.d.ts +0 -46
- package/dist/host/ui-slots.js +0 -33
- package/dist/store/create-chat-store.d.ts +0 -4
- package/dist/store/middlewares.d.ts +0 -10
- package/dist/store/slices.d.ts +0 -2
- package/dist/store/slices.js +0 -4
- package/dist/surfaces/redux/selectors.d.ts +0 -4
- package/dist/tool-call-visualization/redux/selectors.d.ts +0 -2
- package/dist/ui/chat-default-model-knob.d.ts +1 -1
- package/dist/ui/chat-default-model-knob.js +1 -1
- package/package.json +9 -9
- package/dist/agents/components/model/AgentModelPanel.d.ts +0 -4
- package/dist/agents/components/model/AgentModelPanel.js +0 -9
- package/dist/agents/redux/agent-settings/agentSettingsSlice.d.ts +0 -1015
- package/dist/agents/redux/agent-settings/agentSettingsSlice.js +0 -659
- package/dist/agents/redux/agent-settings/selectors.d.ts +0 -10057
- package/dist/agents/redux/agent-settings/selectors.js +0 -234
- package/dist/agents/redux/agent-settings/useNormalizedControls.d.ts +0 -8
- package/dist/agents/redux/agent-settings/useNormalizedControls.js +0 -24
- package/dist/agents/redux/tools/tools.selectors.d.ts +0 -529
- package/dist/agents/redux/tools/tools.selectors.js +0 -24
- package/dist/agents/redux/tools/tools.slice.d.ts +0 -12
- package/dist/agents/redux/tools/tools.slice.js +0 -37
- package/dist/agents/redux/tools/tools.thunks.d.ts +0 -125
- package/dist/agents/redux/tools/tools.thunks.js +0 -45
- package/dist/host/defaults/setting-control-input.d.ts +0 -11
- package/dist/host/defaults/setting-control-input.js +0 -91
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import { createSelector } from "@reduxjs/toolkit";
|
|
2
|
-
import {
|
|
3
|
-
buildApiPayload,
|
|
4
|
-
getActionForMode,
|
|
5
|
-
mergeEffectiveSettings,
|
|
6
|
-
mergeVariableValues,
|
|
7
|
-
resolveConflicts
|
|
8
|
-
} from "./internal-utils.js";
|
|
9
|
-
const EMPTY_SETTINGS = {};
|
|
10
|
-
const EMPTY_VARIABLES = [];
|
|
11
|
-
const EMPTY_OVERRIDES = {};
|
|
12
|
-
const EMPTY_FIELDS = [];
|
|
13
|
-
const EMPTY_AGENT_SETTINGS_ENTRIES = {};
|
|
14
|
-
const EMPTY_AVAILABLE_TOOLS = [];
|
|
15
|
-
const selectEntry = (state, agentId) => state.agentSettings?.entries[agentId];
|
|
16
|
-
const selectDefaults = (state, agentId) => state.agentSettings?.entries[agentId]?.defaults ?? EMPTY_SETTINGS;
|
|
17
|
-
const selectOverrides = (state, agentId) => state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS;
|
|
18
|
-
const selectEffectiveSettings = createSelector(
|
|
19
|
-
[
|
|
20
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.defaults ?? EMPTY_SETTINGS,
|
|
21
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS
|
|
22
|
-
],
|
|
23
|
-
(defaults, overrides) => mergeEffectiveSettings(defaults, overrides)
|
|
24
|
-
);
|
|
25
|
-
const selectEffectiveModelId = createSelector(
|
|
26
|
-
[
|
|
27
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.overrides?.model,
|
|
28
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.defaults?.model
|
|
29
|
-
],
|
|
30
|
-
(overrideModelId, defaultModelId) => overrideModelId ?? defaultModelId ?? null
|
|
31
|
-
);
|
|
32
|
-
const selectPendingSwitch = (state, agentId) => state.agentSettings?.entries[agentId]?.pendingSwitch ?? null;
|
|
33
|
-
const selectHasPendingSwitch = (state, agentId) => (state.agentSettings?.entries[agentId]?.pendingSwitch ?? null) !== null;
|
|
34
|
-
const selectPreviewedResolution = createSelector(
|
|
35
|
-
[
|
|
36
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.defaults ?? EMPTY_SETTINGS,
|
|
37
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS,
|
|
38
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.pendingSwitch ?? null
|
|
39
|
-
],
|
|
40
|
-
(defaults, overrides, pendingSwitch) => {
|
|
41
|
-
if (!pendingSwitch) return null;
|
|
42
|
-
const currentEffective = mergeEffectiveSettings(defaults, overrides);
|
|
43
|
-
const resolved = resolveConflicts(currentEffective, pendingSwitch);
|
|
44
|
-
return {
|
|
45
|
-
...resolved,
|
|
46
|
-
model: pendingSwitch.newModelId
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
const selectConflictActions = createSelector(
|
|
51
|
-
[
|
|
52
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.pendingSwitch ?? null
|
|
53
|
-
],
|
|
54
|
-
(pendingSwitch) => {
|
|
55
|
-
if (!pendingSwitch) return {};
|
|
56
|
-
const result = {};
|
|
57
|
-
for (const conflict of pendingSwitch.conflicts) {
|
|
58
|
-
result[conflict.key] = getActionForMode(
|
|
59
|
-
pendingSwitch.mode,
|
|
60
|
-
conflict,
|
|
61
|
-
pendingSwitch.customActions
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
65
|
-
}
|
|
66
|
-
);
|
|
67
|
-
const selectConflictSummary = createSelector(
|
|
68
|
-
[
|
|
69
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.pendingSwitch ?? null
|
|
70
|
-
],
|
|
71
|
-
(pendingSwitch) => {
|
|
72
|
-
if (!pendingSwitch) {
|
|
73
|
-
return {
|
|
74
|
-
totalConflicts: 0,
|
|
75
|
-
unsupportedCount: 0,
|
|
76
|
-
invalidValueCount: 0,
|
|
77
|
-
supportedCount: 0,
|
|
78
|
-
willRemoveCount: 0,
|
|
79
|
-
willResetCount: 0,
|
|
80
|
-
willKeepCount: 0
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
const { conflicts, mode, customActions, supportedKeys } = pendingSwitch;
|
|
84
|
-
let willRemoveCount = 0;
|
|
85
|
-
let willResetCount = 0;
|
|
86
|
-
let willKeepCount = 0;
|
|
87
|
-
for (const conflict of conflicts) {
|
|
88
|
-
const action = getActionForMode(mode, conflict, customActions);
|
|
89
|
-
if (action === "reset") {
|
|
90
|
-
if (conflict.reason === "unsupported_key") {
|
|
91
|
-
willRemoveCount++;
|
|
92
|
-
} else {
|
|
93
|
-
willResetCount++;
|
|
94
|
-
}
|
|
95
|
-
} else {
|
|
96
|
-
willKeepCount++;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return {
|
|
100
|
-
totalConflicts: conflicts.length,
|
|
101
|
-
unsupportedCount: conflicts.filter(
|
|
102
|
-
(c) => c.reason === "unsupported_key"
|
|
103
|
-
).length,
|
|
104
|
-
invalidValueCount: conflicts.filter(
|
|
105
|
-
(c) => c.reason !== "unsupported_key"
|
|
106
|
-
).length,
|
|
107
|
-
supportedCount: supportedKeys.length,
|
|
108
|
-
willRemoveCount,
|
|
109
|
-
willResetCount,
|
|
110
|
-
willKeepCount
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
);
|
|
114
|
-
const selectApiPayload = createSelector(
|
|
115
|
-
[
|
|
116
|
-
(state, agentId) => mergeEffectiveSettings(
|
|
117
|
-
state.agentSettings?.entries[agentId]?.defaults ?? EMPTY_SETTINGS,
|
|
118
|
-
state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS
|
|
119
|
-
),
|
|
120
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS,
|
|
121
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.context ?? "builder"
|
|
122
|
-
],
|
|
123
|
-
(effectiveSettings, overrides, context) => buildApiPayload(effectiveSettings, overrides, context)
|
|
124
|
-
);
|
|
125
|
-
const selectHasOverrides = (state, agentId) => Object.keys(
|
|
126
|
-
state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS
|
|
127
|
-
).length > 0;
|
|
128
|
-
const selectOverriddenFields = createSelector(
|
|
129
|
-
[
|
|
130
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.overrides ?? EMPTY_SETTINGS
|
|
131
|
-
],
|
|
132
|
-
(overrides) => Object.keys(overrides)
|
|
133
|
-
);
|
|
134
|
-
const selectVariableDefaults = (state, agentId) => state.agentSettings?.entries[agentId]?.variable_defaults ?? EMPTY_VARIABLES;
|
|
135
|
-
const selectVariableOverrides = (state, agentId) => state.agentSettings?.entries[agentId]?.variable_overrides ?? EMPTY_OVERRIDES;
|
|
136
|
-
const selectHasVariables = (state, agentId) => (state.agentSettings?.entries[agentId]?.variable_defaults?.length ?? 0) > 0;
|
|
137
|
-
const selectEffectiveVariableValues = createSelector(
|
|
138
|
-
[
|
|
139
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.variable_defaults ?? EMPTY_VARIABLES,
|
|
140
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.variable_overrides ?? EMPTY_OVERRIDES
|
|
141
|
-
],
|
|
142
|
-
(variableDefaults, variableOverrides) => mergeVariableValues(variableDefaults, variableOverrides)
|
|
143
|
-
);
|
|
144
|
-
const selectIsDirty = (state, agentId) => state.agentSettings?.entries[agentId]?.isDirty ?? false;
|
|
145
|
-
const selectIsLoading = (state, agentId) => state.agentSettings?.entries[agentId]?.isLoading ?? false;
|
|
146
|
-
const selectIsSaving = (state, agentId) => state.agentSettings?.entries[agentId]?.isSaving ?? false;
|
|
147
|
-
const selectError = (state, agentId) => state.agentSettings?.entries[agentId]?.error ?? null;
|
|
148
|
-
const selectContext = (state, agentId) => state.agentSettings?.entries[agentId]?.context ?? null;
|
|
149
|
-
const selectSource = (state, agentId) => state.agentSettings?.entries[agentId]?.source ?? null;
|
|
150
|
-
const selectLastFetchedAt = (state, agentId) => state.agentSettings?.entries[agentId]?.lastFetchedAt ?? null;
|
|
151
|
-
const selectAgentStatus = createSelector(
|
|
152
|
-
[
|
|
153
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.isDirty ?? false,
|
|
154
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.isLoading ?? false,
|
|
155
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.isSaving ?? false,
|
|
156
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.error ?? null,
|
|
157
|
-
(state, agentId) => state.agentSettings?.entries[agentId]?.lastFetchedAt ?? null
|
|
158
|
-
],
|
|
159
|
-
(isDirty, isLoading, isSaving, error, lastFetchedAt) => ({
|
|
160
|
-
isDirty,
|
|
161
|
-
isLoading,
|
|
162
|
-
isSaving,
|
|
163
|
-
error,
|
|
164
|
-
lastFetchedAt
|
|
165
|
-
})
|
|
166
|
-
);
|
|
167
|
-
const selectActiveAgentId = (state) => state.agentSettings?.activeAgentId ?? null;
|
|
168
|
-
const selectActiveEffectiveSettings = createSelector(
|
|
169
|
-
[
|
|
170
|
-
(state) => state.agentSettings?.activeAgentId ?? null,
|
|
171
|
-
(state) => state.agentSettings?.entries ?? EMPTY_AGENT_SETTINGS_ENTRIES
|
|
172
|
-
],
|
|
173
|
-
(activeAgentId, entries) => {
|
|
174
|
-
if (!activeAgentId) return EMPTY_SETTINGS;
|
|
175
|
-
const entry = entries[activeAgentId];
|
|
176
|
-
if (!entry) return EMPTY_SETTINGS;
|
|
177
|
-
return mergeEffectiveSettings(entry.defaults, entry.overrides);
|
|
178
|
-
}
|
|
179
|
-
);
|
|
180
|
-
const selectActiveModelId = createSelector(
|
|
181
|
-
[
|
|
182
|
-
(state) => state.agentSettings?.activeAgentId ?? null,
|
|
183
|
-
(state) => state.agentSettings?.entries ?? EMPTY_AGENT_SETTINGS_ENTRIES
|
|
184
|
-
],
|
|
185
|
-
(activeAgentId, entries) => {
|
|
186
|
-
if (!activeAgentId) return null;
|
|
187
|
-
const entry = entries[activeAgentId];
|
|
188
|
-
if (!entry) return null;
|
|
189
|
-
return entry.overrides?.model ?? entry.defaults?.model ?? null;
|
|
190
|
-
}
|
|
191
|
-
);
|
|
192
|
-
const selectAllEntries = (state) => state.agentSettings?.entries ?? EMPTY_AGENT_SETTINGS_ENTRIES;
|
|
193
|
-
const selectAllAgentIds = createSelector(
|
|
194
|
-
[
|
|
195
|
-
(state) => state.agentSettings?.entries ?? EMPTY_AGENT_SETTINGS_ENTRIES
|
|
196
|
-
],
|
|
197
|
-
(entries) => Object.keys(entries)
|
|
198
|
-
);
|
|
199
|
-
const selectAvailableTools = (state) => state.agentSettings?.availableTools ?? EMPTY_AVAILABLE_TOOLS;
|
|
200
|
-
const selectIsLoadingTools = (state) => state.agentSettings?.isLoadingTools ?? false;
|
|
201
|
-
export {
|
|
202
|
-
selectActiveAgentId,
|
|
203
|
-
selectActiveEffectiveSettings,
|
|
204
|
-
selectActiveModelId,
|
|
205
|
-
selectAgentStatus,
|
|
206
|
-
selectAllAgentIds,
|
|
207
|
-
selectAllEntries,
|
|
208
|
-
selectApiPayload,
|
|
209
|
-
selectAvailableTools,
|
|
210
|
-
selectConflictActions,
|
|
211
|
-
selectConflictSummary,
|
|
212
|
-
selectContext,
|
|
213
|
-
selectDefaults,
|
|
214
|
-
selectEffectiveModelId,
|
|
215
|
-
selectEffectiveSettings,
|
|
216
|
-
selectEffectiveVariableValues,
|
|
217
|
-
selectEntry,
|
|
218
|
-
selectError,
|
|
219
|
-
selectHasOverrides,
|
|
220
|
-
selectHasPendingSwitch,
|
|
221
|
-
selectHasVariables,
|
|
222
|
-
selectIsDirty,
|
|
223
|
-
selectIsLoading,
|
|
224
|
-
selectIsLoadingTools,
|
|
225
|
-
selectIsSaving,
|
|
226
|
-
selectLastFetchedAt,
|
|
227
|
-
selectOverriddenFields,
|
|
228
|
-
selectOverrides,
|
|
229
|
-
selectPendingSwitch,
|
|
230
|
-
selectPreviewedResolution,
|
|
231
|
-
selectSource,
|
|
232
|
-
selectVariableDefaults,
|
|
233
|
-
selectVariableOverrides
|
|
234
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { NormalizedControls } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Parsed controls for an agent-settings entry's effective model, from the model catalog's
|
|
4
|
-
* records: the pinned CLASS's controls when a pin is set and loaded (a model's classes run
|
|
5
|
-
* through different APIs, so Lightning ≠ Fast), else the model's own. Null until the record
|
|
6
|
-
* (full, with controls) is loaded.
|
|
7
|
-
*/
|
|
8
|
-
export declare function useNormalizedControls(agentId: string): NormalizedControls | null;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useMemo } from "react";
|
|
3
|
-
import { selectModelById, selectModelClassConfig } from "@ai-matrx/agents/models";
|
|
4
|
-
import { useAppSelector } from "../../../store/hooks.js";
|
|
5
|
-
import { useModelRecords } from "../../identity/model-catalog.js";
|
|
6
|
-
import { effectiveOfferingPinOf, parseModelControls } from "./internal-utils.js";
|
|
7
|
-
function useNormalizedControls(agentId) {
|
|
8
|
-
const modelId = useAppSelector((state) => {
|
|
9
|
-
const entry = state.agentSettings?.entries[agentId];
|
|
10
|
-
const id = entry?.overrides?.model ?? entry?.defaults?.model;
|
|
11
|
-
return typeof id === "string" ? id : null;
|
|
12
|
-
});
|
|
13
|
-
const pin = useAppSelector((state) => effectiveOfferingPinOf(state.agentSettings?.entries[agentId]) ?? null);
|
|
14
|
-
const model = useModelRecords((s) => selectModelById(s, modelId));
|
|
15
|
-
const classConfig = useModelRecords((s) => selectModelClassConfig(s, modelId, pin));
|
|
16
|
-
return useMemo(() => {
|
|
17
|
-
if (!model) return null;
|
|
18
|
-
const controls = classConfig ? classConfig.controls : model.controls;
|
|
19
|
-
return parseModelControls(controls);
|
|
20
|
-
}, [model, classConfig]);
|
|
21
|
-
}
|
|
22
|
-
export {
|
|
23
|
-
useNormalizedControls
|
|
24
|
-
};
|