ultimatepos/app/Http/MenuIcons.php

294 lines
17 KiB
PHP

<?php
namespace App\Http;
class MenuIcons
{
protected const SVG_CLASS = 'tw-size-5 tw-shrink-0';
protected static array $paths = [
'home' => '<path d="M5 12l-2 0l9 -9l9 9l-2 0"/><path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7"/><path d="M10 12h4v4h-4z"/>',
'users' => '<path d="M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0"/><path d="M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/><path d="M21 21v-2a4 4 0 0 0 -3 -3.85"/>',
'contacts' => '<path d="M20 6v12a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2z"/><path d="M10 16h6"/><path d="M13 11m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/>',
'products' => '<path d="M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5"/><path d="M12 12l8 -4.5"/><path d="M12 12l0 9"/><path d="M12 12l-8 -4.5"/>',
'warehouse' => '<path d="M3 21h18"/><path d="M5 21v-12l7 -4v16"/><path d="M19 21v-8l-6 -4"/>',
'purchase' => '<path d="M6 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M17 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M17 17h-11v-14h-2"/><path d="M6 5l14 1l-1 7h-13"/>',
'sale' => '<path d="M6 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M17 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M17 17h-11v-10"/><path d="M6 7l14 0"/>',
'pos' => '<path d="M5 7h14"/><path d="M5 11h14"/><path d="M5 15h10"/><path d="M3 5h18v14h-18z"/>',
'expense' => '<path d="M17 8v-3a1 1 0 0 0 -1 -1h-10a2 2 0 0 0 0 4h12a1 1 0 0 1 1 1v3m0 4v3a1 1 0 0 1 -1 1h-12a2 2 0 0 1 -2 -2v-12"/><path d="M7 12l4 4l8 -8"/>',
'account' => '<path d="M17 8v-3a1 1 0 0 0 -1 -1h-10a2 2 0 0 0 0 4h12a1 1 0 0 1 1 1v3m0 4v3a1 1 0 0 1 -1 1h-12a2 2 0 0 1 -2 -2v-12"/>',
'accounting' => '<path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2"/><path d="M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"/><path d="M9 12l2 2l4 -4"/>',
'report' => '<path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2"/><path d="M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"/><path d="M9 17v-5"/><path d="M12 17v-1"/><path d="M15 17v-3"/>',
'settings' => '<path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z"/><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0"/>',
'backup' => '<path d="M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0"/><path d="M4 6v6a8 3 0 0 0 16 0v-6"/><path d="M4 12v6a8 3 0 0 0 16 0v-6"/>',
'modules' => '<path d="M12 4l-8 4l8 4l8 -4l-8 -4"/><path d="M4 12l8 4l8 -4"/><path d="M4 16l8 4l8 -4"/>',
'notification' => '<path d="M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z"/><path d="M3 7l9 6l9 -6"/>',
'dashboard' => '<path d="M4 4h6v8h-6z"/><path d="M4 16h6v4h-6z"/><path d="M14 12h6v8h-6z"/><path d="M14 4h6v4h-6z"/>',
'project' => '<path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2"/><path d="M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"/><path d="M9 12h6"/><path d="M9 16h6"/>',
'task' => '<path d="M9 11l3 3l8 -8"/><path d="M20 12v6a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h9"/>',
'briefcase' => '<path d="M3 7m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z"/><path d="M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2"/><path d="M12 12l0 .01"/>',
'wrench' => '<path d="M7 10h3v-3l-3.5 -3.5a6 6 0 0 1 8 8l6 6a2 2 0 0 1 -3 3l-6 -6a6 6 0 0 1 -8 -8l3.5 3.5"/>',
'toolbox' => '<path d="M3 7h18"/><path d="M5 7l1 12h12l1 -12"/><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"/><path d="M10 12l4 0"/>',
'utility' => '<path d="M7 4h10l-1 2h-8z"/><path d="M6 6v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-11"/><path d="M10 12h4"/><path d="M11 15h2"/>',
'equipment' => '<path d="M3 21h18"/><path d="M5 21v-14l8 -4v18"/><path d="M19 21v-10l-6 -3"/><path d="M9 9v0"/><path d="M9 12v0"/><path d="M9 15v0"/><path d="M9 18v0"/>',
'category' => '<path d="M4 4h6v6h-6z"/><path d="M14 4h6v6h-6z"/><path d="M4 14h6v6h-6z"/><path d="M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"/>',
'calendar' => '<path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z"/><path d="M16 3v4"/><path d="M8 3v4"/><path d="M4 11h16"/>',
'checklist' => '<path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2"/><path d="M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"/><path d="M9 12l2 2l4 -4"/>',
'spare' => '<path d="M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5"/><path d="M12 12l0 9"/>',
'truck' => '<path d="M7 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M17 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M5 17h-2v-11a1 1 0 0 1 1 -1h9v12m-4 0h6m4 0h2v-6h-8m0 -5h5l3 5"/>',
'chat' => '<path d="M8 9h8"/><path d="M8 13h6"/><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z"/>',
'video' => '<path d="M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4z"/><path d="M3 6m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"/>',
'factory' => '<path d="M3 21h18"/><path d="M5 21v-12l5 3v-3l5 3v-3l4 2v10"/>',
'diagram' => '<path d="M6 3m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"/><path d="M9 7h6"/><path d="M9 11h6"/><path d="M9 15h4"/>',
'exchange' => '<path d="M7 10h14l-4 -4"/><path d="M17 14h-14l4 4"/>',
'crm' => '<path d="M18.364 18.364a9 9 0 1 0 -12.728 0"/><path d="M12 13m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"/><path d="M12 15v2"/>',
'portal' => '<path d="M14 3v4a1 1 0 0 0 1 1h4"/><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"/><path d="M9 15h6"/>',
'plug' => '<path d="M9 2l0 6"/><path d="M15 2l0 6"/><path d="M12 17l0 5"/><path d="M7 8l0 4a5 5 0 0 0 10 0l0 -4"/>',
'qrcode' => '<path d="M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"/><path d="M7 17l0 .01"/><path d="M14 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"/><path d="M7 7l0 .01"/><path d="M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"/><path d="M17 7l0 .01"/><path d="M14 14l3 0"/><path d="M20 14l0 .01"/><path d="M14 14l0 3"/><path d="M14 20l3 0"/><path d="M17 17l3 0"/><path d="M20 17l0 3"/>',
'spreadsheet' => '<path d="M14 3v4a1 1 0 0 0 1 1h4"/><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"/><path d="M8 13h2.5a1.5 1.5 0 0 0 0 -3h-2.5v6"/><path d="M14 13h1.5a1.5 1.5 0 0 1 0 3h-1.5v-6"/>',
'ticket' => '<path d="M15 5l0 2"/><path d="M15 11l0 2"/><path d="M15 17l0 2"/><path d="M5 5h14a2 2 0 0 1 2 2v3a2 2 0 0 0 0 4v3a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-3a2 2 0 0 0 0 -4v-3a2 2 0 0 1 2 -2"/>',
'skill' => '<path d="M12 6l4 6l5 -4l-2 10h-14l-2 -10l5 4z"/>',
'score' => '<path d="M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z"/>',
'team' => '<path d="M10 13a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/><path d="M8 21v-1a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v1"/><path d="M15 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/><path d="M17 10h2a2 2 0 0 1 2 2v1"/><path d="M5 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"/><path d="M3 13v-1a2 2 0 0 1 2 -2h2"/>',
'health' => '<path d="M19.5 13.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"/>',
'map' => '<path d="M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0"/><path d="M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0z"/>',
'import' => '<path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2"/><path d="M7 11l5 5l5 -5"/><path d="M12 4l0 12"/>',
'label' => '<path d="M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1"/><path d="M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z"/>',
'brand' => '<path d="M12 3l-8 4.5l0 9l8 4.5l8 -4.5l0 -9l-8 -4.5"/><path d="M12 12l8 -4.5"/><path d="M12 12v9"/><path d="M12 12l-8 -4.5"/>',
'subscription' => '<path d="M12 6m-6 0a6 6 0 1 0 12 0a6 6 0 1 0 -12 0"/><path d="M12 12l0 6"/><path d="M12 9l0 .01"/>',
'shield' => '<path d="M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3"/>',
'history' => '<path d="M12 8v4l3 3"/><path d="M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5"/>',
'filter' => '<path d="M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z"/>',
'folder' => '<path d="M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2"/>',
'megaphone' => '<path d="M18 8a3 3 0 0 1 0 6"/><path d="M10 8v11a1 1 0 0 1 -1 1h-1a1 1 0 0 1 -1 -1v-5"/><path d="M12 8h0l4.524 -3.77a.7 .7 0 0 1 1.046 .636v12.294a.7 .7 0 0 1 -1.046 .636l-4.524 -3.77h-8a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h8"/>',
'payment' => '<path d="M17 8v-3a1 1 0 0 0 -1 -1h-10a2 2 0 0 0 0 4h12a1 1 0 0 1 1 1v3m0 4v3a1 1 0 0 1 -1 1h-12a2 2 0 0 1 -2 -2v-12"/>',
'chip' => '<path d="M9 3v2"/><path d="M15 3v2"/><path d="M9 19v2"/><path d="M15 19v2"/><path d="M3 9h2"/><path d="M3 15h2"/><path d="M19 9h2"/><path d="M19 15h2"/><path d="M7 7h10v10h-10z"/>',
'dots' => '<path d="M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/><path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/><path d="M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/>',
'share' => '<path d="M13 4v4c-6.575 1.028 -9.02 6.788 -10 12c-.977 -4.71 -2.46 -8.958 -6 -10c0 0 3 2.495 7 2c.825 -2.828 2.5 -5.5 5 -7z"/><path d="M16 6h5v5"/>',
'file' => '<path d="M14 3v4a1 1 0 0 0 1 1h4"/><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"/>',
'list' => '<path d="M9 6l11 0"/><path d="M9 12l11 0"/><path d="M9 18l11 0"/><path d="M5 6l0 .01"/><path d="M5 12l0 .01"/><path d="M5 18l0 .01"/>',
'clock' => '<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"/><path d="M12 7v5l3 3"/>',
'default' => '<path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"/>',
];
protected static array $urlHints = [
'dashboard' => 'dashboard',
'users' => 'users',
'roles' => 'shield',
'sales-commission-agents' => 'team',
'supplier' => 'contacts',
'customer' => 'contacts',
'customer-group' => 'category',
'contacts' => 'contacts',
'products' => 'products',
'variation-templates' => 'category',
'import-products' => 'import',
'import-opening-stock' => 'import',
'import-contacts' => 'import',
'import-sales' => 'import',
'labels' => 'label',
'selling-price-group' => 'sale',
'update-product-price' => 'sale',
'units' => 'category',
'taxonomies' => 'category',
'brands' => 'brand',
'warranties' => 'shield',
'inventorymanagement' => 'warehouse',
'stock-transfers' => 'exchange',
'stock-adjustments' => 'warehouse',
'stock-report' => 'report',
'stock-adjustment-report' => 'report',
'business-location' => 'map',
'purchase-requisition' => 'purchase',
'purchase-order' => 'purchase',
'purchases' => 'purchase',
'purchase-return' => 'purchase',
'sales-order' => 'sale',
'sells' => 'sale',
'pos' => 'pos',
'drafts' => 'file',
'quotations' => 'file',
'sell-return' => 'exchange',
'shipments' => 'truck',
'discount' => 'sale',
'subscriptions' => 'subscription',
'expenses' => 'expense',
'expense-categories' => 'category',
'account' => 'account',
'accounting' => 'accounting',
'chart-of-accounts' => 'accounting',
'journal-entry' => 'file',
'opening-balance' => 'accounting',
'transfer' => 'exchange',
'transactions' => 'accounting',
'budget' => 'report',
'cheques' => 'payment',
'installments' => 'payment',
'depreciation' => 'report',
'fiscal-periods' => 'calendar',
'reconciliations' => 'checklist',
'deferred-documents' => 'file',
'bank-loans' => 'payment',
'insurance' => 'shield',
'payroll-tax-table' => 'report',
'payroll' => 'payment',
'reports' => 'report',
'profit-and-loss' => 'report',
'balance-sheet' => 'report',
'cash-flow' => 'report',
'subsidiary-ledger' => 'report',
'gl-tax' => 'report',
'backup' => 'backup',
'manage-modules' => 'modules',
'notification-templates' => 'notification',
'bookings' => 'calendar',
'kitchen' => 'factory',
'orders' => 'list',
'business' => 'settings',
'invoice-schemes' => 'file',
'invoice-layouts' => 'file',
'barcodes' => 'qrcode',
'printers' => 'settings',
'tax-rates' => 'report',
'tables' => 'category',
'modifiers' => 'list',
'types-of-service' => 'list',
'maintenance' => 'wrench',
'equipment' => 'equipment',
'equipment-categories' => 'category',
'production-lines' => 'factory',
'preventive-schedules' => 'calendar',
'overhauls' => 'wrench',
'rebuilds' => 'factory',
'work-orders' => 'checklist',
'spare-parts' => 'spare',
'inspection-visits' => 'checklist',
'failure-reports' => 'report',
'service-records' => 'history',
'part-replacements' => 'exchange',
'checklist-templates' => 'checklist',
'part-catalogs' => 'spare',
'service-providers' => 'team',
'tools' => 'utility',
'field-missions' => 'map',
'dispatch-board' => 'dashboard',
'repair-dispatches' => 'truck',
'service-contracts' => 'file',
'health' => 'health',
'settings' => 'settings',
'calendar' => 'calendar',
'professional-project' => 'briefcase',
'projects' => 'project',
'tasks' => 'task',
'task-statuses' => 'checklist',
'management-tools' => 'briefcase',
'daily-reports' => 'report',
'skills' => 'skill',
'executive-cockpit' => 'dashboard',
'report-analytics' => 'report',
'project-categories' => 'folder',
'task-report' => 'report',
'scores' => 'score',
'score-cards' => 'score',
'my-scores' => 'score',
'urgent-messages' => 'notification',
'team' => 'team',
'tickets' => 'ticket',
'industrial-engineering' => 'diagram',
'item-masters' => 'spare',
'products' => 'products',
'production-lines' => 'factory',
'boms' => 'diagram',
'cost-scenarios' => 'report',
'release-packages' => 'file',
'serialized-units' => 'qrcode',
'installed-assets' => 'equipment',
'serial-search' => 'qrcode',
'sourcing' => 'exchange',
'competitive-intel' => 'report',
'asset-exchange' => 'exchange',
'listings' => 'megaphone',
'appraisals' => 'checklist',
'deals' => 'payment',
'offers' => 'sale',
'pipeline' => 'diagram',
'research-cases' => 'folder',
'price-inquiries' => 'report',
'tms' => 'truck',
'communication' => 'chat',
'chat' => 'chat',
'meetings' => 'video',
'crm' => 'crm',
'portal' => 'portal',
'project' => 'project',
'asset' => 'equipment',
'hrm' => 'team',
'essentials' => 'checklist',
'manufacturing' => 'factory',
'repair' => 'wrench',
'connector' => 'plug',
'docs' => 'file',
'spreadsheet' => 'spreadsheet',
'product-catalogue' => 'qrcode',
'woocommerce' => 'sale',
'cms' => 'portal',
'superadmin' => 'shield',
'subscription' => 'subscription',
'activity-log' => 'history',
'map' => 'map',
'filter' => 'filter',
'utilities' => 'utility',
'utility' => 'utility',
];
public static function svg(string $name, string $class = self::SVG_CLASS): string
{
$paths = self::$paths[$name] ?? self::$paths['default'];
return '<svg aria-hidden="true" class="'.$class.'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/>'.$paths.'</svg>';
}
public static function child(string $name): string
{
return self::svg($name, 'tw-size-4 tw-shrink-0 sidebar-child-icon');
}
public static function resolveFromUrl(?string $url): string
{
if (empty($url) || $url === '#') {
return self::child('default');
}
$path = trim((string) parse_url($url, PHP_URL_PATH), '/');
$segments = array_values(array_filter(explode('/', $path)));
if (str_contains($path, 'management-tools/tools')) {
return self::child('toolbox');
}
if (str_contains($path, 'maintenance/tools')) {
return self::child('utility');
}
foreach (array_reverse($segments) as $segment) {
$segment = strtolower(preg_replace('/[^a-z0-9\-]/', '', $segment) ?? $segment);
if (isset(self::$urlHints[$segment])) {
return self::child(self::$urlHints[$segment]);
}
}
foreach ($segments as $segment) {
$segment = strtolower(preg_replace('/[^a-z0-9\-]/', '', $segment) ?? $segment);
if (isset(self::$urlHints[$segment])) {
return self::child(self::$urlHints[$segment]);
}
}
if (! empty($segments[0]) && isset(self::$urlHints[$segments[0]])) {
return self::child(self::$urlHints[$segments[0]]);
}
return self::child('default');
}
}