@twick/2d 0.13.0 → 0.14.2

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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/editor/editor/tsconfig.build.tsbuildinfo +1 -1
  3. package/lib/components/Audio.js +3 -3
  4. package/lib/components/Img.js +23 -23
  5. package/lib/components/Line.js +31 -31
  6. package/lib/components/Media.d.ts +1 -1
  7. package/lib/components/Media.d.ts.map +1 -1
  8. package/lib/components/Media.js +26 -26
  9. package/lib/components/Spline.js +25 -25
  10. package/lib/components/Video.js +3 -3
  11. package/lib/tsconfig.build.tsbuildinfo +1 -1
  12. package/package.json +5 -4
  13. package/src/editor/NodeInspectorConfig.tsx +76 -76
  14. package/src/editor/PreviewOverlayConfig.tsx +67 -67
  15. package/src/editor/Provider.tsx +93 -93
  16. package/src/editor/SceneGraphTabConfig.tsx +81 -81
  17. package/src/editor/icons/CircleIcon.tsx +7 -7
  18. package/src/editor/icons/CodeBlockIcon.tsx +8 -8
  19. package/src/editor/icons/CurveIcon.tsx +7 -7
  20. package/src/editor/icons/GridIcon.tsx +7 -7
  21. package/src/editor/icons/IconMap.ts +35 -35
  22. package/src/editor/icons/ImgIcon.tsx +8 -8
  23. package/src/editor/icons/LayoutIcon.tsx +9 -9
  24. package/src/editor/icons/LineIcon.tsx +7 -7
  25. package/src/editor/icons/NodeIcon.tsx +7 -7
  26. package/src/editor/icons/RayIcon.tsx +7 -7
  27. package/src/editor/icons/RectIcon.tsx +7 -7
  28. package/src/editor/icons/ShapeIcon.tsx +7 -7
  29. package/src/editor/icons/TxtIcon.tsx +8 -8
  30. package/src/editor/icons/VideoIcon.tsx +7 -7
  31. package/src/editor/icons/View2DIcon.tsx +10 -10
  32. package/src/editor/index.ts +17 -17
  33. package/src/editor/tree/DetachedRoot.tsx +23 -23
  34. package/src/editor/tree/NodeElement.tsx +74 -74
  35. package/src/editor/tree/TreeElement.tsx +72 -72
  36. package/src/editor/tree/TreeRoot.tsx +10 -10
  37. package/src/editor/tree/ViewRoot.tsx +20 -20
  38. package/src/editor/tree/index.module.scss +38 -38
  39. package/src/editor/tree/index.ts +3 -3
  40. package/src/editor/tsconfig.build.json +5 -5
  41. package/src/editor/tsconfig.json +12 -12
  42. package/src/editor/tsdoc.json +4 -4
  43. package/src/editor/vite-env.d.ts +1 -1
  44. package/src/lib/code/CodeCursor.ts +445 -445
  45. package/src/lib/code/CodeDiffer.ts +78 -78
  46. package/src/lib/code/CodeFragment.ts +97 -97
  47. package/src/lib/code/CodeHighlighter.ts +75 -75
  48. package/src/lib/code/CodeMetrics.ts +47 -47
  49. package/src/lib/code/CodeRange.test.ts +74 -74
  50. package/src/lib/code/CodeRange.ts +216 -216
  51. package/src/lib/code/CodeScope.ts +101 -101
  52. package/src/lib/code/CodeSelection.ts +24 -24
  53. package/src/lib/code/CodeSignal.ts +327 -327
  54. package/src/lib/code/CodeTokenizer.ts +54 -54
  55. package/src/lib/code/DefaultHighlightStyle.ts +98 -98
  56. package/src/lib/code/LezerHighlighter.ts +113 -113
  57. package/src/lib/code/diff.test.ts +311 -311
  58. package/src/lib/code/diff.ts +319 -319
  59. package/src/lib/code/extractRange.ts +126 -126
  60. package/src/lib/code/index.ts +13 -13
  61. package/src/lib/components/Audio.ts +168 -168
  62. package/src/lib/components/Bezier.ts +105 -105
  63. package/src/lib/components/Circle.ts +266 -266
  64. package/src/lib/components/Code.ts +526 -526
  65. package/src/lib/components/CodeBlock.ts +576 -576
  66. package/src/lib/components/CubicBezier.ts +112 -112
  67. package/src/lib/components/Curve.ts +455 -455
  68. package/src/lib/components/Grid.ts +135 -135
  69. package/src/lib/components/Icon.ts +96 -96
  70. package/src/lib/components/Img.ts +319 -319
  71. package/src/lib/components/Knot.ts +157 -157
  72. package/src/lib/components/Latex.ts +122 -122
  73. package/src/lib/components/Layout.ts +1092 -1092
  74. package/src/lib/components/Line.ts +429 -429
  75. package/src/lib/components/Media.ts +576 -576
  76. package/src/lib/components/Node.ts +1940 -1940
  77. package/src/lib/components/Path.ts +137 -137
  78. package/src/lib/components/Polygon.ts +171 -171
  79. package/src/lib/components/QuadBezier.ts +100 -100
  80. package/src/lib/components/Ray.ts +125 -125
  81. package/src/lib/components/Rect.ts +187 -187
  82. package/src/lib/components/Rive.ts +156 -156
  83. package/src/lib/components/SVG.ts +797 -797
  84. package/src/lib/components/Shape.ts +143 -143
  85. package/src/lib/components/Spline.ts +344 -344
  86. package/src/lib/components/Txt.test.tsx +81 -81
  87. package/src/lib/components/Txt.ts +203 -203
  88. package/src/lib/components/TxtLeaf.ts +205 -205
  89. package/src/lib/components/Video.ts +461 -461
  90. package/src/lib/components/View2D.ts +98 -98
  91. package/src/lib/components/__tests__/children.test.tsx +142 -142
  92. package/src/lib/components/__tests__/clone.test.tsx +126 -126
  93. package/src/lib/components/__tests__/generatorTest.ts +28 -28
  94. package/src/lib/components/__tests__/mockScene2D.ts +45 -45
  95. package/src/lib/components/__tests__/query.test.tsx +122 -122
  96. package/src/lib/components/__tests__/state.test.tsx +60 -60
  97. package/src/lib/components/index.ts +28 -28
  98. package/src/lib/components/types.ts +35 -35
  99. package/src/lib/curves/ArcSegment.ts +159 -159
  100. package/src/lib/curves/CircleSegment.ts +77 -77
  101. package/src/lib/curves/CubicBezierSegment.ts +78 -78
  102. package/src/lib/curves/CurveDrawingInfo.ts +11 -11
  103. package/src/lib/curves/CurvePoint.ts +15 -15
  104. package/src/lib/curves/CurveProfile.ts +7 -7
  105. package/src/lib/curves/KnotInfo.ts +10 -10
  106. package/src/lib/curves/LineSegment.ts +62 -62
  107. package/src/lib/curves/Polynomial.ts +355 -355
  108. package/src/lib/curves/Polynomial2D.ts +62 -62
  109. package/src/lib/curves/PolynomialSegment.ts +124 -124
  110. package/src/lib/curves/QuadBezierSegment.ts +64 -64
  111. package/src/lib/curves/Segment.ts +17 -17
  112. package/src/lib/curves/UniformPolynomialCurveSampler.ts +94 -94
  113. package/src/lib/curves/createCurveProfileLerp.ts +471 -471
  114. package/src/lib/curves/getBezierSplineProfile.ts +223 -223
  115. package/src/lib/curves/getCircleProfile.ts +86 -86
  116. package/src/lib/curves/getPathProfile.ts +178 -178
  117. package/src/lib/curves/getPointAtDistance.ts +21 -21
  118. package/src/lib/curves/getPolylineProfile.test.ts +21 -21
  119. package/src/lib/curves/getPolylineProfile.ts +89 -89
  120. package/src/lib/curves/getRectProfile.ts +139 -139
  121. package/src/lib/curves/index.ts +16 -16
  122. package/src/lib/decorators/canvasStyleSignal.ts +16 -16
  123. package/src/lib/decorators/colorSignal.ts +9 -9
  124. package/src/lib/decorators/compound.ts +72 -72
  125. package/src/lib/decorators/computed.ts +18 -18
  126. package/src/lib/decorators/defaultStyle.ts +18 -18
  127. package/src/lib/decorators/filtersSignal.ts +136 -136
  128. package/src/lib/decorators/index.ts +10 -10
  129. package/src/lib/decorators/initializers.ts +32 -32
  130. package/src/lib/decorators/nodeName.ts +13 -13
  131. package/src/lib/decorators/signal.test.ts +90 -90
  132. package/src/lib/decorators/signal.ts +345 -345
  133. package/src/lib/decorators/spacingSignal.ts +15 -15
  134. package/src/lib/decorators/vector2Signal.ts +30 -30
  135. package/src/lib/globals.d.ts +2 -2
  136. package/src/lib/index.ts +8 -8
  137. package/src/lib/jsx-dev-runtime.ts +2 -2
  138. package/src/lib/jsx-runtime.ts +46 -46
  139. package/src/lib/parse-svg-path.d.ts +14 -14
  140. package/src/lib/partials/Filter.ts +180 -180
  141. package/src/lib/partials/Gradient.ts +102 -102
  142. package/src/lib/partials/Pattern.ts +34 -34
  143. package/src/lib/partials/ShaderConfig.ts +117 -117
  144. package/src/lib/partials/index.ts +4 -4
  145. package/src/lib/partials/types.ts +58 -58
  146. package/src/lib/scenes/Scene2D.ts +242 -242
  147. package/src/lib/scenes/index.ts +3 -3
  148. package/src/lib/scenes/makeScene2D.ts +16 -16
  149. package/src/lib/scenes/useScene2D.ts +6 -6
  150. package/src/lib/tsconfig.build.json +5 -5
  151. package/src/lib/tsconfig.json +10 -10
  152. package/src/lib/tsdoc.json +4 -4
  153. package/src/lib/utils/CanvasUtils.ts +306 -306
  154. package/src/lib/utils/diff.test.ts +453 -453
  155. package/src/lib/utils/diff.ts +148 -148
  156. package/src/lib/utils/index.ts +2 -2
  157. package/src/lib/utils/is.ts +11 -11
  158. package/src/lib/utils/makeSignalExtensions.ts +30 -30
  159. package/src/lib/utils/video/declarations.d.ts +1 -1
  160. package/src/lib/utils/video/ffmpeg-client.ts +50 -50
  161. package/src/lib/utils/video/mp4-parser-manager.ts +72 -72
  162. package/src/lib/utils/video/parser/index.ts +1 -1
  163. package/src/lib/utils/video/parser/parser.ts +257 -257
  164. package/src/lib/utils/video/parser/sampler.ts +72 -72
  165. package/src/lib/utils/video/parser/segment.ts +302 -302
  166. package/src/lib/utils/video/parser/sink.ts +29 -29
  167. package/src/lib/utils/video/parser/utils.ts +31 -31
  168. package/src/tsconfig.base.json +19 -19
  169. package/src/tsconfig.build.json +8 -8
  170. package/src/tsconfig.json +5 -5
  171. package/tsconfig.project.json +7 -7
@@ -1,135 +1,135 @@
1
- import type {
2
- PossibleVector2,
3
- SignalValue,
4
- SimpleSignal,
5
- Vector2Signal,
6
- } from '@twick/core';
7
- import {map} from '@twick/core';
8
- import {initial, nodeName, signal, vector2Signal} from '../decorators';
9
- import type {ShapeProps} from './Shape';
10
- import {Shape} from './Shape';
11
-
12
- export interface GridProps extends ShapeProps {
13
- /**
14
- * {@inheritDoc Grid.spacing}
15
- */
16
- spacing?: SignalValue<PossibleVector2>;
17
- /**
18
- * {@inheritDoc Grid.start}
19
- */
20
- start?: SignalValue<number>;
21
- /**
22
- * {@inheritDoc Grid.end}
23
- */
24
- end?: SignalValue<number>;
25
- }
26
-
27
- /**
28
- * A node for drawing a two-dimensional grid.
29
- *
30
- * @preview
31
- * ```tsx editor
32
- * import {Grid, makeScene2D} from '@twick/2d';
33
- * import {all, createRef} from '@twick/core';
34
- *
35
- * export default makeScene2D(function* (view) {
36
- * const grid = createRef<Grid>();
37
- *
38
- * view.add(
39
- * <Grid
40
- * ref={grid}
41
- * width={'100%'}
42
- * height={'100%'}
43
- * stroke={'#666'}
44
- * start={0}
45
- * end={1}
46
- * />,
47
- * );
48
- *
49
- * yield* all(
50
- * grid().end(0.5, 1).to(1, 1).wait(1),
51
- * grid().start(0.5, 1).to(0, 1).wait(1),
52
- * );
53
- * });
54
- * ```
55
- */
56
- @nodeName('Grid')
57
- export class Grid extends Shape {
58
- /**
59
- * The spacing between the grid lines.
60
- */
61
- @initial(80)
62
- @vector2Signal('spacing')
63
- public declare readonly spacing: Vector2Signal<this>;
64
-
65
- /**
66
- * The percentage that should be clipped from the beginning of each grid line.
67
- *
68
- * @remarks
69
- * The portion of each grid line that comes before the given percentage will
70
- * be made invisible.
71
- *
72
- * This property is useful for animating the grid appearing on-screen.
73
- */
74
- @initial(0)
75
- @signal()
76
- public declare readonly start: SimpleSignal<number, this>;
77
-
78
- /**
79
- * The percentage that should be clipped from the end of each grid line.
80
- *
81
- * @remarks
82
- * The portion of each grid line that comes after the given percentage will
83
- * be made invisible.
84
- *
85
- * This property is useful for animating the grid appearing on-screen.
86
- */
87
- @initial(1)
88
- @signal()
89
- public declare readonly end: SimpleSignal<number, this>;
90
-
91
- public constructor(props: GridProps) {
92
- super(props);
93
- }
94
-
95
- protected override drawShape(context: CanvasRenderingContext2D) {
96
- context.save();
97
- this.applyStyle(context);
98
- this.drawRipple(context);
99
-
100
- const spacing = this.spacing();
101
- const size = this.computedSize().scale(0.5);
102
- const steps = size.div(spacing).floored;
103
-
104
- for (let x = -steps.x; x <= steps.x; x++) {
105
- const [from, to] = this.mapPoints(-size.height, size.height);
106
-
107
- context.beginPath();
108
- context.moveTo(spacing.x * x, from);
109
- context.lineTo(spacing.x * x, to);
110
- context.stroke();
111
- }
112
-
113
- for (let y = -steps.y; y <= steps.y; y++) {
114
- const [from, to] = this.mapPoints(-size.width, size.width);
115
-
116
- context.beginPath();
117
- context.moveTo(from, spacing.y * y);
118
- context.lineTo(to, spacing.y * y);
119
- context.stroke();
120
- }
121
-
122
- context.restore();
123
- }
124
-
125
- private mapPoints(start: number, end: number): [number, number] {
126
- let from = map(start, end, this.start());
127
- let to = map(start, end, this.end());
128
-
129
- if (to < from) {
130
- [from, to] = [to, from];
131
- }
132
-
133
- return [from, to];
134
- }
135
- }
1
+ import type {
2
+ PossibleVector2,
3
+ SignalValue,
4
+ SimpleSignal,
5
+ Vector2Signal,
6
+ } from '@twick/core';
7
+ import {map} from '@twick/core';
8
+ import {initial, nodeName, signal, vector2Signal} from '../decorators';
9
+ import type {ShapeProps} from './Shape';
10
+ import {Shape} from './Shape';
11
+
12
+ export interface GridProps extends ShapeProps {
13
+ /**
14
+ * {@inheritDoc Grid.spacing}
15
+ */
16
+ spacing?: SignalValue<PossibleVector2>;
17
+ /**
18
+ * {@inheritDoc Grid.start}
19
+ */
20
+ start?: SignalValue<number>;
21
+ /**
22
+ * {@inheritDoc Grid.end}
23
+ */
24
+ end?: SignalValue<number>;
25
+ }
26
+
27
+ /**
28
+ * A node for drawing a two-dimensional grid.
29
+ *
30
+ * @preview
31
+ * ```tsx editor
32
+ * import {Grid, makeScene2D} from '@twick/2d';
33
+ * import {all, createRef} from '@twick/core';
34
+ *
35
+ * export default makeScene2D(function* (view) {
36
+ * const grid = createRef<Grid>();
37
+ *
38
+ * view.add(
39
+ * <Grid
40
+ * ref={grid}
41
+ * width={'100%'}
42
+ * height={'100%'}
43
+ * stroke={'#666'}
44
+ * start={0}
45
+ * end={1}
46
+ * />,
47
+ * );
48
+ *
49
+ * yield* all(
50
+ * grid().end(0.5, 1).to(1, 1).wait(1),
51
+ * grid().start(0.5, 1).to(0, 1).wait(1),
52
+ * );
53
+ * });
54
+ * ```
55
+ */
56
+ @nodeName('Grid')
57
+ export class Grid extends Shape {
58
+ /**
59
+ * The spacing between the grid lines.
60
+ */
61
+ @initial(80)
62
+ @vector2Signal('spacing')
63
+ public declare readonly spacing: Vector2Signal<this>;
64
+
65
+ /**
66
+ * The percentage that should be clipped from the beginning of each grid line.
67
+ *
68
+ * @remarks
69
+ * The portion of each grid line that comes before the given percentage will
70
+ * be made invisible.
71
+ *
72
+ * This property is useful for animating the grid appearing on-screen.
73
+ */
74
+ @initial(0)
75
+ @signal()
76
+ public declare readonly start: SimpleSignal<number, this>;
77
+
78
+ /**
79
+ * The percentage that should be clipped from the end of each grid line.
80
+ *
81
+ * @remarks
82
+ * The portion of each grid line that comes after the given percentage will
83
+ * be made invisible.
84
+ *
85
+ * This property is useful for animating the grid appearing on-screen.
86
+ */
87
+ @initial(1)
88
+ @signal()
89
+ public declare readonly end: SimpleSignal<number, this>;
90
+
91
+ public constructor(props: GridProps) {
92
+ super(props);
93
+ }
94
+
95
+ protected override drawShape(context: CanvasRenderingContext2D) {
96
+ context.save();
97
+ this.applyStyle(context);
98
+ this.drawRipple(context);
99
+
100
+ const spacing = this.spacing();
101
+ const size = this.computedSize().scale(0.5);
102
+ const steps = size.div(spacing).floored;
103
+
104
+ for (let x = -steps.x; x <= steps.x; x++) {
105
+ const [from, to] = this.mapPoints(-size.height, size.height);
106
+
107
+ context.beginPath();
108
+ context.moveTo(spacing.x * x, from);
109
+ context.lineTo(spacing.x * x, to);
110
+ context.stroke();
111
+ }
112
+
113
+ for (let y = -steps.y; y <= steps.y; y++) {
114
+ const [from, to] = this.mapPoints(-size.width, size.width);
115
+
116
+ context.beginPath();
117
+ context.moveTo(from, spacing.y * y);
118
+ context.lineTo(to, spacing.y * y);
119
+ context.stroke();
120
+ }
121
+
122
+ context.restore();
123
+ }
124
+
125
+ private mapPoints(start: number, end: number): [number, number] {
126
+ let from = map(start, end, this.start());
127
+ let to = map(start, end, this.end());
128
+
129
+ if (to < from) {
130
+ [from, to] = [to, from];
131
+ }
132
+
133
+ return [from, to];
134
+ }
135
+ }
@@ -1,96 +1,96 @@
1
- import type {
2
- ColorSignal,
3
- PossibleColor,
4
- SignalValue,
5
- SimpleSignal,
6
- } from '@twick/core';
7
- import {useLogger} from '@twick/core';
8
- import {colorSignal, computed, initial, signal} from '../decorators';
9
- import type {ImgProps} from './Img';
10
- import {Img} from './Img';
11
-
12
- export interface IconProps extends ImgProps {
13
- /**
14
- * {@inheritDoc Icon.icon}
15
- */
16
- icon: SignalValue<string>;
17
-
18
- /**
19
- * {@inheritDoc Icon.color}
20
- */
21
- color?: SignalValue<PossibleColor>;
22
- }
23
-
24
- /**
25
- * An Icon Component that provides easy access to over 150k icons.
26
- * See https://icones.js.org/collection/all for all available Icons.
27
- */
28
- export class Icon extends Img {
29
- /**
30
- * The identifier of the icon.
31
- *
32
- * @remarks
33
- * You can find identifiers on [Icônes](https://icones.js.org).
34
- * They can look like this:
35
- * * `mdi:language-typescript`
36
- * * `ph:anchor-simple-bold`
37
- * * `ph:activity-bold`
38
- */
39
- @signal()
40
- public declare icon: SimpleSignal<string, this>;
41
-
42
- /**
43
- * The color of the icon
44
- *
45
- * @remarks
46
- * Provide the color in one of the following formats:
47
- * * named color like `red`, `darkgray`, …
48
- * * hexadecimal string with # like `#bada55`, `#141414`
49
- * Value can be either RGB or RGBA: `#bada55`, `#bada55aa` (latter is partially transparent)
50
- * The shorthand version (e.g. `#abc` for `#aabbcc` is also possible.)
51
- *
52
- * @defaultValue 'white'
53
- */
54
- @initial('white')
55
- @colorSignal()
56
- public declare color: ColorSignal<this>;
57
-
58
- public constructor(props: IconProps) {
59
- super({
60
- ...props,
61
- src: null,
62
- });
63
- }
64
-
65
- /**
66
- * Create the URL that will be used as the Image source
67
- * @returns Address to Iconify API for the requested Icon.
68
- */
69
- @computed()
70
- protected svgUrl(): string {
71
- const iconPathSegment = this.icon().replace(':', '/');
72
- const encodedColorValue = encodeURIComponent(this.color().hex());
73
- // Iconify API is documented here: https://docs.iconify.design/api/svg.html#color
74
- return `https://api.iconify.design/${iconPathSegment}.svg?color=${encodedColorValue}`;
75
- }
76
-
77
- /**
78
- * overrides `Image.src` getter
79
- */
80
- protected getSrc(): string {
81
- return this.svgUrl();
82
- }
83
-
84
- /**
85
- * overrides `Image.src` setter to warn the user that the value
86
- * is not used
87
- */
88
- protected setSrc(src: string | null) {
89
- if (src === null) {
90
- return;
91
- }
92
- useLogger().warn(
93
- "The Icon Component does not accept setting the `src`. If you need access to `src`, use '<Img/>` instead.",
94
- );
95
- }
96
- }
1
+ import type {
2
+ ColorSignal,
3
+ PossibleColor,
4
+ SignalValue,
5
+ SimpleSignal,
6
+ } from '@twick/core';
7
+ import {useLogger} from '@twick/core';
8
+ import {colorSignal, computed, initial, signal} from '../decorators';
9
+ import type {ImgProps} from './Img';
10
+ import {Img} from './Img';
11
+
12
+ export interface IconProps extends ImgProps {
13
+ /**
14
+ * {@inheritDoc Icon.icon}
15
+ */
16
+ icon: SignalValue<string>;
17
+
18
+ /**
19
+ * {@inheritDoc Icon.color}
20
+ */
21
+ color?: SignalValue<PossibleColor>;
22
+ }
23
+
24
+ /**
25
+ * An Icon Component that provides easy access to over 150k icons.
26
+ * See https://icones.js.org/collection/all for all available Icons.
27
+ */
28
+ export class Icon extends Img {
29
+ /**
30
+ * The identifier of the icon.
31
+ *
32
+ * @remarks
33
+ * You can find identifiers on [Icônes](https://icones.js.org).
34
+ * They can look like this:
35
+ * * `mdi:language-typescript`
36
+ * * `ph:anchor-simple-bold`
37
+ * * `ph:activity-bold`
38
+ */
39
+ @signal()
40
+ public declare icon: SimpleSignal<string, this>;
41
+
42
+ /**
43
+ * The color of the icon
44
+ *
45
+ * @remarks
46
+ * Provide the color in one of the following formats:
47
+ * * named color like `red`, `darkgray`, …
48
+ * * hexadecimal string with # like `#bada55`, `#141414`
49
+ * Value can be either RGB or RGBA: `#bada55`, `#bada55aa` (latter is partially transparent)
50
+ * The shorthand version (e.g. `#abc` for `#aabbcc` is also possible.)
51
+ *
52
+ * @defaultValue 'white'
53
+ */
54
+ @initial('white')
55
+ @colorSignal()
56
+ public declare color: ColorSignal<this>;
57
+
58
+ public constructor(props: IconProps) {
59
+ super({
60
+ ...props,
61
+ src: null,
62
+ });
63
+ }
64
+
65
+ /**
66
+ * Create the URL that will be used as the Image source
67
+ * @returns Address to Iconify API for the requested Icon.
68
+ */
69
+ @computed()
70
+ protected svgUrl(): string {
71
+ const iconPathSegment = this.icon().replace(':', '/');
72
+ const encodedColorValue = encodeURIComponent(this.color().hex());
73
+ // Iconify API is documented here: https://docs.iconify.design/api/svg.html#color
74
+ return `https://api.iconify.design/${iconPathSegment}.svg?color=${encodedColorValue}`;
75
+ }
76
+
77
+ /**
78
+ * overrides `Image.src` getter
79
+ */
80
+ protected getSrc(): string {
81
+ return this.svgUrl();
82
+ }
83
+
84
+ /**
85
+ * overrides `Image.src` setter to warn the user that the value
86
+ * is not used
87
+ */
88
+ protected setSrc(src: string | null) {
89
+ if (src === null) {
90
+ return;
91
+ }
92
+ useLogger().warn(
93
+ "The Icon Component does not accept setting the `src`. If you need access to `src`, use '<Img/>` instead.",
94
+ );
95
+ }
96
+ }