Compare commits
2 Commits
angular-pa
...
icon-fix/u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10c41ba1ff | ||
|
|
a95310dbf3 |
@@ -9,3 +9,9 @@ strikethrough
|
|||||||
touchpad
|
touchpad
|
||||||
ungroup
|
ungroup
|
||||||
toc
|
toc
|
||||||
|
|
||||||
|
# Brands
|
||||||
|
codepen
|
||||||
|
codesandbox
|
||||||
|
dribbble
|
||||||
|
x.com
|
||||||
|
|||||||
9
.github/ISSUE_TEMPLATE/02_bug_report.yml
vendored
@@ -13,19 +13,16 @@ body:
|
|||||||
description: Which Lucide packages are affected? You may select more than one.
|
description: Which Lucide packages are affected? You may select more than one.
|
||||||
options:
|
options:
|
||||||
- label: lucide
|
- label: lucide
|
||||||
- label: lucide-angular (old version)
|
- label: lucide-angular
|
||||||
- label: '@lucide/angular (new version)'
|
|
||||||
- label: '@lucide/astro'
|
|
||||||
- label: lucide-flutter
|
- label: lucide-flutter
|
||||||
- label: lucide-preact
|
- label: lucide-preact
|
||||||
- label: lucide-react
|
- label: lucide-react
|
||||||
- label: lucide-react-native
|
- label: lucide-react-native
|
||||||
- label: lucide-solid
|
- label: lucide-solid
|
||||||
- label: lucide-static
|
- label: lucide-svelte
|
||||||
- label: lucide-svelte (old version)
|
|
||||||
- label: '@lucide/svelte (new version)'
|
|
||||||
- label: lucide-vue
|
- label: lucide-vue
|
||||||
- label: lucide-vue-next
|
- label: lucide-vue-next
|
||||||
|
- label: lucide-astro
|
||||||
- label: Figma plugin
|
- label: Figma plugin
|
||||||
- label: source/main
|
- label: source/main
|
||||||
- label: other/not relevant
|
- label: other/not relevant
|
||||||
|
|||||||
10
.github/ISSUE_TEMPLATE/04_feature_request.yml
vendored
@@ -13,23 +13,19 @@ body:
|
|||||||
description: Which Lucide project do you wish this feature were added to? You may select more than one.
|
description: Which Lucide project do you wish this feature were added to? You may select more than one.
|
||||||
options:
|
options:
|
||||||
- label: lucide
|
- label: lucide
|
||||||
- label: lucide-angular (old version)
|
- label: lucide-angular
|
||||||
- label: '@lucide/angular (new version)'
|
|
||||||
- label: '@lucide/astro'
|
|
||||||
- label: lucide-flutter
|
- label: lucide-flutter
|
||||||
- label: lucide-preact
|
- label: lucide-preact
|
||||||
- label: lucide-react
|
- label: lucide-react
|
||||||
- label: lucide-react-native
|
- label: lucide-react-native
|
||||||
- label: lucide-solid
|
- label: lucide-solid
|
||||||
- label: lucide-static
|
- label: lucide-svelte
|
||||||
- label: lucide-svelte (old version)
|
|
||||||
- label: '@lucide/svelte (new version)'
|
|
||||||
- label: lucide-vue
|
- label: lucide-vue
|
||||||
- label: lucide-vue-next
|
- label: lucide-vue-next
|
||||||
|
- label: lucide-astro
|
||||||
- label: Figma plugin
|
- label: Figma plugin
|
||||||
- label: all JS packages
|
- label: all JS packages
|
||||||
- label: site
|
- label: site
|
||||||
- label: other/not relevant
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|||||||
1
.github/labeler.yml
vendored
@@ -59,7 +59,6 @@
|
|||||||
🅰️ angular package:
|
🅰️ angular package:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file:
|
- any-glob-to-any-file:
|
||||||
- 'packages/angular/*'
|
|
||||||
- 'packages/lucide-angular/*'
|
- 'packages/lucide-angular/*'
|
||||||
|
|
||||||
# For changes in the lucide preact package
|
# For changes in the lucide preact package
|
||||||
|
|||||||
41
.github/workflows/angular.yml
vendored
@@ -1,41 +0,0 @@
|
|||||||
name: Lucide Angular checks
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- packages/angular/**
|
|
||||||
- tools/build-icons/**
|
|
||||||
- pnpm-lock.yaml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
- uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
cache: 'pnpm'
|
|
||||||
node-version-file: 'package.json'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: pnpm --filter @lucide/angular build
|
|
||||||
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
- uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
cache: 'pnpm'
|
|
||||||
node-version-file: 'package.json'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: pnpm --filter @lucide/angular test
|
|
||||||
18
.github/workflows/ci.yml
vendored
@@ -36,19 +36,25 @@ jobs:
|
|||||||
id: latest-tag
|
id: latest-tag
|
||||||
run: echo "LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT
|
run: echo "LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Log latest tag
|
|
||||||
run: echo '${{ steps.latest-tag.outputs.LATEST_TAG }}'
|
|
||||||
|
|
||||||
- name: Check if we can patch
|
- name: Check if we can patch
|
||||||
run: pnpm semver $LATEST_TAG -i minor
|
run: pnpm semver $LATEST_TAG -i minor
|
||||||
env:
|
|
||||||
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
|
|
||||||
|
|
||||||
- name: Create new version
|
- name: Create new version
|
||||||
id: new-version
|
id: new-version
|
||||||
run: echo "NEW_VERSION=$(pnpm semver $LATEST_TAG -i minor)" >> $GITHUB_OUTPUT
|
run: echo "NEW_VERSION=$(pnpm semver $LATEST_TAG -i minor)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create change log
|
||||||
|
id: change-log
|
||||||
|
run: |
|
||||||
|
CHANGE_LOG=$(pnpm run generate:changelog --old-tag=${{ steps.latest-tag.outputs.LATEST_TAG }})
|
||||||
|
CHANGE_LOG=$(tail -n +5 <<< $CHANGE_LOG)
|
||||||
|
echo $CHANGE_LOG
|
||||||
|
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
|
||||||
|
echo "CHANGE_LOG<<$EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$CHANGE_LOG" >> $GITHUB_OUTPUT
|
||||||
|
echo "$EOF" >> $GITHUB_OUTPUT
|
||||||
env:
|
env:
|
||||||
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
|
GITHUB_API_KEY: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Check output
|
- name: Check output
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
43
.github/workflows/lucide-vue.yml
vendored
@@ -1,43 +0,0 @@
|
|||||||
name: Lucide Vue checks
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- packages/lucide-vue/**
|
|
||||||
- packages/shared/**
|
|
||||||
- tools/build-icons/**
|
|
||||||
- tools/rollup-plugins/**
|
|
||||||
- pnpm-lock.yaml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
cache: 'pnpm'
|
|
||||||
node-version-file: 'package.json'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: pnpm --filter @lucide/vue build
|
|
||||||
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
cache: 'pnpm'
|
|
||||||
node-version-file: 'package.json'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: pnpm --filter @lucide/vue test
|
|
||||||
14
.github/workflows/release.yml
vendored
@@ -20,7 +20,7 @@ on:
|
|||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write # Required for OIDC
|
id-token: write # Required for OIDC
|
||||||
contents: write
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre-release:
|
pre-release:
|
||||||
@@ -58,10 +58,8 @@ jobs:
|
|||||||
'lucide-preact',
|
'lucide-preact',
|
||||||
'lucide-solid',
|
'lucide-solid',
|
||||||
'lucide-svelte',
|
'lucide-svelte',
|
||||||
'@lucide/angular',
|
|
||||||
'@lucide/astro',
|
'@lucide/astro',
|
||||||
'@lucide/svelte',
|
'@lucide/svelte',
|
||||||
'@lucide/vue',
|
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
@@ -74,6 +72,9 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Set Auth Token
|
||||||
|
run: npm config set //registry.npmjs.org/:_authToken ${{ inputs.NPM_TOKEN || secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
- name: Set new version
|
- name: Set new version
|
||||||
run: pnpm --filter ${{ matrix.package }} version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version
|
run: pnpm --filter ${{ matrix.package }} version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
@@ -108,6 +109,9 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Set Auth Token
|
||||||
|
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
- name: Set new version
|
- name: Set new version
|
||||||
run: pnpm --filter lucide-static version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version
|
run: pnpm --filter lucide-static version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version
|
||||||
|
|
||||||
@@ -153,9 +157,7 @@ jobs:
|
|||||||
if: github.repository == 'lucide-icons/lucide'
|
if: github.repository == 'lucide-icons/lucide'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [pre-release, lucide-font]
|
needs: [pre-release, lucide-font]
|
||||||
permissions:
|
|
||||||
id-token: write # Required for OIDC
|
|
||||||
contents: write
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"adobe": "Adobe",
|
"adobe": "Adobe",
|
||||||
"airplay": "AirPlay",
|
"airplay": "AirPlay",
|
||||||
"amazon": "Amazon",
|
"amazon": "Amazon",
|
||||||
"android": "Android",
|
|
||||||
"angular": "Angular",
|
"angular": "Angular",
|
||||||
"aws": "AWS",
|
"aws": "AWS",
|
||||||
"azure": "Azure",
|
"azure": "Azure",
|
||||||
|
|||||||
5
categories/brands.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../category.schema.json",
|
||||||
|
"title": "Brands",
|
||||||
|
"icon": "facebook"
|
||||||
|
}
|
||||||
@@ -15,6 +15,10 @@
|
|||||||
"name": "arrows",
|
"name": "arrows",
|
||||||
"title": "Arrows"
|
"title": "Arrows"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "brands",
|
||||||
|
"title": "Brands"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "buildings",
|
"name": "buildings",
|
||||||
"title": "Buildings"
|
"title": "Buildings"
|
||||||
|
|||||||
@@ -31,12 +31,20 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"@lucide/vue": {
|
"lucide-vue-next": {
|
||||||
"order": 2,
|
"order": 2,
|
||||||
"icon": "vue",
|
"icon": "vue-next",
|
||||||
"docsAlias": "lucide-vue",
|
|
||||||
"packageDirname": "vue",
|
|
||||||
"shields": [
|
"shields": [
|
||||||
|
{
|
||||||
|
"alt": "npm",
|
||||||
|
"src": "https://img.shields.io/npm/v/lucide-vue-next",
|
||||||
|
"href": "https://www.npmjs.com/package/lucide-vue-next"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alt": "npm",
|
||||||
|
"src": "https://img.shields.io/npm/dw/lucide-vue-next",
|
||||||
|
"href": "https://www.npmjs.com/package/lucide-vue-next"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"lucide-svelte": {
|
"lucide-svelte": {
|
||||||
@@ -87,24 +95,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"@lucide/angular": {
|
|
||||||
"order": 6,
|
|
||||||
"icon": "angular",
|
|
||||||
"shields": [
|
|
||||||
{
|
|
||||||
"alt": "npm",
|
|
||||||
"src": "https://img.shields.io/npm/v/@lucide/angular",
|
|
||||||
"href": "https://www.npmjs.com/package/@lucide/angular"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alt": "npm",
|
|
||||||
"src": "https://img.shields.io/npm/dw/@lucide/angular",
|
|
||||||
"href": "https://www.npmjs.com/package/@lucide/angular"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"lucide-angular": {
|
"lucide-angular": {
|
||||||
"order": 7,
|
"order": 6,
|
||||||
"icon": "angular",
|
"icon": "angular",
|
||||||
"shields": [
|
"shields": [
|
||||||
{
|
{
|
||||||
@@ -120,7 +112,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"lucide-preact": {
|
"lucide-preact": {
|
||||||
"order": 8,
|
"order": 7,
|
||||||
"icon": "preact",
|
"icon": "preact",
|
||||||
"shields": [
|
"shields": [
|
||||||
{
|
{
|
||||||
@@ -138,7 +130,7 @@
|
|||||||
"@lucide/astro": {
|
"@lucide/astro": {
|
||||||
"docsAlias": "lucide-astro",
|
"docsAlias": "lucide-astro",
|
||||||
"packageDirname": "astro",
|
"packageDirname": "astro",
|
||||||
"order": 9,
|
"order": 8,
|
||||||
"icon": "astro",
|
"icon": "astro",
|
||||||
"iconDark": "astro-dark",
|
"iconDark": "astro-dark",
|
||||||
"shields": [
|
"shields": [
|
||||||
@@ -155,7 +147,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"lucide-static": {
|
"lucide-static": {
|
||||||
"order": 10,
|
"order": 9,
|
||||||
"icon": "svg",
|
"icon": "svg",
|
||||||
"shields": [
|
"shields": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export default App;
|
|||||||
language: 'vue',
|
language: 'vue',
|
||||||
title: 'Vue',
|
title: 'Vue',
|
||||||
code: `<script setup>
|
code: `<script setup>
|
||||||
import { $PascalCase } from '@lucide/vue';
|
import { $PascalCase } from 'lucide-vue-next';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createLucideIcon } from 'lucide-react/src/lucide-react';
|
import { createLucideIcon } from 'lucide-react/src/lucide-react';
|
||||||
import { type LucideProps, type IconNode } from 'lucide-react/src/types';
|
import { type LucideProps, type IconNode } from 'lucide-react/src/createLucideIcon';
|
||||||
import { IconEntity } from '../theme/types';
|
import { IconEntity } from '../theme/types';
|
||||||
import { renderToStaticMarkup } from 'react-dom/server';
|
import { renderToStaticMarkup } from 'react-dom/server';
|
||||||
import { IconContent } from './generateZip';
|
import { IconContent } from './generateZip';
|
||||||
|
|||||||
@@ -69,39 +69,39 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
|
|||||||
link: '/guide/packages/lucide',
|
link: '/guide/packages/lucide',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'React',
|
text: 'Lucide React',
|
||||||
link: '/guide/packages/lucide-react',
|
link: '/guide/packages/lucide-react',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Vue',
|
text: 'Lucide Vue',
|
||||||
link: '/guide/packages/lucide-vue',
|
link: '/guide/packages/lucide-vue-next',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Svelte',
|
text: 'Lucide Svelte',
|
||||||
link: '/guide/packages/lucide-svelte',
|
link: '/guide/packages/lucide-svelte',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Solid',
|
text: 'Lucide Solid',
|
||||||
link: '/guide/packages/lucide-solid',
|
link: '/guide/packages/lucide-solid',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'React Native',
|
text: 'Lucide React Native',
|
||||||
link: '/guide/packages/lucide-react-native',
|
link: '/guide/packages/lucide-react-native',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Angular',
|
text: 'Lucide Angular',
|
||||||
link: '/guide/packages/angular',
|
link: '/guide/packages/lucide-angular',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Preact',
|
text: 'Lucide Preact',
|
||||||
link: '/guide/packages/lucide-preact',
|
link: '/guide/packages/lucide-preact',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Astro',
|
text: 'Lucide Astro',
|
||||||
link: '/guide/packages/lucide-astro',
|
link: '/guide/packages/lucide-astro',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Static',
|
text: 'Lucide Static',
|
||||||
link: '/guide/packages/lucide-static',
|
link: '/guide/packages/lucide-static',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,31 +1,23 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useData } from 'vitepress';
|
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
modelValue: string;
|
modelValue: string
|
||||||
id: string;
|
id: string
|
||||||
}>();
|
}>()
|
||||||
|
|
||||||
const { isDark } = useData();
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue']);
|
|
||||||
|
|
||||||
const value = computed({
|
const value = computed({
|
||||||
get: () => {
|
get: () => props.modelValue,
|
||||||
if (props.modelValue == null || props.modelValue === 'currentColor') {
|
set: (val) => emit('update:modelValue', val)
|
||||||
return isDark.value ? '#ffffff' : '#000000';
|
})
|
||||||
}
|
|
||||||
|
|
||||||
return props.modelValue;
|
|
||||||
},
|
|
||||||
set: (val) => emit('update:modelValue', val),
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="color-picker">
|
<div class="color-picker">
|
||||||
<div class="color-input-wrapper">
|
<div class="color-input-wrapper">
|
||||||
|
<!-- TODO: Add currentColor div if value is currentColor -->
|
||||||
<input
|
<input
|
||||||
type="color"
|
type="color"
|
||||||
:id="id"
|
:id="id"
|
||||||
@@ -41,7 +33,6 @@ const value = computed({
|
|||||||
class="color-input-text"
|
class="color-input-text"
|
||||||
aria-label="Color picker input"
|
aria-label="Color picker input"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
placeholder="[default]"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -54,33 +45,27 @@ const value = computed({
|
|||||||
top: -5px;
|
top: -5px;
|
||||||
left: -5px;
|
left: -5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-input-wrapper {
|
.color-input-wrapper {
|
||||||
height: 24px;
|
height: 24px;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 4px;
|
border-radius: 12px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-picker {
|
.color-picker {
|
||||||
background: var(--color-picker-bg, var(--vp-c-bg-alt));
|
background: var(--color-picker-bg, var(--vp-c-bg-alt));
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
color: var(--vp-c-text-2);
|
color: var(--vp-c-text-2);
|
||||||
padding: 3px 8px 3px 3px;
|
padding: 4px 8px;
|
||||||
height: auto;
|
height: auto;
|
||||||
font-size: 13px;
|
font-size: 14px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 2px;
|
gap: 2px;
|
||||||
transition:
|
|
||||||
color 0.25s,
|
|
||||||
border-color 0.25s,
|
|
||||||
background-color 0.25s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-input-text {
|
.color-input-text {
|
||||||
@@ -90,22 +75,19 @@ const value = computed({
|
|||||||
border: none;
|
border: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--vp-c-text-1);
|
color: var(--vp-c-text-1);
|
||||||
font-size: 13px;
|
font-size: 14px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
transition:
|
transition: border-color 0.25s, background 0.4s ease;
|
||||||
border-color 0.25s,
|
|
||||||
background 0.4s ease;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-picker:hover,
|
.color-picker:hover, .color-picker:focus {
|
||||||
.color-picker:focus {
|
|
||||||
border-color: var(--vp-c-brand);
|
border-color: var(--vp-c-brand);
|
||||||
background: var(--vp-c-bg-alt);
|
background: var(--vp-c-bg-alt);
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-input[value='currentColor'] {
|
.color-input[value="currentColor"] {
|
||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,27 +1,22 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon'
|
||||||
import { search } from '../../../data/iconNodes';
|
import { search } from '../../../data/iconNodes'
|
||||||
|
|
||||||
|
const SearchIcon = createLucideIcon('search', search)
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
shortcut: {
|
shortcut: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false
|
||||||
},
|
}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<button class="fake-input">
|
<button class="fake-input">
|
||||||
<Icon
|
<component :is="SearchIcon" class="search-icon"/>
|
||||||
:iconNode="search"
|
<slot/>
|
||||||
class="search-icon"
|
<kbd v-if="shortcut" class="shortcut">{{ shortcut }}</kbd>
|
||||||
/>
|
|
||||||
<slot />
|
|
||||||
<kbd
|
|
||||||
v-if="shortcut"
|
|
||||||
class="shortcut"
|
|
||||||
>{{ shortcut }}</kbd
|
|
||||||
>
|
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -39,14 +34,10 @@ defineProps({
|
|||||||
cursor: text;
|
cursor: text;
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
transition:
|
transition: color 0.25s, border-color 0.25s, background-color 0.25s;
|
||||||
color 0.25s,
|
|
||||||
border-color 0.25s,
|
|
||||||
background-color 0.25s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.fake-input:hover,
|
.fake-input:hover, .fake-input:focus {
|
||||||
.fake-input:focus {
|
|
||||||
border-color: var(--vp-c-brand);
|
border-color: var(--vp-c-brand);
|
||||||
background: var(--vp-c-bg-alt);
|
background: var(--vp-c-bg-alt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.icon-button {
|
.icon-button {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|||||||
@@ -1,90 +1,60 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
};
|
}
|
||||||
|
|
||||||
export interface InputProps {
|
export interface InputProps {
|
||||||
type: string;
|
type: string
|
||||||
modelValue: string;
|
modelValue: string
|
||||||
shortcut?: string;
|
shortcut?: string
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, nextTick, watch } from 'vue';
|
import { ref, onMounted, nextTick, watch } from 'vue'
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
|
||||||
import { x } from '../../../data/iconNodes';
|
|
||||||
import IconButton from './IconButton.vue';
|
|
||||||
|
|
||||||
const props = withDefaults(defineProps<InputProps>(), {
|
const props = withDefaults(defineProps<InputProps>(), {
|
||||||
type: 'text',
|
type: 'text'
|
||||||
});
|
})
|
||||||
|
|
||||||
const input = ref();
|
const input = ref()
|
||||||
const wrapperEl = ref();
|
const wrapperEl = ref()
|
||||||
const shortcutEl = ref();
|
const shortcutEl = ref()
|
||||||
|
|
||||||
const emit = defineEmits(['change', 'input', 'update:modelValue']);
|
defineEmits(['change', 'input', 'update:modelValue'])
|
||||||
|
|
||||||
const updateShortcutSpacing = () => {
|
const updateShortcutSpacing = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (shortcutEl.value && wrapperEl.value) {
|
if (shortcutEl.value && wrapperEl.value) {
|
||||||
const shortcutWidth = shortcutEl.value.offsetWidth;
|
const shortcutWidth = shortcutEl.value.offsetWidth
|
||||||
wrapperEl.value.style.setProperty('--shortcut-width', `${shortcutWidth}px`);
|
wrapperEl.value.style.setProperty('--shortcut-width', `${shortcutWidth}px`)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
};
|
|
||||||
|
|
||||||
onMounted(updateShortcutSpacing);
|
|
||||||
watch(() => props.shortcut, updateShortcutSpacing);
|
|
||||||
|
|
||||||
function onClear() {
|
|
||||||
emit('update:modelValue', '');
|
|
||||||
input.value.focus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(updateShortcutSpacing)
|
||||||
|
watch(() => props.shortcut, updateShortcutSpacing)
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
focus: () => {
|
focus: () => {
|
||||||
input.value.focus();
|
input.value.focus()
|
||||||
},
|
}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div class="input-wrapper" ref="wrapperEl">
|
||||||
class="input-wrapper"
|
<slot name="icon" class="icon" />
|
||||||
ref="wrapperEl"
|
|
||||||
>
|
|
||||||
<slot
|
|
||||||
name="icon"
|
|
||||||
class="icon"
|
|
||||||
/>
|
|
||||||
<input
|
<input
|
||||||
:type="type"
|
:type="type"
|
||||||
class="input"
|
class="input"
|
||||||
:class="{ 'has-icon': $slots.icon, 'has-shortcut': shortcut }"
|
:class="{'has-icon': $slots.icon, 'has-shortcut': shortcut}"
|
||||||
ref="input"
|
ref="input"
|
||||||
:value="modelValue"
|
:value="modelValue"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
@input="$emit('update:modelValue', $event.target.value)"
|
@input="$emit('update:modelValue', $event.target.value)"
|
||||||
/>
|
/>
|
||||||
<IconButton
|
<kbd v-if="shortcut" class="shortcut" ref="shortcutEl">{{ shortcut }}</kbd>
|
||||||
@click="onClear"
|
|
||||||
v-if="type === 'search' && modelValue"
|
|
||||||
class="clear-button"
|
|
||||||
aria-label="Clear input"
|
|
||||||
>
|
|
||||||
<Icon
|
|
||||||
:iconNode="x"
|
|
||||||
:size="20"
|
|
||||||
/>
|
|
||||||
</IconButton>
|
|
||||||
<kbd
|
|
||||||
v-if="shortcut"
|
|
||||||
class="shortcut"
|
|
||||||
ref="shortcutEl"
|
|
||||||
>{{ shortcut }}</kbd
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -92,7 +62,6 @@ defineExpose({
|
|||||||
.input-wrapper {
|
.input-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input {
|
.input {
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
@@ -102,18 +71,13 @@ defineExpose({
|
|||||||
height: 40px;
|
height: 40px;
|
||||||
background-color: var(--vp-c-bg-alt);
|
background-color: var(--vp-c-bg-alt);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
transition:
|
|
||||||
color 0.25s,
|
|
||||||
border-color 0.25s,
|
|
||||||
background-color 0.25s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.input.has-shortcut {
|
.input.has-shortcut {
|
||||||
padding-right: calc(var(--shortcut-width, 40px) + 22px);
|
padding-right: calc(var(--shortcut-width, 40px) + 22px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.input:hover,
|
.input:hover, .input:focus {
|
||||||
.input:focus {
|
|
||||||
border-color: var(--vp-c-brand);
|
border-color: var(--vp-c-brand);
|
||||||
background: var(--vp-c-bg-alt);
|
background: var(--vp-c-bg-alt);
|
||||||
}
|
}
|
||||||
@@ -122,14 +86,6 @@ defineExpose({
|
|||||||
padding-left: 52px;
|
padding-left: 52px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clear-button {
|
|
||||||
position: absolute;
|
|
||||||
right: 56px;
|
|
||||||
top: 9px;
|
|
||||||
padding: 4px;
|
|
||||||
transition: background-color .25s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shortcut {
|
.shortcut {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 12px;
|
right: 12px;
|
||||||
@@ -155,7 +111,7 @@ defineExpose({
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.input-wrapper > svg {
|
.input-wrapper svg {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 16px;
|
left: 16px;
|
||||||
top: 12px;
|
top: 12px;
|
||||||
|
|||||||
@@ -1,36 +1,38 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue'
|
||||||
import Input from './Input.vue';
|
import Input from './Input.vue'
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon'
|
||||||
import { search } from '../../../data/iconNodes';
|
import { search } from '../../../data/iconNodes'
|
||||||
|
|
||||||
|
const SearchIcon = createLucideIcon('search', search)
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: string;
|
modelValue: string
|
||||||
shortcut?: string;
|
shortcut?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>()
|
||||||
|
|
||||||
const input = ref();
|
const input = ref()
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue']);
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
focus: () => {
|
focus: () => {
|
||||||
input.value.focus();
|
input.value.focus()
|
||||||
},
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
const value = computed({
|
const value = computed({
|
||||||
get: () => props.modelValue,
|
get: () => props.modelValue,
|
||||||
set: (val) => emit('update:modelValue', val),
|
set: (val) => emit('update:modelValue', val)
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -44,10 +46,7 @@ const value = computed({
|
|||||||
class="input-wrapper"
|
class="input-wrapper"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<Icon
|
<component :is="SearchIcon" class="search-icon" />
|
||||||
:iconNode="search"
|
|
||||||
class="search-icon"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</Input>
|
</Input>
|
||||||
</template>
|
</template>
|
||||||
@@ -63,8 +62,7 @@ const value = computed({
|
|||||||
background-color: var(--vp-c-bg-alt);
|
background-color: var(--vp-c-bg-alt);
|
||||||
}
|
}
|
||||||
|
|
||||||
.input:hover,
|
.input:hover, .input:focus {
|
||||||
.input:focus {
|
|
||||||
border-color: var(--vp-c-brand);
|
border-color: var(--vp-c-brand);
|
||||||
background: var(--vp-c-bg-alt);
|
background: var(--vp-c-bg-alt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { rotateCw } from '../../../data/iconNodes';
|
import { rotateCw } from '../../../data/iconNodes'
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon'
|
||||||
import IconButton from './IconButton.vue';
|
import IconButton from "./IconButton.vue";
|
||||||
|
|
||||||
|
const RotateIcon = createLucideIcon('RotateIcon', rotateCw)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<IconButton class="reset-button">
|
<IconButton class="reset-button">
|
||||||
<Icon
|
<RotateIcon :size="20"/>
|
||||||
:size="20"
|
|
||||||
:iconNode="rotateCw"
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -33,7 +32,6 @@ import IconButton from './IconButton.vue';
|
|||||||
0% {
|
0% {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
transform: rotate(359deg);
|
transform: rotate(359deg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,27 +13,27 @@ export default {
|
|||||||
label: 'Lucide documentation for React',
|
label: 'Lucide documentation for React',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'lucide-vue',
|
name: 'lucide-vue-next',
|
||||||
logo: '/framework-logos/vue.svg',
|
logo: '/framework-logos/vue.svg',
|
||||||
label: 'Lucide documentation for Vue',
|
label: 'Lucide documentation for Vue 3',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'lucide-svelte',
|
name: 'lucide-svelte',
|
||||||
logo: '/framework-logos/svelte.svg',
|
logo: '/framework-logos/svelte.svg',
|
||||||
label: 'Lucide documentation for Svelte',
|
label: 'Lucide documentation for Svelte',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'lucide-solid',
|
|
||||||
logo: '/framework-logos/solid.svg',
|
|
||||||
label: 'Lucide documentation for Solid',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'lucide-preact',
|
name: 'lucide-preact',
|
||||||
logo: '/framework-logos/preact.svg',
|
logo: '/framework-logos/preact.svg',
|
||||||
label: 'Lucide documentation for Preact',
|
label: 'Lucide documentation for Preact',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'angular',
|
name: 'lucide-solid',
|
||||||
|
logo: '/framework-logos/solid.svg',
|
||||||
|
label: 'Lucide documentation for Solid',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'lucide-angular',
|
||||||
logo: '/framework-logos/angular.svg',
|
logo: '/framework-logos/angular.svg',
|
||||||
label: 'Lucide documentation for Angular',
|
label: 'Lucide documentation for Angular',
|
||||||
},
|
},
|
||||||
@@ -48,6 +48,11 @@ export default {
|
|||||||
logo: '/framework-logos/react-native.svg',
|
logo: '/framework-logos/react-native.svg',
|
||||||
label: 'Lucide documentation for React Native',
|
label: 'Lucide documentation for React Native',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'lucide-flutter',
|
||||||
|
logo: '/framework-logos/flutter.svg',
|
||||||
|
label: 'Lucide documentation for Flutter',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,48 +2,45 @@
|
|||||||
import { useData } from 'vitepress';
|
import { useData } from 'vitepress';
|
||||||
import { useSessionStorage } from '@vueuse/core';
|
import { useSessionStorage } from '@vueuse/core';
|
||||||
import IconButton from '../base/IconButton.vue';
|
import IconButton from '../base/IconButton.vue';
|
||||||
import VPDocAsideCarbonAds from 'vitepress/dist/client/theme-default/components/VPDocAsideCarbonAds.vue';
|
import VPDocAsideCarbonAds from 'vitepress/dist/client/theme-default/components/VPDocAsideCarbonAds.vue'
|
||||||
import { x } from '../../../data/iconNodes';
|
import { x } from '../../../data/iconNodes'
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
|
||||||
import { onMounted, ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
|
|
||||||
const { theme } = useData();
|
const { theme } = useData()
|
||||||
const showAd = useSessionStorage('show-carbon-ads', true);
|
const showAd = useSessionStorage('show-carbon-ads', true)
|
||||||
const carbonLoaded = ref(true);
|
const carbonLoaded = ref(true)
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
drawerOpen: boolean;
|
drawerOpen: boolean
|
||||||
}>();
|
}>()
|
||||||
|
|
||||||
|
const CloseIcon = createLucideIcon('Close', x)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (window?._carbonads == null) {
|
if (window?._carbonads == null) {
|
||||||
carbonLoaded.value = false;
|
carbonLoaded.value = false
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000)
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
:class="{
|
:class="{
|
||||||
'drawer-open': drawerOpen,
|
'drawer-open': drawerOpen,
|
||||||
'hide-ad': !(showAd && carbonLoaded),
|
'hide-ad': !(showAd && carbonLoaded)
|
||||||
}"
|
}"
|
||||||
class="floating-ad"
|
class="floating-ad"
|
||||||
v-if="theme.carbonAds"
|
v-if="theme.carbonAds"
|
||||||
>
|
>
|
||||||
<IconButton
|
<IconButton @click="showAd = false" class="hide-button">
|
||||||
@click="showAd = false"
|
<component :is="CloseIcon" :size="20" absoluteStrokeWidth />
|
||||||
class="hide-button"
|
|
||||||
>
|
|
||||||
<Icon
|
|
||||||
:iconNode="x"
|
|
||||||
:size="20"
|
|
||||||
absoluteStrokeWidth
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<VPDocAsideCarbonAds :carbon-ads="theme.carbonAds" />
|
<VPDocAsideCarbonAds
|
||||||
|
:carbon-ads="theme.carbonAds"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -54,9 +51,7 @@ onMounted(() => {
|
|||||||
bottom: 32px;
|
bottom: 32px;
|
||||||
width: 224px;
|
width: 224px;
|
||||||
right: 32px;
|
right: 32px;
|
||||||
transition:
|
transition: opacity 0.5s, transform 0.25s ease;
|
||||||
opacity 0.5s,
|
|
||||||
transform 0.25s ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.floating-ad.drawer-open {
|
.floating-ad.drawer-open {
|
||||||
@@ -72,11 +67,8 @@ onMounted(() => {
|
|||||||
transform: translateY(-288px) translateX(224px);
|
transform: translateY(-288px) translateX(224px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.floating-ad.drawer-open,
|
.floating-ad.drawer-open, .floating-ad.hide-ad {
|
||||||
.floating-ad.hide-ad {
|
transition: opacity 0.25s, transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
|
||||||
transition:
|
|
||||||
opacity 0.25s,
|
|
||||||
transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1280px) {
|
@media (min-width: 1280px) {
|
||||||
|
|||||||
@@ -1,68 +1,70 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import ButtonMenu from '../base/ButtonMenu.vue';
|
import ButtonMenu from '../base/ButtonMenu.vue'
|
||||||
import { useIconStyleContext } from '../../composables/useIconStyle';
|
import { useIconStyleContext } from '../../composables/useIconStyle';
|
||||||
import useConfetti from '../../composables/useConfetti';
|
import useConfetti from '../../composables/useConfetti';
|
||||||
import getSVGIcon from '../../utils/getSVGIcon';
|
import getSVGIcon from '../../utils/getSVGIcon';
|
||||||
import downloadData from '../../utils/downloadData';
|
import downloadData from '../../utils/downloadData';
|
||||||
|
|
||||||
const downloadText = 'Download!';
|
const downloadText = 'Download!'
|
||||||
const copiedText = 'Copied!';
|
const copiedText = 'Copied!'
|
||||||
const confettiText = ref(copiedText);
|
const confettiText = ref(copiedText)
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
name: string;
|
name: string
|
||||||
popoverPosition?: 'top' | 'bottom';
|
popoverPosition?: 'top' | 'bottom'
|
||||||
}>();
|
}>()
|
||||||
|
|
||||||
const { size } = useIconStyleContext();
|
const { size } = useIconStyleContext()
|
||||||
|
|
||||||
const { animate, confetti } = useConfetti();
|
const { animate, confetti } = useConfetti()
|
||||||
|
|
||||||
function copySVG() {
|
function copySVG() {
|
||||||
confettiText.value = copiedText;
|
confettiText.value = copiedText
|
||||||
const svgString = getSVGIcon();
|
const svgString = getSVGIcon()
|
||||||
|
|
||||||
navigator.clipboard.writeText(svgString);
|
navigator.clipboard.writeText(svgString)
|
||||||
|
|
||||||
confetti();
|
confetti()
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyDataUrl() {
|
function copyDataUrl() {
|
||||||
confettiText.value = copiedText;
|
confettiText.value = copiedText
|
||||||
const svgString = getSVGIcon();
|
const svgString = getSVGIcon()
|
||||||
|
|
||||||
// Create SVG data url
|
// Create SVG data url
|
||||||
const dataUrl = `data:image/svg+xml;base64,${btoa(svgString)}`;
|
const dataUrl = `data:image/svg+xml;base64,${btoa(svgString)}`
|
||||||
navigator.clipboard.writeText(dataUrl);
|
navigator.clipboard.writeText(dataUrl)
|
||||||
|
|
||||||
confetti();
|
confetti()
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadSVG() {
|
function downloadSVG() {
|
||||||
confettiText.value = downloadText;
|
confettiText.value = downloadText
|
||||||
const svgString = getSVGIcon();
|
const svgString = getSVGIcon()
|
||||||
|
|
||||||
downloadData(`${props.name}.svg`, `data:image/svg+xml;base64,${btoa(svgString)}`);
|
downloadData(`${props.name}.svg`, `data:image/svg+xml;base64,${btoa(svgString)}`)
|
||||||
confetti();
|
confetti()
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadPNG() {
|
function downloadPNG() {
|
||||||
confettiText.value = downloadText;
|
confettiText.value = downloadText
|
||||||
const svgString = getSVGIcon();
|
const svgString = getSVGIcon()
|
||||||
|
|
||||||
const canvas = document.createElement('canvas');
|
const canvas = document.createElement('canvas');
|
||||||
canvas.width = size.value;
|
canvas.width = size.value;
|
||||||
canvas.height = size.value;
|
canvas.height = size.value;
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext("2d");
|
||||||
|
|
||||||
const image = new Image();
|
const image = new Image();
|
||||||
image.src = `data:image/svg+xml;base64,${btoa(svgString)}`;
|
image.src = `data:image/svg+xml;base64,${btoa(svgString)}`;
|
||||||
image.onload = function () {
|
image.onload = function() {
|
||||||
ctx.drawImage(image, 0, 0);
|
ctx.drawImage(image, 0, 0);
|
||||||
downloadData(`${props.name}.png`, canvas.toDataURL('image/png'));
|
downloadData(`${props.name}.png`, canvas.toDataURL('image/png'))
|
||||||
confetti();
|
confetti()
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -73,10 +75,10 @@ function downloadPNG() {
|
|||||||
:data-confetti-text="confettiText"
|
:data-confetti-text="confettiText"
|
||||||
:popoverPosition="popoverPosition"
|
:popoverPosition="popoverPosition"
|
||||||
:options="[
|
:options="[
|
||||||
{ text: 'Copy SVG', onClick: copySVG },
|
{ text: 'Copy SVG' , onClick: copySVG },
|
||||||
{ text: 'Copy Data URL', onClick: copyDataUrl },
|
{ text: 'Copy Data URL' , onClick: copyDataUrl },
|
||||||
{ text: 'Download SVG', onClick: downloadSVG },
|
{ text: 'Download SVG' , onClick: downloadSVG },
|
||||||
{ text: 'Download PNG', onClick: downloadPNG },
|
{ text: 'Download PNG' , onClick: downloadPNG },
|
||||||
]"
|
]"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,44 +1,41 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, useSlots } from 'vue';
|
import { computed, useSlots } from 'vue';
|
||||||
import { copy } from '../../../data/iconNodes';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon'
|
||||||
|
import { copy } from '../../../data/iconNodes'
|
||||||
import useConfetti from '../../composables/useConfetti';
|
import useConfetti from '../../composables/useConfetti';
|
||||||
import Icon from 'lucide-vue-next/src/Icon';
|
const { animate, confetti } = useConfetti()
|
||||||
const { animate, confetti } = useConfetti();
|
const slots = useSlots()
|
||||||
const slots = useSlots();
|
|
||||||
|
|
||||||
const copiedText = computed(() => slots.default?.()[0].children);
|
const copiedText = computed(() => slots.default?.()[0].children)
|
||||||
|
|
||||||
function copyText() {
|
function copyText() {
|
||||||
navigator.clipboard.writeText(copiedText.value);
|
navigator.clipboard.writeText(copiedText.value)
|
||||||
|
|
||||||
confetti();
|
confetti()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Copy = createLucideIcon('ChevronUp', copy)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<h1
|
<h1
|
||||||
class="icon-name confetti-button"
|
class="icon-name confetti-button"
|
||||||
:class="{ animate }"
|
:class="{animate}"
|
||||||
data-confetti-text="Copied!"
|
data-confetti-text="Copied!"
|
||||||
@click="copyText"
|
@click="copyText"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
<Icon
|
<Copy :size="20" class="copy-icon"/>
|
||||||
:iconNode="copy"
|
|
||||||
:size="20"
|
|
||||||
class="copy-icon"
|
|
||||||
/>
|
|
||||||
</h1>
|
</h1>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@import './confetti.css';
|
@import './confetti.css';
|
||||||
|
|
||||||
.icon-name {
|
.icon-name {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
transition: background ease-in 0.15s;
|
transition: background ease-in .15s;;
|
||||||
padding: 2px 8px;
|
padding: 2px 8px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
width: auto;
|
width: auto;
|
||||||
@@ -51,7 +48,7 @@ function copyText() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.icon-name:hover .copy-icon {
|
.icon-name:hover .copy-icon {
|
||||||
opacity: 0.9;
|
opacity: .9;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-name:before,
|
.icon-name:before,
|
||||||
@@ -68,10 +65,10 @@ function copyText() {
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
margin-left: 12px;
|
margin-left: 12px;
|
||||||
margin-top: 6px;
|
margin-top: 6px;
|
||||||
transition: ease 0.3s opacity;
|
transition:ease .3s opacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-name:hover .copy-icon:hover {
|
.icon-name:hover .copy-icon:hover {
|
||||||
opacity: 0.6;
|
opacity: .6;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -29,12 +29,7 @@ const props = defineProps<{
|
|||||||
|
|
||||||
const iconComponent = computed(() => {
|
const iconComponent = computed(() => {
|
||||||
if (!props.name || !props.iconNode) return null;
|
if (!props.name || !props.iconNode) return null;
|
||||||
try {
|
|
||||||
return createLucideIcon(props.name, props.iconNode);
|
return createLucideIcon(props.name, props.iconNode);
|
||||||
} catch (error) {
|
|
||||||
console.warn(`Icon ${props.name} not found, using fallback`);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const CalendarIcon = createLucideIcon('calendar', Calendar.iconNode);
|
const CalendarIcon = createLucideIcon('calendar', Calendar.iconNode);
|
||||||
@@ -66,7 +61,7 @@ const prettyName = props.name
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section class="showcase" v-if="iconComponent">
|
<section class="showcase">
|
||||||
<h2 class="title">See this icon in action</h2>
|
<h2 class="title">See this icon in action</h2>
|
||||||
<div class="showcase-grid">
|
<div class="showcase-grid">
|
||||||
<div class="showcase-item column">
|
<div class="showcase-item column">
|
||||||
|
|||||||
@@ -1,72 +1,75 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { shallowRef, type Ref, watch, computed } from 'vue';
|
import { shallowRef, type Ref, watch, computed } from 'vue'
|
||||||
import { useCssVar, syncRef } from '@vueuse/core';
|
import { useCssVar, syncRef } from '@vueuse/core'
|
||||||
import { STYLE_DEFAULTS, useIconStyleContext } from '../../composables/useIconStyle';
|
import { STYLE_DEFAULTS, useIconStyleContext } from '../../composables/useIconStyle'
|
||||||
import RangeSlider from '../base/RangeSlider.vue';
|
import RangeSlider from '../base/RangeSlider.vue'
|
||||||
import InputField from '../base/InputField.vue';
|
import InputField from '../base/InputField.vue'
|
||||||
import ColorPicker from '../base/ColorPicker.vue';
|
import ColorPicker from '../base/ColorPicker.vue'
|
||||||
import ResetButton from '../base/ResetButton.vue';
|
import ResetButton from '../base/ResetButton.vue'
|
||||||
import Switch from '../base/Switch.vue';
|
import Switch from '../base/Switch.vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
rootEl?: Ref<HTMLElement>;
|
rootEl?: Ref<HTMLElement>
|
||||||
}>();
|
}>()
|
||||||
|
|
||||||
const { color, strokeWidth, size, absoluteStrokeWidth } = useIconStyleContext();
|
const { color, strokeWidth, size, absoluteStrokeWidth } = useIconStyleContext()
|
||||||
const documentRef = shallowRef<HTMLElement | undefined>(
|
const documentRef = shallowRef<HTMLElement | undefined>(typeof document !== 'undefined' ? document?.documentElement : undefined)
|
||||||
typeof document !== 'undefined' ? document?.documentElement : undefined,
|
|
||||||
);
|
|
||||||
|
|
||||||
const colorCssVar = useCssVar('--customize-color', props.rootEl?.value ?? documentRef.value, {
|
const colorCssVar = useCssVar(
|
||||||
initialValue: `${STYLE_DEFAULTS.color}`,
|
'--customize-color',
|
||||||
});
|
props.rootEl?.value ?? documentRef.value,
|
||||||
|
{
|
||||||
|
initialValue: `${STYLE_DEFAULTS.color}`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
const strokeWidthCssVar = useCssVar(
|
const strokeWidthCssVar = useCssVar(
|
||||||
'--customize-strokeWidth',
|
'--customize-strokeWidth',
|
||||||
props.rootEl?.value ?? documentRef.value,
|
props.rootEl?.value ?? documentRef.value,
|
||||||
{
|
{
|
||||||
initialValue: `${STYLE_DEFAULTS.strokeWidth}`,
|
initialValue: `${STYLE_DEFAULTS.strokeWidth}`
|
||||||
},
|
}
|
||||||
);
|
)
|
||||||
|
|
||||||
const sizeCssVar = useCssVar('--customize-size', props.rootEl?.value ?? documentRef.value, {
|
const sizeCssVar = useCssVar(
|
||||||
initialValue: `${STYLE_DEFAULTS.size}`,
|
'--customize-size',
|
||||||
});
|
props.rootEl?.value ?? documentRef.value,
|
||||||
|
{
|
||||||
|
initialValue: `${STYLE_DEFAULTS.size}`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
syncRef(color, colorCssVar, { direction: 'ltr' });
|
syncRef(color, colorCssVar, { direction: 'ltr' })
|
||||||
syncRef(strokeWidth, strokeWidthCssVar, { direction: 'ltr' });
|
syncRef(strokeWidth, strokeWidthCssVar, { direction: 'ltr' })
|
||||||
syncRef(size, sizeCssVar, { direction: 'ltr' });
|
syncRef(size, sizeCssVar, { direction: 'ltr' })
|
||||||
|
|
||||||
function resetStyle() {
|
function resetStyle () {
|
||||||
color.value = STYLE_DEFAULTS.color;
|
color.value = STYLE_DEFAULTS.color
|
||||||
strokeWidth.value = STYLE_DEFAULTS.strokeWidth;
|
strokeWidth.value = STYLE_DEFAULTS.strokeWidth
|
||||||
size.value = STYLE_DEFAULTS.size;
|
size.value = STYLE_DEFAULTS.size
|
||||||
absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth;
|
absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(absoluteStrokeWidth, (enabled) => {
|
watch(absoluteStrokeWidth, (enabled) => {
|
||||||
const htmlEl = document.documentElement;
|
const htmlEl = document.documentElement
|
||||||
|
|
||||||
htmlEl.classList.toggle('absolute-stroke-width', enabled);
|
htmlEl.classList.toggle('absolute-stroke-width', enabled)
|
||||||
});
|
})
|
||||||
|
|
||||||
const customizingActive = computed(() => {
|
const customizingActive = computed(() => {
|
||||||
return (
|
return color.value !== STYLE_DEFAULTS.color
|
||||||
color.value !== STYLE_DEFAULTS.color ||
|
|| strokeWidth.value !== STYLE_DEFAULTS.strokeWidth
|
||||||
strokeWidth.value !== STYLE_DEFAULTS.strokeWidth ||
|
|| size.value !== STYLE_DEFAULTS.size
|
||||||
size.value !== STYLE_DEFAULTS.size ||
|
|| absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
|
||||||
absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
|
})
|
||||||
);
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div class="customizer-card" :class="{ customized: customizingActive }">
|
||||||
class="customizer-card"
|
|
||||||
:class="{ customized: customizingActive }"
|
|
||||||
>
|
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h2 class="card-title">Customizer</h2>
|
<h2 class="card-title">
|
||||||
|
Customizer
|
||||||
|
</h2>
|
||||||
<ResetButton @click="resetStyle"></ResetButton>
|
<ResetButton @click="resetStyle"></ResetButton>
|
||||||
</div>
|
</div>
|
||||||
<InputField
|
<InputField
|
||||||
@@ -74,11 +77,7 @@ const customizingActive = computed(() => {
|
|||||||
label="Color"
|
label="Color"
|
||||||
>
|
>
|
||||||
<template #display>
|
<template #display>
|
||||||
<ColorPicker
|
<ColorPicker v-model="color" id="icon-color" class="color-picker"/>
|
||||||
v-model="color"
|
|
||||||
id="icon-color"
|
|
||||||
class="color-picker"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</InputField>
|
</InputField>
|
||||||
|
|
||||||
@@ -118,7 +117,7 @@ const customizingActive = computed(() => {
|
|||||||
|
|
||||||
<InputField
|
<InputField
|
||||||
id="absolute-stroke-width"
|
id="absolute-stroke-width"
|
||||||
label="Absolute stroke width"
|
label="Absolute Stroke width"
|
||||||
>
|
>
|
||||||
<Switch
|
<Switch
|
||||||
id="absolute-stroke-width"
|
id="absolute-stroke-width"
|
||||||
@@ -144,7 +143,6 @@ const customizingActive = computed(() => {
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
/* margin-bottom: 12px; */
|
/* margin-bottom: 12px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.customizer-card {
|
.customizer-card {
|
||||||
background: var(--vp-c-bg);
|
background: var(--vp-c-bg);
|
||||||
padding: 12px 24px 24px;
|
padding: 12px 24px 24px;
|
||||||
@@ -153,7 +151,7 @@ const customizingActive = computed(() => {
|
|||||||
position: relative;
|
position: relative;
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
transition: border-color 0.4s ease-in-out;
|
transition: border-color .4s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.customizer-card.customized {
|
.customizer-card.customized {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type IconNode } from 'lucide-vue-next/src/types';
|
import { IconNode } from 'lucide-vue-next/src/createLucideIcon';
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
declare module '*.vue' {
|
declare module '*.vue' {
|
||||||
@@ -20,6 +20,5 @@ declare module 'node:module' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
declare module '*.node.json' {
|
declare module '*.node.json' {
|
||||||
const value: IconNode;
|
export default IconNode;
|
||||||
export default value;
|
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ However, not everyone can understand them easily. Read more about [how to use Lu
|
|||||||
|
|
||||||
## Official Packages
|
## Official Packages
|
||||||
|
|
||||||
Lucide's official packages are designed to work on different platforms, making it easier for users to integrate icons into their projects. The packages are available for various technologies, including [Web (Vanilla)](https://lucide.dev/guide/packages/lucide), [React](https://lucide.dev/guide/packages/lucide-react), [React Native](https://lucide.dev/guide/packages/lucide-react-native), [Vue](https://lucide.dev/guide/packages/lucide-vue), [Vue 3](https://lucide.dev/guide/packages/lucide-vue-next), [Svelte](https://lucide.dev/guide/packages/lucide-svelte), [Preact](https://lucide.dev/guide/packages/lucide-preact), [Solid](https://lucide.dev/guide/packages/lucide-solid), [Angular](https://lucide.dev/guide/packages/angular), [Astro](https://lucide.dev/guide/packages/lucide-astro), and [NodeJS](https://lucide.dev/guide/packages/lucide-static#nodejs).
|
Lucide's official packages are designed to work on different platforms, making it easier for users to integrate icons into their projects. The packages are available for various technologies, including [Web (Vanilla)](https://lucide.dev/guide/packages/lucide), [React](https://lucide.dev/guide/packages/lucide-react), [React Native](https://lucide.dev/guide/packages/lucide-react-native), [Vue](https://lucide.dev/guide/packages/lucide-vue), [Vue 3](https://lucide.dev/guide/packages/lucide-vue-next), [Svelte](https://lucide.dev/guide/packages/lucide-svelte), [Preact](https://lucide.dev/guide/packages/lucide-preact), [Solid](https://lucide.dev/guide/packages/lucide-solid), [Angular](https://lucide.dev/guide/packages/lucide-angular), [Astro](https://lucide.dev/guide/packages/lucide-astro), and [NodeJS](https://lucide.dev/guide/packages/lucide-static#nodejs).
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
|
|||||||
@@ -64,24 +64,25 @@ Implementation of the lucide icon library for Vue applications.
|
|||||||
::: code-group
|
::: code-group
|
||||||
|
|
||||||
```sh [pnpm]
|
```sh [pnpm]
|
||||||
pnpm add @lucide/vue
|
pnpm add lucide-vue-next
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [yarn]
|
```sh [yarn]
|
||||||
yarn add @lucide/vue
|
yarn add lucide-vue-next
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [npm]
|
```sh [npm]
|
||||||
npm install @lucide/vue
|
npm install lucide-vue-next
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [bun]
|
```sh [bun]
|
||||||
bun add @lucide/vue
|
bun add lucide-vue-next
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
For more details, see the [documentation](packages/lucide-vue.md).
|
For more details, see the [documentation](packages/lucide-vue-next.md).
|
||||||
|
For Vue 2 use the `lucide-vue` package.
|
||||||
|
|
||||||
## Svelte
|
## Svelte
|
||||||
|
|
||||||
@@ -90,22 +91,22 @@ Implementation of the lucide icon library for Svelte applications.
|
|||||||
::: code-group
|
::: code-group
|
||||||
|
|
||||||
```sh [pnpm]
|
```sh [pnpm]
|
||||||
pnpm add @lucide/svelte
|
pnpm add lucide-svelte
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [yarn]
|
```sh [yarn]
|
||||||
yarn add @lucide/svelte
|
yarn add lucide-svelte
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [npm]
|
```sh [npm]
|
||||||
npm install @lucide/svelte
|
npm install lucide-svelte
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [bun]
|
```sh [bun]
|
||||||
bun add @lucide/svelte
|
bun add lucide-svelte
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
> `@lucide/svelte` is only for Svelte 5, for Svelte 4 use the `lucide-svelte` package.
|
|
||||||
|
|
||||||
For more details, see the [documentation](packages/lucide-svelte.md).
|
For more details, see the [documentation](packages/lucide-svelte.md).
|
||||||
|
|
||||||
|
|||||||
@@ -1,277 +0,0 @@
|
|||||||
# `@lucide/angular`
|
|
||||||
|
|
||||||
::: warning
|
|
||||||
This documentation is for `@lucide/angular`.
|
|
||||||
|
|
||||||
To learn about our legacy package for Angular, please refer to [`lucide-angular`](./lucide-angular).
|
|
||||||
:::
|
|
||||||
|
|
||||||
A standalone, signal-based, zoneless implementation of Lucide icons for Angular.
|
|
||||||
|
|
||||||
**What you can accomplish:**
|
|
||||||
- Use icons as standalone Angular components with full dependency injection support
|
|
||||||
- Configure icons globally through modern Angular providers
|
|
||||||
- Integrate with Angular's reactive forms and data binding
|
|
||||||
- Build scalable applications with tree-shaken icons and lazy loading support
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
This package requires Angular 17+ and uses standalone components, signals, and zoneless change detection.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
::: code-group
|
|
||||||
|
|
||||||
```sh [pnpm]
|
|
||||||
pnpm add @lucide/angular
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh [yarn]
|
|
||||||
yarn add @lucide/angular
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh [npm]
|
|
||||||
npm install @lucide/angular
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh [bun]
|
|
||||||
bun add @lucide/angular
|
|
||||||
```
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## How to use
|
|
||||||
|
|
||||||
### Standalone icons
|
|
||||||
|
|
||||||
Every icon can be imported as a ready-to-use standalone component:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg lucideFileText></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts{2,7}
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { LucideFileText } from '@lucide/angular';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-foobar',
|
|
||||||
templateUrl: './foobar.html',
|
|
||||||
imports: [LucideFileText],
|
|
||||||
})
|
|
||||||
export class Foobar { }
|
|
||||||
```
|
|
||||||
|
|
||||||
::: tip
|
|
||||||
Standalone icon components use the selector `svg[lucide{PascalCaseIconName}]`.
|
|
||||||
|
|
||||||
This ensures minimal bloating of the DOM and the ability to directly manipulate all attributes of the resulting SVG element.
|
|
||||||
:::
|
|
||||||
|
|
||||||
### Dynamic icon component
|
|
||||||
|
|
||||||
You may also use the dynamic `LucideIcon` component to dynamically render icons.
|
|
||||||
|
|
||||||
#### With tree-shaken imports
|
|
||||||
|
|
||||||
You may pass imported icons directly to the component:
|
|
||||||
|
|
||||||
```html{3}
|
|
||||||
@for (item of items) {
|
|
||||||
<a navbarItem [routerLink]="item.routerLink">
|
|
||||||
<svg [lucideIcon]="item.icon"></svg>
|
|
||||||
{{ item.title }}
|
|
||||||
</a>
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts{2,8,14,19}
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { LucideIcon, LucideHouse, LucideUsersRound } from '@lucide/angular';
|
|
||||||
import { NavbarItem, NavbarItemModel } from './navbar-item';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-navbar',
|
|
||||||
templateUrl: './navbar.html',
|
|
||||||
imports: [LucideIcon, NavbarItem],
|
|
||||||
})
|
|
||||||
export class Navbar {
|
|
||||||
readonly items: NavbarItemModel[] = [
|
|
||||||
{
|
|
||||||
title: 'Home',
|
|
||||||
icon: LucideHouse,
|
|
||||||
routerLink: [''],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Users',
|
|
||||||
icon: LucideUsersRound,
|
|
||||||
routerLink: ['admin/users'],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### With icons provided via dependency injection
|
|
||||||
|
|
||||||
Alternatively, the component also accepts string inputs.
|
|
||||||
|
|
||||||
To use icons this way, first, you have to provide icons via `provideLucideIcons`:
|
|
||||||
|
|
||||||
:::code-group
|
|
||||||
```ts{7-10} [app.config.ts]
|
|
||||||
import { ApplicationConfig } from '@angular/core';
|
|
||||||
import { provideLucideIcons, LucideCircleCheck, LucideCircleX } from '@lucide/angular';
|
|
||||||
|
|
||||||
export const appConfig: ApplicationConfig = {
|
|
||||||
providers: [
|
|
||||||
// ...
|
|
||||||
provideLucideIcons([
|
|
||||||
LucideCircleCheck,
|
|
||||||
LucideCircleX,
|
|
||||||
]),
|
|
||||||
]
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
```html [foobar.html]
|
|
||||||
<svg lucideIcon="circle-check"></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts{7} [foobar.ts]
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { LucideIcon } from '@lucide/angular';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-foobar',
|
|
||||||
templateUrl: './template-url',
|
|
||||||
imports: [LucideIcon],
|
|
||||||
})
|
|
||||||
export class Foobar { }
|
|
||||||
```
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: tip
|
|
||||||
For optimal bundle size, provide icons at the highest appropriate level in your application.
|
|
||||||
|
|
||||||
Providing all icons at the root level may increase your initial bundle size, while providing them at feature module level enables better code splitting.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: warning
|
|
||||||
While you may provide your icons at any level of the dependency injection tree, be aware that [Angular's DI system is hierarchical](https://angular.dev/guide/di/defining-dependency-providers#injector-hierarchy-in-angular): `LucideIcon` will only have access to the icons provided closest to it in the tree.
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Accessible labels
|
|
||||||
|
|
||||||
You can use the `title` input property to set the [accessible name element](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/title) on the SVG:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg lucideIcon="house" title="Go to dashboard"></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
This will result in the following output:
|
|
||||||
|
|
||||||
```html{2}
|
|
||||||
<svg class="lucide lucide-house" ...>
|
|
||||||
<title>Go to dashboard</title>
|
|
||||||
<!-- SVG paths -->
|
|
||||||
</svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Props
|
|
||||||
|
|
||||||
You can pass additional props to adjust the icon appearance.
|
|
||||||
|
|
||||||
| name | type | default |
|
|
||||||
|-----------------------|-----------|--------------|
|
|
||||||
| `size` | *number* | 24 |
|
|
||||||
| `color` | *string* | currentColor |
|
|
||||||
| `strokeWidth` | *number* | 2 |
|
|
||||||
| `absoluteStrokeWidth` | *boolean* | false |
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg lucideHouse size="48" color="red" strokeWidth="1"></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Global configuration
|
|
||||||
|
|
||||||
You can use `provideLucideConfig` to configure the default property values as defined above:
|
|
||||||
|
|
||||||
```ts{2,7-9}
|
|
||||||
import { ApplicationConfig } from '@angular/core';
|
|
||||||
import { provideLucideConfig } from '@lucide/angular';
|
|
||||||
|
|
||||||
export const appConfig: ApplicationConfig = {
|
|
||||||
providers: [
|
|
||||||
// ...
|
|
||||||
provideLucideConfig({
|
|
||||||
strokeWidth: 1.5
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Styling via CSS
|
|
||||||
|
|
||||||
Icons can also be styled by using custom CSS classes:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<svg lucideHousePlus class="my-icon"></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
```css
|
|
||||||
svg.my-icon {
|
|
||||||
width: 12px;
|
|
||||||
height: 12px;
|
|
||||||
stroke-width: 3;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## With Lucide lab or custom icons
|
|
||||||
|
|
||||||
[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library.
|
|
||||||
|
|
||||||
While they aren't provided as standalone components, they can be still be passed to the `LucideIcon` component the same way as official icons:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<!-- Directly as LucideIconData: -->
|
|
||||||
<svg [lucideIcon]="CoconutIcon"></svg>
|
|
||||||
|
|
||||||
<!-- As a provided icon by name: -->
|
|
||||||
<svg lucideIcon="coconut"></svg>
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts{2,6-7,11-12}
|
|
||||||
import { provideLucideIcons } from '@lucide/angular';
|
|
||||||
import { coconut } from '@lucide/lab';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
templateUrl: './foobar.html',
|
|
||||||
// For using by name via provider:
|
|
||||||
providers: [provideLucideIcons({ coconut })],
|
|
||||||
imports: [LucideIcon]
|
|
||||||
})
|
|
||||||
export class Foobar {
|
|
||||||
// For passing directly as LucideIconData:
|
|
||||||
readonly CoconutIcon = coconut;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### The icon is not being displayed
|
|
||||||
If using per-icon-components:
|
|
||||||
1. Ensure that the icon component is being imported, if using per-icon-components
|
|
||||||
2. Check that the icon name matches exactly (case-sensitive)
|
|
||||||
|
|
||||||
If using the dynamic component:
|
|
||||||
1. Ensure the icon is provided via `provideLucideIcons()` if using string names
|
|
||||||
2. Verify the icon is imported from `@lucide/angular` and not the legacy package
|
|
||||||
|
|
||||||
### TypeScript errors?
|
|
||||||
Make sure you're importing from `@lucide/angular` and not `lucide-angular`.
|
|
||||||
|
|
||||||
### Icons render with wrong defaults
|
|
||||||
Ensure `provideLucideConfig()` is used at the right level.
|
|
||||||
|
|
||||||
## Migration guide
|
|
||||||
Migrating from `lucide-angular`? Read our [comprehensive migration guide](https://github.com/lucide-icons/lucide/blob/main/packages/angular/MIGRATION.md).
|
|
||||||
@@ -1,11 +1,5 @@
|
|||||||
# Lucide Angular
|
# Lucide Angular
|
||||||
|
|
||||||
::: warning
|
|
||||||
This documentation is for our legacy package for Angular.
|
|
||||||
|
|
||||||
For our modern, standalone-first implementation, please refer to [`@lucide/angular`](./angular).
|
|
||||||
:::
|
|
||||||
|
|
||||||
Angular components and services for Lucide icons that integrate with Angular's dependency injection and component system. Provides both traditional module-based and modern standalone component approaches for maximum flexibility in Angular applications.
|
Angular components and services for Lucide icons that integrate with Angular's dependency injection and component system. Provides both traditional module-based and modern standalone component approaches for maximum flexibility in Angular applications.
|
||||||
|
|
||||||
**What you can accomplish:**
|
**What you can accomplish:**
|
||||||
|
|||||||
@@ -102,16 +102,10 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
|
|||||||
|
|
||||||
### Icon Component Example
|
### Icon Component Example
|
||||||
|
|
||||||
```tsx
|
```jsx
|
||||||
import * as icons from 'lucide-react-native/icons';
|
import { icons } from 'lucide-react-native';
|
||||||
|
|
||||||
interface IconProps {
|
const Icon = ({ name, color, size }) => {
|
||||||
name: keyof typeof icons;
|
|
||||||
color?: string;
|
|
||||||
size?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Icon = ({ name, color, size }: IconProps) => {
|
|
||||||
const LucideIcon = icons[name];
|
const LucideIcon = icons[name];
|
||||||
|
|
||||||
return <LucideIcon color={color} size={size} />;
|
return <LucideIcon color={color} size={size} />;
|
||||||
@@ -122,11 +116,11 @@ export default Icon;
|
|||||||
|
|
||||||
#### Using the Icon Component
|
#### Using the Icon Component
|
||||||
|
|
||||||
```tsx
|
```jsx
|
||||||
import Icon from './Icon';
|
import Icon from './Icon';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
return <Icon name="House" />;
|
return <Icon name="house" />;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
|
|||||||
@@ -30,7 +30,14 @@ This package includes the following implementations of Lucide icons:
|
|||||||
|
|
||||||
SVG sprites and icon fonts include **all icons**, which can significantly increase your app's bundle size and load time.
|
SVG sprites and icon fonts include **all icons**, which can significantly increase your app's bundle size and load time.
|
||||||
|
|
||||||
For production environments, we recommend using a bundler with tree-shaking support to include only the icons you actually use. Consider using one of the framework-specific [packages](../../packages).
|
For production environments, we recommend using a bundler with tree-shaking support to include only the icons you actually use. Consider using:
|
||||||
|
|
||||||
|
- [lucide](lucide)
|
||||||
|
- [lucide-react](lucide-react)
|
||||||
|
- [lucide-vue](lucide-vue)
|
||||||
|
- [lucide-vue-next](lucide-vue-next)
|
||||||
|
- [lucide-angular](lucide-angular)
|
||||||
|
- [lucide-preact](lucide-preact)
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|||||||
148
docs/guide/packages/lucide-vue-next.md
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
# Lucide Vue Next
|
||||||
|
|
||||||
|
Vue 3 components for Lucide icons that leverage the Composition API and modern Vue features. Each icon is a reactive Vue component that renders as an inline SVG, providing excellent performance and developer experience in Vue 3 applications.
|
||||||
|
|
||||||
|
**What you can accomplish:**
|
||||||
|
- Use icons as Vue 3 components with full reactivity and TypeScript support
|
||||||
|
- Bind icon properties to reactive data and computed values
|
||||||
|
- Customize icons with props, slots, and Vue's powerful templating system
|
||||||
|
- Integrate seamlessly with Vue 3's Composition API and script setup syntax
|
||||||
|
- Build dynamic interfaces where icons respond to application state changes
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
::: code-group
|
||||||
|
|
||||||
|
```sh [pnpm]
|
||||||
|
pnpm add lucide-vue-next
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh [yarn]
|
||||||
|
yarn add lucide-vue-next
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh [npm]
|
||||||
|
npm install lucide-vue-next
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh [bun]
|
||||||
|
bun add lucide-vue-next
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
|
||||||
|
Lucide is built with ES Modules, so it's completely tree-shakable.
|
||||||
|
|
||||||
|
Each icon can be imported as a Vue component, which renders an inline SVG Element. This way only the icons that are imported into your project are included in the final bundle. The rest of the icons are tree-shaken away.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
You can pass additional props to adjust the icon.
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<script setup>
|
||||||
|
import { Camera } from 'lucide-vue-next';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Camera
|
||||||
|
color="red"
|
||||||
|
:size="32"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Props
|
||||||
|
|
||||||
|
| name | type | default |
|
||||||
|
| ----------------------- | --------- | ------------ |
|
||||||
|
| `size` | *number* | 24 |
|
||||||
|
| `color` | *string* | currentColor |
|
||||||
|
| `stroke-width` | *number* | 2 |
|
||||||
|
| `absoluteStrokeWidth` | *boolean* | false |
|
||||||
|
| `default-class` | *string* | lucide-icon |
|
||||||
|
|
||||||
|
### Applying props
|
||||||
|
|
||||||
|
To customize the appearance of an icon, you can pass custom properties as props directly to the component. The component accepts all SVG attributes as props, which allows flexible styling of the SVG elements. See the list of SVG Presentation Attributes on [MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation).
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<Camera fill="red" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
## With Lucide lab or custom icons
|
||||||
|
|
||||||
|
[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library.
|
||||||
|
|
||||||
|
They can be used by using the `Icon` component.
|
||||||
|
All props like regular lucide icons can be passed to adjust the icon appearance.
|
||||||
|
|
||||||
|
### Using the `Icon` component
|
||||||
|
|
||||||
|
This creates a single icon based on the iconNode passed and renders a Lucide icon component.
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<script setup>
|
||||||
|
import { Icon } from 'lucide-vue-next';
|
||||||
|
import { baseball } from '@lucide/lab';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Icon :iconNode="baseball" />
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
## One generic icon component
|
||||||
|
|
||||||
|
It is possible to create one generic icon component to load icons, but it is not recommended.
|
||||||
|
|
||||||
|
::: danger
|
||||||
|
The example below imports all ES Modules, so exercise caution when using it. Importing all icons will significantly increase the build size of the application, negatively affecting its performance. This is especially important when using bundlers like `Webpack`, `Rollup`, or `Vite`.
|
||||||
|
:::
|
||||||
|
|
||||||
|
### Icon Component Example
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import * as icons from "lucide-vue-next";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
size: Number,
|
||||||
|
color: String,
|
||||||
|
strokeWidth: Number,
|
||||||
|
defaultClass: String
|
||||||
|
})
|
||||||
|
|
||||||
|
const icon = computed(() => icons[props.name]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<component
|
||||||
|
:is="icon"
|
||||||
|
:size="size"
|
||||||
|
:color="color"
|
||||||
|
:stroke-width="strokeWidth" :default-class="defaultClass"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using the Icon Component
|
||||||
|
|
||||||
|
All other props listed above also work on the `Icon` Component.
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<Icon name="Airplay" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
@@ -9,24 +9,28 @@ Vue 2 components for Lucide icons that integrate with Vue's Options API and temp
|
|||||||
- Build applications using Vue 2's familiar syntax and patterns
|
- Build applications using Vue 2's familiar syntax and patterns
|
||||||
- Bridge the gap while planning migration to Vue 3
|
- Bridge the gap while planning migration to Vue 3
|
||||||
|
|
||||||
|
::: danger
|
||||||
|
This package is deprecated. Vue 2 is EOF See [Announcement](https://v2.vuejs.org/eol/). Migrate to Vue 3.
|
||||||
|
:::
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
::: code-group
|
::: code-group
|
||||||
|
|
||||||
```sh [pnpm]
|
```sh [pnpm]
|
||||||
pnpm add @lucide/vue
|
pnpm add lucide-vue
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [yarn]
|
```sh [yarn]
|
||||||
yarn add @lucide/vue
|
yarn add lucide-vue
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [npm]
|
```sh [npm]
|
||||||
npm install @lucide/vue
|
npm install lucide-vue
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh [bun]
|
```sh [bun]
|
||||||
bun add @lucide/vue
|
bun add lucide-vue
|
||||||
```
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
@@ -39,19 +43,21 @@ Each icon can be imported as a Vue component, which renders an inline SVG Elemen
|
|||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
You can pass additional props to adjust the icon.
|
Additional props can be passed to adjust the icon:
|
||||||
|
|
||||||
```vue
|
```vue
|
||||||
<script setup>
|
|
||||||
import { Camera } from '@lucide/vue';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Camera
|
<Camera color="red" :size="32" />
|
||||||
color="red"
|
|
||||||
:size="32"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Camera } from 'lucide-vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'My Component',
|
||||||
|
components: { Camera }
|
||||||
|
};
|
||||||
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Props
|
## Props
|
||||||
@@ -74,28 +80,6 @@ To customize the appearance of an icon, you can pass custom properties as props
|
|||||||
</template>
|
</template>
|
||||||
```
|
```
|
||||||
|
|
||||||
## With Lucide lab or custom icons
|
|
||||||
|
|
||||||
[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library.
|
|
||||||
|
|
||||||
They can be used by using the `Icon` component.
|
|
||||||
All props like regular lucide icons can be passed to adjust the icon appearance.
|
|
||||||
|
|
||||||
### Using the `Icon` component
|
|
||||||
|
|
||||||
This creates a single icon based on the iconNode passed and renders a Lucide icon component.
|
|
||||||
|
|
||||||
```vue
|
|
||||||
<script setup>
|
|
||||||
import { Icon } from '@lucide/vue';
|
|
||||||
import { baseball } from '@lucide/lab';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<Icon :iconNode="baseball" />
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
|
|
||||||
## One generic icon component
|
## One generic icon component
|
||||||
|
|
||||||
It is possible to create one generic icon component to load icons, but it is not recommended.
|
It is possible to create one generic icon component to load icons, but it is not recommended.
|
||||||
@@ -107,37 +91,30 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
|
|||||||
### Icon Component Example
|
### Icon Component Example
|
||||||
|
|
||||||
```vue
|
```vue
|
||||||
<script setup>
|
<template>
|
||||||
import { computed } from 'vue';
|
<component :is="icon" />
|
||||||
import * as icons from "@lucide/vue";
|
</template>
|
||||||
|
|
||||||
const props = defineProps({
|
<script>
|
||||||
|
import * as icons from 'lucide-vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
size: Number,
|
computed: {
|
||||||
color: String,
|
icon() {
|
||||||
strokeWidth: Number,
|
return icons[this.name];
|
||||||
defaultClass: String
|
}
|
||||||
})
|
}
|
||||||
|
};
|
||||||
const icon = computed(() => icons[props.name]);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<component
|
|
||||||
:is="icon"
|
|
||||||
:size="size"
|
|
||||||
:color="color"
|
|
||||||
:stroke-width="strokeWidth" :default-class="defaultClass"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using the Icon Component
|
#### Using the Icon Component
|
||||||
|
|
||||||
All other props listed above also work on the `Icon` Component.
|
|
||||||
|
|
||||||
```vue
|
```vue
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -34,11 +34,6 @@
|
|||||||
],
|
],
|
||||||
"destination": "/icons",
|
"destination": "/icons",
|
||||||
"permanent": false
|
"permanent": false
|
||||||
},
|
|
||||||
{
|
|
||||||
"source": "/guide/packages/lucide-vue-next",
|
|
||||||
"destination": "/guide/packages/lucide-vue",
|
|
||||||
"permanent": false
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"headers": [
|
"headers": [
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
"account",
|
"account",
|
||||||
"animals",
|
"animals",
|
||||||
"arrows",
|
"arrows",
|
||||||
|
"brands",
|
||||||
"buildings",
|
"buildings",
|
||||||
"charts",
|
"charts",
|
||||||
"communication",
|
"communication",
|
||||||
@@ -133,7 +134,7 @@
|
|||||||
"$defs": {
|
"$defs": {
|
||||||
"iconDeprecationReasons": {
|
"iconDeprecationReasons": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["icon.renamed"]
|
"enum": ["icon.brand"]
|
||||||
},
|
},
|
||||||
"aliasDeprecationReasons": {
|
"aliasDeprecationReasons": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
],
|
],
|
||||||
"categories": [
|
"categories": [
|
||||||
"multimedia",
|
"multimedia",
|
||||||
"connectivity"
|
"connectivity",
|
||||||
|
"devices",
|
||||||
|
"brands"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,5 +10,5 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" />
|
<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" />
|
||||||
<path d="m9 12 2 2 4-4" />
|
<path d="m16 9-5.5 5.5L8 12" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 412 B After Width: | Height: | Size: 417 B |
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"peteruithoven"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"party",
|
|
||||||
"festival",
|
|
||||||
"congratulations",
|
|
||||||
"celebration",
|
|
||||||
"decoration",
|
|
||||||
"colorful",
|
|
||||||
"floating",
|
|
||||||
"fun",
|
|
||||||
"birthday",
|
|
||||||
"event",
|
|
||||||
"entertainment"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"emoji"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
"payment"
|
"payment"
|
||||||
],
|
],
|
||||||
"categories": [
|
"categories": [
|
||||||
|
"brands",
|
||||||
"development",
|
"development",
|
||||||
"finance"
|
"finance"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"nickveles"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"cannabis",
|
|
||||||
"weed",
|
|
||||||
"leaf"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"nature"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="M12 22v-4c1.5 1.5 3.5 3 6 3 0-1.5-.5-3.5-2-5" />
|
|
||||||
<path d="M13.988 8.327C13.902 6.054 13.365 3.82 12 2a9.3 9.3 0 0 0-1.445 2.9" />
|
|
||||||
<path d="M17.375 11.725C18.882 10.53 21 7.841 21 6c-2.324 0-5.08 1.296-6.662 2.684" />
|
|
||||||
<path d="m2 2 20 20" />
|
|
||||||
<path d="M21.024 15.378A15 15 0 0 0 22 15c-.426-1.279-2.67-2.557-4.25-2.907" />
|
|
||||||
<path d="M6.995 6.992C5.714 6.4 4.29 6 3 6c0 2 2.5 5 4 6-1.5 0-4.5 1.5-5 3 3.5 1.5 6 1 6 1-1.5 1.5-2 3.5-2 5 2.5 0 4.5-1.5 6-3" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 681 B |
25
icons/chromium.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"browser",
|
||||||
|
"logo"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands"
|
||||||
|
],
|
||||||
|
"aliases": [
|
||||||
|
{
|
||||||
|
"name": "chrome",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "alias.name",
|
||||||
|
"toBeRemovedInVersion": "v1.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,9 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M21 15.251A4.5 4.5 0 0 0 17.5 8h-1.79A7 7 0 1 0 3 13.607" />
|
<path d="M10.88 21.94 15.46 14" />
|
||||||
<path d="M7 11v4h4" />
|
<path d="M21.17 8H12" />
|
||||||
<path d="M8 19a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5 4.82 4.82 0 0 0-3.41 1.41L7 15" />
|
<path d="M3.95 6.06 8.54 14" />
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<circle cx="12" cy="12" r="4" />
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 393 B After Width: | Height: | Size: 377 B |
@@ -10,5 +10,5 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<circle cx="12" cy="12" r="10" />
|
<circle cx="12" cy="12" r="10" />
|
||||||
<path d="m9 12 2 2 4-4" />
|
<path d="m16 9-5.5 5.5L8 12" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 273 B After Width: | Height: | Size: 278 B |
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"colebemis",
|
|
||||||
"nathan-de-pachtere"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"off",
|
|
||||||
"zero",
|
|
||||||
"record",
|
|
||||||
"shape",
|
|
||||||
"circle-pile",
|
|
||||||
"circle",
|
|
||||||
"pile",
|
|
||||||
"stack",
|
|
||||||
"layer",
|
|
||||||
"structure",
|
|
||||||
"form",
|
|
||||||
"group",
|
|
||||||
"collection",
|
|
||||||
"stock",
|
|
||||||
"inventory",
|
|
||||||
"materials",
|
|
||||||
"warehouse"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"shapes"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
||||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<circle cx="12" cy="19" r="2" />
|
|
||||||
<circle cx="12" cy="5" r="2" />
|
|
||||||
<circle cx="16" cy="12" r="2" />
|
|
||||||
<circle cx="20" cy="19" r="2" />
|
|
||||||
<circle cx="4" cy="19" r="2" />
|
|
||||||
<circle cx="8" cy="12" r="2" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 397 B |
@@ -11,6 +11,6 @@
|
|||||||
>
|
>
|
||||||
<rect width="8" height="4" x="8" y="2" rx="1" ry="1" />
|
<rect width="8" height="4" x="8" y="2" rx="1" ry="1" />
|
||||||
<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" />
|
<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" />
|
||||||
<path d="m15 11-6 6" />
|
<path d="m14.5 11.5-5 5" />
|
||||||
<path d="m9 11 6 6" />
|
<path d="m9.5 11.5 5 5" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 405 B After Width: | Height: | Size: 413 B |
@@ -9,7 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
|
<path d="M21.95 13a10 10 0 1 0-8.685 8.92" />
|
||||||
<path d="M12 6v6l4 2" />
|
<path d="M12 6v6l4 2" />
|
||||||
<path d="M22 12a10 10 0 1 0-11 9.95" />
|
<path d="m16 19 2 2 4-4" />
|
||||||
<path d="m22 16-5.5 5.5L14 19" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 313 B After Width: | Height: | Size: 313 B |
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"ericfennis",
|
|
||||||
"jguddas",
|
|
||||||
"danielbayley",
|
|
||||||
"karsa-mistmere"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"storage",
|
|
||||||
"memory",
|
|
||||||
"bytes",
|
|
||||||
"servers",
|
|
||||||
"backup",
|
|
||||||
"timemachine",
|
|
||||||
"rotate",
|
|
||||||
"synchronize",
|
|
||||||
"synchronise",
|
|
||||||
"refresh",
|
|
||||||
"reconnect",
|
|
||||||
"transfer",
|
|
||||||
"data",
|
|
||||||
"security",
|
|
||||||
"upload",
|
|
||||||
"save",
|
|
||||||
"remote",
|
|
||||||
"safety"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"arrows",
|
|
||||||
"files"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"colebemis",
|
|
||||||
"csandman",
|
|
||||||
"ericfennis",
|
|
||||||
"karsa-mistmere"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"synchronize",
|
|
||||||
"synchronise",
|
|
||||||
"refresh",
|
|
||||||
"reconnect",
|
|
||||||
"transfer",
|
|
||||||
"backup",
|
|
||||||
"storage",
|
|
||||||
"upload",
|
|
||||||
"download",
|
|
||||||
"connection",
|
|
||||||
"network",
|
|
||||||
"data"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"arrows",
|
|
||||||
"files"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="m17 18-1.535 1.605a5 5 0 0 1-8-1.5" />
|
|
||||||
<path d="M17 22v-4h-4" />
|
|
||||||
<path d="M20.996 15.251A4.5 4.5 0 0 0 17.495 8h-1.79a7 7 0 1 0-12.709 5.607" />
|
|
||||||
<path d="M7 10v4h4" />
|
|
||||||
<path d="m7 14 1.535-1.605a5 5 0 0 1 8 1.5" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 442 B |
17
icons/codepen.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
icons/codepen.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2" />
|
||||||
|
<line x1="12" x2="12" y1="22" y2="15.5" />
|
||||||
|
<polyline points="22 8.5 12 15.5 2 8.5" />
|
||||||
|
<polyline points="2 15.5 12 8.5 22 15.5" />
|
||||||
|
<line x1="12" x2="12" y1="2" y2="8.5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 454 B |
18
icons/codesandbox.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
icons/codesandbox.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" />
|
||||||
|
<polyline points="7.5 4.21 12 6.81 16.5 4.21" />
|
||||||
|
<polyline points="7.5 19.79 7.5 14.6 3 12" />
|
||||||
|
<polyline points="21 12 16.5 14.6 16.5 19.79" />
|
||||||
|
<polyline points="3.27 6.96 12 12.01 20.73 6.96" />
|
||||||
|
<line x1="12" x2="12" y1="22.08" y2="12" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 595 B |
@@ -9,8 +9,8 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<line x1="12" x2="18" y1="12" y2="18" />
|
<path d="M4 16a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2" />
|
||||||
<line x1="12" x2="18" y1="18" y2="12" />
|
<rect x="8" y="8" width="14" height="14" rx="2" />
|
||||||
<rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
|
<path d="m12.5 12.5 5 5" />
|
||||||
<path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
|
<path d="m12.5 17.5 5-5" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 389 B |
18
icons/dribbble.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"ahtohbi4"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"design",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"social",
|
||||||
|
"design"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
icons/dribbble.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<circle cx="12" cy="12" r="10" />
|
||||||
|
<path d="M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94" />
|
||||||
|
<path d="M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32" />
|
||||||
|
<path d="M8.56 2.75c4.37 6 6 9.42 8 17.72" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 408 B |
19
icons/facebook.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"social",
|
||||||
|
"brands"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,5 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M12 16v1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v1" />
|
<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z" />
|
||||||
<path d="M12 6a2 2 0 0 1 2 2" />
|
|
||||||
<path d="M18 8c0 4-3.5 8-6 8s-6-4-6-8a6 6 0 0 1 12 0" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 289 B |
21
icons/figma.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"mittalyashu",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"design",
|
||||||
|
"tool"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"design"
|
||||||
|
]
|
||||||
|
}
|
||||||
17
icons/figma.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z" />
|
||||||
|
<path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z" />
|
||||||
|
<path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z" />
|
||||||
|
<path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z" />
|
||||||
|
<path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 534 B |
@@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"7ender",
|
|
||||||
"jguddas",
|
|
||||||
"karsa-mistmere",
|
|
||||||
"jamiemlaw"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"sea",
|
|
||||||
"boating",
|
|
||||||
"angler",
|
|
||||||
"bait",
|
|
||||||
"reel",
|
|
||||||
"tackle",
|
|
||||||
"marine",
|
|
||||||
"outdoors",
|
|
||||||
"fish",
|
|
||||||
"fishing",
|
|
||||||
"hook",
|
|
||||||
"sports",
|
|
||||||
"travel"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"sports",
|
|
||||||
"travel"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
21
icons/framer.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"mittalyashu",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"design",
|
||||||
|
"tool"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"design"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,5 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="m17.586 11.414-5.93 5.93a1 1 0 0 1-8-8l3.137-3.137a.707.707 0 0 1 1.207.5V10" />
|
<path d="M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7" />
|
||||||
<path d="M20.414 8.586 22 7" />
|
|
||||||
<circle cx="19" cy="10" r="2" />
|
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 369 B After Width: | Height: | Size: 266 B |
@@ -9,10 +9,10 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<circle cx="6" cy="6" r="3" />
|
<path d="m15.5 3.5 5 5" />
|
||||||
|
<path d="m15.5 8.5 5-5" />
|
||||||
|
<path d="M18 11.62V15" />
|
||||||
<path d="M6 9v12" />
|
<path d="M6 9v12" />
|
||||||
<path d="m21 3-6 6" />
|
|
||||||
<path d="m21 9-6-6" />
|
|
||||||
<path d="M18 11.5V15" />
|
|
||||||
<circle cx="18" cy="18" r="3" />
|
<circle cx="18" cy="18" r="3" />
|
||||||
|
<circle cx="6" cy="6" r="3" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 376 B After Width: | Height: | Size: 385 B |
20
icons/github.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis",
|
||||||
|
"karsa-mistmere"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"version control"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
icons/github.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4" />
|
||||||
|
<path d="M9 18c-4.51 2-5-2-7-2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 509 B |
20
icons/gitlab.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis",
|
||||||
|
"karsa-mistmere"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"version control"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
13
icons/gitlab.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 489 B |
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"ahtohbi4",
|
|
||||||
"jamiemlaw",
|
|
||||||
"karsa-mistmere",
|
|
||||||
"jguddas"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"tv",
|
|
||||||
"resolution",
|
|
||||||
"video",
|
|
||||||
"high definition",
|
|
||||||
"720p",
|
|
||||||
"1080p"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"devices",
|
|
||||||
"multimedia"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
17
icons/hd.svg
@@ -1,17 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="M10 12H6" />
|
|
||||||
<path d="M10 15V9" />
|
|
||||||
<path d="M14 14.5a.5.5 0 0 0 .5.5h1a2.5 2.5 0 0 0 2.5-2.5v-1A2.5 2.5 0 0 0 15.5 9h-1a.5.5 0 0 0-.5.5z" />
|
|
||||||
<path d="M6 15V9" />
|
|
||||||
<rect x="2" y="5" width="20" height="14" rx="2" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 440 B |
@@ -12,6 +12,7 @@
|
|||||||
],
|
],
|
||||||
"categories": [
|
"categories": [
|
||||||
"shapes",
|
"shapes",
|
||||||
|
"brands",
|
||||||
"development"
|
"development"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
21
icons/instagram.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"camera",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"social",
|
||||||
|
"photography"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/instagram.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect width="20" height="20" x="2" y="2" rx="5" ry="5" />
|
||||||
|
<path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" />
|
||||||
|
<line x1="17.5" x2="17.51" y1="6.5" y2="6.5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 381 B |
20
icons/linkedin.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"okcoker",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"social media",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"social",
|
||||||
|
"brands"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/linkedin.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" />
|
||||||
|
<rect width="4" height="12" x="2" y="9" />
|
||||||
|
<circle cx="4" cy="4" r="2" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 380 B |
@@ -9,8 +9,8 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9" />
|
<path d="M22 12.532V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8.792" />
|
||||||
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" />
|
<path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" />
|
||||||
<path d="m17 17 4 4" />
|
<path d="m16.5 16.5 5 5" />
|
||||||
<path d="m21 17-4 4" />
|
<path d="m21.5 16.5-5 5" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 390 B After Width: | Height: | Size: 404 B |
@@ -9,8 +9,8 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="M11 7 6 2" />
|
<path d="M19 12H2" />
|
||||||
<path d="M18.992 12H2.041" />
|
|
||||||
<path d="M21.145 18.38A3.34 3.34 0 0 1 20 16.5a3.3 3.3 0 0 1-1.145 1.88c-.575.46-.855 1.02-.855 1.595A2 2 0 0 0 20 22a2 2 0 0 0 2-2.025c0-.58-.285-1.13-.855-1.595" />
|
<path d="M21.145 18.38A3.34 3.34 0 0 1 20 16.5a3.3 3.3 0 0 1-1.145 1.88c-.575.46-.855 1.02-.855 1.595A2 2 0 0 0 20 22a2 2 0 0 0 2-2.025c0-.58-.285-1.13-.855-1.595" />
|
||||||
|
<path d="m6 2 5 5" />
|
||||||
<path d="m8.5 4.5 2.148-2.148a1.205 1.205 0 0 1 1.704 0l7.296 7.296a1.205 1.205 0 0 1 0 1.704l-7.592 7.592a3.615 3.615 0 0 1-5.112 0l-3.888-3.888a3.615 3.615 0 0 1 0-5.112L5.67 7.33" />
|
<path d="m8.5 4.5 2.148-2.148a1.205 1.205 0 0 1 1.704 0l7.296 7.296a1.205 1.205 0 0 1 0 1.704l-7.592 7.592a3.615 3.615 0 0 1-5.112 0l-3.888-3.888a3.615 3.615 0 0 1 0-5.112L5.67 7.33" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 622 B After Width: | Height: | Size: 613 B |
18
icons/pocket.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"save"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
icons/pocket.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M20 3a2 2 0 0 1 2 2v6a1 1 0 0 1-20 0V5a2 2 0 0 1 2-2z" />
|
||||||
|
<path d="m8 10 4 4 4-4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 306 B |
19
icons/rail-symbol.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"contributors": [
|
||||||
|
"danielbayley"
|
||||||
|
],
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"tags": [
|
||||||
|
"railway",
|
||||||
|
"train",
|
||||||
|
"track",
|
||||||
|
"line"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"transportation",
|
||||||
|
"navigation"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/rail-symbol.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M5 15h14" />
|
||||||
|
<path d="M5 9h14" />
|
||||||
|
<path d="m14 20-5-5 6-6-5-5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 289 B |
22
icons/slack.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"ashygee",
|
||||||
|
"wojtekmaj",
|
||||||
|
"mittalyashu",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"account",
|
||||||
|
"social",
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
icons/slack.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect width="3" height="8" x="13" y="2" rx="1.5" />
|
||||||
|
<path d="M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5" />
|
||||||
|
<rect width="3" height="8" x="8" y="14" rx="1.5" />
|
||||||
|
<path d="M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5" />
|
||||||
|
<rect width="8" height="3" x="14" y="13" rx="1.5" />
|
||||||
|
<path d="M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5" />
|
||||||
|
<rect width="8" height="3" x="2" y="8" rx="1.5" />
|
||||||
|
<path d="M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 628 B |
@@ -9,7 +9,7 @@
|
|||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<path d="m6 16 6-12 6 12" />
|
<path d="m20 15-5.5 5.5L12 18" />
|
||||||
<path d="M8 12h8" />
|
<path d="m4 16 6-12 5.115 10.23" />
|
||||||
<path d="m16 20 2 2 4-4" />
|
<path d="M6 12h8" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 305 B |
@@ -10,5 +10,5 @@
|
|||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
>
|
>
|
||||||
<rect width="18" height="18" x="3" y="3" rx="2" />
|
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||||
<path d="m9 12 2 2 4-4" />
|
<path d="m16 9-5.5 5.5L8 12" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 290 B After Width: | Height: | Size: 295 B |
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"Alportan",
|
|
||||||
"karsa-mistmere"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"mineral",
|
|
||||||
"geology",
|
|
||||||
"nature",
|
|
||||||
"solid",
|
|
||||||
"pebble",
|
|
||||||
"crystal",
|
|
||||||
"ore",
|
|
||||||
"hard",
|
|
||||||
"coal",
|
|
||||||
"stone",
|
|
||||||
"rock",
|
|
||||||
"boulder"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"nature"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="M11.264 2.205A4 4 0 0 0 6.42 4.211l-4 8a4 4 0 0 0 1.359 5.117l6 4a4 4 0 0 0 4.438 0l6-4a4 4 0 0 0 1.576-4.592l-2-6a4 4 0 0 0-2.53-2.53z" />
|
|
||||||
<path d="M11.99 22 14 12l7.822 3.184" />
|
|
||||||
<path d="M14 12 8.47 2.302" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 435 B |
@@ -13,6 +13,7 @@
|
|||||||
"productivity"
|
"productivity"
|
||||||
],
|
],
|
||||||
"categories": [
|
"categories": [
|
||||||
|
"brands",
|
||||||
"gaming"
|
"gaming"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "../icon.schema.json",
|
|
||||||
"contributors": [
|
|
||||||
"karsa-mistmere"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"toolkit",
|
|
||||||
"tools",
|
|
||||||
"trunk",
|
|
||||||
"chest",
|
|
||||||
"box",
|
|
||||||
"storage",
|
|
||||||
"utility",
|
|
||||||
"utilities",
|
|
||||||
"container",
|
|
||||||
"kit",
|
|
||||||
"set",
|
|
||||||
"repair",
|
|
||||||
"fix",
|
|
||||||
"service",
|
|
||||||
"maintenance",
|
|
||||||
"mechanic",
|
|
||||||
"workshop",
|
|
||||||
"construction",
|
|
||||||
"hardware",
|
|
||||||
"equipment",
|
|
||||||
"gear",
|
|
||||||
"handyman",
|
|
||||||
"engineering",
|
|
||||||
"craft",
|
|
||||||
"diy"
|
|
||||||
],
|
|
||||||
"categories": [
|
|
||||||
"tools",
|
|
||||||
"home"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path d="M16 12v4" />
|
|
||||||
<path d="M16 6a2 2 0 0 1 1.414.586l4 4A2 2 0 0 1 22 12v7a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 .586-1.414l4-4A2 2 0 0 1 8 6z" />
|
|
||||||
<path d="M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2" />
|
|
||||||
<path d="M2 14h20" />
|
|
||||||
<path d="M8 12v4" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 471 B |
21
icons/trello.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"bdbch",
|
||||||
|
"csandman",
|
||||||
|
"mittalyashu",
|
||||||
|
"ericfennis"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"brand"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"account",
|
||||||
|
"brands",
|
||||||
|
"development"
|
||||||
|
]
|
||||||
|
}
|
||||||
15
icons/trello.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<rect width="18" height="18" x="3" y="3" rx="2" ry="2" />
|
||||||
|
<rect width="3" height="9" x="7" y="7" />
|
||||||
|
<rect width="3" height="5" x="14" y="7" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 357 B |
20
icons/twitch.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"ahtohbi4",
|
||||||
|
"johnletey"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"social",
|
||||||
|
"account",
|
||||||
|
"gaming"
|
||||||
|
]
|
||||||
|
}
|
||||||
13
icons/twitch.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
>
|
||||||
|
<path d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 265 B |
21
icons/twitter.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../icon.schema.json",
|
||||||
|
"deprecated": true,
|
||||||
|
"deprecationReason": "icon.brand",
|
||||||
|
"toBeRemovedInVersion": "v1.0",
|
||||||
|
"contributors": [
|
||||||
|
"colebemis",
|
||||||
|
"csandman",
|
||||||
|
"ericfennis",
|
||||||
|
"karsa-mistmere"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"logo",
|
||||||
|
"social"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"brands",
|
||||||
|
"social",
|
||||||
|
"account"
|
||||||
|
]
|
||||||
|
}
|
||||||