Spaces:
Sleeping
Sleeping
| ICONS = { | |
| "git-merge": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <circle cx="18" cy="18" r="3"></circle> | |
| <circle cx="6" cy="6" r="3"></circle> | |
| <path d="M6 9v6c0 2.2 1.8 4 4 4h4"></path> | |
| <path d="m18 9-6-6"></path> | |
| </svg> | |
| """, | |
| "scatter-chart": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M21 21H3V3"></path> | |
| <circle cx="10" cy="10" r="1"></circle> | |
| <circle cx="17" cy="17" r="1"></circle> | |
| <circle cx="7" cy="17" r="1"></circle> | |
| <circle cx="17" cy="7" r="1"></circle> | |
| </svg> | |
| """, | |
| "link": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path> | |
| <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> | |
| </svg> | |
| """, | |
| "layout-dashboard": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <rect width="7" height="9" x="3" y="3" rx="1"></rect> | |
| <rect width="7" height="5" x="14" y="3" rx="1"></rect> | |
| <rect width="7" height="9" x="14" y="12" rx="1"></rect> | |
| <rect width="7" height="5" x="3" y="16" rx="1"></rect> | |
| </svg> | |
| """, | |
| "table": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M12 3v18"></path> | |
| <rect width="18" height="18" x="3" y="3" rx="2"></rect> | |
| <path d="M3 9h18"></path> | |
| <path d="M3 15h18"></path> | |
| </svg> | |
| """, | |
| "info": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <circle cx="12" cy="12" r="10"></circle> | |
| <path d="M12 16v-4"></path> | |
| <path d="M12 8h.01"></path> | |
| </svg> | |
| """, | |
| "calculator": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <rect width="16" height="20" x="4" y="2" rx="2"></rect> | |
| <line x1="8" x2="16" y1="6" y2="6"></line> | |
| <line x1="12" x2="12" y1="10" y2="18"></line> | |
| <line x1="8" x2="16" y1="14" y2="14"></line> | |
| </svg> | |
| """, | |
| "target": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <circle cx="12" cy="12" r="10"></circle> | |
| <circle cx="12" cy="12" r="6"></circle> | |
| <circle cx="12" cy="12" r="2"></circle> | |
| </svg> | |
| """, | |
| "tag": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z"></path> | |
| <path d="M7 7h.01"></path> | |
| </svg> | |
| """, | |
| "tags": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58"></path> | |
| <path d="M13.29 17.71L21 10V3h-7l-6.29 6.29c-.94.94-.94 2.48 0 3.42l3.58 3.58"></path> | |
| <path d="M7 7h.01"></path> | |
| <path d="M15 15h.01"></path> | |
| </svg> | |
| """, | |
| "trending-up": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <polyline points="22 7 13.5 15.5 8.5 10.5 2 17"></polyline> | |
| <polyline points="16 7 22 7 22 13"></polyline> | |
| </svg> | |
| """, | |
| "search": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <circle cx="11" cy="11" r="8"></circle> | |
| <path d="m21 21-4.3-4.3"></path> | |
| </svg> | |
| """, | |
| "hash": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <line x1="4" x2="20" y1="9" y2="9"></line> | |
| <line x1="4" x2="20" y1="15" y2="15"></line> | |
| <line x1="10" x2="8" y1="3" y2="21"></line> | |
| <line x1="16" x2="14" y1="3" y2="21"></line> | |
| </svg> | |
| """, | |
| "alert-triangle": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path> | |
| <path d="M12 9v4"></path> | |
| <path d="M12 17h.01"></path> | |
| </svg> | |
| """, | |
| "bar-chart-2": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <line x1="18" x2="18" y1="20" y2="10"></line> | |
| <line x1="12" x2="12" y1="20" y2="4"></line> | |
| <line x1="6" x2="6" y1="20" y2="14"></line> | |
| </svg> | |
| """, | |
| "bar-chart": """ | |
| <svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <line x1="12" x2="12" y1="20" y2="10"></line> | |
| <line x1="18" x2="18" y1="20" y2="4"></line> | |
| <line x1="6" x2="6" y1="20" y2="16"></line> | |
| </svg> | |
| """ | |
| } | |
| def lucide_icon(name: str, size: int = 18) -> str: | |
| """ | |
| Return an inline SVG or text placeholder for a Lucide icon. | |
| Looks up the given icon name in the ICONS dictionary and returns | |
| the corresponding SVG string, formatted with the requested size. | |
| If the icon name is not found, falls back to a simple HTML <span> | |
| displaying the icon name text at the same approximate size. | |
| Args: | |
| name (str): The Lucide icon name (e.g., "git-merge", "bar-chart-2"). | |
| size (int): Desired icon size in pixels. Applied to both width and height. | |
| Returns: | |
| str: HTML string containing either the SVG markup or a styled text placeholder. | |
| """ | |
| svg = ICONS.get(name) | |
| if svg: | |
| return svg.format(size=size) | |
| else: | |
| safe = (name or "").replace("<", "<").replace(">", ">") | |
| return f'<span style="font-size:{size}px; line-height:1; opacity:0.75;">{safe}</span>' | |