abrignoni / abrignoni/iLEAPP

Feature: Structured Icon Support in Table Cells (No HTML Escaping)

Offen
#1,443 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
1.2k
Forks
303
Ø Merge
4 Std. 32 Min.
Gemergte PRs (30 T.)
216

Beschreibung

## Background

Some modules currently use **HTML escaping** in the legacy HTML output to render Feather icons in table cells. This works in the HTML renderer but is not something we want to bring into LAVA.

LAVA **will not allow raw HTML injection** from artifact output. Instead we should provide a structured way for modules to request icons in a cell so the renderer can safely convert that to a Feather icon.

Some important factors to consider in how we approach:

- avoid HTML escaping/hacks
- keep React rendering predictable
- keep parsing minimal during table rendering
- maintain a stable contract between modules and renderers

## Proposed Approach

Introduce a **structured icon object** that can be returned in table cells. The renderer can then convert this object into a Feather icon in LAVA.

Example cell value:

```json
{
"icon": {
"name": "alert-triangle",
"color": "#f59e0b",
"size": 16,
"strokeWidth": 2,
"position": "after",
"tooltip": "missing"
},
"content": "Missing attachment"
}
```
Renderer:
- Name is required, all others are optional
- Render the Feather icon
- Render content as text
- Default position is icon before text

This keeps icon rendering entirely within LAVA instead of embedding presentation logic in module output.

## API Helper

Modules should not construct this object directly. Instead we should provide a helper function in the core (ilapfuncs or similar).

Function:
```python
make_icon(icon_name, icon_props=None, content=None, content_type=None)
```

Example usage:
```python
make_icon(
"alert-triangle",
"Missing attachment",
{"color": "#f59e0b"}
)
```

Benefits:

- Centralized schema definition
- Allows future schema changes without breaking modules
- Keeps artifact code simpler
- Ensures consistent structure in output

## Optional Enhancement

With this schema structure, we could allow the content to be output with a designated type of its own from one of our other render types.

Example:
```json
{
"icon": {
"name": "alert-triangle",
"color": "#f59e0b",
"size": 16,
"strokeWidth": 2,
"position": "after",
"tooltip": "missed call"
},
"content": "+12345678900",
"contentType": "phonenumber"
}
```
Example usage:
```python
make_icon(
"alert-triangle",
"+12345678900",
{"color": "#f59e0b", "tooltip": "Missed Call"},
"phonenumber"
)
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.