function($prop) { $prop['id'] = !empty($prop['id']) ? $prop['id'] : 'progressbar-'.uniqid(); $prop['style'] = (string)($prop['style'] ?? ''); $prop['item-style'] = (string)($prop['item-style'] ?? ''); $prop['label-style'] = (string)($prop['label-style'] ?? ''); $prop['value-style'] = (string)($prop['value-style'] ?? ''); $prop['bar-style'] = (string)($prop['bar-style'] ?? ''); $prop['items'] = (array)($prop['items'] ?? array()); $default_palette = [ 'var(--success, #10b981)', 'var(--primary, #60a5fa)', 'var(--accent, #22d3ee)', 'var(--warning, #f59e0b)', ]; $auto_color_counter = 0; if(empty($prop['scale'])) $prop['scale'] = []; $layout = first($prop['layout'] ?? false, 'horizontal'); ?>

$bar) { $bar = array_merge($prop['scale'], $bar); $bar['style'] = (string)($bar['style'] ?? ''); $bar['tooltip'] = (string)($bar['tooltip'] ?? ''); $bar['before'] = $bar['before'] ?? ''; $bar['after'] = $bar['after'] ?? ''; $bar['unit'] = (string)($bar['unit'] ?? ''); $bar['color'] = $bar['color'] ?? false; $vrange = (first($bar['max'], 100) - first($bar['min'], 0)); $bar['pct-value'] = clamp(($bar['value'] - first($bar['min'], 0)) / $vrange * 100, 0, 100); if(is_array($bar['color'])) { $color_entry = pick_entry_from_range($bar['color'], $bar['value']); $bar['color'] = $color_entry['color'] ?? false; } if(!$bar['color']) $bar['color'] = first($prop['bar-color'] ?? false, $default_palette[$auto_color_counter++ % sizeof($default_palette)]); ?>
$marker) { $marker_pct = clamp(($marker['value'] - first($bar['min'], 0)) / $vrange * 100, 0, 100); ?>
0) { foreach($prop['items'] as $bar_id => $bar) { $bar = array_merge($prop['scale'], $bar); $bar['style'] = (string)($bar['style'] ?? ''); $bar['tooltip'] = (string)($bar['tooltip'] ?? ''); $bar['before'] = $bar['before'] ?? ''; $bar['after'] = $bar['after'] ?? ''; $bar['unit'] = (string)($bar['unit'] ?? ''); $bar['color'] = $bar['color'] ?? false; $vrange = (first($bar['max'], 100) - first($bar['min'], 0)); $bar['pct-value'] = clamp(($bar['value'] - first($bar['min'], 0)) / $vrange * 100, 0, 100); if(is_array($bar['color'])) { $color_entry = pick_entry_from_range($bar['color'], $bar['value']); $bar['color'] = $color_entry['color'] ?? false; } if(!$bar['color']) $bar['color'] = first($prop['bar-color'] ?? false, $default_palette[$auto_color_counter++ % sizeof($default_palette)]); ?>
$marker) { $marker_pct = clamp(($marker['value'] - first($bar['min'], 0)) / $vrange * 100, 0, 100); ?>