diff --git a/assets/readme/examples/svg-icon-gallery.pdf b/assets/readme/examples/svg-icon-gallery.pdf new file mode 100644 index 000000000..13671a81c Binary files /dev/null and b/assets/readme/examples/svg-icon-gallery.pdf differ diff --git a/examples/README.md b/examples/README.md index c32d4b86c..35b702b03 100644 --- a/examples/README.md +++ b/examples/README.md @@ -89,6 +89,7 @@ are with the canonical DSL, then jump to its detailed section below. |---|---|---| | [Shape containers](#shape-containers) | Circles, ellipses, rounded cards with `ClipPolicy.CLIP_PATH` | [PDF](../assets/readme/examples/shape-container.pdf) · [Source](src/main/java/com/demcha/examples/features/shapes/ShapeContainerExample.java) | | [Vector paths (Bézier)](#vector-paths-bézier) | `addPath(...)` + `SvgPath.parse(...)` — design shapes and imported SVG icons as native curves; zero tessellation | [PDF](../assets/readme/examples/vector-path.pdf) · [Source](src/main/java/com/demcha/examples/features/shapes/VectorPathExample.java) | +| [SVG icon gallery](#svg-icon-gallery) | 34 real-world multicolour svgrepo icons via `SvgIcon.parse` — up to 19 layers each, the whole set 156 KB of sources | [PDF](../assets/readme/examples/svg-icon-gallery.pdf) · [Source](src/main/java/com/demcha/examples/features/svg/SvgIconGalleryExample.java) | | [Advanced tables](#advanced-tables) | Row span, zebra rows, totals, repeating header on page break | [PDF](../assets/readme/examples/table-advanced.pdf) · [Source](src/main/java/com/demcha/examples/features/tables/TableAdvancedExample.java) | | [Barcodes](#barcodes) | QR, Code 128, Code 39, EAN-13, EAN-8, branded QR with theme colours | [PDF](../assets/readme/examples/barcode-showcase.pdf) · [Source](src/main/java/com/demcha/examples/features/barcodes/BarcodeShowcaseExample.java) | | [Charts](#charts) | Native vector bar, line, and pie/donut charts — data/spec/style layers, axis & grid toggles, point markers, value labels, legend | [PDF](../assets/readme/examples/chart-showcase.pdf) · [Source](src/main/java/com/demcha/examples/features/charts/ChartShowcaseExample.java) | @@ -380,6 +381,21 @@ flow.addPath(path -> path [📄 View PDF](../assets/readme/examples/vector-path.pdf) · [📜 Full source](src/main/java/com/demcha/examples/features/shapes/VectorPathExample.java) +### SVG icon gallery + +A stress-test sheet for the beta SVG reader: 34 real-world multicolour +icons (svgrepo.com) parsed by `SvgIcon.parse` and presented as a tile +grid — each icon centred on a rounded card with a label plaque across +the bottom, every layer a native vector path. The entire icon set weighs +156 KB of `.svg` sources; the rendered page is a 70 KB PDF. + +```java +flow.addSvgIcon(SvgIcon.parse(readResource("/icons/apple.svg")), 50); +``` + +[📄 View PDF](../assets/readme/examples/svg-icon-gallery.pdf) · +[📜 Full source](src/main/java/com/demcha/examples/features/svg/SvgIconGalleryExample.java) + ### Advanced tables `DocumentTableCell.rowSpan(int)` mirrors `colSpan(int)`. diff --git a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java index 6930131ac..19697f813 100644 --- a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java +++ b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java @@ -11,6 +11,7 @@ import com.demcha.examples.features.shapes.VectorPathExample; import com.demcha.examples.features.snapshots.LayoutSnapshotRegressionExample; import com.demcha.examples.features.streaming.HttpStreamingExample; +import com.demcha.examples.features.svg.SvgIconGalleryExample; import com.demcha.examples.features.tables.ComposedTableCellExample; import com.demcha.examples.features.tables.TableAdvancedExample; import com.demcha.examples.features.text.InlineShapesExample; @@ -130,6 +131,7 @@ public static void main(String[] args) throws Exception { // v1.5 visual primitives System.out.println("Generated: " + ShapeContainerExample.generate()); System.out.println("Generated: " + VectorPathExample.generate()); + System.out.println("Generated: " + SvgIconGalleryExample.generate()); System.out.println("Generated: " + TransformsExample.generate()); System.out.println("Generated: " + TableAdvancedExample.generate()); diff --git a/examples/src/main/java/com/demcha/examples/features/svg/SvgIconGalleryExample.java b/examples/src/main/java/com/demcha/examples/features/svg/SvgIconGalleryExample.java new file mode 100644 index 000000000..26f0e4a07 --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/features/svg/SvgIconGalleryExample.java @@ -0,0 +1,217 @@ +package com.demcha.examples.features.svg; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.dsl.LayerStackBuilder; +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.dsl.PathBuilder; +import com.demcha.compose.document.dsl.ShapeContainerBuilder; +import com.demcha.compose.document.node.DocumentNode; +import com.demcha.compose.document.node.LayerAlign; +import com.demcha.compose.document.node.TextAlign; +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.style.DocumentTextDecoration; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.document.svg.SvgIcon; +import com.demcha.compose.font.FontName; +import com.demcha.examples.support.ExampleOutputPaths; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +/** + * Runnable stress-test gallery for the beta SVG icon reader: 34 real-world + * multicolour icons (up to 19 layers each) read straight from {@code .svg} + * resources via {@link SvgIcon#parse(String)} and presented as a tile grid — + * each icon centred on a rounded card with a label plaque across the bottom, + * every curve a native PDF Bézier, the whole icon set a fraction of one + * screenshot's weight. + * + *
{@code
+ * flow.addSvgIcon(SvgIcon.read(Path.of("icons/apple.svg")), 52);
+ * }
+ * + *

Icon artwork: svgrepo.com + * collections (see each icon's page for its licence).

+ * + * @author Artem Demchyshyn + */ +public final class SvgIconGalleryExample { + + private static final List ICONS = List.of( + "apple", "avocado", "banana", "boxing", "calendar", + "camera-take-pictures", "chat-chat", "cherry", "diagnosis", "eye-password-eye-password", + "feet", "food", "grape", "headphones-music", "key-password", + "kiwi-fruit", "magnifying-glass-find-search", "microphone-singing", "movie", "peach", + "pencil-revision", "personal-account-account", "picture", "record", "reminder-alert", + "setting", "shopping-cart", "shopping", "social-contact", "starfish", + "steak", "store-homepage-home", "toolbox", "upload"); + + /** Short display labels for the verbose svgrepo file names. */ + private static final Map SHORT_LABELS = Map.ofEntries( + Map.entry("camera-take-pictures", "Camera"), + Map.entry("chat-chat", "Chat"), + Map.entry("eye-password-eye-password", "Eye"), + Map.entry("headphones-music", "Headphones"), + Map.entry("key-password", "Key"), + Map.entry("kiwi-fruit", "Kiwi"), + Map.entry("magnifying-glass-find-search", "Search"), + Map.entry("microphone-singing", "Microphone"), + Map.entry("pencil-revision", "Pencil"), + Map.entry("personal-account-account", "Account"), + Map.entry("reminder-alert", "Reminder"), + Map.entry("shopping-cart", "Cart"), + Map.entry("social-contact", "Contact"), + Map.entry("store-homepage-home", "Store")); + + private static final int COLUMNS = 5; + private static final double CARD_WIDTH = 97; + private static final double CARD_HEIGHT = 84; + private static final double CARD_RADIUS = 9; + private static final double PLAQUE_HEIGHT = 17; + /** Icons contain-fit into this square inside the card body. */ + private static final double ICON_BOX = 44; + + private static final DocumentColor CARD_FILL = DocumentColor.rgb(248, 249, 251); + private static final DocumentColor CARD_BORDER = DocumentColor.rgb(228, 231, 236); + private static final DocumentColor PLAQUE_FILL = DocumentColor.rgb(235, 238, 243); + private static final DocumentColor LABEL_INK = DocumentColor.rgb(82, 90, 102); + private static final DocumentColor MUTED = DocumentColor.rgb(90, 96, 105); + + private static final DocumentTextStyle LABEL_STYLE = DocumentTextStyle.builder() + .fontName(FontName.HELVETICA_BOLD) + .size(6.4) + .decoration(DocumentTextDecoration.BOLD) + .color(LABEL_INK) + .build(); + + private SvgIconGalleryExample() { + } + + /** + * Renders the 34-icon gallery sheet as a uniform card grid. + * + * @return path to the generated PDF + * @throws Exception if rendering or resource IO fails + */ + public static Path generate() throws Exception { + Path pdfFile = ExampleOutputPaths.prepare("features/svg", "svg-icon-gallery.pdf"); + + try (DocumentSession document = GraphCompose.document(pdfFile) + .pageSize(595, 842) + .margin(DocumentInsets.of(34)) + .create()) { + document.pageFlow(page -> { + page.addParagraph(p -> p + .text("SVG icon gallery") + .textStyle(DocumentTextStyle.DEFAULT.withSize(22))); + page.addParagraph(p -> p + .text("34 real-world multicolour icons (svgrepo.com) read by SvgIcon.parse " + + "— every layer a native vector path, the whole set 156 KB of sources.") + .textStyle(DocumentTextStyle.DEFAULT.withSize(9.5).withColor(MUTED)) + .padding(DocumentInsets.bottom(14))); + + for (int start = 0; start < ICONS.size(); start += COLUMNS) { + List chunk = ICONS.subList(start, Math.min(start + COLUMNS, ICONS.size())); + page.addRow(row -> { + row.spacing(10).evenWeights().margin(DocumentInsets.bottom(10)); + for (String name : chunk) { + // Rows host sections; the fixed-size card rides inside one. + row.addSection("Tile" + name.replace('-', '_'), + s -> s.add(card(name))); + } + // Pad the last row so its cells line up with the full rows. + for (int filler = chunk.size(); filler < COLUMNS; filler++) { + row.addSpacer(CARD_WIDTH); + } + }); + } + }); + + document.buildPdf(); + } + + return pdfFile; + } + + /** One tile: rounded card, icon centred in the body, label plaque across the bottom. */ + private static DocumentNode card(String name) { + String id = name.replace('-', '_'); + return new ShapeContainerBuilder() + .name("Card" + id) + .roundedRect(CARD_WIDTH, CARD_HEIGHT, CARD_RADIUS) + .fillColor(CARD_FILL) + .stroke(DocumentStroke.of(CARD_BORDER, 0.8)) + .position(iconStack(name, id), 0, -PLAQUE_HEIGHT / 2.0, LayerAlign.CENTER) + .bottomCenter(plaque(name, id)) + .build(); + } + + /** + * Builds the icon as a standalone layer stack whose box is exactly the + * icon's contain-fit size, so the card's CENTER anchor lands true. + * (The flow-level {@code addSvgIcon(...)} sugar targets flows; a card + * layer needs the node form of the same composition.) + */ + private static DocumentNode iconStack(String name, String id) { + SvgIcon icon = loadIcon(name); + double width = Math.min(ICON_BOX, ICON_BOX * icon.aspectRatio()); + double height = width / icon.aspectRatio(); + LayerStackBuilder stack = new LayerStackBuilder().name("Icon" + id); + for (int i = 0; i < icon.layers().size(); i++) { + SvgIcon.Layer layer = icon.layers().get(i); + stack.layer(new PathBuilder() + .name("SvgLayer" + i) + .size(width, height) + .svg(layer.geometry()) + .fillColor(layer.fill()) + .stroke(layer.stroke()) + .build()); + } + return stack.build(); + } + + /** + * Full-width label band across the card bottom; the card's CLIP_PATH + * rounds its outer corners automatically. + */ + private static DocumentNode plaque(String name, String id) { + return new ShapeContainerBuilder() + .name("Plaque" + id) + .rectangle(CARD_WIDTH, PLAQUE_HEIGHT) + .fillColor(PLAQUE_FILL) + .center(new ParagraphBuilder() + .text(label(name)) + .textStyle(LABEL_STYLE) + .align(TextAlign.CENTER) + .margin(DocumentInsets.zero()) + .build()) + .build(); + } + + private static SvgIcon loadIcon(String name) { + try (InputStream in = Objects.requireNonNull( + SvgIconGalleryExample.class.getResourceAsStream("/icons/" + name + ".svg"), + "icon resource missing: " + name)) { + return SvgIcon.parse(new String(in.readAllBytes(), StandardCharsets.UTF_8)); + } catch (Exception e) { + throw new IllegalStateException("failed to load icon: " + name, e); + } + } + + /** {@code "camera-take-pictures"} → {@code "CAMERA"}; plain names just uppercase. */ + private static String label(String name) { + return SHORT_LABELS.getOrDefault(name, name.replace('-', ' ')).toUpperCase(Locale.ROOT); + } + + public static void main(String[] args) throws Exception { + System.out.println("Generated: " + generate()); + } +} diff --git a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java index 77447fa0d..14ed92b21 100644 --- a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java +++ b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java @@ -95,6 +95,7 @@ record Entry(String title, String description, List tags, String codeUrl feature("tables", "composed-table-cell-showcase", "Composed Table Cells", "DocumentTableCell.node(DocumentNode) — paragraphs, lists, sub-tables inside cells with two-pass measurement.", "tables", "v1.6"); feature("canvas", "canvas-layer-showcase", "Canvas Layer (free-canvas)", "CanvasLayerNode — pixel-precise (x,y) placement of children inside a fixed bounding box.", "canvas", "v1.6", "absolute"); feature("shapes", "shape-container", "Shape-as-Container", "Rounded rect, ellipse, circle containers with ClipPolicy and layered children.", "shapes", "clip"); + feature("svg", "svg-icon-gallery", "SVG Icon Gallery", "34 real-world multicolour svgrepo icons through SvgIcon.parse — native vector layers, the whole set 156 KB of sources.", "svg", "icons", "v1.8"); feature("shapes", "vector-path", "Vector Paths (Bézier)", "addPath(...) — free-form design shapes with native cubic Bézier curves: stroked waves, filled blobs, mixed line/curve ribbons. No tessellation.", "shapes", "bezier", "v1.8"); feature("transforms", "transforms", "Layers + Transforms", "rotate / scale on every leaf builder + LayerStack with explicit z-index.", "transforms", "layers"); feature("text", "rich-text-showcase", "Rich Text", "Inline runs with bold / italic / colour / link options, markdown parsing.", "text", "rich"); @@ -143,6 +144,7 @@ static String groupLabel(String category, String group) { case "features/chrome" -> "PDF Chrome (header / footer / watermark)"; case "features/streaming" -> "Streaming & I/O"; case "features/snapshots" -> "Snapshot Testing"; + case "features/svg" -> "SVG Import"; case "features/debug" -> "Debug & Diagnostics"; case "flagships/default" -> "Flagship Demos"; default -> capitalize(group); diff --git a/examples/src/main/resources/icons/apple.svg b/examples/src/main/resources/icons/apple.svg new file mode 100644 index 000000000..6b4f98197 --- /dev/null +++ b/examples/src/main/resources/icons/apple.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/avocado.svg b/examples/src/main/resources/icons/avocado.svg new file mode 100644 index 000000000..d6f1f6c77 --- /dev/null +++ b/examples/src/main/resources/icons/avocado.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/banana.svg b/examples/src/main/resources/icons/banana.svg new file mode 100644 index 000000000..f5cbee786 --- /dev/null +++ b/examples/src/main/resources/icons/banana.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/boxing.svg b/examples/src/main/resources/icons/boxing.svg new file mode 100644 index 000000000..0be6536fd --- /dev/null +++ b/examples/src/main/resources/icons/boxing.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/calendar.svg b/examples/src/main/resources/icons/calendar.svg new file mode 100644 index 000000000..fc057b752 --- /dev/null +++ b/examples/src/main/resources/icons/calendar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/camera-take-pictures.svg b/examples/src/main/resources/icons/camera-take-pictures.svg new file mode 100644 index 000000000..44b25d93a --- /dev/null +++ b/examples/src/main/resources/icons/camera-take-pictures.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/chat-chat.svg b/examples/src/main/resources/icons/chat-chat.svg new file mode 100644 index 000000000..15129fe87 --- /dev/null +++ b/examples/src/main/resources/icons/chat-chat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/cherry.svg b/examples/src/main/resources/icons/cherry.svg new file mode 100644 index 000000000..5938e47f9 --- /dev/null +++ b/examples/src/main/resources/icons/cherry.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/diagnosis.svg b/examples/src/main/resources/icons/diagnosis.svg new file mode 100644 index 000000000..5c64daf7d --- /dev/null +++ b/examples/src/main/resources/icons/diagnosis.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/eye-password-eye-password.svg b/examples/src/main/resources/icons/eye-password-eye-password.svg new file mode 100644 index 000000000..0774698b0 --- /dev/null +++ b/examples/src/main/resources/icons/eye-password-eye-password.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/feet.svg b/examples/src/main/resources/icons/feet.svg new file mode 100644 index 000000000..93d32839f --- /dev/null +++ b/examples/src/main/resources/icons/feet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/food.svg b/examples/src/main/resources/icons/food.svg new file mode 100644 index 000000000..cc5c0f2f7 --- /dev/null +++ b/examples/src/main/resources/icons/food.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/grape.svg b/examples/src/main/resources/icons/grape.svg new file mode 100644 index 000000000..e95d8cdd1 --- /dev/null +++ b/examples/src/main/resources/icons/grape.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/headphones-music.svg b/examples/src/main/resources/icons/headphones-music.svg new file mode 100644 index 000000000..7927ad9d8 --- /dev/null +++ b/examples/src/main/resources/icons/headphones-music.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/key-password.svg b/examples/src/main/resources/icons/key-password.svg new file mode 100644 index 000000000..4577c88e0 --- /dev/null +++ b/examples/src/main/resources/icons/key-password.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/kiwi-fruit.svg b/examples/src/main/resources/icons/kiwi-fruit.svg new file mode 100644 index 000000000..8d47319f6 --- /dev/null +++ b/examples/src/main/resources/icons/kiwi-fruit.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/magnifying-glass-find-search.svg b/examples/src/main/resources/icons/magnifying-glass-find-search.svg new file mode 100644 index 000000000..8ef3d4e2f --- /dev/null +++ b/examples/src/main/resources/icons/magnifying-glass-find-search.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/microphone-singing.svg b/examples/src/main/resources/icons/microphone-singing.svg new file mode 100644 index 000000000..f9c8c5229 --- /dev/null +++ b/examples/src/main/resources/icons/microphone-singing.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/movie.svg b/examples/src/main/resources/icons/movie.svg new file mode 100644 index 000000000..a1eb0d89f --- /dev/null +++ b/examples/src/main/resources/icons/movie.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/peach.svg b/examples/src/main/resources/icons/peach.svg new file mode 100644 index 000000000..443130386 --- /dev/null +++ b/examples/src/main/resources/icons/peach.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/pencil-revision.svg b/examples/src/main/resources/icons/pencil-revision.svg new file mode 100644 index 000000000..f3dbbd354 --- /dev/null +++ b/examples/src/main/resources/icons/pencil-revision.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/personal-account-account.svg b/examples/src/main/resources/icons/personal-account-account.svg new file mode 100644 index 000000000..bb28eac73 --- /dev/null +++ b/examples/src/main/resources/icons/personal-account-account.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/picture.svg b/examples/src/main/resources/icons/picture.svg new file mode 100644 index 000000000..a98011f2a --- /dev/null +++ b/examples/src/main/resources/icons/picture.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/record.svg b/examples/src/main/resources/icons/record.svg new file mode 100644 index 000000000..13aeec034 --- /dev/null +++ b/examples/src/main/resources/icons/record.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/reminder-alert.svg b/examples/src/main/resources/icons/reminder-alert.svg new file mode 100644 index 000000000..1303469cc --- /dev/null +++ b/examples/src/main/resources/icons/reminder-alert.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/setting.svg b/examples/src/main/resources/icons/setting.svg new file mode 100644 index 000000000..1734f0892 --- /dev/null +++ b/examples/src/main/resources/icons/setting.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/shopping-cart.svg b/examples/src/main/resources/icons/shopping-cart.svg new file mode 100644 index 000000000..e27baf434 --- /dev/null +++ b/examples/src/main/resources/icons/shopping-cart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/shopping.svg b/examples/src/main/resources/icons/shopping.svg new file mode 100644 index 000000000..722f1ca2a --- /dev/null +++ b/examples/src/main/resources/icons/shopping.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/social-contact.svg b/examples/src/main/resources/icons/social-contact.svg new file mode 100644 index 000000000..69776d115 --- /dev/null +++ b/examples/src/main/resources/icons/social-contact.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/starfish.svg b/examples/src/main/resources/icons/starfish.svg new file mode 100644 index 000000000..fe5103665 --- /dev/null +++ b/examples/src/main/resources/icons/starfish.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/steak.svg b/examples/src/main/resources/icons/steak.svg new file mode 100644 index 000000000..098a2ee6f --- /dev/null +++ b/examples/src/main/resources/icons/steak.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/store-homepage-home.svg b/examples/src/main/resources/icons/store-homepage-home.svg new file mode 100644 index 000000000..7f9468193 --- /dev/null +++ b/examples/src/main/resources/icons/store-homepage-home.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/toolbox.svg b/examples/src/main/resources/icons/toolbox.svg new file mode 100644 index 000000000..dbfe9b877 --- /dev/null +++ b/examples/src/main/resources/icons/toolbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/src/main/resources/icons/upload.svg b/examples/src/main/resources/icons/upload.svg new file mode 100644 index 000000000..3b0ce8dd8 --- /dev/null +++ b/examples/src/main/resources/icons/upload.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file