From 7b3733d659dc28f689c1144f05051fd4d2d1921a Mon Sep 17 00:00:00 2001 From: Dean Date: Fri, 13 Jan 2023 09:20:55 +0000 Subject: [PATCH 01/11] Merge commit --- .../backend-core/src/events/publishers/user.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/backend-core/src/events/publishers/user.ts b/packages/backend-core/src/events/publishers/user.ts index 2c83b267d6..92bce35896 100644 --- a/packages/backend-core/src/events/publishers/user.ts +++ b/packages/backend-core/src/events/publishers/user.ts @@ -13,6 +13,7 @@ import { UserPermissionAssignedEvent, UserPermissionRemovedEvent, UserUpdatedEvent, + UserOnboardingEvent, } from "@budibase/types" export async function created(user: User, timestamp?: number) { @@ -36,6 +37,21 @@ export async function deleted(user: User) { await publishEvent(Event.USER_DELETED, properties) } +export async function onboardingComplete(user: User) { + const properties: UserOnboardingEvent = { + userId: user._id as string, + } + await publishEvent(Event.USER_ONBOARDING_COMPLETE, properties) +} + +export async function onboardingProgress(user: User, step?: string) { + const properties: UserOnboardingEvent = { + userId: user._id as string, + step, + } + await publishEvent(Event.USER_ONBOARDING_STEP, properties) +} + // PERMISSIONS export async function permissionAdminAssigned(user: User, timestamp?: number) { From 14da8c0c9e0bf789e42aec1bc5e897cc88890dd1 Mon Sep 17 00:00:00 2001 From: Dean Date: Mon, 23 Jan 2023 00:32:01 +0000 Subject: [PATCH 02/11] Added new onboarding tour flow for builder --- .../src/events/publishers/user.ts | 9 +- .../bbui/src/Actions/position_dropdown.js | 17 +- packages/bbui/src/Button/Button.svelte | 2 + packages/bbui/src/Popover/Popover.svelte | 11 +- packages/bbui/src/Tabs/Tab.svelte | 7 +- .../src/builderStore/store/frontend.js | 4 + .../src/components/deploy/DeployModal.svelte | 8 +- .../portal/onboarding/TourPopover.svelte | 164 ++++++++++++++++++ .../portal/onboarding/TourWrap.svelte | 27 +++ .../onboarding/steps/OnboardingData.svelte | 10 ++ .../onboarding/steps/OnboardingDesign.svelte | 10 ++ .../onboarding/steps/OnboardingPublish.svelte | 7 + .../portal/onboarding/steps/index.js | 3 + .../portal/onboarding/tourHandler.js | 47 +++++ .../src/components/portal/onboarding/tours.js | 90 ++++++++++ .../builder/app/[application]/_layout.svelte | 39 ++++- packages/types/src/documents/global/user.ts | 1 + packages/types/src/sdk/events/event.ts | 3 + packages/types/src/sdk/events/user.ts | 5 + packages/worker/src/sdk/users/events.ts | 8 + 20 files changed, 449 insertions(+), 23 deletions(-) create mode 100644 packages/builder/src/components/portal/onboarding/TourPopover.svelte create mode 100644 packages/builder/src/components/portal/onboarding/TourWrap.svelte create mode 100644 packages/builder/src/components/portal/onboarding/steps/OnboardingData.svelte create mode 100644 packages/builder/src/components/portal/onboarding/steps/OnboardingDesign.svelte create mode 100644 packages/builder/src/components/portal/onboarding/steps/OnboardingPublish.svelte create mode 100644 packages/builder/src/components/portal/onboarding/steps/index.js create mode 100644 packages/builder/src/components/portal/onboarding/tourHandler.js create mode 100644 packages/builder/src/components/portal/onboarding/tours.js diff --git a/packages/backend-core/src/events/publishers/user.ts b/packages/backend-core/src/events/publishers/user.ts index 018d90e906..1fe50149b5 100644 --- a/packages/backend-core/src/events/publishers/user.ts +++ b/packages/backend-core/src/events/publishers/user.ts @@ -44,14 +44,6 @@ export async function onboardingComplete(user: User) { await publishEvent(Event.USER_ONBOARDING_COMPLETE, properties) } -export async function onboardingProgress(user: User, step?: string) { - const properties: UserOnboardingEvent = { - userId: user._id as string, - step, - } - await publishEvent(Event.USER_ONBOARDING_STEP, properties) -} - // PERMISSIONS async function permissionAdminAssigned(user: User, timestamp?: number) { @@ -142,6 +134,7 @@ export default { permissionAdminRemoved, permissionBuilderAssigned, permissionBuilderRemoved, + onboardingComplete, invited, inviteAccepted, passwordForceReset, diff --git a/packages/bbui/src/Actions/position_dropdown.js b/packages/bbui/src/Actions/position_dropdown.js index 463b69169f..d04159476c 100644 --- a/packages/bbui/src/Actions/position_dropdown.js +++ b/packages/bbui/src/Actions/position_dropdown.js @@ -1,6 +1,6 @@ export default function positionDropdown( element, - { anchor, align, maxWidth, useAnchorWidth } + { anchor, align, maxWidth, useAnchorWidth, showTip } ) { const update = () => { const anchorBounds = anchor.getBoundingClientRect() @@ -13,6 +13,9 @@ export default function positionDropdown( top: null, } + let popoverLeftPad = 20 + let tipOffset = showTip ? 12.5 : 0 + // Determine vertical styles if (window.innerHeight - anchorBounds.bottom < 100) { styles.top = anchorBounds.top - elementBounds.height - 5 @@ -29,7 +32,16 @@ export default function positionDropdown( styles.minWidth = anchorBounds.width } if (align === "right") { - styles.left = anchorBounds.left + anchorBounds.width - elementBounds.width + let left = + anchorBounds.left + + anchorBounds.width / 2 - + elementBounds.width + + tipOffset + // Accommodate margin on popover: 1.25rem; ~20px + if (left + elementBounds.width + popoverLeftPad > window.innerWidth) { + left -= 20 + } + styles.left = left } else if (align === "right-side") { styles.left = anchorBounds.left + anchorBounds.width } else { @@ -56,6 +68,7 @@ export default function positionDropdown( }) resizeObserver.observe(anchor) resizeObserver.observe(element) + resizeObserver.observe(document.body) document.addEventListener("scroll", update, true) diff --git a/packages/bbui/src/Button/Button.svelte b/packages/bbui/src/Button/Button.svelte index 979ec6a728..b8ffe9f7e6 100644 --- a/packages/bbui/src/Button/Button.svelte +++ b/packages/bbui/src/Button/Button.svelte @@ -15,11 +15,13 @@ export let tooltip = undefined export let dataCy export let newStyles = true + export let id let showTooltip = false + + + + import { Popover, Layout, Heading, Body, Button } from "@budibase/bbui" + import { store } from "builderStore" + import { TOURS } from "./tours.js" + import { goto, layout, isActive } from "@roxi/routify" + + let popoverAnchor + let popover + let tourSteps = null + let tourStep + let tourStepIdx + let lastStep + + $: tourNodes = { ...$store.tourNodes } + $: tourKey = $store.tourKey + $: tourStepKey = $store.tourStepKey + + const initTour = targetKey => { + tourSteps = [...TOURS[targetKey]] + tourStepIdx = 0 + tourStep = { ...tourSteps[tourStepIdx] } + } + + $: initTour(tourKey) + + const updateTourStep = targetStepKey => { + tourStepIdx = getCurrentStepIdx(tourSteps, targetStepKey) + lastStep = tourStepIdx + 1 == tourSteps.length + tourStep = { ...tourSteps[tourStepIdx] } + tourStep.onLoad() + } + + $: updateTourStep(tourStepKey) + + const showPopover = (tourStep, tourNodes, popover) => { + popoverAnchor = tourNodes[tourStep.id] + popover?.show() + } + + $: showPopover(tourStep, tourNodes, popover) + + const navigateStep = step => { + if (step.route) { + const activeNav = $layout.children.find(c => $isActive(c.path)) + if (activeNav) { + store.update(state => { + if (!state.previousTopNavPath) state.previousTopNavPath = {} + state.previousTopNavPath[activeNav.path] = window.location.pathname + $goto(state.previousTopNavPath[step.route] || step.route) + return state + }) + } + } + } + + const nextStep = async () => { + if (!lastStep === true) { + let target = tourSteps[tourStepIdx + 1] + if (target) { + store.update(state => ({ + ...state, + tourStepKey: target.id, + })) + navigateStep(target) + } else { + console.log("Could not retrieve step") + } + } else { + if (typeof tourStep.onComplete === "function") { + tourStep.onComplete() + } + popover.hide() + } + } + + const previousStep = async () => { + if (tourStepIdx > 0) { + let target = tourSteps[tourStepIdx - 1] + if (target) { + store.update(state => ({ + ...state, + tourStepKey: target.id, + })) + navigateStep(target) + } else { + console.log("Could not retrieve step") + } + } + } + + const getCurrentStepIdx = (steps, tourStepKey) => { + if (!steps?.length) { + return + } + if (steps?.length && !tourStepKey) { + return 0 + } + return steps.findIndex(step => step.id === tourStepKey) + } + + +{#key tourStepKey} + + +
+ {tourStep?.title || "-"} +
{`${tourStepIdx + 1}/${tourSteps?.length}`}
+
+ + + {#if tourStep.layout} + + {:else} + {tourStep?.body || ""} + {/if} + + + +
+
+{/key} + + diff --git a/packages/builder/src/components/portal/onboarding/TourWrap.svelte b/packages/builder/src/components/portal/onboarding/TourWrap.svelte new file mode 100644 index 0000000000..5761247ba3 --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/TourWrap.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/builder/src/components/portal/onboarding/steps/OnboardingData.svelte b/packages/builder/src/components/portal/onboarding/steps/OnboardingData.svelte new file mode 100644 index 0000000000..674d5c14ab --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/steps/OnboardingData.svelte @@ -0,0 +1,10 @@ +
+ In this section you can mange the data for your app: +
    +
  • Connect data sources
  • +
  • Edit data
  • +
  • Manage read & write access
  • +
  • Create views
  • +
  • Add bindings
  • +
+
diff --git a/packages/builder/src/components/portal/onboarding/steps/OnboardingDesign.svelte b/packages/builder/src/components/portal/onboarding/steps/OnboardingDesign.svelte new file mode 100644 index 0000000000..84d84777f5 --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/steps/OnboardingDesign.svelte @@ -0,0 +1,10 @@ +
+ After setting up your data, Design is where you build the screens for your + app: +
    +
  • Add screens
  • +
  • Add components
  • +
  • Choose your theme
  • +
  • Edit navigation
  • +
+
diff --git a/packages/builder/src/components/portal/onboarding/steps/OnboardingPublish.svelte b/packages/builder/src/components/portal/onboarding/steps/OnboardingPublish.svelte new file mode 100644 index 0000000000..8913d77482 --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/steps/OnboardingPublish.svelte @@ -0,0 +1,7 @@ +
+ Once you’re happy with your app you can publish it to production! +

+ After publishing, any changes you make will not take affect until you next + publish. +

+
diff --git a/packages/builder/src/components/portal/onboarding/steps/index.js b/packages/builder/src/components/portal/onboarding/steps/index.js new file mode 100644 index 0000000000..8e27748f36 --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/steps/index.js @@ -0,0 +1,3 @@ +export { default as OnboardingData } from "./OnboardingData.svelte" +export { default as OnboardingDesign } from "./OnboardingDesign.svelte" +export { default as OnboardingPublish } from "./OnboardingPublish.svelte" diff --git a/packages/builder/src/components/portal/onboarding/tourHandler.js b/packages/builder/src/components/portal/onboarding/tourHandler.js new file mode 100644 index 0000000000..d4a564f23a --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/tourHandler.js @@ -0,0 +1,47 @@ +import { store } from "builderStore/index" +import { get } from "svelte/store" + +const registerNode = async (node, tourStepKey) => { + if (!node) { + console.log("Tour Handler - an anchor node is required") + } + + if (!get(store).tourKey) { + console.log("Tour Handler - No active tour ", tourStepKey, node) + return + } + + store.update(state => { + const update = { + ...state, + tourNodes: { + ...state.tourNodes, + [tourStepKey]: node, + }, + } + return update + }) +} + +export function tourHandler(node, tourStepKey) { + if (node && tourStepKey) { + registerNode(node, tourStepKey) + } + return { + destroy: () => { + const updatedTourNodes = get(store).tourNodes + if (updatedTourNodes && updatedTourNodes[tourStepKey]) { + delete updatedTourNodes[tourStepKey] + store.update(state => { + const update = { + ...state, + tourNodes: { + ...updatedTourNodes, + }, + } + return update + }) + } + }, + } +} diff --git a/packages/builder/src/components/portal/onboarding/tours.js b/packages/builder/src/components/portal/onboarding/tours.js new file mode 100644 index 0000000000..59f4c8daf9 --- /dev/null +++ b/packages/builder/src/components/portal/onboarding/tours.js @@ -0,0 +1,90 @@ +import { get } from "svelte/store" +import { store } from "builderStore" +import { users, auth } from "stores/portal" +import analytics from "analytics" +import { OnboardingData, OnboardingDesign, OnboardingPublish } from "./steps" +const ONBOARDING_EVENT_PREFIX = "onboarding" + +export const TOUR_STEP_KEYS = { + BUILDER_APP_PUBLISH: "builder-app-publish", + BUILDER_DATA_SECTION: "builder-data-section", + BUILDER_DESIGN_SECTION: "builder-design-section", + BUILDER_AUTOMATE_SECTION: "builder-automate-section", +} + +export const TOUR_KEYS = { + TOUR_BUILDER_ONBOARDING: "builder-onboarding", +} + +const tourEvent = eventKey => { + console.log("Emitting EVENT ", eventKey) + analytics.captureEvent(`${ONBOARDING_EVENT_PREFIX}:${eventKey}`, { + eventSource: EventSource.PORTAL, + }) +} + +const getTours = () => { + return { + [TOUR_KEYS.TOUR_BUILDER_ONBOARDING]: [ + { + id: TOUR_STEP_KEYS.BUILDER_DATA_SECTION, + title: "Data", + route: "/builder/app/:application/data", + layout: OnboardingData, + query: ".topcenternav .spectrum-Tabs-item#builder-data-tab", + onLoad: async () => { + tourEvent(TOUR_STEP_KEYS.BUILDER_DATA_SECTION) + }, + }, + { + id: TOUR_STEP_KEYS.BUILDER_DESIGN_SECTION, + title: "Design", + route: "/builder/app/:application/design", + layout: OnboardingDesign, + query: ".topcenternav .spectrum-Tabs-item#builder-design-tab", + onLoad: () => { + tourEvent(TOUR_STEP_KEYS.BUILDER_DESIGN_SECTION) + }, + }, + { + id: TOUR_STEP_KEYS.BUILDER_AUTOMATE_SECTION, + title: "Automations", + route: "/builder/app/:application/automate", + query: ".topcenternav .spectrum-Tabs-item#builder-automate-tab", + body: "Once you have your app screens made, you can set up automations to fit in with your current workflow", + onLoad: () => { + tourEvent(TOUR_STEP_KEYS.BUILDER_AUTOMATE_SECTION) + }, + }, + { + id: TOUR_STEP_KEYS.BUILDER_APP_PUBLISH, + title: "Publish", + layout: OnboardingPublish, + query: ".toprightnav #builder-app-publish-button", + onLoad: () => { + tourEvent(TOUR_STEP_KEYS.BUILDER_APP_PUBLISH) + }, + onComplete: async () => { + // Mark the users onboarding as complete + // Clear all tour related state + if (get(auth).user) { + await users.save({ + ...get(auth).user, + onboardedAt: new Date().toISOString(), + }) + + store.update(state => ({ + ...state, + tourNodes: null, + tourKey: null, + tourKeyStep: null, + onboarding: false, + })) + } + }, + }, + ], + } +} + +export const TOURS = getTours() diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte index 06ae57fa85..c99776320f 100644 --- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte @@ -1,6 +1,7 @@ diff --git a/packages/builder/src/components/portal/onboarding/tours.js b/packages/builder/src/components/portal/onboarding/tours.js index 6477dc0c96..d483a5af8b 100644 --- a/packages/builder/src/components/portal/onboarding/tours.js +++ b/packages/builder/src/components/portal/onboarding/tours.js @@ -72,11 +72,14 @@ const getTours = () => { onboardedAt: new Date().toISOString(), }) + // Update the cached user + await auth.getSelf() + store.update(state => ({ ...state, - tourNodes: null, - tourKey: null, - tourKeyStep: null, + tourNodes: undefined, + tourKey: undefined, + tourKeyStep: undefined, onboarding: false, })) } From 910a077d19f0fdd632fa062c2d3ff59cfc25c419 Mon Sep 17 00:00:00 2001 From: Dean Date: Mon, 23 Jan 2023 09:59:01 +0000 Subject: [PATCH 05/11] Merge fix --- packages/bbui/src/Form/Core/Picker.svelte | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/bbui/src/Form/Core/Picker.svelte b/packages/bbui/src/Form/Core/Picker.svelte index f0b22e5cca..32cfcf3310 100644 --- a/packages/bbui/src/Form/Core/Picker.svelte +++ b/packages/bbui/src/Form/Core/Picker.svelte @@ -131,25 +131,17 @@ >>>>>> origin/develop bind:this={popover} {open} on:close={() => (open = false)} useAnchorWidth={!autoWidth} maxWidth={autoWidth ? 400 : null} > -<<<<<<< HEAD -
-=======
(open = false)} > ->>>>>>> origin/develop {#if autocomplete} Date: Sun, 29 Jan 2023 21:28:46 +0000 Subject: [PATCH 06/11] Feedback updates --- packages/bbui/src/Actions/position_dropdown.js | 8 ++------ packages/bbui/src/Popover/Popover.svelte | 9 +-------- .../src/components/portal/onboarding/TourPopover.svelte | 4 ++-- .../builder/src/components/portal/onboarding/tours.js | 3 +++ 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/bbui/src/Actions/position_dropdown.js b/packages/bbui/src/Actions/position_dropdown.js index 0187b8600c..09264d5250 100644 --- a/packages/bbui/src/Actions/position_dropdown.js +++ b/packages/bbui/src/Actions/position_dropdown.js @@ -1,6 +1,6 @@ export default function positionDropdown( element, - { anchor, align, maxWidth, useAnchorWidth, showTip } + { anchor, align, maxWidth, useAnchorWidth } ) { const update = () => { if (!anchor) { @@ -17,7 +17,6 @@ export default function positionDropdown( } let popoverLeftPad = 20 - let tipOffset = showTip ? 12.5 : 0 // Determine vertical styles if (window.innerHeight - anchorBounds.bottom < 100) { @@ -36,10 +35,7 @@ export default function positionDropdown( } if (align === "right") { let left = - anchorBounds.left + - anchorBounds.width / 2 - - elementBounds.width + - tipOffset + anchorBounds.left + anchorBounds.width / 2 - elementBounds.width // Accommodate margin on popover: 1.25rem; ~20px if (left + elementBounds.width + popoverLeftPad > window.innerWidth) { left -= 20 diff --git a/packages/bbui/src/Popover/Popover.svelte b/packages/bbui/src/Popover/Popover.svelte index 2dc455dfb5..06721ee816 100644 --- a/packages/bbui/src/Popover/Popover.svelte +++ b/packages/bbui/src/Popover/Popover.svelte @@ -21,9 +21,6 @@ export let useAnchorWidth = false export let dismissible = true - let tipSvg = - ' ' - $: tooltipClasses = showTip ? `spectrum-Popover--withTip spectrum-Popover--${direction}` : "" @@ -73,7 +70,7 @@ align, maxWidth, useAnchorWidth, - showTip, + showTip: false, }} use:clickOutside={{ callback: dismissible ? handleOutsideClick : () => {}, @@ -85,10 +82,6 @@ data-cy={dataCy} transition:fly|local={{ y: -20, duration: 200 }} > - {#if showTip} - {@html tipSvg} - {/if} -
diff --git a/packages/builder/src/components/portal/onboarding/TourPopover.svelte b/packages/builder/src/components/portal/onboarding/TourPopover.svelte index ec9a9a999b..b04c796d04 100644 --- a/packages/builder/src/components/portal/onboarding/TourPopover.svelte +++ b/packages/builder/src/components/portal/onboarding/TourPopover.svelte @@ -110,12 +110,11 @@ {#key tourStepKey} @@ -160,6 +159,7 @@ } :global([data-cy="tour-popover-menu"]) { padding: 10px; + margin-top: var(--spacing-l); } .tour-body :global(.feature-list) { margin-bottom: 0px; diff --git a/packages/builder/src/components/portal/onboarding/tours.js b/packages/builder/src/components/portal/onboarding/tours.js index d483a5af8b..8acd5bb8ce 100644 --- a/packages/builder/src/components/portal/onboarding/tours.js +++ b/packages/builder/src/components/portal/onboarding/tours.js @@ -34,6 +34,7 @@ const getTours = () => { onLoad: async () => { tourEvent(TOUR_STEP_KEYS.BUILDER_DATA_SECTION) }, + align: "left", }, { id: TOUR_STEP_KEYS.BUILDER_DESIGN_SECTION, @@ -44,6 +45,7 @@ const getTours = () => { onLoad: () => { tourEvent(TOUR_STEP_KEYS.BUILDER_DESIGN_SECTION) }, + align: "left", }, { id: TOUR_STEP_KEYS.BUILDER_AUTOMATE_SECTION, @@ -54,6 +56,7 @@ const getTours = () => { onLoad: () => { tourEvent(TOUR_STEP_KEYS.BUILDER_AUTOMATE_SECTION) }, + align: "left", }, { id: TOUR_STEP_KEYS.BUILDER_APP_PUBLISH, From a8656c0f10d602aef896b3435269ac5aa95c834c Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Tue, 31 Jan 2023 16:55:07 +0000 Subject: [PATCH 07/11] v2.2.12-alpha.51 --- lerna.json | 2 +- packages/backend-core/package.json | 4 ++-- packages/bbui/package.json | 4 ++-- packages/builder/package.json | 10 +++++----- packages/cli/package.json | 8 ++++---- packages/client/package.json | 8 ++++---- packages/frontend-core/package.json | 4 ++-- packages/sdk/package.json | 2 +- packages/server/package.json | 10 +++++----- packages/string-templates/package.json | 2 +- packages/types/package.json | 2 +- packages/worker/package.json | 8 ++++---- 12 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 0360b2e821..b24e3bc52c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 81898f6d0b..f891756772 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/backend-core", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase backend core libraries used in server and worker", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -23,7 +23,7 @@ }, "dependencies": { "@budibase/nano": "10.1.1", - "@budibase/types": "2.2.12-alpha.50", + "@budibase/types": "2.2.12-alpha.51", "@shopify/jest-koa-mocks": "5.0.1", "@techpass/passport-openidconnect": "0.3.2", "aws-cloudfront-sign": "2.2.0", diff --git a/packages/bbui/package.json b/packages/bbui/package.json index 18092ae2a5..e3281c05fd 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", @@ -38,7 +38,7 @@ ], "dependencies": { "@adobe/spectrum-css-workflow-icons": "1.2.1", - "@budibase/string-templates": "2.2.12-alpha.50", + "@budibase/string-templates": "2.2.12-alpha.51", "@spectrum-css/accordion": "3.0.24", "@spectrum-css/actionbutton": "1.0.1", "@spectrum-css/actiongroup": "1.0.1", diff --git a/packages/builder/package.json b/packages/builder/package.json index 27ee30f56d..a099c7324b 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "license": "GPL-3.0", "private": true, "scripts": { @@ -71,10 +71,10 @@ } }, "dependencies": { - "@budibase/bbui": "2.2.12-alpha.50", - "@budibase/client": "2.2.12-alpha.50", - "@budibase/frontend-core": "2.2.12-alpha.50", - "@budibase/string-templates": "2.2.12-alpha.50", + "@budibase/bbui": "2.2.12-alpha.51", + "@budibase/client": "2.2.12-alpha.51", + "@budibase/frontend-core": "2.2.12-alpha.51", + "@budibase/string-templates": "2.2.12-alpha.51", "@sentry/browser": "5.19.1", "@spectrum-css/accordion": "^3.0.24", "@spectrum-css/page": "^3.0.1", diff --git a/packages/cli/package.json b/packages/cli/package.json index 19fb9e4df8..627e80225d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "src/index.js", "bin": { @@ -26,9 +26,9 @@ "outputPath": "build" }, "dependencies": { - "@budibase/backend-core": "2.2.12-alpha.50", - "@budibase/string-templates": "2.2.12-alpha.50", - "@budibase/types": "2.2.12-alpha.50", + "@budibase/backend-core": "2.2.12-alpha.51", + "@budibase/string-templates": "2.2.12-alpha.51", + "@budibase/types": "2.2.12-alpha.51", "axios": "0.21.2", "chalk": "4.1.0", "cli-progress": "3.11.2", diff --git a/packages/client/package.json b/packages/client/package.json index 79016b204e..992e107b63 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,9 +19,9 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "2.2.12-alpha.50", - "@budibase/frontend-core": "2.2.12-alpha.50", - "@budibase/string-templates": "2.2.12-alpha.50", + "@budibase/bbui": "2.2.12-alpha.51", + "@budibase/frontend-core": "2.2.12-alpha.51", + "@budibase/string-templates": "2.2.12-alpha.51", "@spectrum-css/button": "^3.0.3", "@spectrum-css/card": "^3.0.3", "@spectrum-css/divider": "^1.0.3", diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index 3821337599..cb94e37af0 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,12 +1,12 @@ { "name": "@budibase/frontend-core", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase frontend core libraries used in builder and client", "author": "Budibase", "license": "MPL-2.0", "svelte": "src/index.js", "dependencies": { - "@budibase/bbui": "2.2.12-alpha.50", + "@budibase/bbui": "2.2.12-alpha.51", "lodash": "^4.17.21", "svelte": "^3.46.2" } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 5b91148966..a0f714cd88 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/sdk", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase Public API SDK", "author": "Budibase", "license": "MPL-2.0", diff --git a/packages/server/package.json b/packages/server/package.json index 94b5f563cf..5eba6f75d4 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -43,11 +43,11 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@budibase/backend-core": "2.2.12-alpha.50", - "@budibase/client": "2.2.12-alpha.50", + "@budibase/backend-core": "2.2.12-alpha.51", + "@budibase/client": "2.2.12-alpha.51", "@budibase/pro": "2.2.12-alpha.50", - "@budibase/string-templates": "2.2.12-alpha.50", - "@budibase/types": "2.2.12-alpha.50", + "@budibase/string-templates": "2.2.12-alpha.51", + "@budibase/types": "2.2.12-alpha.51", "@bull-board/api": "3.7.0", "@bull-board/koa": "3.9.4", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index 21ca20ad27..e268e5bd2a 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/types/package.json b/packages/types/package.json index d7b648264e..cc30804846 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/types", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase types", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/worker/package.json b/packages/worker/package.json index cb98ce525b..e3a5d43928 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "2.2.12-alpha.50", + "version": "2.2.12-alpha.51", "description": "Budibase background service", "main": "src/index.ts", "repository": { @@ -36,10 +36,10 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/backend-core": "2.2.12-alpha.50", + "@budibase/backend-core": "2.2.12-alpha.51", "@budibase/pro": "2.2.12-alpha.50", - "@budibase/string-templates": "2.2.12-alpha.50", - "@budibase/types": "2.2.12-alpha.50", + "@budibase/string-templates": "2.2.12-alpha.51", + "@budibase/types": "2.2.12-alpha.51", "@koa/router": "8.0.8", "@sentry/node": "6.17.7", "@techpass/passport-openidconnect": "0.3.2", From 4ed237ed836b19458e615616a2ca23e281d490af Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Tue, 31 Jan 2023 16:58:46 +0000 Subject: [PATCH 08/11] Update pro version to 2.2.12-alpha.51 --- packages/server/package.json | 2 +- packages/server/yarn.lock | 30 +++++++++++++++--------------- packages/worker/package.json | 2 +- packages/worker/yarn.lock | 30 +++++++++++++++--------------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/server/package.json b/packages/server/package.json index 5eba6f75d4..98a5c50463 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -45,7 +45,7 @@ "@apidevtools/swagger-parser": "10.0.3", "@budibase/backend-core": "2.2.12-alpha.51", "@budibase/client": "2.2.12-alpha.51", - "@budibase/pro": "2.2.12-alpha.50", + "@budibase/pro": "2.2.12-alpha.51", "@budibase/string-templates": "2.2.12-alpha.51", "@budibase/types": "2.2.12-alpha.51", "@bull-board/api": "3.7.0", diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index bdf6187969..16bddaef18 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -1273,13 +1273,13 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.12-alpha.50.tgz#39f228904cf39de2dbb51900df4494267ac72381" - integrity sha512-ysVJ6Eul7o+LZRoilFr7bk1/gkoxSqM30yBbRhKxIhH2IOk0qd9LAaNQiTnwn4ZzU+tJWSkyAsJAQdTnX8/i9g== +"@budibase/backend-core@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.12-alpha.51.tgz#086dd2566be016683e5e3ae4ce8e8996aec35f7b" + integrity sha512-XWsiELOdi+292nTBT2rWz4vc2gs8YfRKKC2TE6a/4cc7kzuX/Sj88cY6l8wHYb1TVlMG+i9gLHRIxaI+w3cb9Q== dependencies: "@budibase/nano" "10.1.1" - "@budibase/types" "2.2.12-alpha.50" + "@budibase/types" "2.2.12-alpha.51" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-cloudfront-sign "2.2.0" @@ -1374,13 +1374,13 @@ qs "^6.11.0" tough-cookie "^4.1.2" -"@budibase/pro@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.12-alpha.50.tgz#599edc75363b323f613a0d56e5173150582b13bb" - integrity sha512-eeKY9P4Zi81AlU6vYWVcffMwkyUrNv6PcNjdKZZNBuIgNfOVejy9vmpIukx43LpHUOsk6FKxHFNVDN1txnYRkg== +"@budibase/pro@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.12-alpha.51.tgz#a0b5dd3d5c023d147f008b0eda05bfa1bcdca56c" + integrity sha512-jBV92QxtQuABLACiLT7iWI9S/yesm+OUKqPAz5hSc9EfqRS4L8jP/OOxoEkhj9lK8vi7qbeHijlarna6JqNnRA== dependencies: - "@budibase/backend-core" "2.2.12-alpha.50" - "@budibase/types" "2.2.12-alpha.50" + "@budibase/backend-core" "2.2.12-alpha.51" + "@budibase/types" "2.2.12-alpha.51" "@koa/router" "8.0.8" bull "4.10.1" joi "17.6.0" @@ -1406,10 +1406,10 @@ svelte-apexcharts "^1.0.2" svelte-flatpickr "^3.1.0" -"@budibase/types@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.12-alpha.50.tgz#ef07d4593c1ea0da6a6b75004d1319d7621cd910" - integrity sha512-LU+G7gQffBvnLvWfzpxUNcrCZFP/ZNQqAjB2KJxgq9pfeynU3MWAwut1tjKpp8eduuu7GnfBT1uvet9jM87FKA== +"@budibase/types@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.12-alpha.51.tgz#2595094cb737397091744515e9b0a9141de5cba9" + integrity sha512-mzsPC8BLaUQwayfqLlv+Q2E986Axh429o+x3r2OhkfaoHyioiE3TBtI7hLHoBExGHm1tKycRQojkRnwcuWHbWQ== "@bull-board/api@3.7.0": version "3.7.0" diff --git a/packages/worker/package.json b/packages/worker/package.json index e3a5d43928..cc39afd0d0 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -37,7 +37,7 @@ "license": "GPL-3.0", "dependencies": { "@budibase/backend-core": "2.2.12-alpha.51", - "@budibase/pro": "2.2.12-alpha.50", + "@budibase/pro": "2.2.12-alpha.51", "@budibase/string-templates": "2.2.12-alpha.51", "@budibase/types": "2.2.12-alpha.51", "@koa/router": "8.0.8", diff --git a/packages/worker/yarn.lock b/packages/worker/yarn.lock index d0a31fc49f..353fe2a698 100644 --- a/packages/worker/yarn.lock +++ b/packages/worker/yarn.lock @@ -470,13 +470,13 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.12-alpha.50.tgz#39f228904cf39de2dbb51900df4494267ac72381" - integrity sha512-ysVJ6Eul7o+LZRoilFr7bk1/gkoxSqM30yBbRhKxIhH2IOk0qd9LAaNQiTnwn4ZzU+tJWSkyAsJAQdTnX8/i9g== +"@budibase/backend-core@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.12-alpha.51.tgz#086dd2566be016683e5e3ae4ce8e8996aec35f7b" + integrity sha512-XWsiELOdi+292nTBT2rWz4vc2gs8YfRKKC2TE6a/4cc7kzuX/Sj88cY6l8wHYb1TVlMG+i9gLHRIxaI+w3cb9Q== dependencies: "@budibase/nano" "10.1.1" - "@budibase/types" "2.2.12-alpha.50" + "@budibase/types" "2.2.12-alpha.51" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-cloudfront-sign "2.2.0" @@ -521,13 +521,13 @@ qs "^6.11.0" tough-cookie "^4.1.2" -"@budibase/pro@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.12-alpha.50.tgz#599edc75363b323f613a0d56e5173150582b13bb" - integrity sha512-eeKY9P4Zi81AlU6vYWVcffMwkyUrNv6PcNjdKZZNBuIgNfOVejy9vmpIukx43LpHUOsk6FKxHFNVDN1txnYRkg== +"@budibase/pro@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.12-alpha.51.tgz#a0b5dd3d5c023d147f008b0eda05bfa1bcdca56c" + integrity sha512-jBV92QxtQuABLACiLT7iWI9S/yesm+OUKqPAz5hSc9EfqRS4L8jP/OOxoEkhj9lK8vi7qbeHijlarna6JqNnRA== dependencies: - "@budibase/backend-core" "2.2.12-alpha.50" - "@budibase/types" "2.2.12-alpha.50" + "@budibase/backend-core" "2.2.12-alpha.51" + "@budibase/types" "2.2.12-alpha.51" "@koa/router" "8.0.8" bull "4.10.1" joi "17.6.0" @@ -535,10 +535,10 @@ lru-cache "^7.14.1" node-fetch "^2.6.1" -"@budibase/types@2.2.12-alpha.50": - version "2.2.12-alpha.50" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.12-alpha.50.tgz#ef07d4593c1ea0da6a6b75004d1319d7621cd910" - integrity sha512-LU+G7gQffBvnLvWfzpxUNcrCZFP/ZNQqAjB2KJxgq9pfeynU3MWAwut1tjKpp8eduuu7GnfBT1uvet9jM87FKA== +"@budibase/types@2.2.12-alpha.51": + version "2.2.12-alpha.51" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.12-alpha.51.tgz#2595094cb737397091744515e9b0a9141de5cba9" + integrity sha512-mzsPC8BLaUQwayfqLlv+Q2E986Axh429o+x3r2OhkfaoHyioiE3TBtI7hLHoBExGHm1tKycRQojkRnwcuWHbWQ== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" From 09ed767d0b28b3b85bc26e7bff3cfe58ffbbb986 Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Tue, 31 Jan 2023 17:18:22 +0000 Subject: [PATCH 09/11] New Help Menu (#9371) * New Help Menu * design PR feedback * Feedback updates * Feedback updates, font awesome enhancement, upgrade button hidden if licensing is disabled --------- Co-authored-by: Dean --- packages/builder/package.json | 3 + packages/builder/src/App.svelte | 2 - .../components/common/FontAwesomeIcon.svelte | 31 + .../src/components/common/HelpIcon.svelte | 42 - .../src/components/common/HelpMenu.svelte | 182 + .../portal/_components/UpgradeButton.svelte | 43 +- .../src/pages/builder/portal/_layout.svelte | 2 + packages/builder/yarn.lock | 4337 +++++++++++------ 8 files changed, 3091 insertions(+), 1551 deletions(-) create mode 100644 packages/builder/src/components/common/FontAwesomeIcon.svelte delete mode 100644 packages/builder/src/components/common/HelpIcon.svelte create mode 100644 packages/builder/src/components/common/HelpMenu.svelte diff --git a/packages/builder/package.json b/packages/builder/package.json index a099c7324b..2fa8c23776 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -75,6 +75,9 @@ "@budibase/client": "2.2.12-alpha.51", "@budibase/frontend-core": "2.2.12-alpha.51", "@budibase/string-templates": "2.2.12-alpha.51", + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/free-brands-svg-icons": "^6.2.1", + "@fortawesome/free-solid-svg-icons": "^6.2.1", "@sentry/browser": "5.19.1", "@spectrum-css/accordion": "^3.0.24", "@spectrum-css/page": "^3.0.1", diff --git a/packages/builder/src/App.svelte b/packages/builder/src/App.svelte index 04846e01bf..f31f45bb84 100644 --- a/packages/builder/src/App.svelte +++ b/packages/builder/src/App.svelte @@ -3,7 +3,6 @@ import { routes } from "../.routify/routes" import { NotificationDisplay, BannerDisplay } from "@budibase/bbui" import { parse, stringify } from "qs" - import HelpIcon from "components/common/HelpIcon.svelte" import LicensingOverlays from "components/portal/licensing/LicensingOverlays.svelte" const queryHandler = { parse, stringify } @@ -15,7 +14,6 @@