{"format":1,"manifest":{"name":"angular-snippets","publisher":"vyloxi","version":"1.0.0","displayName":"Angular Snippets","description":"Components, services, modules, signals, routing and forms for Angular.","engines":{"ferrum":"^0.1.0"},"categories":["Snippets"],"icon":"icon.png","repository":"https://github.com/voukengdongmofrankysteve/ferrum-market","license":"MIT","contributes":{"snippets":[{"language":"TypeScript","path":"snippets/typescript.json"},{"language":"HTML / XML","path":"snippets/html-xml.json"}]}},"files":{"icon.png":{"encoding":"base64","content":"iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAmvElEQVR42u2debxkZXnnv8/7nlrufnulL900NDQgIBpFRYlKyCIYjWY0jcloEhmDKCYYJxNNgmPTCB9MiBLRwcSJ4/hRsjQx0RhUMAGMSgRkCUtDIzTQ3O6m97tV3ao6532f+eNU1a2qW3Vrvb0wfT6fK9bpOqfOe5732X7PJnR4bGaD3cAtXkABlPODb6/RM3LqzvOqrwzVv8KjxxuR1U5VBRGl80ObfG50bv53tGe/V+9fWn2u5vdTtSLiVXcIsjMh5kEj+kBKzN0rxlOPX8D3o+K35RY2mIu5xXXyXqXdCzaCuQq0RPhb17zx7Jx37wnVv1nR0/pNkEqKIRABhJQYtCMia49eaLO7dUu83j5n7TcK6lEgUiWvnpyP8sCTgZjvBEa+9p7xHz9S2ghXgWwCv2gbYDMbbGmn/ePYeW+K4A+96M+P2oRJYRkwAX3G+rQYtRgBxAjSGmdK5e7v+IVqh1zf/r21y2dq7YyPH14dXvPqJeudyfiIAp5JV/BW5Q4D1793172319KoZxugkuu/vuZ1L3Ve/swibx4yAQMmYJlNRkmxRgRRRXzxlWtbXN8dJ2nHwr4dgmlP1JK2oQhKbBHLU0EERdG8en/A5YOMd8z4EId+B+M/+jvjP3m0HWkg7XD9LWOvu0rhjwdtkFxmUn5ZkNRAjHGq4rvQ542I3/lm6A3HNyJWb55TO9qMlRvDimik3u+PCnLAF8yMiwqCXnfprvuualUaSCvE//raN4z5yH05LfbCQRNwfJB2KbE2Kr5qaZHbWxWjRwvhO3t27ZEKmluvRQjVuZ1R3mZ8RF7dbS5wl1y2/f5dzTZBww1wJ+cHF/D96O/WvO7V1vPNfhOMHWfT0fIgZUscL21Z34tH+MXR80cO4Rv/3tz/GsCI6L6o4Pa5fJDzbldk3NsvG//JfSVa1vt904jzy8R33DZkE2PrEoPR8iAVhKpSyfWtWN9a80lbFHWtndOmxG/lXlr1OrXNZ2i+ZjpeXyPOrz7rgVBVlgfJ4MREfzRggzHjzG1/teZVr76A70eb2WBbkgDKRiNs8pvXvPY1OPnukE0sOSUx6BJibFRjq7er53tnMS+GuNcecWW7Zzpfc73v+KJKiNS7Z8OsnXHhQWfdRR8cv//eEm0bboCStf+3685dafPy8IhJrjw5MeiCCuIvFuEPtUvXS8K3Iu61Kw9E27pOKzbBc2HWTvnCHpMyL7v0mXv2bKzxDqpUwFlsEADJm68OmMTKtYmBKNEi8bXOS6gnnNsTx70X9Y0UkfZERGtbXN/Jmlu5TgCHkhBj1yT6on6TWOny/qtaQePSYWst/tOPf+3GIRO8b5Xti0ZsIgibEP+YS7cYBl7nqqNyE3ggaYwBiQr4U+8ePF7fO/29Ozezwd7CFi2rgLLeP/680xV9ZKVN25MSAxKiIsdcuqOK8PMiCkCA6PYwq3td3iUIzv6dnXdvLdG8SgWE+BsHTCIxFqTVLUD8Viz77q3c3rh0nVj23Yj6Xq251etaeQaHynFBSgdNkMgR3ghwVUlSlET/360+7wILd5wQ9LvjbNrWE/2Li4Uffl++Vfz/UFv2nXld86QAe13O7Ypy1qM/f9mOe+/czAZblgCR958YkgTLbJJao6++gdcLTlocA69TX16brLnXHK9NZEqnHF97ToAIZYlNMiABoddPVLmB31j7+jOzUfTwCcGAWRP0SdjQ3z/m0h1ql65X9k9JCrwQ5XRnNOtTQfJl79v+wy0GIBO53x61SbvMJp1rEPc65tIdHpeOFqWCtmYLMGoTbtgm7GyU/20As/nMM5NO/VtSYkmJNa7B6+1cHC8m4VmQZL0mfK/WrD3mem3x3gokxZiEGJzqWzafeWYycAeGTrEi6wfEVgBDx1y6Q+7SSZN3o90b2vFnMf1isbB+74GhUwJv5Y39BKl+Y72iphHHH4vSLaJlL6DRAt9REBOzZzdrVsCj9Bnj0yZI5fBvDNRzbsoaUphi9tkxl+6QunQC6iAYArHxF6pEusbnXQ58vlpStEsbKT5hAqMJMWRceG7g8WdZEYxIVVbPsSjd4vvyYiCagdFz4bTrgBoClwL9PoLHPgzZZ8Gk4k3RTf6iFZFABEXOCkBWl56nZ+6NEUSknC00p8cU9S2+LIkzSisRCQHU+ReNS6cebB+c+AEIlgKZmvCcB4Zg4g6YeQqCwfiabnMjtUwWXR0YzOqkGEREVOcDQG2/BBF0No8Po/l5bIkA6UuVU10bcrwIGka4XL58XgAVwfSnoQakPpRpWL3y5cVCOAGr3gkD54AeKKoAX71BJIK9/1okvLS35kb5AgkRSYjBYFYHEapaY4N2bNmLoFFE+sxTCFYuLd5ZiopMCHftJffkc0g6Bd7X1+4CGkUEK5aQfsm6oryTOCXZebIPPYHmCmDk6A3WCLgCJI+DtZeCZorEr+E+SUG4A/b/CGx/vAk6JXy9cw7VQCp+tluXTozgMjmWf+jXGXn7BfP+Pdp7kJ++6TKiA5NIIog3SO2vGIPLZBj55bM58aaPz7vHltf/FvnndiKpZJUyPJqidGLAZeDkKyCxBnSiMjBfwf1pOPAfUNgPwUhsLPYiGluxD8X0MkqnxMUDPl8A79EwjDndezSMuXps4wfx2Rxx3UgDzL4oBfA+/q9z4D0+M1uxaY7OKJ0YcFkYOQdWvgN0usj99QL6Bdj93eLm0O6jsfUO08tgTaUqwJiqP0kEqPOM/uoFjP7qBUQTU2BtwwfXOvfAmENK+MUI1ijgHZz4/pjDcfUVtfRB9kmYfiI2FEviv5ME20bPpJU2Zy8x+4Yip2gPjG26nGDFUnwhrDLoWhWhR2uUDgvhFKy8CIZf25j7VYEU7Ple/H1s64RvrUaySVp4LzH76l8T1CvJ41cyduX78TNZsKatTdRsK2hRAok1SGAhsGBttfSQooSp+IurXZuXfnUcnhXQEJJLY8OPhep1AvAHYf/dYNKVrp/2OGys1Rtg0QhfsbXFGtR5lv3XX2b4wp8lmphGrG3jXgtE6QTEWjSKiCZnKOyfINx3kOjAJD6TjQlt4t/XMELDCB+G+DCMbY1FjNKJgSgDa94N6dNAsyULrI7x1w+TP4HpJ2Pxj7YejaVNKRc0jvnR47p3yuK+JPXXXPO7ZO57FB9FMYeqtl2vrhXSBa+EBydJHr+S4QvOpW/9WsxAH9HBSTL/+SQz9z+GqhIsGUGCmrJ1VaKZ7DyYrSexeQNRFgZeAmO/AToJEix8sz13FQmvvYwclqg895aDZnW8nUXptAbMFrIPPk7yhDGCZSMxJzpHat0aVn30Ep7/2A0Ey0fRyFUZKC0/kzFoIQQjrP7Y+1jxm28jedyyeddN/eB+fvqBTaz8b7/K2PveiTqHGAMiRJPTPPrWy4kmp5EgmOdtdAMkxQgmnHgJmAHQqfluX6XvXxiHfT9UTH/1fuyG8E2NwF4nXs6JtPhTbts4L3zu5pj4XhFjUedZccl/Yej8VxFNzoA1be7zWJz4MELSSU79ynWs/h+XxMT3HnUuFvWFWMQPv+Ecztj8GfpPOwk7PEiwZAQ7MhT//9Hh+NnoTRpWmfg2xvuXvRGWXbSA21cU/1T4/iYxFxzq/Jm0EyOwd7V0pSOxchl7bvp7Zh97KrYD1Bd1tuGEa6/A9KfLOH+rxC/v5ELIyZ+7kuE3noOGUcw2Rc6WRIAkEzFXe0//WetZ+pbz4++oxjiFKhpFPSV8GeJyYPph3eVA1EKxfgF2f1cRS13x37rt0YqjTK0R2LvEy3lrSwa4QoHn/+TGIpFAxKDO0XfGyaz68HtwE1Ox1d4qqGItbnKG5b/+ZkbfdB4aRUgiKMPPYgzR1AzT9z5C5uGtsbivUEvz/npI+BLeX5iCE34D+s4Ana1v+FX6/pknYfIJMH3zAz+t63ltOfvIdJN/1w4IoV6xw4NM3/0gu794SywFfKyD1XtWffBdDJx7Nm46g1jTfNEC6hxmqJ9VH7h4juuJ+6ogwr5/+lcePv+32PKOK3j0LR/ksV+5nNxzO+fiE4vA8ZWupstD/wlw/MVAdgHiV/j+u4u+v9jOLft23FizmImX8x7cOczIELs+/RVmtz4Tu2xFQkgywdprPxyf89q8GtEYomyOgVecQd9pJxVdrXgzYYSZB7bw1IeuIdw3gelLY/rSTPzwAZ763WtiAGqB3dpN4mUV5DsLJ10KwSrQQpN2HGXfX7Hp+tzfq2TTNpDAzhIvF9q6Elhcdpbnr7wxJpYWCeccA684g+Mu/3Wig1MxiLMQcUTQQsjgOWcVN5evotKuv/4HNAwxA32o93jnSBy3jKl7HmbqRw8UjVHX08TLSp8/nIYl58GKt8ZW/4IcXfT9J6p8/+4J30pwyGiXJVXtSQFFnSMYGWTqznvZ++V/KgJDc6pg7Ip30//y03HTmaagEkZIn7KmIlskBpp8vkDmP7di+tJl17J0jTpP9vFtdRfQq0IX72MdfvIHimK/RXw29v3nPndL+FYY1SxWLd2CSIHzmJFBdvzpl8htG69SBSadYu0nrygnlEhDjlSwhsTyJfPSaqMDk0QT06it06NQtSpZpR3d39J3LETTsOpCZfCcYqzfNJGKFb6/7ach+NNpZFIbBoO01gjsdXuURsyrSBAQTc6w/X9+riLzNUYDRy/6WZa/85ficLIxjd0biW2H+baGj3+jgdKVBhZ/1+VuAr6gpI5TTrxUmhO/wvffX/T9JTHfPm3FpWv92auhNgOLVUu38AtW5whGh5i47Yfsvflfyqqg5I4te+cvVcUI6t5LwRcK8/7NDvVj0skYa6i9yBrs6FDHHsBCuQhilDADJ14iJNfEPn1TbFuAEF64TYvAfLkpICqKipY/x+eo/ty26z5PBXRH+Fazceq6vs5jhwYYv/aLFMZfQIyNXbjKnIKFjEDnCPccqJClsXsXjAyRPuUENB/OuZTFaJ+kUwy98qxyBhO9Khw1EGZhyTkw9o6FEb8q468PMo/D5CMx8ucKio/iP43iegFf8Vd1LpwPFbfiwbVhBNJ1SdWC3KWKJBIU9h3kuU98PiaStr6BVJXsE8/MwxsAxt77DtxsHl+IYohZDPlde1n2lvMZeOn6ortoOtPzDUwydXDy+6Vxoke9F5GAvT+IbYfEUiUxQtVfUPO5fG4YksvApprZDLogDYLFao/Sqlj1zhGMDrP/W3ex5B9uZ/mvvQl1vikYpF4xqSRT//HQXFAHijCzsvQtb2TdJ3+P8c/fjJvJIkHAyg0Xccp1H0G9b2gHdJJxKxYKkzD2y8LIa1vj/tJ1zMCaX4M175SWWzdrceOE++C+K3yMMAa1RSWtBfiCXpZUtQQJ1xOp3mMG0my/+iaGX//KYjBHi3mDDQodvcf29zHz8JNM/vv9jF7wGjRySGDLmUerf+/drNhwIblnxgmWjtB/+rrWIOZ2Ei8lFsXJpbDu0hY5vxYDGm7zAgcsgae+oMzuguRonGbWCuGb4gA9KZsuWWg1f1rMS593f/WYZJLCrr1s33RTEaTxde8xn4sM26/7Ij5fQAIbG5IlG8F7kquWM/y6n6H/9HXlf8vv2F3BSt21wcEQG37vlgUTPRY8otb/NA/0w8E7lOe/oSSGS8RvLu67QALbS7yMda4gQRAjeiLlII800KDqHHbJCHu/fjv7v3XX3HUlY7AY2aNGctiBfqYfeoKnfv9TsSqwtgz44LWc+UMxeLT90/+Xvd+8o3x9le2g2lbiZSnDd/glsLpZokczsdjKH7HojyZgyw0a13JJ64SvbwSqokaaQI9tJF6K4DKzuKkZooOTRAencFMzuKlM2RJvFLFS9Zh0iuc2/S9y28aJJmeIJqaJJqeJpmaIDkzOeQlVNsQQe79+O4+96w+Y/smjVTmBkgiQREBh936e+eQX2Lbx8wQjg/M9ktlcDBCJtJV46R2cdIlgBjoT/+0c6kCG4bmblcmtWi4WaceTKZeaF5lLbgrW64lLV7B2ZCmhd7GMli5q6VQx/WkkkagWO87hZjLNy7qKCR52oA+TSs7TydFMZl59YSx1LNF0BpNMMPSKl9B/1qkkVyzB5wvMPv08k/c8TGH3ftQYXvb3n2b0DefEUkJiAGr6oSd46G2XI8lEXU9E6xhw0TQsfyOc/ReCznQg+tshfjFeMP0Y/Pgy1/C3mtluCiSsZTw7xfZ9ewg0chT27CfMgy4dxlhTJRrbzhASIcrMgs9W28xFrmxqdKoiiQA3m8NlZutYTLa+VayeYGQQjRyT9z7CwR8+OFdQZw12aADpS5FasZShn3lJGQco2RqZx58myuZIpFNxIUqzDe/icq31l0vzRI9eHCbOKt7yaY/PQzBQzf1NaaOUjerCwUlyB/bifI6glCQYTU7islkSy0cxA0VA2msZbWpnM4i1xVz26hTERj6+1s0etlV5c1pF7drfM0SZ2dgmGOzHjgwVZxbNfcfn8kQTU5z6p3+AHRqYczWLonD/HfdUAUPaxH0rHIRTLpM40WOiNbevK9G/BMa/phx4UEmOzpWJtUJ4FZDA4HJ58vsPQnYWxSNIyQ2M7UEfhhR27cUO9hMsHUVSiVhMVsjhlqRAHcXU6iaihtDaJBPYz+bpW7+W9f/9vez8yjeY/sljRBNTRbTQlMQDieVLOO0zf8RxF18U4wBFSScizG4b58Cd92CH+vHONS/szEF6NazeADpTgek3T19se0xXKVYw+yRs/StPYqDVItEi2QIDkSO/7wDhxBRePUEFZwXVoIaU9WyUzRGMDhOMDkFgKvL1Dn/jw1qVowrL33YBy992AZlHn2LyvkeY3fY8bmYWO5Cm/7STWPqLryN1/ErwWg464T0EAduu+yLRVIZgdBCcX7iwU2IY9vTfFxLrgAkg1aKl74rxgXadhAQ88VlPOBFjBuqaSVDAxrstmpohf2ACFxYQTNnxKyOBWvdGJs6xP3CQaCZDMDqMHRoort4fGYSvxUayOWxfioGXrmfgpesbcFPM8SXkUIKA5z5/M7u/+W8kRofqbvJ5RpSL9e/4N5Xxb7W4llJV0HI486NSzvZtSfSPwp5/UXb/QAmGqolfl/BGwMZ2WDgxSZTNFsdN2bo/2gQJjPPtwz37cNMZ7JLhuEEDpY3Q++bGHTVwMCZO/lAPhXCuPEzKGiDW78bE3UuK1UPPXP9/eO6zXyUYHmyJ+GXkzyv7f9wYQdQ6VUHhFIxdJJhhWvMYFEhCYQdsudEjyQVqBEqEN4LLFwgnJgmnZ+LgVxnq0bo1F0HzRcdtWtzsLG42h+lLY5cMFTeCKaZVF8OUh5DwZTPBGFwmS/75XaTXjkEqWaVmax/LzWTZf9e9jH/h75i49+FYxam2rd6CwTY2u43xghWvLb5xbdHtG4CffsqT3QHJJZVwb20ltuDyecKJKaKZDF49ginnQ2grwaDmka94J8UbIYvp6yNYMozpSxfLsuaMxVqsvJHl04s2byYRUNh7gAff+kGGX/VShl5+OukTx0gsGYl9+sgRTc2Q27GbmUefYur+x8g+vR2xhsTSkSLnywJG7nwbqZR4XBuZbOgVKdg0jJzZWo5ACfA58H1l/FYlUYn1l0RNPJezAeFNy+8vaL9LRvGHSxIhncIODcQ2QjESV+YoY5TISa2JrL0U/8VHig5Osfef72DPP34PrCmWfM3p/hj0EUxfimCgLw4t5MN2mys1fqZEoKhKCU6u8hrCOHTbv0agsGAJQpkto4Mx3Ku1OsbGBmyUmSWcmsZlZ9sifK3NF2jH7VFM2b92uRwyMY0d6scODcbwK4pOZ0SWDHuTTHhVL9RpRNaz1m8CgYxWgg7VnCtzrKtaH+yWBmcXbmEnqHqJ9k9akokYqKqUBhIneQyuE+ySJsUhFYbfs3/hmdjqSS0T1MWGnTpHNDlNOD2Dz+WKtDFVBl677zOoxYmlbcs+lggahoQHJogmpjEDfRr09zH2gXftHLvsXbttOunVO2lSitjh4Reqcmv56oXONHXTjNU937pzydN/9tcnRjPZgKCi3kHizJ4lZ0vsLmab6P1BmLpf2fY3kFoa10i4QoFoOkM0k8VHhYr1Skdd3KtUQO9cOikZjBpN75Hj3vM7O0+66kPb4vjVi/6QNb/19p3JFUvDh9//P0+P4WotW2AmBUvOLoZ0ZWGsQJ2w5TMQZkJEchQmZ/C5AoorKf+eSdA6RqB2d3MR0Ehs/1K39o8vfQFI+CgyxgTaCWcdTYePfGrlm99wcPDsUzPT/7l1UPrTinrxUWzBD65bWP9rBLJcePYLWcb/bZLA5HGhK+6LYj+vHjSMrqVy0KjxSMeGmipiAzUD/T6u1jLF5HPzot4A6kOBANOX8pTFf9wPsH+1ECyNwaB6G0A9MCBkHg158LrdiPd4LwhSHcLtQRvf2vOB9orwpZWYQMOZfcHur/3z0hOueM8OH0UpjMGIUa8q7aMCHU+9P3SHc9h0qjD9xLbB6Ye3Dko6qXgvWPChsORsQfrr9wMsJzQnhQev3E8h60lag3edgWztdjZtYgS2379fVQWSPPOJG9am1qwsrHzHmw7SlZl2FByBZXrrs4OPfvia9ZoPjfSlVb1H1aOEjJwVgNZHgDRSZLllx83T7PhRhoSVecTvNeHbRALbHNygsWkRTc4Ej7zz8pcMnn3WjBnodzgnjVyq2jv7Ot3FTCqJSSXLGT6xn2/K2b0lq7sqEqna8qSzOoMVqusNysEgmS+EvDL58NYhP50RH1j8vgPiCyGuUECsY3j96vr6X4G0If9sxANX78NI85Ywve5sGnRSEg3Npm9qMTkuYOaRRwdLJO2kz219b8NiCBAxSCqBGBu3jgVMIjGXQ1ebWi7S2uYuKV2dw/5LUJwPI1CPDx3qInw+RL3Dm2LTSx9VTeoaOSlNalUA4XwRqE6RpYZHPrKfmf0RqcCikR4Swmv7SGCbgxvKaGDfvKkotUMMqmDTOuBM2UXSigJPjQEdzcVN9mV2tpwaFvteBpMIKnIHDKaijrBxm/q4U7mvbBsXReWyNR+58ubQ8hMKeF8EvU3sAFrBO8eyc1KYUYMecIiVaqt/iWXPrVm2fXOalDX4SBd9ZkHbSGDXgxuKL2axBk9Kqf66RJAoLPNfVMj3AHauIHKtlVROOKkz36eIiC97Tbp+Yl5SiPY77v/4XvCg5tAOq9B64eD6RuDiTOzo2b3mDbqRKoRSarhb6qxHqq7TYtd6rbhP7b0bp6fN9QhQEgnDslemIF9dh6iRIssMW/9kgoPbC2XR3+1kFqVDJLCVStKuOGlueIh28+DdXzdvZVJqGYVq7wZPmngDDCwL6FsdQKFiRocDGbFM/DDHli9NkLQGdbrowyraNAJ7NF7dGC8+MqiKVvUKpa7eb2QH1LcftMPr5p2LKwGM0bihr0q3G1IEHJ7Rs5PYpQad1LmkUQta8Pzkj/biQk/CmPmh5UNA+BL4F9CgM0AvuNL6WeMS/ZEkgkgqQKCmBt8C5+pdrW0W4WhVqguqqiK56ZQnQLuIrFW6jR5YcW4fBFJOT9cIZIXh6c9OsHtLLjb83OIMq1iY8POCQT2exSdxwfKyd73tnvWbrngwGOh33jkxxrbfFLzNKJ2vM3ep4Xd9vCmDRMJvu+lv1m+74Us/5zKzaR/j7tKxenFKYA3LX5WOE0CMlOHemUcKPPTpAySMLJjX32vCN/rXoJb/pVsda4w3PmdWbHj7PS/72xu+CwwcBVienPHJD9+THluZfeR3P/4O2pICOi85xauSHrYMrgsgr3GMzMdw7wNX7iOfcTHc6xu20uqxTaTdIYEtz6UTVLwzPtUfnnLNFQ8AAz5XCEwy6X2FO3gkHcYY9d6Ljwoj6y7/jad++ud/vTv3zDOrnEkqXqXdGT0YCJ2y8vQkwXKLZuICG1luGb95mvEfZYpY/6EnfNs5gZ25dAom8MHIUBz9DgLFxC/6SGV/Y4z6EAG8pFKhtlAaqw3rBmKXZ/lr+iAt6JRH+gy5ZyPuv3ofRqSO0ddrz0h7nxPY0ngyRZyxamenU8/d+LVTT7v2939MWBjxBEe2AggjCfrSmQM/emBsdtu2VV4ScX5fJyPZvGJEWP6adAz/epAh4eGP7Ge6Au49XISvEw7uAeGrMmAVJWD7Z798ft/asZkTLnvXU0e8BRAEuu/uB8buf/dH3qqFQkIlqdUIn7Y8B9h5JT1oGTk9CRmPWWbZfWuGp4twb4z1Lx7h2wWE5NOs1TGSrCJJhLbXHmWBPEHBIXhS607cZfrSBe+9qZfDJj2bSLJwpK+hyC4CQTNPPrtafMFUcn97ay4WgHjPipem+YVvrQYPUV65/aJxpraH2OLMpMWy7Fu5zgMBwh5C9hDOIYG9IXwFx4jFYzX3zLNjtXUzvUP+OuDShueSaJn4nd1LjOA8LH91GukzYGDr9fvZvz1HOgjKon+xCU8bPQ4DbdIVpOMHjUWoeElWQUC16deNSqqkTvxk/nVa97qOnturoF662US+2J10+TlpGBAO/GuWR790gJS1DeHeRYvGdm4Eag+xdygVS9RD4ppBtY0QvHowMN0QvxdrlhgASqUNy16eQqc99/3JXlyoJMx8y3+xCU+LPZ8CXRAoPDxTtnseku5BZLI5+glOlYEVhr4zkjz1uQl2Pz5L2tqmcO+hXXP1XQOpSMNqhgR2SHhdpEjeoR4IveCQbYoG4HFv6Cf3fMT91++LAz3+yNvsdcPBi0B4VMSLetNakIemRVmtX9fonLYVeKqyKcT4OOG1NkZQzCAsGjqrXt/HA1fuI5f1pK0p4/2dJN70bsM3lnILGIHdc1NCQxMFyQLWhqJzhYGt6O9K4vsevYTOil1ik8MWZvsctmx9aI1scM4zuCTB5JMhz353mpRpBPf2zqXrhvBVKkA7/MGGO1ZQQRn5xTfcesanPnpHMNwf+cjL0ZAXXhtNjB1no0/8+Zd+ZvtX/uHiKFcY0Jqa96LDg88pj//vCfAyT5wspkvXjrrURh1CepaLJuITGpqhX3j9t8+9/ctfBkY7CNsfaYd51V9e/e3U2HFTWzd95sMRpoh41rT9n1VK465UD71L166dVLdbuHSXhKioN1EilTvjU3/wb8CIy+UCEomjmfgA2Hx+2dkbP/Tg03/5tWd5Yfe6SAKPqqmXDVQ582cxXbqu1VulEag9culi4Wh8csWyAmBIJNRae9RvAOecseAlmcg369B1JLux2ignsBt3qdIcUjHeFmb7f3rtX77y5V+8+lafzS8nYdQeweHgZkeYj0xiaGhy/F/uPLmw84WTnVjVOnWORyLhm9kCDWsDO05JUpUIy86vfmND39pVE6d9/PKHjnL9L4lk0u/89l3r7n/fH12qUZT0EqigcqS5dJ0MupRPsVZXkWCsGA2kR7loccKlYletfCZIJnJe1YiIthLZ801/r7tOpNr23ZHs8y+cajQyEXPEP1JcunbOaTkaWGAvYaUKmLNgeyGufNHtlxdeWFfoYfRrMaHqhV+cJZJApU7a+JFk2bfdIELrNA7oRcSq5AmHEvjDGfbsSQewWLcZWbBm4EgnfDWdK9zA7vXUgi+hjqt0SKN0hzHx8mhYc9Cs3elRH6X7/zEyuQDhe4gE0rtausUqHH2REb7Xa9aKzrXSflRQjyj35lAS/mhec22/qaBe+85DTfjDHOfnaHXpuukMUuqfajzsCGP7UBcGD5oPmO5k1Gz7cwtp0O1COxqvrodpzRymNQvgUS22ntxhFHZoHQi705Hyh5rwrRo77RHwxbnmis+l0zsM8FiE4iskQCcvgQ5fAl2+BG0y2rK9F/PiXvPc5BpVF595zFi4J0TJV3XM1x690Ma5aJ1x0sKir3MpcPStuRvpUUAlxBPAPQGYf8/i8rO4VB9BwxF4x1y6I9ula9Xts0Aeb/L4fID8u5ll4GmFp2bxaJ3hZ53tNK3bl7Zzjmhu7LT3nM27obQv/o/sNVMMzoH6HB6HPtXH0qfNJrYULHprASWPeumS8N1auXRo5dKWZd+LTdQ94Q/HmguoD1ECzK2b2FIwMRxovzKDc5M4K0jdLNxjLt2R59K1umatSHadxtks3iXhKwBmA9g/ZPsWh/5gFi8uHlByzKV7Ea15rnUtLocXh//BdbywZQNYs4HSWHp7dRbPBBGmqRQ45tIdTWvWOe5nFiWBXF261lwMbiOYj/HcnTn87ZM4G+KdOebSHRUuXbM1l+I7BdRN42yEv/16dt+5EcwtENP5quKXUwRXZPDhXqJSY6uOrVwOo2XfW8Iv/ppZ5DUb0AkimcWHAfYKaqdBCvjNYD/Gs1sVuTaDNweJXFDx0MdcuqNvzaX8v0mcy+KNh2uvZ+fWDWA3FVMfq1KbN4PdAP4a1tzWj/ml40lEKUxVTtexKN3Rs+ai6I92EwazuO/dwO4LLy6K/rpTXB4rzjozJH5zFr9nN1FQ8gr8MZfuiF1zI70foW4fYZDD7+lDf1OAW2p+omoDbAK/EeRKntkN/EqG6OA4BetQZ2usymMu3ZGz5trPpkj83YQ2iz8I+ivXsWf3xlI0uNn4rc1gLwa3iTWvtuhtAwRLjiOIUtggail1/Fji5eHoBVTS+Xl8tJcoyOIOOrjwRl64bwPYStG/4CCvomsYbGT8PodcmMXt2kEYTBBGQTGB6JhLd+hdukbPWZx/ToDoFFH0Qqzzd5WIvxGCesRvOoCvJAmuYe2Y4r6cxF7Yj2EZgUtirCsv/ViU7lCvuWqgOBCibj+RncUTorcp0SV/wb5djTi/5QmMlTfYxOqrBP64D5scxvphrAaI8aj4noSRXxyJl4u55kpo1yDqUD9FJNN4M4srCFx3A7uvqqVdo8M22wBbQDeCuQv4Oabv+kVGvlFA12XR03KoKeAlQKIAKU3okUblyN3kr7dX/KgdXtd+NVHnz9nammWezhYV0Ah1E0T2IJGZwkmE/46FDZ9h9+bigBpzUwtDFtpq4V5SCQCf5IQ3efQPFX5+AGsSQB+GFMYnELXFUVtSnBLTyVyiw18/2OtCjfY3ZzFVT11MdMnjTVHMk8F7A3dY5Po/Z9ftrXJ9V0N4N4K5KsYLFOBTrDm7gL7HwZsVTkthUwmkLFqCmp9oZXZnp/V+vS6iXCyrvp37heVwrhKn7vk8yJMGvpMk+NqfMv5IaVDNVSCb2hzT3vEQhw1gN8ftkBTgTgjuYc0ZIXKeQ18Zoa9QON4gq128i6VZ4XaviNUtpy428Vu8lxpEPLrDwE6LeVDQByz+7jR7Ht9EnL2nILXoXjvH/wN1pAfj5ScbTgAAAABJRU5ErkJggg=="},"snippets/typescript.json":{"encoding":"utf8","content":"{\n  \"Component\": {\n    \"prefix\": \"ngc\",\n    \"body\": [\n      \"import { Component } from '@angular/core';\",\n      \"\",\n      \"@Component({\",\n      \"  selector: 'app-${1:name}',\",\n      \"  standalone: true,\",\n      \"  templateUrl: './${1:name}.component.html',\",\n      \"})\",\n      \"export class ${2:Name}Component {\",\n      \"  $0\",\n      \"}\"\n    ],\n    \"description\": \"A standalone component\"\n  },\n  \"Inline component\": {\n    \"prefix\": \"ngci\",\n    \"body\": [\n      \"import { Component } from '@angular/core';\",\n      \"\",\n      \"@Component({\",\n      \"  selector: 'app-${1:name}',\",\n      \"  standalone: true,\",\n      \"  template: `<p>${2:content}</p>`,\",\n      \"})\",\n      \"export class ${3:Name}Component {}\"\n    ],\n    \"description\": \"A component with an inline template\"\n  },\n  \"Service\": {\n    \"prefix\": \"ngs\",\n    \"body\": [\n      \"import { Injectable } from '@angular/core';\",\n      \"\",\n      \"@Injectable({ providedIn: 'root' })\",\n      \"export class ${1:Name}Service {\",\n      \"  $0\",\n      \"}\"\n    ],\n    \"description\": \"An injectable service\"\n  },\n  \"Inject\": {\n    \"prefix\": \"nginj\",\n    \"body\": [\n      \"private readonly ${1:service} = inject(${2:Service});\"\n    ],\n    \"description\": \"inject()\"\n  },\n  \"Signal\": {\n    \"prefix\": \"ngsig\",\n    \"body\": [\n      \"readonly ${1:count} = signal(${2:0});\"\n    ],\n    \"description\": \"A signal\"\n  },\n  \"Computed\": {\n    \"prefix\": \"ngcomp\",\n    \"body\": [\n      \"readonly ${1:double} = computed(() => this.${2:count}() * 2);\"\n    ],\n    \"description\": \"A computed signal\"\n  },\n  \"Effect\": {\n    \"prefix\": \"ngeff\",\n    \"body\": [\n      \"effect(() => {\",\n      \"  $0\",\n      \"});\"\n    ],\n    \"description\": \"An effect\"\n  },\n  \"Input\": {\n    \"prefix\": \"ngin\",\n    \"body\": [\n      \"${1:name} = input<${2:string}>(${3:''});\"\n    ],\n    \"description\": \"A signal input\"\n  },\n  \"Output\": {\n    \"prefix\": \"ngout\",\n    \"body\": [\n      \"${1:changed} = output<${2:string}>();\"\n    ],\n    \"description\": \"An output\"\n  },\n  \"HTTP get\": {\n    \"prefix\": \"nghttp\",\n    \"body\": [\n      \"this.http.get<${1:Item[]}>(`${2:/api/items}`).subscribe((${3:items}) => {\",\n      \"  $0\",\n      \"});\"\n    ],\n    \"description\": \"An HTTP GET\"\n  },\n  \"Routes\": {\n    \"prefix\": \"ngroutes\",\n    \"body\": [\n      \"export const routes: Routes = [\",\n      \"  { path: '${1:home}', component: ${2:HomeComponent} },\",\n      \"  { path: '**', redirectTo: '${1:home}' },\",\n      \"];\"\n    ],\n    \"description\": \"A routes array\"\n  },\n  \"Route guard\": {\n    \"prefix\": \"nguard\",\n    \"body\": [\n      \"export const ${1:auth}Guard: CanActivateFn = (route, state) => {\",\n      \"  $0\",\n      \"  return true;\",\n      \"};\"\n    ],\n    \"description\": \"A functional guard\"\n  },\n  \"Reactive form\": {\n    \"prefix\": \"ngform\",\n    \"body\": [\n      \"readonly form = new FormGroup({\",\n      \"  ${1:name}: new FormControl('', { nonNullable: true, validators: [Validators.required] }),\",\n      \"});\"\n    ],\n    \"description\": \"A reactive form group\"\n  },\n  \"Pipe\": {\n    \"prefix\": \"ngpipe\",\n    \"body\": [\n      \"@Pipe({ name: '${1:name}', standalone: true })\",\n      \"export class ${2:Name}Pipe implements PipeTransform {\",\n      \"  transform(value: ${3:string}): ${3:string} {\",\n      \"    return $0;\",\n      \"  }\",\n      \"}\"\n    ],\n    \"description\": \"A pipe\"\n  }\n}\n"},"snippets/html-xml.json":{"encoding":"utf8","content":"{\n  \"ngIf block\": {\n    \"prefix\": \"ngif\",\n    \"body\": [\n      \"@if (${1:condition}) {\",\n      \"  $0\",\n      \"} @else {\",\n      \"  \",\n      \"}\"\n    ],\n    \"description\": \"@if block\"\n  },\n  \"ngFor block\": {\n    \"prefix\": \"ngfor\",\n    \"body\": [\n      \"@for (${1:item} of ${2:items}; track ${1:item}.${3:id}) {\",\n      \"  $0\",\n      \"} @empty {\",\n      \"  <p>Nothing here</p>\",\n      \"}\"\n    ],\n    \"description\": \"@for block\"\n  },\n  \"Switch block\": {\n    \"prefix\": \"ngswitch\",\n    \"body\": [\n      \"@switch (${1:value}) {\",\n      \"  @case (${2:1}) { $0 }\",\n      \"  @default { }\",\n      \"}\"\n    ],\n    \"description\": \"@switch block\"\n  },\n  \"Defer block\": {\n    \"prefix\": \"ngdefer\",\n    \"body\": [\n      \"@defer (on viewport) {\",\n      \"  <${1:app-heavy} />\",\n      \"} @placeholder {\",\n      \"  <p>Loading</p>\",\n      \"}\"\n    ],\n    \"description\": \"@defer block\"\n  },\n  \"Two-way binding\": {\n    \"prefix\": \"ngmodel\",\n    \"body\": [\n      \"<input [(ngModel)]=\\\"${1:value}\\\" name=\\\"${1:value}\\\">\"\n    ],\n    \"description\": \"ngModel\"\n  },\n  \"Event binding\": {\n    \"prefix\": \"ngclick\",\n    \"body\": [\n      \"(click)=\\\"${1:onClick}(\\\\$event)\\\"\"\n    ],\n    \"description\": \"A click handler\"\n  },\n  \"Router link\": {\n    \"prefix\": \"ngrl\",\n    \"body\": [\n      \"<a routerLink=\\\"/${1:path}\\\" routerLinkActive=\\\"active\\\">${2:Label}</a>\"\n    ],\n    \"description\": \"A routerLink\"\n  },\n  \"Form field\": {\n    \"prefix\": \"ngfield\",\n    \"body\": [\n      \"<input formControlName=\\\"${1:name}\\\">\",\n      \"@if (form.controls.${1:name}.invalid && form.controls.${1:name}.touched) {\",\n      \"  <small>Required</small>\",\n      \"}\"\n    ],\n    \"description\": \"A reactive form field\"\n  }\n}\n"},"README.md":{"encoding":"utf8","content":"# Angular Snippets\n\nComponents, services, modules, signals, routing and forms for Angular.\n\nType a prefix and press Tab. 22 snippets.\n\n| Language | Prefix | What it inserts |\n| --- | --- | --- |\n| TypeScript | `ngc` | A standalone component |\n| TypeScript | `ngci` | A component with an inline template |\n| TypeScript | `ngs` | An injectable service |\n| TypeScript | `nginj` | inject() |\n| TypeScript | `ngsig` | A signal |\n| TypeScript | `ngcomp` | A computed signal |\n| TypeScript | `ngeff` | An effect |\n| TypeScript | `ngin` | A signal input |\n| TypeScript | `ngout` | An output |\n| TypeScript | `nghttp` | An HTTP GET |\n| TypeScript | `ngroutes` | A routes array |\n| TypeScript | `nguard` | A functional guard |\n| TypeScript | `ngform` | A reactive form group |\n| TypeScript | `ngpipe` | A pipe |\n| HTML / XML | `ngif` | @if block |\n| HTML / XML | `ngfor` | @for block |\n| HTML / XML | `ngswitch` | @switch block |\n| HTML / XML | `ngdefer` | @defer block |\n| HTML / XML | `ngmodel` | ngModel |\n| HTML / XML | `ngclick` | A click handler |\n| HTML / XML | `ngrl` | A routerLink |\n| HTML / XML | `ngfield` | A reactive form field |\n\nThis extension runs no code and asks for no permissions.\n"}}}