Site builder: security & data-loss hardening + unified asset picker + audit backlog #3

Merged
jknapp merged 61 commits from builder-hardening-2026-07 into main 2026-07-13 01:13:28 +00:00
Showing only changes of commit 1958b8e0b5 - Show all commits
+3 -11
View File
@@ -1,6 +1,5 @@
import React from 'react';
import { useEditor } from '@craftjs/core';
import { componentResolver } from '../../components/resolver';
import { SiteDesignPanel } from './SiteDesignPanel';
import { useSitesmithModal } from '../../state/SitesmithContext';
import { buildSitesmithTarget } from '../../utils/sitesmith-target';
@@ -31,27 +30,21 @@ import {
================================================================ */
export const GuidedStyles: React.FC = () => {
const resolverMap = componentResolver as Record<string, any>;
const { open: openSitesmith } = useSitesmithModal();
const { query } = useEditor();
const { selected, selectedType, nodeProps, resolvedName } = useEditor((state) => {
const { selected, selectedType, nodeProps } = useEditor((state) => {
const currentNodeId = state.events.selected
? Array.from(state.events.selected)[0]
: undefined;
let selectedType: string | null = null;
let nodeProps: Record<string, any> = {};
let resolvedName: string | null = null;
if (currentNodeId) {
const node = state.nodes[currentNodeId];
if (node) {
selectedType = node.data.displayName || node.data.name || null;
nodeProps = node.data.props || {};
const nodeType = node.data.type as any;
if (nodeType && typeof nodeType === 'object' && nodeType.resolvedName) {
resolvedName = nodeType.resolvedName;
}
}
}
@@ -59,7 +52,6 @@ export const GuidedStyles: React.FC = () => {
selected: currentNodeId || null,
selectedType,
nodeProps,
resolvedName,
};
});
@@ -75,8 +67,8 @@ export const GuidedStyles: React.FC = () => {
const isButton = /^button$/i.test(typeName);
const isImage = /^image$/i.test(typeName);
const isBgSection = /^background section$/i.test(typeName);
const isContainer = /^container$|^section$|^columns$|^header zone$|^footer zone$/i.test(typeName);
const isHero = /hero/i.test(typeName);
const isContainer = /^container$|^section$|^columns$/i.test(typeName);
const isHero = /^hero/i.test(typeName);
const isNav = /^menu$|^logo$|^navbar$|^footer$/i.test(typeName);
const isMedia = /^video$|^gallery$|^map$|^content slider$/i.test(typeName);
const isForm = /^form$|^input$|^textarea$|^subscribe|^contact form$|^submit button$|^search bar$/i.test(typeName);