diff --git a/packages/bbui/src/ActionMenu/ActionMenu.svelte b/packages/bbui/src/ActionMenu/ActionMenu.svelte index f27854bc04..c7427e12d1 100644 --- a/packages/bbui/src/ActionMenu/ActionMenu.svelte +++ b/packages/bbui/src/ActionMenu/ActionMenu.svelte @@ -5,10 +5,10 @@ export let disabled = false export let align = "left" - export let portalTarget + export let portalTarget = undefined export let openOnHover = false - export let animate - export let offset + export let animate = true + export let offset = undefined const actionMenuContext = getContext("actionMenu") diff --git a/packages/bbui/src/Avatar/Avatar.svelte b/packages/bbui/src/Avatar/Avatar.svelte index e1d912ffa4..1ac65c9b9b 100644 --- a/packages/bbui/src/Avatar/Avatar.svelte +++ b/packages/bbui/src/Avatar/Avatar.svelte @@ -14,7 +14,7 @@ export let url = "" export let disabled = false export let initials = "JD" - export let color = null + export let color = "" const DefaultColor = "#3aab87" diff --git a/packages/bbui/src/ColorPicker/ColorPicker.svelte b/packages/bbui/src/ColorPicker/ColorPicker.svelte index a5c619671a..4f5be59def 100644 --- a/packages/bbui/src/ColorPicker/ColorPicker.svelte +++ b/packages/bbui/src/ColorPicker/ColorPicker.svelte @@ -28,23 +28,7 @@ const dispatch = createEventDispatcher() const categories = [ { - label: "Theme", - colors: [ - "gray-50", - "gray-75", - "gray-100", - "gray-200", - "gray-300", - "gray-400", - "gray-500", - "gray-600", - "gray-700", - "gray-800", - "gray-900", - ], - }, - { - label: "Colors", + label: "Theme colors", colors: [ "red-100", "orange-100", @@ -91,6 +75,49 @@ "indigo-700", "magenta-700", + "gray-50", + "gray-75", + "gray-100", + "gray-200", + "gray-300", + "gray-400", + "gray-500", + "gray-600", + "gray-700", + "gray-800", + "gray-900", + ], + }, + { + label: "Static colors", + colors: [ + "static-red-400", + "static-orange-400", + "static-yellow-400", + "static-green-400", + "static-seafoam-400", + "static-blue-400", + "static-indigo-400", + "static-magenta-400", + + "static-red-800", + "static-orange-800", + "static-yellow-800", + "static-green-800", + "static-seafoam-800", + "static-blue-800", + "static-indigo-800", + "static-magenta-800", + + "static-red-1200", + "static-orange-1200", + "static-yellow-1200", + "static-green-1200", + "static-seafoam-1200", + "static-blue-1200", + "static-indigo-1200", + "static-magenta-1200", + "static-white", "static-black", ], @@ -137,10 +164,13 @@ : "var(--spectrum-global-color-gray-50)" } - // Use contrasating check for the dim colours + // Use contrasting check for the dim colours if (value?.includes("-100")) { return "var(--spectrum-global-color-gray-900)" } + if (value?.includes("-1200") || value?.includes("-800")) { + return "var(--spectrum-global-color-static-gray-50)" + } // Use black check for static white if (value?.includes("static-black")) { @@ -169,7 +199,7 @@ - +
{#each categories as category} diff --git a/packages/bbui/src/Form/Core/TextArea.svelte b/packages/bbui/src/Form/Core/TextArea.svelte index 2988723954..30c1993f9b 100644 --- a/packages/bbui/src/Form/Core/TextArea.svelte +++ b/packages/bbui/src/Form/Core/TextArea.svelte @@ -1,24 +1,31 @@
(isFocused = true)} - on:blur={onChange} + on:blur={onBlur} + on:blur on:keypress >{value || ""}
diff --git a/packages/bbui/src/Markdown/MarkdownViewer.svelte b/packages/bbui/src/Markdown/MarkdownViewer.svelte index 2af524fa10..0fd10efadf 100644 --- a/packages/bbui/src/Markdown/MarkdownViewer.svelte +++ b/packages/bbui/src/Markdown/MarkdownViewer.svelte @@ -1,8 +1,8 @@ + + diff --git a/packages/builder/src/components/common/UpdateAppForm.svelte b/packages/builder/src/components/common/UpdateAppForm.svelte index b399d3f063..8d4a0a6e6c 100644 --- a/packages/builder/src/components/common/UpdateAppForm.svelte +++ b/packages/builder/src/components/common/UpdateAppForm.svelte @@ -5,8 +5,8 @@ import { appsStore } from "@/stores/portal" import { API } from "@/api" import { writable } from "svelte/store" - import { createValidationStore } from "@/helpers/validation/yup" - import * as appValidation from "@/helpers/validation/yup/app" + import { createValidationStore } from "@budibase/frontend-core/src/utils/validation/yup" + import * as appValidation from "@budibase/frontend-core/src/utils/validation/yup/app" import EditableIcon from "@/components/common/EditableIcon.svelte" import { isEqual } from "lodash" import { createEventDispatcher } from "svelte" diff --git a/packages/builder/src/components/common/bindings/BindingPanel.svelte b/packages/builder/src/components/common/bindings/BindingPanel.svelte index 8d5a9321ea..3d9d77509e 100644 --- a/packages/builder/src/components/common/bindings/BindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/BindingPanel.svelte @@ -359,6 +359,7 @@ bind:getCaretPosition bind:insertAtPos {completions} + {bindings} {validations} autofocus={autofocusEditor} placeholder={placeholder || @@ -372,6 +373,7 @@ value={jsValue ? decodeJSBinding(jsValue) : ""} on:change={onChangeJSValue} {completions} + {bindings} {validations} mode={EditorModes.JS} bind:getCaretPosition diff --git a/packages/builder/src/components/common/bindings/CodeEditorField.svelte b/packages/builder/src/components/common/bindings/CodeEditorField.svelte index 3a7b388f07..942a6fd1bd 100644 --- a/packages/builder/src/components/common/bindings/CodeEditorField.svelte +++ b/packages/builder/src/components/common/bindings/CodeEditorField.svelte @@ -5,7 +5,10 @@ encodeJSBinding, processObjectSync, } from "@budibase/string-templates" - import { runtimeToReadableBinding } from "@/dataBinding" + import { + runtimeToReadableBinding, + readableToRuntimeBinding, + } from "@/dataBinding" import CodeEditor, { DropdownPosition } from "../CodeEditor/CodeEditor.svelte" import { getHelperCompletions, @@ -123,7 +126,7 @@ } const updateValue = (val: any) => { - dispatch("change", val) + dispatch("change", readableToRuntimeBinding(bindings, val)) } const onChangeJSValue = (e: { detail: string }) => { @@ -144,6 +147,7 @@ on:change={onChangeJSValue} on:blur completions={jsCompletions} + {bindings} mode={EditorModes.JS} bind:getCaretPosition bind:insertAtPos diff --git a/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte b/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte index 8957fa9a77..ae9ff92ecf 100644 --- a/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte +++ b/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte @@ -1,5 +1,5 @@ - - - - Enter your new password below. - - diff --git a/packages/builder/src/components/settings/ProfileModal.svelte b/packages/builder/src/components/settings/ProfileModal.svelte deleted file mode 100644 index 55deb6387a..0000000000 --- a/packages/builder/src/components/settings/ProfileModal.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Personalise the platform by adding your first name and last name. - - - - - diff --git a/packages/builder/src/components/start/CreateAppModal.svelte b/packages/builder/src/components/start/CreateAppModal.svelte index af122ee02e..53548959d1 100644 --- a/packages/builder/src/components/start/CreateAppModal.svelte +++ b/packages/builder/src/components/start/CreateAppModal.svelte @@ -12,8 +12,8 @@ import { appsStore, admin, auth } from "@/stores/portal" import { onMount } from "svelte" import { goto } from "@roxi/routify" - import { createValidationStore } from "@/helpers/validation/yup" - import * as appValidation from "@/helpers/validation/yup/app" + import { createValidationStore } from "@budibase/frontend-core/src/utils/validation/yup" + import * as appValidation from "@budibase/frontend-core/src/utils/validation/yup/app" import TemplateCard from "@/components/common/TemplateCard.svelte" import { lowercase } from "@/helpers" import { sdk } from "@budibase/shared-core" diff --git a/packages/builder/src/components/start/DuplicateAppModal.svelte b/packages/builder/src/components/start/DuplicateAppModal.svelte index 2db6a99762..13712ccbf9 100644 --- a/packages/builder/src/components/start/DuplicateAppModal.svelte +++ b/packages/builder/src/components/start/DuplicateAppModal.svelte @@ -6,9 +6,9 @@ Layout, keepOpen, } from "@budibase/bbui" - import { createValidationStore } from "@/helpers/validation/yup" + import { createValidationStore } from "@budibase/frontend-core/src/utils/validation/yup" import { writable, get } from "svelte/store" - import * as appValidation from "@/helpers/validation/yup/app" + import * as appValidation from "@budibase/frontend-core/src/utils/validation/yup/app" import { appsStore, auth } from "@/stores/portal" import { onMount } from "svelte" import { API } from "@/api" diff --git a/packages/builder/src/components/start/ExportAppModal.svelte b/packages/builder/src/components/start/ExportAppModal.svelte index 88615af44d..608a025e0b 100644 --- a/packages/builder/src/components/start/ExportAppModal.svelte +++ b/packages/builder/src/components/start/ExportAppModal.svelte @@ -9,7 +9,7 @@ notifications, } from "@budibase/bbui" import { downloadFile } from "@budibase/frontend-core" - import { createValidationStore } from "@/helpers/validation/yup" + import { createValidationStore } from "@budibase/frontend-core/src/utils/validation/yup" export let app export let published diff --git a/packages/builder/src/constants/backend/index.ts b/packages/builder/src/constants/backend/index.ts index b7d3f584be..0a1e6b8740 100644 --- a/packages/builder/src/constants/backend/index.ts +++ b/packages/builder/src/constants/backend/index.ts @@ -219,6 +219,7 @@ export const PrettyRelationshipDefinitions = { export const BUDIBASE_INTERNAL_DB_ID = INTERNAL_TABLE_SOURCE_ID export const DEFAULT_BB_DATASOURCE_ID = "datasource_internal_bb_default" +export const DEFAULT_EMPLOYEE_TABLE_ID = "ta_bb_employee" export const BUDIBASE_DATASOURCE_TYPE = "budibase" export const DB_TYPE_INTERNAL = "internal" export const DB_TYPE_EXTERNAL = "external" diff --git a/packages/builder/src/constants/index.ts b/packages/builder/src/constants/index.ts index 3498183c8e..3c3a6888ad 100644 --- a/packages/builder/src/constants/index.ts +++ b/packages/builder/src/constants/index.ts @@ -41,11 +41,6 @@ export const LAYOUT_NAMES = { }, } -// one or more word characters and whitespace -export const APP_NAME_REGEX = /^[\w\s]+$/ -// zero or more non-whitespace characters -export const APP_URL_REGEX = /^[0-9a-zA-Z-_]+$/ - export const DefaultAppTheme = { primaryColor: "var(--spectrum-global-color-blue-600)", primaryColorHover: "var(--spectrum-global-color-blue-500)", diff --git a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte index 737edd69f7..d0cf761c9f 100644 --- a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte @@ -28,13 +28,13 @@ Constants, Utils, RoleUtils, + emailValidator, } from "@budibase/frontend-core" import { sdk } from "@budibase/shared-core" import { API } from "@/api" import GroupIcon from "../../../portal/users/groups/_components/GroupIcon.svelte" import RoleSelect from "@/components/common/RoleSelect.svelte" import UpgradeModal from "@/components/common/users/UpgradeModal.svelte" - import { emailValidator } from "@/helpers/validation" import { fly } from "svelte/transition" import InfoDisplay from "../design/[screenId]/[componentId]/_components/Component/InfoDisplay.svelte" import BuilderGroupPopover from "./BuilderGroupPopover.svelte" diff --git a/packages/builder/src/pages/builder/app/[application]/data/index.svelte b/packages/builder/src/pages/builder/app/[application]/data/index.svelte index 2f40adc162..29eb95cbff 100644 --- a/packages/builder/src/pages/builder/app/[application]/data/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/data/index.svelte @@ -1,13 +1,30 @@ - diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/DesignSection.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/DesignSection.svelte index def1fcf24b..da2530bb26 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/DesignSection.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Component/DesignSection.svelte @@ -2,6 +2,7 @@ import StyleSection from "./StyleSection.svelte" import * as ComponentStyles from "./componentStyles" import ComponentSettingsSection from "./ComponentSettingsSection.svelte" + import ColorPicker from "@/components/design/settings/controls/ColorPicker.svelte" export let componentDefinition export let componentInstance @@ -18,6 +19,19 @@ styles.push(ComponentStyles[style]) } }) + + // Add section for CSS variables if present + if (def?.cssVariables?.length) { + styles.push({ + label: "Customization", + settings: def.cssVariables.map(variable => ({ + label: variable.label, + key: variable.variable, + control: ColorPicker, + })), + }) + } + return styles } diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Navigation/index.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Navigation/index.svelte index cdc0c4056d..e4e4b912f7 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Navigation/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Navigation/index.svelte @@ -8,6 +8,7 @@ Checkbox, notifications, Select, + Stepper, } from "@budibase/bbui" import { themeStore, @@ -182,6 +183,16 @@ options: screenRouteOptions, }} /> + update("logoHeight", height)} + props={{ + updateOnChange: false, + placeholder: "24", + }} + /> { - selectedIndex = search ? 0 : null - componentList = [] if (!structure?.length) { return [] } + search = search?.toLowerCase() + selectedIndex = search ? 0 : null + componentList = [] // Return only items which match the search string let filteredStructure = [] @@ -161,8 +167,12 @@ const name = child.name.toLowerCase() // Check if the component matches the search string - if (search && !name.includes(search.toLowerCase())) { - return false + if (search) { + const nameMatch = name.includes(search) + const aliasMatch = (aliases[name] || []).some(x => x.includes(search)) + if (!nameMatch && !aliasMatch) { + return false + } } // Check if the component is allowed as a child diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json index 84e1bd75b8..d809095dc0 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json @@ -32,8 +32,7 @@ "name": "Basic", "icon": "TextParagraph", "children": [ - "heading", - "text", + "textv2", "button", "buttongroup", "tag", diff --git a/packages/builder/src/pages/builder/app/[application]/index.svelte b/packages/builder/src/pages/builder/app/[application]/index.svelte index 561f6c6478..85fb88728e 100644 --- a/packages/builder/src/pages/builder/app/[application]/index.svelte +++ b/packages/builder/src/pages/builder/app/[application]/index.svelte @@ -1,5 +1,5 @@ diff --git a/packages/builder/src/pages/builder/apps/index.svelte b/packages/builder/src/pages/builder/apps/index.svelte index eaf0f108d8..4f7f9ffdfb 100644 --- a/packages/builder/src/pages/builder/apps/index.svelte +++ b/packages/builder/src/pages/builder/apps/index.svelte @@ -24,13 +24,13 @@ import { goto } from "@roxi/routify" import { AppStatus } from "@/constants" import { gradient } from "@/actions" - import ProfileModal from "@/components/settings/ProfileModal.svelte" - import ChangePasswordModal from "@/components/settings/ChangePasswordModal.svelte" + import { ProfileModal, ChangePasswordModal } from "@budibase/frontend-core" import { processStringSync } from "@budibase/string-templates" import Spaceman from "assets/bb-space-man.svg" import Logo from "assets/bb-emblem.svg" import { UserAvatar } from "@budibase/frontend-core" import { helpers, sdk } from "@budibase/shared-core" + import { API } from "@/api" let loaded = false let userInfoModal @@ -105,8 +105,8 @@
- - + +
userInfoModal.show()}> My profile @@ -201,10 +201,14 @@
- + auth.getSelf()} /> - + auth.getSelf()} + /> {/if} @@ -239,6 +243,7 @@ grid-template-columns: auto auto; place-items: center; grid-gap: var(--spacing-xs); + transition: filter 130ms ease-out; } .avatar:hover { cursor: pointer; diff --git a/packages/builder/src/pages/builder/auth/reset.svelte b/packages/builder/src/pages/builder/auth/reset.svelte index 64438c22d5..ce2063c230 100644 --- a/packages/builder/src/pages/builder/auth/reset.svelte +++ b/packages/builder/src/pages/builder/auth/reset.svelte @@ -8,11 +8,10 @@ notifications, } from "@budibase/bbui" import { goto, params } from "@roxi/routify" - import { auth, organisation } from "@/stores/portal" + import { auth, organisation, admin } from "@/stores/portal" import Logo from "assets/bb-emblem.svg" - import { TestimonialPage } from "@budibase/frontend-core/src/components" + import { TestimonialPage, PasswordRepeatInput } from "@budibase/frontend-core" import { onMount } from "svelte" - import PasswordRepeatInput from "../../../components/common/users/PasswordRepeatInput.svelte" const resetCode = $params["?code"] let form @@ -80,9 +79,9 @@ Reset your password Must contain at least 12 characters