+
+
+
+ setSpec((current) =>
+ current
+ ? {
+ ...current,
+ theme: {
+ ...current.theme,
+ colors: {
+ ...current.theme.colors,
+ primary: event.target.value,
+ },
+ },
+ }
+ : current
+ )
+ }
+ type="color"
+ value={spec.theme.colors.primary}
+ />
+
+
+
+
+ setSpec((current) =>
+ current
+ ? {
+ ...current,
+ theme: {
+ ...current.theme,
+ colors: {
+ ...current.theme.colors,
+ secondary: event.target.value,
+ },
+ },
+ }
+ : current
+ )
+ }
+ type="color"
+ value={spec.theme.colors.secondary}
+ />
+
+
+
+
+ setSpec((current) =>
+ current
+ ? {
+ ...current,
+ theme: {
+ ...current.theme,
+ colors: {
+ ...current.theme.colors,
+ background: event.target.value,
+ },
+ },
+ }
+ : current
+ )
+ }
+ type="color"
+ value={spec.theme.colors.background}
+ />
+
+
+
+
+ setSpec((current) =>
+ current
+ ? {
+ ...current,
+ theme: {
+ ...current.theme,
+ colors: {
+ ...current.theme.colors,
+ text: event.target.value,
+ },
+ },
+ }
+ : current
+ )
+ }
+ type="color"
+ value={spec.theme.colors.text}
+ />
+
+
+
+
+
+
+
+
+ setSpec((current) =>
+ current
+ ? updateTheme(current, "spacing", event.target.value)
+ : current
+ )
+ }
+ type="number"
+ value={spec.theme.spacing}
+ />
+
+
+
+
+ setSpec((current) =>
+ current
+ ? updateTheme(current, "borderRadius", event.target.value)
+ : current
+ )
+ }
+ type="number"
+ value={spec.theme.borderRadius}
+ />
+
+
+ );
+ }, [spec]);
+
+ return (
+