1mod icon;
15mod loader;
16
17pub use icon::Icon;
18pub(crate) use loader::install as install_loader;
19
20#[macro_export]
33macro_rules! icon_from_path {
34 ($path:literal) => {
35 $crate::icons::Icon::new(
36 $path,
37 include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/icons/", $path)),
38 )
39 };
40}
41
42pub mod icons {
44 use super::Icon;
45
46 pub const CROSSHAIR: Icon = crate::icon_from_path!("lines/cursor-cross.svg");
49 pub const DOT: Icon = crate::icon_from_path!("lines/cursor-dot.svg");
51 pub const ARROW: Icon = crate::icon_from_path!("lines/cursor-arrow.svg");
53 pub const DEMONSTRATION: Icon = crate::icon_from_path!("lines/cursor-demonstration.svg");
55 pub const MAGIC_CURSOR: Icon = crate::icon_from_path!("lines/cursor-magic.svg");
57 pub const ERASER: Icon = crate::icon_from_path!("lines/eraser.svg");
59
60 pub const TREND_LINE: Icon = crate::icon_from_path!("lines/trend-line.svg");
63 pub const RAY: Icon = crate::icon_from_path!("lines/ray.svg");
65 pub const INFO_LINE: Icon = crate::icon_from_path!("lines/info-line.svg");
67 pub const EXTENDED: Icon = crate::icon_from_path!("lines/extended-line.svg");
69 pub const TREND_ANGLE: Icon = crate::icon_from_path!("lines/trend-angle.svg");
71 pub const HORIZONTAL_LINE: Icon = crate::icon_from_path!("lines/horizontal-line.svg");
73 pub const HORIZONTAL_RAY: Icon = crate::icon_from_path!("lines/horizontal-ray.svg");
75 pub const VERTICAL_LINE: Icon = crate::icon_from_path!("lines/vertical-line.svg");
77 pub const CROSS_LINE: Icon = crate::icon_from_path!("lines/cross-line.svg");
79 pub const PARALLEL_CHANNEL: Icon = crate::icon_from_path!("lines/parallel-channel.svg");
81 pub const REGRESSION_TREND: Icon = crate::icon_from_path!("lines/regression-trend.svg");
83 pub const FLAT_BOTTOM: Icon = crate::icon_from_path!("lines/flat-top-bottom.svg");
85 pub const DISJOINT_ANGLE: Icon = crate::icon_from_path!("lines/disjoint-channel.svg");
87
88 pub const PITCHFORK: Icon = crate::icon_from_path!("pitchforks-gann/pitchfork.svg");
91 pub const SCHIFF_PITCHFORK: Icon =
93 crate::icon_from_path!("pitchforks-gann/schiff-pitchfork.svg");
94 pub const SCHIFF_PITCHFORK2: Icon =
96 crate::icon_from_path!("pitchforks-gann/modified-schiff-pitchfork.svg");
97 pub const INSIDE_PITCHFORK: Icon =
99 crate::icon_from_path!("pitchforks-gann/inside-pitchfork.svg");
100 pub const PITCHFAN: Icon = crate::icon_from_path!("pitchforks-gann/pitchfan.svg");
102 pub const GANN_SQUARE: Icon = crate::icon_from_path!("pitchforks-gann/gann-box.svg");
104 pub const GANN_COMPLEX: Icon = crate::icon_from_path!("pitchforks-gann/gann-square.svg");
106 pub const GANN_FIXED: Icon = crate::icon_from_path!("pitchforks-gann/gann-square-fixed.svg");
108 pub const GANN_FAN: Icon = crate::icon_from_path!("pitchforks-gann/gann-fan.svg");
110
111 pub const FIB_RETRACEMENT: Icon = crate::icon_from_path!("fibonacci/fib-retracement.svg");
114 pub const FIB_EXTENSION: Icon = crate::icon_from_path!("fibonacci/fib-extension.svg");
116 pub const FIB_CHANNEL: Icon = crate::icon_from_path!("fibonacci/fib-channel.svg");
118 pub const FIB_TIME_ZONE: Icon = crate::icon_from_path!("fibonacci/fib-time-zone.svg");
120 pub const FIB_SPEED_RESISTANCE_FAN: Icon =
122 crate::icon_from_path!("fibonacci/fib-speed-fan.svg");
123 pub const TREND_BASED_FIB_TIME: Icon =
125 crate::icon_from_path!("fibonacci/trend-based-fib-time.svg");
126 pub const FIB_CIRCLES: Icon = crate::icon_from_path!("fibonacci/fib-circles.svg");
128 pub const FIB_SPIRAL: Icon = crate::icon_from_path!("fibonacci/fib-spiral.svg");
130 pub const FIB_SPEED_RESISTANCE_ARCS: Icon =
132 crate::icon_from_path!("fibonacci/fib-speed-arcs.svg");
133 pub const FIB_WEDGE: Icon = crate::icon_from_path!("fibonacci/fib-wedge.svg");
135
136 pub const XABCD_PATTERN: Icon = crate::icon_from_path!("patterns-elliott/xabcd.svg");
139 pub const CYPHER_PATTERN: Icon = crate::icon_from_path!("patterns-elliott/cypher.svg");
141 pub const HEAD_AND_SHOULDERS: Icon =
143 crate::icon_from_path!("patterns-elliott/head-and-shoulders.svg");
144 pub const ABCD: Icon = crate::icon_from_path!("patterns-elliott/abcd.svg");
146 pub const TRIANGLE_PATTERN: Icon =
148 crate::icon_from_path!("patterns-elliott/triangle-pattern.svg");
149 pub const THREE_DRIVERS: Icon = crate::icon_from_path!("patterns-elliott/three-drives.svg");
151 pub const ELLIOTT_IMPULSE: Icon =
153 crate::icon_from_path!("patterns-elliott/elliott-impulse.svg");
154 pub const ELLIOTT_CORRECTION: Icon =
156 crate::icon_from_path!("patterns-elliott/elliott-correction.svg");
157 pub const ELLIOTT_TRIANGLE: Icon =
159 crate::icon_from_path!("patterns-elliott/elliott-triangle.svg");
160 pub const ELLIOTT_DOUBLE_COMBO: Icon =
162 crate::icon_from_path!("patterns-elliott/elliott-double-combo.svg");
163 pub const ELLIOTT_TRIPLE_COMBO: Icon =
165 crate::icon_from_path!("patterns-elliott/elliott-triple-combo.svg");
166
167 pub const LONG_POSITION: Icon =
170 crate::icon_from_path!("projection-volume-measure/long-position.svg");
171 pub const SHORT_POSITION: Icon =
173 crate::icon_from_path!("projection-volume-measure/short-position.svg");
174 pub const PREDICTION: Icon = crate::icon_from_path!("projection-volume-measure/forecast.svg");
176 pub const BARS_PATTERN: Icon =
178 crate::icon_from_path!("projection-volume-measure/bars-pattern.svg");
179 pub const GHOST_FEED: Icon = crate::icon_from_path!("projection-volume-measure/ghost-feed.svg");
181 pub const PROJECTION: Icon = crate::icon_from_path!("projection-volume-measure/projection.svg");
183 pub const ANCHORED_VWAP: Icon =
185 crate::icon_from_path!("projection-volume-measure/anchored-vwap.svg");
186 pub const FIXED_RANGE_VOLUME_PROFILE: Icon =
188 crate::icon_from_path!("projection-volume-measure/fixed-range-volume-profile.svg");
189 pub const ANCHORED_VOLUME_PROFILE: Icon =
191 crate::icon_from_path!("projection-volume-measure/anchored-volume-profile.svg");
192 pub const MEASURE: Icon = crate::icon_from_path!("projection-volume-measure/measure.svg");
194 pub const PRICE_RANGE: Icon =
196 crate::icon_from_path!("projection-volume-measure/price-range.svg");
197 pub const DATE_RANGE: Icon = crate::icon_from_path!("projection-volume-measure/date-range.svg");
199 pub const DATE_AND_PRICE_RANGE: Icon =
201 crate::icon_from_path!("projection-volume-measure/date-price-range.svg");
202 pub const CIRCLE_LINES: Icon =
204 crate::icon_from_path!("projection-volume-measure/cyclic-lines.svg");
205 pub const TIME_CYCLES: Icon =
207 crate::icon_from_path!("projection-volume-measure/time-cycles.svg");
208 pub const SINE_LINE: Icon = crate::icon_from_path!("projection-volume-measure/sine-line.svg");
210
211 pub const BRUSH: Icon = crate::icon_from_path!("shapes-annotations/brush.svg");
214 pub const HIGHLIGHTER: Icon = crate::icon_from_path!("shapes-annotations/highlighter.svg");
216 pub const PAINTBRUSH: Icon = crate::icon_from_path!("shapes-annotations/paintbrush.svg");
218 pub const ARROW_MARKER: Icon = crate::icon_from_path!("shapes-annotations/arrow-marker.svg");
220 pub const ARROW_LINE: Icon = crate::icon_from_path!("shapes-annotations/arrow.svg");
222 pub const ARROW_MARK_UP: Icon = crate::icon_from_path!("shapes-annotations/arrow-mark-up.svg");
224 pub const ARROW_MARK_DOWN: Icon =
226 crate::icon_from_path!("shapes-annotations/arrow-mark-down.svg");
227 pub const ARROW_MARK_LEFT: Icon =
229 crate::icon_from_path!("shapes-annotations/arrow-mark-left.svg");
230 pub const ARROW_MARK_RIGHT: Icon =
232 crate::icon_from_path!("shapes-annotations/arrow-mark-right.svg");
233 pub const RECT: Icon = crate::icon_from_path!("shapes-annotations/rectangle.svg");
235 pub const ROTATED_RECT: Icon =
237 crate::icon_from_path!("shapes-annotations/rotated-rectangle.svg");
238 pub const PATH: Icon = crate::icon_from_path!("shapes-annotations/path.svg");
240 pub const CIRCLE: Icon = crate::icon_from_path!("shapes-annotations/circle.svg");
242 pub const ELLIPSE: Icon = crate::icon_from_path!("shapes-annotations/ellipse.svg");
244 pub const POLYLINE: Icon = crate::icon_from_path!("shapes-annotations/polyline.svg");
246 pub const TRIANGLE: Icon = crate::icon_from_path!("shapes-annotations/triangle.svg");
248 pub const SECTOR: Icon = crate::icon_from_path!("shapes-annotations/sector.svg");
250 pub const ARC: Icon = crate::icon_from_path!("shapes-annotations/arc.svg");
252 pub const BEZIER_QUADRO: Icon = crate::icon_from_path!("shapes-annotations/curve.svg");
254 pub const BEZIER_CUBIC: Icon = crate::icon_from_path!("shapes-annotations/double-curve.svg");
256 pub const TEXT: Icon = crate::icon_from_path!("shapes-annotations/text.svg");
258 pub const ANCHORED_TEXT: Icon = crate::icon_from_path!("shapes-annotations/anchored-text.svg");
260 pub const NOTE: Icon = crate::icon_from_path!("shapes-annotations/note.svg");
262 pub const PRICE_NOTE: Icon = crate::icon_from_path!("shapes-annotations/price-note.svg");
264 pub const ANCHORED_NOTE: Icon = crate::icon_from_path!("shapes-annotations/anchored-note.svg");
266 pub const CALLOUT: Icon = crate::icon_from_path!("shapes-annotations/callout.svg");
268 pub const COMMENT: Icon = crate::icon_from_path!("shapes-annotations/comment.svg");
270 pub const PRICE_LABEL: Icon = crate::icon_from_path!("shapes-annotations/price-label.svg");
272 pub const SIGNPOST: Icon = crate::icon_from_path!("shapes-annotations/signpost.svg");
274 pub const FLAG_MARK: Icon = crate::icon_from_path!("shapes-annotations/flag-mark.svg");
276 pub const TABLE: Icon = crate::icon_from_path!("shapes-annotations/table.svg");
278 pub const IMAGE: Icon = crate::icon_from_path!("shapes-annotations/image.svg");
280 pub const POST: Icon = crate::icon_from_path!("shapes-annotations/post.svg");
282 pub const IDEAS: Icon = crate::icon_from_path!("shapes-annotations/idea.svg");
284 pub const STICKER: Icon = crate::icon_from_path!("shapes-annotations/sticker.svg");
286 pub const EMOJI_ICON: Icon = crate::icon_from_path!("shapes-annotations/emoji.svg");
288
289 pub const CHART_BARS: Icon = crate::icon_from_path!("chart-types/chart-bars.svg");
292 pub const CHART_CANDLES: Icon = crate::icon_from_path!("chart-types/chart-candles.svg");
294 pub const CHART_HOLLOW_CANDLES: Icon =
296 crate::icon_from_path!("chart-types/chart-hollow-candles.svg");
297 pub const CHART_VOLUME_CANDLES: Icon =
299 crate::icon_from_path!("chart-types/chart-volume-candles.svg");
300 pub const CHART_LINE: Icon = crate::icon_from_path!("chart-types/chart-line.svg");
302 pub const CHART_LINE_MARKERS: Icon =
304 crate::icon_from_path!("chart-types/chart-line-markers.svg");
305 pub const CHART_STEP_LINE: Icon = crate::icon_from_path!("chart-types/chart-step-line.svg");
307 pub const CHART_AREA: Icon = crate::icon_from_path!("chart-types/chart-area.svg");
309 pub const CHART_HLC_AREA: Icon = crate::icon_from_path!("chart-types/chart-hlc-area.svg");
311 pub const CHART_BASELINE: Icon = crate::icon_from_path!("chart-types/chart-baseline.svg");
313 pub const CHART_COLUMNS: Icon = crate::icon_from_path!("chart-types/chart-columns.svg");
315 pub const CHART_HIGH_LOW: Icon = crate::icon_from_path!("chart-types/chart-high-low.svg");
317 pub const CHART_TPO: Icon = crate::icon_from_path!("chart-types/chart-tpo.svg");
319 pub const CHART_VOLUME_FOOTPRINT: Icon =
321 crate::icon_from_path!("chart-types/chart-volume-footprint.svg");
322 pub const CHART_SESSION_VOLUME_PROFILE: Icon =
324 crate::icon_from_path!("chart-types/chart-session-volume-profile.svg");
325 pub const CHART_LINE_BREAK: Icon = crate::icon_from_path!("chart-types/chart-line-break.svg");
327 pub const CHART_KAGI: Icon = crate::icon_from_path!("chart-types/chart-kagi.svg");
329 pub const CHART_RANGE: Icon = crate::icon_from_path!("chart-types/chart-range.svg");
331 pub const CHART_POINT_FIGURE: Icon =
333 crate::icon_from_path!("chart-types/chart-point-figure.svg");
334 pub const CHART_RENKO: Icon = crate::icon_from_path!("chart-types/chart-renko.svg");
336 pub const CHART_HEIKIN_ASHI: Icon = crate::icon_from_path!("chart-types/chart-heikin-ashi.svg");
338
339 pub const MENU: Icon = crate::icon_from_path!("ui/menu.svg");
342 pub const SETTINGS: Icon = crate::icon_from_path!("ui/settings.svg");
344 pub const CAMERA: Icon = crate::icon_from_path!("ui/camera.svg");
346 pub const PLUS: Icon = crate::icon_from_path!("ui/plus.svg");
348 pub const COMPARE_ADD: Icon = crate::icon_from_path!("ui/compare-add.svg");
350 pub const INDICATORS: Icon = crate::icon_from_path!("ui/indicators.svg");
352 pub const ALERTS: Icon = crate::icon_from_path!("ui/alert.svg");
354 pub const REPLAY: Icon = crate::icon_from_path!("ui/replay.svg");
356 pub const UNDO: Icon = crate::icon_from_path!("ui/undo.svg");
358 pub const REDO: Icon = crate::icon_from_path!("ui/redo.svg");
360 pub const MINUS: Icon = crate::icon_from_path!("ui/minus.svg");
362 pub const CHECK: Icon = crate::icon_from_path!("ui/check.svg");
364 pub const CHEVRON_DOWN: Icon = crate::icon_from_path!("ui/chevron-down.svg");
366 pub const CHEVRON_UP: Icon = crate::icon_from_path!("ui/chevron-up.svg");
368 pub const CHEVRON_LEFT: Icon = crate::icon_from_path!("ui/chevron-left.svg");
370 pub const CHEVRON_RIGHT: Icon = crate::icon_from_path!("ui/chevron-right.svg");
372 pub const FULLSCREEN: Icon = crate::icon_from_path!("ui/fullscreen.svg");
374 pub const THEME_TOGGLE: Icon = crate::icon_from_path!("ui/theme-toggle.svg");
376 pub const QUICK_SEARCH: Icon = crate::icon_from_path!("ui/search.svg");
378 pub const COMMAND_SEARCH: Icon = crate::icon_from_path!("ui/quick-search.svg");
380 pub const SETTINGS_NUT: Icon = crate::icon_from_path!("ui/settings-nut.svg");
382 pub const PUBLISH: Icon = crate::icon_from_path!("ui/publish.svg");
384 pub const WIDGET_BAR_CALENDAR: Icon = crate::icon_from_path!("ui/calendar.svg");
386 pub const GO_TO_DATE: Icon = crate::icon_from_path!("ui/go-to-date.svg");
388 pub const WIDGET_BAR_HELP: Icon = crate::icon_from_path!("ui/help.svg");
390 pub const INFO: Icon = crate::icon_from_path!("ui/info.svg");
392 pub const SUCCESS: Icon = crate::icon_from_path!("ui/success.svg");
394 pub const WARNING: Icon = crate::icon_from_path!("ui/warning.svg");
396 pub const STATUS_ERROR: Icon = crate::icon_from_path!("ui/error.svg");
398 pub const WIDGET_BAR_LAYERS: Icon = crate::icon_from_path!("ui/widget-bar-layers.svg");
400 pub const WIDGET_BAR_WATCHLIST: Icon = crate::icon_from_path!("ui/widget-bar-watchlist.svg");
402 pub const WIDGET_BAR_HIGHLIGHTS: Icon = crate::icon_from_path!("ui/highlights.svg");
404 pub const WIDGET_BAR_SCREENER: Icon = crate::icon_from_path!("ui/screener.svg");
406 pub const WIDGET_BAR_HOTLISTS: Icon = crate::icon_from_path!("ui/hotlists.svg");
408 pub const WIDGET_BAR_NEWS: Icon = crate::icon_from_path!("ui/news.svg");
410 pub const WIDGET_BAR_NOTIFICATIONS: Icon = crate::icon_from_path!("ui/notifications.svg");
412 pub const WIDGET_BAR_CHATS: Icon = crate::icon_from_path!("ui/chats.svg");
414 pub const WIDGET_BAR_PRODUCTS: Icon = crate::icon_from_path!("ui/products.svg");
416 pub const OBJECT_TREE: Icon = crate::icon_from_path!("ui/object-tree.svg");
418 pub const EYE: Icon = crate::icon_from_path!("ui/eye.svg");
420 pub const EYE_HIDE: Icon = crate::icon_from_path!("ui/eye-off.svg");
422 pub const LOCK: Icon = crate::icon_from_path!("ui/lock.svg");
424 pub const UNLOCK: Icon = crate::icon_from_path!("ui/unlock.svg");
426 pub const ZOOM_IN: Icon = crate::icon_from_path!("ui/zoom-in.svg");
428 pub const ZOOM_OUT: Icon = crate::icon_from_path!("ui/zoom-out.svg");
430 pub const MOVE_VERTICAL: Icon = crate::icon_from_path!("ui/move-vertical.svg");
432 pub const PERCENT: Icon = crate::icon_from_path!("ui/percent.svg");
434 pub const ROTATE_CCW: Icon = crate::icon_from_path!("ui/rotate-ccw.svg");
436 pub const DRAWING_KEEP: Icon = crate::icon_from_path!("ui/drawing-keep.svg");
438 pub const DRAWING_MAGNET: Icon = crate::icon_from_path!("ui/drawing-magnet.svg");
440 pub const MAGNET: Icon = crate::icon_from_path!("ui/magnet.svg");
442 pub const TRASH: Icon = crate::icon_from_path!("ui/trash.svg");
444 pub const DUPLICATE: Icon = crate::icon_from_path!("ui/duplicate.svg");
446 pub const STAR_EMPTY: Icon = crate::icon_from_path!("ui/star.svg");
448 pub const STAR_FILLED: Icon = crate::icon_from_path!("ui/star-filled.svg");
450 pub const LAYOUT_GRID: Icon = crate::icon_from_path!("ui/layout-grid.svg");
452 pub const LAYOUT_SINGLE: Icon = crate::icon_from_path!("ui/layout-single.svg");
454 pub const LAYOUT_TWO_HORIZONTAL: Icon = crate::icon_from_path!("ui/layout-2-columns.svg");
457 pub const LAYOUT_TWO_VERTICAL: Icon = crate::icon_from_path!("ui/layout-2-rows.svg");
459 pub const LAYOUT_THREE: Icon = crate::icon_from_path!("ui/layout-3.svg");
461 pub const LAYOUT_THREE_HORIZONTAL: Icon = crate::icon_from_path!("ui/layout-3-columns.svg");
463 pub const LAYOUT_THREE_VERTICAL: Icon = crate::icon_from_path!("ui/layout-3-rows.svg");
465 pub const LAYOUT_THREE_LARGE_LEFT: Icon = crate::icon_from_path!("ui/layout-3-large-left.svg");
467 pub const LAYOUT_THREE_LARGE_RIGHT: Icon =
469 crate::icon_from_path!("ui/layout-3-large-right.svg");
470 pub const LAYOUT_THREE_LARGE_TOP: Icon = crate::icon_from_path!("ui/layout-3-large-top.svg");
472 pub const LAYOUT_FOUR: Icon = crate::icon_from_path!("ui/layout-4.svg");
474 pub const LAYOUT_FOUR_HORIZONTAL: Icon = crate::icon_from_path!("ui/layout-4-columns.svg");
476 pub const LAYOUT_FOUR_VERTICAL: Icon = crate::icon_from_path!("ui/layout-4-rows.svg");
478 pub const LAYOUT_FOUR_LARGE_LEFT: Icon = crate::icon_from_path!("ui/layout-4-large-left.svg");
480 pub const LAYOUT_FOUR_LARGE_RIGHT: Icon = crate::icon_from_path!("ui/layout-4-large-right.svg");
482 pub const LAYOUT_FOUR_LARGE_TOP: Icon = crate::icon_from_path!("ui/layout-4-large-top.svg");
484 pub const LAYOUT_FOUR_LARGE_BOTTOM: Icon =
486 crate::icon_from_path!("ui/layout-4-large-bottom.svg");
487 pub const LAYOUT_FIVE: Icon = crate::icon_from_path!("ui/layout-5.svg");
489 pub const LAYOUT_FIVE_HORIZONTAL: Icon = crate::icon_from_path!("ui/layout-5-columns.svg");
491 pub const LAYOUT_FIVE_VERTICAL: Icon = crate::icon_from_path!("ui/layout-5-rows.svg");
493 pub const LAYOUT_FIVE_LARGE_LEFT: Icon = crate::icon_from_path!("ui/layout-5-large-left.svg");
495 pub const LAYOUT_FIVE_LARGE_RIGHT: Icon = crate::icon_from_path!("ui/layout-5-large-right.svg");
497 pub const LAYOUT_FIVE_LARGE_TOP: Icon = crate::icon_from_path!("ui/layout-5-large-top.svg");
499 pub const LAYOUT_FIVE_LARGE_BOTTOM: Icon =
501 crate::icon_from_path!("ui/layout-5-large-bottom.svg");
502 pub const LAYOUT_SIX: Icon = crate::icon_from_path!("ui/layout-6.svg");
504 pub const LAYOUT_SIX_HORIZONTAL: Icon = crate::icon_from_path!("ui/layout-6-columns.svg");
506 pub const LAYOUT_SIX_VERTICAL: Icon = crate::icon_from_path!("ui/layout-6-rows.svg");
508 pub const LAYOUT_SIX_LARGE_LEFT: Icon = crate::icon_from_path!("ui/layout-6-large-left.svg");
510 pub const LAYOUT_SIX_LARGE_RIGHT: Icon = crate::icon_from_path!("ui/layout-6-large-right.svg");
512 pub const LAYOUT_SIX_LARGE_TOP: Icon = crate::icon_from_path!("ui/layout-6-large-top.svg");
514 pub const LAYOUT_SIX_LARGE_BOTTOM: Icon =
516 crate::icon_from_path!("ui/layout-6-large-bottom.svg");
517 pub const LAYOUT_SEVEN: Icon = crate::icon_from_path!("ui/layout-7.svg");
519 pub const LAYOUT_EIGHT: Icon = crate::icon_from_path!("ui/layout-8.svg");
521 pub const LAYOUT_NINE: Icon = crate::icon_from_path!("ui/layout-9.svg");
523 pub const LAYOUT_TEN: Icon = crate::icon_from_path!("ui/layout-10.svg");
525 pub const LAYOUT_ELEVEN: Icon = crate::icon_from_path!("ui/layout-11.svg");
527 pub const LAYOUT_TWELVE: Icon = crate::icon_from_path!("ui/layout-12.svg");
529 pub const LAYOUT_THIRTEEN: Icon = crate::icon_from_path!("ui/layout-13.svg");
531 pub const LAYOUT_FOURTEEN: Icon = crate::icon_from_path!("ui/layout-14.svg");
533 pub const LAYOUT_FIFTEEN: Icon = crate::icon_from_path!("ui/layout-15.svg");
535 pub const LAYOUT_SIXTEEN: Icon = crate::icon_from_path!("ui/layout-16.svg");
537 pub const LAYOUT_TABS: Icon = crate::icon_from_path!("ui/layout-tabs.svg");
539 pub const LAYOUT_SETUP: Icon = crate::icon_from_path!("ui/layout-setup.svg");
541 pub const CLOSE: Icon = crate::icon_from_path!("ui/close.svg");
543 pub const COLUMNS: Icon = crate::icon_from_path!("ui/columns.svg");
545 pub const MAXIMIZE: Icon = crate::icon_from_path!("ui/maximize.svg");
547 pub const SQUARE_PLUS: Icon = crate::icon_from_path!("ui/square-plus.svg");
549 pub const FOLDER_OPEN: Icon = crate::icon_from_path!("ui/folder-open.svg");
551 pub const MOVE_PANE: Icon = crate::icon_from_path!("ui/move-pane.svg");
553 pub const PIN_TO_SCALE: Icon = crate::icon_from_path!("ui/pin-scale.svg");
555 pub const WATCHLIST: Icon = crate::icon_from_path!("ui/watchlist.svg");
557 pub const UI_DRAG_HANDLE: Icon = crate::icon_from_path!("ui/drag-handle.svg");
559 pub const UI_MORE_HORIZONTAL: Icon = crate::icon_from_path!("ui/more.svg");
561 pub const UI_BUFFERING: Icon = crate::icon_from_path!("ui/loading.svg");
563
564 pub const SETTINGS_SYMBOL: Icon = crate::icon_from_path!("ui/symbol.svg");
567 pub const SETTINGS_STATUS_LINE: Icon = crate::icon_from_path!("ui/status-line.svg");
569 pub const SETTINGS_SCALES_LINES: Icon = crate::icon_from_path!("ui/scales-lines.svg");
571 pub const SETTINGS_CANVAS: Icon = crate::icon_from_path!("ui/canvas.svg");
573 pub const SETTINGS_TRADING: Icon = crate::icon_from_path!("ui/trading.svg");
575 pub const SETTINGS_EVENTS: Icon = crate::icon_from_path!("ui/events.svg");
577
578 pub const CODE: Icon = crate::icon_from_path!("ui/code.svg");
581 pub const USERS: Icon = crate::icon_from_path!("ui/users.svg");
583 pub const CROWN: Icon = crate::icon_from_path!("ui/crown.svg");
585 pub const DATABASE: Icon = crate::icon_from_path!("ui/database.svg");
587 pub const PENCIL: Icon = crate::icon_from_path!("ui/pencil.svg");
589 pub const TEMPLATE: Icon = crate::icon_from_path!("ui/template.svg");
591
592 pub const STATUS_CONNECTED: Icon = crate::icon_from_path!("ui/connected.svg");
595 pub const STATUS_CONNECTING: Icon = crate::icon_from_path!("ui/connecting.svg");
597 pub const STATUS_DISCONNECTED: Icon = crate::icon_from_path!("ui/disconnected.svg");
599
600 pub const MEDIA_PLAY: Icon = crate::icon_from_path!("ui/play.svg");
603 pub const MEDIA_PAUSE: Icon = crate::icon_from_path!("ui/pause.svg");
605 pub const MEDIA_STOP: Icon = crate::icon_from_path!("ui/stop.svg");
607 pub const MEDIA_SKIP_BACK: Icon = crate::icon_from_path!("ui/skip-back.svg");
609 pub const MEDIA_SKIP_FORWARD: Icon = crate::icon_from_path!("ui/skip-forward.svg");
611 pub const UI_ARROW_BACK: Icon = crate::icon_from_path!("ui/step-back.svg");
613 pub const UI_ARROW_FORWARD: Icon = crate::icon_from_path!("ui/step-forward.svg");
615
616 pub const BELL: Icon = ALERTS;
619 pub const WIDGET_BAR_ALERTS: Icon = ALERTS;
621 pub const CANDLESTICK: Icon = CHART_CANDLES;
623 pub const SETTINGS_GEAR: Icon = SETTINGS;
625 pub const BAR_CHART: Icon = CHART_BARS;
627 pub const REMOVE: Icon = TRASH;
629 pub const LONG_POS: Icon = LONG_POSITION;
631 pub const SHORT_POS: Icon = SHORT_POSITION;
633}
634
635#[cfg(test)]
636mod tests {
637 use std::collections::HashSet;
638 use std::path::Path;
639
640 fn embedded_paths() -> Vec<String> {
642 let needle = concat!("icon_from_path", "!(\"");
643 include_str!("mod.rs")
644 .split(needle)
645 .skip(1)
646 .map(|rest| rest[..rest.find('"').unwrap()].to_string())
647 .collect()
648 }
649
650 fn svg_files(dir: &Path, out: &mut Vec<String>, root: &Path) {
651 for entry in std::fs::read_dir(dir).unwrap() {
652 let path = entry.unwrap().path();
653 if path.is_dir() {
654 svg_files(&path, out, root);
655 } else if path.extension().is_some_and(|e| e == "svg") {
656 let rel = path.strip_prefix(root).unwrap();
657 out.push(rel.to_string_lossy().replace('\\', "/"));
658 }
659 }
660 }
661
662 #[test]
665 fn every_icon_file_is_embedded_and_tintable() {
666 let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("assets/icons");
667 let mut files = Vec::new();
668 svg_files(&root, &mut files, &root);
669 let embedded: HashSet<String> = embedded_paths().into_iter().collect();
670 for f in &files {
671 assert!(embedded.contains(f), "{f} is not embedded by any constant");
672 let svg = std::fs::read_to_string(root.join(f)).unwrap();
673 let open_tag = &svg[..svg.find('>').unwrap()];
674 assert!(
675 open_tag.contains(r##"color="#fff""##),
676 "{f}: root element must set color=\"#fff\" so tinting works"
677 );
678 }
679 }
680}