$config */ public static function intro(FormNode $parent, array $config = []): FormNode { return FormComponents::intro()->config($config)->mount($parent); } /** * @param array $config * @param callable(FormNode): void $callback */ public static function section(FormNode $parent, array $config, callable $callback): FormNode { return FormComponents::section()->config($config)->body($callback)->mount($parent); } public static function note(FormNode $parent, string $text, string $class = 'help-block color-desc'): FormNode { return FormComponents::note($text)->class($class)->mount($parent); } /** * @param array $config */ public static function readonlyField(FormNode $parent, array $config = []): FormNode { return FormComponents::readonlyField()->config($config)->mount($parent); } /** * @param array $config */ public static function pickerField(FormNode $parent, array $config = []): FormNode { return FormComponents::pickerField()->config($config)->mount($parent); } /** * @param array> $themes * @param array $config */ public static function themePalette(FormNode $parent, array $themes, string $current = '', array $config = []): FormNode { return FormComponents::themePalette($themes, $current)->config($config)->mount($parent); } /** * @param array $theme */ private static function themePreviewStyle(array $theme): string { $styles = []; foreach ([ 'theme-accent' => strval($theme['primary'] ?? ''), 'theme-header' => strval($theme['header'] ?? ''), 'theme-side' => strval($theme['side'] ?? ''), 'theme-surface' => strval($theme['surface'] ?? ''), 'theme-body' => strval($theme['body'] ?? ''), ] as $name => $value) { if ($value !== '') { $styles[] = '--' . $name . ':' . $value; } } return join(';', $styles); } private static function escape(string $content): string { return htmlentities($content, ENT_QUOTES, 'UTF-8'); } }