mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-13 13:48:26 +00:00
* feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * chore(icons): revert git hook changes made to icons * fix(packages/astro,react-native,vue): fix iconNode type fix(packages/vue): fix hasA11yProp * fix(packages/solid): make component reactive & add unit tests for checking prop changes * test(packages/vue): add reactivity tests to @lucide/vue * fix(packages): replace cpy-cli, accidentally removed during main merge * docs(packages): upgrade react documentation with nonScalingStroke * fix(tests): update snapshots for lucide-react * feat(docs): upgraded package guides with nonScalingStroke, dropping absoluteStrokeWidth * fix(vue,react-native): fix linting issues * fix(icons): add proper fallback for icon width in calculatedStrokeWidth * fix(packages/svelte): add globalProps.class to icons * fix(packages/shared): wrap width, height & size in isDefined * Update types.ts * fix(packages/svelte): do not pass propsClass to mergeClasses --------- Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
128 lines
3.1 KiB
Markdown
128 lines
3.1 KiB
Markdown
---
|
|
title: Combining icons - Angular
|
|
description: Learn how to combine multiple icons into a single icon nested SVG elements in your Angular application.
|
|
---
|
|
|
|
<script setup>
|
|
import Sandpack from '~/.vitepress/theme/components/editors/SandpackAngular.vue'
|
|
</script>
|
|
|
|
# Combining icons
|
|
|
|
You can combine multiple icons into a single icon by using SVG in SVG.
|
|
This is useful for if you want to be creative and make your own custom icons by combining existing icons.
|
|
|
|
::: sandpack {template=angular showTabs=false editorHeight=400 editorWidthPercentage=60 dependencies="@lucide/angular"}
|
|
|
|
```ts /src/app/app.component.ts [active]
|
|
import { Component, ViewEncapsulation } from '@angular/core';
|
|
import { LucideScan, LucideUser } from '@lucide/angular';
|
|
|
|
@Component({
|
|
selector: 'app',
|
|
imports: [LucideScan, LucideUser],
|
|
template: ` <svg
|
|
lucideScan
|
|
[size]="48"
|
|
[nonScalingStroke]="true"
|
|
>
|
|
<svg
|
|
lucideUser
|
|
[size]="12"
|
|
x="6"
|
|
y="6"
|
|
[strokeWidth]="4"
|
|
[nonScalingStroke]="true"
|
|
/>
|
|
</svg>`,
|
|
styleUrls: ['./app.component.css'],
|
|
encapsulation: ViewEncapsulation.None,
|
|
})
|
|
export class App {}
|
|
```
|
|
|
|
:::
|
|
|
|
This is valid SVG and all SVG properties are supported on the icons.
|
|
The `x` and `y` coordinates can be adjusted to position the icons as you like.
|
|
|
|
::: info Limitation
|
|
When combining icons, you need to make sure that the `x` and `y` coordinates are within the `viewBox` of the outer icon (24x24).
|
|
:::
|
|
|
|
## With custom SVG elements
|
|
|
|
You can also use SVG elements to create your own icons.
|
|
|
|
### Example with notification badge
|
|
|
|
For example, you can add a notification badge to an icon by using the `circle` SVG element.
|
|
|
|
::: sandpack {template=angular showTabs=false editorHeight=400 editorWidthPercentage=60 dependencies="@lucide/angular"}
|
|
|
|
```ts /src/app/app.component.ts [active]
|
|
import { Component, ViewEncapsulation, signal } from '@angular/core';
|
|
import { LucideMail } from '@lucide/angular';
|
|
|
|
@Component({
|
|
selector: 'app',
|
|
imports: [LucideMail],
|
|
template: ` <svg
|
|
lucideMail
|
|
[size]="48"
|
|
>
|
|
@if (hasUnreadMessages()) {
|
|
<circle
|
|
r="3"
|
|
cx="21"
|
|
cy="5"
|
|
stroke="none"
|
|
fill="#F56565"
|
|
/>
|
|
}
|
|
</svg>`,
|
|
styleUrls: ['./app.component.css'],
|
|
encapsulation: ViewEncapsulation.None,
|
|
})
|
|
export class App {
|
|
protected readonly hasUnreadMessages = signal<boolean>(true);
|
|
}
|
|
```
|
|
|
|
:::
|
|
|
|
### Example with text element
|
|
|
|
You can also use the `text` SVG element to add text to your icon.
|
|
|
|
::: sandpack {template=angular showTabs=false editorHeight=400 editorWidthPercentage=60 dependencies="@lucide/angular"}
|
|
|
|
```ts /src/app/app.component.ts [active]
|
|
import { Component, ViewEncapsulation } from '@angular/core';
|
|
import { LucideFile } from '@lucide/angular';
|
|
|
|
@Component({
|
|
selector: 'app',
|
|
imports: [LucideFile],
|
|
template: ` <svg
|
|
lucideFile
|
|
[size]="48"
|
|
>
|
|
<text
|
|
x="7.5"
|
|
y="19"
|
|
font-size="8"
|
|
font-family="Verdana,sans-serif"
|
|
stroke-width="1"
|
|
>
|
|
JS
|
|
</text>
|
|
</svg>`,
|
|
styleUrls: ['./app.component.css'],
|
|
encapsulation: ViewEncapsulation.None,
|
|
})
|
|
export class App {}
|
|
```
|
|
|
|
:::
|