From 1048a506275996c709fbbacee7564e3e3aab40c5 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 15 Jan 2025 14:52:27 +0000 Subject: [PATCH 01/22] Add functional bindings panel --- .../BindingExplorer/BindingNode.svelte | 188 ++++++++++++++++++ .../_components/BindingsPanel.svelte | 100 +++++++++- 2 files changed, 282 insertions(+), 6 deletions(-) create mode 100644 packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte new file mode 100644 index 00000000000..155312c03e9 --- /dev/null +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -0,0 +1,188 @@ + + +
+ {#if label} +
+
+ {#if expandable} + (expanded = !expanded)} + /> + {/if} +
+
+ {label} +
+
+ {displayValue} +
+
+ {/if} + {#if expandable && (expanded || !label)} +
+ {#each keys as key} + + {/each} +
+ {/if} +
+ + diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index 73cac273312..6af802c5701 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -1,14 +1,102 @@ - -Bindings +Bindings - - Some awesome bindings content. + + From cf291b60be9b099be244c8ee518c6380fda38c95 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 15 Jan 2025 21:08:37 +0000 Subject: [PATCH 02/22] Add style improvements --- .../BindingExplorer/BindingNode.svelte | 60 +++++++++------ .../_components/BindingsPanel.svelte | 77 ++++++++----------- 2 files changed, 68 insertions(+), 69 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte index 155312c03e9..2253cc782cc 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -1,5 +1,6 @@
- {#if label} + {#if label != null}
{#if expandable} @@ -107,7 +118,7 @@
{/if} - {#if expandable && (expanded || !label)} + {#if expandable && (expanded || label == null)}
{#each keys as key} - import { ActionButton, Modal, ModalContent } from "@budibase/bbui" + import { ActionButton, Modal, ModalContent, Helpers } from "@budibase/bbui" import { previewStore, selectedScreen, @@ -7,14 +7,8 @@ snippets, } from "@/stores/builder" import { getBindableProperties } from "@/dataBinding" - import { processObjectSync } from "@budibase/string-templates" import BindingNode from "./BindingExplorer/BindingNode.svelte" - - enum ValueType { - Object = "Object", - Array = "Array", - Primitive = "Primitive", - } + import { processObjectSync } from "@budibase/string-templates" // Minimal typing for the real data binding structure, as none exists type DataBinding = { @@ -23,45 +17,21 @@ readableBinding: string } - type BindingEntry = { - readableBinding: string - runtimeBinding: string | null - value: any - valueType: ValueType - } - - type BindingMap = { - [key: string]: BindingEntry - } - let modal: any - $: context = { - ...($previewStore.selectedComponentContext || {}), - date: new Date(), - string: "foo", - number: 1234, - undefined: undefined, - null: null, - true: true, - false: false, - array: [1, 2, 3], - object: { foo: "bar" }, - error: new Error(), - } + $: previewContext = $previewStore.selectedComponentContext || {} $: selectedComponentId = $componentStore.selectedComponentId + $: context = makeContext(previewContext, bindings) $: bindings = getBindableProperties($selectedScreen, selectedComponentId) - $: enrichedBindings = enrichBindings(bindings, context, $snippets) const show = () => { previewStore.requestComponentContext() modal.show() } - const enrichBindings = ( - bindings: DataBinding[], - context: Record, - snippets: any + const makeContext = ( + previewContext: Record, + bindings: DataBinding[] ) => { // Create a single big array to enrich in one go const bindingStrings = bindings.map(binding => { @@ -74,17 +44,36 @@ } }) const bindingEvauations = processObjectSync(bindingStrings, { - ...context, - snippets, + ...previewContext, + snippets: $snippets, }) as any[] // Enrich bindings with evaluations and highlighted HTML - const flatBindings = bindings.map((binding, idx) => ({ - ...binding, - value: bindingEvauations[idx], - })) + const enrichedBindings: any[] = bindings.map((binding, idx) => { + return { + ...binding, + value: bindingEvauations[idx], + } + }) - return flatBindings + let context = { + _dataTypes: { + date: new Date(), + string: "foo", + number: 1234, + undefined: undefined, + null: null, + true: true, + false: false, + array: [1, 2, 3], + object: { foo: "bar" }, + error: new Error(), + }, + } + for (let binding of enrichedBindings) { + Helpers.deepSet(context, binding.readableBinding, binding.value) + } + return context } From 59d71119ad002d8f83fab4e3b015bdccfa9c88bd Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 15 Jan 2025 21:25:48 +0000 Subject: [PATCH 03/22] Test --- asd | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 asd diff --git a/asd b/asd new file mode 100644 index 00000000000..e69de29bb2d From fa01802127dca5346ff2b2aba549d83a6cacab71 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 16 Jan 2025 10:52:13 +0000 Subject: [PATCH 04/22] Update import --- packages/client/src/stores/components.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/stores/components.js b/packages/client/src/stores/components.js index 8a8f82883d1..024e7b4edc0 100644 --- a/packages/client/src/stores/components.js +++ b/packages/client/src/stores/components.js @@ -6,7 +6,7 @@ import { screenStore } from "./screens" import { builderStore } from "./builder" import Router from "../components/Router.svelte" import * as AppComponents from "../components/app/index.js" -import { ScreenslotID, ScreenslotType } from "../constants.js" +import { ScreenslotID, ScreenslotType } from "../constants" export const BudibasePrefix = "@budibase/standard-components/" From 5acd6ab3d60ae2451f71590153b934b776ca0ff9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 16 Jan 2025 12:19:45 +0000 Subject: [PATCH 05/22] Add hover state and expansion to binding labels --- .../BindingExplorer/BindingNode.svelte | 34 +++++++++++++------ .../_components/BindingsPanel.svelte | 4 +-- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte index 2253cc782cc..2c4c5844fb2 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -1,9 +1,8 @@ + + + + +
{#if label != null}
-
+
{#if expandable}
(expanded = !expanded)} > {label}
- (valueExpanded = !valueExpanded)} > -
- {displayValue} -
-
+ {displayValue} +
{/if} {#if expandable && (expanded || label == null)} @@ -150,24 +156,33 @@ overflow: hidden; } .binding-arrow { - margin-right: 2px; + margin: -3px 2px -2px 0; flex: 0 0 18px; + transition: transform 130ms ease-out; + } + .binding-arrow :global(svg) { + width: 9px; + } + .binding-arrow.expanded { + transform: rotate(90deg); } .binding-text { display: flex; flex-direction: row; - align-items: center; font-family: monospace; font-size: 12px; + align-items: flex-start; width: 100%; } .binding-children { display: flex; flex-direction: column; gap: 8px; - /* border-left: 1px solid var(--spectrum-global-color-gray-400); */ - /* margin-left: 20px; */ - padding-left: 18px; + /*padding-left: 18px;*/ + + border-left: 1px solid var(--spectrum-global-color-gray-400); + margin-left: 20px; + padding-left: 3px; } .binding-children.root { border-left: none; @@ -176,31 +191,40 @@ } /* Size label and value according to type */ - .binding-label, - .binding-value { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } .binding-label { - flex: 0 0 auto; - max-width: 50%; + flex: 0 1 auto; margin-right: 8px; transition: color 130ms ease-out; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .binding-label.expandable:hover { cursor: pointer; color: var(--spectrum-global-color-gray-900); } .binding-value { - flex: 0 1 auto; + flex: 0 0 auto; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + transition: filter 130ms ease-out; } - .binding-label.expandable { - flex: 0 1 auto; - max-width: none; + .binding-value.primitive:hover { + filter: brightness(1.25); + cursor: pointer; } - .binding-value.expandable { + .binding-value.expanded { + word-break: break-all; + white-space: wrap; + } + + .binding-label.primitive { flex: 0 0 auto; + max-width: 50%; + } + .binding-value.primitive { + flex: 0 1 auto; } /* Trim spans in the highlighted HTML */ diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index b7bc3945396..1da4c42ac65 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -1,5 +1,5 @@ -Bindings - - - + + + + Data context + + +
- - +
+
+ + From 8bf6b6c4d89ead03ea0c45058272641732dea06f Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 12:02:06 +0000 Subject: [PATCH 07/22] Move bindings panel into left panel --- .../[screenId]/[componentId]/_layout.svelte | 2 +- .../[screenId]/_components/AppPanel.svelte | 3 -- .../BindingExplorer/BindingNode.svelte | 4 +- .../_components/BindingsPanel.svelte | 48 +++++++++---------- .../[screenId]/_components/LeftPanel.svelte | 7 ++- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_layout.svelte index 16fe7d9c2f1..f5dec6371f4 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_layout.svelte @@ -30,7 +30,7 @@ if (id === `${$screenStore.selectedScreenId}-screen`) return true if (id === `${$screenStore.selectedScreenId}-navigation`) return true - return !!findComponent($selectedScreen.props, id) + return !!findComponent($selectedScreen?.props, id) } // Keep URL and state in sync for selected component ID diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte index 3df23325438..639f648a552 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPanel.svelte @@ -3,8 +3,6 @@ import AppPreview from "./AppPreview.svelte" import { screenStore, appStore } from "@/stores/builder" import UndoRedoControl from "@/components/common/UndoRedoControl.svelte" - import { ActionButton } from "@budibase/bbui" - import BindingsPanel from "./BindingsPanel.svelte" import StatePanel from "./StatePanel.svelte" @@ -18,7 +16,6 @@ {/if}
-
diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte index 3dba3743b45..b2a696262dd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -156,8 +156,8 @@ overflow: hidden; } .binding-arrow { - margin: -3px 2px -2px 0; - flex: 0 0 18px; + margin: -3px 6px -2px 4px; + flex: 0 0 9px; transition: transform 130ms ease-out; } .binding-arrow :global(svg) { diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index 1da4c42ac65..f4d622cfd3f 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -1,5 +1,5 @@ - - - - Data context - - -
+
+ +
+ Showing all available bindings. + Learn more. +
-
- + +
diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte index b680140170f..ed2cda53d6f 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/LeftPanel.svelte @@ -3,6 +3,7 @@ import ComponentList from "./ComponentList/index.svelte" import { getHorizontalResizeActions } from "@/components/common/resizable" import { ActionButton } from "@budibase/bbui" + import BindingsPanel from "./BindingsPanel.svelte" const [resizable, resizableHandle] = getHorizontalResizeActions() @@ -32,7 +33,7 @@ {#if activeTab === Tabs.Components} {:else if activeTab === Tabs.Bindings} -
Bindings
+ {:else if activeTab === Tabs.State}
State
{/if} @@ -68,6 +69,10 @@ border-bottom: var(--border-light); } .tab-content { + flex: 1 1 auto; + height: 0; + overflow-y: auto; + overflow-x: hidden; padding: var(--spacing-l); } From c3b4a3690331085d3bd2a4dfdddd4e179ccb0f09 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 14:32:17 +0000 Subject: [PATCH 08/22] Add link to bindings docs --- packages/bbui/src/Link/Link.svelte | 4 ++-- .../design/[screenId]/_components/BindingsPanel.svelte | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/bbui/src/Link/Link.svelte b/packages/bbui/src/Link/Link.svelte index 58f999473ab..d43f7256e74 100644 --- a/packages/bbui/src/Link/Link.svelte +++ b/packages/bbui/src/Link/Link.svelte @@ -9,8 +9,8 @@ export let primary = false export let secondary = false export let overBackground = false - export let target - export let download + export let target = undefined + export let download = undefined export let disabled = false export let tooltip = null diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index f4d622cfd3f..47540f30858 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -77,7 +77,12 @@
Showing all available bindings. - Learn more. + + Learn more. +
From 034369119ce5b324774f6da47293e0c3410f9fbd Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 14:48:45 +0000 Subject: [PATCH 09/22] Add copy icon on hover --- .../BindingExplorer/BindingNode.svelte | 62 ++++++++++++++----- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte index b2a696262dd..e5339119cbd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -1,5 +1,5 @@ @@ -131,6 +136,16 @@ > {displayValue}
+
+ +
{/if} {#if expandable && (expanded || label == null)} @@ -155,6 +170,8 @@ gap: 8px; overflow: hidden; } + + /* Expand arrow */ .binding-arrow { margin: -3px 6px -2px 4px; flex: 0 0 9px; @@ -166,6 +183,8 @@ .binding-arrow.expanded { transform: rotate(90deg); } + + /* Main text wrapper */ .binding-text { display: flex; flex-direction: row; @@ -174,21 +193,6 @@ align-items: flex-start; width: 100%; } - .binding-children { - display: flex; - flex-direction: column; - gap: 8px; - /*padding-left: 18px;*/ - - border-left: 1px solid var(--spectrum-global-color-gray-400); - margin-left: 20px; - padding-left: 3px; - } - .binding-children.root { - border-left: none; - margin-left: 0; - padding-left: 0; - } /* Size label and value according to type */ .binding-label { @@ -209,6 +213,7 @@ white-space: nowrap; text-overflow: ellipsis; transition: filter 130ms ease-out; + user-select: none; } .binding-value.primitive:hover { filter: brightness(1.25); @@ -218,7 +223,6 @@ word-break: break-all; white-space: wrap; } - .binding-label.primitive { flex: 0 0 auto; max-width: 50%; @@ -233,4 +237,28 @@ text-overflow: ellipsis !important; white-space: nowrap !important; } + + /* Copy icon for value */ + .copy-value-icon { + display: none; + margin-left: 8px; + } + .binding-text:hover .copy-value-icon { + display: block; + } + + /* Children wrapper */ + .binding-children { + display: flex; + flex-direction: column; + gap: 8px; + border-left: 1px solid var(--spectrum-global-color-gray-400); + margin-left: 20px; + padding-left: 3px; + } + .binding-children.root { + border-left: none; + margin-left: 0; + padding-left: 0; + } From 97447981dccadea35c55f6bc32fbab53a3a430df Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 16:04:39 +0000 Subject: [PATCH 10/22] Update behaviour for copying bindings --- .../_components/BindingExplorer/BindingNode.svelte | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte index e5339119cbd..0b7b54214cd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte @@ -75,6 +75,9 @@ if (isObject) { return Colors.Object } + if (value instanceof Date) { + return Colors.Date + } switch (value) { case undefined: return Colors.Undefined @@ -91,15 +94,12 @@ case "number": return Colors.Number } - if (value instanceof Date) { - return Colors.Date - } return Colors.Other } - const copyValue = () => { - Helpers.copyToClipboard(JSON.stringify(value)) - notifications.success("Value copied to clipboard") + const copyBinding = () => { + Helpers.copyToClipboard(readableBinding) + notifications.success("Binding copied to clipboard") } @@ -143,7 +143,7 @@ hoverable color="var(--spectrum-global-color-gray-600)" hoverColor="var(--spectrum-global-color-gray-900)" - on:click={copyValue} + on:click={copyBinding} /> From 1edf3800536d853be5fa55be6464668eabdd86cb Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 16:07:59 +0000 Subject: [PATCH 11/22] Update component panel to remove header and add component button --- .../_components/ComponentList/index.svelte | 51 ++----------------- 1 file changed, 3 insertions(+), 48 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte index eb5a57ec9c4..d97d4e58be7 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte @@ -1,6 +1,5 @@ - -
-
- Components -
- -
-
- +
    openScreenContextMenu(e, false)} @@ -168,35 +145,13 @@ display: flex; flex-direction: column; flex: 1; - } - - .header { - height: 50px; - box-sizing: border-box; - padding: var(--spacing-l); - display: flex; - align-items: center; - border-bottom: 2px solid transparent; - transition: border-bottom 130ms ease-out; - } - .header.scrolling { - border-bottom: var(--border-light); + padding-top: var(--spacing-l); } .components :global(.nav-item) { padding-right: 8px !important; } - .addButton { - margin-left: auto; - color: var(--grey-7); - cursor: pointer; - } - - .addButton:hover { - color: var(--ink); - } - .list-panel { display: flex; flex-direction: column; From d872ee19d02c7b5fad5a50b16830d833c585985c Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 20 Jan 2025 16:09:01 +0000 Subject: [PATCH 12/22] Move components around --- .../_components/{BindingExplorer => }/BindingNode.svelte | 0 .../design/[screenId]/_components/BindingsPanel.svelte | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/{BindingExplorer => }/BindingNode.svelte (100%) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingNode.svelte similarity index 100% rename from packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingExplorer/BindingNode.svelte rename to packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingNode.svelte diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index 47540f30858..d7e11387752 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -1,5 +1,7 @@ From c185e806b60b51dc7ea23947be333ad5df1ea0f4 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 21 Jan 2025 10:32:45 +0000 Subject: [PATCH 15/22] Type AbsTooltip --- asd | 0 packages/bbui/src/Tooltip/AbsTooltip.svelte | 52 ++++++++++----------- 2 files changed, 26 insertions(+), 26 deletions(-) delete mode 100644 asd diff --git a/asd b/asd deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/bbui/src/Tooltip/AbsTooltip.svelte b/packages/bbui/src/Tooltip/AbsTooltip.svelte index b85f4e1c038..c084e460b68 100644 --- a/packages/bbui/src/Tooltip/AbsTooltip.svelte +++ b/packages/bbui/src/Tooltip/AbsTooltip.svelte @@ -1,38 +1,38 @@ - - + @@ -124,6 +133,7 @@ class:primitive class:expandable on:click={() => (expanded = !expanded)} + on:click={() => dispatch("click-label", clickContext)} > {label}
@@ -133,19 +143,22 @@ class:expanded={valueExpanded} {style} on:click={() => (valueExpanded = !valueExpanded)} + on:click={() => dispatch("click-value", clickContext)} > {displayValue}
-
- -
+ {#if showCopyIcon} +
+ dispatch("click-copy", clickContext)} + /> +
+ {/if} {/if} {#if expandable && (expanded || label == null)} @@ -156,6 +169,10 @@ value={value[key]} root={false} path={[...path, key]} + {showCopyIcon} + on:click-label + on:click-value + on:click-copy /> {/each} diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte index 6e19cab955b..9bfabe05844 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/BindingsPanel.svelte @@ -1,6 +1,6 @@ @@ -70,7 +78,7 @@ Learn more. - + From b54a9fb4620d6fb128dc08e4102031b70126273b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 21 Jan 2025 14:46:26 +0000 Subject: [PATCH 17/22] Fix TS exports of enums from BBUI, bump portal version --- packages/bbui/package.json | 2 +- .../bbui/src/Actions/position_dropdown.js | 2 +- packages/bbui/src/Icon/Icon.svelte | 7 ++---- packages/bbui/src/Popover/Popover.svelte | 17 ++++---------- packages/bbui/src/Tooltip/AbsTooltip.svelte | 16 +------------ packages/bbui/src/constants.ts | 23 +++++++++++++++++++ packages/bbui/src/index.ts | 12 ++++------ .../components/common/DetailPopover.svelte | 2 +- .../src/components/common/JSONViewer.svelte | 11 +++++---- yarn.lock | 7 +++++- 10 files changed, 49 insertions(+), 50 deletions(-) create mode 100644 packages/bbui/src/constants.ts diff --git a/packages/bbui/package.json b/packages/bbui/package.json index 2caad20bf6d..6809f1ffa58 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -80,7 +80,7 @@ "dayjs": "^1.10.8", "easymde": "^2.16.1", "svelte-dnd-action": "^0.9.8", - "svelte-portal": "^1.0.0" + "svelte-portal": "^2.2.1" }, "resolutions": { "loader-utils": "1.4.1" diff --git a/packages/bbui/src/Actions/position_dropdown.js b/packages/bbui/src/Actions/position_dropdown.js index ee6bc371775..258ce9879df 100644 --- a/packages/bbui/src/Actions/position_dropdown.js +++ b/packages/bbui/src/Actions/position_dropdown.js @@ -1,4 +1,4 @@ -import { PopoverAlignment } from "../Popover/Popover.svelte" +import { PopoverAlignment } from "../constants" // Strategies are defined as [Popover]To[Anchor]. // They can apply for both horizontal and vertical alignment. diff --git a/packages/bbui/src/Icon/Icon.svelte b/packages/bbui/src/Icon/Icon.svelte index a46e558b3aa..c2fe36397b7 100644 --- a/packages/bbui/src/Icon/Icon.svelte +++ b/packages/bbui/src/Icon/Icon.svelte @@ -1,9 +1,6 @@ - diff --git a/yarn.lock b/yarn.lock index 453dc451282..120df5d3f99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18997,11 +18997,16 @@ svelte-loading-spinners@^0.1.1: resolved "https://registry.yarnpkg.com/svelte-loading-spinners/-/svelte-loading-spinners-0.1.7.tgz#3fa6fa0ef67ab635773bf20b07d0b071debbadaa" integrity sha512-EKCId1DjVL2RSUVJJsvtNcqQHox03XIgh4xh/4p7r6ST7d8mut6INY9/LqK4A17PFU64+3quZmqiSfOlf480CA== -svelte-portal@1.0.0, svelte-portal@^1.0.0: +svelte-portal@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-1.0.0.tgz#36a47c5578b1a4d9b4dc60fa32a904640ec4cdd3" integrity sha512-nHf+DS/jZ6jjnZSleBMSaZua9JlG5rZv9lOGKgJuaZStfevtjIlUJrkLc3vbV8QdBvPPVmvcjTlazAzfKu0v3Q== +svelte-portal@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-2.2.1.tgz#b1d7bed78e56318db245996beb5483d8de6b9740" + integrity sha512-uF7is5sM4aq5iN7QF/67XLnTUvQCf2iiG/B1BHTqLwYVY1dsVmTeXZ/LeEyU6dLjApOQdbEG9lkqHzxiQtOLEQ== + svelte-spa-router@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/svelte-spa-router/-/svelte-spa-router-4.0.1.tgz#720ef0cc9a4af33b155812496545c7999483878c" From aa5f5baedd8af0cb5e13ea8fafc5b0db10f850ef Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 21 Jan 2025 15:01:12 +0000 Subject: [PATCH 18/22] Fix AI settings tests --- .../portal/settings/ai/AISettings.spec.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js b/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js index bfd4311aa0c..35f8859cd56 100644 --- a/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js +++ b/packages/builder/src/pages/builder/portal/settings/ai/AISettings.spec.js @@ -40,26 +40,33 @@ function setupEnv(hosting, features = {}, flags = {}) { describe("AISettings", () => { let instance = null + const setupDOM = () => { + instance = render(AISettings, {}) + const modalContainer = document.createElement("div") + modalContainer.classList.add("modal-container") + instance.baseElement.appendChild(modalContainer) + } + afterEach(() => { vi.restoreAllMocks() }) it("that the AISettings is rendered", () => { - instance = render(AISettings, {}) + setupDOM() expect(instance).toBeDefined() }) describe("Licensing", () => { it("should show the premium label on self host for custom configs", async () => { setupEnv(Hosting.Self) - instance = render(AISettings, {}) + setupDOM() const premiumTag = instance.queryByText("Premium") expect(premiumTag).toBeInTheDocument() }) it("should show the enterprise label on cloud for custom configs", async () => { setupEnv(Hosting.Cloud) - instance = render(AISettings, {}) + setupDOM() const enterpriseTag = instance.queryByText("Enterprise") expect(enterpriseTag).toBeInTheDocument() }) @@ -69,7 +76,7 @@ describe("AISettings", () => { let configModal setupEnv(Hosting.Cloud) - instance = render(AISettings) + setupDOM() addConfigurationButton = instance.queryByText("Add configuration") expect(addConfigurationButton).toBeInTheDocument() await fireEvent.click(addConfigurationButton) @@ -86,7 +93,7 @@ describe("AISettings", () => { { customAIConfigsEnabled: true }, { AI_CUSTOM_CONFIGS: true } ) - instance = render(AISettings) + setupDOM() addConfigurationButton = instance.queryByText("Add configuration") expect(addConfigurationButton).toBeInTheDocument() await fireEvent.click(addConfigurationButton) @@ -103,7 +110,7 @@ describe("AISettings", () => { { customAIConfigsEnabled: true }, { AI_CUSTOM_CONFIGS: true } ) - instance = render(AISettings) + setupDOM() addConfigurationButton = instance.queryByText("Add configuration") expect(addConfigurationButton).toBeInTheDocument() await fireEvent.click(addConfigurationButton) From aac4d1e30575752ed6c75dc1b47aaf04e8461fae Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 21 Jan 2025 15:09:38 +0000 Subject: [PATCH 19/22] Fix version of svelte-portal across the board --- packages/builder/package.json | 2 +- yarn.lock | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/builder/package.json b/packages/builder/package.json index 6fcf72c5fb6..0fa46872425 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -81,7 +81,7 @@ "shortid": "2.2.15", "svelte-dnd-action": "^0.9.8", "svelte-loading-spinners": "^0.1.1", - "svelte-portal": "1.0.0", + "svelte-portal": "^2.2.1", "yup": "^0.32.11" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 120df5d3f99..5f5711865b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18997,11 +18997,6 @@ svelte-loading-spinners@^0.1.1: resolved "https://registry.yarnpkg.com/svelte-loading-spinners/-/svelte-loading-spinners-0.1.7.tgz#3fa6fa0ef67ab635773bf20b07d0b071debbadaa" integrity sha512-EKCId1DjVL2RSUVJJsvtNcqQHox03XIgh4xh/4p7r6ST7d8mut6INY9/LqK4A17PFU64+3quZmqiSfOlf480CA== -svelte-portal@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-1.0.0.tgz#36a47c5578b1a4d9b4dc60fa32a904640ec4cdd3" - integrity sha512-nHf+DS/jZ6jjnZSleBMSaZua9JlG5rZv9lOGKgJuaZStfevtjIlUJrkLc3vbV8QdBvPPVmvcjTlazAzfKu0v3Q== - svelte-portal@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/svelte-portal/-/svelte-portal-2.2.1.tgz#b1d7bed78e56318db245996beb5483d8de6b9740" From 27a7c29ac1ad722d8431e22928b2b2ea852fc8d3 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 21 Jan 2025 15:44:29 +0000 Subject: [PATCH 20/22] Increase max length of JSON viewer labels for primitive values --- packages/builder/src/components/common/JSONViewer.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/builder/src/components/common/JSONViewer.svelte b/packages/builder/src/components/common/JSONViewer.svelte index 16c023982bb..79f94387019 100644 --- a/packages/builder/src/components/common/JSONViewer.svelte +++ b/packages/builder/src/components/common/JSONViewer.svelte @@ -243,7 +243,7 @@ } .binding-label.primitive { flex: 0 0 auto; - max-width: 50%; + max-width: 75%; } .binding-value.primitive { flex: 0 1 auto; From f4a10d4f63e3647391d58f20b0ed03123786bb6d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 23 Jan 2025 15:27:33 +0000 Subject: [PATCH 21/22] Move component keyboard handler to allow it to function when bindings or state tabs are active --- .../_components/{ComponentList => }/ComponentKeyHandler.svelte | 0 .../design/[screenId]/_components/ComponentList/index.svelte | 2 -- .../design/[screenId]/_components/LeftPanel.svelte | 2 ++ 3 files changed, 2 insertions(+), 2 deletions(-) rename packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/{ComponentList => }/ComponentKeyHandler.svelte (100%) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/ComponentKeyHandler.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentKeyHandler.svelte similarity index 100% rename from packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/ComponentKeyHandler.svelte rename to packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentKeyHandler.svelte diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte index d97d4e58be7..7636d923de7 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/ComponentList/index.svelte @@ -12,7 +12,6 @@ import ComponentTree from "./ComponentTree.svelte" import { dndStore, DropPosition } from "./dndStore.js" import DNDPositionIndicator from "./DNDPositionIndicator.svelte" - import ComponentKeyHandler from "./ComponentKeyHandler.svelte" import ComponentScrollWrapper from "./ComponentScrollWrapper.svelte" import getScreenContextMenuItems from "./getScreenContextMenuItems" @@ -136,7 +135,6 @@ -