@koobiq/icons 12.0.0 → 12.1.0

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +31 -14
  3. package/fonts/{kbq-icons-12.0.0.css → kbq-icons-12.1.0.css} +32 -4
  4. package/fonts/{kbq-icons-12.0.0.html → kbq-icons-12.1.0.html} +27 -3
  5. package/fonts/{kbq-icons-12.0.0.scss → kbq-icons-12.1.0.scss} +32 -4
  6. package/fonts/{kbq-icons-12.0.0.ttf → kbq-icons-12.1.0.ttf} +0 -0
  7. package/fonts/kbq-icons-12.1.0.woff +0 -0
  8. package/fonts/kbq-icons.css +30 -2
  9. package/fonts/kbq-icons.html +24 -0
  10. package/fonts/kbq-icons.scss +30 -2
  11. package/fonts/kbq-icons.ttf +0 -0
  12. package/fonts/kbq-icons.woff +0 -0
  13. package/info/kbq-icons-info.json +1 -1
  14. package/package.json +1 -1
  15. package/svg/arrow-up-arrow-down-dot_16.svg +1 -1
  16. package/svg/arrow-up-arrow-down-dot_24.svg +1 -1
  17. package/svg/ban-dot_16.svg +1 -1
  18. package/svg/ban-dot_24.svg +1 -1
  19. package/svg/behance_24.svg +1 -1
  20. package/svg/circle-arrow-right-dot-o_16.svg +1 -1
  21. package/svg/circle-arrow-right-dot-o_24.svg +1 -1
  22. package/svg/circle-dot-o_16.svg +1 -1
  23. package/svg/circle-dot-o_24.svg +1 -1
  24. package/svg/circle-dot_16.svg +1 -1
  25. package/svg/circle-dot_24.svg +1 -1
  26. package/svg/envelope-dot_16.svg +1 -1
  27. package/svg/envelope-dot_24.svg +1 -1
  28. package/svg/filter-dot_16.svg +1 -1
  29. package/svg/filter-dot_24.svg +1 -1
  30. package/svg/floating-window_16.svg +1 -0
  31. package/svg/floating-window_24.svg +1 -0
  32. package/svg/flowchart-dot_16.svg +1 -1
  33. package/svg/flowchart-dot_24.svg +1 -1
  34. package/svg/folder-dot_16.svg +1 -1
  35. package/svg/folder-dot_24.svg +1 -1
  36. package/svg/folder-open-dot_16.svg +1 -1
  37. package/svg/folder-open-dot_24.svg +1 -1
  38. package/svg/globe-dot_16.svg +1 -1
  39. package/svg/globe-dot_24.svg +1 -1
  40. package/svg/grid-group-dot_16.svg +1 -1
  41. package/svg/grid-group-dot_24.svg +1 -1
  42. package/svg/habr_16.svg +1 -1
  43. package/svg/link-dot_16.svg +1 -1
  44. package/svg/link-dot_24.svg +1 -1
  45. package/svg/message-dot_16.svg +1 -1
  46. package/svg/message-dot_24.svg +1 -1
  47. package/svg/nginx_16.svg +1 -0
  48. package/svg/nginx_24.svg +1 -0
  49. package/svg/octagon-minus_24.svg +1 -1
  50. package/svg/scale_24.svg +1 -1
  51. package/svg/shield-user_16.svg +1 -1
  52. package/svg/shield-user_24.svg +1 -1
  53. package/svg/sliders-dot_16.svg +1 -1
  54. package/svg/sliders-dot_24.svg +1 -1
  55. package/svg/square-dot_16.svg +1 -1
  56. package/svg/square-dot_24.svg +1 -1
  57. package/svg/sun_16.svg +1 -1
  58. package/symbol/sprite.scss +20 -0
  59. package/symbol/sprite.symbol.html +80 -40
  60. package/symbol/svg/sprite.symbol.svg +1 -1
  61. package/fonts/kbq-icons-12.0.0.woff +0 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## 12.1.0 (2026-06-24)
2
+
3
+ ### 🚀 Features
4
+
5
+ - add floating-window icons (16, 24) (#DS-5187) ([#123](https://github.com/koobiq/icons/pull/123))
6
+ - add retry tags for arrow-rotate-right 16 & 24 (#DS-4878) ([#130](https://github.com/koobiq/icons/pull/130))
7
+ - add nginx_16 and nginx_24 icons (#DS-5218) ([#131](https://github.com/koobiq/icons/pull/131))
8
+
9
+ ### 🩹 Fixes
10
+
11
+ - split duotone icon zones by layer name instead of color ([#125](https://github.com/koobiq/icons/pull/125))
12
+
13
+ ### ❤️ Thank You
14
+
15
+ - Roman Turov @rmnturov
16
+
17
+ ## 12.0.1 (2026-06-18)
18
+
19
+ ### 🩹 Fixes
20
+
21
+ - added @layer (#DS-5207) ([#127](https://github.com/koobiq/icons/pull/127))
22
+
23
+ ### ❤️ Thank You
24
+
25
+ - lskramarov @lskramarov
26
+
1
27
  # 12.0.0 (2026-06-05)
2
28
 
3
29
  ### 🚀 Features
package/README.md CHANGED
@@ -60,36 +60,53 @@ Use semver for version naming. So increment major (first) version number if any
60
60
 
61
61
  ## Overview
62
62
 
63
- This guide explains how to structure SVGs for dynamic styling via CSS, allowing different parts to be colored separately using `fill` and `color`.
63
+ This guide explains how duotone icons are structured for dynamic styling via CSS,
64
+ allowing different parts (zones) to be colored separately using `fill` and `color`.
64
65
 
65
66
  ## How It Works
66
67
 
67
- - **Primary Zone**: No `fill` attribute.
68
- - **Secondary Zone(s)**: `fill="currentColor"`.
68
+ In the final SVG output:
69
+
70
+ - **Primary Zone**: No `fill` attribute — inherits the CSS `fill` property.
71
+ - **Secondary Zone(s)**: `fill="var(--icon-accent-color, currentColor)"` — driven by the `--icon-accent-color` CSS custom property, falling back to `currentColor`.
69
72
 
70
73
  CSS styling:
71
74
 
72
75
  ```css
73
76
  svg {
74
77
  fill: #8f99aa; /* Primary zone */
75
- color: #00ff00; /* Secondary zone(s) */
78
+ --icon-accent-color: #00ff00; /* Secondary zone(s) */
76
79
  }
77
80
  ```
78
81
 
79
- For details, see [CSS-Tricks](https://css-tricks.com/lodge/svg/21-get-two-colors-use/).
80
-
81
82
  ## Figma Conventions
82
83
 
83
- To facilitate automated processing during the build phase, we follow these conventions in Figma:
84
+ Zones are detected by **Figma layer name**, not by color. This is the contract
85
+ between the Figma design file and the build system:
86
+
87
+ - **Primary Zone**: layer named `shape`.
88
+ - **Secondary Zone(s)**: layer named `shape-2`.
84
89
 
85
- - **Primary Zone**: `#21222C` (black).
86
- - **Secondary Zone(s)**: `#E21D03` (red).
90
+ Figma is queried with `svg_include_id: true`, so every layer is exported with an
91
+ `id` matching its layer name. The build process keys off that `id` to decide which
92
+ zone a node belongs to.
87
93
 
88
- These colors serve as a contract between the Figma design file and the build system.
89
- The build process recognizes these colors and applies the appropriate transformations to ensure the correct fill behavior in the final SVG output.
94
+ > **Note**: previously zones were matched by hardcoded hex colors (`#21222C` /
95
+ > `#E21D03`). That binding was dropped because it silently broke every duotone icon
96
+ > whenever the Figma palette changed — keying off the layer name keeps the duotone
97
+ > mechanism working regardless of the colors used in Figma.
98
+
99
+ Because color is no longer part of the contract, you don't need specific zone
100
+ colors in Figma. Any baked color, inline `style`, and `fill-opacity` are stripped
101
+ on export — transparency and color are controlled via CSS in the design system, not
102
+ baked into the SVG.
90
103
 
91
104
  ## Implementation
92
105
 
93
- - Remove `fill` from the primary zone.
94
- - Set secondary zones to `fill="currentColor"`.
95
- - Use CSS for styling.
106
+ The zone splitting happens during `figma:sync` via the `split-zones` SVGO plugin in
107
+ [`.figmaexportrc.mjs`](../../.figmaexportrc.mjs):
108
+
109
+ - Remove `fill` from the root `<svg>` and from primary-zone nodes.
110
+ - Set secondary-zone (`shape-2`) nodes to `fill="var(--icon-accent-color, currentColor)"`.
111
+ - Strip baked `style`, `color`, `class`, and `fill-opacity` so color/opacity stay
112
+ CSS-driven.
@@ -1,15 +1,17 @@
1
1
 
2
2
  @font-face {
3
- font-family: "Koobiq Icons 12.0.0";
3
+ font-family: "Koobiq Icons 12.1.0";
4
4
  font-weight: normal;
5
5
  font-style: normal;
6
- src: url("./kbq-icons-12.0.0.ttf?5710446bcbeddde4dbd4d2650b4a466c") format("truetype"),
7
- url("./kbq-icons-12.0.0.woff?5710446bcbeddde4dbd4d2650b4a466c") format("woff");
6
+ src: url("./kbq-icons-12.1.0.ttf?bf874e4863d6338a852f3f4f5d2ce86e") format("truetype"),
7
+ url("./kbq-icons-12.1.0.woff?bf874e4863d6338a852f3f4f5d2ce86e") format("woff");
8
8
  }
9
9
 
10
+ @layer kbq-icons {
11
+
10
12
 
11
13
  .kbq {
12
- font-family: "Koobiq Icons 12.0.0";
14
+ font-family: "Koobiq Icons 12.1.0";
13
15
  display:inline-block;
14
16
  vertical-align:middle;
15
17
  line-height:1;
@@ -7018,3 +7020,29 @@ transform:rotate(0.001deg);
7018
7020
  .kbq-list-circle-xmark_24:before {
7019
7021
  content: "\f9c8";
7020
7022
  }
7023
+ .kbq-floating-window_16 {
7024
+ font-size: 16px;
7025
+ }
7026
+ .kbq-floating-window_16:before {
7027
+ content: "\f9c9";
7028
+ }
7029
+ .kbq-floating-window_24 {
7030
+ font-size: 24px;
7031
+ }
7032
+ .kbq-floating-window_24:before {
7033
+ content: "\f9ca";
7034
+ }
7035
+ .kbq-nginx_16 {
7036
+ font-size: 16px;
7037
+ }
7038
+ .kbq-nginx_16:before {
7039
+ content: "\f9cb";
7040
+ }
7041
+ .kbq-nginx_24 {
7042
+ font-size: 24px;
7043
+ }
7044
+ .kbq-nginx_24:before {
7045
+ content: "\f9cc";
7046
+ }
7047
+
7048
+ }
@@ -2,7 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <title>kbq-icons-12.0.0</title>
5
+ <title>kbq-icons-12.1.0</title>
6
6
  <style>
7
7
  html {
8
8
  box-sizing: border-box;
@@ -89,10 +89,10 @@
89
89
  }
90
90
  </style>
91
91
 
92
- <link rel="stylesheet" type="text/css" href="kbq-icons-12.0.0.css" />
92
+ <link rel="stylesheet" type="text/css" href="kbq-icons-12.1.0.css" />
93
93
  </head>
94
94
  <body>
95
- <h1>kbq-icons-12.0.0</h1>
95
+ <h1>kbq-icons-12.1.0</h1>
96
96
 
97
97
  <div id="icons">
98
98
  <div class="icon" data-name="xmark_32" title="xmark_32">
@@ -1967,6 +1967,18 @@
1967
1967
  <span class='label'>node-tree_16</span>
1968
1968
  </span>
1969
1969
  </div>
1970
+ <div class="icon" data-name="nginx_24" title="nginx_24">
1971
+ <span class="inner">
1972
+ <i class="kbq kbq-nginx_24" aria-hidden="true"></i>
1973
+ <span class='label'>nginx_24</span>
1974
+ </span>
1975
+ </div>
1976
+ <div class="icon" data-name="nginx_16" title="nginx_16">
1977
+ <span class="inner">
1978
+ <i class="kbq kbq-nginx_16" aria-hidden="true"></i>
1979
+ <span class='label'>nginx_16</span>
1980
+ </span>
1981
+ </div>
1970
1982
  <div class="icon" data-name="network-device_24" title="network-device_24">
1971
1983
  <span class="inner">
1972
1984
  <i class="kbq kbq-network-device_24" aria-hidden="true"></i>
@@ -3203,6 +3215,18 @@
3203
3215
  <span class='label'>floppy-disk_16</span>
3204
3216
  </span>
3205
3217
  </div>
3218
+ <div class="icon" data-name="floating-window_24" title="floating-window_24">
3219
+ <span class="inner">
3220
+ <i class="kbq kbq-floating-window_24" aria-hidden="true"></i>
3221
+ <span class='label'>floating-window_24</span>
3222
+ </span>
3223
+ </div>
3224
+ <div class="icon" data-name="floating-window_16" title="floating-window_16">
3225
+ <span class="inner">
3226
+ <i class="kbq kbq-floating-window_16" aria-hidden="true"></i>
3227
+ <span class='label'>floating-window_16</span>
3228
+ </span>
3229
+ </div>
3206
3230
  <div class="icon" data-name="fire-flame_24" title="fire-flame_24">
3207
3231
  <span class="inner">
3208
3232
  <i class="kbq kbq-fire-flame_24" aria-hidden="true"></i>
@@ -1,15 +1,17 @@
1
1
 
2
2
  @font-face {
3
- font-family: "Koobiq Icons 12.0.0";
3
+ font-family: "Koobiq Icons 12.1.0";
4
4
  font-weight: normal;
5
5
  font-style: normal;
6
- src: url("./kbq-icons-12.0.0.ttf?5710446bcbeddde4dbd4d2650b4a466c") format("truetype"),
7
- url("./kbq-icons-12.0.0.woff?5710446bcbeddde4dbd4d2650b4a466c") format("woff");
6
+ src: url("./kbq-icons-12.1.0.ttf?bf874e4863d6338a852f3f4f5d2ce86e") format("truetype"),
7
+ url("./kbq-icons-12.1.0.woff?bf874e4863d6338a852f3f4f5d2ce86e") format("woff");
8
8
  }
9
9
 
10
+ @layer kbq-icons {
11
+
10
12
 
11
13
  .kbq {
12
- font-family: "Koobiq Icons 12.0.0";
14
+ font-family: "Koobiq Icons 12.1.0";
13
15
  display:inline-block;
14
16
  vertical-align:middle;
15
17
  line-height:1;
@@ -7018,3 +7020,29 @@ transform:rotate(0.001deg);
7018
7020
  content: "\f9c8";
7019
7021
  }
7020
7022
  }
7023
+ .kbq-floating-window_16 {
7024
+ font-size: 16px;
7025
+ &:before {
7026
+ content: "\f9c9";
7027
+ }
7028
+ }
7029
+ .kbq-floating-window_24 {
7030
+ font-size: 24px;
7031
+ &:before {
7032
+ content: "\f9ca";
7033
+ }
7034
+ }
7035
+ .kbq-nginx_16 {
7036
+ font-size: 16px;
7037
+ &:before {
7038
+ content: "\f9cb";
7039
+ }
7040
+ }
7041
+ .kbq-nginx_24 {
7042
+ font-size: 24px;
7043
+ &:before {
7044
+ content: "\f9cc";
7045
+ }
7046
+ }
7047
+
7048
+ }
Binary file
@@ -3,10 +3,12 @@
3
3
  font-family: "Koobiq Icons";
4
4
  font-weight: normal;
5
5
  font-style: normal;
6
- src: url("./kbq-icons.ttf?922382ffa066f48801ea776f0a296327") format("truetype"),
7
- url("./kbq-icons.woff?922382ffa066f48801ea776f0a296327") format("woff");
6
+ src: url("./kbq-icons.ttf?5e5b9a2951f79bc105afb8432a4d45f2") format("truetype"),
7
+ url("./kbq-icons.woff?5e5b9a2951f79bc105afb8432a4d45f2") format("woff");
8
8
  }
9
9
 
10
+ @layer kbq-icons {
11
+
10
12
 
11
13
  .kbq {
12
14
  font-family: "Koobiq Icons";
@@ -7018,3 +7020,29 @@ transform:rotate(0.001deg);
7018
7020
  .kbq-list-circle-xmark_24:before {
7019
7021
  content: "\f9c8";
7020
7022
  }
7023
+ .kbq-floating-window_16 {
7024
+ font-size: 16px;
7025
+ }
7026
+ .kbq-floating-window_16:before {
7027
+ content: "\f9c9";
7028
+ }
7029
+ .kbq-floating-window_24 {
7030
+ font-size: 24px;
7031
+ }
7032
+ .kbq-floating-window_24:before {
7033
+ content: "\f9ca";
7034
+ }
7035
+ .kbq-nginx_16 {
7036
+ font-size: 16px;
7037
+ }
7038
+ .kbq-nginx_16:before {
7039
+ content: "\f9cb";
7040
+ }
7041
+ .kbq-nginx_24 {
7042
+ font-size: 24px;
7043
+ }
7044
+ .kbq-nginx_24:before {
7045
+ content: "\f9cc";
7046
+ }
7047
+
7048
+ }
@@ -1967,6 +1967,18 @@
1967
1967
  <span class='label'>node-tree_16</span>
1968
1968
  </span>
1969
1969
  </div>
1970
+ <div class="icon" data-name="nginx_24" title="nginx_24">
1971
+ <span class="inner">
1972
+ <i class="kbq kbq-nginx_24" aria-hidden="true"></i>
1973
+ <span class='label'>nginx_24</span>
1974
+ </span>
1975
+ </div>
1976
+ <div class="icon" data-name="nginx_16" title="nginx_16">
1977
+ <span class="inner">
1978
+ <i class="kbq kbq-nginx_16" aria-hidden="true"></i>
1979
+ <span class='label'>nginx_16</span>
1980
+ </span>
1981
+ </div>
1970
1982
  <div class="icon" data-name="network-device_24" title="network-device_24">
1971
1983
  <span class="inner">
1972
1984
  <i class="kbq kbq-network-device_24" aria-hidden="true"></i>
@@ -3203,6 +3215,18 @@
3203
3215
  <span class='label'>floppy-disk_16</span>
3204
3216
  </span>
3205
3217
  </div>
3218
+ <div class="icon" data-name="floating-window_24" title="floating-window_24">
3219
+ <span class="inner">
3220
+ <i class="kbq kbq-floating-window_24" aria-hidden="true"></i>
3221
+ <span class='label'>floating-window_24</span>
3222
+ </span>
3223
+ </div>
3224
+ <div class="icon" data-name="floating-window_16" title="floating-window_16">
3225
+ <span class="inner">
3226
+ <i class="kbq kbq-floating-window_16" aria-hidden="true"></i>
3227
+ <span class='label'>floating-window_16</span>
3228
+ </span>
3229
+ </div>
3206
3230
  <div class="icon" data-name="fire-flame_24" title="fire-flame_24">
3207
3231
  <span class="inner">
3208
3232
  <i class="kbq kbq-fire-flame_24" aria-hidden="true"></i>
@@ -3,10 +3,12 @@
3
3
  font-family: "Koobiq Icons";
4
4
  font-weight: normal;
5
5
  font-style: normal;
6
- src: url("./kbq-icons.ttf?922382ffa066f48801ea776f0a296327") format("truetype"),
7
- url("./kbq-icons.woff?922382ffa066f48801ea776f0a296327") format("woff");
6
+ src: url("./kbq-icons.ttf?5e5b9a2951f79bc105afb8432a4d45f2") format("truetype"),
7
+ url("./kbq-icons.woff?5e5b9a2951f79bc105afb8432a4d45f2") format("woff");
8
8
  }
9
9
 
10
+ @layer kbq-icons {
11
+
10
12
 
11
13
  .kbq {
12
14
  font-family: "Koobiq Icons";
@@ -7018,3 +7020,29 @@ transform:rotate(0.001deg);
7018
7020
  content: "\f9c8";
7019
7021
  }
7020
7022
  }
7023
+ .kbq-floating-window_16 {
7024
+ font-size: 16px;
7025
+ &:before {
7026
+ content: "\f9c9";
7027
+ }
7028
+ }
7029
+ .kbq-floating-window_24 {
7030
+ font-size: 24px;
7031
+ &:before {
7032
+ content: "\f9ca";
7033
+ }
7034
+ }
7035
+ .kbq-nginx_16 {
7036
+ font-size: 16px;
7037
+ &:before {
7038
+ content: "\f9cb";
7039
+ }
7040
+ }
7041
+ .kbq-nginx_24 {
7042
+ font-size: 24px;
7043
+ &:before {
7044
+ content: "\f9cc";
7045
+ }
7046
+ }
7047
+
7048
+ }
Binary file
Binary file