public function addItem(string $id, string $label, string $uri = null, string $icon = null, array $attributes = []): Menu
    {
        $attributes = Arr::except($attributes, ['label', 'uri']);

        $this->dispatcher->dispatch(new ItemAdding($id, $this->generateMenuItem($this->menuItem)));

        if ($icon && Str::startsWith($icon, 'zmdi-')) {
            $icon = 'zmdi ' . $icon;
        }
        if ($icon && !app('antares.request')->shouldMakeApiResponse()) {
            $label = sprintf('<i class="%s"></i> %s', $icon, $label);
        }

        $item = $this->menuItem->addChild($id, array_merge($attributes, [
            'label' => $label,
            'uri'   => $uri,
            'icon'  => $icon,
        ]));
        $item->setAttributes(array_merge($attributes, ['icon' => $icon]));

        $item->setExtra('safe_label', true);

        $this->dispatcher->dispatch(new ItemAdded($id, $this->generateMenuItem($this->menuItem)));

        return $this;
    }