treege 3.0.0-beta.2 → 3.0.0-beta.21
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/LICENSE +18 -12
- package/README.md +118 -26
- package/dist/ThemeContext-BIT4DHqC.js +763 -0
- package/dist/TreegeEditor-LKN_xeXZ.js +3311 -0
- package/dist/TreegeRenderer-Ci_Ym86Y.js +1812 -0
- package/dist/editor/components/input/ComboboxWithCreate.d.ts +2 -1
- package/dist/editor/constants/defaultNode.d.ts +1 -1
- package/dist/editor/constants/edgeTypes.d.ts +3 -2
- package/dist/editor/constants/nodeSpacing.d.ts +20 -0
- package/dist/editor/constants/nodeTypes.d.ts +5 -5
- package/dist/editor/context/TreegeEditorContext.d.ts +15 -0
- package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +1 -1
- package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/edges/DefaultEdge.d.ts +3 -0
- package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
- package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/nodes/hooks/useBottomHandleClick.d.ts +8 -0
- package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +2 -1
- package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
- package/dist/editor/hooks/useFlowActions.d.ts +1 -0
- package/dist/editor/hooks/useFlowConnections.d.ts +1 -0
- package/dist/editor/types/ai.d.ts +65 -0
- package/dist/editor/types/editor.d.ts +5 -8
- package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
- package/dist/editor.js +2 -2
- package/dist/main.js +43 -39
- package/dist/renderer/context/TreegeRendererContext.d.ts +4 -1
- package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +3 -1
- package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
- package/dist/renderer/hooks/useSubmitHandler.d.ts +34 -0
- package/dist/renderer/hooks/useTranslate.d.ts +6 -4
- package/dist/renderer/index.d.ts +1 -0
- package/dist/renderer/types/renderer.d.ts +40 -2
- package/dist/renderer/utils/form.d.ts +22 -2
- package/dist/renderer/utils/http.d.ts +101 -0
- package/dist/renderer/utils/node.d.ts +9 -1
- package/dist/renderer/utils/sanitize.d.ts +85 -0
- package/dist/renderer/utils/submit.d.ts +47 -0
- package/dist/renderer.js +33 -29
- package/dist/shared/components/ui/alert-dialog.d.ts +14 -0
- package/dist/shared/components/ui/badge.d.ts +1 -1
- package/dist/shared/components/ui/popover.d.ts +3 -1
- package/dist/shared/components/ui/select.d.ts +3 -1
- package/dist/shared/constants/inputType.d.ts +1 -0
- package/dist/shared/locales/ar.json.d.ts +81 -8
- package/dist/shared/locales/de.json.d.ts +81 -8
- package/dist/shared/locales/en.json.d.ts +82 -9
- package/dist/shared/locales/es.json.d.ts +81 -8
- package/dist/shared/locales/fr.json.d.ts +81 -8
- package/dist/shared/locales/it.json.d.ts +81 -8
- package/dist/shared/locales/pt.json.d.ts +81 -8
- package/dist/shared/types/node.d.ts +51 -0
- package/package.json +9 -5
- package/dist/ThemeContext-BIvs8Kw-.js +0 -758
- package/dist/TreegeEditor-BSPfQQk3.js +0 -2151
- package/dist/TreegeRenderer-D3EvsEfJ.js +0 -1413
- package/dist/_name_.css +0 -1
|
@@ -4,6 +4,7 @@ declare const _default: {
|
|
|
4
4
|
"clear": "Limpar",
|
|
5
5
|
"close": "Fechar",
|
|
6
6
|
"create": "Criar",
|
|
7
|
+
"delete": "Excluir",
|
|
7
8
|
"retry": "Tentar novamente",
|
|
8
9
|
"save": "Salvar",
|
|
9
10
|
"submit": "Enviar",
|
|
@@ -11,7 +12,7 @@ declare const _default: {
|
|
|
11
12
|
},
|
|
12
13
|
"editor": {
|
|
13
14
|
"actionsPanel": {
|
|
14
|
-
"addNode": "Adicionar
|
|
15
|
+
"addNode": "Adicionar elemento",
|
|
15
16
|
"clear": "Limpar",
|
|
16
17
|
"clearSuccess": "Fluxo limpo!",
|
|
17
18
|
"clearSuccessDesc": "Todos os nós e arestas foram removidos.",
|
|
@@ -28,6 +29,26 @@ declare const _default: {
|
|
|
28
29
|
"parseError": "Erro ao analisar o arquivo JSON.",
|
|
29
30
|
"parseErrorDesc": "Tente corrigir o arquivo e importá-lo novamente."
|
|
30
31
|
},
|
|
32
|
+
"aiGenerator": {
|
|
33
|
+
"aiNotConfigured": "IA não configurada",
|
|
34
|
+
"aiNotConfiguredDesc": "Adicione a prop {code} ao TreegeEditorProvider",
|
|
35
|
+
"buttonLabel": "Gerar com IA",
|
|
36
|
+
"cancel": "Cancelar",
|
|
37
|
+
"description": "Descrição",
|
|
38
|
+
"descriptionPlaceholder": "Exemplo: Criar um formulário de contato com nome, email, telefone e mensagem",
|
|
39
|
+
"enterDescription": "Por favor insira uma descrição",
|
|
40
|
+
"failedToGenerate": "Falha ao gerar árvore",
|
|
41
|
+
"generate": "Gerar",
|
|
42
|
+
"generating": "Gerando...",
|
|
43
|
+
"keyboardShortcut": "Pressione {cmdEnter} ou {ctrlEnter} para gerar",
|
|
44
|
+
"missingApiKey": "Configuração de IA ausente",
|
|
45
|
+
"missingApiKeyDesc": "Por favor configure sua chave API de IA no TreegeEditorProvider",
|
|
46
|
+
"successDescription": "{nodes} nós e {edges} arestas criados",
|
|
47
|
+
"successTitle": "Árvore gerada com sucesso!",
|
|
48
|
+
"title": "Gerar fluxo com IA",
|
|
49
|
+
"titleDescription": "Descreva o formulário ou árvore de decisão que deseja criar, e a IA irá gerá-lo para você.",
|
|
50
|
+
"unknownError": "Erro desconhecido"
|
|
51
|
+
},
|
|
31
52
|
"comboboxPattern": {
|
|
32
53
|
"custom": "Personalizado: {value}",
|
|
33
54
|
"search": "Pesquisar padrões...",
|
|
@@ -94,8 +115,8 @@ declare const _default: {
|
|
|
94
115
|
"methodPut": "PUT",
|
|
95
116
|
"noFieldsAvailable": "Nenhum campo disponível",
|
|
96
117
|
"requestBody": "Corpo da requisição (JSON)",
|
|
97
|
-
"requestBodyDesc": "Use
|
|
98
|
-
"requestBodyPlaceholder": "{\"
|
|
118
|
+
"requestBodyDesc": "Use {{fieldId}} para referenciar outros campos. Certifique-se de que a formatação JSON está correta, incluindo aspas ao redor de valores de string.",
|
|
119
|
+
"requestBodyPlaceholder": "{\"nome\": \"{{nomeUsuario}}\", \"idade\": {{idadeUsuario}}}",
|
|
99
120
|
"responseConfiguration": "Configuração da resposta",
|
|
100
121
|
"responsePath": "Caminho da resposta",
|
|
101
122
|
"responsePathDesc": "Extrair dados da resposta usando notação de ponto ou indexação de array",
|
|
@@ -104,6 +125,8 @@ declare const _default: {
|
|
|
104
125
|
"searchParameterDesc": "Se definido, habilita uma caixa de pesquisa que adiciona este parâmetro às chamadas de API (ex: ?q=Paris)",
|
|
105
126
|
"searchParameterPlaceholder": "q, pesquisa, consulta...",
|
|
106
127
|
"selectMethod": "Selecionar método",
|
|
128
|
+
"sendFormData": "Enviar todos os dados do formulário",
|
|
129
|
+
"sendFormDataDesc": "Enviar automaticamente todos os valores do formulário como corpo JSON",
|
|
107
130
|
"showLoadingState": "Mostrar estado de carregamento",
|
|
108
131
|
"valueField": "Campo de valor",
|
|
109
132
|
"valueFieldDesc": "Campo a ser usado como valor da opção (ex: id)",
|
|
@@ -121,6 +144,7 @@ declare const _default: {
|
|
|
121
144
|
"defaultValueTypeNone": "Nenhum",
|
|
122
145
|
"defaultValueTypeReference": "Campo de referência",
|
|
123
146
|
"defaultValueTypeStatic": "Valor estático",
|
|
147
|
+
"disablePast": "Desativar datas passadas",
|
|
124
148
|
"errorMessage": "Mensagem de erro",
|
|
125
149
|
"helperText": "Texto de ajuda",
|
|
126
150
|
"httpConfiguration": "Configuração HTTP",
|
|
@@ -128,6 +152,7 @@ declare const _default: {
|
|
|
128
152
|
"multipleFiles": "Arquivos múltiplos",
|
|
129
153
|
"multipleSelection": "Seleção múltipla",
|
|
130
154
|
"name": "Nome",
|
|
155
|
+
"nameDescription": "Nome de campo personalizado opcional para exportação de formulário. Se vazio, o rótulo será usado como chave.",
|
|
131
156
|
"noParentFieldsAvailable": "Nenhum campo pai disponível",
|
|
132
157
|
"objectMapping": "Mapeamento de objeto",
|
|
133
158
|
"objectMappingDesc": "Mapear as propriedades do objeto de origem para uma nova estrutura",
|
|
@@ -144,6 +169,7 @@ declare const _default: {
|
|
|
144
169
|
"sourceKey": "Chave de origem",
|
|
145
170
|
"staticValue": "Valor estático",
|
|
146
171
|
"staticValuePlaceholder": "Digite o valor padrão",
|
|
172
|
+
"submitConfiguration": "Configuração de envio",
|
|
147
173
|
"targetKey": "Chave de destino",
|
|
148
174
|
"transformArray": "Converter para array",
|
|
149
175
|
"transformBoolean": "Converter para booleano",
|
|
@@ -155,6 +181,12 @@ declare const _default: {
|
|
|
155
181
|
"transformType": "Tipo de transformação",
|
|
156
182
|
"validation": "Validação"
|
|
157
183
|
},
|
|
184
|
+
"nodeActionsSheet": {
|
|
185
|
+
"deleteNode": "Excluir nó",
|
|
186
|
+
"deleteNodeConfirm": "Tem certeza de que deseja excluir este nó?",
|
|
187
|
+
"deleteNodeSuccess": "Nó excluído com sucesso",
|
|
188
|
+
"editNode": "Editar nó"
|
|
189
|
+
},
|
|
158
190
|
"selectInputType": {
|
|
159
191
|
"type": "Tipo"
|
|
160
192
|
},
|
|
@@ -172,7 +204,47 @@ declare const _default: {
|
|
|
172
204
|
"noGroup": "Sem grupo"
|
|
173
205
|
},
|
|
174
206
|
"selectNodeType": {
|
|
175
|
-
"nodeType": "Tipo de nó"
|
|
207
|
+
"nodeType": "Tipo de nó",
|
|
208
|
+
"options": {
|
|
209
|
+
"flow": "Fluxo externo",
|
|
210
|
+
"group": "Grupo",
|
|
211
|
+
"input": "Pergunta",
|
|
212
|
+
"ui": "Elemento de design"
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
"submitConfigForm": {
|
|
216
|
+
"addHeader": "Adicionar cabeçalho",
|
|
217
|
+
"apiUrl": "URL da API",
|
|
218
|
+
"apiUrlDesc": "Use {{fieldId}} para referenciar outros campos",
|
|
219
|
+
"apiUrlPlaceholder": "https://api.exemplo.com/submit",
|
|
220
|
+
"behavior": "Comportamento",
|
|
221
|
+
"errorMessage": "Mensagem de erro",
|
|
222
|
+
"errorMessageDesc": "Mensagem exibida quando o envio falha",
|
|
223
|
+
"errorMessagePlaceholder": "Ocorreu um erro. Por favor, tente novamente.",
|
|
224
|
+
"headerName": "Nome do cabeçalho",
|
|
225
|
+
"headers": "Cabeçalhos",
|
|
226
|
+
"headerValue": "Valor do cabeçalho",
|
|
227
|
+
"httpMethod": "Método HTTP",
|
|
228
|
+
"insertVariable": "Inserir variável",
|
|
229
|
+
"methodDelete": "DELETE",
|
|
230
|
+
"methodPatch": "PATCH",
|
|
231
|
+
"methodPost": "POST",
|
|
232
|
+
"methodPut": "PUT",
|
|
233
|
+
"noFieldsAvailable": "Nenhum campo disponível",
|
|
234
|
+
"postSubmission": "Após o envio",
|
|
235
|
+
"redirectUrl": "URL de redirecionamento",
|
|
236
|
+
"redirectUrlDesc": "URL para redirecionar após envio bem-sucedido",
|
|
237
|
+
"redirectUrlPlaceholder": "/success ou https://exemplo.com/obrigado",
|
|
238
|
+
"requestBody": "Corpo da requisição (JSON)",
|
|
239
|
+
"requestBodyDesc": "Use {{fieldId}} para referenciar outros campos. Certifique-se de que a formatação JSON está correta, incluindo aspas ao redor de valores de string.",
|
|
240
|
+
"requestBodyPlaceholder": "{\"nome\": \"{{nomeUsuario}}\", \"email\": \"{{emailUsuario}}\"}",
|
|
241
|
+
"selectMethod": "Selecionar método",
|
|
242
|
+
"sendFormData": "Enviar todos os dados do formulário",
|
|
243
|
+
"sendFormDataDesc": "Enviar automaticamente todos os valores do formulário como corpo JSON",
|
|
244
|
+
"showLoadingState": "Mostrar estado de carregamento",
|
|
245
|
+
"successMessage": "Mensagem de sucesso",
|
|
246
|
+
"successMessageDesc": "Mensagem exibida quando o envio é bem-sucedido",
|
|
247
|
+
"successMessagePlaceholder": "Formulário enviado com sucesso!"
|
|
176
248
|
},
|
|
177
249
|
"uiNodeForm": {
|
|
178
250
|
"label": "Rótulo",
|
|
@@ -192,15 +264,16 @@ declare const _default: {
|
|
|
192
264
|
"selectOption": "Selecione uma opção"
|
|
193
265
|
},
|
|
194
266
|
"defaultHttpInput": {
|
|
195
|
-
"fetchFailed": "Falha ao buscar dados",
|
|
196
|
-
"httpError": "HTTP {status}: {statusText}",
|
|
267
|
+
"fetchFailed": "Falha ao buscar dados. Por favor, verifique sua conexão de rede.",
|
|
268
|
+
"httpError": "Erro HTTP {status}: {statusText}",
|
|
197
269
|
"noDataAvailable": "Nenhum dado disponível. Configure \"Buscar na montagem\" ou adicione um parâmetro de pesquisa.",
|
|
198
270
|
"noResults": "Nenhum resultado encontrado.",
|
|
199
|
-
"noUrlConfigured": "Nenhuma URL configurada",
|
|
271
|
+
"noUrlConfigured": "Nenhuma URL configurada. Por favor, adicione uma URL na configuração HTTP.",
|
|
200
272
|
"retry": "Tentar novamente",
|
|
201
273
|
"search": "Pesquisar...",
|
|
202
274
|
"searching": "Pesquisando...",
|
|
203
|
-
"selectOption": "Selecione uma opção"
|
|
275
|
+
"selectOption": "Selecione uma opção",
|
|
276
|
+
"waitingForRequiredFields": "Aguardando campos obrigatórios"
|
|
204
277
|
},
|
|
205
278
|
"defaultInputs": {
|
|
206
279
|
"endDate": "Data de fim",
|
|
@@ -68,6 +68,10 @@ export type HttpConfig = {
|
|
|
68
68
|
* Request body (for POST/PUT/PATCH methods)
|
|
69
69
|
*/
|
|
70
70
|
body?: string;
|
|
71
|
+
/**
|
|
72
|
+
* If true, automatically sends all form data as JSON body (overrides custom body)
|
|
73
|
+
*/
|
|
74
|
+
sendFormData?: boolean;
|
|
71
75
|
/**
|
|
72
76
|
* JSONPath or key to extract from the response
|
|
73
77
|
* Examples: "data.users", "results[0].name"
|
|
@@ -100,6 +104,45 @@ export type HttpConfig = {
|
|
|
100
104
|
*/
|
|
101
105
|
showLoading?: boolean;
|
|
102
106
|
};
|
|
107
|
+
export type SubmitConfig = {
|
|
108
|
+
/**
|
|
109
|
+
* The HTTP method to use for form submission
|
|
110
|
+
*/
|
|
111
|
+
method?: "POST" | "PUT" | "PATCH" | "DELETE";
|
|
112
|
+
/**
|
|
113
|
+
* The API URL to call on submit (supports template variables like {{fieldId}})
|
|
114
|
+
*/
|
|
115
|
+
url?: string;
|
|
116
|
+
/**
|
|
117
|
+
* Custom headers for the HTTP request
|
|
118
|
+
*/
|
|
119
|
+
headers?: HttpHeader[];
|
|
120
|
+
/**
|
|
121
|
+
* Request body (for POST/PUT/PATCH methods, supports template variables like {{fieldId}})
|
|
122
|
+
* Strings are automatically quoted, use: {"name": {{userName}}}
|
|
123
|
+
*/
|
|
124
|
+
body?: string;
|
|
125
|
+
/**
|
|
126
|
+
* If true, automatically sends all form data as JSON body (overrides custom body)
|
|
127
|
+
*/
|
|
128
|
+
sendFormData?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* URL to redirect to after successful submission (supports template variables from response)
|
|
131
|
+
*/
|
|
132
|
+
redirectUrl?: string;
|
|
133
|
+
/**
|
|
134
|
+
* Success message to display after successful submission (translatable)
|
|
135
|
+
*/
|
|
136
|
+
successMessage?: Translatable;
|
|
137
|
+
/**
|
|
138
|
+
* Error message to display if submission fails (translatable)
|
|
139
|
+
*/
|
|
140
|
+
errorMessage?: Translatable;
|
|
141
|
+
/**
|
|
142
|
+
* Whether to show a loading state while submitting
|
|
143
|
+
*/
|
|
144
|
+
showLoading?: boolean;
|
|
145
|
+
};
|
|
103
146
|
export type InputNodeData = BaseNodeData & {
|
|
104
147
|
/**
|
|
105
148
|
* The name of the input field, used for identification and form submission
|
|
@@ -137,6 +180,10 @@ export type InputNodeData = BaseNodeData & {
|
|
|
137
180
|
* Whether multiple selections are allowed (for select and checkbox types)
|
|
138
181
|
*/
|
|
139
182
|
multiple?: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Whether past dates should be disabled (for date and daterange types)
|
|
185
|
+
*/
|
|
186
|
+
disablePast?: boolean;
|
|
140
187
|
/**
|
|
141
188
|
* The default value config for the input field
|
|
142
189
|
*/
|
|
@@ -154,6 +201,10 @@ export type InputNodeData = BaseNodeData & {
|
|
|
154
201
|
* HTTP configuration for the input field (used with type="http")
|
|
155
202
|
*/
|
|
156
203
|
httpConfig?: HttpConfig;
|
|
204
|
+
/**
|
|
205
|
+
* Submit configuration for the input field (used with type="submit")
|
|
206
|
+
*/
|
|
207
|
+
submitConfig?: SubmitConfig;
|
|
157
208
|
};
|
|
158
209
|
export type UINodeData = BaseNodeData & {
|
|
159
210
|
/**
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "treege",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "Powerful form generator",
|
|
4
4
|
"license": "ISC",
|
|
5
|
-
"version": "3.0.0-beta.
|
|
5
|
+
"version": "3.0.0-beta.21",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "./dist/main.d.ts",
|
|
8
8
|
"module": "./dist/main.js",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"test:watch": "vitest"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
47
48
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
48
49
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
49
50
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
@@ -54,16 +55,17 @@
|
|
|
54
55
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
55
56
|
"@radix-ui/react-select": "^2.2.6",
|
|
56
57
|
"@radix-ui/react-separator": "^1.1.7",
|
|
57
|
-
"@radix-ui/react-slot": "^1.2.
|
|
58
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
58
59
|
"@radix-ui/react-switch": "^1.2.6",
|
|
59
60
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
60
61
|
"@tanstack/react-form": "^1.23.5",
|
|
61
62
|
"@uiw/react-textarea-code-editor": "^3.1.1",
|
|
62
|
-
"@xyflow/react": "
|
|
63
|
+
"@xyflow/react": "12.9.2",
|
|
63
64
|
"class-variance-authority": "^0.7.1",
|
|
64
65
|
"clsx": "^2.1.1",
|
|
65
66
|
"cmdk": "^1.1.1",
|
|
66
67
|
"date-fns": "^4.1.0",
|
|
68
|
+
"dompurify": "^3.3.0",
|
|
67
69
|
"lucide-react": "^0.544.0",
|
|
68
70
|
"nanoid": "^5.1.6",
|
|
69
71
|
"next-themes": "^0.4.6",
|
|
@@ -79,7 +81,8 @@
|
|
|
79
81
|
"@testing-library/jest-dom": "^6.9.1",
|
|
80
82
|
"@testing-library/react": "^16.3.0",
|
|
81
83
|
"@testing-library/react-hooks": "^8.0.1",
|
|
82
|
-
"@tracktor/biome-config-react": "^1.
|
|
84
|
+
"@tracktor/biome-config-react": "^1.4.0",
|
|
85
|
+
"@types/dompurify": "^3.2.0",
|
|
83
86
|
"@types/google.maps": "^3.58.1",
|
|
84
87
|
"@types/node": "^24.5.2",
|
|
85
88
|
"@types/react": "^19.1.0",
|
|
@@ -94,6 +97,7 @@
|
|
|
94
97
|
"tw-animate-css": "^1.4.0",
|
|
95
98
|
"typescript": "^5.9.2",
|
|
96
99
|
"vite": "^7.1.7",
|
|
100
|
+
"vite-plugin-css-injected-by-js": "^3.5.2",
|
|
97
101
|
"vite-plugin-dts": "^4.5.4",
|
|
98
102
|
"vitest": "^4.0.2"
|
|
99
103
|
},
|