diff --git a/eslint-local-rules/index.js b/eslint-local-rules/index.js
index d9d894c33e..9348706399 100644
--- a/eslint-local-rules/index.js
+++ b/eslint-local-rules/index.js
@@ -41,11 +41,12 @@ module.exports = {
if (
/^@budibase\/[^/]+\/.*$/.test(importPath) &&
importPath !== "@budibase/backend-core/tests" &&
- importPath !== "@budibase/string-templates/test/utils"
+ importPath !== "@budibase/string-templates/test/utils" &&
+ importPath !== "@budibase/client/manifest.json"
) {
context.report({
node,
- message: `Importing from @budibase is not allowed, except for @budibase/backend-core/tests and @budibase/string-templates/test/utils.`,
+ message: `Importing from @budibase is not allowed, except for @budibase/backend-core/tests, @budibase/string-templates/test/utils and @budibase/client/manifest.json.`,
})
}
},
diff --git a/lerna.json b/lerna.json
index d033c24518..13040cb50c 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
- "version": "3.2.46",
+ "version": "3.3.1",
"npmClient": "yarn",
"concurrency": 20,
"command": {
diff --git a/packages/bbui/src/bbui.css b/packages/bbui/src/bbui.css
index dd0588818e..810c5ff2c0 100644
--- a/packages/bbui/src/bbui.css
+++ b/packages/bbui/src/bbui.css
@@ -45,6 +45,11 @@
--purple: #806fde;
--purple-dark: #130080;
+ --error-bg: rgba(226, 109, 105, 0.3);
+ --warning-bg: rgba(255, 210, 106, 0.3);
+ --error-content: rgba(226, 109, 105, 0.6);
+ --warning-content: rgba(255, 210, 106, 0.6);
+
--rounded-small: 4px;
--rounded-medium: 8px;
--rounded-large: 16px;
diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
index 16183ea59a..e713d9bc85 100644
--- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
@@ -293,7 +293,7 @@
type: RowSelector,
props: {
row: inputData["oldRow"] || {
- tableId: inputData["row"].tableId,
+ tableId: inputData["row"]?.tableId,
},
meta: {
fields: inputData["meta"]?.oldFields || {},
diff --git a/packages/builder/src/components/common/bindings/BindingPanel.svelte b/packages/builder/src/components/common/bindings/BindingPanel.svelte
index 98df69bc06..ffb477012c 100644
--- a/packages/builder/src/components/common/bindings/BindingPanel.svelte
+++ b/packages/builder/src/components/common/bindings/BindingPanel.svelte
@@ -12,7 +12,7 @@
decodeJSBinding,
encodeJSBinding,
processObjectSync,
- processStringSync,
+ processStringWithLogsSync,
} from "@budibase/string-templates"
import { readableToRuntimeBinding } from "@/dataBinding"
import CodeEditor from "../CodeEditor/CodeEditor.svelte"
@@ -41,6 +41,7 @@
InsertAtPositionFn,
JSONValue,
} from "@budibase/types"
+ import type { Log } from "@budibase/string-templates"
import type { CompletionContext } from "@codemirror/autocomplete"
const dispatch = createEventDispatcher()
@@ -66,6 +67,7 @@
let insertAtPos: InsertAtPositionFn | undefined
let targetMode: BindingMode | null = null
let expressionResult: string | undefined
+ let expressionLogs: Log[] | undefined
let expressionError: string | undefined
let evaluating = false
@@ -157,7 +159,7 @@
(expression: string | null, context: any, snippets: Snippet[]) => {
try {
expressionError = undefined
- expressionResult = processStringSync(
+ const output = processStringWithLogsSync(
expression || "",
{
...context,
@@ -167,6 +169,8 @@
noThrow: false,
}
)
+ expressionResult = output.result
+ expressionLogs = output.logs
} catch (err: any) {
expressionResult = undefined
expressionError = err
@@ -421,6 +425,7 @@