Compare commits

..

23 Commits

Author SHA1 Message Date
forbes
84b69b935b fix(build): remove non-existent SelectModule.h include in FileOrigin.cpp
Some checks failed
Build and Test / build (push) Failing after 19m45s
Release Build / publish-release (push) Has been skipped
Release Build / build-linux (push) Failing after 31m20s
SelectModule is declared in FileDialog.h which was already included.
The separate #include "SelectModule.h" referenced a header that
doesn't exist, causing a fatal build error.
2026-02-05 16:53:14 -06:00
a6e84552da feat(gui): add cross-origin detection in StdCmdSaveAs (#17)
Some checks failed
Build and Test / build (push) Failing after 12m50s
- Detect document's origin vs current (target) origin
- Route to appropriate workflow:
  - Same origin: standard SaveAs
  - Local → PLM: migration (handled by PLM origin)
  - PLM → Local: export (handled by local origin)
  - PLM → PLM: transfer (handled by target PLM origin)

This provides the infrastructure for Issue #17: Mixed origin workflows.
The actual migration/export dialogs will be implemented in the
respective origin adapters (SiloOrigin, LocalFileOrigin).
2026-02-05 14:54:36 -06:00
015df38328 feat(gui): add document-origin tracking and display in window title (#16)
Some checks failed
Build and Test / build (push) Has been cancelled
- Add originForDocument(), setDocumentOrigin(), clearDocumentOrigin()
  methods to OriginManager
- Add signalDocumentOriginChanged signal for UI updates
- Add document-to-origin tracking map in OriginManager
- Update MDIView::buildWindowTitle() to append origin suffix for
  non-local origins (e.g., 'Part001 [Silo]')

This implements Issue #16: Document origin tracking and display
2026-02-05 14:53:45 -06:00
db85277f26 feat(gui): add OriginManagerDialog for managing file origins (#15)
Some checks failed
Build and Test / build (push) Has been cancelled
- Create OriginManagerDialog with list of configured origins
- Show connection status for remote origins
- Allow setting default origin
- Add/Edit/Remove buttons (Add/Edit show placeholder for now)
- Wire up 'Manage Origins...' button in OriginSelectorWidget
- Prevent removal of built-in local origin

Part of Issue #15: Multi-instance Silo configuration UI
2026-02-05 14:51:30 -06:00
679aaec6d4 feat(gui): add unified origin commands for PLM operations (#14)
Some checks are pending
Build and Test / build (push) Has started running
- Create CommandOrigin.cpp with Origin_Commit, Origin_Pull, Origin_Push,
  Origin_Info, Origin_BOM commands
- Commands delegate to current origin's extended operations
- Commands auto-disable based on origin capabilities (supportsRevisions,
  supportsBOM, supportsPartNumbers)
- Add 'Origin Tools' toolbar with PLM operations
- Add origin commands to File menu
- Register commands via CreateOriginCommands() in Application startup

This implements Issue #14: Dynamic toolbar extension for Silo commands
2026-02-05 14:49:22 -06:00
deeb6376f7 feat(gui): add OriginSelectorWidget for file origin selection (#13)
Some checks failed
Build and Test / build (push) Has been cancelled
- Create OriginSelectorWidget class (QToolButton with dropdown menu)
- Add OriginSelectorAction to create widget in toolbars
- Add Std_Origin command registered in CommandStd.cpp
- Add widget to File toolbar (before New/Open/Save)
- Connect to OriginManager fastsignals for origin changes
- Add Catppuccin Mocha styling for the widget
- Widget shows current origin name/icon with connection status overlay

This implements Issue #13: Origin selector toolbar widget
2026-02-05 14:47:18 -06:00
103fc28bc6 ci: retrigger after pushing silo submodule
Some checks failed
Build and Test / build (push) Has been cancelled
2026-02-05 14:35:59 -06:00
79c85ed2e5 fix(gui): add interactive methods to FileOriginPython and fix Console API calls
Some checks failed
Build and Test / build (push) Failing after 2m13s
- Add openDocumentInteractive() and saveDocumentAsInteractive() to FileOriginPython
- Fix Console API: Warning -> warning, Error -> error in OriginManager.cpp
- These methods bridge Python origins to the new interactive document operations
2026-02-05 14:25:21 -06:00
38358e431d feat(gui): implement issues #10 and #12 - LocalFileOrigin and Std_* delegation
Issue #10: Local filesystem origin implementation
- Add openDocumentInteractive() method to FileOrigin interface for UI-based
  file opening (shows file dialog)
- Add saveDocumentAsInteractive() method for UI-based save as
- Implement LocalFileOrigin::openDocumentInteractive() with full file dialog
  support, filter list building, and module handler integration
- Implement LocalFileOrigin::saveDocumentAsInteractive() delegating to
  Gui::Document::saveAs()

Issue #12: Modify Std_* commands to delegate to current origin
- StdCmdNew::activated() now delegates to origin->newDocument() and sets
  up view orientation for the new document
- StdCmdOpen::activated() delegates to origin->openDocumentInteractive()
  with connection state checking for authenticated origins
- StdCmdSave::activated() uses document's owning origin (via findOwningOrigin)
  for save, falling back to saveDocumentAsInteractive if no filename
- StdCmdSaveAs::activated() delegates to origin->saveDocumentAsInteractive()
- Updated isActive() methods to check for active document

The Std_* commands now work seamlessly with both LocalFileOrigin and
SiloOrigin. When Local origin is selected, standard file dialogs appear.
When Silo origin is selected, Silo's search/creation dialogs appear.

Import and Export commands are left unchanged as they operate on document
content rather than document lifecycle.

Closes #10, Closes #12
2026-02-05 14:02:26 -06:00
5319387030 fix(ci): add --force to tag fetch, fix ccache keys, disable Windows/macOS builds
Some checks failed
Build and Test / build (push) Failing after 16m39s
Release Build / publish-release (push) Has been cancelled
Release Build / build-linux (push) Has been cancelled
- build.yml: Add --force flag to tag fetch to prevent 'would clobber
  existing tag' error when 'latest' tag already exists locally
- build.yml: Use github.run_id instead of github.sha for ccache keys
  to ensure unique keys per workflow run while still benefiting from
  restore-key prefix matching

- release.yml: Add --force flag to tag fetch commands
- release.yml: Use github.run_id for ccache keys (same reason)
- release.yml: Comment out build-macos and build-windows jobs since
  no native runners are available for these platforms
- release.yml: Update publish-release to only depend on build-linux
- release.yml: Update release notes to indicate macOS/Windows builds
  are not yet available

The ccache key strategy now works correctly with immutable caches:
- Save with unique key: ccache-{workflow}-{branch}-{run_id}
- Restore with prefix fallback: tries same branch first, then main

The macOS and Windows jobs require platform-specific tooling:
- macOS: dmgbuild, pyobjc-framework-Quartz for DMG creation
- Windows: NSIS, Visual Studio toolchain for installer creation

These cannot be easily cross-compiled from Linux. The jobs are
preserved as comments so they can be re-enabled when native runners
become available or when cross-compilation tooling is set up.
2026-02-05 13:41:07 -06:00
405e04bd3e chore: update silo submodule with origin adapter
Some checks are pending
Build and Test / build (push) Has started running
Updates silo submodule to include:
- SiloOrigin adapter implementing FileOrigin interface (#11)
- UUID tracking via SiloItemId property
- Automatic origin registration on workbench init

Refs: #11
2026-02-05 13:29:54 -06:00
7535a48ec4 feat(gui): add origin abstraction layer for unified file operations
Implements Issue #9: Origin abstraction layer

This commit introduces a foundational abstraction for document origins,
enabling FreeCAD to work with different storage backends (local filesystem,
Silo PLM, future cloud services) through a unified interface.

## Core Components

### FileOrigin Abstract Base Class (FileOrigin.h/cpp)
- Defines interface for document origin handlers
- Identity methods: id(), name(), nickname(), icon(), type()
- Workflow characteristics: tracksExternally(), requiresAuthentication()
- Capability queries: supportsRevisions(), supportsBOM(), supportsPartNumbers()
- Connection state management with fastsignals notifications
- Document identity: documentIdentity() returns UUID, documentDisplayId() for display
- Property sync: syncProperties() for bidirectional database sync
- Core operations: newDocument(), openDocument(), saveDocument(), saveDocumentAs()
- Extended PLM operations: commitDocument(), pullDocument(), pushDocument(), etc.

### LocalFileOrigin Implementation
- Default origin for local filesystem documents
- ownsDocument(): Returns true if document has NO SiloItemId property
- Wraps existing FreeCAD file operations (App::GetApplication())

### OriginManager Singleton (OriginManager.h/cpp)
- Follows WorkbenchManager pattern (instance()/destruct())
- Manages registered FileOrigin instances
- Tracks current origin selection with persistence
- Provides document-to-origin resolution via findOwningOrigin()
- Emits signals: signalOriginRegistered, signalOriginUnregistered,
  signalCurrentOriginChanged
- Preferences stored at: User parameter:BaseApp/Preferences/General/Origin

### Python Bindings (FileOriginPython.h/cpp)
- Adapts Python objects to FileOrigin C++ interface
- Enables Silo addon to implement origins in Python
- Thread-safe with Base::PyGILStateLocker
- Static addOrigin()/removeOrigin() for registration

### Python API (ApplicationPy.cpp)
- FreeCADGui.addOrigin(obj) - Register Python origin
- FreeCADGui.removeOrigin(obj) - Unregister Python origin
- FreeCADGui.getOrigin(id) - Get origin info as dict
- FreeCADGui.listOrigins() - List all registered origin IDs
- FreeCADGui.activeOrigin() - Get current origin info
- FreeCADGui.setActiveOrigin(id) - Set active origin

## Design Decisions

1. **UUID Tracking**: Documents tracked by SiloItemId (immutable UUID),
   SiloPartNumber used for human-readable display only

2. **Ownership by Properties**: Origin ownership determined by document
   properties (SiloItemId), not file path location

3. **Local Storage Always**: All documents saved locally; origins change
   workflow and identity model, not storage location

4. **Property Syncing**: syncProperties() enables bidirectional sync of
   document metadata with database (Description, SourcingType, etc.)

## Files Added
- src/Gui/FileOrigin.h
- src/Gui/FileOrigin.cpp
- src/Gui/FileOriginPython.h
- src/Gui/FileOriginPython.cpp
- src/Gui/OriginManager.h
- src/Gui/OriginManager.cpp

## Files Modified
- src/Gui/CMakeLists.txt - Added new source files
- src/Gui/Application.cpp - Initialize/destruct OriginManager
- src/Gui/ApplicationPy.h - Added Python method declarations
- src/Gui/ApplicationPy.cpp - Added Python method implementations

Refs: #9
2026-02-05 13:17:23 -06:00
1c309a0ca8 feat(icons): complete Phase 3 icon migration (#6)
All checks were successful
Build and Test / build (push) Successful in 1h13m23s
This completes the Kindred Create icon set with 191 Catppuccin Mocha themed SVG icons.

New icon categories added:
- DrawStyle icons (7): Wireframe, Shaded, FlatLines, etc.
- View orientation icons (12): Front, Rear, Top, Bottom, etc.
- Tree view icons (15): Tree_*, tree-* for document tree
- Link & Feature icons (14): Link*, Feature, Group, etc.
- Button/navigation icons (11): button_*, edit_OK, edit_Cancel
- Cursor icons (4): pan, rotate, zoom, through
- Selection icons (8): edge, face, vertex, clear-selection
- DAG view icons (4): Pass, Fail, Pending, Visible
- Std_* view/toggle icons (15): ShowObjects, HideObjects, etc.
- Utility icons (25+): Document, folder, info, Warning, etc.

All icons follow the design standards:
- 32x32 viewBox with rx=4 rounded background
- Catppuccin Mocha color palette
- Category-based color coding:
  - Blue: File operations
  - Green: Edit/Creation operations
  - Yellow/Peach: View operations
  - Mauve/Lavender: System/Settings
  - Red: Destructive actions

Closes #6
2026-02-05 12:05:58 -06:00
2d7735b4c1 feat(icons): add Phase 2 workbench icons in Catppuccin Mocha
Some checks failed
Build and Test / build (push) Has been cancelled
Add 32 workbench-related icons with consistent color coding:

Workbench Selectors (8):
- PartDesignWorkbench (Blue #89b4fa)
- SketcherWorkbench (Yellow #f9e2af)
- AssemblyWorkbench (Green #a6e3a1)
- PartWorkbench (Blue #89b4fa)
- TechDrawWorkbench (Mauve #cba6f7)
- SpreadsheetWorkbench (Sky #89dceb)
- MeshWorkbench (Pink #f5c2e7)
- DraftWorkbench (Peach #fab387)

Part Design Tools (8):
- PartDesign_Body, PartDesign_NewSketch
- PartDesign_Pad, PartDesign_Pocket, PartDesign_Revolution
- PartDesign_Hole, PartDesign_Fillet, PartDesign_Chamfer

Sketcher Tools (5):
- Sketcher_CreateLine, Sketcher_CreateRectangle
- Sketcher_CreateCircle, Sketcher_CreateArc, Sketcher_CreatePoint

Sketcher Constraints (5):
- Constraint_PointOnPoint (Coincident)
- Constraint_Horizontal, Constraint_Vertical
- Constraint_Perpendicular, Constraint_Dimension

Assembly Tools (6):
- Assembly_CreateAssembly, Assembly_InsertLink
- Assembly_CreateJointFixed, Assembly_CreateJointRevolute
- Assembly_CreateJointSlider, Assembly_CreateJointDistance

Ref #5
2026-02-05 11:36:53 -06:00
69414c5dc5 refactor(icons): update color scheme for View and System icons
Some checks are pending
Build and Test / build (push) Has started running
Change color assignments for better semantic meaning:
- View operations: Yellow (#f9e2af) / Peach (#fab387)
- System/Settings: Mauve (#cba6f7) / Lavender (#b4befe)

Updated icons:
- View: zoom-in, zoom-out, zoom-fit-best, view-refresh, view-fullscreen,
        Std_ViewHome, Std_ViewScreenShot, Std_ToggleVisibility
- System: preferences-system, help-browser, application-exit, Std_Refresh

Also updated README.md color usage documentation.
2026-02-05 11:28:44 -06:00
c28d6f92cf feat(icons): add Phase 1 core toolbar icons in Catppuccin Mocha
Some checks failed
Build and Test / build (push) Has been cancelled
Complete the core toolbar icon set with 15 additional icons:

File Operations:
- document-save-as.svg - Save As with pencil indicator
- Std_SaveAll.svg - Save All with stacked disks
- Std_Import.svg - Import with arrow into document
- Std_Export.svg - Export with arrow out of document
- document-print.svg - Printer with paper

Edit Operations:
- edit-select-all.svg - Selection rectangle with corner handles

View Operations:
- zoom-fit-best.svg - Fit to view with corner arrows
- Std_ViewHome.svg - Home view with house icon
- view-fullscreen.svg - Fullscreen expand arrows
- Std_ViewScreenShot.svg - Camera for screenshots
- Std_ToggleVisibility.svg - Eye icon for visibility
- Std_Refresh.svg - Circular refresh arrow

Common Actions:
- help-browser.svg - Question mark in circle
- application-exit.svg - Door with exit arrow
- Std_DuplicateSelection.svg - Duplicate objects

All icons follow the Catppuccin Mocha design system with:
- 32x32 viewBox
- Rounded rectangle background (surface0 #313244)
- Consistent stroke widths and color usage

Ref #4
2026-02-05 11:23:47 -06:00
224feda4ad feat(icons): add Catppuccin Mocha icon override infrastructure
Some checks failed
Build and Test / build (push) Has been cancelled
Set up the foundation for custom Kindred Create icons:

- Add kindred-icons/ directory with Catppuccin Mocha themed SVG icons
- Modify BitmapFactory to prioritize kindred-icons/ in search path
- Add CMake install rules to package icons with application
- Include documentation (README.md) with design guidelines
- Add 12 initial icons as proof of concept:
  - File: document-new, document-open, document-save
  - Edit: edit-undo, edit-redo, edit-copy, edit-cut, edit-paste, delete
  - View: zoom-in, zoom-out, view-refresh
  - System: preferences-system

All icons follow the standard template:
- 32x32 viewBox
- Rounded rectangle background (rx=4, surface0 #313244)
- Catppuccin Mocha color palette

Closes #3
2026-02-05 11:17:27 -06:00
67e5598b2e fix(build): add missing Qt and Gui includes to ThemeSelectorWidget
Some checks failed
Build and Test / build (push) Successful in 1h9m41s
Release Build / build-linux (push) Failing after 18m43s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
Add QApplication, QEvent, and Gui/Application.h includes that were
missing, causing build failures with undeclared identifiers for qApp,
QEvent::LanguageChange, and Gui::Application::Instance.
2026-02-05 10:06:00 -06:00
7431746ef0 fix(ci): support 'latest' tag for release builds
Some checks failed
Build and Test / build (push) Failing after 43m15s
Release Build / build-linux (push) Failing after 2m18s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
2026-02-05 08:07:15 -06:00
044983330c Merge pull request 'fix(ci): use shallow tag-only fetch to avoid 504 timeout' (#2) from fix/ci-tag-fetch-504 into main
Some checks failed
Build and Test / build (push) Failing after 44m23s
2026-02-04 19:30:50 +00:00
d60db282ea fix(ci): use shallow tag-only fetch to avoid 504 timeout
Some checks failed
Build and Test / build (pull_request) Failing after 41m54s
The previous `git fetch --tags` triggers full history negotiation
against the upstream FreeCAD-derived repo (~45k commits), causing
HTTP 504 gateway timeouts on the Gitea instance.

Replace with a depth=1 refspec fetch that pulls only tag refs
without negotiating reachable objects behind them. This is
sufficient for `git describe --tags --always` to resolve a
version string.
2026-02-04 13:30:34 -06:00
2a5a645ace Merge pull request 'fix(ui): clean up theme selector and migration for single-theme setup' (#1) from fix/theme-selector-migration into main
Some checks are pending
Build and Test / build (push) Has started running
2026-02-04 19:27:31 +00:00
434ae797a4 fix(ui): clean up theme selector and migration for single-theme setup
Some checks failed
Build and Test / build (pull_request) Failing after 2m30s
- Remove dead code in migrateOldTheme() that set Theme parameter for
  KindredCreate.yaml, which no longer exists in the Stylesheets build
- Remove orphaned Classic.yaml and KindredCreate.yaml parameter files
  from Stylesheets CMakeLists and from disk
- Remove unused includes in ThemeSelectorWidget.cpp (QApplication,
  QEvent, Gui/Application.h)
2026-02-04 13:26:55 -06:00
224 changed files with 5909 additions and 431 deletions

View File

@@ -37,7 +37,7 @@ jobs:
fetch-depth: 1
- name: Fetch tags (for git describe)
run: git fetch --tags --no-recurse-submodules origin
run: git fetch --no-recurse-submodules --force --depth=1 origin '+refs/tags/*:refs/tags/*'
- name: Install pixi
run: |
@@ -51,7 +51,7 @@ jobs:
uses: https://github.com/actions/cache/restore@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-build-${{ github.ref_name }}-${{ github.sha }}
key: ccache-build-${{ github.ref_name }}-${{ github.run_id }}
restore-keys: |
ccache-build-${{ github.ref_name }}-
ccache-build-main-
@@ -75,7 +75,7 @@ jobs:
uses: https://github.com/actions/cache/save@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-build-${{ github.ref_name }}-${{ github.sha }}
key: ccache-build-${{ github.ref_name }}-${{ github.run_id }}
- name: Run C++ unit tests
continue-on-error: true

View File

@@ -3,7 +3,7 @@ name: Release Build
on:
push:
tags: ["v*"]
tags: ["v*", "latest"]
workflow_dispatch:
inputs:
tag:
@@ -46,7 +46,7 @@ jobs:
fetch-depth: 1
- name: Fetch tags
run: git fetch --tags --no-recurse-submodules origin
run: git fetch --tags --force --no-recurse-submodules origin
- name: Install pixi
run: |
@@ -60,7 +60,7 @@ jobs:
uses: https://github.com/actions/cache/restore@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-release-linux-${{ github.sha }}
key: ccache-release-linux-${{ github.run_id }}
restore-keys: |
ccache-release-linux-
ccache-build-main-
@@ -84,7 +84,7 @@ jobs:
uses: https://github.com/actions/cache/save@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-release-linux-${{ github.sha }}
key: ccache-release-linux-${{ github.run_id }}
- name: Build .deb package
run: |
@@ -113,174 +113,176 @@ jobs:
# ---------------------------------------------------------------------------
# macOS: DMG (Intel + Apple Silicon)
# TODO: Re-enable when macOS runners are available or cross-compilation is set up
# ---------------------------------------------------------------------------
build-macos:
strategy:
fail-fast: false
matrix:
include:
- runner: macos-13
arch: x86_64
- runner: macos-14
arch: arm64
runs-on: ${{ matrix.runner }}
env:
CCACHE_DIR: /tmp/ccache-kindred-create
CCACHE_COMPRESS: "true"
CCACHE_COMPRESSLEVEL: "6"
CCACHE_MAXSIZE: "4G"
CCACHE_SLOPPINESS: "include_file_ctime,include_file_mtime,pch_defines,time_macros"
CCACHE_BASEDIR: ${{ github.workspace }}
BUILD_TAG: ${{ github.ref_name || inputs.tag }}
CFLAGS: "-O3"
CXXFLAGS: "-O3"
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
- name: Fetch tags
run: git fetch --tags --no-recurse-submodules origin
- name: Install pixi
run: |
curl -fsSL https://pixi.sh/install.sh | bash
echo "$HOME/.pixi/bin" >> $GITHUB_PATH
export PATH="$HOME/.pixi/bin:$PATH"
pixi --version
- name: Restore ccache
id: ccache-restore
uses: https://github.com/actions/cache/restore@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-release-macos-${{ matrix.arch }}-${{ github.sha }}
restore-keys: |
ccache-release-macos-${{ matrix.arch }}-
- name: Prepare ccache
run: |
mkdir -p $CCACHE_DIR
pixi run ccache -z
- name: Build release package (DMG)
working-directory: package/rattler-build
run: |
pixi install
pixi run -e package create_bundle
- name: Show ccache statistics
run: pixi run ccache -s
- name: Save ccache
if: always()
uses: https://github.com/actions/cache/save@v4
with:
path: /tmp/ccache-kindred-create
key: ccache-release-macos-${{ matrix.arch }}-${{ github.sha }}
- name: List built artifacts
run: |
echo "=== macOS ${{ matrix.arch }} release artifacts ==="
ls -lah package/rattler-build/osx/*.dmg* 2>/dev/null || true
- name: Upload macOS artifacts
uses: https://github.com/actions/upload-artifact@v3
with:
name: release-macos-${{ matrix.arch }}
path: |
package/rattler-build/osx/*.dmg
package/rattler-build/osx/*-SHA256.txt
if-no-files-found: error
# build-macos:
# strategy:
# fail-fast: false
# matrix:
# include:
# - runner: macos-13
# arch: x86_64
# - runner: macos-14
# arch: arm64
#
# runs-on: ${{ matrix.runner }}
#
# env:
# CCACHE_DIR: /tmp/ccache-kindred-create
# CCACHE_COMPRESS: "true"
# CCACHE_COMPRESSLEVEL: "6"
# CCACHE_MAXSIZE: "4G"
# CCACHE_SLOPPINESS: "include_file_ctime,include_file_mtime,pch_defines,time_macros"
# CCACHE_BASEDIR: ${{ github.workspace }}
# BUILD_TAG: ${{ github.ref_name || inputs.tag }}
# CFLAGS: "-O3"
# CXXFLAGS: "-O3"
#
# steps:
# - name: Checkout repository
# uses: https://github.com/actions/checkout@v4
# with:
# submodules: recursive
# fetch-depth: 1
#
# - name: Fetch tags
# run: git fetch --tags --force --no-recurse-submodules origin
#
# - name: Install pixi
# run: |
# curl -fsSL https://pixi.sh/install.sh | bash
# echo "$HOME/.pixi/bin" >> $GITHUB_PATH
# export PATH="$HOME/.pixi/bin:$PATH"
# pixi --version
#
# - name: Restore ccache
# id: ccache-restore
# uses: https://github.com/actions/cache/restore@v4
# with:
# path: /tmp/ccache-kindred-create
# key: ccache-release-macos-${{ matrix.arch }}-${{ github.sha }}
# restore-keys: |
# ccache-release-macos-${{ matrix.arch }}-
#
# - name: Prepare ccache
# run: |
# mkdir -p $CCACHE_DIR
# pixi run ccache -z
#
# - name: Build release package (DMG)
# working-directory: package/rattler-build
# run: |
# pixi install
# pixi run -e package create_bundle
#
# - name: Show ccache statistics
# run: pixi run ccache -s
#
# - name: Save ccache
# if: always()
# uses: https://github.com/actions/cache/save@v4
# with:
# path: /tmp/ccache-kindred-create
# key: ccache-release-macos-${{ matrix.arch }}-${{ github.sha }}
#
# - name: List built artifacts
# run: |
# echo "=== macOS ${{ matrix.arch }} release artifacts ==="
# ls -lah package/rattler-build/osx/*.dmg* 2>/dev/null || true
#
# - name: Upload macOS artifacts
# uses: https://github.com/actions/upload-artifact@v3
# with:
# name: release-macos-${{ matrix.arch }}
# path: |
# package/rattler-build/osx/*.dmg
# package/rattler-build/osx/*-SHA256.txt
# if-no-files-found: error
# ---------------------------------------------------------------------------
# Windows: .exe installer + .7z archive
# TODO: Re-enable when Windows runners are available or cross-compilation is set up
# ---------------------------------------------------------------------------
build-windows:
runs-on: windows-latest
env:
CCACHE_DIR: C:\ccache-kindred-create
CCACHE_COMPRESS: "true"
CCACHE_COMPRESSLEVEL: "6"
CCACHE_MAXSIZE: "4G"
CCACHE_SLOPPINESS: "include_file_ctime,include_file_mtime,pch_defines,time_macros"
CCACHE_BASEDIR: ${{ github.workspace }}
BUILD_TAG: ${{ github.ref_name || inputs.tag }}
CFLAGS: "/O2"
CXXFLAGS: "/O2"
MAKE_INSTALLER: "true"
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
- name: Fetch tags
shell: bash
run: git fetch --tags --no-recurse-submodules origin
- name: Install pixi
shell: bash
run: |
curl -fsSL https://pixi.sh/install.sh | bash
echo "$HOME/.pixi/bin" >> $GITHUB_PATH
export PATH="$HOME/.pixi/bin:$PATH"
pixi --version
- name: Restore ccache
id: ccache-restore
uses: https://github.com/actions/cache/restore@v4
with:
path: C:\ccache-kindred-create
key: ccache-release-windows-${{ github.sha }}
restore-keys: |
ccache-release-windows-
- name: Build release package
shell: bash
working-directory: package/rattler-build
run: |
pixi install
pixi run -e package create_bundle
- name: Save ccache
if: always()
uses: https://github.com/actions/cache/save@v4
with:
path: C:\ccache-kindred-create
key: ccache-release-windows-${{ github.sha }}
- name: List built artifacts
shell: bash
run: |
echo "=== Windows release artifacts ==="
ls -lah package/rattler-build/windows/*.7z* 2>/dev/null || true
ls -lah package/rattler-build/windows/*.exe 2>/dev/null || true
ls -lah package/rattler-build/windows/*-SHA256.txt 2>/dev/null || true
- name: Upload Windows artifacts
uses: https://github.com/actions/upload-artifact@v3
with:
name: release-windows
path: |
package/rattler-build/windows/*.7z
package/rattler-build/windows/*.exe
package/rattler-build/windows/*-SHA256.txt
if-no-files-found: error
# build-windows:
# runs-on: windows-latest
#
# env:
# CCACHE_DIR: C:\ccache-kindred-create
# CCACHE_COMPRESS: "true"
# CCACHE_COMPRESSLEVEL: "6"
# CCACHE_MAXSIZE: "4G"
# CCACHE_SLOPPINESS: "include_file_ctime,include_file_mtime,pch_defines,time_macros"
# CCACHE_BASEDIR: ${{ github.workspace }}
# BUILD_TAG: ${{ github.ref_name || inputs.tag }}
# CFLAGS: "/O2"
# CXXFLAGS: "/O2"
# MAKE_INSTALLER: "true"
#
# steps:
# - name: Checkout repository
# uses: https://github.com/actions/checkout@v4
# with:
# submodules: recursive
# fetch-depth: 1
#
# - name: Fetch tags
# shell: bash
# run: git fetch --tags --force --no-recurse-submodules origin
#
# - name: Install pixi
# shell: bash
# run: |
# curl -fsSL https://pixi.sh/install.sh | bash
# echo "$HOME/.pixi/bin" >> $GITHUB_PATH
# export PATH="$HOME/.pixi/bin:$PATH"
# pixi --version
#
# - name: Restore ccache
# id: ccache-restore
# uses: https://github.com/actions/cache/restore@v4
# with:
# path: C:\ccache-kindred-create
# key: ccache-release-windows-${{ github.sha }}
# restore-keys: |
# ccache-release-windows-
#
# - name: Build release package
# shell: bash
# working-directory: package/rattler-build
# run: |
# pixi install
# pixi run -e package create_bundle
#
# - name: Save ccache
# if: always()
# uses: https://github.com/actions/cache/save@v4
# with:
# path: C:\ccache-kindred-create
# key: ccache-release-windows-${{ github.sha }}
#
# - name: List built artifacts
# shell: bash
# run: |
# echo "=== Windows release artifacts ==="
# ls -lah package/rattler-build/windows/*.7z* 2>/dev/null || true
# ls -lah package/rattler-build/windows/*.exe 2>/dev/null || true
# ls -lah package/rattler-build/windows/*-SHA256.txt 2>/dev/null || true
#
# - name: Upload Windows artifacts
# uses: https://github.com/actions/upload-artifact@v3
# with:
# name: release-windows
# path: |
# package/rattler-build/windows/*.7z
# package/rattler-build/windows/*.exe
# package/rattler-build/windows/*-SHA256.txt
# if-no-files-found: error
# ---------------------------------------------------------------------------
# Create Gitea release from all platform artifacts
# ---------------------------------------------------------------------------
publish-release:
needs: [build-linux, build-macos, build-windows]
needs: [build-linux] # TODO: Add build-macos, build-windows when runners are available
runs-on: ubuntu-latest
env:
@@ -326,10 +328,8 @@ jobs:
|----------|------|
| Linux (AppImage) | `KindredCreate-*-Linux-x86_64.AppImage` |
| Linux (Debian/Ubuntu) | `kindred-create_*.deb` |
| macOS (Intel) | `KindredCreate-*-macOS-x86_64.dmg` |
| macOS (Apple Silicon) | `KindredCreate-*-macOS-arm64.dmg` |
| Windows (Installer) | `KindredCreate-*-Windows-x86_64-installer.exe` |
| Windows (Portable) | `KindredCreate-*-Windows-x86_64.7z` |
*macOS and Windows builds are not yet available.*
SHA256 checksums are provided alongside each artifact.
prerelease: ${{ contains(github.ref_name, 'rc') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') }}

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="6" width="9" height="9" rx="1" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<rect x="17" y="6" width="9" height="9" rx="1" fill="none" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="6" y="17" width="9" height="9" rx="1" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<rect x="17" y="17" width="9" height="9" rx="1" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<line x1="21" y1="19" x2="21" y2="25" stroke="#cba6f7" stroke-width="1.5"/>
<line x1="18" y1="22" x2="24" y2="22" stroke="#cba6f7" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg7"
sodipodi:docname="AssemblyWorkbench.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs7" />
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="25"
inkscape:cx="16"
inkscape:cy="16"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg7" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Multiple parts assembled -->
<!-- Part 1 - cube -->
<path
d="M6 18 L6 12 L12 9 L18 12 L18 18 L12 21 Z"
fill="#45475a"
stroke="#a6e3a1"
stroke-width="1.5"
id="path1" />
<path
d="M6 12 L12 15 L18 12"
stroke="#a6e3a1"
stroke-width="1"
fill="none"
id="path2" />
<path
d="M12 15 L12 21"
stroke="#a6e3a1"
stroke-width="1"
id="path3" />
<!-- Part 2 - connected piece -->
<path
d="m 15.16,22.52 v -6 l 6,-3 6,3 v 6 l -6,3 z"
fill="#45475a"
stroke="#94e2d5"
stroke-width="1.5"
id="path4"
style="stroke:#74c7ec;stroke-opacity:1" />
<path
d="m 15.16,16.52 6,3 6,-3"
stroke="#94e2d5"
stroke-width="1"
fill="none"
id="path5"
style="stroke:#74c7ec;stroke-opacity:1" />
<path
d="m 21.16,19.52 v 6"
stroke="#94e2d5"
stroke-width="1"
id="path6"
style="stroke:#74c7ec;stroke-opacity:1" />
<path
d="m 11.11,13.318525 v -6 l 6,-3 6,3 v 6 l -6,3 z"
fill="#45475a"
stroke="#94e2d5"
stroke-width="1.5"
id="path4-6" />
<path
d="m 11.11,7.318525 6,3 6,-3"
stroke="#94e2d5"
stroke-width="1"
fill="none"
id="path5-2" />
<path
d="m 17.11,10.318525 v 6"
stroke="#94e2d5"
stroke-width="1"
id="path6-9" />
<!-- Connection indicator -->
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Multiple parts -->
<rect x="5" y="14" width="8" height="8" rx="1" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="19" y="14" width="8" height="8" rx="1" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
<!-- Connection line -->
<line x1="13" y1="18" x2="19" y2="18" stroke="#a6e3a1" stroke-width="2" stroke-dasharray="2,2"/>
<!-- Plus sign for create -->
<circle cx="24" cy="8" r="5" fill="#a6e3a1"/>
<path d="M24 5.5 L24 10.5 M21.5 8 L26.5 8" stroke="#1e1e2e" stroke-width="1.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 678 B

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Two parts -->
<rect x="4" y="12" width="8" height="10" rx="1" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="20" y="12" width="8" height="10" rx="1" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
<!-- Distance dimension -->
<line x1="12" y1="17" x2="20" y2="17" stroke="#f9e2af" stroke-width="1.5"/>
<line x1="12" y1="14" x2="12" y2="20" stroke="#f9e2af" stroke-width="1"/>
<line x1="20" y1="14" x2="20" y2="20" stroke="#f9e2af" stroke-width="1"/>
<!-- Arrows -->
<path d="M12 17 L14 15 L14 19 Z" fill="#f9e2af"/>
<path d="M20 17 L18 15 L18 19 Z" fill="#f9e2af"/>
<!-- Distance value -->
<rect x="13" y="6" width="6" height="5" rx="1" fill="#313244" stroke="#fab387" stroke-width="1"/>
<text x="16" y="10" font-family="monospace" font-size="5" fill="#cdd6f4" text-anchor="middle">d</text>
</svg>

After

Width:  |  Height:  |  Size: 976 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Two parts -->
<rect x="5" y="10" width="10" height="12" rx="1" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="17" y="10" width="10" height="12" rx="1" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
<!-- Fixed joint indicator - lock -->
<rect x="13" y="14" width="6" height="6" rx="1" fill="#f9e2af" stroke="#fab387" stroke-width="1"/>
<path d="M14 14 L14 12 A2 2 0 0 1 18 12 L18 14" fill="none" stroke="#fab387" stroke-width="1.5"/>
<!-- Ground symbol -->
<line x1="10" y1="26" x2="22" y2="26" stroke="#6c7086" stroke-width="2"/>
<line x1="12" y1="28" x2="20" y2="28" stroke="#6c7086" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 785 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Two parts connected by revolute joint -->
<rect x="4" y="12" width="10" height="8" rx="1" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="18" y="12" width="10" height="8" rx="1" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
<!-- Revolute joint - hinge circle -->
<circle cx="16" cy="16" r="5" fill="#313244" stroke="#f9e2af" stroke-width="2"/>
<circle cx="16" cy="16" r="2" fill="#fab387"/>
<!-- Rotation arrow -->
<path d="M22 6 A8 8 0 0 1 10 6" stroke="#fab387" stroke-width="2" fill="none" stroke-linecap="round"/>
<path d="M12 4 L10 6 L12 9" stroke="#fab387" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 820 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Rail/track -->
<rect x="4" y="14" width="24" height="4" rx="1" fill="#45475a" stroke="#6c7086" stroke-width="1"/>
<!-- Sliding part -->
<rect x="10" y="10" width="8" height="12" rx="1" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<!-- Slide direction arrows -->
<path d="M6 8 L4 8 L4 24 L6 24" stroke="#f9e2af" stroke-width="2" fill="none" stroke-linecap="round"/>
<path d="M26 8 L28 8 L28 24 L26 24" stroke="#f9e2af" stroke-width="2" fill="none" stroke-linecap="round"/>
<!-- Motion arrow -->
<path d="M20 16 L26 16" stroke="#94e2d5" stroke-width="2" stroke-linecap="round"/>
<path d="M23 13 L27 16 L23 19" stroke="#94e2d5" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 871 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Part being inserted -->
<path d="M8 20 L8 12 L14 9 L20 12 L20 20 L14 23 Z" fill="#45475a" stroke="#a6e3a1" stroke-width="1.5"/>
<path d="M8 12 L14 15 L20 12" stroke="#a6e3a1" stroke-width="1" fill="none"/>
<path d="M14 15 L14 23" stroke="#a6e3a1" stroke-width="1"/>
<!-- Arrow indicating insertion -->
<path d="M24 8 L24 18" stroke="#94e2d5" stroke-width="2.5" stroke-linecap="round"/>
<path d="M21 15 L24 19 L27 15" stroke="#94e2d5" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 668 B

View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg5"
sodipodi:docname="Constraint_Dimension.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<sodipodi:namedview
id="namedview5"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="25"
inkscape:cx="16"
inkscape:cy="19.2"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg5" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Line being dimensioned -->
<!-- Dimension line -->
<line
x1="6"
y1="12"
x2="26"
y2="12"
stroke="#a6e3a1"
stroke-width="1.5"
id="line2" />
<!-- Extension lines -->
<line
x1="6"
y1="20"
x2="6"
y2="10"
stroke="#a6e3a1"
stroke-width="1"
id="line3" />
<line
x1="26"
y1="20"
x2="26"
y2="10"
stroke="#a6e3a1"
stroke-width="1"
id="line4" />
<!-- Arrows -->
<path
d="M6 12 L10 10 L10 14 Z"
fill="#a6e3a1"
id="path4" />
<path
d="M26 12 L22 10 L22 14 Z"
fill="#a6e3a1"
id="path5" />
<line
x1="6"
y1="20"
x2="26"
y2="20"
stroke="#f9e2af"
stroke-width="2"
stroke-linecap="round"
id="line1" />
<!-- Dimension text -->
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Horizontal line -->
<line x1="6" y1="16" x2="26" y2="16" stroke="#f9e2af" stroke-width="2.5" stroke-linecap="round"/>
<!-- End points -->
<circle cx="6" cy="16" r="2.5" fill="#fab387"/>
<circle cx="26" cy="16" r="2.5" fill="#fab387"/>
<!-- H indicator -->
<text x="16" y="10" font-family="sans-serif" font-size="8" font-weight="bold" fill="#a6e3a1" text-anchor="middle">H</text>
<!-- Constraint arrows -->
<path d="M10 22 L6 22 L6 20" stroke="#a6e3a1" stroke-width="1.5" fill="none" stroke-linecap="round"/>
<path d="M22 22 L26 22 L26 20" stroke="#a6e3a1" stroke-width="1.5" fill="none" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 772 B

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg2"
sodipodi:docname="Constraint_Perpendicular.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<sodipodi:namedview
id="namedview2"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="25"
inkscape:cx="16"
inkscape:cy="16"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Horizontal line -->
<path
d="m 15.969398,16.225639 h 6.224963 v 5.744963"
fill="none"
stroke="#a6e3a1"
stroke-width="2.99007"
id="path2"
style="stroke-width:1.85574803;stroke-dasharray:none" />
<line
x1="6"
y1="22"
x2="26"
y2="22"
stroke="#f9e2af"
stroke-width="2"
stroke-linecap="round"
id="line1" />
<!-- Vertical line -->
<line
x1="16"
y1="6"
x2="16"
y2="22"
stroke="#f9e2af"
stroke-width="2"
stroke-linecap="round"
id="line2" />
<!-- Right angle indicator -->
<!-- Intersection point -->
<circle
cx="16"
cy="22"
r="2"
fill="#fab387"
id="circle2" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Two lines meeting at a point -->
<line x1="6" y1="26" x2="16" y2="16" stroke="#f9e2af" stroke-width="2"/>
<line x1="26" y1="6" x2="16" y2="16" stroke="#f9e2af" stroke-width="2"/>
<!-- Coincident point -->
<circle cx="16" cy="16" r="4" fill="#a6e3a1"/>
<circle cx="16" cy="16" r="2" fill="#1e1e2e"/>
</svg>

After

Width:  |  Height:  |  Size: 451 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Vertical line -->
<line x1="16" y1="6" x2="16" y2="26" stroke="#f9e2af" stroke-width="2.5" stroke-linecap="round"/>
<!-- End points -->
<circle cx="16" cy="6" r="2.5" fill="#fab387"/>
<circle cx="16" cy="26" r="2.5" fill="#fab387"/>
<!-- V indicator -->
<text x="24" y="18" font-family="sans-serif" font-size="8" font-weight="bold" fill="#a6e3a1" text-anchor="middle">V</text>
<!-- Constraint arrows -->
<path d="M8 10 L8 6 L10 6" stroke="#a6e3a1" stroke-width="1.5" fill="none" stroke-linecap="round"/>
<path d="M8 22 L8 26 L10 26" stroke="#a6e3a1" stroke-width="1.5" fill="none" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 766 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 6 L20 6 L24 10 L24 26 L8 26 Z" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M20 6 L20 10 L24 10" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="11" y1="14" x2="21" y2="14" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="11" y1="18" x2="21" y2="18" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="11" y1="22" x2="17" y2="22" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 534 B

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Drafting tools - pencil and triangle -->
<!-- Triangle/Set square -->
<path d="M6 26 L6 10 L22 26 Z" fill="#45475a" stroke="#fab387" stroke-width="1.5"/>
<!-- Pencil -->
<g transform="translate(16, 4) rotate(45)">
<rect x="0" y="0" width="4" height="16" rx="0.5" fill="#f9e2af" stroke="#fab387" stroke-width="1"/>
<path d="M0 16 L2 20 L4 16 Z" fill="#585b70" stroke="#fab387" stroke-width="0.5"/>
<rect x="0" y="0" width="4" height="3" fill="#f38ba8"/>
</g>
<!-- Grid dots -->
<circle cx="10" cy="22" r="1" fill="#6c7086"/>
<circle cx="14" cy="22" r="1" fill="#6c7086"/>
<circle cx="10" cy="18" r="1" fill="#6c7086"/>
</svg>

After

Width:  |  Height:  |  Size: 790 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#f9e2af" stroke-width="2"/>
<circle cx="16" cy="16" r="3" fill="#fab387"/>
</svg>

After

Width:  |  Height:  |  Size: 262 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 12 L16 8 L24 12 L24 22 L16 26 L8 22 Z" fill="#f9e2af" fill-opacity="0.6" stroke="#fab387" stroke-width="1.5"/>
<path d="M8 12 L16 16 L24 12 M16 16 L16 26" fill="none" stroke="#fab387" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 12 L16 8 L24 12 L24 22 L16 26 L8 22 Z" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<path d="M8 12 L16 16 L24 12 M16 16 L16 26" fill="none" stroke="#fab387" stroke-width="1.5" stroke-dasharray="2,2"/>
</svg>

After

Width:  |  Height:  |  Size: 345 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="8" y="10" width="16" height="12" fill="none" stroke="#f9e2af" stroke-width="2"/>
<line x1="8" y1="10" x2="12" y2="6" stroke="#fab387" stroke-width="1.5"/>
<line x1="24" y1="10" x2="28" y2="6" stroke="#fab387" stroke-width="1.5"/>
<line x1="12" y1="6" x2="28" y2="6" stroke="#fab387" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 444 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="8" cy="12" r="2" fill="#f9e2af"/>
<circle cx="16" cy="8" r="2" fill="#f9e2af"/>
<circle cx="24" cy="12" r="2" fill="#f9e2af"/>
<circle cx="8" cy="22" r="2" fill="#fab387"/>
<circle cx="16" cy="26" r="2" fill="#fab387"/>
<circle cx="24" cy="22" r="2" fill="#fab387"/>
<circle cx="16" cy="16" r="2" fill="#f9e2af"/>
</svg>

After

Width:  |  Height:  |  Size: 463 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 12 L16 8 L24 12 L24 22 L16 26 L8 22 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<path d="M8 12 L16 16 L24 12 M16 16 L16 26" fill="none" stroke="#313244" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 323 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 12 L16 8 L24 12 L24 22 L16 26 L8 22 Z" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<path d="M8 12 L16 16 L24 12 M16 16 L16 26" fill="none" stroke="#fab387" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 322 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 24 L8 12 L16 6 L24 12 L24 24 Z" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M8 12 L16 18 L24 12 M16 18 L16 6" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 314 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="10" width="8" height="12" rx="1" fill="none" stroke="#a6e3a1" stroke-width="1.5"/>
<rect x="18" y="10" width="8" height="12" rx="1" fill="none" stroke="#a6e3a1" stroke-width="1.5"/>
<line x1="14" y1="14" x2="18" y2="14" stroke="#94e2d5" stroke-width="2"/>
<line x1="14" y1="18" x2="18" y2="18" stroke="#94e2d5" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 476 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="16" cy="16" r="8" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="16" cy="16" r="4" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="16" y1="4" x2="16" y2="8" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="16" y1="24" x2="16" y2="28" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="4" y1="16" x2="8" y2="16" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="24" y1="16" x2="28" y2="16" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 595 B

5
kindred-icons/Group.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="10" width="20" height="16" rx="2" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M6 10 L6 8 C6 7 7 6 8 6 L14 6 L16 10" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 323 B

5
kindred-icons/InTray.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M6 16 L6 24 L26 24 L26 16 L20 16 L18 20 L14 20 L12 16 Z" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M16 6 L16 14 M12 10 L16 14 L20 10" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M6 16 L6 24 L26 24 L26 16 L20 16 L18 20 L14 20 L12 16 Z" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="24" cy="8" r="4" fill="#f38ba8"/>
<text x="24" y="11" text-anchor="middle" font-family="sans-serif" font-size="6" font-weight="bold" fill="#313244">!</text>
</svg>

After

Width:  |  Height:  |  Size: 414 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#585b70" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#585b70"/>
<line x1="6" y1="24" x2="26" y2="8" stroke="#f38ba8" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

55
kindred-icons/Link.svg Normal file
View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg3"
sodipodi:docname="Link.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="25.632621"
inkscape:cx="14.005591"
inkscape:cy="15.839192"
inkscape:window-width="2560"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<rect
width="32"
height="32"
rx="4"
fill="#313244"
id="rect1" />
<path
d="M 12.013793,20 H 8.0137931 a 4,4 0 0 1 0,-8 h 3.9999999"
fill="none"
stroke="#89b4fa"
stroke-width="1.5"
id="path1" />
<path
d="m 20.013793,12 h 4 a 4,4 0 0 1 0,8 h -4"
fill="none"
stroke="#74c7ec"
stroke-width="1.5"
id="path2"
style="stroke:#89b4fa;stroke-opacity:1" />
<path
style="fill:none;stroke:#89b4fa;stroke-width:1.77369;stroke-dasharray:none;stroke-opacity:1"
d="M 9.6965515,16 H 22.303449"
id="path3" />
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="10" cy="10" r="4" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="22" cy="10" r="4" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<circle cx="10" cy="22" r="4" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<circle cx="22" cy="22" r="4" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<line x1="14" y1="10" x2="18" y2="10" stroke="#89b4fa" stroke-width="1.5"/>
<line x1="10" y1="14" x2="10" y2="18" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 607 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="6" width="10" height="10" rx="1" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<rect x="10" y="10" width="10" height="10" rx="1" fill="#313244" stroke="#74c7ec" stroke-width="1.5"/>
<rect x="14" y="14" width="10" height="10" rx="1" fill="#313244" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="24" cy="8" r="4" fill="none" stroke="#a6e3a1" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 514 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="8" y="8" width="10" height="10" rx="1" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M18 18 L24 24" stroke="#74c7ec" stroke-width="2"/>
<circle cx="24" cy="24" r="3" fill="#74c7ec"/>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="10" width="20" height="14" rx="2" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="12" cy="17" r="3" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<circle cx="20" cy="17" r="3" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="15" y1="17" x2="17" y2="17" stroke="#89b4fa" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 466 B

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg3"
sodipodi:docname="LinkImport.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="25.632621"
inkscape:cx="14.005591"
inkscape:cy="15.800179"
inkscape:window-width="2560"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<rect
width="32"
height="32"
rx="4"
fill="#313244"
id="rect1" />
<path
d="M 12.013793,20 H 8.0137931 a 4,4 0 0 1 0,-8 h 3.9999999"
fill="none"
stroke="#89b4fa"
stroke-width="1.5"
id="path1" />
<path
d="m 20.013793,12 h 4 a 4,4 0 0 1 0,8 h -4"
fill="none"
stroke="#74c7ec"
stroke-width="1.5"
id="path2"
style="stroke:#89b4fa;stroke-opacity:1" />
<path
style="fill:none;stroke:#89b4fa;stroke-width:1.77369;stroke-dasharray:none;stroke-opacity:1"
d="M 9.6965515,16 H 22.303449"
id="path3" />
<circle
cx="25.513792"
cy="-9.2321157"
fill="#a6e3a1"
id="circle2"
style="stroke-width:0.999999"
transform="scale(1,-1)"
r="5" />
<path
d="M 25.51379,11.732116 V 6.7321179 m -2.499999,2.4999988 h 5"
stroke="#1e1e2e"
stroke-width="1.5"
stroke-linecap="round"
id="path3-7" />
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="10" cy="10" r="3" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="22" cy="10" r="3" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<circle cx="10" cy="20" r="3" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<path d="M24 18 L24 26 L18 22 Z" fill="#a6e3a1"/>
</svg>

After

Width:  |  Height:  |  Size: 421 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="6" width="12" height="12" rx="1" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<rect x="14" y="14" width="12" height="12" rx="1" fill="#313244" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 328 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="10" cy="16" r="5" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<circle cx="22" cy="16" r="5" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<path d="M13 12 L19 12 M19 12 L17 10 M19 12 L17 14" stroke="#a6e3a1" stroke-width="1.5"/>
<path d="M19 20 L13 20 M13 20 L15 18 M13 20 L15 22" stroke="#f38ba8" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 471 B

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg3"
sodipodi:docname="LinkSelect.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="25.632621"
inkscape:cx="14.005591"
inkscape:cy="15.800179"
inkscape:window-width="2560"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<rect
width="32"
height="32"
rx="4"
fill="#313244"
id="rect1" />
<path
d="M 12.013793,20 H 8.0137931 a 4,4 0 0 1 0,-8 h 3.9999999"
fill="none"
stroke="#89b4fa"
stroke-width="1.5"
id="path1" />
<path
d="m 20.013793,12 h 4 a 4,4 0 0 1 0,8 h -4"
fill="none"
stroke="#74c7ec"
stroke-width="1.5"
id="path2"
style="stroke:#89b4fa;stroke-opacity:1" />
<path
style="fill:none;stroke:#89b4fa;stroke-width:1.77369;stroke-dasharray:none;stroke-opacity:1"
d="M 9.6965515,16 H 22.303449"
id="path3" />
<rect
style="fill:none;stroke:#fab387;stroke-width:1.056;stroke-dasharray:1.05599999, 2.11199999;stroke-linejoin:round;stroke-linecap:round;stroke-dashoffset:15.41759968;stroke-opacity:1"
id="rect2"
width="28.12822"
height="14.785847"
x="1.9358902"
y="8.6070766" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Mesh triangles -->
<path d="M16 6 L6 24 L26 24 Z" fill="#45475a" stroke="#f5c2e7" stroke-width="1.5"/>
<!-- Internal mesh lines -->
<line x1="16" y1="6" x2="11" y2="15" stroke="#f5c2e7" stroke-width="1"/>
<line x1="16" y1="6" x2="21" y2="15" stroke="#f5c2e7" stroke-width="1"/>
<line x1="11" y1="15" x2="21" y2="15" stroke="#f5c2e7" stroke-width="1"/>
<line x1="11" y1="15" x2="6" y2="24" stroke="#f5c2e7" stroke-width="1"/>
<line x1="21" y1="15" x2="26" y2="24" stroke="#f5c2e7" stroke-width="1"/>
<line x1="11" y1="15" x2="16" y2="24" stroke="#f5c2e7" stroke-width="1"/>
<line x1="21" y1="15" x2="16" y2="24" stroke="#f5c2e7" stroke-width="1"/>
<!-- Vertices -->
<circle cx="16" cy="6" r="2" fill="#f2cdcd"/>
<circle cx="6" cy="24" r="2" fill="#f2cdcd"/>
<circle cx="26" cy="24" r="2" fill="#f2cdcd"/>
<circle cx="11" cy="15" r="1.5" fill="#f2cdcd"/>
<circle cx="21" cy="15" r="1.5" fill="#f2cdcd"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- 3D extruded shape representing Part Design -->
<path d="M8 22 L8 12 L16 8 L24 12 L24 22 L16 26 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M8 12 L16 16 L24 12" stroke="#89b4fa" stroke-width="1.5" fill="none"/>
<path d="M16 16 L16 26" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Top face highlight -->
<path d="M8 12 L16 8 L24 12 L16 16 Z" fill="#74c7ec" fill-opacity="0.3"/>
<!-- Gear accent indicating design/engineering -->
<circle cx="16" cy="14" r="3" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 682 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- 3D body representation -->
<path d="M6 22 L6 10 L16 6 L26 10 L26 22 L16 26 Z" fill="#45475a" stroke="#89b4fa" stroke-width="2"/>
<path d="M6 10 L16 14 L26 10" stroke="#89b4fa" stroke-width="2" fill="none"/>
<path d="M16 14 L16 26" stroke="#89b4fa" stroke-width="2"/>
<!-- Top face highlight -->
<path d="M6 10 L16 6 L26 10 L16 14 Z" fill="#74c7ec" fill-opacity="0.4"/>
<!-- Origin indicator -->
<circle cx="16" cy="16" r="2" fill="#a6e3a1"/>
<line x1="16" y1="12" x2="16" y2="20" stroke="#a6e3a1" stroke-width="1"/>
<line x1="12" y1="16" x2="20" y2="16" stroke="#a6e3a1" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 750 B

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg5"
sodipodi:docname="PartDesign_Chamfer.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<sodipodi:namedview
id="namedview5"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="11.136932"
inkscape:cy="18.473165"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg5" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Block with chamfered edge -->
<path
d="M 6,24 5.9375,16.0625 11.171008,8.026064 16,6 26,10 V 24 L 16,28 Z M 20.923535,12.327039 26.006643,9.9805673 Z"
fill="#45475a"
stroke="#89b4fa"
stroke-width="1.5"
id="path1"
sodipodi:nodetypes="ccccccccccc" />
<path
d="M 16,19.88 V 28"
stroke="#89b4fa"
stroke-width="1.5"
id="path3"
sodipodi:nodetypes="cc" />
<path
d="M 5.721457,16 10.416889,7.8973687 21,12 16.132583,20.145165 Z"
fill="#a6e3a1"
fill-opacity="0.3"
id="path5"
sodipodi:nodetypes="ccccc"
style="opacity:1;fill:#a6e3a1;fill-opacity:1" />
<!-- Chamfer cut on edge -->
<!-- Chamfer face -->
<path
d="M 21.289264,12.075764 15.938527,20.29433"
stroke="#89b4fa"
stroke-width="1.5847"
id="path3-0"
sodipodi:nodetypes="cc" />
<path
d="M 11.313916,7.9020371 5.8336127,16.235844"
stroke="#89b4fa"
stroke-width="1.61498"
id="path3-0-3"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg5"
sodipodi:docname="PartDesign_Fillet.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs5" />
<sodipodi:namedview
id="namedview5"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="2.8284271"
inkscape:cy="17.412504"
inkscape:window-width="2560"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg5" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Block with chamfered edge -->
<path
d="M 6,24 6.1584709,15.885723 10.508095,8.6005883 16,6 26,10 V 24 L 16,28 Z M 20.923535,12.327039 26.006643,9.9805673 Z"
fill="#45475a"
stroke="#89b4fa"
stroke-width="1.5"
id="path1"
sodipodi:nodetypes="ccccccccccc" />
<path
d="M 16,19.88 V 28"
stroke="#89b4fa"
stroke-width="1.5"
id="path3"
sodipodi:nodetypes="cc" />
<path
d="M 5.721457,16 10.416889,7.8973687 21,12 l -3.708852,3.943415 -1.158565,4.20175 z"
fill="#a6e3a1"
fill-opacity="0.3"
id="path5"
sodipodi:nodetypes="cccccc"
style="opacity:1;fill:#a6e3a1;fill-opacity:1" />
<!-- Chamfer cut on edge -->
<!-- Chamfer face -->
<path
d="m 25.554002,10.020735 c 0,0 -2.839088,1.13525 -4.950437,2.544214 -1.652011,1.102435 -2.601422,2.423855 -3.100562,3.159378 -1.011406,1.490386 -1.47202,3.667857 -1.538841,4.165681 -0.0066,0.04949 -0.01392,7.861307 -0.01392,7.861307 m 7.653323,-14.186366"
stroke="#89b4fa"
stroke-width="1.5847"
id="path3-0"
sodipodi:nodetypes="csssc"
style="fill:none" />
<path
d="m 16.23145,6.006509 c 0,0 -3.524098,1.0247646 -5.635447,2.4337286 -1.6520107,1.1024351 -2.6014217,2.4238554 -3.1005617,3.1593784 -1.011406,1.490386 -1.47202,3.667857 -1.538841,4.165681 -0.0066,0.04949 0.2070509,8.612608 0.2070509,8.612608"
stroke="#89b4fa"
stroke-width="1.5847"
id="path3-0-6"
sodipodi:nodetypes="csssc"
style="fill:none" />
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Block with hole -->
<path d="M4 22 L4 10 L16 6 L28 10 L28 22 L16 26 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M4 10 L16 14 L28 10" stroke="#89b4fa" stroke-width="1.5" fill="none"/>
<path d="M16 14 L16 26" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Circular hole on top -->
<ellipse cx="16" cy="11" rx="5" ry="2" fill="#1e1e2e" stroke="#f38ba8" stroke-width="1.5"/>
<!-- Hole depth indication -->
<path d="M11 11 L11 18" stroke="#f38ba8" stroke-width="1" stroke-dasharray="2,1"/>
<path d="M21 11 L21 18" stroke="#f38ba8" stroke-width="1" stroke-dasharray="2,1"/>
<ellipse cx="16" cy="18" rx="5" ry="2" fill="none" stroke="#f38ba8" stroke-width="1" stroke-dasharray="2,1"/>
</svg>

After

Width:  |  Height:  |  Size: 855 B

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 32 32"
version="1.1"
id="svg3"
sodipodi:docname="PartDesign_NewSketch.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="36.25"
inkscape:cx="16"
inkscape:cy="16"
inkscape:window-width="2560"
inkscape:window-height="1371"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<rect
x="2"
y="2"
width="28"
height="28"
rx="4"
fill="#313244"
id="rect1" />
<!-- Sketch plane -->
<path
d="m 4,17.158621 12,-8.0000003 12,8.0000003 -12,8 z"
fill="#45475a"
stroke="#f9e2af"
stroke-width="1.5"
id="path1" />
<!-- Grid on plane -->
<!-- Sketch geometry -->
<!-- Plus sign for "new" -->
<circle
cx="23.092838"
cy="-10.553846"
fill="#a6e3a1"
id="circle2"
style="stroke-width:0.999999"
transform="scale(1,-1)"
r="5" />
<path
d="M 23.092837,13.053846 V 8.0538483 m -2.499999,2.4999987 h 5"
stroke="#1e1e2e"
stroke-width="1.5"
stroke-linecap="round"
id="path3-7" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Base sketch profile -->
<path d="M6 24 L6 20 L14 18 L26 20 L26 24 L14 26 Z" fill="#45475a" stroke="#6c7086" stroke-width="1"/>
<!-- Extruded body -->
<path d="M6 20 L6 10 L14 8 L26 10 L26 20 L14 22 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M6 10 L14 12 L26 10" stroke="#89b4fa" stroke-width="1.5" fill="none"/>
<path d="M14 12 L14 22" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Top face -->
<path d="M6 10 L14 8 L26 10 L14 12 Z" fill="#74c7ec" fill-opacity="0.4"/>
<!-- Extrude arrow -->
<path d="M20 18 L20 6" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round"/>
<path d="M17 9 L20 5 L23 9" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Solid block -->
<path d="M4 22 L4 10 L16 6 L28 10 L28 22 L16 26 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M4 10 L16 14 L28 10" stroke="#89b4fa" stroke-width="1.5" fill="none"/>
<path d="M16 14 L16 26" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Pocket cut-out -->
<path d="M10 12 L16 10 L22 12 L22 18 L16 20 L10 18 Z" fill="#1e1e2e" stroke="#f38ba8" stroke-width="1.5"/>
<path d="M10 12 L16 14 L22 12" stroke="#f38ba8" stroke-width="1" fill="none"/>
<path d="M16 14 L16 20" stroke="#f38ba8" stroke-width="1"/>
<!-- Cut arrow -->
<path d="M16 8 L16 16" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round"/>
<path d="M14 13 L16 17 L18 13" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 925 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Revolved shape - vase/cone profile -->
<ellipse cx="16" cy="24" rx="10" ry="3" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M6 24 Q6 12 12 8 L20 8 Q26 12 26 24" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<ellipse cx="16" cy="8" rx="4" ry="1.5" fill="#74c7ec" fill-opacity="0.4" stroke="#89b4fa" stroke-width="1"/>
<!-- Axis line -->
<line x1="16" y1="4" x2="16" y2="28" stroke="#a6e3a1" stroke-width="1.5" stroke-dasharray="3,2"/>
<!-- Rotation arrow -->
<path d="M22 6 A6 6 0 0 1 22 14" stroke="#a6e3a1" stroke-width="2" fill="none" stroke-linecap="round"/>
<path d="M20 12 L22 15 L25 13" stroke="#a6e3a1" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 870 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Simple 3D primitive - cube with boolean indication -->
<path d="M6 20 L6 10 L16 6 L26 10 L26 20 L16 24 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M6 10 L16 14 L26 10" stroke="#89b4fa" stroke-width="1.5" fill="none"/>
<path d="M16 14 L16 24" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Boolean cut-out indication -->
<circle cx="18" cy="15" r="4" fill="#313244" stroke="#74c7ec" stroke-width="1.5" stroke-dasharray="2,1"/>
</svg>

After

Width:  |  Height:  |  Size: 595 B

121
kindred-icons/README.md Normal file
View File

@@ -0,0 +1,121 @@
# Kindred Create Icons
This directory contains custom Catppuccin Mocha themed SVG icons that override the default FreeCAD icons.
## How It Works
Icons placed in this directory are loaded **before** the default FreeCAD icons. To override an icon, simply create an SVG file with the same name as the original icon.
For example, to override `document-save.svg`, create `kindred-icons/document-save.svg`.
## Icon Design Standards
All Kindred Create icons follow these guidelines:
### Template
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Icon content using Catppuccin Mocha colors -->
</svg>
```
### Specifications
| Property | Value |
|----------|-------|
| ViewBox | 32x32 |
| Background | Rounded rect, rx=4, fill=`#313244` (surface0) |
| Stroke width | 1.5-2.5 for main elements |
| Style | Flat, minimal, geometric |
### Catppuccin Mocha Palette
| Color | Hex | Usage |
|-------|-----|-------|
| Base | `#1e1e2e` | Deep backgrounds |
| Mantle | `#181825` | Darker backgrounds |
| Crust | `#11111b` | Darkest backgrounds |
| Surface0 | `#313244` | **Icon backgrounds** |
| Surface1 | `#45475a` | Elevated surfaces |
| Surface2 | `#585b70` | Higher surfaces |
| Overlay0 | `#6c7086` | Subtle elements |
| Overlay1 | `#7f849c` | More visible overlays |
| Overlay2 | `#9399b2` | Prominent overlays |
| Subtext0 | `#a6adc8` | Tertiary text |
| Subtext1 | `#bac2de` | Secondary text |
| Text | `#cdd6f4` | **Primary text/strokes** |
| Lavender | `#b4befe` | Soft purple accent |
| Blue | `#89b4fa` | **File operations** |
| Sapphire | `#74c7ec` | Links, info |
| Sky | `#89dceb` | Light blue accent |
| Teal | `#94e2d5` | Success secondary |
| Green | `#a6e3a1` | **Edit operations, Creation/Success** |
| Yellow | `#f9e2af` | **View operations** |
| Peach | `#fab387` | **View accents** |
| Maroon | `#eba0ac` | Soft red |
| Red | `#f38ba8` | **Deletion/Error** |
| Mauve | `#cba6f7` | **System/Settings** |
| Lavender | `#b4befe` | **System accents** |
| Pink | `#f5c2e7` | Decorative |
| Flamingo | `#f2cdcd` | Soft accents |
| Rosewater | `#f5e0dc` | Lightest accent |
### Workbench Color Coding
Each workbench uses a distinct accent color:
| Workbench | Primary | Accent |
|-----------|---------|--------|
| Part Design | Blue `#89b4fa` | Sapphire `#74c7ec` |
| Sketcher | Yellow `#f9e2af` | Peach `#fab387` |
| Assembly | Green `#a6e3a1` | Teal `#94e2d5` |
| TechDraw | Mauve `#cba6f7` | Lavender `#b4befe` |
| Spreadsheet | Sky `#89dceb` | Sapphire `#74c7ec` |
| Mesh | Pink `#f5c2e7` | Flamingo `#f2cdcd` |
| Draft | Peach `#fab387` | Yellow `#f9e2af` |
## Adding New Icons
1. Identify the original icon name (e.g., `document-save.svg`)
2. Create your SVG using the template above
3. Save it in this directory with the exact same filename
4. The new icon will be used on next application start
## Finding Original Icon Names
Original icons are located in:
- `src/Gui/Icons/` - Core GUI icons
- `src/Mod/*/Gui/Resources/icons/` - Module-specific icons
Use the same filename to override.
## Icon Categories
The icon set covers these categories:
| Category | Count | Examples |
|----------|-------|----------|
| File Operations | 15+ | document-save, document-open, Std_Export |
| Edit Operations | 20+ | edit-undo, edit-copy, edit-paste |
| View Operations | 35+ | zoom-in, DrawStyle*, Std_View* |
| System/Settings | 15+ | preferences-system, help-browser |
| Tree View | 15 | Tree_*, tree-* |
| Link/Structure | 15+ | Link*, Feature, Group |
| Workbenches | 8 | PartDesignWorkbench, SketcherWorkbench |
| PartDesign | 8 | PartDesign_Pad, PartDesign_Pocket |
| Sketcher | 10+ | Sketcher_Create*, Constraint_* |
| Assembly | 6 | Assembly_Create*, Assembly_Insert* |
| Navigation | 10+ | button_*, cursor-* |
| Selection | 8 | *-selection, clear-selection |
| DAG View | 4 | dagView* |
**Total: 191 icons**
## Related Issues
- Epic: https://git.kindred-systems.com/kindred/create/issues/7
- Phase 1 (Core): https://git.kindred-systems.com/kindred/create/issues/4
- Phase 2 (Workbench): https://git.kindred-systems.com/kindred/create/issues/5
- Phase 3 (Complete): https://git.kindred-systems.com/kindred/create/issues/6

View File

@@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Grid lines representing sketch plane -->
<line x1="6" y1="10" x2="26" y2="10" stroke="#45475a" stroke-width="1"/>
<line x1="6" y1="16" x2="26" y2="16" stroke="#45475a" stroke-width="1"/>
<line x1="6" y1="22" x2="26" y2="22" stroke="#45475a" stroke-width="1"/>
<line x1="10" y1="6" x2="10" y2="26" stroke="#45475a" stroke-width="1"/>
<line x1="16" y1="6" x2="16" y2="26" stroke="#45475a" stroke-width="1"/>
<line x1="22" y1="6" x2="22" y2="26" stroke="#45475a" stroke-width="1"/>
<!-- Sketch profile -->
<path d="M8 20 L8 12 L14 8 L24 8 L24 18 L18 24 L8 20" fill="none" stroke="#f9e2af" stroke-width="2" stroke-linejoin="round"/>
<!-- Constraint point -->
<circle cx="8" cy="12" r="2" fill="#fab387"/>
<circle cx="24" cy="8" r="2" fill="#fab387"/>
</svg>

After

Width:  |  Height:  |  Size: 911 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Arc -->
<path d="M6 24 A14 14 0 0 1 26 24" fill="none" stroke="#f9e2af" stroke-width="2.5" stroke-linecap="round"/>
<!-- End points -->
<circle cx="6" cy="24" r="2.5" fill="#fab387"/>
<circle cx="26" cy="24" r="2.5" fill="#fab387"/>
<!-- Center point -->
<circle cx="16" cy="24" r="2" fill="#fab387" fill-opacity="0.6"/>
<!-- Radius indicator -->
<line x1="16" y1="24" x2="16" y2="10" stroke="#fab387" stroke-width="1" stroke-dasharray="2,2"/>
</svg>

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Circle -->
<circle cx="16" cy="16" r="10" fill="none" stroke="#f9e2af" stroke-width="2.5"/>
<!-- Center point -->
<circle cx="16" cy="16" r="2.5" fill="#fab387"/>
<!-- Radius line -->
<line x1="16" y1="16" x2="26" y2="16" stroke="#fab387" stroke-width="1.5" stroke-dasharray="2,2"/>
</svg>

After

Width:  |  Height:  |  Size: 435 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Line -->
<line x1="6" y1="26" x2="26" y2="6" stroke="#f9e2af" stroke-width="2.5" stroke-linecap="round"/>
<!-- End points -->
<circle cx="6" cy="26" r="3" fill="#fab387"/>
<circle cx="26" cy="6" r="3" fill="#fab387"/>
</svg>

After

Width:  |  Height:  |  Size: 368 B

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Point with crosshair -->
<circle cx="16" cy="16" r="5" fill="#fab387"/>
<circle cx="16" cy="16" r="3" fill="#f9e2af"/>
<!-- Crosshair lines -->
<line x1="16" y1="6" x2="16" y2="11" stroke="#f9e2af" stroke-width="1.5"/>
<line x1="16" y1="21" x2="16" y2="26" stroke="#f9e2af" stroke-width="1.5"/>
<line x1="6" y1="16" x2="11" y2="16" stroke="#f9e2af" stroke-width="1.5"/>
<line x1="21" y1="16" x2="26" y2="16" stroke="#f9e2af" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Rectangle -->
<rect x="6" y="8" width="20" height="16" rx="1" fill="none" stroke="#f9e2af" stroke-width="2.5"/>
<!-- Corner points -->
<circle cx="6" cy="8" r="2.5" fill="#fab387"/>
<circle cx="26" cy="8" r="2.5" fill="#fab387"/>
<circle cx="6" cy="24" r="2.5" fill="#fab387"/>
<circle cx="26" cy="24" r="2.5" fill="#fab387"/>
</svg>

After

Width:  |  Height:  |  Size: 481 B

View File

@@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Spreadsheet grid -->
<rect x="5" y="5" width="22" height="22" rx="1" fill="#45475a" stroke="#89dceb" stroke-width="1.5"/>
<!-- Header row -->
<rect x="5" y="5" width="22" height="5" fill="#585b70"/>
<!-- Column dividers -->
<line x1="12" y1="5" x2="12" y2="27" stroke="#6c7086" stroke-width="1"/>
<line x1="20" y1="5" x2="20" y2="27" stroke="#6c7086" stroke-width="1"/>
<!-- Row dividers -->
<line x1="5" y1="10" x2="27" y2="10" stroke="#6c7086" stroke-width="1"/>
<line x1="5" y1="16" x2="27" y2="16" stroke="#6c7086" stroke-width="1"/>
<line x1="5" y1="22" x2="27" y2="22" stroke="#6c7086" stroke-width="1"/>
<!-- Header labels -->
<text x="8" y="9" font-family="monospace" font-size="4" fill="#cdd6f4">A</text>
<text x="15" y="9" font-family="monospace" font-size="4" fill="#cdd6f4">B</text>
<text x="23" y="9" font-family="monospace" font-size="4" fill="#cdd6f4">C</text>
<!-- Cell highlight -->
<rect x="12" y="10" width="8" height="6" fill="#74c7ec" fill-opacity="0.3" stroke="#89dceb" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Original object -->
<rect x="6" y="6" width="12" height="12" rx="2" fill="#45475a" stroke="#6c7086" stroke-width="1.5"/>
<!-- Duplicate object -->
<rect x="14" y="14" width="12" height="12" rx="2" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
<!-- Plus badge -->
<circle cx="24" cy="8" r="5" fill="#a6e3a1"/>
<path d="M24 5.5 L24 10.5 M21.5 8 L26.5 8" stroke="#1e1e2e" stroke-width="1.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Document -->
<path d="M8 5 L8 27 L24 27 L24 11 L18 5 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M18 5 L18 11 L24 11" fill="#313244" stroke="#89b4fa" stroke-width="1.5" stroke-linejoin="round"/>
<!-- Arrow pointing out of document -->
<path d="M12 16 L4 16" stroke="#fab387" stroke-width="2.5" stroke-linecap="round"/>
<path d="M7 13 L4 16 L7 19" stroke="#fab387" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 617 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#585b70" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#585b70"/>
<line x1="6" y1="24" x2="26" y2="8" stroke="#f38ba8" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Document -->
<path d="M8 5 L8 27 L24 27 L24 11 L18 5 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M18 5 L18 11 L24 11" fill="#313244" stroke="#89b4fa" stroke-width="1.5" stroke-linejoin="round"/>
<!-- Arrow pointing into document -->
<path d="M4 16 L12 16" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round"/>
<path d="M9 13 L12 16 L9 19" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 616 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Circular arrow -->
<path d="M16 6 A10 10 0 1 1 6 16" fill="none" stroke="#cba6f7" stroke-width="2.5" stroke-linecap="round"/>
<!-- Arrow head -->
<path d="M16 6 L13 10 L19 10 Z" fill="#b4befe"/>
</svg>

After

Width:  |  Height:  |  Size: 343 B

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Back floppy -->
<path d="M11 4 L11 20 L25 20 L25 8 L21 4 Z" fill="#45475a" stroke="#6c7086" stroke-width="1"/>
<!-- Front floppy -->
<path d="M5 8 L5 28 L19 28 L19 12 L15 8 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
<!-- Metal slider on front -->
<rect x="8" y="8" width="6" height="5" rx="1" fill="#1e1e2e" stroke="#6c7086" stroke-width="0.75"/>
<!-- Label area on front -->
<rect x="7" y="16" width="10" height="5" rx="1" fill="#cdd6f4"/>
<!-- Multiple indicator -->
<circle cx="24" cy="24" r="5" fill="#a6e3a1"/>
<text x="24" y="27" font-family="sans-serif" font-size="8" font-weight="bold" fill="#1e1e2e" text-anchor="middle">2</text>
</svg>

After

Width:  |  Height:  |  Size: 814 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="12" rx="8" ry="5" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<circle cx="16" cy="12" r="2.5" fill="#fab387"/>
<path d="M8 20 L12 24 L24 12" fill="none" stroke="#a6e3a1" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 345 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="16" cy="16" r="8" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<path d="M16 8 L16 16 L22 16" fill="none" stroke="#b4befe" stroke-width="2"/>
<circle cx="16" cy="8" r="2" fill="#f38ba8"/>
<circle cx="24" cy="16" r="2" fill="#a6e3a1"/>
<circle cx="16" cy="24" r="2" fill="#89b4fa"/>
<circle cx="8" cy="16" r="2" fill="#f9e2af"/>
</svg>

After

Width:  |  Height:  |  Size: 479 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#fab387"/>
<rect x="8" y="22" width="6" height="4" rx="1" fill="#a6e3a1"/>
<rect x="18" y="22" width="6" height="4" rx="1" fill="#a6e3a1"/>
</svg>

After

Width:  |  Height:  |  Size: 397 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="14" rx="8" ry="5" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<circle cx="16" cy="14" r="2.5" fill="#fab387"/>
<rect x="10" y="20" width="12" height="6" rx="1" fill="none" stroke="#a6e3a1" stroke-width="1.5" stroke-dasharray="2,2"/>
</svg>

After

Width:  |  Height:  |  Size: 389 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 20 L8 10 L16 6 L24 10 L24 20" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<line x1="4" y1="16" x2="28" y2="16" stroke="#f38ba8" stroke-width="2"/>
<path d="M8 20 L16 24 L24 20" fill="none" stroke="#89b4fa" stroke-width="1.5" stroke-dasharray="2,2"/>
</svg>

After

Width:  |  Height:  |  Size: 397 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<line x1="16" y1="6" x2="16" y2="26" stroke="#74c7ec" stroke-width="2"/>
<line x1="6" y1="16" x2="26" y2="16" stroke="#74c7ec" stroke-width="2"/>
<line x1="9" y1="9" x2="23" y2="23" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="23" y1="9" x2="9" y2="23" stroke="#74c7ec" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#89dceb"/>
</svg>

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="16" cy="16" r="8" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<path d="M16 8 L18 14 L24 16 L18 18 L16 24 L14 18 L8 16 L14 14 Z" fill="#fab387"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="12" cy="12" rx="6" ry="4" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<circle cx="12" cy="12" r="2" fill="#fab387"/>
<ellipse cx="20" cy="20" rx="6" ry="4" fill="none" stroke="#585b70" stroke-width="1.5"/>
<circle cx="20" cy="20" r="2" fill="#585b70"/>
<path d="M16 14 L16 18" stroke="#b4befe" stroke-width="1.5"/>
<path d="M14 16 L18 16" stroke="#b4befe" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 531 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="6" y="8" width="12" height="12" fill="#89b4fa" fill-opacity="0.5" stroke="#89b4fa" stroke-width="1.5"/>
<rect x="14" y="12" width="12" height="12" fill="#f9e2af" fill-opacity="0.5" stroke="#f9e2af" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Eye shape -->
<path d="M4 16 Q16 6 28 16 Q16 26 4 16" fill="#45475a" stroke="#f9e2af" stroke-width="1.5"/>
<!-- Iris -->
<circle cx="16" cy="16" r="5" fill="#fab387"/>
<!-- Pupil -->
<circle cx="16" cy="16" r="2.5" fill="#1e1e2e"/>
<!-- Light reflection -->
<circle cx="14" cy="14.5" r="1" fill="#cdd6f4"/>
</svg>

After

Width:  |  Height:  |  Size: 463 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<line x1="16" y1="6" x2="16" y2="26" stroke="#a6e3a1" stroke-width="2"/>
<line x1="6" y1="16" x2="26" y2="16" stroke="#f38ba8" stroke-width="2"/>
<line x1="8" y1="8" x2="24" y2="24" stroke="#89b4fa" stroke-width="1.5" stroke-dasharray="2,2"/>
<circle cx="16" cy="16" r="4" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 454 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M6 12 L16 24 L26 12 Z" fill="#fab387" stroke="#f9e2af" stroke-width="1.5"/>
<text x="16" y="18" text-anchor="middle" font-family="sans-serif" font-size="7" font-weight="bold" fill="#313244">Bo</text>
</svg>

After

Width:  |  Height:  |  Size: 336 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M4 17 L16 11 L28 17 L28 23 L16 29 L4 23 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<path d="M4 17 L16 23 L28 17 M16 23 L16 29" fill="none" stroke="#313244" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="8" y="8" width="16" height="16" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<text x="16" y="20" text-anchor="middle" font-family="sans-serif" font-size="8" font-weight="bold" fill="#313244">F</text>
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- House shape -->
<path d="M16 6 L6 14 L6 26 L26 26 L26 14 Z" fill="#45475a" stroke="#f9e2af" stroke-width="1.5" stroke-linejoin="round"/>
<!-- Roof -->
<path d="M16 6 L4 16 L6 16 L16 8 L26 16 L28 16 Z" fill="#585b70" stroke="#f9e2af" stroke-width="1.5" stroke-linejoin="round"/>
<!-- Door -->
<rect x="13" y="18" width="6" height="8" rx="1" fill="#1e1e2e" stroke="#fab387" stroke-width="1"/>
<!-- Window -->
<rect x="19" y="14" width="4" height="4" rx="0.5" fill="#89dceb" stroke="#74c7ec" stroke-width="0.75"/>
</svg>

After

Width:  |  Height:  |  Size: 667 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M6 18 L16 12 L26 18 L26 24 L16 30 L6 24 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<path d="M6 18 L16 24 L26 18 M16 24 L16 30" fill="none" stroke="#313244" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M20 6 L8 16 L20 26 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<text x="15" y="20" text-anchor="middle" font-family="sans-serif" font-size="7" font-weight="bold" fill="#313244">L</text>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="8" y="8" width="16" height="16" fill="#fab387" stroke="#f9e2af" stroke-width="1.5"/>
<text x="16" y="20" text-anchor="middle" font-family="sans-serif" font-size="8" font-weight="bold" fill="#313244">B</text>
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M12 6 L24 16 L12 26 Z" fill="#fab387" stroke="#f9e2af" stroke-width="1.5"/>
<text x="17" y="20" text-anchor="middle" font-family="sans-serif" font-size="7" font-weight="bold" fill="#313244">R</text>
</svg>

After

Width:  |  Height:  |  Size: 335 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Camera body -->
<rect x="5" y="10" width="22" height="14" rx="2" fill="#45475a" stroke="#f9e2af" stroke-width="1.5"/>
<!-- Lens -->
<circle cx="16" cy="17" r="5" fill="#1e1e2e" stroke="#fab387" stroke-width="1.5"/>
<circle cx="16" cy="17" r="3" fill="#45475a"/>
<circle cx="16" cy="17" r="1.5" fill="#f9e2af"/>
<!-- Flash -->
<rect x="20" y="12" width="4" height="2" rx="0.5" fill="#cdd6f4"/>
<!-- Viewfinder bump -->
<rect x="12" y="7" width="8" height="4" rx="1" fill="#585b70" stroke="#f9e2af" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 676 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M6 20 L16 8 L26 20 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<text x="16" y="19" text-anchor="middle" font-family="sans-serif" font-size="7" font-weight="bold" fill="#313244">T</text>
</svg>

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M5 16 L16 10 L27 16 L27 24 L16 30 L5 24 Z" fill="#f9e2af" stroke="#fab387" stroke-width="1.5"/>
<path d="M5 16 L16 22 L27 16 M16 22 L16 30" fill="none" stroke="#313244" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
<!-- Drawing sheet -->
<rect x="5" y="5" width="22" height="22" rx="1" fill="#45475a" stroke="#cba6f7" stroke-width="1.5"/>
<!-- Title block -->
<rect x="5" y="22" width="22" height="5" fill="#585b70" stroke="#cba6f7" stroke-width="1"/>
<!-- Technical drawing - front view -->
<rect x="8" y="8" width="8" height="6" fill="none" stroke="#b4befe" stroke-width="1.5"/>
<!-- Hidden line -->
<line x1="10" y1="11" x2="14" y2="11" stroke="#b4befe" stroke-width="1" stroke-dasharray="2,1"/>
<!-- Dimension line -->
<line x1="8" y1="17" x2="16" y2="17" stroke="#cdd6f4" stroke-width="0.75"/>
<line x1="8" y1="16" x2="8" y2="18" stroke="#cdd6f4" stroke-width="0.75"/>
<line x1="16" y1="16" x2="16" y2="18" stroke="#cdd6f4" stroke-width="0.75"/>
<!-- Side view -->
<rect x="19" y="8" width="6" height="6" fill="none" stroke="#b4befe" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1008 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M8 6 L20 6 L24 10 L24 26 L8 26 Z" fill="none" stroke="#89b4fa" stroke-width="1.5"/>
<path d="M20 6 L20 10 L24 10" fill="none" stroke="#74c7ec" stroke-width="1.5"/>
<line x1="11" y1="14" x2="21" y2="14" stroke="#cdd6f4" stroke-width="1"/>
<line x1="11" y1="17" x2="21" y2="17" stroke="#cdd6f4" stroke-width="1"/>
<line x1="11" y1="20" x2="18" y2="20" stroke="#cdd6f4" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 528 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#585b70" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#585b70"/>
<line x1="6" y1="26" x2="26" y2="6" stroke="#f38ba8" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<ellipse cx="16" cy="16" rx="10" ry="6" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<circle cx="16" cy="16" r="3" fill="#b4befe"/>
</svg>

After

Width:  |  Height:  |  Size: 264 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="7" y="8" width="18" height="16" rx="2" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<line x1="10" y1="13" x2="22" y2="13" stroke="#b4befe" stroke-width="1.5"/>
<line x1="10" y1="17" x2="19" y2="17" stroke="#b4befe" stroke-width="1.5"/>
<line x1="10" y1="21" x2="16" y2="21" stroke="#b4befe" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 457 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<line x1="6" y1="16" x2="26" y2="16" stroke="#cba6f7" stroke-width="2"/>
<line x1="6" y1="12" x2="6" y2="20" stroke="#b4befe" stroke-width="1.5"/>
<line x1="26" y1="12" x2="26" y2="20" stroke="#b4befe" stroke-width="1.5"/>
<path d="M10 16 L6 14 M10 16 L6 18" stroke="#cba6f7" stroke-width="1.5"/>
<path d="M22 16 L26 14 M22 16 L26 18" stroke="#cba6f7" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 506 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M16 6 C12 6 10 8 10 10 L10 14 L16 14 L16 15 L8 15 L8 10 C8 6 12 4 16 4 C20 4 24 6 24 10 L24 12" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<path d="M16 26 C20 26 22 24 22 22 L22 18 L16 18 L16 17 L24 17 L24 22 C24 26 20 28 16 28 C12 28 8 26 8 22 L8 20" fill="none" stroke="#b4befe" stroke-width="1.5"/>
<circle cx="12" cy="9" r="1.5" fill="#cba6f7"/>
<circle cx="20" cy="23" r="1.5" fill="#b4befe"/>
</svg>

After

Width:  |  Height:  |  Size: 546 B

6
kindred-icons/Unlink.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M12 20 L8 20 A4 4 0 0 1 8 12 L12 12" fill="none" stroke="#585b70" stroke-width="2"/>
<path d="M20 12 L24 12 A4 4 0 0 1 24 20 L20 20" fill="none" stroke="#585b70" stroke-width="2"/>
<line x1="6" y1="26" x2="26" y2="6" stroke="#f38ba8" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 391 B

5
kindred-icons/VarSet.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<text x="16" y="21" text-anchor="middle" font-family="serif" font-size="14" font-style="italic" fill="#cba6f7">x</text>
<text x="21" y="24" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#a6e3a1">=</text>
</svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<path d="M16 6 L28 26 L4 26 Z" fill="none" stroke="#f9e2af" stroke-width="1.5"/>
<line x1="16" y1="12" x2="16" y2="19" stroke="#f9e2af" stroke-width="2"/>
<circle cx="16" cy="23" r="1.5" fill="#f9e2af"/>
</svg>

After

Width:  |  Height:  |  Size: 333 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<circle cx="16" cy="16" r="10" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<path d="M13 12 C13 9 19 9 19 12 C19 14 16 14 16 17" fill="none" stroke="#b4befe" stroke-width="2"/>
<circle cx="16" cy="21" r="1.5" fill="#b4befe"/>
</svg>

After

Width:  |  Height:  |  Size: 360 B

View File

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="4" fill="#313244"/>
<rect x="8" y="6" width="16" height="20" rx="2" fill="none" stroke="#cba6f7" stroke-width="1.5"/>
<rect x="10" y="8" width="12" height="5" rx="1" fill="#74c7ec"/>
<circle cx="12" cy="17" r="1.5" fill="#b4befe"/>
<circle cx="16" cy="17" r="1.5" fill="#b4befe"/>
<circle cx="20" cy="17" r="1.5" fill="#b4befe"/>
<circle cx="12" cy="22" r="1.5" fill="#b4befe"/>
<circle cx="16" cy="22" r="1.5" fill="#b4befe"/>
<circle cx="20" cy="22" r="1.5" fill="#a6e3a1"/>
</svg>

After

Width:  |  Height:  |  Size: 596 B

Some files were not shown because too many files have changed in this diff Show More