+ {label ?? (multiple ? "Drag & drop SVG files here, or click to browse" : "Drag & drop a file here, or click to browse")} +
++ Max {(maxFileSizeBytes / (1024 * 1024)).toFixed(0)} MB per file +
+ +{sizeError}
+ )} + + {selectedFiles.length > 0 && ( ++ No icons match your search. +
+ )} + {filtered.map((name) => ( + + ))} ++ {selected.length} icon{selected.length !== 1 ? "s" : ""} selected +
+ )} +{message}
+ +{title}
} +{message}
++ Upload SVG files and package them into a DrawIO shape library. +
++ Extract icons from a DrawIO library as individual SVG files in a ZIP archive. +
++ Leave all unselected to extract every icon. +
++ {icon.name} +
++ {icon.width} × {icon.height} px +
+ {icon.css_classes.length > 0 && ( ++ CSS: {icon.css_classes.join(", ")} +
+ )} +
+ {icon.svg_content}
+
+ )}
+ + View icon cards with SVG previews, dimensions, and CSS class information. +
++ {result.count} icon{result.count !== 1 ? "s" : ""} found +
++ Add, remove, or rename icons in an existing DrawIO library. +
++ {sharedIconNames.length} icons loaded +
+ )} +
+ Split compound SVG paths (multiple M commands) into separate{" "}
+ <path> elements, preserving donut holes.
+
+ {value} +
+{label}
++ Check a DrawIO library for structural and content integrity issues. +
++ {result.checks.icon_count} icons — {result.checks.icons_validated} valid, {result.checks.icons_failed} failed +
+| {label} | ++ + {pass ? "Pass" : "Fail"} + + | +
| Severity | +Icon | +Message | +
|---|---|---|
| + + {issue.severity} + + | +{issue.icon} | +{issue.message} | +