@jannchie/icons 0.3.0 → 0.5.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 (197) hide show
  1. package/dist/all.js +84 -0
  2. package/dist/icons/arrows-up-down-half.js +8 -0
  3. package/dist/icons/c.js +8 -0
  4. package/dist/icons/continent.js +8 -0
  5. package/dist/icons/cpp.js +8 -0
  6. package/dist/icons/csharp.js +8 -0
  7. package/dist/icons/diorama.js +8 -0
  8. package/dist/icons/droplet-off.js +8 -0
  9. package/dist/icons/github.js +8 -0
  10. package/dist/icons/golang.js +8 -0
  11. package/dist/icons/haskell.js +8 -0
  12. package/dist/icons/hologram.js +8 -0
  13. package/dist/icons/java.js +8 -0
  14. package/dist/icons/javascript.js +8 -0
  15. package/dist/icons/kotlin.js +8 -0
  16. package/dist/icons/lua.js +8 -0
  17. package/dist/icons/map-pin-ban.js +8 -0
  18. package/dist/icons/map-pin-bookmark.js +8 -0
  19. package/dist/icons/map-pin-check.js +8 -0
  20. package/dist/icons/map-pin-clock.js +8 -0
  21. package/dist/icons/map-pin-cloud.js +8 -0
  22. package/dist/icons/map-pin-heart.js +8 -0
  23. package/dist/icons/map-pin-image.js +8 -0
  24. package/dist/icons/map-pin-lock.js +8 -0
  25. package/dist/icons/map-pin-minus.js +8 -0
  26. package/dist/icons/map-pin-music.js +8 -0
  27. package/dist/icons/map-pin-plus.js +8 -0
  28. package/dist/icons/map-pin-search.js +8 -0
  29. package/dist/icons/map-pin-sparkle.js +8 -0
  30. package/dist/icons/map-pin-star.js +8 -0
  31. package/dist/icons/map-pin-video.js +8 -0
  32. package/dist/icons/map-pin-x.js +8 -0
  33. package/dist/icons/php.js +8 -0
  34. package/dist/icons/python.js +8 -0
  35. package/dist/icons/region.js +8 -0
  36. package/dist/icons/ruby.js +8 -0
  37. package/dist/icons/rust.js +8 -0
  38. package/dist/icons/swift.js +8 -0
  39. package/dist/icons/terrain-lower.js +8 -0
  40. package/dist/icons/terrain-raise.js +8 -0
  41. package/dist/icons/terrain-smooth.js +8 -0
  42. package/dist/icons/turntable.js +8 -0
  43. package/dist/icons/typescript.js +8 -0
  44. package/dist/index.d.ts +84 -0
  45. package/dist/index.js +43 -1
  46. package/dist/src/battery.js +22 -1
  47. package/dist/src/cc.js +2 -1
  48. package/dist/src/controller.js +5 -2
  49. package/dist/src/icons/api.js +2 -2
  50. package/dist/src/icons/arrows-up-down-half.js +13 -0
  51. package/dist/src/icons/battery-full.js +1 -1
  52. package/dist/src/icons/battery-low.js +1 -1
  53. package/dist/src/icons/battery-medium.js +1 -1
  54. package/dist/src/icons/bee.js +3 -2
  55. package/dist/src/icons/bike.js +5 -13
  56. package/dist/src/icons/billiards.js +2 -2
  57. package/dist/src/icons/bingo.js +2 -2
  58. package/dist/src/icons/c.js +12 -0
  59. package/dist/src/icons/card-plus-four.js +2 -2
  60. package/dist/src/icons/card-plus-two.js +2 -2
  61. package/dist/src/icons/cat.js +4 -3
  62. package/dist/src/icons/continent.js +5 -0
  63. package/dist/src/icons/cpp.js +21 -0
  64. package/dist/src/icons/csharp.js +17 -0
  65. package/dist/src/icons/diorama.js +25 -0
  66. package/dist/src/icons/droplet-off.js +6 -0
  67. package/dist/src/icons/element.js +3 -3
  68. package/dist/src/icons/fog.js +2 -2
  69. package/dist/src/icons/github.js +4 -0
  70. package/dist/src/icons/golang.js +10 -0
  71. package/dist/src/icons/haskell.js +10 -0
  72. package/dist/src/icons/hologram.js +32 -0
  73. package/dist/src/icons/html.js +6 -2
  74. package/dist/src/icons/java.js +10 -0
  75. package/dist/src/icons/javascript.js +14 -0
  76. package/dist/src/icons/json.js +2 -2
  77. package/dist/src/icons/kotlin.js +15 -0
  78. package/dist/src/icons/list-arrow-down.js +2 -2
  79. package/dist/src/icons/list-arrow-left.js +2 -2
  80. package/dist/src/icons/list-arrow-right.js +2 -2
  81. package/dist/src/icons/list-arrow-up.js +2 -2
  82. package/dist/src/icons/list-assets.js +2 -2
  83. package/dist/src/icons/list-ban.js +2 -2
  84. package/dist/src/icons/list-bookmark.js +2 -2
  85. package/dist/src/icons/list-check.js +2 -2
  86. package/dist/src/icons/list-circle.js +2 -2
  87. package/dist/src/icons/list-clock.js +2 -2
  88. package/dist/src/icons/list-cloud.js +2 -2
  89. package/dist/src/icons/list-code.js +2 -2
  90. package/dist/src/icons/list-gauge.js +2 -2
  91. package/dist/src/icons/list-heart.js +2 -2
  92. package/dist/src/icons/list-image.js +2 -2
  93. package/dist/src/icons/list-lock.js +2 -2
  94. package/dist/src/icons/list-minus.js +2 -2
  95. package/dist/src/icons/list-music-plus.js +2 -2
  96. package/dist/src/icons/list-music.js +2 -2
  97. package/dist/src/icons/list-ordered.js +4 -3
  98. package/dist/src/icons/list-plug.js +2 -2
  99. package/dist/src/icons/list-plus.js +2 -2
  100. package/dist/src/icons/list-puzzle.js +2 -2
  101. package/dist/src/icons/list-search.js +2 -2
  102. package/dist/src/icons/list-shield.js +2 -2
  103. package/dist/src/icons/list-sparkle.js +2 -2
  104. package/dist/src/icons/list-star.js +2 -2
  105. package/dist/src/icons/list-video.js +2 -2
  106. package/dist/src/icons/list-x.js +2 -2
  107. package/dist/src/icons/lua.js +9 -0
  108. package/dist/src/icons/map-pin-ban.js +7 -0
  109. package/dist/src/icons/map-pin-bookmark.js +7 -0
  110. package/dist/src/icons/map-pin-check.js +7 -0
  111. package/dist/src/icons/map-pin-clock.js +7 -0
  112. package/dist/src/icons/map-pin-cloud.js +7 -0
  113. package/dist/src/icons/map-pin-heart.js +7 -0
  114. package/dist/src/icons/map-pin-image.js +7 -0
  115. package/dist/src/icons/map-pin-lock.js +7 -0
  116. package/dist/src/icons/map-pin-minus.js +7 -0
  117. package/dist/src/icons/map-pin-music.js +7 -0
  118. package/dist/src/icons/map-pin-plus.js +7 -0
  119. package/dist/src/icons/map-pin-search.js +7 -0
  120. package/dist/src/icons/map-pin-sparkle.js +7 -0
  121. package/dist/src/icons/map-pin-star.js +7 -0
  122. package/dist/src/icons/map-pin-video.js +7 -0
  123. package/dist/src/icons/map-pin-x.js +7 -0
  124. package/dist/src/icons/medal-1.js +2 -2
  125. package/dist/src/icons/medal-2.js +2 -2
  126. package/dist/src/icons/medal-3.js +2 -2
  127. package/dist/src/icons/microscope.js +10 -10
  128. package/dist/src/icons/mushroom.js +5 -5
  129. package/dist/src/icons/php.js +8 -0
  130. package/dist/src/icons/pig.js +4 -3
  131. package/dist/src/icons/piggy-bank.js +15 -14
  132. package/dist/src/icons/python.js +25 -0
  133. package/dist/src/icons/region.js +13 -0
  134. package/dist/src/icons/ruby.js +16 -0
  135. package/dist/src/icons/rugby.js +6 -6
  136. package/dist/src/icons/rust.js +16 -0
  137. package/dist/src/icons/scooter.js +3 -8
  138. package/dist/src/icons/sudoku.js +2 -2
  139. package/dist/src/icons/swift.js +4 -0
  140. package/dist/src/icons/tag-0.js +2 -2
  141. package/dist/src/icons/tag-1.js +2 -2
  142. package/dist/src/icons/tag-2.js +2 -2
  143. package/dist/src/icons/tag-3.js +2 -2
  144. package/dist/src/icons/tag-4.js +2 -2
  145. package/dist/src/icons/tag-5.js +2 -2
  146. package/dist/src/icons/tag-6.js +2 -2
  147. package/dist/src/icons/tag-7.js +2 -2
  148. package/dist/src/icons/tag-8.js +2 -2
  149. package/dist/src/icons/tag-9.js +2 -2
  150. package/dist/src/icons/tag-a.js +2 -2
  151. package/dist/src/icons/tag-b.js +2 -2
  152. package/dist/src/icons/tag-c.js +2 -2
  153. package/dist/src/icons/tag-d.js +2 -2
  154. package/dist/src/icons/tag-e.js +2 -2
  155. package/dist/src/icons/tag-f.js +2 -2
  156. package/dist/src/icons/tag-g.js +2 -2
  157. package/dist/src/icons/tag-h.js +2 -2
  158. package/dist/src/icons/tag-i.js +2 -2
  159. package/dist/src/icons/tag-j.js +2 -2
  160. package/dist/src/icons/tag-k.js +2 -2
  161. package/dist/src/icons/tag-l.js +2 -2
  162. package/dist/src/icons/tag-m.js +2 -2
  163. package/dist/src/icons/tag-n.js +2 -2
  164. package/dist/src/icons/tag-o.js +2 -2
  165. package/dist/src/icons/tag-p.js +2 -2
  166. package/dist/src/icons/tag-q.js +2 -2
  167. package/dist/src/icons/tag-r.js +2 -2
  168. package/dist/src/icons/tag-s.js +2 -2
  169. package/dist/src/icons/tag-t.js +2 -2
  170. package/dist/src/icons/tag-u.js +2 -2
  171. package/dist/src/icons/tag-v.js +2 -2
  172. package/dist/src/icons/tag-w.js +2 -2
  173. package/dist/src/icons/tag-x.js +2 -2
  174. package/dist/src/icons/tag-y.js +2 -2
  175. package/dist/src/icons/tag-z.js +2 -2
  176. package/dist/src/icons/taxi.js +1 -1
  177. package/dist/src/icons/terrain-lower.js +10 -0
  178. package/dist/src/icons/terrain-raise.js +10 -0
  179. package/dist/src/icons/terrain-smooth.js +19 -0
  180. package/dist/src/icons/traffic-cone.js +9 -8
  181. package/dist/src/icons/turntable.js +21 -0
  182. package/dist/src/icons/typescript.js +14 -0
  183. package/dist/src/laundry.js +3 -3
  184. package/dist/src/letters.js +35 -16
  185. package/dist/src/license.js +3 -3
  186. package/dist/src/list.js +7 -2
  187. package/dist/src/loading.js +3 -3
  188. package/dist/src/pin.js +35 -0
  189. package/dist/src/quality.js +3 -3
  190. package/dist/src/rate.js +3 -3
  191. package/dist/src/rating.js +15 -12
  192. package/dist/src/resin.js +3 -3
  193. package/dist/src/scene.js +5 -1
  194. package/dist/src/sensor.js +7 -6
  195. package/dist/src/symbols.js +35 -22
  196. package/dist/src/unit.js +2 -2
  197. package/package.json +1 -1
@@ -43,13 +43,13 @@ var GLYPHS = {
43
43
  "-": "M.5 3H3"
44
44
  };
45
45
  var LABEL_GLYPHS = {
46
- A: "M0 7V1L1 0H2.5L3.5 1V7M0 4H3.5",
46
+ A: "M0 7V1L1 0H2.5L3.5 1V7M0 3.5H3.5",
47
47
  B: "M0 0H2.5L3.5 1V2.5L2.5 3.5L3.5 4.5V6L2.5 7H0ZM0 3.5H2.5",
48
48
  C: "M3.5 0H1L0 1V6L1 7H3.5",
49
49
  D: "M0 0H2L3.5 1.5V5.5L2 7H0Z",
50
50
  E: "M3.5 0H0V7H3.5M0 3.5H2.75",
51
51
  F: "M3.5 0H0V7M0 3.5H2.75",
52
- G: "M3.5 0H1L0 1V6L1 7H3.5V4H2",
52
+ G: "M3.5 0H1L0 1V6L1 7H3.5V3.5H2",
53
53
  H: "M0 0V7M3.5 0V7M0 3.5H3.5",
54
54
  I: "M0 0H3.5M1.75 0V7M0 7H3.5",
55
55
  J: "M3.5 0V6L2.5 7H1L0 6",
@@ -58,9 +58,9 @@ var LABEL_GLYPHS = {
58
58
  M: "M0 7V0L1.75 2.5L3.5 0V7",
59
59
  N: "M0 7V0L3.5 7V0",
60
60
  O: "M1 0H2.5L3.5 1V6L2.5 7H1L0 6V1Z",
61
- P: "M0 7V0H2.5L3.5 1V3L2.5 4H0",
61
+ P: "M0 7V0H2.5L3.5 1V2.5L2.5 3.5H0",
62
62
  Q: "M1 0H2.5L3.5 1V6L2.5 7H1L0 6V1ZM2.25 5.25L3.5 7",
63
- R: "M0 7V0H2.5L3.5 1V3L2.5 4H0M2 4L3.5 7",
63
+ R: "M0 7V0H2.5L3.5 1V2.5L2.5 3.5H0M2.5 3.5L3.5 4.5V7",
64
64
  S: "M3.5 0H1L0 1V2.5L1 3.5H2.5L3.5 4.5V6L2.5 7H0",
65
65
  T: "M0 0H3.5M1.75 0V7",
66
66
  U: "M0 0V6L1 7H2.5L3.5 6V0",
@@ -70,8 +70,8 @@ var LABEL_GLYPHS = {
70
70
  Y: "M0 0L1.75 3.5L3.5 0M1.75 3.5V7",
71
71
  Z: "M0 0H3.5L0 7H3.5",
72
72
  0: "M1 0H2.5L3.5 1V6L2.5 7H1L0 6V1Z",
73
- 1: "M.5 1L1.75 0V7M.5 7H3",
74
- 2: "M0 1L1 0H2.5L3.5 1V3L0 7H3.5",
73
+ 1: "M1 1L2.25 0V7",
74
+ 2: "M0 1L1 0H2.5L3.5 1V2.5L2.5 3.5H1L0 4.5V7H3.5",
75
75
  3: "M0 0H2.5L3.5 1V2.5L2.5 3.5H1M2.5 3.5L3.5 4.5V6L2.5 7H0",
76
76
  4: "M2.5 7V0L0 4.5H3.5",
77
77
  5: "M3.5 0H0V3.5H2.5L3.5 4.5V6L2.5 7H0",
@@ -137,8 +137,6 @@ function snap(paths) {
137
137
  });
138
138
  return Array.isArray(paths) ? res : res[0];
139
139
  }
140
- var crispGlyph = (...args) => snap(glyph(...args));
141
- var glyph = (c, x, y, scale = 1, sy = scale) => place(GLYPHS[c], x, y, scale, sy);
142
140
  var NARROW = {
143
141
  "1": {
144
142
  advance: 2,
@@ -149,17 +147,38 @@ var NARROW = {
149
147
  shift: .5
150
148
  }
151
149
  };
152
- var advance = (c) => NARROW[c]?.advance ?? W;
153
- var shift = (c) => NARROW[c]?.shift ?? 0;
154
- var textWidth = (str, sx = 1, gap = 1.5) => [...str].reduce((w, c, i) => w + advance(c) * sx + (i ? gap : 0), 0);
155
- function lineAt(str, [x, y], sx = 1, gap = 1.5, sy = sx) {
150
+ var ROUND = {
151
+ glyphs: GLYPHS,
152
+ sy: 1,
153
+ narrow: NARROW
154
+ };
155
+ var LABEL = {
156
+ glyphs: LABEL_GLYPHS,
157
+ sy: 6 / 7,
158
+ narrow: {
159
+ "1": {
160
+ advance: 2,
161
+ shift: .75
162
+ },
163
+ "-": NARROW["-"]
164
+ }
165
+ };
166
+ function glyph(c, x, y, scale = 1, sy = scale, font = ROUND) {
167
+ const d = font.glyphs[c];
168
+ return d ? place(d, x, y, scale, sy * font.sy) : place(GLYPHS[c], x, y, scale, sy);
169
+ }
170
+ var crispGlyph = (...args) => snap(glyph(...args));
171
+ var advance = (c, font = ROUND) => font.narrow[c]?.advance ?? W;
172
+ var shift = (c, font = ROUND) => font.narrow[c]?.shift ?? 0;
173
+ var textWidth = (str, sx = 1, gap = 1.5, font = ROUND) => [...str].reduce((w, c, i) => w + advance(c, font) * sx + (i ? gap : 0), 0);
174
+ function lineAt(str, [x, y], sx = 1, gap = 1.5, sy = sx, font = ROUND) {
156
175
  return [...str].flatMap((c) => {
157
- const d = c === " " ? [] : [glyph(c, x - (NARROW[c]?.shift ?? 0) * sx, y, sx, sy)];
158
- x += advance(c) * sx + gap;
176
+ const d = c === " " ? [] : [glyph(c, x - shift(c, font) * sx, y, sx, sy, font)];
177
+ x += advance(c, font) * sx + gap;
159
178
  return d;
160
179
  });
161
180
  }
162
- var line = (str, [cx, cy], sx = 1, gap = 1.5, sy = sx) => lineAt(str, [cx - textWidth(str, sx, gap) / 2, cy - 3 * sy], sx, gap, sy);
181
+ var line = (str, [cx, cy], sx = 1, gap = 1.5, sy = sx, font = ROUND) => lineAt(str, [cx - textWidth(str, sx, gap, font) / 2, cy - 3 * sy], sx, gap, sy, font);
163
182
  var GAP = 2.5;
164
183
  function label(text, { left, right, top }) {
165
184
  const chars = [...text.toUpperCase()];
@@ -176,4 +195,4 @@ function label(text, { left, right, top }) {
176
195
  })));
177
196
  }
178
197
  //#endregion
179
- export { advance, crispGlyph, glyph, label, line, lineAt, shift, snap, textWidth };
198
+ export { LABEL, ROUND, advance, crispGlyph, glyph, label, line, lineAt, shift, snap, textWidth };
@@ -1,5 +1,5 @@
1
1
  import { circle, rounded } from "./geometry.js";
2
- import { line, textWidth } from "./letters.js";
2
+ import { LABEL, line, snap, textWidth } from "./letters.js";
3
3
  //#region src/license.js
4
4
  var SEAL = [
5
5
  17,
@@ -23,11 +23,11 @@ var paper = (radius) => rounded([
23
23
  ], Math.min(radius, 2));
24
24
  var GAP = 2;
25
25
  function license(text, radius) {
26
- const sx = Math.min(.8, (13 - GAP * (text.length - 1)) / textWidth(text));
26
+ const sx = Math.min(.8, (13 - GAP * (text.length - 1)) / textWidth(text, 1, 1.5, LABEL));
27
27
  return [
28
28
  paper(radius),
29
29
  ...seal(),
30
- ...line(text, [12, 8], sx, GAP, 5 / 6).map((d) => ({
30
+ ...snap(line(text, [12, 8], sx, GAP, 5 / 6, LABEL)).map((d) => ({
31
31
  d,
32
32
  thin: true
33
33
  }))
package/dist/src/list.js CHANGED
@@ -15,11 +15,16 @@ var badgeRows = [
15
15
  14.5
16
16
  ];
17
17
  var from = 3.5;
18
- var center = [17.5, 17.5];
18
+ var BADGE_SCALE = 1.4;
19
19
  function listBadge(outline, k, stroke) {
20
- const shape = place(outline, center, k);
20
+ const size = k * BADGE_SCALE;
21
+ const extent = (outline.circle ?? Math.max(outline.box[2], outline.box[3])) * size;
22
+ const c = Math.min(16.5, Math.floor((21 - extent) * 2) / 2);
23
+ const center = [c, c];
24
+ const shape = place(outline, center, size);
21
25
  return {
22
26
  center,
27
+ size,
23
28
  lines: badgeRows.map((y) => {
24
29
  const b = blocked(shape, "x", y, stroke);
25
30
  return `M${from} ${y}H${b && b[0] < end ? Math.max(b[0], from) : end}`;
@@ -161,13 +161,13 @@ var LOADING = {
161
161
  },
162
162
  spinner: {
163
163
  duration: 900,
164
- frames: 24,
164
+ frames: 72,
165
165
  t0: 0,
166
166
  draw: ({ t }) => [arc(9, 360 * t - 90, 360 * t + 180)]
167
167
  },
168
168
  ring: {
169
169
  duration: 1600,
170
- frames: 32,
170
+ frames: 96,
171
171
  t0: .5,
172
172
  draw: ({ t }) => {
173
173
  const sweep = 30 + 220 * swell(t);
@@ -177,7 +177,7 @@ var LOADING = {
177
177
  },
178
178
  arcs: {
179
179
  duration: 1500,
180
- frames: 30,
180
+ frames: 90,
181
181
  t0: 0,
182
182
  draw: ({ t }) => [arc(9, 360 * t - 90, 360 * t + 30), arc(5, -360 * t + 90, -360 * t + 210)]
183
183
  },
@@ -0,0 +1,35 @@
1
+ import { place } from "./clearance.js";
2
+ import { circle } from "./geometry.js";
3
+ import { badge } from "./folder.js";
4
+ import { cornerScale, outlines } from "./symbols.js";
5
+ //#region src/pin.js
6
+ var plain = () => ["M10.5 21.5C10.5 21.5 4 15.5 4 9.5A6.5 6.5 0 0 1 17 9.5C17 15.5 10.5 21.5 10.5 21.5Z", circle(10.5, 9.5, 2.25)];
7
+ function withBadge(name, draw, tone, radius) {
8
+ const k = cornerScale[name];
9
+ const shape = place(outlines[name], badge, k);
10
+ const [x0, y0, x1, y1] = shape.circle ? [
11
+ shape.c[0] - shape.circle,
12
+ shape.c[1] - shape.circle,
13
+ shape.c[0] + shape.circle,
14
+ shape.c[1] + shape.circle
15
+ ] : shape.box;
16
+ const hole = {
17
+ d: `M${x0} ${y0}H${x1}V${y1}H${x0}Z`,
18
+ cut: true,
19
+ hidden: true,
20
+ occlude: true
21
+ };
22
+ return [
23
+ ...plain(),
24
+ hole,
25
+ ...tone(draw(badge, k, radius)).map((p) => typeof p === "string" ? {
26
+ d: p,
27
+ cut: true
28
+ } : {
29
+ ...p,
30
+ cut: true
31
+ })
32
+ ];
33
+ }
34
+ //#endregion
35
+ export { plain, withBadge };
@@ -1,5 +1,5 @@
1
1
  import { rounded } from "./geometry.js";
2
- import { line } from "./letters.js";
2
+ import { LABEL, line, snap } from "./letters.js";
3
3
  //#region src/quality.js
4
4
  var H = 1.2;
5
5
  var widthOf = (n) => n > 2 ? .85 : 1.2;
@@ -48,9 +48,9 @@ function quality(text, radius) {
48
48
  [21.5, 5.5],
49
49
  [21.5, 18.5],
50
50
  [2.5, 18.5]
51
- ], Math.min(radius, 2.5)), ...line(text, [12, 12], widthOf(text.length), GAP, H).map((d) => ({
51
+ ], Math.min(radius, 2.5)), ...snap(line(text, [12, 12], widthOf(text.length), GAP, H, LABEL)).map((d) => ({
52
52
  d,
53
- detail: true
53
+ thin: true
54
54
  }))];
55
55
  }
56
56
  //#endregion
package/dist/src/rate.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { dot } from "./scene.js";
2
- import { advance, glyph, shift, snap } from "./letters.js";
2
+ import { LABEL, advance, glyph, shift, snap } from "./letters.js";
3
3
  //#region src/rate.js
4
4
  var H = 7;
5
5
  var TOP = 12 - H / 2;
@@ -31,8 +31,8 @@ function rate(text) {
31
31
  out.push(dot(x + POINT / 2, 15.25));
32
32
  x += POINT;
33
33
  } else {
34
- out.push(glyph(c, x - shift(c) * sx, TOP, sx, sy));
35
- x += advance(c) * sx;
34
+ out.push(glyph(c, x - shift(c, LABEL) * sx, TOP, sx, sy, LABEL));
35
+ x += advance(c, LABEL) * sx;
36
36
  }
37
37
  x += gapAfter(i);
38
38
  });
@@ -1,5 +1,5 @@
1
1
  import { circle, rounded } from "./geometry.js";
2
- import { line, textWidth } from "./letters.js";
2
+ import { LABEL, line, snap, textWidth } from "./letters.js";
3
3
  import { tagShape } from "./marks.js";
4
4
  //#region src/rating.js
5
5
  var sq = (x0, y0, x1, y1) => [
@@ -21,9 +21,9 @@ var FRAMES = {
21
21
  tall: {
22
22
  shape: (r) => rounded(sq(3.5, 2.5, 20.5, 21.5), Math.min(r, 2.5)),
23
23
  box: [
24
- 7,
24
+ 6.5,
25
25
  5,
26
- 17,
26
+ 17.5,
27
27
  19
28
28
  ]
29
29
  },
@@ -265,26 +265,29 @@ var SYSTEMS = {
265
265
  }
266
266
  };
267
267
  var GAP = 2;
268
+ var ROW_GAP = 3;
268
269
  var PLUS = 3;
269
270
  var PLUS_GAP = 2;
270
271
  var MAX_SY = 1.2;
271
272
  var ASPECT = .95;
272
273
  function layout(rows, [x0, y0, x1, y1]) {
273
274
  const extra = (r) => r.plus ? 5 : 0;
274
- const sy = Math.min(MAX_SY, (y1 - y0 - GAP * (rows.length - 1)) / (6 * rows.length));
275
- const sx = Math.min(sy * ASPECT, ...rows.map((r) => (x1 - x0 - extra(r) - GAP * (r.chars.length - 1)) / textWidth(r.chars, 1, 0)));
275
+ const sy = Math.min(MAX_SY, (y1 - y0 - ROW_GAP * (rows.length - 1)) / (6 * rows.length));
276
+ const sx = Math.min(sy * ASPECT, ...rows.map((r) => (x1 - x0 - extra(r) - GAP * (r.chars.length - 1)) / textWidth(r.chars, 1, 0, LABEL)));
276
277
  const h = 6 * sy;
277
- const top = (y0 + y1) / 2 - (h * rows.length + GAP * (rows.length - 1)) / 2;
278
+ const top = (y0 + y1) / 2 - (h * rows.length + ROW_GAP * (rows.length - 1)) / 2;
278
279
  return rows.flatMap((r, i) => {
279
- const width = textWidth(r.chars, sx, GAP);
280
+ const width = textWidth(r.chars, sx, GAP, LABEL);
280
281
  const left = (x0 + x1) / 2 - (width + extra(r)) / 2;
281
- const y = top + i * (h + GAP);
282
- const out = line(r.chars, [left + width / 2, y + h / 2], sx, GAP, sy);
282
+ const y = top + i * (h + ROW_GAP);
283
+ const out = line(r.chars, [left + width / 2, y + h / 2], sx, GAP, sy, LABEL);
284
+ const row = snap(out);
283
285
  if (r.plus) {
284
- const [px, py] = [left + width + PLUS_GAP + PLUS / 2, y + PLUS / 2];
285
- out.push(`M${px - PLUS / 2} ${py}H${px + PLUS / 2}M${px} ${py - PLUS / 2}V${py + PLUS / 2}`);
286
+ const half = (v) => Math.round(v - .5) + .5;
287
+ const [px, py] = [half(left + width + PLUS_GAP + PLUS / 2), half(y + PLUS / 2)];
288
+ row.push(`M${px - PLUS / 2} ${py}H${px + PLUS / 2}M${px} ${py - PLUS / 2}V${py + PLUS / 2}`);
286
289
  }
287
- return out;
290
+ return row;
288
291
  });
289
292
  }
290
293
  function rating(system, text, radius) {
package/dist/src/resin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { crisp, rounded } from "./geometry.js";
2
- import { line } from "./letters.js";
2
+ import { LABEL, line, snap } from "./letters.js";
3
3
  //#region src/resin.js
4
4
  var V = [
5
5
  [12, 3],
@@ -44,9 +44,9 @@ var RESIN = Object.fromEntries([
44
44
  0,
45
45
  1,
46
46
  2
47
- ].flatMap((k) => arrow(k, radius)), ...line(n, [12, 14]).map((d) => ({
47
+ ].flatMap((k) => arrow(k, radius)), ...snap(line(n, [12, 14], 1, 1.5, 1, LABEL)).map((d) => ({
48
48
  d,
49
- detail: true
49
+ thin: true
50
50
  }))]
51
51
  }]));
52
52
  //#endregion
package/dist/src/scene.js CHANGED
@@ -17,5 +17,9 @@ var opening = (cx, w, h) => [
17
17
  [cx + w / 2, 20 - h],
18
18
  [cx + w / 2, GROUND]
19
19
  ];
20
+ var softEar = (a, t, b, k = 1.3) => {
21
+ const c = (p) => [p[0] + (t[0] - p[0]) * k, p[1] + (t[1] - p[1]) * k].map((v) => +v.toFixed(3)).join(" ");
22
+ return `C${c(a)} ${c(b)} ${b.map((v) => +v.toFixed(3)).join(" ")}`;
23
+ };
20
24
  //#endregion
21
- export { GROUND, dot, eye, groundLine, opening };
25
+ export { GROUND, dot, eye, groundLine, opening, softEar };
@@ -1,4 +1,4 @@
1
- import { line, textWidth } from "./letters.js";
1
+ import { LABEL, line, snap, textWidth } from "./letters.js";
2
2
  //#region src/sensor.js
3
3
  var L = 2.5;
4
4
  var [X0, Y0, X1, Y1] = [
@@ -13,11 +13,12 @@ var cropMarks = () => [
13
13
  `M${X1} ${Y1 - L}V${Y1}H${X1 - L}`,
14
14
  `M${X0 + L} ${Y1}H${X0}V${Y1 - L}`
15
15
  ];
16
- var SPAN = 16;
17
- var GAP = 1.75;
16
+ var SPAN = 14;
17
+ var GAP = 2;
18
+ var SY = 5 / 6;
18
19
  var label = (text) => {
19
- const sx = Math.min(1, (SPAN - GAP * (text.length - 1)) / textWidth(text, 1, 0));
20
- return line(text, [12, 12], sx, GAP, 1).map((d) => ({
20
+ const sx = Math.min(1, (SPAN - GAP * (text.length - 1)) / textWidth(text, 1, 0, LABEL));
21
+ return snap(line(text, [12, 12], sx, GAP, SY, LABEL)).map((d) => ({
21
22
  d,
22
23
  thin: true
23
24
  }));
@@ -41,7 +42,7 @@ var SENSORS = {
41
42
  },
42
43
  "one-inch": {
43
44
  zh: "1 英寸",
44
- paths: () => [...line("1", [10.5, 12], 1, GAP, 1), "M14 9V11M16 9V11"].map((d) => ({
45
+ paths: () => snap([...line("1", [10.5, 12], 1, GAP, SY, LABEL), "M13.5 9.5V11.5M15.5 9.5V11.5"]).map((d) => ({
45
46
  d,
46
47
  thin: true
47
48
  }))
@@ -31,7 +31,7 @@ var cornerScale = Object.fromEntries(Object.entries({
31
31
  gauge: 1,
32
32
  lock: 1,
33
33
  code: 1,
34
- search: 1,
34
+ search: .85,
35
35
  heart: 1,
36
36
  question: 1,
37
37
  exclaim: 1,
@@ -91,10 +91,10 @@ var outlines = {
91
91
  ring: { circle: 3 },
92
92
  star: { circle: 3.45 },
93
93
  cloud: { box: [
94
- -3.65,
95
- -2.65,
94
+ -3.66,
95
+ -1.66,
96
96
  3.6,
97
- 2.65
97
+ 2.67
98
98
  ] },
99
99
  shield: { box: [
100
100
  -3.01,
@@ -334,19 +334,24 @@ var drawStar = ([x, y], k = 1, radius = 0) => {
334
334
  };
335
335
  var cloudCircles = [
336
336
  [
337
- -1.95,
338
- .95,
339
- 1.7
337
+ -2.68,
338
+ 1.67,
339
+ .98
340
340
  ],
341
341
  [
342
- .1,
343
- -.25,
344
- 2.4
342
+ -1.11,
343
+ .29,
344
+ 1.57
345
345
  ],
346
346
  [
347
- 2,
348
347
  1.05,
349
- 1.6
348
+ .1,
349
+ 1.76
350
+ ],
351
+ [
352
+ 2.42,
353
+ 1.49,
354
+ 1.18
350
355
  ]
351
356
  ];
352
357
  var cloudFillet = .5;
@@ -366,23 +371,31 @@ function arcTo([cx, cy, r], from, to) {
366
371
  return `A${r} ${r} 0 ${((Math.atan2(to[1] - cy, to[0] - cx) - a0) % (2 * Math.PI) + 2 * Math.PI) % (2 * Math.PI) > Math.PI ? 1 : 0} 1 ${to[0]} ${to[1]}`;
367
372
  }
368
373
  function cloudTop([x, y], k) {
369
- const [left, mid, right] = cloudCircles.map(([cx, cy, r]) => [
374
+ const cs = cloudCircles.map(([cx, cy, r]) => [
370
375
  x + cx * k,
371
376
  y + cy * k,
372
377
  r * k
373
378
  ]);
374
379
  const f = cloudFillet * k;
375
- const p1 = upperIntersection(left, mid);
376
- const p2 = upperIntersection(mid, right);
377
- const l1 = pointOn(left, angleOn(left, p1) - f / left[2]);
378
- const m1 = pointOn(mid, angleOn(mid, p1) + f / mid[2]);
379
- const m2 = pointOn(mid, angleOn(mid, p2) - f / mid[2]);
380
- const r1 = pointOn(right, angleOn(right, p2) + f / right[2]);
381
- const start = [left[0], left[1] + left[2]];
382
- const end = [right[0], right[1] + right[2]];
383
380
  const pt = (p) => `${p[0]} ${p[1]}`;
381
+ const start = [cs[0][0], cs[0][1] + cs[0][2]];
382
+ const end = [cs.at(-1)[0], cs.at(-1)[1] + cs.at(-1)[2]];
383
+ let arcs = "";
384
+ let from = start;
385
+ cs.forEach((c, i) => {
386
+ const next = cs[i + 1];
387
+ if (!next) {
388
+ arcs += arcTo(c, from, end);
389
+ return;
390
+ }
391
+ const p = upperIntersection(c, next);
392
+ const out = pointOn(c, angleOn(c, p) - f / c[2]);
393
+ const into = pointOn(next, angleOn(next, p) + f / next[2]);
394
+ arcs += `${arcTo(c, from, out)}Q${pt(p)} ${pt(into)}`;
395
+ from = into;
396
+ });
384
397
  return {
385
- arcs: `${arcTo(left, start, l1)}Q${pt(p1)} ${pt(m1)}${arcTo(mid, m1, m2)}Q${pt(p2)} ${pt(r1)}${arcTo(right, r1, end)}`,
398
+ arcs,
386
399
  start,
387
400
  end
388
401
  };
package/dist/src/unit.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { dot } from "./scene.js";
2
2
  import { circle, crisp, rounded } from "./geometry.js";
3
- import { line, snap } from "./letters.js";
3
+ import { LABEL, line, snap } from "./letters.js";
4
4
  //#region src/unit.js
5
5
  var [X0, Y0, X1, Y1] = [
6
6
  3.5,
@@ -17,7 +17,7 @@ var cross = [`M${X0} ${Y0}L${X1} ${Y1}`, `M${X1} ${Y0}L${X0} ${Y1}`];
17
17
  var track = `M9.5 9.5H15.5A3 3 0 0 1 15.5 15.5H9.5A3 3 0 0 1 9.5 9.5Z`;
18
18
  var wings = `M9.5 ${Y1}A1.5 1.5 0 0 1 ${CX} ${Y1}A1.5 1.5 0 0 1 15.5 ${Y1}`;
19
19
  var slash = `M${X0} ${Y1}L${X1} ${Y0}`;
20
- var text = (str) => [snap(line(str, [CX, CY], 1, 2, 1))].flat().map((d) => ({
20
+ var text = (str) => [snap(line(str, [CX, CY], 1, 2, 1, LABEL))].flat().map((d) => ({
21
21
  d,
22
22
  thin: true
23
23
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jannchie/icons",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Line icons on a 24-unit grid, redrawn for every corner radius and stroke weight, with pixel hinting and duo-tone colors",
5
5
  "license": "MIT",
6
6
  "author": "Jianqi Pan",