@mal-icons/angular 0.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 (294) hide show
  1. package/README.md +108 -0
  2. package/package.json +47 -0
  3. package/src/context.ts +17 -0
  4. package/src/icon-base.ts +91 -0
  5. package/src/icons/fi/FiActivity.ts +20 -0
  6. package/src/icons/fi/FiAirplay.ts +20 -0
  7. package/src/icons/fi/FiAlertCircle.ts +20 -0
  8. package/src/icons/fi/FiAlertOctagon.ts +20 -0
  9. package/src/icons/fi/FiAlertTriangle.ts +20 -0
  10. package/src/icons/fi/FiAlignCenter.ts +20 -0
  11. package/src/icons/fi/FiAlignJustify.ts +20 -0
  12. package/src/icons/fi/FiAlignLeft.ts +20 -0
  13. package/src/icons/fi/FiAlignRight.ts +20 -0
  14. package/src/icons/fi/FiAnchor.ts +20 -0
  15. package/src/icons/fi/FiAperture.ts +20 -0
  16. package/src/icons/fi/FiArchive.ts +20 -0
  17. package/src/icons/fi/FiArrowDown.ts +20 -0
  18. package/src/icons/fi/FiArrowDownCircle.ts +20 -0
  19. package/src/icons/fi/FiArrowDownLeft.ts +20 -0
  20. package/src/icons/fi/FiArrowDownRight.ts +20 -0
  21. package/src/icons/fi/FiArrowLeft.ts +20 -0
  22. package/src/icons/fi/FiArrowLeftCircle.ts +20 -0
  23. package/src/icons/fi/FiArrowRight.ts +20 -0
  24. package/src/icons/fi/FiArrowRightCircle.ts +20 -0
  25. package/src/icons/fi/FiArrowUp.ts +20 -0
  26. package/src/icons/fi/FiArrowUpCircle.ts +20 -0
  27. package/src/icons/fi/FiArrowUpLeft.ts +20 -0
  28. package/src/icons/fi/FiArrowUpRight.ts +20 -0
  29. package/src/icons/fi/FiAtSign.ts +20 -0
  30. package/src/icons/fi/FiAward.ts +20 -0
  31. package/src/icons/fi/FiBarChart.ts +20 -0
  32. package/src/icons/fi/FiBarChart2.ts +20 -0
  33. package/src/icons/fi/FiBattery.ts +20 -0
  34. package/src/icons/fi/FiBatteryCharging.ts +20 -0
  35. package/src/icons/fi/FiBell.ts +20 -0
  36. package/src/icons/fi/FiBellOff.ts +20 -0
  37. package/src/icons/fi/FiBluetooth.ts +20 -0
  38. package/src/icons/fi/FiBold.ts +20 -0
  39. package/src/icons/fi/FiBook.ts +20 -0
  40. package/src/icons/fi/FiBookOpen.ts +20 -0
  41. package/src/icons/fi/FiBookmark.ts +20 -0
  42. package/src/icons/fi/FiBox.ts +20 -0
  43. package/src/icons/fi/FiBriefcase.ts +20 -0
  44. package/src/icons/fi/FiCalendar.ts +20 -0
  45. package/src/icons/fi/FiCamera.ts +20 -0
  46. package/src/icons/fi/FiCameraOff.ts +20 -0
  47. package/src/icons/fi/FiCast.ts +20 -0
  48. package/src/icons/fi/FiCheck.ts +20 -0
  49. package/src/icons/fi/FiCheckCircle.ts +20 -0
  50. package/src/icons/fi/FiCheckSquare.ts +20 -0
  51. package/src/icons/fi/FiChevronDown.ts +20 -0
  52. package/src/icons/fi/FiChevronLeft.ts +20 -0
  53. package/src/icons/fi/FiChevronRight.ts +20 -0
  54. package/src/icons/fi/FiChevronUp.ts +20 -0
  55. package/src/icons/fi/FiChevronsDown.ts +20 -0
  56. package/src/icons/fi/FiChevronsLeft.ts +20 -0
  57. package/src/icons/fi/FiChevronsRight.ts +20 -0
  58. package/src/icons/fi/FiChevronsUp.ts +20 -0
  59. package/src/icons/fi/FiChrome.ts +20 -0
  60. package/src/icons/fi/FiCircle.ts +20 -0
  61. package/src/icons/fi/FiClipboard.ts +20 -0
  62. package/src/icons/fi/FiClock.ts +20 -0
  63. package/src/icons/fi/FiCloud.ts +20 -0
  64. package/src/icons/fi/FiCloudDrizzle.ts +20 -0
  65. package/src/icons/fi/FiCloudLightning.ts +20 -0
  66. package/src/icons/fi/FiCloudOff.ts +20 -0
  67. package/src/icons/fi/FiCloudRain.ts +20 -0
  68. package/src/icons/fi/FiCloudSnow.ts +20 -0
  69. package/src/icons/fi/FiCode.ts +20 -0
  70. package/src/icons/fi/FiCodepen.ts +20 -0
  71. package/src/icons/fi/FiCodesandbox.ts +20 -0
  72. package/src/icons/fi/FiCoffee.ts +20 -0
  73. package/src/icons/fi/FiColumns.ts +20 -0
  74. package/src/icons/fi/FiCommand.ts +20 -0
  75. package/src/icons/fi/FiCompass.ts +20 -0
  76. package/src/icons/fi/FiCopy.ts +20 -0
  77. package/src/icons/fi/FiCornerDownLeft.ts +20 -0
  78. package/src/icons/fi/FiCornerDownRight.ts +20 -0
  79. package/src/icons/fi/FiCornerLeftDown.ts +20 -0
  80. package/src/icons/fi/FiCornerLeftUp.ts +20 -0
  81. package/src/icons/fi/FiCornerRightDown.ts +20 -0
  82. package/src/icons/fi/FiCornerRightUp.ts +20 -0
  83. package/src/icons/fi/FiCornerUpLeft.ts +20 -0
  84. package/src/icons/fi/FiCornerUpRight.ts +20 -0
  85. package/src/icons/fi/FiCpu.ts +20 -0
  86. package/src/icons/fi/FiCreditCard.ts +20 -0
  87. package/src/icons/fi/FiCrop.ts +20 -0
  88. package/src/icons/fi/FiCrosshair.ts +20 -0
  89. package/src/icons/fi/FiDatabase.ts +20 -0
  90. package/src/icons/fi/FiDelete.ts +20 -0
  91. package/src/icons/fi/FiDisc.ts +20 -0
  92. package/src/icons/fi/FiDivide.ts +20 -0
  93. package/src/icons/fi/FiDivideCircle.ts +20 -0
  94. package/src/icons/fi/FiDivideSquare.ts +20 -0
  95. package/src/icons/fi/FiDollarSign.ts +20 -0
  96. package/src/icons/fi/FiDownload.ts +20 -0
  97. package/src/icons/fi/FiDownloadCloud.ts +20 -0
  98. package/src/icons/fi/FiDribbble.ts +20 -0
  99. package/src/icons/fi/FiDroplet.ts +20 -0
  100. package/src/icons/fi/FiEdit.ts +20 -0
  101. package/src/icons/fi/FiEdit2.ts +20 -0
  102. package/src/icons/fi/FiEdit3.ts +20 -0
  103. package/src/icons/fi/FiExternalLink.ts +20 -0
  104. package/src/icons/fi/FiEye.ts +20 -0
  105. package/src/icons/fi/FiEyeOff.ts +20 -0
  106. package/src/icons/fi/FiFacebook.ts +20 -0
  107. package/src/icons/fi/FiFastForward.ts +20 -0
  108. package/src/icons/fi/FiFeather.ts +20 -0
  109. package/src/icons/fi/FiFigma.ts +20 -0
  110. package/src/icons/fi/FiFile.ts +20 -0
  111. package/src/icons/fi/FiFileMinus.ts +20 -0
  112. package/src/icons/fi/FiFilePlus.ts +20 -0
  113. package/src/icons/fi/FiFileText.ts +20 -0
  114. package/src/icons/fi/FiFilm.ts +20 -0
  115. package/src/icons/fi/FiFilter.ts +20 -0
  116. package/src/icons/fi/FiFlag.ts +20 -0
  117. package/src/icons/fi/FiFolder.ts +20 -0
  118. package/src/icons/fi/FiFolderMinus.ts +20 -0
  119. package/src/icons/fi/FiFolderPlus.ts +20 -0
  120. package/src/icons/fi/FiFramer.ts +20 -0
  121. package/src/icons/fi/FiFrown.ts +20 -0
  122. package/src/icons/fi/FiGift.ts +20 -0
  123. package/src/icons/fi/FiGitBranch.ts +20 -0
  124. package/src/icons/fi/FiGitCommit.ts +20 -0
  125. package/src/icons/fi/FiGitMerge.ts +20 -0
  126. package/src/icons/fi/FiGitPullRequest.ts +20 -0
  127. package/src/icons/fi/FiGithub.ts +20 -0
  128. package/src/icons/fi/FiGitlab.ts +20 -0
  129. package/src/icons/fi/FiGlobe.ts +20 -0
  130. package/src/icons/fi/FiGrid.ts +20 -0
  131. package/src/icons/fi/FiHardDrive.ts +20 -0
  132. package/src/icons/fi/FiHash.ts +20 -0
  133. package/src/icons/fi/FiHeadphones.ts +20 -0
  134. package/src/icons/fi/FiHeart.ts +20 -0
  135. package/src/icons/fi/FiHelpCircle.ts +20 -0
  136. package/src/icons/fi/FiHexagon.ts +20 -0
  137. package/src/icons/fi/FiHome.ts +20 -0
  138. package/src/icons/fi/FiImage.ts +20 -0
  139. package/src/icons/fi/FiInbox.ts +20 -0
  140. package/src/icons/fi/FiInfo.ts +20 -0
  141. package/src/icons/fi/FiInstagram.ts +20 -0
  142. package/src/icons/fi/FiItalic.ts +20 -0
  143. package/src/icons/fi/FiKey.ts +20 -0
  144. package/src/icons/fi/FiLayers.ts +20 -0
  145. package/src/icons/fi/FiLayout.ts +20 -0
  146. package/src/icons/fi/FiLifeBuoy.ts +20 -0
  147. package/src/icons/fi/FiLink.ts +20 -0
  148. package/src/icons/fi/FiLink2.ts +20 -0
  149. package/src/icons/fi/FiLinkedin.ts +20 -0
  150. package/src/icons/fi/FiList.ts +20 -0
  151. package/src/icons/fi/FiLoader.ts +20 -0
  152. package/src/icons/fi/FiLock.ts +20 -0
  153. package/src/icons/fi/FiLogIn.ts +20 -0
  154. package/src/icons/fi/FiLogOut.ts +20 -0
  155. package/src/icons/fi/FiMail.ts +20 -0
  156. package/src/icons/fi/FiMap.ts +20 -0
  157. package/src/icons/fi/FiMapPin.ts +20 -0
  158. package/src/icons/fi/FiMaximize.ts +20 -0
  159. package/src/icons/fi/FiMaximize2.ts +20 -0
  160. package/src/icons/fi/FiMeh.ts +20 -0
  161. package/src/icons/fi/FiMenu.ts +20 -0
  162. package/src/icons/fi/FiMessageCircle.ts +20 -0
  163. package/src/icons/fi/FiMessageSquare.ts +20 -0
  164. package/src/icons/fi/FiMic.ts +20 -0
  165. package/src/icons/fi/FiMicOff.ts +20 -0
  166. package/src/icons/fi/FiMinimize.ts +20 -0
  167. package/src/icons/fi/FiMinimize2.ts +20 -0
  168. package/src/icons/fi/FiMinus.ts +20 -0
  169. package/src/icons/fi/FiMinusCircle.ts +20 -0
  170. package/src/icons/fi/FiMinusSquare.ts +20 -0
  171. package/src/icons/fi/FiMonitor.ts +20 -0
  172. package/src/icons/fi/FiMoon.ts +20 -0
  173. package/src/icons/fi/FiMoreHorizontal.ts +20 -0
  174. package/src/icons/fi/FiMoreVertical.ts +20 -0
  175. package/src/icons/fi/FiMousePointer.ts +20 -0
  176. package/src/icons/fi/FiMove.ts +20 -0
  177. package/src/icons/fi/FiMusic.ts +20 -0
  178. package/src/icons/fi/FiNavigation.ts +20 -0
  179. package/src/icons/fi/FiNavigation2.ts +20 -0
  180. package/src/icons/fi/FiOctagon.ts +20 -0
  181. package/src/icons/fi/FiPackage.ts +20 -0
  182. package/src/icons/fi/FiPaperclip.ts +20 -0
  183. package/src/icons/fi/FiPause.ts +20 -0
  184. package/src/icons/fi/FiPauseCircle.ts +20 -0
  185. package/src/icons/fi/FiPenTool.ts +20 -0
  186. package/src/icons/fi/FiPercent.ts +20 -0
  187. package/src/icons/fi/FiPhone.ts +20 -0
  188. package/src/icons/fi/FiPhoneCall.ts +20 -0
  189. package/src/icons/fi/FiPhoneForwarded.ts +20 -0
  190. package/src/icons/fi/FiPhoneIncoming.ts +20 -0
  191. package/src/icons/fi/FiPhoneMissed.ts +20 -0
  192. package/src/icons/fi/FiPhoneOff.ts +20 -0
  193. package/src/icons/fi/FiPhoneOutgoing.ts +20 -0
  194. package/src/icons/fi/FiPieChart.ts +20 -0
  195. package/src/icons/fi/FiPlay.ts +20 -0
  196. package/src/icons/fi/FiPlayCircle.ts +20 -0
  197. package/src/icons/fi/FiPlus.ts +20 -0
  198. package/src/icons/fi/FiPlusCircle.ts +20 -0
  199. package/src/icons/fi/FiPlusSquare.ts +20 -0
  200. package/src/icons/fi/FiPocket.ts +20 -0
  201. package/src/icons/fi/FiPower.ts +20 -0
  202. package/src/icons/fi/FiPrinter.ts +20 -0
  203. package/src/icons/fi/FiRadio.ts +20 -0
  204. package/src/icons/fi/FiRefreshCcw.ts +20 -0
  205. package/src/icons/fi/FiRefreshCw.ts +20 -0
  206. package/src/icons/fi/FiRepeat.ts +20 -0
  207. package/src/icons/fi/FiRewind.ts +20 -0
  208. package/src/icons/fi/FiRotateCcw.ts +20 -0
  209. package/src/icons/fi/FiRotateCw.ts +20 -0
  210. package/src/icons/fi/FiRss.ts +20 -0
  211. package/src/icons/fi/FiSave.ts +20 -0
  212. package/src/icons/fi/FiScissors.ts +20 -0
  213. package/src/icons/fi/FiSearch.ts +20 -0
  214. package/src/icons/fi/FiSend.ts +20 -0
  215. package/src/icons/fi/FiServer.ts +20 -0
  216. package/src/icons/fi/FiSettings.ts +20 -0
  217. package/src/icons/fi/FiShare.ts +20 -0
  218. package/src/icons/fi/FiShare2.ts +20 -0
  219. package/src/icons/fi/FiShield.ts +20 -0
  220. package/src/icons/fi/FiShieldOff.ts +20 -0
  221. package/src/icons/fi/FiShoppingBag.ts +20 -0
  222. package/src/icons/fi/FiShoppingCart.ts +20 -0
  223. package/src/icons/fi/FiShuffle.ts +20 -0
  224. package/src/icons/fi/FiSidebar.ts +20 -0
  225. package/src/icons/fi/FiSkipBack.ts +20 -0
  226. package/src/icons/fi/FiSkipForward.ts +20 -0
  227. package/src/icons/fi/FiSlack.ts +20 -0
  228. package/src/icons/fi/FiSlash.ts +20 -0
  229. package/src/icons/fi/FiSliders.ts +20 -0
  230. package/src/icons/fi/FiSmartphone.ts +20 -0
  231. package/src/icons/fi/FiSmile.ts +20 -0
  232. package/src/icons/fi/FiSpeaker.ts +20 -0
  233. package/src/icons/fi/FiSquare.ts +20 -0
  234. package/src/icons/fi/FiStar.ts +20 -0
  235. package/src/icons/fi/FiStopCircle.ts +20 -0
  236. package/src/icons/fi/FiSun.ts +20 -0
  237. package/src/icons/fi/FiSunrise.ts +20 -0
  238. package/src/icons/fi/FiSunset.ts +20 -0
  239. package/src/icons/fi/FiTable.ts +20 -0
  240. package/src/icons/fi/FiTablet.ts +20 -0
  241. package/src/icons/fi/FiTag.ts +20 -0
  242. package/src/icons/fi/FiTarget.ts +20 -0
  243. package/src/icons/fi/FiTerminal.ts +20 -0
  244. package/src/icons/fi/FiThermometer.ts +20 -0
  245. package/src/icons/fi/FiThumbsDown.ts +20 -0
  246. package/src/icons/fi/FiThumbsUp.ts +20 -0
  247. package/src/icons/fi/FiToggleLeft.ts +20 -0
  248. package/src/icons/fi/FiToggleRight.ts +20 -0
  249. package/src/icons/fi/FiTool.ts +20 -0
  250. package/src/icons/fi/FiTrash.ts +20 -0
  251. package/src/icons/fi/FiTrash2.ts +20 -0
  252. package/src/icons/fi/FiTrello.ts +20 -0
  253. package/src/icons/fi/FiTrendingDown.ts +20 -0
  254. package/src/icons/fi/FiTrendingUp.ts +20 -0
  255. package/src/icons/fi/FiTriangle.ts +20 -0
  256. package/src/icons/fi/FiTruck.ts +20 -0
  257. package/src/icons/fi/FiTv.ts +20 -0
  258. package/src/icons/fi/FiTwitch.ts +20 -0
  259. package/src/icons/fi/FiTwitter.ts +20 -0
  260. package/src/icons/fi/FiType.ts +20 -0
  261. package/src/icons/fi/FiUmbrella.ts +20 -0
  262. package/src/icons/fi/FiUnderline.ts +20 -0
  263. package/src/icons/fi/FiUnlock.ts +20 -0
  264. package/src/icons/fi/FiUpload.ts +20 -0
  265. package/src/icons/fi/FiUploadCloud.ts +20 -0
  266. package/src/icons/fi/FiUser.ts +20 -0
  267. package/src/icons/fi/FiUserCheck.ts +20 -0
  268. package/src/icons/fi/FiUserMinus.ts +20 -0
  269. package/src/icons/fi/FiUserPlus.ts +20 -0
  270. package/src/icons/fi/FiUserX.ts +20 -0
  271. package/src/icons/fi/FiUsers.ts +20 -0
  272. package/src/icons/fi/FiVideo.ts +20 -0
  273. package/src/icons/fi/FiVideoOff.ts +20 -0
  274. package/src/icons/fi/FiVoicemail.ts +20 -0
  275. package/src/icons/fi/FiVolume.ts +20 -0
  276. package/src/icons/fi/FiVolume1.ts +20 -0
  277. package/src/icons/fi/FiVolume2.ts +20 -0
  278. package/src/icons/fi/FiVolumeX.ts +20 -0
  279. package/src/icons/fi/FiWatch.ts +20 -0
  280. package/src/icons/fi/FiWifi.ts +20 -0
  281. package/src/icons/fi/FiWifiOff.ts +20 -0
  282. package/src/icons/fi/FiWind.ts +20 -0
  283. package/src/icons/fi/FiX.ts +20 -0
  284. package/src/icons/fi/FiXCircle.ts +20 -0
  285. package/src/icons/fi/FiXOctagon.ts +20 -0
  286. package/src/icons/fi/FiXSquare.ts +20 -0
  287. package/src/icons/fi/FiYoutube.ts +20 -0
  288. package/src/icons/fi/FiZap.ts +20 -0
  289. package/src/icons/fi/FiZapOff.ts +20 -0
  290. package/src/icons/fi/FiZoomIn.ts +20 -0
  291. package/src/icons/fi/FiZoomOut.ts +20 -0
  292. package/src/icons/fi/index.ts +288 -0
  293. package/src/icons/fi/names.ts +293 -0
  294. package/src/index.ts +13 -0
package/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # @mal-icons/angular
2
+
3
+ [![npm](https://img.shields.io/npm/v/@mal-icons/angular.svg)](https://www.npmjs.com/package/@mal-icons/angular)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/mal-icons/mal-icons/blob/main/LICENSE)
5
+
6
+ Angular adapter for [**mal-icons**](https://github.com/mal-icons/mal-icons) — a
7
+ high-performance, tree-shakeable icon SDK. Each icon is a pre-generated
8
+ **standalone** Angular component that renders SVG through `Renderer2` with
9
+ `OnPush` change detection.
10
+
11
+ ## Highlights
12
+
13
+ - **Standalone components** — import an icon directly, no `NgModule` needed.
14
+ - **`OnPush`** — minimal change-detection overhead.
15
+ - **Tree-shakeable** — every icon is its own component.
16
+ - **Themeable** — dependency-injection context (`ICON_CONTEXT`) with per-icon overrides.
17
+ - **Accessible** — correct `role` / `aria-hidden` and optional `<title>`.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ bun add @mal-icons/angular
23
+ # or
24
+ npm install @mal-icons/angular
25
+ ```
26
+
27
+ > Requires `@angular/core` 16 or newer (peer dependency). The package ships
28
+ > TypeScript source, so it compiles in your app's Angular version.
29
+
30
+ ## Quick start
31
+
32
+ Import the standalone component and use its selector in a template:
33
+
34
+ ```ts
35
+ import { Component } from "@angular/core";
36
+ import { FiActivity } from "@mal-icons/angular/fi";
37
+
38
+ @Component({
39
+ standalone: true,
40
+ selector: "app-status",
41
+ imports: [FiActivity],
42
+ template: `<mal-fi-activity [size]="24" title="Status" />`,
43
+ })
44
+ export class StatusComponent {}
45
+ ```
46
+
47
+ > The selector is the kebab-cased icon name prefixed with `mal-`
48
+ > (e.g. `FiActivity` → `<mal-fi-activity>`).
49
+
50
+ ### App-wide theming
51
+
52
+ Provide `ICON_CONTEXT` to set defaults for all descendant icons; per-icon
53
+ inputs override them:
54
+
55
+ ```ts
56
+ import { ICON_CONTEXT } from "@mal-icons/angular";
57
+
58
+ bootstrapApplication(AppComponent, {
59
+ providers: [
60
+ { provide: ICON_CONTEXT, useValue: { size: 20, color: "#3366ff" } },
61
+ ],
62
+ });
63
+ ```
64
+
65
+ ## Inputs
66
+
67
+ | Input | Type | Description |
68
+ | ----------- | ------------------ | ------------------------------------ |
69
+ | `size` | `number \| string` | Width and height (defaults to `1em`) |
70
+ | `color` | `string` | Overrides `currentColor` |
71
+ | `title` | `string` | Accessible label |
72
+ | `className` | `string` | Additional class names |
73
+
74
+ ## API
75
+
76
+ ```ts
77
+ import {
78
+ IconBaseComponent,
79
+ ICON_CONTEXT,
80
+ DefaultIconContext,
81
+ ICON_ANIMATIONS_CSS,
82
+ WEIGHT_STROKE_WIDTH,
83
+ animationClass,
84
+ } from "@mal-icons/angular";
85
+ ```
86
+
87
+ ## Subpath exports
88
+
89
+ | Import | Contents |
90
+ | ---------------------------------- | --------------------------- |
91
+ | `@mal-icons/angular` | Base component and context |
92
+ | `@mal-icons/angular/fi` | All Feather icon components |
93
+ | `@mal-icons/angular/fi/FiActivity` | A single icon component |
94
+
95
+ ## Example
96
+
97
+ A Vite + Angular 22 gallery (standalone components, signals,
98
+ `NgComponentOutlet`) lives in
99
+ [`examples/angular`](https://github.com/mal-icons/mal-icons/tree/main/examples/angular).
100
+
101
+ ## Repository
102
+
103
+ <https://github.com/mal-icons/mal-icons> · package directory
104
+ [`packages/angular`](https://github.com/mal-icons/mal-icons/tree/main/packages/angular).
105
+
106
+ ## License
107
+
108
+ [MIT](https://github.com/mal-icons/mal-icons/blob/main/LICENSE) © MALDevs
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@mal-icons/angular",
3
+ "version": "0.1.0",
4
+ "description": "Angular standalone components for mal-icons.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "MALDevs",
8
+ "homepage": "https://github.com/mal-icons/mal-icons#readme",
9
+ "bugs": {
10
+ "url": "https://github.com/mal-icons/mal-icons/issues"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/mal-icons/mal-icons.git",
15
+ "directory": "packages/angular"
16
+ },
17
+ "keywords": ["icons", "svg", "angular", "components", "mal-icons"],
18
+ "sideEffects": false,
19
+ "files": ["src"],
20
+ "module": "./src/index.ts",
21
+ "types": "./src/index.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./src/index.ts",
25
+ "bun": "./src/index.ts",
26
+ "import": "./src/index.ts"
27
+ },
28
+ "./fi": {
29
+ "bun": "./src/icons/fi/index.ts",
30
+ "import": "./src/icons/fi/index.ts"
31
+ },
32
+ "./fi/*": {
33
+ "bun": "./src/icons/fi/*.ts",
34
+ "import": "./src/icons/fi/*.ts"
35
+ },
36
+ "./package.json": "./package.json"
37
+ },
38
+ "peerDependencies": {
39
+ "@angular/core": ">=16"
40
+ },
41
+ "dependencies": {
42
+ "@mal-icons/core": "workspace:*"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ }
47
+ }
package/src/context.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ import type { IconContextValue } from "@mal-icons/core";
3
+
4
+ /** Theming context value for all mal-icons Angular components. */
5
+ export type AngularIconContextValue = IconContextValue<Record<string, string>>;
6
+
7
+ /** Default (empty) theming configuration. */
8
+ export const DefaultIconContext: AngularIconContextValue = {};
9
+
10
+ /**
11
+ * Injection token carrying icon theming (size, color, className, attr).
12
+ * Provide it in a component/module to theme all descendant mal-icons
13
+ * components; consumed inside {@link IconBaseComponent}.
14
+ */
15
+ export const ICON_CONTEXT = new InjectionToken<AngularIconContextValue>("mal-icons-context", {
16
+ factory: () => DefaultIconContext,
17
+ });
@@ -0,0 +1,91 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ElementRef,
5
+ Input,
6
+ type OnChanges,
7
+ Renderer2,
8
+ inject,
9
+ } from "@angular/core";
10
+ import { type NodeTuple, resolveIconAttrs } from "@mal-icons/core";
11
+ import { type AngularIconContextValue, ICON_CONTEXT } from "./context.ts";
12
+
13
+ const SVG_NS = "http://www.w3.org/2000/svg";
14
+
15
+ /**
16
+ * The shared SVG wrapper. Reads theming from the injected {@link ICON_CONTEXT},
17
+ * applies the SRS override priority, and builds a native `<svg>` element with
18
+ * `Renderer2` — no `innerHTML`, no runtime string parsing.
19
+ */
20
+ @Component({
21
+ selector: "mal-icons",
22
+ standalone: true,
23
+ changeDetection: ChangeDetectionStrategy.OnPush,
24
+ template: "",
25
+ })
26
+ export class IconBaseComponent implements OnChanges {
27
+ @Input() viewBox = "0 0 24 24";
28
+ @Input() nodes: NodeTuple[] = [];
29
+ @Input() defaultAttr: Record<string, unknown> = {};
30
+ @Input() size?: string | number;
31
+ @Input() color?: string;
32
+ @Input() title?: string;
33
+ @Input() className?: string;
34
+
35
+ private svg?: SVGSVGElement;
36
+
37
+ private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);
38
+ private readonly renderer = inject(Renderer2);
39
+ private readonly ctx = inject<AngularIconContextValue>(ICON_CONTEXT);
40
+
41
+ ngOnChanges(): void {
42
+ this.build();
43
+ }
44
+
45
+ private build(): void {
46
+ if (this.svg) {
47
+ this.renderer.removeChild(this.host.nativeElement, this.svg);
48
+ this.svg = undefined;
49
+ }
50
+
51
+ const { size, color, className } = resolveIconAttrs(
52
+ { size: this.size, color: this.color, className: this.className },
53
+ this.ctx,
54
+ );
55
+
56
+ const svg = this.renderer.createElement("svg", SVG_NS) as SVGSVGElement;
57
+ this.renderer.setAttribute(svg, "viewBox", this.viewBox);
58
+ this.renderer.setAttribute(svg, "stroke", "currentColor");
59
+ this.renderer.setAttribute(svg, "fill", "currentColor");
60
+ this.renderer.setAttribute(svg, "stroke-width", "0");
61
+ for (const [k, v] of Object.entries(this.defaultAttr)) {
62
+ this.renderer.setAttribute(svg, k, String(v));
63
+ }
64
+ for (const [k, v] of Object.entries(this.ctx.attr ?? {})) {
65
+ this.renderer.setAttribute(svg, k, String(v));
66
+ }
67
+ this.renderer.setAttribute(svg, "width", String(size));
68
+ this.renderer.setAttribute(svg, "height", String(size));
69
+ if (color) this.renderer.setStyle(svg, "color", color);
70
+ if (className) this.renderer.setAttribute(svg, "class", className);
71
+
72
+ if (this.title) {
73
+ this.renderer.setAttribute(svg, "role", "img");
74
+ const title = this.renderer.createElement("title", SVG_NS);
75
+ this.renderer.appendChild(title, this.renderer.createText(this.title));
76
+ this.renderer.appendChild(svg, title);
77
+ } else {
78
+ this.renderer.setAttribute(svg, "role", "presentation");
79
+ this.renderer.setAttribute(svg, "aria-hidden", "true");
80
+ }
81
+
82
+ for (const [tag, attr] of this.nodes) {
83
+ const el = this.renderer.createElement(tag, SVG_NS);
84
+ for (const [k, v] of Object.entries(attr)) this.renderer.setAttribute(el, k, String(v));
85
+ this.renderer.appendChild(svg, el);
86
+ }
87
+
88
+ this.renderer.appendChild(this.host.nativeElement, svg);
89
+ this.svg = svg;
90
+ }
91
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-activity",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiActivity {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["polyline",{"points":"22 12 18 12 15 21 9 3 6 12 2 12"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-airplay",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAirplay {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["path",{"d":"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"}],["polygon",{"points":"12 15 17 21 7 21 12 15"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-alert-circle",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlertCircle {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["circle",{"cx":"12","cy":"12","r":"10"}],["line",{"x1":"12","y1":"8","x2":"12","y2":"12"}],["line",{"x1":"12","y1":"16","x2":"12.01","y2":"16"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-alert-octagon",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlertOctagon {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["polygon",{"points":"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"}],["line",{"x1":"12","y1":"8","x2":"12","y2":"12"}],["line",{"x1":"12","y1":"16","x2":"12.01","y2":"16"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-alert-triangle",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlertTriangle {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["path",{"d":"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}],["line",{"x1":"12","y1":"9","x2":"12","y2":"13"}],["line",{"x1":"12","y1":"17","x2":"12.01","y2":"17"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-align-center",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlignCenter {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"18","y1":"10","x2":"6","y2":"10"}],["line",{"x1":"21","y1":"6","x2":"3","y2":"6"}],["line",{"x1":"21","y1":"14","x2":"3","y2":"14"}],["line",{"x1":"18","y1":"18","x2":"6","y2":"18"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-align-justify",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlignJustify {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"21","y1":"10","x2":"3","y2":"10"}],["line",{"x1":"21","y1":"6","x2":"3","y2":"6"}],["line",{"x1":"21","y1":"14","x2":"3","y2":"14"}],["line",{"x1":"21","y1":"18","x2":"3","y2":"18"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-align-left",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlignLeft {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"17","y1":"10","x2":"3","y2":"10"}],["line",{"x1":"21","y1":"6","x2":"3","y2":"6"}],["line",{"x1":"21","y1":"14","x2":"3","y2":"14"}],["line",{"x1":"17","y1":"18","x2":"3","y2":"18"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-align-right",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAlignRight {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"21","y1":"10","x2":"7","y2":"10"}],["line",{"x1":"21","y1":"6","x2":"3","y2":"6"}],["line",{"x1":"21","y1":"14","x2":"3","y2":"14"}],["line",{"x1":"21","y1":"18","x2":"7","y2":"18"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-anchor",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAnchor {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["circle",{"cx":"12","cy":"5","r":"3"}],["line",{"x1":"12","y1":"22","x2":"12","y2":"8"}],["path",{"d":"M5 12H2a10 10 0 0 0 20 0h-3"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-aperture",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiAperture {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["circle",{"cx":"12","cy":"12","r":"10"}],["line",{"x1":"14.31","y1":"8","x2":"20.05","y2":"17.94"}],["line",{"x1":"9.69","y1":"8","x2":"21.17","y2":"8"}],["line",{"x1":"7.38","y1":"12","x2":"13.12","y2":"2.06"}],["line",{"x1":"9.69","y1":"16","x2":"3.95","y2":"6.06"}],["line",{"x1":"14.31","y1":"16","x2":"2.83","y2":"16"}],["line",{"x1":"16.62","y1":"12","x2":"10.88","y2":"21.94"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-archive",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArchive {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["polyline",{"points":"21 8 21 21 3 21 3 8"}],["rect",{"x":"1","y":"3","width":"22","height":"5"}],["line",{"x1":"10","y1":"12","x2":"14","y2":"12"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-arrow-down",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArrowDown {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"12","y1":"5","x2":"12","y2":"19"}],["polyline",{"points":"19 12 12 19 5 12"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-arrow-down-circle",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArrowDownCircle {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["circle",{"cx":"12","cy":"12","r":"10"}],["polyline",{"points":"8 12 12 16 16 12"}],["line",{"x1":"12","y1":"8","x2":"12","y2":"16"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-arrow-down-left",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArrowDownLeft {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"17","y1":"7","x2":"7","y2":"17"}],["polyline",{"points":"17 17 7 17 7 7"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-arrow-down-right",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArrowDownRight {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"7","y1":"7","x2":"17","y2":"17"}],["polyline",{"points":"17 7 17 17 7 17"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import type { NodeTuple } from "@mal-icons/core";
3
+ import { IconBaseComponent } from "../../icon-base.ts";
4
+
5
+ @Component({
6
+ selector: "mal-fi-arrow-left",
7
+ standalone: true,
8
+ imports: [IconBaseComponent],
9
+ changeDetection: ChangeDetectionStrategy.OnPush,
10
+ template: `<mal-icons [viewBox]="viewBox" [nodes]="nodes" [defaultAttr]="defaultAttr" [size]="size" [color]="color" [title]="title" [className]="className"></mal-icons>`,
11
+ })
12
+ export class FiArrowLeft {
13
+ readonly viewBox = "0 0 24 24";
14
+ readonly nodes: NodeTuple[] = [["line",{"x1":"19","y1":"12","x2":"5","y2":"12"}],["polyline",{"points":"12 19 5 12 12 5"}]];
15
+ readonly defaultAttr = {"fill":"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};
16
+ @Input() size?: string | number;
17
+ @Input() color?: string;
18
+ @Input() title?: string;
19
+ @Input() className?: string;
20
+ }