. Presets live in paths.json (shared with the editor preview).
*
* @var array $settings
* @var string $attrs
* @var array $element
* @var \Zadex\Frontend\Renderer $renderer
*/
if (!defined('ABSPATH')) {
exit;
}
// phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- template variables are local to Zadex\Frontend\Renderer::include_template().
static $zx_paths = null;
if ($zx_paths === null) {
$decoded = wp_json_file_decode(__DIR__ . '/paths.json', ['associative' => true]);
$zx_paths = is_array($decoded) ? $decoded : [];
}
$element_id = preg_replace('/[^a-zA-Z0-9_\-]/', '', (string) ($element['id'] ?? '')) ?: 'tp';
$path_id = 'zx-tp-' . $element_id;
$text = (string) ($settings['text'] ?? '');
$preset = (string) ($settings['path'] ?? 'wave');
$d = '';
$viewbox = '0 0 500 100';
if ($preset === 'custom') {
$raw = trim((string) ($settings['custom_path'] ?? ''));
$d = preg_match('/^[MmZzLlHhVvCcSsQqTtAa0-9\s,.\-+eE]+$/', $raw) ? $raw : '';
$vb = trim((string) ($settings['custom_viewbox'] ?? ''));
$viewbox = preg_match('/^-?\d+(\.\d+)?(\s+-?\d+(\.\d+)?){3}$/', $vb) ? preg_replace('/\s+/', ' ', $vb) : '0 0 500 100';
} else {
$zx_p = $zx_paths[$preset] ?? $zx_paths['wave'] ?? ['d' => 'M0,50 L500,50', 'viewBox' => '0 0 500 100'];
$d = (string) $zx_p['d'];
$viewbox = (string) $zx_p['viewBox'];
}
if ($d === '') {
$d = 'M0,50 L500,50';
}
$offset = $settings['start_offset'] ?? ['size' => 0, 'unit' => '%'];
$offset = is_array($offset) ? (float) ($offset['size'] ?? 0) : (float) $offset;
$offset = max(0, min(100, $offset));
$anchor = in_array($settings['text_anchor'] ?? 'start', ['start', 'middle', 'end'], true) ? $settings['text_anchor'] : 'start';
$direction = ($settings['direction'] ?? 'ltr') === 'rtl' ? 'rtl' : 'ltr';
$zx_link = is_array($settings['link'] ?? null) ? $settings['link'] : [];
$href = isset($zx_link['url']) && is_string($zx_link['url']) ? $zx_link['url'] : '';
$text_svg = '