@qeetrix/icons 1.0.7 โ 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +269 -118
- package/dist/generated/logo-index.d.ts +2 -0
- package/dist/generated/logo-index.js +2 -0
- package/dist/generated/logo-manifest.js +2 -0
- package/dist/generated/logos/qeet-wordmark.d.ts +9 -0
- package/dist/generated/logos/qeet-wordmark.js +22 -0
- package/dist/generated/logos/qeet.d.ts +9 -0
- package/dist/generated/logos/qeet.js +20 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# Qeetrix Icons
|
|
3
|
+
# ๐จ Qeetrix Icons
|
|
4
4
|
|
|
5
5
|
**The icon and brand logo library for Qeet Group products.**
|
|
6
6
|
|
|
7
|
-
1,863 Lucide icons in round and sharp shapes,
|
|
8
|
-
tree-shakeable, fully typed React 19 components, all from one import.
|
|
7
|
+
1,863 Lucide icons in **round** and **sharp** shapes, **775 filled** variants, **7,429 brand
|
|
8
|
+
logos** and the first-party **Qeet logo and wordmark**, as tree-shakeable, fully typed React 19 components, all from one import.
|
|
9
9
|
|
|
10
|
+
[](https://www.npmjs.com/package/@qeetrix/icons)
|
|
11
|
+
[](https://github.com/qeetgroup/qeetrix-icons/actions/workflows/ci.yml)
|
|
10
12
|

|
|
11
|
-

|
|
12
14
|

|
|
13
15
|

|
|
14
16
|

|
|
@@ -28,72 +30,103 @@ import { TrashIcon, StarIcon, GithubLogo } from "@qeetrix/icons";
|
|
|
28
30
|
```
|
|
29
31
|
|
|
30
32
|
> [!IMPORTANT]
|
|
31
|
-
> **
|
|
32
|
-
>
|
|
33
|
-
>
|
|
33
|
+
> **Versions 1.0.5 and later are a new library.** They replace the 1.0.0โ1.0.4 catalogue entirely
|
|
34
|
+
> with Lucide-based icons and brand logos. No earlier icon name, prop, type, or import path carries
|
|
35
|
+
> over. If you depend on the old set, pin `@qeetrix/icons@1.0.4` until you migrate.
|
|
34
36
|
|
|
35
37
|
---
|
|
36
38
|
|
|
37
|
-
## Contents
|
|
38
|
-
|
|
39
|
-
- [Why Qeetrix Icons](
|
|
40
|
-
- [At a glance](
|
|
41
|
-
- [Installation](
|
|
42
|
-
- [
|
|
43
|
-
- [
|
|
44
|
-
- [
|
|
45
|
-
- [
|
|
46
|
-
- [
|
|
47
|
-
- [
|
|
48
|
-
- [
|
|
49
|
-
- [
|
|
50
|
-
- [
|
|
51
|
-
- [
|
|
52
|
-
|
|
53
|
-
|
|
39
|
+
## ๐ Contents
|
|
40
|
+
|
|
41
|
+
- [โจ Why Qeetrix Icons](#-why-qeetrix-icons)
|
|
42
|
+
- [๐ At a glance](#-at-a-glance)
|
|
43
|
+
- [๐ฆ Installation](#-installation)
|
|
44
|
+
- [๐ Quick start](#-quick-start)
|
|
45
|
+
- [๐จ Icons](#-icons)
|
|
46
|
+
- [๐ท๏ธ Brand logos](#๏ธ-brand-logos)
|
|
47
|
+
- [๐ Catalogue and search](#-catalogue-and-search)
|
|
48
|
+
- [๐ Coming from lucide-react](#-coming-from-lucide-react)
|
|
49
|
+
- [๐ Design rules](#-design-rules)
|
|
50
|
+
- [๐งช Playground](#-playground)
|
|
51
|
+
- [โก Performance and package size](#-performance-and-package-size)
|
|
52
|
+
- [๐๏ธ How it is built](#๏ธ-how-it-is-built)
|
|
53
|
+
- [โ
Quality](#-quality)
|
|
54
|
+
- [๐ ๏ธ Development](#๏ธ-development)
|
|
55
|
+
- [๐ Documentation](#-documentation)
|
|
56
|
+
- [๐ข Releases](#-releases)
|
|
57
|
+
- [โ๏ธ License](#๏ธ-license)
|
|
58
|
+
|
|
59
|
+
## โจ Why Qeetrix Icons
|
|
54
60
|
|
|
55
61
|
[Lucide](https://lucide.dev) is a superb outline icon set, and [theSVG](https://thesvg.org)
|
|
56
62
|
collects thousands of brand logos. Qeetrix Icons turns them into one consistent, typed library for
|
|
57
63
|
every Qeet product (Qeet ID, Qeet Pay, Qeet Logs, Qeet Notify, Qeet People, Qeet AI) and adds what
|
|
58
64
|
neither provides:
|
|
59
65
|
|
|
60
|
-
- **Filled variants.** Lucide is outline-only.
|
|
66
|
+
- ๐ **Filled variants.** Lucide is outline-only. 775 icons gain a filled drawing for selected,
|
|
61
67
|
active, and favourite states, derived from the outline with Skia path operations and reviewed
|
|
62
|
-
one by one.
|
|
63
|
-
- **A complete sharp style.** Every icon, outline and filled, also comes with square caps,
|
|
68
|
+
one by one, category by category.
|
|
69
|
+
- ๐ท **A complete sharp style.** Every icon, outline and filled, also comes with square caps,
|
|
64
70
|
mitered joins, and squared corners, behind a single `shape` prop.
|
|
65
|
-
- **One API for everything.** Icons and logos share naming, sizing, accessibility defaults, and
|
|
71
|
+
- ๐งฉ **One API for everything.** Icons and logos share naming, sizing, accessibility defaults, and
|
|
66
72
|
typing. A `variant` the icon or logo doesn't have is a compile-time error.
|
|
67
|
-
- **Logos you can trust.** Every logo is embedded byte for byte as published, validated for
|
|
73
|
+
- ๐ก๏ธ **Logos you can trust.** Every logo is embedded byte for byte as published, validated for
|
|
68
74
|
safety, labelled with the background it is drawn for, and carries its own license metadata.
|
|
69
|
-
- **Searchable catalogues.** Tags, categories, Lucide's former names, RTL behaviour, logo
|
|
75
|
+
- ๐ **Searchable catalogues.** Tags, categories, Lucide's former names, RTL behaviour, logo
|
|
70
76
|
collections, colours, and licenses, published as data for docs sites and pickers.
|
|
77
|
+
- ๐ฒ **Zero runtime cost you didn't ask for.** No runtime dependencies, no hooks, no side
|
|
78
|
+
effects: bundlers keep only the icons and logos you import.
|
|
71
79
|
|
|
72
|
-
## At a glance
|
|
80
|
+
## ๐ At a glance
|
|
73
81
|
|
|
74
82
|
| | |
|
|
75
83
|
|:--|:--|
|
|
76
|
-
| **Icons** | 1,863 from Lucide 1.52.0, in 42 categories, with Lucide's names and tags |
|
|
77
|
-
| **Shapes** | `round` (Lucide's drawing, the default) and `sharp`, for every icon |
|
|
78
|
-
| **Variants** | `outline` for every icon; `filled` for
|
|
79
|
-
| **Brand logos** | 7,429 from theSVG 3.3.12
|
|
80
|
-
| **Logo files** | 13,
|
|
81
|
-
| **Grid** | 24 ร 24, 2-unit stroke, 1-unit padding, `currentColor` |
|
|
82
|
-
| **Runtime** | React 19 peer dependency only; no runtime dependencies; no hooks |
|
|
83
|
-
| **Module format** | ESM with TypeScript declarations; every module free of side effects |
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
| ๐จ **Icons** | 1,863 from Lucide 1.52.0, in Lucide's 42 categories, with Lucide's names and tags |
|
|
85
|
+
| ๐ท **Shapes** | `round` (Lucide's drawing, the default) and `sharp`, for every icon |
|
|
86
|
+
| ๐ **Variants** | `outline` for every icon; `filled` for 775, in both shapes |
|
|
87
|
+
| ๐ท๏ธ **Brand logos** | 7,429 from theSVG 3.3.12 (brands, community, auth badges, AWS, Azure, Google Cloud, Kubernetes), plus the first-party Qeet logo and wordmark |
|
|
88
|
+
| ๐๏ธ **Logo files** | 13,407 variants (default, mono, wordmark, light, dark, colour, โฆ), embedded unmodified |
|
|
89
|
+
| ๐ **Grid** | 24 ร 24, 2-unit stroke, 1-unit padding, `currentColor` |
|
|
90
|
+
| โ๏ธ **Runtime** | React 19 peer dependency only; no runtime dependencies; no hooks |
|
|
91
|
+
| ๐ฆ **Module format** | ESM with TypeScript declarations; every module free of side effects |
|
|
92
|
+
| โ๏ธ **RTL** | 18 reading-direction concepts flagged `mirror` in the catalogue |
|
|
93
|
+
| โ
**Tests** | 638 tests in 11 suites, including a packed-tarball consumer test |
|
|
94
|
+
|
|
95
|
+
## ๐ฆ Installation
|
|
86
96
|
|
|
87
97
|
```bash
|
|
88
98
|
bun add @qeetrix/icons
|
|
99
|
+
# or: npm install @qeetrix/icons
|
|
89
100
|
```
|
|
90
101
|
|
|
91
102
|
React 19 is the only peer dependency. The package ships compiled ESM with type declarations, so
|
|
92
103
|
it works in Vite, Next.js, TanStack Start, and React Server Components without extra setup.
|
|
93
104
|
|
|
94
|
-
##
|
|
105
|
+
## ๐ Quick start
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
import { BellIcon, SearchIcon, SettingsIcon, StarIcon } from "@qeetrix/icons";
|
|
109
|
+
|
|
110
|
+
export function Toolbar({ starred }: { starred: boolean }) {
|
|
111
|
+
return (
|
|
112
|
+
<nav className="flex items-center gap-3 text-zinc-700">
|
|
113
|
+
<SearchIcon size={20} />
|
|
114
|
+
<BellIcon variant="filled" aria-label="Notifications" />
|
|
115
|
+
<StarIcon variant={starred ? "filled" : "outline"} className="text-amber-500" />
|
|
116
|
+
<SettingsIcon shape="sharp" strokeWidth={1.5} />
|
|
117
|
+
</nav>
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
- ๐จ Icons draw in `currentColor`: they follow the text colour around them.
|
|
123
|
+
- ๐ `size` takes pixels or any CSS length; the default is 24.
|
|
124
|
+
- ๐ท Switch a whole UI to the sharp style by passing `shape="sharp"`, for example from your own
|
|
125
|
+
wrapper or theme.
|
|
126
|
+
|
|
127
|
+
## ๐จ Icons
|
|
95
128
|
|
|
96
|
-
### Shapes and variants
|
|
129
|
+
### ๐ท Shapes and variants
|
|
97
130
|
|
|
98
131
|
Every icon has two shapes, and some icons have two variants. Pick one with two props:
|
|
99
132
|
|
|
@@ -103,10 +136,11 @@ Every icon has two shapes, and some icons have two variants. Pick one with two p
|
|
|
103
136
|
| **`shape="sharp"`** | `<StarIcon shape="sharp" />` | `<StarIcon shape="sharp" variant="filled" />` |
|
|
104
137
|
|
|
105
138
|
Filled drawings exist only where the solid form is clean and meaningful: badges, toggles, nav
|
|
106
|
-
items, devices, media, and many more. Open-line icons such as arrows, chevrons,
|
|
107
|
-
outline-only by
|
|
139
|
+
items, devices, media, files, people, and many more. Open-line icons such as arrows, chevrons,
|
|
140
|
+
and text marks, and icons whose outline is clipped open around a badge, are outline-only by
|
|
141
|
+
design.
|
|
108
142
|
|
|
109
|
-
### Props
|
|
143
|
+
### ๐๏ธ Props
|
|
110
144
|
|
|
111
145
|
Every icon accepts the native `<svg>` props (including `ref`, `className`, `style`, and event
|
|
112
146
|
handlers) plus:
|
|
@@ -119,16 +153,14 @@ handlers) plus:
|
|
|
119
153
|
| `strokeWidth` | `number \| string` | `2` | Overrides the outline stroke (try 1.5 for dense UIs). |
|
|
120
154
|
| `aria-label` | `string` | | Names the icon for assistive technology. |
|
|
121
155
|
|
|
122
|
-
Icons draw in `currentColor`, so they follow the surrounding text colour: set `color` with CSS or
|
|
123
|
-
a utility class.
|
|
124
|
-
|
|
125
156
|
```tsx
|
|
126
157
|
<SearchIcon size={20} className="text-muted" />
|
|
127
158
|
<BellIcon variant="filled" aria-label="Notifications" />
|
|
128
159
|
<SettingsIcon shape="sharp" strokeWidth={1.5} />
|
|
160
|
+
<HeartIcon size="1.25em" style={{ color: "crimson" }} />
|
|
129
161
|
```
|
|
130
162
|
|
|
131
|
-
### Naming
|
|
163
|
+
### ๐ค Naming
|
|
132
164
|
|
|
133
165
|
Each icon is one named export: its Lucide name in PascalCase plus `Icon`. Categories never appear
|
|
134
166
|
in names or import paths.
|
|
@@ -142,13 +174,13 @@ in names or import paths.
|
|
|
142
174
|
Lucide's former names (`trash-2` for `trash`, for example) are listed in the catalogue for search
|
|
143
175
|
and migration, but are not exported.
|
|
144
176
|
|
|
145
|
-
### Type safety
|
|
177
|
+
### ๐งท Type safety
|
|
146
178
|
|
|
147
179
|
`variant` is narrowed per icon, so asking for a drawing that doesn't exist fails at compile time:
|
|
148
180
|
|
|
149
181
|
```tsx
|
|
150
|
-
<StarIcon variant="filled" /> //
|
|
151
|
-
<ArrowLeftIcon variant="filled" /> //
|
|
182
|
+
<StarIcon variant="filled" /> // โ
star has a filled drawing
|
|
183
|
+
<ArrowLeftIcon variant="filled" /> // โ type error: arrow-left is outline-only
|
|
152
184
|
```
|
|
153
185
|
|
|
154
186
|
To accept any icon, for example in a button component, type the prop as
|
|
@@ -167,15 +199,16 @@ function ToolbarButton({ icon: Icon, label }: { icon: ComponentType<IconProps<"o
|
|
|
167
199
|
}
|
|
168
200
|
```
|
|
169
201
|
|
|
170
|
-
### Accessibility and RTL
|
|
202
|
+
### โฟ Accessibility and RTL
|
|
171
203
|
|
|
172
204
|
- Icons are **decorative by default**: `aria-hidden="true"` and `focusable="false"`. A non-empty
|
|
173
205
|
`aria-label` or `aria-labelledby` turns an icon into `role="img"`. Explicit props always win.
|
|
174
206
|
- Each icon's **directionality** is in the catalogue: `mirror` for reading-direction concepts
|
|
175
207
|
such as undo, reply, send, log-in, and indentation, and `preserve` for everything else.
|
|
176
|
-
Physical arrows and chevrons never mirror.
|
|
208
|
+
Physical arrows and chevrons never mirror. The library never flips an icon itself; your RTL
|
|
209
|
+
layer decides. See [docs/rtl.md](docs/rtl.md).
|
|
177
210
|
|
|
178
|
-
## Brand logos
|
|
211
|
+
## ๐ท๏ธ Brand logos
|
|
179
212
|
|
|
180
213
|
```tsx
|
|
181
214
|
import { GithubLogo, SlackLogo, StripeLogo } from "@qeetrix/icons";
|
|
@@ -183,10 +216,11 @@ import { GithubLogo, SlackLogo, StripeLogo } from "@qeetrix/icons";
|
|
|
183
216
|
<GithubLogo /> // the default file, 24 px tall
|
|
184
217
|
<GithubLogo variant="wordmark" height={32} /> // any file the logo has
|
|
185
218
|
<SlackLogo height="2em" aria-label="Slack" /> // CSS lengths work too
|
|
219
|
+
<StripeLogo variant="mono" loading="lazy" /> // native <img> props pass through
|
|
186
220
|
```
|
|
187
221
|
|
|
188
222
|
Each logo renders its **published SVG file, unmodified**, as an `<img>`. Nothing in the artwork is
|
|
189
|
-
converted or recoloured; a test proves all 13,
|
|
223
|
+
converted or recoloured; a test proves all 13,405 files are embedded byte for byte. Because each
|
|
190
224
|
logo is its own image, logos never clash with each other's styles or ids, and they work in Server
|
|
191
225
|
Components.
|
|
192
226
|
|
|
@@ -200,7 +234,56 @@ Components.
|
|
|
200
234
|
Other native `<img>` props (`className`, `style`, `loading`, `decoding`, โฆ) pass through. Logos
|
|
201
235
|
keep their brand colours by design, so CSS cannot recolour them.
|
|
202
236
|
|
|
203
|
-
###
|
|
237
|
+
### ๐ The Qeet logo and wordmark
|
|
238
|
+
|
|
239
|
+
Qeet's own marks sit in the catalogue beside the third-party logos, each with a file for light
|
|
240
|
+
surfaces (`default`) and one for dark surfaces (`dark`):
|
|
241
|
+
|
|
242
|
+
| Component | What it is | `default` (light surfaces) | `dark` (dark surfaces) |
|
|
243
|
+
|:--|:--|:--|:--|
|
|
244
|
+
| `QeetLogo` | the Qeet "q" mark | graphite bowl, orange descender | white bowl, orange descender |
|
|
245
|
+
| `QeetWordmarkLogo` | **Qeet.** in a tile | graphite tile, white letters | white tile, graphite letters |
|
|
246
|
+
|
|
247
|
+
The wordmark also comes without the tile, as two more files: `plain` (graphite letters, for light
|
|
248
|
+
surfaces) and `plain-dark` (white letters, for dark surfaces), cropped to the letters themselves.
|
|
249
|
+
|
|
250
|
+
```tsx
|
|
251
|
+
import { QeetLogo, QeetWordmarkLogo } from "@qeetrix/icons";
|
|
252
|
+
|
|
253
|
+
<QeetLogo aria-label="Qeet" /> // on light surfaces
|
|
254
|
+
<QeetLogo variant="dark" aria-label="Qeet" /> // on dark surfaces
|
|
255
|
+
<QeetWordmarkLogo height={28} aria-label="Qeet" /> // tile, on light surfaces
|
|
256
|
+
<QeetWordmarkLogo variant="dark" height={28} aria-label="Qeet" /> // tile, on dark surfaces
|
|
257
|
+
<QeetWordmarkLogo variant="plain" height={24} aria-label="Qeet" /> // no tile, on light surfaces
|
|
258
|
+
<QeetWordmarkLogo variant="plain-dark" height={24} aria-label="Qeet" />
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
The wordmark is **Qeet.** set in Qeet Display Bold (Cal Sans UI Geo Bold, SIL OFL 1.1), kerned by
|
|
262
|
+
eye pair by pair, with the full stop in Qeet orange, and converted to outlines, so it renders the
|
|
263
|
+
same without the font. The tile is square-cornered and centred on the capitals. The stop is the
|
|
264
|
+
same orange in all four files. Use the tile where the mark must stand out on a busy or coloured
|
|
265
|
+
surface; use the plain letters in headers, footers and anywhere the surface is already calm.
|
|
266
|
+
|
|
267
|
+
An image cannot see your app's theme, so pick the file the same way your theme is picked. With a
|
|
268
|
+
class-based theme (`.dark` on `<html>`, as Qeetrix UI does), render both and let CSS show one:
|
|
269
|
+
|
|
270
|
+
```tsx
|
|
271
|
+
<QeetLogo className="inline-block dark:hidden" aria-label="Qeet" />
|
|
272
|
+
<QeetLogo variant="dark" className="hidden dark:inline-block" aria-label="Qeet" />
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
The same pattern works for `QeetWordmarkLogo`. The Qeetrix UI playground's **Brand** page
|
|
276
|
+
(`#/brand`) shows both in light and dark, at every size, and inside real app layouts.
|
|
277
|
+
|
|
278
|
+
If your theme follows the operating system instead, use `prefers-color-scheme` in your CSS the
|
|
279
|
+
same way. Prefer the class approach whenever the app has its own theme toggle, or the logo and
|
|
280
|
+
the page will disagree.
|
|
281
|
+
|
|
282
|
+
Both are first-party (`firstParty: true` in `config/brands.json`, licence class `first-party`):
|
|
283
|
+
their files in `icons/brand-icons/brands/qeet/` and `qeet-wordmark/` are kept across
|
|
284
|
+
`bun run sync:brands`, which replaces everything else in that folder. The Qeet name and mark are trademarks of Qeet Group.
|
|
285
|
+
|
|
286
|
+
### ๐๏ธ Names and collections
|
|
204
287
|
|
|
205
288
|
A logo's name is its slug in PascalCase plus `Logo`: `GithubLogo`, `GoogleCloudLogo`. Slugs that
|
|
206
289
|
start with a digit get a `Brand` prefix (`Brand1passwordLogo`). Icons always end in `Icon` and
|
|
@@ -208,14 +291,14 @@ logos in `Logo`, so the two families never collide.
|
|
|
208
291
|
|
|
209
292
|
| Collection | Logos |
|
|
210
293
|
|:--|--:|
|
|
211
|
-
| Brands | 4,
|
|
212
|
-
| Auth badges | 860 |
|
|
213
|
-
| AWS architecture | 739 |
|
|
214
|
-
| Azure architecture | 626 |
|
|
215
|
-
| Community | 259 |
|
|
216
|
-
| Google Cloud architecture | 214 |
|
|
217
|
-
| Kubernetes architecture | 38 |
|
|
218
|
-
| Unlisted | 2 |
|
|
294
|
+
| ๐ข Brands | 4,693 |
|
|
295
|
+
| ๐ Auth badges | 860 |
|
|
296
|
+
| โ๏ธ AWS architecture | 739 |
|
|
297
|
+
| โ๏ธ Azure architecture | 626 |
|
|
298
|
+
| ๐ฅ Community | 259 |
|
|
299
|
+
| โ๏ธ Google Cloud architecture | 214 |
|
|
300
|
+
| โธ๏ธ Kubernetes architecture | 38 |
|
|
301
|
+
| ๐๏ธ Unlisted | 2 |
|
|
219
302
|
|
|
220
303
|
theSVG's own `light` and `dark` labels are inverted for most logos, so the catalogue records the
|
|
221
304
|
background each file is actually drawn for (`light`, `dark`, or `any`), measured from its colours.
|
|
@@ -228,7 +311,7 @@ background each file is actually drawn for (`light`, `dark`, or `any`), measured
|
|
|
228
311
|
> see [licenses/third-party-logos.md](licenses/third-party-logos.md) and
|
|
229
312
|
> [docs/logos.md](docs/logos.md#licensing-and-trademarks).
|
|
230
313
|
|
|
231
|
-
## Catalogue and search
|
|
314
|
+
## ๐ Catalogue and search
|
|
232
315
|
|
|
233
316
|
Machine-readable catalogues for docs sites, icon pickers, and tooling. They are never needed to
|
|
234
317
|
render, and the package root never imports them.
|
|
@@ -261,7 +344,44 @@ const wordmarks = logoManifest.logos.filter(
|
|
|
261
344
|
| `tags`, `aliases` | `aliases`, `hex` (brand colour) |
|
|
262
345
|
| `directionality` | `license`, `website`, `guidelines`, `source` |
|
|
263
346
|
|
|
264
|
-
##
|
|
347
|
+
## ๐ Coming from lucide-react
|
|
348
|
+
|
|
349
|
+
The artwork is Lucide's, so most screens move over with an import change:
|
|
350
|
+
|
|
351
|
+
| `lucide-react` | `@qeetrix/icons` |
|
|
352
|
+
|:--|:--|
|
|
353
|
+
| `import { Star } from "lucide-react"` | `import { StarIcon } from "@qeetrix/icons"` |
|
|
354
|
+
| `<Star size={20} strokeWidth={1.5} />` | `<StarIcon size={20} strokeWidth={1.5} />` (same props) |
|
|
355
|
+
| `<Star className="text-amber-500" />` | `<StarIcon className="text-amber-500" />` (same `currentColor`) |
|
|
356
|
+
| Outline only | Add `variant="filled"` where a filled drawing exists |
|
|
357
|
+
| Round only | Add `shape="sharp"` for the sharp style |
|
|
358
|
+
| Logos not included | `GithubLogo`, `SlackLogo`, โฆ from the same package |
|
|
359
|
+
|
|
360
|
+
Names follow Lucide 1.52.0, so a few older lucide-react names differ (`Trash2` is `TrashIcon`
|
|
361
|
+
here); the catalogue's `aliases` field maps them. `absoluteStrokeWidth` is not supported.
|
|
362
|
+
|
|
363
|
+
## ๐ Design rules
|
|
364
|
+
|
|
365
|
+
Every derived drawing follows the same rules, so families look alike and nothing surprises you at
|
|
366
|
+
16 px.
|
|
367
|
+
|
|
368
|
+
| | Round filled | Sharp (outline and filled) |
|
|
369
|
+
|:--|:--|:--|
|
|
370
|
+
| ๐ **Footprint** | Same painted extent as the outline | Same drawing, square caps, mitered joins (miter limit 4) |
|
|
371
|
+
| ๐งฑ **Bodies and details** | Bodies solid; details cut as 2-unit negative lines | Small corner roundings become sharp corners; acute tips come to a point |
|
|
372
|
+
| โ๏ธ **Cuts that reach an edge** | Run straight through, so parts separate cleanly (calendar header, file dog-ear, mail flap) | Identical to round: both shapes part the same way |
|
|
373
|
+
| ๐ **Attached parts** | Legs, handles, stands, cords stay joined | Line ends that stop on another stroke are trimmed so no cap pokes out |
|
|
374
|
+
| ๐ช **Layers** | Front parts sit in a 1-unit gap (clipboard clip, copy's front sheet, wheels) | Same roles as round, part for part |
|
|
375
|
+
| ๐ฒ **Border** | Inside Lucide's 1-unit padding | Never crosses it: a corner that would is cut flat, minimally, symmetrically |
|
|
376
|
+
| โช **Dots** | Round holes | UI dots square (ellipsis, bullets, keys, pips); figurative dots round (eyes, spots, drops) |
|
|
377
|
+
| ๐ฟ **Organic shapes** | As the outline | Circles, faces, animals, fruit, hands, and coastlines stay round |
|
|
378
|
+
| ๐ค **Letters** | As the outline | An A's apex stays level with the letters beside it |
|
|
379
|
+
|
|
380
|
+
Where no rule gives a clean result, a reviewed, hand-drawn override takes the derivation's place.
|
|
381
|
+
Full detail: [docs/filled.md](docs/filled.md), [docs/sharp.md](docs/sharp.md), and
|
|
382
|
+
[docs/design.md](docs/design.md).
|
|
383
|
+
|
|
384
|
+
## ๐งช Playground
|
|
265
385
|
|
|
266
386
|
An internal, unpublished playground for browsing and visual review, with separate **Icons** and
|
|
267
387
|
**Logos** pages:
|
|
@@ -270,30 +390,33 @@ An internal, unpublished playground for browsing and visual review, with separat
|
|
|
270
390
|
bun run playground
|
|
271
391
|
```
|
|
272
392
|
|
|
273
|
-
- **Icons:** category sidebar, search across names, tags, and former names, Round/Sharp and
|
|
393
|
+
- ๐จ **Icons:** category sidebar, search across names, tags, and former names, Round/Sharp and
|
|
274
394
|
variant switches, size, stroke, and colour controls, and an inspector with every shape and
|
|
275
395
|
variant, real-size previews, construction grid, light/dark surfaces, RTL preview, and copyable
|
|
276
396
|
JSX.
|
|
277
|
-
- **Logos:** collections, license and variant filters, a light/dark/transparent background
|
|
397
|
+
- ๐ท๏ธ **Logos:** collections, license and variant filters, a light/dark/transparent background
|
|
278
398
|
switch, cards at each logo's true aspect ratio, and an inspector with every file on the
|
|
279
399
|
background it's drawn for, license warnings, and brand links.
|
|
280
|
-
- **Everywhere:** a โK command palette across icons and logos, shareable URLs, keyboard
|
|
400
|
+
- โจ๏ธ **Everywhere:** a โK command palette across icons and logos, shareable URLs, keyboard
|
|
281
401
|
navigation, and light and dark themes.
|
|
282
402
|
|
|
283
|
-
## Performance
|
|
403
|
+
## โก Performance and package size
|
|
284
404
|
|
|
285
|
-
- **Production builds include only what you import.** Every module is free of side effects and
|
|
286
|
-
the root is a list of static re-exports, so bundlers drop every unused icon and logo.
|
|
287
|
-
|
|
405
|
+
- ๐ฒ **Production builds include only what you import.** Every module is free of side effects and
|
|
406
|
+
the root is a list of static re-exports, so bundlers drop every unused icon and logo. Tests
|
|
407
|
+
bundle real consumers to prove it.
|
|
408
|
+
- ๐ฅ **One import, everything included.** Importing `@qeetrix/icons` gives you all icons and logos.
|
|
288
409
|
In Node (server rendering, test runners) the first import therefore loads every module:
|
|
289
410
|
measured cold on a development laptop, about 20 s and 360 MB with the logos, against about
|
|
290
411
|
1.8 s for icons alone. It is paid once per process.
|
|
291
|
-
- **Dev servers** that pre-bundle a dependency's root, such as Vite and Next.js, process the whole
|
|
412
|
+
- ๐ฅ **Dev servers** that pre-bundle a dependency's root, such as Vite and Next.js, process the whole
|
|
292
413
|
package on the first start after installing or upgrading, then reuse their cache.
|
|
293
|
-
- **Per-icon imports** are available when you need the leanest possible module graph:
|
|
414
|
+
- ๐ชถ **Per-icon imports** are available when you need the leanest possible module graph:
|
|
294
415
|
`import { TrashIcon } from "@qeetrix/icons/icons/trash"`.
|
|
416
|
+
- ๐ฆ **Package:** about 10.7 MB packed and 50.7 MB unpacked, almost all of it logo data. Only
|
|
417
|
+
compiled code and licenses ship; no source SVGs.
|
|
295
418
|
|
|
296
|
-
## How it is built
|
|
419
|
+
## ๐๏ธ How it is built
|
|
297
420
|
|
|
298
421
|
Every source file is written by a tool from a pinned upstream release, and everything generated
|
|
299
422
|
is committed, validated in CI, and reproducible.
|
|
@@ -304,6 +427,7 @@ flowchart LR
|
|
|
304
427
|
RO -->|derive:filled| RF["icons/round-filled"]
|
|
305
428
|
RO -->|derive:sharp| SO["icons/sharp-outline"]
|
|
306
429
|
SO -->|derive:sharp| SF["icons/sharp-filled"]
|
|
430
|
+
C["config/derived ยท config/overrides"] -.-> RF & SO & SF
|
|
307
431
|
RO & RF & SO & SF -->|check:icons ยท generate| GI["src/generated/icons"]
|
|
308
432
|
T["theSVG 3.3.12"] -->|sync:brands| B["icons/brand-icons"]
|
|
309
433
|
B -->|check:brands ยท generate:logos| GL["src/generated/logos"]
|
|
@@ -311,22 +435,28 @@ flowchart LR
|
|
|
311
435
|
GL --> P
|
|
312
436
|
```
|
|
313
437
|
|
|
314
|
-
- **Filled drawings** are derived with CanvasKit (Skia) path operations from per-category recipes
|
|
438
|
+
- ๐ **Filled drawings** are derived with CanvasKit (Skia) path operations from per-category recipes
|
|
315
439
|
in [config/derived/](config/derived/README.md): bodies filled to the outline's painted extent,
|
|
316
|
-
details cut as negative lines
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
440
|
+
details cut as negative lines, crossing lines cleared by a gap. See
|
|
441
|
+
[docs/filled.md](docs/filled.md).
|
|
442
|
+
- ๐ท **Sharp drawings** square corner roundings at their tangent intersections, point acute tips,
|
|
443
|
+
and then fit the whole icon: nothing crosses the padding, no cap pokes past the stroke it ends
|
|
444
|
+
on, joined strokes form one corner, and mirror twins get the same cut. See
|
|
321
445
|
[docs/sharp.md](docs/sharp.md).
|
|
322
|
-
- **
|
|
446
|
+
- โ๏ธ **Overrides:** 78 hand-drawn replacements in `config/overrides/` cover the few drawings rules
|
|
447
|
+
cannot get right. Each is stamped with the SHA-256 of the outline it was drawn against, so a
|
|
448
|
+
Lucide upgrade flags it for review instead of silently drifting.
|
|
449
|
+
- ๐ท๏ธ **Logos** are copied byte for byte from a pinned theSVG commit, validated (no scripts, event
|
|
323
450
|
handlers, or external references), and embedded as lossless `data:` URIs. See
|
|
324
451
|
[docs/logos.md](docs/logos.md).
|
|
325
452
|
|
|
326
|
-
### Repository layout
|
|
453
|
+
### ๐๏ธ Repository layout
|
|
327
454
|
|
|
328
455
|
```text
|
|
329
|
-
config/
|
|
456
|
+
config/
|
|
457
|
+
derived/ Per-category tables: filled recipes and roles, keepRound, tipHeight
|
|
458
|
+
overrides/ Hand-drawn, hash-stamped replacements for derived drawings
|
|
459
|
+
lucide.json, brands.json, categories.ts, icon-system.ts, icon-metadata.ts, โฆ
|
|
330
460
|
icons/
|
|
331
461
|
round-outline/ Lucide outlines, unchanged
|
|
332
462
|
round-filled/ Derived filled drawings
|
|
@@ -345,7 +475,23 @@ tests/ Vitest suites, including a packed-tarball consumer test
|
|
|
345
475
|
docs/ Design, API, pipeline, and process documentation
|
|
346
476
|
```
|
|
347
477
|
|
|
348
|
-
##
|
|
478
|
+
## โ
Quality
|
|
479
|
+
|
|
480
|
+
- ๐งพ **Validation:** every source SVG is checked against 24 rules (`QXI-*` codes): structure,
|
|
481
|
+
allowed elements and attributes, paint, the grid, naming, categories, duplicates, and that every
|
|
482
|
+
icon has all its drawings in both shapes. See [docs/validation.md](docs/validation.md).
|
|
483
|
+
- ๐ฒ **Border proof:** a test measures every sharp drawing with CanvasKit and fails if anything
|
|
484
|
+
paints past the padding where the round drawing doesn't. The few curved ends too short to trim
|
|
485
|
+
are listed with their measured overshoot, and none may get worse.
|
|
486
|
+
- ๐ **Reproducibility:** `check:filled`, `check:sharp`, `check:generated`, and `check:logos` fail
|
|
487
|
+
if any derived or generated file differs from what the tools produce.
|
|
488
|
+
- ๐ฆ **Real consumers:** the package test packs the tarball, installs it in a fresh project,
|
|
489
|
+
typechecks strict consumers under `bundler` and `nodenext` resolution, renders icons in both
|
|
490
|
+
shapes, and bundles them to prove tree-shaking.
|
|
491
|
+
- ๐ **Visual review:** every filled and sharp drawing was reviewed by eye at 64, 24, and 16 px,
|
|
492
|
+
category by category. See [docs/visual-qa.md](docs/visual-qa.md).
|
|
493
|
+
|
|
494
|
+
## ๐ ๏ธ Development
|
|
349
495
|
|
|
350
496
|
Bun only (1.3.14), strict TypeScript, ESM, Biome, and Vitest.
|
|
351
497
|
|
|
@@ -356,56 +502,61 @@ bun run lint && bun run typecheck && bun run test
|
|
|
356
502
|
|
|
357
503
|
| Area | Commands |
|
|
358
504
|
|:--|:--|
|
|
359
|
-
| Quality | `lint`, `typecheck`, `test`, `build` |
|
|
360
|
-
| Icons | `sync:lucide [version]`, `derive:filled`, `derive:sharp`, `generate` |
|
|
361
|
-
|
|
|
362
|
-
|
|
|
363
|
-
|
|
|
364
|
-
|
|
|
505
|
+
| โ
Quality | `lint`, `typecheck`, `test`, `build` |
|
|
506
|
+
| ๐จ Icons | `sync:lucide [version]`, `derive:filled`, `derive:sharp`, `generate` |
|
|
507
|
+
| ๐ฏ One category | `derive:filled --category <id>`, `derive:sharp --category <id>` |
|
|
508
|
+
| โ๏ธ Overrides | `stamp:override <file>` |
|
|
509
|
+
| ๐ Icon checks | `check:icons`, `check:filled`, `check:sharp`, `check:generated` |
|
|
510
|
+
| ๐ท๏ธ Logos | `sync:brands [commit]`, `generate:logos` |
|
|
511
|
+
| ๐ Logo checks | `check:brands`, `check:logos` |
|
|
512
|
+
| ๐งช Playground | `playground`, `playground:build` |
|
|
365
513
|
|
|
366
514
|
Ground rules:
|
|
367
515
|
|
|
368
|
-
- **Never hand-edit tool-written files**: `icons/`, `config/lucide.json`, `config/brands.json`,
|
|
516
|
+
- ๐ซ **Never hand-edit tool-written files**: `icons/`, `config/lucide.json`, `config/brands.json`,
|
|
369
517
|
`config/categories.ts`, `src/generated/`, `icon-manifest.json`, or `licenses/third-party-logos.md`.
|
|
370
518
|
Change the inputs and rerun the tool.
|
|
371
|
-
- **`sync:lucide` and `sync:brands` leave the repository consistent**: they re-derive and
|
|
519
|
+
- ๐ **`sync:lucide` and `sync:brands` leave the repository consistent**: they re-derive and
|
|
372
520
|
regenerate everything downstream.
|
|
373
|
-
- **A missing or flawed outline belongs upstream** in Lucide; a filled or sharp result is changed
|
|
521
|
+
- โฌ๏ธ **A missing or flawed outline belongs upstream** in Lucide; a filled or sharp result is changed
|
|
374
522
|
through its category's file in [config/derived/](config/derived/README.md), an override, or the
|
|
375
523
|
sharp rules.
|
|
376
|
-
- **CI and the release gate run** lint, typecheck, tests, every `check:*` command, the build, and
|
|
524
|
+
- ๐ค **CI and the release gate run** lint, typecheck, tests, every `check:*` command, the build, and
|
|
377
525
|
the playground build.
|
|
378
526
|
|
|
379
|
-
## Documentation
|
|
527
|
+
## ๐ Documentation
|
|
380
528
|
|
|
381
529
|
| Guide | |
|
|
382
530
|
|:--|:--|
|
|
383
|
-
| [API](docs/api.md) | Entry points, props, types, the catalogue schema, and versioning |
|
|
384
|
-
| [Design](docs/design.md) | Grid, stroke, padding, and how filled and sharp drawings are formed |
|
|
385
|
-
| [Filled drawings](docs/filled.md) | Roles, inference, recipes, and how to add a filled icon |
|
|
386
|
-
| [Sharp style](docs/sharp.md) | Sharpening rules,
|
|
387
|
-
| [Brand logos](docs/logos.md) | Sync, catalogue, components, licensing, and performance |
|
|
388
|
-
| [Lucide](docs/lucide.md) | What comes from Lucide, syncing, and upgrading |
|
|
389
|
-
| [Naming](docs/naming.md) ยท [Accessibility](docs/accessibility.md) ยท [RTL](docs/rtl.md) | Conventions |
|
|
390
|
-
| [Architecture](docs/architecture.md) ยท [Generation](docs/generation.md) ยท [Validation](docs/validation.md) | How the pipeline works |
|
|
391
|
-
| [Visual QA](docs/visual-qa.md) ยท [Contributing](docs/contributing.md) ยท [Releases](docs/releases.md) | Process |
|
|
531
|
+
| ๐งฉ [API](docs/api.md) | Entry points, props, types, the catalogue schema, and versioning |
|
|
532
|
+
| ๐ [Design](docs/design.md) | Grid, stroke, padding, and how filled and sharp drawings are formed |
|
|
533
|
+
| ๐ [Filled drawings](docs/filled.md) | Roles, inference, recipes, overrides, and how to add a filled icon |
|
|
534
|
+
| ๐ท [Sharp style](docs/sharp.md) | Sharpening rules, fitting, kept-round elements, letter heights |
|
|
535
|
+
| ๐ท๏ธ [Brand logos](docs/logos.md) | Sync, catalogue, components, licensing, and performance |
|
|
536
|
+
| ๐ชถ [Lucide](docs/lucide.md) | What comes from Lucide, syncing, and upgrading |
|
|
537
|
+
| ๐ค [Naming](docs/naming.md) ยท โฟ [Accessibility](docs/accessibility.md) ยท โ๏ธ [RTL](docs/rtl.md) | Conventions |
|
|
538
|
+
| ๐๏ธ [Architecture](docs/architecture.md) ยท โ๏ธ [Generation](docs/generation.md) ยท ๐งพ [Validation](docs/validation.md) | How the pipeline works |
|
|
539
|
+
| ๐ [Visual QA](docs/visual-qa.md) ยท ๐ค [Contributing](docs/contributing.md) ยท ๐ข [Releases](docs/releases.md) | Process |
|
|
392
540
|
|
|
393
541
|
The full index is [docs/README.md](docs/README.md).
|
|
394
542
|
|
|
395
|
-
## Releases
|
|
543
|
+
## ๐ข Releases
|
|
396
544
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
545
|
+
- ๐ท๏ธ **Published on npm** as [`@qeetrix/icons`](https://www.npmjs.com/package/@qeetrix/icons),
|
|
546
|
+
with signed provenance from GitHub Actions, and as a GitHub Release for each version.
|
|
547
|
+
- ๐ข **Versioning:** the Version workflow raises the patch version on every pull request unless
|
|
548
|
+
it is already raised; merging to `main` publishes that version, tags it, and opens the GitHub
|
|
549
|
+
Release. A Rollback workflow moves the `latest` tag back to an earlier version.
|
|
550
|
+
- ๐ **Changes** are recorded in [CHANGELOG.md](CHANGELOG.md). Read
|
|
551
|
+
[docs/releases.md](docs/releases.md) before any release work.
|
|
401
552
|
|
|
402
|
-
## License
|
|
553
|
+
## โ๏ธ License
|
|
403
554
|
|
|
404
|
-
- **Package code:** MIT ยฉ Qeet Group.
|
|
405
|
-
- **Icons:** the artwork, the derived filled and sharp drawings, and the generated icon components
|
|
555
|
+
- ๐ป **Package code:** MIT ยฉ Qeet Group.
|
|
556
|
+
- ๐จ **Icons:** the artwork, the derived filled and sharp drawings, and the generated icon components
|
|
406
557
|
are based on [Lucide](https://lucide.dev), ISC ยฉ Lucide Icons and Contributors. Some Lucide icons
|
|
407
558
|
derive from Feather, MIT ยฉ Cole Bemis.
|
|
408
|
-
- **Brand logos:** each logo keeps its own license (public domain, permissive, attribution,
|
|
559
|
+
- ๐ท๏ธ **Brand logos:** each logo keeps its own license (public domain, permissive, attribution,
|
|
409
560
|
share-alike, no-derivatives, non-commercial, copyleft, or none), listed in
|
|
410
561
|
[licenses/third-party-logos.md](licenses/third-party-logos.md). theSVG's own code is MIT ยฉ
|
|
411
562
|
thesvg.org. Logos are trademarks of their owners, shown for identification only.
|
|
@@ -413,7 +564,7 @@ release work.
|
|
|
413
564
|
`package.json` declares `"license": "SEE LICENSE IN LICENSE"`; the full notices are in
|
|
414
565
|
[LICENSE](LICENSE).
|
|
415
566
|
|
|
416
|
-
### Acknowledgements
|
|
567
|
+
### ๐ Acknowledgements
|
|
417
568
|
|
|
418
569
|
Built on [Lucide](https://lucide.dev) and [Feather](https://feathericons.com) for the icons,
|
|
419
570
|
[theSVG](https://thesvg.org), [Simple Icons](https://simpleicons.org),
|
|
@@ -5744,6 +5744,8 @@ export { QatarAirwaysLogo } from "./logos/qatar-airways.js";
|
|
|
5744
5744
|
export { QatarEnergyLogo } from "./logos/qatar-energy.js";
|
|
5745
5745
|
export { QbittorrentLogo } from "./logos/qbittorrent.js";
|
|
5746
5746
|
export { QdrantLogo } from "./logos/qdrant.js";
|
|
5747
|
+
export { QeetLogo } from "./logos/qeet.js";
|
|
5748
|
+
export { QeetWordmarkLogo } from "./logos/qeet-wordmark.js";
|
|
5747
5749
|
export { QemuLogo } from "./logos/qemu.js";
|
|
5748
5750
|
export { QgisLogo } from "./logos/qgis.js";
|
|
5749
5751
|
export { QiLogo } from "./logos/qi.js";
|
|
@@ -5747,6 +5747,8 @@ export { QatarAirwaysLogo } from "./logos/qatar-airways.js";
|
|
|
5747
5747
|
export { QatarEnergyLogo } from "./logos/qatar-energy.js";
|
|
5748
5748
|
export { QbittorrentLogo } from "./logos/qbittorrent.js";
|
|
5749
5749
|
export { QdrantLogo } from "./logos/qdrant.js";
|
|
5750
|
+
export { QeetLogo } from "./logos/qeet.js";
|
|
5751
|
+
export { QeetWordmarkLogo } from "./logos/qeet-wordmark.js";
|
|
5750
5752
|
export { QemuLogo } from "./logos/qemu.js";
|
|
5751
5753
|
export { QgisLogo } from "./logos/qgis.js";
|
|
5752
5754
|
export { QiLogo } from "./logos/qi.js";
|
|
@@ -5750,6 +5750,8 @@ export const logoManifest = /* @__PURE__ */ JSON.parse(`{
|
|
|
5750
5750
|
{"id":"qatar-energy","componentName":"QatarEnergyLogo","title":"QatarEnergy","collection":"brands","variants":[{"name":"default","background":"any"}],"defaultVariant":"default","hex":"FAB916","categories":["Oil & Gas"],"aliases":[],"license":"CC0-1.0","website":"https://www.qatarenergy.qa","guidelines":"https://commons.wikimedia.org/wiki/File%3AQatarEnergy_logo.svg","source":"https://thesvg.org/icon/qatar-energy"},
|
|
5751
5751
|
{"id":"qbittorrent","componentName":"QbittorrentLogo","title":"qbittorrent","collection":"brands","variants":[{"name":"default","background":"any"},{"name":"mono","background":"light"}],"defaultVariant":"default","hex":"2F67BA","categories":["DevTool","Community"],"aliases":[],"license":"CC0-1.0","website":"https://github.com/qbittorrent/qBittorrent/blob/73028f9930d9ab9d89edb60ed4aedb66d75669d9/src/icons/qbittorrent-tray-light.svg","guidelines":null,"source":"https://thesvg.org/icon/qbittorrent"},
|
|
5752
5752
|
{"id":"qdrant","componentName":"QdrantLogo","title":"Qdrant","collection":"brands","variants":[{"name":"default","background":"dark"},{"name":"dark","background":"dark"},{"name":"light","background":"any"},{"name":"wordmark","background":"dark"},{"name":"wordmark-dark","background":"dark"},{"name":"wordmark-light","background":"light"}],"defaultVariant":"default","hex":"000000","categories":["Database","AI"],"aliases":[],"license":"MIT","website":"https://qdrant.tech/","guidelines":"https://qdrant.tech/brand-resources/","source":"https://thesvg.org/icon/qdrant"},
|
|
5753
|
+
{"id":"qeet","componentName":"QeetLogo","title":"Qeet","collection":"brands","variants":[{"name":"default","background":"light"},{"name":"dark","background":"dark"}],"defaultVariant":"default","hex":"F26D0E","categories":["Brand"],"aliases":["qeet-group"],"license":"LicenseRef-Qeet","website":"https://qeet.in","guidelines":null,"source":"https://qeet.in"},
|
|
5754
|
+
{"id":"qeet-wordmark","componentName":"QeetWordmarkLogo","title":"Qeet wordmark","collection":"brands","variants":[{"name":"default","background":"any"},{"name":"dark","background":"any"},{"name":"plain","background":"any"},{"name":"plain-dark","background":"any"}],"defaultVariant":"default","hex":"F26D0E","categories":["Brand"],"aliases":["qeet-group"],"license":"LicenseRef-Qeet","website":"https://qeet.in","guidelines":null,"source":"https://qeet.in"},
|
|
5753
5755
|
{"id":"qemu","componentName":"QemuLogo","title":"QEMU","collection":"brands","variants":[{"name":"default","background":"any"},{"name":"mono","background":"light"}],"defaultVariant":"default","hex":"FF6600","categories":["Software","Platform"],"aliases":[],"license":"CC0-1.0","website":"https://wiki.qemu.org/Logo","guidelines":null,"source":"https://thesvg.org/icon/qemu"},
|
|
5754
5756
|
{"id":"qgis","componentName":"QgisLogo","title":"Qgis","collection":"brands","variants":[{"name":"default","background":"any"},{"name":"mono","background":"light"}],"defaultVariant":"default","hex":"589632","categories":["Software","Platform"],"aliases":[],"license":"CC0-1.0","website":"https://www.qgis.org/en/site/getinvolved/styleguide.html","guidelines":"https://www.qgis.org/en/site/getinvolved/styleguide.html","source":"https://thesvg.org/icon/qgis"},
|
|
5755
5757
|
{"id":"qi","componentName":"QiLogo","title":"Qi","collection":"brands","variants":[{"name":"default","background":"light"},{"name":"mono","background":"light"}],"defaultVariant":"default","hex":"000000","categories":["Software","Platform"],"aliases":[],"license":"CC0-1.0","website":"https://www.wirelesspowerconsortium.com/knowledge-base/retail/qi-logo-guidelines-and-artwork.html","guidelines":"https://www.wirelesspowerconsortium.com/knowledge-base/retail/qi-logo-guidelines-and-artwork.html","source":"https://thesvg.org/icon/qi"},
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import type { LogoProps } from "../../types/logo.js";
|
|
3
|
+
type Variant = "default" | "dark" | "plain" | "plain-dark";
|
|
4
|
+
/**
|
|
5
|
+
* Qeet wordmark logo. Variants: `default` (default), `dark`, `plain`, `plain-dark`.
|
|
6
|
+
* License: LicenseRef-Qeet. Trademarks belong to their owners.
|
|
7
|
+
*/
|
|
8
|
+
export declare function QeetWordmarkLogo(props: LogoProps<Variant>): ReactElement;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Generated by @qeetrix/icons from icons/brand-icons/brands/qeet-wordmark/default.svg, icons/brand-icons/brands/qeet-wordmark/dark.svg, icons/brand-icons/brands/qeet-wordmark/plain.svg, icons/brand-icons/brands/qeet-wordmark/plain-dark.svg.
|
|
2
|
+
// Each file is embedded unmodified: percent-decoding its data URI gives back the file byte for byte.
|
|
3
|
+
// First-party: Qeet Group's own artwork, not from theSVG (`firstParty` in config/brands.json).
|
|
4
|
+
// Logo license: LicenseRef-Qeet. The Qeet name and mark are trademarks of Qeet Group.
|
|
5
|
+
// Do not edit this file directly. Edit the sources and run `bun run generate:logos`.
|
|
6
|
+
import { renderLogo } from "../../runtime/render-logo.js";
|
|
7
|
+
const data = {
|
|
8
|
+
defaultVariant: "default",
|
|
9
|
+
variants: {
|
|
10
|
+
default: { width: 2773, height: 1006, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2773 1006" width="2773" height="1006" role="img" aria-label="Qeet">%0A<title>Qeet</title>%0A<rect width="2773" height="1006" fill="%230A0A0A"/>%0A<path fill="%23FFFFFF" d="M566,854c-68.67 0-130.83-16.17-186.5-48.5c-55.67-32.33-99.5-76.83-131.5-133.5c-32-56.67-48-120-48-190c0-70.67 16-134.5 48-191.5c32-57 75.83-101.83 131.5-134.5c55.67-32.67 117.83-49 186.5-49c68.67 0 130.83 16.33 186.5 49c55.67 32.67 99.5 77.5 131.5 134.5c32 57 48 120.83 48 191.5c0 56-10.17 107.83-30.5 155.5c-20.33 47.67-49.17 88.5-86.5 122.5l93 140h-157l-48-71c-44 16.67-89.67 25-137 25zM566,712c21.33 0 42.67-2.67 64-8l-86-129h157l38 56c30-39.33 45-89 45-149c0-48.67-9.83-90.67-29.5-126c-19.67-35.33-46-62-79-80c-33-18-69.5-27-109.5-27c-40.67 0-77.5 9-110.5 27c-33 18-59.17 44.5-78.5 79.5c-19.33 35-29 77.17-29 126.5c0 48.67 9.67 90.33 29 125c19.33 34.67 45.5 60.83 78.5 78.5c33 17.67 69.83 26.5 110.5 26.5zM1235,855c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1343,524c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1793,855c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1901,524c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM2177,437h-113v-126h113v-137h142v137h116v126h-116v404h-142z"/>%0A<path fill="%23F26D0E" d="M2509,855c-26.67 0-49-9-67-27c-18-18-27-40-27-66c0-24.67 9-46 27-64c18-18 40.33-27 67-27c27.33 0 49.83 8.83 67.5 26.5c17.67 17.67 26.5 39.17 26.5 64.5c0 26-8.83 48-26.5 66c-17.67 18-40.17 27-67.5 27z"/>%0A</svg>%0A' },
|
|
11
|
+
dark: { width: 2773, height: 1006, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2773 1006" width="2773" height="1006" role="img" aria-label="Qeet">%0A<title>Qeet</title>%0A<rect width="2773" height="1006" fill="%23FFFFFF"/>%0A<path fill="%230A0A0A" d="M566,854c-68.67 0-130.83-16.17-186.5-48.5c-55.67-32.33-99.5-76.83-131.5-133.5c-32-56.67-48-120-48-190c0-70.67 16-134.5 48-191.5c32-57 75.83-101.83 131.5-134.5c55.67-32.67 117.83-49 186.5-49c68.67 0 130.83 16.33 186.5 49c55.67 32.67 99.5 77.5 131.5 134.5c32 57 48 120.83 48 191.5c0 56-10.17 107.83-30.5 155.5c-20.33 47.67-49.17 88.5-86.5 122.5l93 140h-157l-48-71c-44 16.67-89.67 25-137 25zM566,712c21.33 0 42.67-2.67 64-8l-86-129h157l38 56c30-39.33 45-89 45-149c0-48.67-9.83-90.67-29.5-126c-19.67-35.33-46-62-79-80c-33-18-69.5-27-109.5-27c-40.67 0-77.5 9-110.5 27c-33 18-59.17 44.5-78.5 79.5c-19.33 35-29 77.17-29 126.5c0 48.67 9.67 90.33 29 125c19.33 34.67 45.5 60.83 78.5 78.5c33 17.67 69.83 26.5 110.5 26.5zM1235,855c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1343,524c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1793,855c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1901,524c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM2177,437h-113v-126h113v-137h142v137h116v126h-116v404h-142z"/>%0A<path fill="%23F26D0E" d="M2509,855c-26.67 0-49-9-67-27c-18-18-27-40-27-66c0-24.67 9-46 27-64c18-18 40.33-27 67-27c27.33 0 49.83 8.83 67.5 26.5c17.67 17.67 26.5 39.17 26.5 64.5c0 26-8.83 48-26.5 66c-17.67 18-40.17 27-67.5 27z"/>%0A</svg>%0A' },
|
|
12
|
+
plain: { width: 2403, height: 793, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2403 793" width="2403" height="793" role="img" aria-label="Qeet">%0A<title>Qeet</title>%0A<path fill="%230A0A0A" d="M366,747c-68.67 0-130.83-16.17-186.5-48.5c-55.67-32.33-99.5-76.83-131.5-133.5c-32-56.67-48-120-48-190c0-70.67 16-134.5 48-191.5c32-57 75.83-101.83 131.5-134.5c55.67-32.67 117.83-49 186.5-49c68.67 0 130.83 16.33 186.5 49c55.67 32.67 99.5 77.5 131.5 134.5c32 57 48 120.83 48 191.5c0 56-10.17 107.83-30.5 155.5c-20.33 47.67-49.17 88.5-86.5 122.5l93 140h-157l-48-71c-44 16.67-89.67 25-137 25zM366,605c21.33 0 42.67-2.67 64-8l-86-129h157l38 56c30-39.33 45-89 45-149c0-48.67-9.83-90.67-29.5-126c-19.67-35.33-46-62-79-80c-33-18-69.5-27-109.5-27c-40.67 0-77.5 9-110.5 27c-33 18-59.17 44.5-78.5 79.5c-19.33 35-29 77.17-29 126.5c0 48.67 9.67 90.33 29 125c19.33 34.67 45.5 60.83 78.5 78.5c33 17.67 69.83 26.5 110.5 26.5zM1035,748c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1143,417c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1593,748c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1701,417c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1977,330h-113v-126h113v-137h142v137h116v126h-116v404h-142z"/>%0A<path fill="%23F26D0E" d="M2309,748c-26.67 0-49-9-67-27c-18-18-27-40-27-66c0-24.67 9-46 27-64c18-18 40.33-27 67-27c27.33 0 49.83 8.83 67.5 26.5c17.67 17.67 26.5 39.17 26.5 64.5c0 26-8.83 48-26.5 66c-17.67 18-40.17 27-67.5 27z"/>%0A</svg>%0A' },
|
|
13
|
+
"plain-dark": { width: 2403, height: 793, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2403 793" width="2403" height="793" role="img" aria-label="Qeet">%0A<title>Qeet</title>%0A<path fill="%23FFFFFF" d="M366,747c-68.67 0-130.83-16.17-186.5-48.5c-55.67-32.33-99.5-76.83-131.5-133.5c-32-56.67-48-120-48-190c0-70.67 16-134.5 48-191.5c32-57 75.83-101.83 131.5-134.5c55.67-32.67 117.83-49 186.5-49c68.67 0 130.83 16.33 186.5 49c55.67 32.67 99.5 77.5 131.5 134.5c32 57 48 120.83 48 191.5c0 56-10.17 107.83-30.5 155.5c-20.33 47.67-49.17 88.5-86.5 122.5l93 140h-157l-48-71c-44 16.67-89.67 25-137 25zM366,605c21.33 0 42.67-2.67 64-8l-86-129h157l38 56c30-39.33 45-89 45-149c0-48.67-9.83-90.67-29.5-126c-19.67-35.33-46-62-79-80c-33-18-69.5-27-109.5-27c-40.67 0-77.5 9-110.5 27c-33 18-59.17 44.5-78.5 79.5c-19.33 35-29 77.17-29 126.5c0 48.67 9.67 90.33 29 125c19.33 34.67 45.5 60.83 78.5 78.5c33 17.67 69.83 26.5 110.5 26.5zM1035,748c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1143,417c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1593,748c-55.33 0-104.33-11.83-147-35.5c-42.67-23.67-75.67-56.5-99-98.5c-23.33-42-35-89-35-141c0-58 11.83-108.33 35.5-151c23.67-42.67 56.33-75.33 98-98c41.67-22.67 88.5-34 140.5-34c51.33 0 96.5 11.17 135.5 33.5c39 22.33 69.17 53.83 90.5 94.5c21.33 40.67 32 87.67 32 141c0 18-1.33 37.67-4 59h-379c8.67 30 24.5 54.83 47.5 74.5c23 19.67 52.5 29.5 88.5 29.5c26 0 50.67-5.5 74-16.5c23.33-11 42-25.83 56-44.5l93 94c-24 27.33-56 49.67-96 67c-40 17.33-83.67 26-131 26zM1701,417c-8-74.67-47-112-117-112c-33.33 0-61 9.33-83 28c-22 18.67-36.33 45.67-43 81zM1977,330h-113v-126h113v-137h142v137h116v126h-116v404h-142z"/>%0A<path fill="%23F26D0E" d="M2309,748c-26.67 0-49-9-67-27c-18-18-27-40-27-66c0-24.67 9-46 27-64c18-18 40.33-27 67-27c27.33 0 49.83 8.83 67.5 26.5c17.67 17.67 26.5 39.17 26.5 64.5c0 26-8.83 48-26.5 66c-17.67 18-40.17 27-67.5 27z"/>%0A</svg>%0A' },
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Qeet wordmark logo. Variants: `default` (default), `dark`, `plain`, `plain-dark`.
|
|
18
|
+
* License: LicenseRef-Qeet. Trademarks belong to their owners.
|
|
19
|
+
*/
|
|
20
|
+
export function QeetWordmarkLogo(props) {
|
|
21
|
+
return renderLogo(data, props);
|
|
22
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import type { LogoProps } from "../../types/logo.js";
|
|
3
|
+
type Variant = "default" | "dark";
|
|
4
|
+
/**
|
|
5
|
+
* Qeet logo. Variants: `default` (default), `dark`.
|
|
6
|
+
* License: LicenseRef-Qeet. Trademarks belong to their owners.
|
|
7
|
+
*/
|
|
8
|
+
export declare function QeetLogo(props: LogoProps<Variant>): ReactElement;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by @qeetrix/icons from icons/brand-icons/brands/qeet/default.svg, icons/brand-icons/brands/qeet/dark.svg.
|
|
2
|
+
// Each file is embedded unmodified: percent-decoding its data URI gives back the file byte for byte.
|
|
3
|
+
// First-party: Qeet Group's own artwork, not from theSVG (`firstParty` in config/brands.json).
|
|
4
|
+
// Logo license: LicenseRef-Qeet. The Qeet name and mark are trademarks of Qeet Group.
|
|
5
|
+
// Do not edit this file directly. Edit the sources and run `bun run generate:logos`.
|
|
6
|
+
import { renderLogo } from "../../runtime/render-logo.js";
|
|
7
|
+
const data = {
|
|
8
|
+
defaultVariant: "default",
|
|
9
|
+
variants: {
|
|
10
|
+
default: { width: 1254, height: 1254, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254" role="img" aria-label="Qeet logo">%0A <title>Qeet</title>%0A <defs>%0A %3C!-- Mask carves a true transparent hole through the bowl -->%0A <mask id="qBowlHole" maskUnits="userSpaceOnUse">%0A <rect width="1254" height="1254" fill="%23FFFFFF"/>%0A <path fill="%23000000" d="%0A M669.964722,338.242981%0A C714.535645,351.395386 751.471863,375.501129 779.470825,412.042328%0A C814.503479,457.763184 828.529907,509.627594 821.508301,567.354248%0A C815.037964,614.333862 796.163635,655.232849 763.035339,688.671509%0A C715.514587,736.637695 657.793396,758.218994 590.453552,749.188904%0A C504.824402,737.706116 436.176788,675.264038 417.429352,590.163330%0A C398.281219,503.243683 423.564056,429.604553 493.036591,373.787628%0A C542.333557,334.180542 599.844727,323.023224 661.836060,336.080780%0A C664.430725,336.627319 666.966248,337.454285 669.964722,338.242981 z"/>%0A </mask>%0A </defs>%0A%0A %3C!-- Bowl + descender curve (dark) with hole masked out -->%0A <path mask="url(%23qBowlHole)" fill="%230A0A0A" d="%0A M821.791687,894.018799%0A C803.326172,903.166809 785.336975,913.478882 766.312927,921.261658%0A C682.977112,955.354797 597.577454,960.575989 510.776794,936.458923%0A C427.137451,913.220154 358.319214,867.022827 303.655487,799.771240%0A C259.619385,745.594543 231.852402,683.929749 219.855377,615.135681%0A C205.246201,531.363037 215.390701,450.569489 250.641022,373.361603%0A C287.752838,292.076569 346.057434,229.640503 423.650269,185.486679%0A C489.535767,147.994873 560.685242,131.387634 636.355042,134.347610%0A C667.607117,135.570114 698.193970,141.258041 728.247498,149.842102%0A C729.508179,150.202209 730.704346,150.788620 731.848389,151.967499%0A C730.448730,152.746170 729.071960,153.118286 727.822754,152.863968%0A C709.200012,149.072678 691.179749,151.872894 674.192566,159.455490%0A C609.452271,188.353607 598.711670,273.967438 647.019897,320.610840%0A C654.005493,327.355682 662.567566,332.467743 669.964722,338.242981%0A C666.966248,337.454285 664.430725,336.627319 661.836060,336.080780%0A C599.844727,323.023224 542.333557,334.180542 493.036591,373.787628%0A C423.564056,429.604553 398.281219,503.243683 417.429352,590.163330%0A C436.176788,675.264038 504.824402,737.706116 590.453552,749.188904%0A C657.793396,758.218994 715.514587,736.637695 763.035339,688.671509%0A C796.163635,655.232849 815.037964,614.333862 821.583984,568.151245%0A C821.813477,570.053894 822.135437,571.531555 822.135864,573.009338%0A C822.152954,633.669861 822.122437,694.330322 822.139038,754.990845%0A C822.151672,800.985046 822.219727,846.979187 822.106567,893.217285%0A C821.897339,893.647034 821.844543,893.832886 821.791687,894.018799 z"/>%0A%0A %3C!-- Bright orange (brand) -->%0A <path fill="%23F26D0E" d="%0A M822.263123,892.973389%0A C822.219727,846.979187 822.151672,800.985046 822.139038,754.990845%0A C822.122437,694.330322 822.152954,633.669861 822.135864,573.009338%0A C822.135437,571.531555 821.813477,570.053894 821.565674,567.779114%0A C828.529907,509.627594 814.503479,457.763184 779.470825,412.042328%0A C751.471863,375.501129 714.535645,351.395386 670.400085,338.335388%0A C662.567566,332.467743 654.005493,327.355682 647.019897,320.610840%0A C598.711670,273.967438 609.452271,188.353607 674.192566,159.455490%0A C691.179749,151.872894 709.200012,149.072678 727.822754,152.863968%0A C729.071960,153.118286 730.448730,152.746170 731.992310,152.316010%0A C769.401550,160.954422 803.019836,177.923462 834.791809,198.657364%0A C880.962646,228.787796 919.463745,266.834351 950.460815,312.497620%0A C982.820740,360.168488 1003.902954,412.329163 1013.963745,469.046661%0A C1020.018982,503.183136 1020.544678,537.589294 1019.593262,572.806763%0A C1019.448914,575.015015 1019.590332,576.503357 1019.731812,577.991638%0A C1019.772949,580.350159 1019.814148,582.708679 1019.428955,585.628662%0A C1017.683411,593.105652 1016.613953,600.080200 1014.998474,606.925842%0A C1009.980408,628.190918 1005.808533,649.733887 999.348572,670.561157%0A C990.918884,697.739197 978.245422,723.197205 964.169678,747.999512%0A C946.413818,779.286499 923.983276,806.907410 899.392212,832.849548%0A C890.630920,842.092285 880.599915,850.155457 870.943115,858.519897%0A C855.853760,871.589722 839.671936,883.159241 822.263123,892.973389 z"/>%0A%0A %3C!-- Dark orange shadow -->%0A <path fill="%23D85301" d="%0A M822.106567,893.217285%0A C839.671936,883.159241 855.853760,871.589722 870.943115,858.519897%0A C880.599915,850.155457 890.630920,842.092285 899.392212,832.849548%0A C923.983276,806.907410 946.413818,779.286499 964.169678,747.999512%0A C978.245422,723.197205 990.918884,697.739197 999.348572,670.561157%0A C1005.808533,649.733887 1009.980408,628.190918 1014.998474,606.925842%0A C1016.613953,600.080200 1017.683411,593.105652 1019.364136,586.065613%0A C1019.808838,604.428406 1019.960144,622.915649 1019.964478,641.402893%0A C1019.996887,779.531555 1020.306824,917.661377 1019.819763,1055.788208%0A C1019.679565,1095.540405 1004.006104,1128.543701 969.487183,1150.236328%0A C923.479797,1179.148682 863.557739,1162.918457 837.012451,1115.253418%0A C826.966858,1097.215454 822.142151,1077.902100 822.083740,1057.398804%0A C821.929504,1003.248413 821.950806,949.097534 821.846924,894.482788%0A C821.844543,893.832886 821.897339,893.647034 822.106567,893.217285 z"/>%0A%0A <path fill="%23D85301" d="%0A M1019.828918,577.584717%0A C1019.590332,576.503357 1019.448914,575.015015 1019.526367,573.272095%0A C1019.805603,574.404175 1019.865845,575.791016 1019.828918,577.584717 z"/>%0A</svg>%0A' },
|
|
11
|
+
dark: { width: 1254, height: 1254, src: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254" role="img" aria-label="Qeet logo">%0A <title>Qeet</title>%0A <defs>%0A <mask id="qBowlHole" maskUnits="userSpaceOnUse">%0A <rect width="1254" height="1254" fill="%23FFFFFF"/>%0A <path fill="%23000000" d="%0A M669.964722,338.242981%0A C714.535645,351.395386 751.471863,375.501129 779.470825,412.042328%0A C814.503479,457.763184 828.529907,509.627594 821.508301,567.354248%0A C815.037964,614.333862 796.163635,655.232849 763.035339,688.671509%0A C715.514587,736.637695 657.793396,758.218994 590.453552,749.188904%0A C504.824402,737.706116 436.176788,675.264038 417.429352,590.163330%0A C398.281219,503.243683 423.564056,429.604553 493.036591,373.787628%0A C542.333557,334.180542 599.844727,323.023224 661.836060,336.080780%0A C664.430725,336.627319 666.966248,337.454285 669.964722,338.242981 z"/>%0A </mask>%0A </defs>%0A%0A %3C!-- Bowl + descender curve (white) with hole masked out -->%0A <path mask="url(%23qBowlHole)" fill="%23FCFCFC" d="%0A M821.791687,894.018799%0A C803.326172,903.166809 785.336975,913.478882 766.312927,921.261658%0A C682.977112,955.354797 597.577454,960.575989 510.776794,936.458923%0A C427.137451,913.220154 358.319214,867.022827 303.655487,799.771240%0A C259.619385,745.594543 231.852402,683.929749 219.855377,615.135681%0A C205.246201,531.363037 215.390701,450.569489 250.641022,373.361603%0A C287.752838,292.076569 346.057434,229.640503 423.650269,185.486679%0A C489.535767,147.994873 560.685242,131.387634 636.355042,134.347610%0A C667.607117,135.570114 698.193970,141.258041 728.247498,149.842102%0A C729.508179,150.202209 730.704346,150.788620 731.848389,151.967499%0A C730.448730,152.746170 729.071960,153.118286 727.822754,152.863968%0A C709.200012,149.072678 691.179749,151.872894 674.192566,159.455490%0A C609.452271,188.353607 598.711670,273.967438 647.019897,320.610840%0A C654.005493,327.355682 662.567566,332.467743 669.964722,338.242981%0A C666.966248,337.454285 664.430725,336.627319 661.836060,336.080780%0A C599.844727,323.023224 542.333557,334.180542 493.036591,373.787628%0A C423.564056,429.604553 398.281219,503.243683 417.429352,590.163330%0A C436.176788,675.264038 504.824402,737.706116 590.453552,749.188904%0A C657.793396,758.218994 715.514587,736.637695 763.035339,688.671509%0A C796.163635,655.232849 815.037964,614.333862 821.583984,568.151245%0A C821.813477,570.053894 822.135437,571.531555 822.135864,573.009338%0A C822.152954,633.669861 822.122437,694.330322 822.139038,754.990845%0A C822.151672,800.985046 822.219727,846.979187 822.106567,893.217285%0A C821.897339,893.647034 821.844543,893.832886 821.791687,894.018799 z"/>%0A%0A %3C!-- Bright orange (brand) -->%0A <path fill="%23F26D0E" d="%0A M822.263123,892.973389%0A C822.219727,846.979187 822.151672,800.985046 822.139038,754.990845%0A C822.122437,694.330322 822.152954,633.669861 822.135864,573.009338%0A C822.135437,571.531555 821.813477,570.053894 821.565674,567.779114%0A C828.529907,509.627594 814.503479,457.763184 779.470825,412.042328%0A C751.471863,375.501129 714.535645,351.395386 670.400085,338.335388%0A C662.567566,332.467743 654.005493,327.355682 647.019897,320.610840%0A C598.711670,273.967438 609.452271,188.353607 674.192566,159.455490%0A C691.179749,151.872894 709.200012,149.072678 727.822754,152.863968%0A C729.071960,153.118286 730.448730,152.746170 731.992310,152.316010%0A C769.401550,160.954422 803.019836,177.923462 834.791809,198.657364%0A C880.962646,228.787796 919.463745,266.834351 950.460815,312.497620%0A C982.820740,360.168488 1003.902954,412.329163 1013.963745,469.046661%0A C1020.018982,503.183136 1020.544678,537.589294 1019.593262,572.806763%0A C1019.448914,575.015015 1019.590332,576.503357 1019.731812,577.991638%0A C1019.772949,580.350159 1019.814148,582.708679 1019.428955,585.628662%0A C1017.683411,593.105652 1016.613953,600.080200 1014.998474,606.925842%0A C1009.980408,628.190918 1005.808533,649.733887 999.348572,670.561157%0A C990.918884,697.739197 978.245422,723.197205 964.169678,747.999512%0A C946.413818,779.286499 923.983276,806.907410 899.392212,832.849548%0A C890.630920,842.092285 880.599915,850.155457 870.943115,858.519897%0A C855.853760,871.589722 839.671936,883.159241 822.263123,892.973389 z"/>%0A%0A %3C!-- Dark orange shadow -->%0A <path fill="%23D85301" d="%0A M822.106567,893.217285%0A C839.671936,883.159241 855.853760,871.589722 870.943115,858.519897%0A C880.599915,850.155457 890.630920,842.092285 899.392212,832.849548%0A C923.983276,806.907410 946.413818,779.286499 964.169678,747.999512%0A C978.245422,723.197205 990.918884,697.739197 999.348572,670.561157%0A C1005.808533,649.733887 1009.980408,628.190918 1014.998474,606.925842%0A C1016.613953,600.080200 1017.683411,593.105652 1019.364136,586.065613%0A C1019.808838,604.428406 1019.960144,622.915649 1019.964478,641.402893%0A C1019.996887,779.531555 1020.306824,917.661377 1019.819763,1055.788208%0A C1019.679565,1095.540405 1004.006104,1128.543701 969.487183,1150.236328%0A C923.479797,1179.148682 863.557739,1162.918457 837.012451,1115.253418%0A C826.966858,1097.215454 822.142151,1077.902100 822.083740,1057.398804%0A C821.929504,1003.248413 821.950806,949.097534 821.846924,894.482788%0A C821.844543,893.832886 821.897339,893.647034 822.106567,893.217285 z"/>%0A%0A <path fill="%23D85301" d="%0A M1019.828918,577.584717%0A C1019.590332,576.503357 1019.448914,575.015015 1019.526367,573.272095%0A C1019.805603,574.404175 1019.865845,575.791016 1019.828918,577.584717 z"/>%0A</svg>%0A' },
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Qeet logo. Variants: `default` (default), `dark`.
|
|
16
|
+
* License: LicenseRef-Qeet. Trademarks belong to their owners.
|
|
17
|
+
*/
|
|
18
|
+
export function QeetLogo(props) {
|
|
19
|
+
return renderLogo(data, props);
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qeetrix/icons",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Qeetrix Icons โ Lucide icons in round and sharp shapes with derived filled variants, plus theSVG brand logos, as tree-shakeable React components.",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|