diff --git a/apps/builder/app/builder/features/components/components.tsx b/apps/builder/app/builder/features/components/components.tsx index 362ce3f21cf6..21051ca1a801 100644 --- a/apps/builder/app/builder/features/components/components.tsx +++ b/apps/builder/app/builder/features/components/components.tsx @@ -55,6 +55,7 @@ type Meta = { label: string; description: undefined | string; icon?: string; + firstInstance: { component: string; tag?: string }; }; const $metas = computed( @@ -87,6 +88,7 @@ const $metas = computed( order: componentMeta.order, label: getInstanceLabel({ component: name }, componentMeta), description: componentMeta.description, + firstInstance: { component: name }, }); } for (const [name, templateMeta] of templates) { @@ -103,6 +105,7 @@ const $metas = computed( continue; } + availableComponents.add(name); metas.push({ name, category: templateMeta.category ?? "hidden", @@ -113,6 +116,7 @@ const $metas = computed( getInstanceLabel({ component: name }, templateMeta), description: templateMeta.description, icon: templateMeta.icon, + firstInstance: templateMeta.template.instances[0], }); } const metasByCategory = mapGroupBy(metas, (meta) => meta.category); @@ -339,7 +343,7 @@ export const ComponentsPanel = ({ icon={ diff --git a/apps/builder/app/builder/features/settings-panel/controls/tag-control.tsx b/apps/builder/app/builder/features/settings-panel/controls/tag-control.tsx index 993f0e47e37e..2e9acf45b79f 100644 --- a/apps/builder/app/builder/features/settings-panel/controls/tag-control.tsx +++ b/apps/builder/app/builder/features/settings-panel/controls/tag-control.tsx @@ -79,15 +79,15 @@ export const TagControl = ({ meta, prop }: ControlProps<"tag">) => { > {options.length > 10 ? ( - defaultHighlightedIndex={0} getItems={() => options} + itemToString={(item) => item ?? options[0]} + value={value ?? computedTag} + selectedItem={computedTag} + onChange={(value) => setValue(value ?? undefined)} onItemSelect={(item) => { updateTag(item); setValue(undefined); }} - itemToString={(item) => item ?? options[0]} - value={value ?? computedTag} - onChange={(value) => setValue(value ?? undefined)} getDescription={(item) => ( {elementsByTag[item ?? ""]?.description} diff --git a/apps/builder/app/builder/features/settings-panel/controls/text-content.tsx b/apps/builder/app/builder/features/settings-panel/controls/text-content.tsx index be27c01278ae..ae96f3241aa8 100644 --- a/apps/builder/app/builder/features/settings-panel/controls/text-content.tsx +++ b/apps/builder/app/builder/features/settings-panel/controls/text-content.tsx @@ -1,7 +1,15 @@ -import { useId, useMemo } from "react"; +import { useMemo } from "react"; import { useStore } from "@nanostores/react"; import { computed } from "nanostores"; -import { Flex, rawTheme, Text, TextArea } from "@webstudio-is/design-system"; +import { + DialogClose, + DialogMaximize, + DialogTitle, + DialogTitleActions, + Flex, + rawTheme, + Text, +} from "@webstudio-is/design-system"; import type { Instance } from "@webstudio-is/sdk"; import { AlertIcon } from "@webstudio-is/icons"; import { $instances } from "~/shared/nano-states"; @@ -10,6 +18,7 @@ import { BindingPopover, } from "~/builder/shared/binding-popover"; import { updateWebstudioData } from "~/shared/instance-utils"; +import { CodeEditor } from "~/builder/shared/code-editor"; import { type ControlProps, useLocalValue, @@ -55,7 +64,6 @@ export const TextContent = ({ updateChildren(instanceId, "text", value); } }); - const id = useId(); const { scope, aliases } = useStore($selectedInstanceScope); let expression: undefined | string; @@ -107,15 +115,24 @@ export const TextContent = ({ } > -