progress_bar

    public function progress_bar()
    {
        return _class('html')->progress_bar([
            '35',
            [
                'val' => '20',
                'type' => 'warning',
            ],
            [
                'val' => '10',
                'type' => 'info',
            ],
        ], ['type' => 'success']);
    }
    public function progress_bar($data = [], $extra = [])
    {
        if ($this->_is_bs5) {
            return $this->_bs5()->progress_bar($data, $extra);
        }
        $extra['id'] = ($extra['id'] ?? null) ?: __FUNCTION__ . '_' . ($this->_ids[__FUNCTION__] = ($this->_ids[__FUNCTION__] ?? 0) + 1);
        $items = [];
        foreach ((array) $data as $v) {
            if ( ! is_array($v)) {
                $val = $v;
                $v = [];
            } else {
                $val = ($v['val'] ?? null);
            }
            $type = ($v['type'] ?? null) ?: ($extra['type'] ?? null);
            $class_item = ($v['class_item'] ?? null) ?: ($extra['class_item'] ?? null);
            [$striped, $animated, $label] = $this->_progress_bar_item($v, $extra);
            $bar_add = ($striped || $animated) ? ' progress-bar-striped' : '';
            $bar_add .= $animated ? ($this->_is_bs4() ? ' progress-bar-animated' : ' active') : '';
            $items[] = '<div class="progress-bar bar bar-' . $type . ' progress-bar-' . $type . $bar_add . ($class_item ? ' ' . $class_item : '')
                . '" style="width: ' . $val . '%;' . (($v['style'] ?? null) ? ' ' . ($v['style'] ?? null) : '') . '" role="progressbar">' . $label . '</div>';
        }
        $height = $this->_css_length($extra['height'] ?? '');
        return '<div class="progress' . (($extra['class'] ?? null) ? ' ' . ($extra['class'] ?? null) : '') . '" id="' . ($extra['id'] ?? null) . '"'
            . ($height !== '' ? ' style="height: ' . $height . '"' : '') . '>' . implode(PHP_EOL, (array) $items) . '</div>';
    }