Compare commits

...

7 Commits

Author SHA1 Message Date
Karsa
bc9a8de419 feat(icons): added circle-star icon (#3507)
* Added icons/circle-star.svg

* Added icons/circle-star.json

* Added icons/square-star.svg

* Added icons/square-star.json

* Update square-star.json

* Update circle-star.json
2025-08-07 12:22:36 +02:00
Jakob Guddas
26ab33a832 fix: fixed array length error in diff endpoint (#3498) 2025-08-07 11:29:21 +02:00
Karsa
ac4c3581c4 fix(site): fix icon style customizer (#3511) 2025-08-07 11:26:07 +02:00
Karsa
1ddba6da04 fix(icons): changed school icon (#2968)
* [github] Added issue template forms

* [github] yaml => yml

* Syntax fixes

* Further syntax fixes

* Sort issue templates

* Update 02_bug_report.yml

* Updated icons/school.svg

* Update school.svg

---------

Co-authored-by: Karsa <karsa@karsa.org>
2025-08-05 17:19:48 +02:00
Karsa
8754c9b6fd fix(icons): changed spade icon (#3502)
* Updated icons/spade.svg

* Updated icons/spade.json
2025-08-05 14:31:40 +02:00
Jakob Guddas
e9febe4fab docs: add rule against war/violence related imagery (#3506)
* docs: add rule against war/violence related imagery

* Update 01_icon_request.yml
2025-08-05 10:29:23 +02:00
Jamie Law
570f7d7e76 chore(metadata): Add tags to x icon (#3341)
Added 'ex' and 'cross' as tags
2025-08-01 13:15:17 +02:00
18 changed files with 125 additions and 28 deletions

View File

@@ -43,7 +43,7 @@ body:
required: true
- label: I am not requesting a brand logo and the art is not protected by copyright.
required: true
- label: I am not requesting an icon that includes religious, political imagery or hate symbols.
- label: I am not requesting an icon that includes religious, war/violence related, political imagery or hate symbols.
required: true
- label: I have provided appropriate use cases for the icon(s) requested.
required: true

View File

@@ -28,7 +28,7 @@ Common scopes: icons, docs, studio, site, dev
- [ ] I have provided valid use cases for each icon.
- [ ] I have not added any a brand or logo icon.
- [ ] I have not used any hate symbols.
- [ ] I have not included any religious or political imagery.
- [ ] I have not included any religious, war/violence related or political imagery.
### Author, credits & license<!-- ONLY for new icons. -->
<!-- Please choose one of the following, and put an "x" next to it. -->

View File

@@ -15,8 +15,10 @@ export default eventHandler((event) => {
const src = Buffer.from(data, 'base64').toString('utf8').replaceAll('\n', '');
const width = parseInt((src.includes('svg') ? src.match(/width="(\d+)"/)?.[1] : null) ?? '24');
const height = parseInt((src.includes('svg') ? src.match(/height="(\d+)"/)?.[1] : null) ?? '24');
const width = parseInt((src.includes('<svg ') ? src.match(/width="(\d+)"/)?.[1] : null) ?? '24');
const height = parseInt(
(src.includes('<svg ') ? src.match(/height="(\d+)"/)?.[1] : null) ?? '24',
);
const children = [];

View File

@@ -17,6 +17,13 @@ export default eventHandler((event) => {
.replaceAll('\n', '')
.replace(/<svg[^>]*>|<\/svg>/g, '');
const width = parseInt(
(newSrc.includes('<svg ') ? newSrc.match(/width="(\d+)"/)?.[1] : null) ?? '24',
);
const height = parseInt(
(newSrc.includes('<svg ') ? newSrc.match(/height="(\d+)"/)?.[1] : null) ?? '24',
);
const children = [];
const oldSrc = iconNodes[name]
@@ -27,7 +34,9 @@ export default eventHandler((event) => {
const svg = Buffer.from(
// We can't use jsx here, is not supported here by nitro.
renderToString(createElement(Diff, { oldSrc, newSrc, showGrid: true }, children)),
renderToString(
createElement(Diff, { oldSrc, newSrc, showGrid: true, height, width }, children),
),
).toString('utf8');
defaultContentType(event, 'image/svg+xml');

View File

@@ -53,8 +53,8 @@ const Backdrop = ({
<rect
x="0"
y="0"
width="24"
height="24"
width="100%"
height="100%"
fill="#fff"
stroke="none"
/>
@@ -67,8 +67,8 @@ const Backdrop = ({
<rect
x="0"
y="0"
width="24"
height="24"
width="100%"
height="100%"
opacity={0.5}
fill={`url(#pattern-${id})`}
stroke="none"

View File

@@ -7,15 +7,17 @@ const SvgPreview = React.forwardRef<
{
oldSrc: string;
newSrc: string;
height: number;
width: number;
} & React.SVGProps<SVGSVGElement>
>(({ oldSrc, newSrc, children, ...props }, ref) => {
>(({ oldSrc, newSrc, children, height, width, ...props }, ref) => {
return (
<svg
ref={ref}
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
width={width}
height={height}
viewBox={`0 0 ${width} ${height}`}
fill="none"
stroke="currentColor"
strokeWidth={2}
@@ -25,6 +27,8 @@ const SvgPreview = React.forwardRef<
>
<style>{darkModeCss}</style>
<Grid
width={width}
height={height}
strokeWidth={0.1}
stroke="#777"
strokeOpacity={0.3}
@@ -37,8 +41,8 @@ const SvgPreview = React.forwardRef<
<rect
x="0"
y="0"
width="24"
height="24"
width="100%"
height="100%"
fill="#000"
stroke="none"
/>

View File

@@ -178,6 +178,8 @@ const DiamondIcon = createLucideIcon('Diamond', diamond)
stroke-width: var(--customize-strokeWidth, 2);
width: calc(var(--customize-size, 24) * 1px);
height: calc(var(--customize-size, 24) * 1px);
max-width: 3rem;
max-height: 3rem;
}
html.absolute-stroke-width .lucide-icon.customizable {

View File

@@ -26,10 +26,9 @@ const iconComponent = computed(() => {
<component
ref="previewIcon"
:is="iconComponent"
:width="size"
:height="size"
:stroke="color"
:stroke-width="absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth"
:size="size"
:color="color"
:strokeWidth="absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth"
/>
<svg class="icon-grid" :viewBox="`0 0 ${size} ${size}`" fill="none" stroke-width="0.1" xmlns="http://www.w3.org/2000/svg">
<g :key="`grid-${i}`" v-for="(_, i) in gridLines">

View File

@@ -110,7 +110,7 @@ const customizingActive = computed(() => {
name="size"
v-model="size"
:min="16"
:max="48"
:max="256"
:step="4"
/>
</InputField>

View File

@@ -2,7 +2,7 @@
import { ref, inject, Ref } from 'vue';
export const ICON_STYLE_CONTEXT = Symbol('size');
export const ICON_STYLE_CONTEXT = Symbol('style');
interface IconSizeContext {
size: Ref<number>;

25
icons/circle-star.json Normal file
View File

@@ -0,0 +1,25 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere"
],
"tags": [
"badge",
"medal",
"honour",
"decoration",
"order",
"pin",
"laurel",
"trophy",
"medallion",
"insignia",
"bronze",
"silver",
"gold"
],
"categories": [
"sports",
"gaming"
]
}

14
icons/circle-star.svg Normal file
View 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="M11.051 7.616a1 1 0 0 1 1.909.024l.737 1.452a1 1 0 0 0 .737.535l1.634.256a1 1 0 0 1 .588 1.806l-1.172 1.168a1 1 0 0 0-.282.866l.259 1.613a1 1 0 0 1-1.541 1.134l-1.465-.75a1 1 0 0 0-.912 0l-1.465.75a1 1 0 0 1-1.539-1.133l.258-1.613a1 1 0 0 0-.282-.867l-1.156-1.152a1 1 0 0 1 .572-1.822l1.633-.256a1 1 0 0 0 .737-.535z" />
<circle cx="12" cy="12" r="10" />
</svg>

After

Width:  |  Height:  |  Size: 576 B

View File

@@ -9,10 +9,10 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 22v-4a2 2 0 1 0-4 0v4" />
<path d="m18 10 3.447 1.724a1 1 0 0 1 .553.894V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-7.382a1 1 0 0 1 .553-.894L6 10" />
<path d="M18 5v17" />
<path d="m4 6 7.106-3.553a2 2 0 0 1 1.788 0L20 6" />
<path d="M6 5v17" />
<path d="M14 21v-3a2 2 0 0 0-4 0v3" />
<path d="M18 5v16" />
<path d="m4 6 7.106-3.79a2 2 0 0 1 1.788 0L20 6" />
<path d="m6 11-3.52 2.147a1 1 0 0 0-.48.854V19a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a1 1 0 0 0-.48-.853L18 11" />
<path d="M6 5v16" />
<circle cx="12" cy="9" r="2" />
</svg>

Before

Width:  |  Height:  |  Size: 503 B

After

Width:  |  Height:  |  Size: 496 B

View File

@@ -2,7 +2,8 @@
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"karsa-mistmere"
"karsa-mistmere",
"jguddas"
],
"tags": [
"shape",

View File

@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 9c-1.5 1.5-3 3.2-3 5.5A5.5 5.5 0 0 0 7.5 20c1.8 0 3-.5 4.5-2 1.5 1.5 2.7 2 4.5 2a5.5 5.5 0 0 0 5.5-5.5c0-2.3-1.5-4-3-5.5l-7-7-7 7Z" />
<path d="M12 18v4" />
<path d="M2 14.499a5.5 5.5 0 0 0 9.591 3.675.6.6 0 0 1 .818.001A5.5 5.5 0 0 0 22 14.5c0-2.29-1.5-4-3-5.5l-5.492-5.312a2 2 0 0 0-3-.02L5 8.999c-1.5 1.5-3 3.2-3 5.5" />
</svg>

Before

Width:  |  Height:  |  Size: 381 B

After

Width:  |  Height:  |  Size: 401 B

25
icons/square-star.json Normal file
View File

@@ -0,0 +1,25 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere"
],
"tags": [
"badge",
"medal",
"honour",
"decoration",
"order",
"pin",
"laurel",
"trophy",
"medallion",
"insignia",
"bronze",
"silver",
"gold"
],
"categories": [
"sports",
"gaming"
]
}

14
icons/square-star.svg Normal file
View 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="M11.035 7.69a1 1 0 0 1 1.909.024l.737 1.452a1 1 0 0 0 .737.535l1.634.256a1 1 0 0 1 .588 1.806l-1.172 1.168a1 1 0 0 0-.282.866l.259 1.613a1 1 0 0 1-1.541 1.134l-1.465-.75a1 1 0 0 0-.912 0l-1.465.75a1 1 0 0 1-1.539-1.133l.258-1.613a1 1 0 0 0-.282-.866l-1.156-1.153a1 1 0 0 1 .572-1.822l1.633-.256a1 1 0 0 0 .737-.535z" />
<rect x="3" y="3" width="18" height="18" rx="2" />
</svg>

After

Width:  |  Height:  |  Size: 592 B

View File

@@ -7,7 +7,9 @@
"tags": [
"cancel",
"close",
"cross",
"delete",
"ex",
"remove",
"times",
"clear",