From 2117093b7858deae070f8c2c88814675ac7a1464 Mon Sep 17 00:00:00 2001 From: "Meer Arfath (MEEA)" Date: Mon, 21 Mar 2022 16:43:51 +0530 Subject: [PATCH] updated gitignore --- .gitignore | 2 + runtime/dist/bundle-src/custom-widget.js | 1225 ------------ runtime/dist/bundle-src/custom-widget.js.map | 1 - .../kpi-overview-runtime-widget-2.0.0.zip | Bin 340568 -> 0 bytes .../bundles/custom-widget.umd.js | 1762 ----------------- .../bundles/custom-widget.umd.js.map | 1 - .../bundles/custom-widget.umd.min.js | 16 - .../bundles/custom-widget.umd.min.js.map | 1 - .../dist/widget-library/custom-widget.d.ts | 9 - .../custom-widget.metadata.json | 1 - .../widget-library/esm2015/custom-widget.js | 10 - .../color-palette/color-palette-component.js | 103 - .../color-picker/color-picker-component.js | 80 - .../color-slider/color-slider-component.js | 94 - ...gp-kpi-overview-widget-config.component.js | 188 -- .../lib/gp-kpi-overview-widget.component.js | 326 --- .../lib/gp-kpi-overview-widget.module.js | 77 - .../lib/gp-kpi-overview-widget.service.js | 346 ---- .../esm2015/lib/preview-image.js | 20 - .../dist/widget-library/esm2015/public-api.js | 24 - .../widget-library/fesm2015/custom-widget.js | 1224 ------------ .../fesm2015/custom-widget.js.map | 1 - .../color-palette-component.d.ts | 37 - .../color-picker/color-picker-component.d.ts | 30 - .../color-slider/color-slider-component.d.ts | 32 - ...-kpi-overview-widget-config.component.d.ts | 55 - .../lib/gp-kpi-overview-widget.component.d.ts | 51 - .../lib/gp-kpi-overview-widget.module.d.ts | 2 - .../lib/gp-kpi-overview-widget.service.d.ts | 36 - .../widget-library/lib/preview-image.d.ts | 1 - runtime/dist/widget-library/package.json | 22 - runtime/dist/widget-library/public-api.d.ts | 20 - runtime/dist/widget-library/styles/index.css | 1 - runtime/dist/widget/aab5230a050927447e5c.js | 2 - .../dist/widget/aab5230a050927447e5c.js.map | 1 - runtime/dist/widget/cumulocity.json | 19 - runtime/dist/widget/importManifest.js | 1 - ...idget-CustomWidget.e45db875201eb775e4c1.js | 2 - ...t-CustomWidget.e45db875201eb775e4c1.js.map | 1 - ...ime-widget-stylejs.459ef705f8f9cffaa829.js | 2 - ...widget-stylejs.459ef705f8f9cffaa829.js.map | 1 - ...t-vendors~30536edd.edd64d774274cc93dcc5.js | 2 - ...ndors~30536edd.edd64d774274cc93dcc5.js.map | 1 - ...t-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js | 10 - ...ndors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map | 1 - ...t-vendors~5a50f6a0.8586e64f62002fa0693c.js | 2 - ...ndors~5a50f6a0.8586e64f62002fa0693c.js.map | 1 - ...t-vendors~e4dfd1bd.e4e2abf51ece4378c310.js | 17 - ...ndors~e4dfd1bd.e4e2abf51ece4378c310.js.map | 1 - ...t-vendors~ffdf5190.82f3227bf0ced29661b8.js | 2 - ...ndors~ffdf5190.82f3227bf0ced29661b8.js.map | 1 - ...iew-runtime-widget.c3ab952931da8599a6a4.js | 2 - ...runtime-widget.c3ab952931da8599a6a4.js.map | 1 - ...d5b817ecded2405cc4f801144284f03dd60c45a1b3 | 1 - ...64d8a12c9f57e67c7506535404515a7b8f6d3307e5 | 1 - ...964ba2c6b4775b12f2e5079db245f5e216d47e189e | 1 - ...3925ef94c73a12a5071bb05ab1b028416dbf024ed7 | 1 - ...935980a59611a9473f9a643b247ece628ce6218327 | 1 - ...e76bc943e91cc5ce9d9c08ffb388b530925fca1e3d | 1 - ...9aabb00fc7544c18bfb016dcdb0dbd99f56f4701ff | 1 - ...8f66d88ef99a3992c76d8f8c5b78d639650bbf48be | 1 - ...266d4c03d6e768304b9d477bb2c20d390884ffa6ea | 1 - ...c7bcd5584029be745aa1e562f9807af52ac5198710 | 1 - ...b2518bbd5e846b518164d5cb0f960ab6744e191db0 | 1 - ...ad3a43cf8e20798bdcb46920b935508e8fa0603852 | 1 - ...f91c51942e5ec2be52168877db3a4a764b8e9d6f26 | 1 - ...f8f29d51a3c6fa01ad733c3a554ccc79344d0fde44 | 1 - ...3266a9d385966dbbbb9f788697018e5e2b02df1aca | 1 - ...da61ff612aaf3c38963582bc2323825e83c2c1d517 | 1 - ...d406e8198e16e65b455b78a5928723f4eb50308c13 | 1 - ...f8abcd34c9874d523dc27e55ad7a3d05cab6d3e6c9 | 1 - ...cc9347b0d25df781e10415ff37ad177e0c8bb24112 | 1 - ...40edb1ce40bac535d0e5569402b8eb7b44b1b2819b | 1 - ...8ff97694d6e422f752fc863450718d24cf2f456f7a | 1 - ...6672ff00fe05712018582559986219b7cebfcbdc65 | 1 - ...5d1bfd4629e4dc9cade40508d988e1fb592bab5f5e | 1 - ...004532295dc76ae2e96fd0d41d91b5cb0c5557eca6 | 1 - ...73d4811bf449d2cbb85e96e745be167059d6295bba | 1 - ...3fe1d331aa54a87c96f44ba4c6801b5fde84c0563b | 1 - ...985c0741d2d8bc03bb567e06bca35c60b585c42889 | 1 - ...769350c785c0792e5ca7b8fecd80cd73418849df90 | 1 - ...2892d378a552958df0d005e0b37ad67cd49dea4beb | 1 - ...7b1df61063997ac67609ac772eaab91b89c23989f3 | 1 - ...971e664506445287c098e34ec7b51ba73485e932ca | 1 - ...dfee0db626ddb03f976bf3cadba542ec2b676bb72a | 1 - ...590fb2e28a7c4a1898f36a34e5eec610e46ed1822f | 1 - ...4de67b251e20f4e5d27158857938cbfc1721702175 | 1 - ...5523829cae99cc361574e87ca50340de629f954590 | 1 - ...a7969ca9d2f44739c71da156ac86ec146fad814c89 | 1 - ...3d7ccb0458782cbe79da8c406cbe58dabb1c4fb0e3 | 1 - ...6a35a76c726262ac4a36b8af701e2bbdfcf590e140 | 1 - ...b19424c51f425dcceb9858e734a481d3fd2ac0471b | 1 - ...3435642b60bd9f72eba5e47e338cbfa3ad7b64f4f9 | 1 - ...0b28ec49595adfb2bca1ef92f5e06bfb46d031df0c | 1 - ...6fcbf8dce046bbd47f8af9dfad81ba190d21494fdd | 1 - ...8a8d894890b10289773ea81ba8bce4a366252bb0c9 | 1 - ...c1b9e9108f09fe3383a95255941f6f15716f56c52d | 1 - ...cfa6f8307e559756c8054a2f188e33f485ae144785 | 1 - ...6ae93dc5a20fc2d9dbd914cf32cc428f81f9d75869 | 1 - ...bc7c53db4f127116752bdfdfb5279bafbd9104fc33 | 1 - ...0163fbf5e74e03577238b608a8e8e28639f4d884ca | 1 - ...f8f045d1c6ca857cfb252c3bd2aa328a93f1a5b1ef | 1 - ...b8a56e608bc7d9964adbd1db8a4bf9afd548176242 | 1 - ...727bdf34b1fb6c23d8fc5c1a6bc5b12fbe02a840c6 | 1 - ...8484a08344075143ee6f976416617f112f43a921ba | 1 - ...62392dcc19ba69df23c8bbadb79080550576beaef5 | 1 - ...b31adefdf0aedde4fb6cb11397a036a7e8acb54c6c | 1 - ...9d38aa0260cf83c0805c715131d366eb6258cfa2da | 1 - ...f3408d6b6b518b377f0dbd83986e45f8ab13a325e5 | 1 - ...02589ebc7d0cde90628f0ed8d7b6779159df908936 | 1 - ...108baaac96b09d01cba316c8d5e6eb38b9a55d8076 | 1 - ...877bd9323bb53fb709cd8cb0fffe0ab92e676ef46f | 1 - ...7616f9633a6a0cce7a680ce43fdbb774943113757c | 1 - ...fcde515a61c54815fa4974210bdf6656c740f0935f | 1 - ...2b9a577819c3dddef3e70c722ebefd3356ad20d586 | 1 - ...e0c6ef655a9dbe34f19b9b07252052d4f19104244b | 1 - ...f858778aedea05a0da127fb32e00b1b8fb2a974f13 | 1 - ...d5815361781140b5faf0a154b9eeae37db59347b38 | 1 - ...cc6b0f75c88e48b3a78f4fbdcdc25b2e8dc1e59e3c | 1 - ...bc6f2f1c850e99a9d1dd8a11d67c0dd8382295d18b | 1 - ...579b7ba8f61bb6be6459fcd38d93abcf15f31c413b | 1 - ...4cbb4ec9fa68c0ebce776577435bdbc82e7dd5d8d6 | 1 - ...deeb5af825f85b6d7d88a26db0decf10412244ec21 | 1 - ...2b90ec24d6153ba78cd5b3fc5b51de41274105eedf | 1 - ...ab7a5a325967eaff8e4c04025c000f9ac7710be3ba | 1 - ...74fb4876967073cc3169072b4bb482f3b555628626 | 1 - ...78ee0d28fa90a966f6963e5b75441a27172863d0a4 | 1 - ...16aca9f485f19872158fe7390192bfdf1b7afa638f | 1 - ...6e6e4cc97b8b6b8db692b1871ddd5702f63a3f328d | 1 - ...0a7e98a5ec127b43ae53b081a88b06f4f0633b3054 | 1 - ...095189b85e57333c347b13aa3ad5d7b6e2f0a7f5ef | 1 - ...af9fc4fc9a2c493ef3b346304ceb9d46609cf78cf4 | 1 - ...d228f774cd84e7cf922f4f4c60a9b723491f932612 | 1 - ...64472c885260246c8031d7dd9f4a17aee5dc86d45b | 1 - ...67f59a51d0f7077e8851cb593384a8a9eb82060480 | 1 - ...51921dac19815355842d78c837833b2ca5e6a7ee64 | 1 - ...34983b29d8dccfd28d523ccf9b69375b248d0f1a17 | 1 - ...b846eed0790edb0ea9cff53c68d813fdd8eae3abbe | 1 - ...bcf83f9c66bab3aae32c7adf6a7c8323ba707fa1e1 | 1 - ...9e4732a486d4024f3734c1ce09e5ed71c6c925fdbf | 1 - ...b473f06a1aa7a7b32798c2de3cd4794104d15fee5c | 1 - ...2026099c5c548ce838a4f1b8055407390894557ea7 | 1 - ...786c9dca96a7dc20ac3a2b5289ecced406b60a3cf9 | 1 - ...476045bf32bb85ff506b48e2dff910ec2d6ea33ff1 | 1 - ...a8a8900e64a9714383d65d372cf3ca048b9e7cb333 | 1 - ...12d33c09e069f24debb9a198e4ca1241012c576872 | 1 - ...e45795626f2b8f6245769e3b3d1be705681cd27bbe | 1 - ...97816989a31a07684b34521d7723d6ed5674470b06 | 1 - ...6f5ae6e8354f78fd3415a22d4676cdbc1862fa956a | 1 - ...aab30737db5b022043c3c9e95378fdec2ff5f4af5f | 1 - ...32e61d117ada69a3cccd14755fdaa8c81fcc2e4400 | 1 - ...3b116278772a0175581f8dc3650d199b2d530e6904 | 1 - ...6e2e70f3b68b93045e083d73b2f773549be8526926 | 1 - ...494e05535104a6052e897fd6e47b82b2700ab0ac41 | 1 - ...f0d4920d7261c611722633d31f35a173f87e041ee0 | 1 - ...3dec915db94f61c979281c3a2c6a9c6922042e8fe7 | 1 - ...c9cdcb2419068ee84a0cce1b0609a27a79649f7362 | 1 - ...06b2ee8d72c2ae6258500ed6eeb95d298bf4c1dd0f | 1 - ...9c3cbc0708a028fa780dbd9c9f4236e5716e9bad0b | 1 - ...9fd92d4707b6cfd8c517ee882433b5b99e510728c6 | 1 - ...f14cbc0975cfe2fb0bc2754aabbb96e12723369b15 | 1 - ...2d59ae6b0fd90b195028baba47d73494f98f14944e | 1 - ...3347cb312d95e95e1f045e87c234d1fd6bfb1955a9 | 1 - ...4f1fc7628addc87556f72ba534ad76b703a4823602 | 1 - ...1eb2ea253348b32dad674b5dad3d502e2a748f87d8 | 1 - ...22b8754b5cab4536ef54cc2b6706d28ab64e4eaeb4 | 1 - ...69c2861ce3ef2e694140f49785275510d21cfb410c | 1 - ...2241ac2d5d521f0dd1a306479e4bda073b76e66f09 | 1 - ...ec9ddd9c1d2b9dd5abfb65d887e2a5f614f07b2100 | 1 - ...639bdad8d13244c21a7c520ed9612a14eb6b00268f | 1 - ...62e2455f97b192d431fef80e8c3d72e3efc60f3812 | 1 - ...63d6443ce75d9f38e71a6219bf534f8021542c388e | 1 - ...37af23ec76d0a82a931daa76c44b2d8e8f6dee565a | 1 - ...7650e71e0500b0e81e78f86d3f7f13497f12fbacae | 1 - ...1d93a8e93b9d2f0922285a3f788a5e8dbe63d0eb5b | 1 - ...6d3edf00a428954da785c8fc13180eadfa45575d79 | 1 - ...e71ca792508fb5aececf3d99f44f623b4f2d8a8498 | 1 - ...df1146ecdbc95869c69fa8fa369bddc191a7086fba | 1 - ...21af61d1ac6eac58da5ada55b5543cd7953d015d4d | 1 - ...9e9bfac111940854b65a8a6470f3013a9ef125fba8 | 1 - ...4beaffe4aeb8d81dd8f6dced773f1ee0793a676cb1 | 1 - ...3c7a093898abd6048813e17c36bb0ef39821710b94 | 1 - ...d19b65567942ed889e3ad7c65b4f3f2af631303624 | 1 - ...37ad98a9f08d35aca5687f1ad72a81ad1c639f5e0c | 1 - ...e002d19f7e3c09b3b80eda98ff3a469de2f3def247 | 1 - ...b037858971819114340ca9ce77b7f55b4d6f76128f | 1 - ...389fb67f4f45368b058bf8f3e88b0375f5b322e9f7 | 1 - ...a3b08b9d28405d93abc72b1513f0bf2e05928b15de | 1 - ...dee1fcf4b176d14042c6d00685aa0816540f60c302 | 1 - ...7cb1c7aed43aaf80bf3404a30fd63803ada62cab6c | 1 - ...89d731001b9ea02ef3c139e502ab6dff259ad238a6 | 1 - ...5b7dd95ff277ca5426ed6dfe17e2001c9d0bfa73ea | 1 - ...3534b19ec8b850dc2d35a6bdc138badb33a5d47250 | 1 - ...5626a46b43a6d280ec6e591c4831ce58beddae49d6 | 1 - ...6383ba4b0d8a51a555feafd50b488bda717d332a3b | 1 - ...bd2956f3b35fd502558dc705c03cf85fe7d8d64264 | 1 - ...add2d05eeb43485f848f1311ad69678398173a6268 | 1 - ...e4922e1c3461cfedf78436540a01359003b57f8551 | 1 - ...4b1f2de92a002dc29cc4f733ed912e4c9cbbc4e67f | 1 - ...8f69b8bf5e978d08e73d666061276a46fc3435cd17 | 1 - ...ca73cc4ba2d5bbe9c865ae4ec7660001936e7cd328 | 1 - ...23b5b2f9685f779460aac4f73bbc60bc780b63c667 | 1 - ...aa33de3a7a7ed3ee23431ea0901647039a17596fa1 | 1 - ...6d9c0a98c667b187deee70220811074f20ac11d527 | 1 - ...54097a7f009f75a2b7e86c76ea0884dbc2c8ee5824 | 1 - ...9509dbcbec5afcf9d8dbe4da69c258c3ac847e492e | 1 - ...c8417bc560db4d74fb833e64b68af1ab212cbce7b8 | 1 - ...1554b0844f2d724b85754c68e92560c3cdb120bd7c | 1 - ...114d043d54970aab32ce4b457c8190fc0f9b98c6c2 | 1 - ...43b573ae024e184db316c64c49f9e9d0d2aa171af0 | 1 - ...25dbb14f8bbcb742e0c1263c4b702bcd57bd7351ba | 1 - ...74070650f182424bc73c8ad026ef4727bf1c65d1a2 | 1 - ...127df4af1b812d5cdaec986c8513744a09748e658a | 1 - ...c538d1ebb9adc39b93416cfc1aac774a005ca9c9c6 | 1 - ...b4a8f3d672b3bbcc18ef96c107aacf6581a4a7ba66 | 1 - ...6e26d12578e33cf8ab3183adcaf80eb88fb16238d4 | 1 - ...811adfa8cced58a5049d56c0dcf300ef37093f6acd | 1 - ...e1e0ba81542f788395c3b906cada3540c6e6ab115f | 1 - ...4eb543fba85d88e5b381157c4c36889d6ffd321be0 | 1 - ...d56d87df2faa0ddf3148c895d4ad1e87c87d423872 | 1 - ...de90fa09d439e549ad4582b5033db64f7ea05142a8 | 1 - ...af57a8892f590dbb618f06440dbe3e41e6937b4c07 | 1 - ...f668ddba60d5d5439aa9f7bd26dec6769567dca11f | 1 - ...ca44879374863f8b49c34898898b830ef0d3a21ec4 | 1 - ...5f497c0b69c1557f20802a8c271d765482b71d641f | 1 - ...65f29f0c72bc5a20df8d1710137044e8d623744072 | 1 - ...80ecd84947f2c071de38682ace2075a2431551a84f | 1 - ...c5f2299c3b9f17037aa52ef4871ce7a6297467a2c0 | 1 - ...d8880a7ebb171e24c7aa3dba08182fc1a66a7dfed6 | 1 - ...448411638448280556ee0ed997ee1cd8c8870c82bf | 1 - ...4b3dd535a26655f4fe9897e9b6ac9ed9d54e1e01b5 | 1 - ...5a3b53352e03b45c6ab7b935f67fc79a489604f9cf | 1 - ...cbc8125b4240d72fbca574224e59bdbe0fdee8ba49 | 1 - ...466d6316099451d8315b934715612cc99a3853a9f2 | 1 - ...ff756d85d59b7688ae2e522c6d8e7d821046e1ad16 | 1 - ...ab7bb8d2ecb458693581d5b68fac216a49a6a9b237 | 1 - ...1bd328b1fbcedc0bedc53e3c90144172d7e1f7e9af | 1 - ...bfe2559923c2436eb106b56147e76a7d5e7ee6fd39 | 1 - ...804045f4abbc1032b226cd4bd201141d22495d5db6 | 1 - ...ffb42f110ec8bd13a6268a1356f91f39bd8e1cf098 | 1 - ...8bc455656c19ee9321a00d9b4a2b7223e7819af65e | 1 - ...bdc980ec8445e20c4d125d7b720ba86be0030013be | 1 - ...39491e6bfdc0e3b51f67df3fab733606e7ea1c01a6 | 1 - ...245c553b0cedbe3065f631e6e6d10f8575ca77a748 | 1 - ...9d92f34a5dca79090d2c1612080197942d721a2758 | 1 - ...51421738aef03474a3b8adabcb4547070cf4cfd319 | 1 - ...9ffecca41149ecf200e1ef98fe2fc98d86008b9e3e | 1 - ...6cd6a2d17e5327fefc6d35c268e25d1d909d203e44 | 1 - ...cfe4ce4685a671769946fa4cacbcce73cde913ecd1 | 1 - ...95bc8933ba77db9c4f63959f26ba18bae502f89633 | 1 - ...346f4b4a70658757fb99bdddd19ea09266ffa877a7 | 1 - ...341d9a4552c2b246eba2eb04d1128c105cbc0adac9 | 1 - ...b9535cce40164df77d201a0f800a20f1d41e53a925 | 1 - ...0bc56a344314d666a30d399bf891f0a03022517759 | 1 - ...80352a3e906bf2b57108834b7fb61908bb922cb860 | 1 - ...38189af3f17f1b942b05ae8ff69a88337e4226e44a | 1 - ...59da06df7d689ddfd9d91cfde9e2eada1e086e9cf4 | 1 - ...1290c2a5d8aeb998a5650af833fc5543087ee7a39c | 1 - ...d3fcceb778c1ecacebb17d48be871bdf546ca95c56 | 1 - ...cce77fbf410ebd3840192b4a4b713913820364ba1d | 1 - ...b7c89d1db13a5c3b7a75140269fbd8736585636908 | 1 - ...a9a50ad6ef8f660215175bb72e239dbef1fd39028c | 1 - ...10d43f53cde39b03ec8509170594a3fc1c95d1a426 | 1 - ...5852d3d996551d266ef4bb1944291744d634fe6d9b | 1 - ...16998e562226df4c9ed5668eaaf6c8c71e2ea186f6 | 1 - ...15bb2e55b9b98621200e013cf86cfa140011e3607d | 1 - ...634c95df6b2dda9bed11936c1b1a1cfe2282c67696 | 1 - ...fdcea94a5c6cb5a3f0087bcbafa2e6219f9815d79f | 1 - ...709db8c0934be6e72de470ba6d74d35fe5cc81f749 | 1 - ...bdb14e27ffb6ab2585af7f976dbe98eb79e782f16c | 1 - ...59f2a76d18dfdce13673d2b5447e171b4b1aff4f2b | 1 - ...3eb30be994c20d98f75e0858b9d891fa1251fbb888 | 1 - ...11ed59d1181dd6cc5679e13e6929cc7e343e291553 | 1 - ...e79ca5396cd52dce65df98144f86bf95d39816a7c9 | 1 - ...8ee53d12d4e414b5ec6fb44cb5640dcb04c1aab1a9 | 1 - ...15be96a4037f2129d22f84b17049e1694345a04cbc | 1 - ...945749b6f114efbba4a040cd5d539d451321189815 | 1 - ...f7fd83ad8d07ef3f6050c30014d1bad9ad12dfe760 | 1 - ...ae772f2148aff693983edc8b6c8299b3d44e021265 | 1 - ...147e465de581a2ed0651bc233e2970b226447391e5 | 1 - ...f55ca9cc92faba51586312e1b9015e694ce0235f43 | 1 - ...3ef2f70b88593ace0b324196a3449159e790d4fc88 | 1 - ...aab0b524119a90dccf8e9325ba9f3808168ddace46 | 1 - ...bc5d7661be7d2e19d317b0d0630b5c6d0c994f7917 | 1 - ...2542a762e01b1655bc766efc59b117e2fb610f01d4 | 1 - ...34b163e5c3bac728c9bf98501aa121de873349efdd | 1 - ...65cf4081836e123e4a3c4bef3b44b6a4435218003d | 1 - ...08593330d743e0e4a46fbcbe719a656038bf764161 | 1 - ...23e5bb319426046365c0bfb8e86489c352ebe184fb | 1 - ...581aa3a8996f8eb994ba5a0a2cd49ed368c7fd0502 | 1 - ...f837a704df3e338368e86fe011bc680ec78aef49c9 | 1 - ...a341a29eb9df613ffcc6e8e41ea915c6290a5b5477 | 1 - ...b839760ecb8e6d31bd9ac0e4eea0dd04f279a7668c | 1 - ...cc5d8caa20110a6877c5ed4a4c658a217bc3de5eae | 1 - ...c734c8d408be11a8883aaa4eeecf3aa1d8fcdd9523 | 1 - ...3f46445846425c1e3b211a0262c61b3475d90b3e0f | 1 - ...362b44d80ef2c1e37379220ff35dbc38e2eac0d510 | 1 - ...4062005aaf94db5cf0fac7d2093609b93536b17aaf | 1 - ...0bba64027462e6bad11b1169c5ee9de8a40d220cac | 1 - ...a72e67e3b11c1f1d5b4804581d11edccbdea5e7dac | 1 - ...dd3f4918574b5ca4c6a0f11602d68b76e58e2a1c94 | 1 - ...dda7d8c8fa88adf3827f15a80ae9021cc44a57734c | 1 - ...fe87d4c2a7899685c59f4eddaaf780350351ad73ac | 1 - ...a618040506b8f34d14c7ebc03e4121d91bd02475d1 | 1 - ...ff118c437640c2a9984aa58f55badfffe2b784d513 | 1 - ...79e6d75d575492150e42becf9e87600ad1d56cbc1e | 1 - ...2e02a5eeb51cc4d68b1aa258da4c1520947f260668 | 1 - ...5a8d7a6a0cb5b828ae80c2a2edf5cf031e7cb6029b | 1 - ...eee85a424cd9e53ff9543889ca7550f23afd2243e6 | 1 - ...884aceaa8a55790988d28ef685d83589fde3c7f56a | 1 - ...8f5a7aaf524a00358dce2cf78b527edb66c1b6e1c3 | 1 - ...22856b952553ce5f405ea609ec1655c677b9acfdfc | 1 - ...5e527894936fda479ccee8945f893bffd5fc564701 | 1 - ...6f115ac83d487ffb9b4c45a0f7b24578365583de51 | 1 - ...95d09d1b36a7d60465ae570a9ac28f8fd954277471 | 1 - ...519bb7c29c1a7579827f69e941167949f0e48d4097 | 1 - ...992d43742c218e7e6a2f71e0cb58d521a2c03b21f0 | 1 - ...3f7c05bc1a7211d2de82057599afd0d546fd892354 | 1 - ...bc204c2dc93a887eaf53b044d1a3dd79c9610b1685 | 1 - ...d6528cd240ecec370cec01509c71b790c4781aaea9 | 1 - ...21cea1c245f8def1de8ff1ee74ff662a8743e48dbe | 1 - ...8d43cc8044d22af88244ad47d9ac968870d2f888e4 | 1 - ...a2f4d9f94a5afaa26f599dbe71bf665f95cb22685f | 1 - ...ba62c994505b3eb2241d8fb7cfa52eb529d69972c0 | 1 - ...4dfcf6721d5c8eeb5e6c80abe2bb48b2c058672465 | 1 - ...2fe9958f29ecc56964f9ef946f403987cd13e781d1 | 1 - ...1e44a3a52d407cbbceafb2ad330c5ea7fc486ff593 | 1 - ...84e1d00100df8eec5136a26ff4a4569fa36a1388c1 | 1 - ...fbcafe8ad1e9a2b42fce3be864055d376acb805e49 | 1 - ...f5126125a5eb9ee89163dfd0df94be563a4a025f19 | 1 - ...5b2b544b8bc177bcf7f9bad1e41fba6514fde65cfc | 1 - ...452a5110ad8f0f12c0f52138ec82b6c31b48deb1ff | 1 - ...ada84fdbc18ebf64ed4eef503ccf57aaf1b7380881 | 1 - ...e66260072164df3997de344c4a2d1b6ad0c150a1f5 | 1 - ...6caef9ebc494f1113f4570dbb921a4f84ee388dd04 | 1 - ...f2696604f70516efca550d9c970e1a848eb525a7f2 | 1 - ...0dda4d1eeac550b1b0fd06adfb4f8b39d623a1ee25 | 1 - ...5590ab61ddea88b6c22633cb3973764697e76d783e | 1 - ...589af53c92536d17b0e224992b7f508a721b97ee85 | 1 - ...88b004125a776864a685f9c83f2561a59566736af7 | 1 - ...f8778f24b4c6508172e4f25d2604e3a803e873fd68 | 1 - ...6da9a6c5a8a1b2c15419353c3a2882a27421190d05 | 1 - ...d5e5a7bc2e0689d3b46b999c2eaf67e8c6fc316d0f | 1 - ...8789c7037c350c4c6eec9b729c323513e8dc6f6179 | 1 - ...10fd643c470da3c8d9b948010b975d6e01b471eb86 | 1 - ...3f7bd42ed853f1b489c288dbab613ceda0d8cab1fe | 1 - ...752da403d3884e59831c4e16e72139dc7789d86d00 | 1 - ...8cc4cfe2951f7aaad9a0892454dd26866abc99e806 | 1 - ...d91a96ccdda32123a003154b80e467c8e970884bb5 | 1 - ...3989075d72e11b16a4b31a1ddb19cd2a8a027fae97 | 1 - ...449018bbb60826a497985b485d9e48c3445824e312 | 1 - ...5039a6e44092408adc2ce000a4b5ed8ac7099be177 | 1 - ...cf69194a3e28eb0e96b9daa72af18b505f41351749 | 1 - ...fb7e9e668c71e51353d036e5cf70fa87e8ee43df85 | 1 - ...479f4e71546358297c4600211470a2818619d5522c | 1 - ...d6e231fb30c07314c2845bb95b305fcd093b8c3b93 | 1 - ...0a730779f471d23853606135941f995e35a00ba42d | 1 - ...f25316ef32ba4f07b6a18a93c2383cab3bc605d489 | 1 - ...4a1f134e317fb69ad3879170946d807af5a22947af | 1 - ...542f23b1037554c9752250dbe7b79ce7a0032b2cf2 | 1 - ...3303bfb3efb08f93dc2acb6987dab9705e53dbb691 | 1 - ...f94e0a24fdca5755f73cdf50a733e502a0a1fde2b7 | 1 - ...39c010c87dc1569fd6855ef28e60eef087c2b7a405 | 1 - ...ec2333671f48b0c514c2c67531d5f12e332ee7271b | 1 - ...4935ac27d4ab6b3fb5ab49ffac26489ff40ec52a1a | 1 - ...eb37f3a6f7fd01f7d4d885fd843687d1b42ce62c04 | 1 - ...7c9ee51965a4972f45e3b8b5181fc6c06c0898e0b3 | 1 - ...2ab1a1b8d2e92bf02f8d84f39929c62edbbeef7bf2 | 1 - ...7d23bc56dbb8c9779adf3df51d324c3b7a14254312 | 1 - ...93d8af0642a1c0e1ccb1f9d8f0f25a927a4e6921a5 | 1 - ...c150d8729fb20a24e382492beb328c6bd2ba9cf359 | 1 - ...dcf021cc9deed272d465e103a3bcd7b3ccb340c89e | 1 - ...4508b3787544495f8dee4374d06ed2c51c9fb7e433 | 1 - ...a165791cdc22529782199b3c2551e617a3a5027969 | 1 - ...6650a4f3c3c06687cc3b17528a5c88e4521f04a905 | 1 - ...0cc8fca26becf3c4d5c06a08d41d81040906c358fb | 1 - ...10e76aa90030cc40e643d813e2ea0ad2d7b7928383 | 1 - ...780b400809dde50230490bd6ea7b3c65f9179a9988 | 1 - ...9da22d8e26877d46511c2740d9cff25223b2c1914a | 1 - ...7a81f14a27075f28e175de9fd524579bea14528bae | 1 - ...a88548945744d611824ce4c6d877e947112a255071 | 1 - ...9ddaeb595f5318ed4bbd326ba64a08cb77c9916b3e | 1 - ...03036af78bbd5e404d4fe77b8cd8a3844b23773fec | 1 - ...f72cefadbfd78878aeffbc7f8765c7231bdfe8f26a | 1 - ...38acb2619f280695ecf039460c9888f28d1a805267 | 1 - ...a77a82a965d4cab5e83768a271546a0a3f2aac9f98 | 1 - ...fdd580acf614e240bd50d1bbfdb9558dda6a7be1e4 | 1 - ...8f5a07f5634d836f2e8a3a027ce6b78f3db29c63f5 | 1 - ...3f2de2d9b494257b97a4ab25bbd024b2919d981609 | 1 - ...6786d97ac1949180dda508bc77c13db69e974f699f | 1 - ...4be77d6a4f6f9b09ac87c4548615ca05f83b5570ca | 1 - ...e0695807893f671a929f4130485cb2305c0d03f917 | 1 - ...15a222be64e6bf6ccc980109428f8a74d3ceb19a4a | 1 - ...99cec693f6255d25da13c634ee6a87789bfcea103a | 1 - ...0cdf528734374bc005672159cee8112ae7c4995f8b | 1 - ...e65246972294fcc5893d0fc4d5c6c3ce5a1e25e68f | 1 - ...c2a28cb46356dde032901c4ad5125090f2958a9ab6 | 1 - ...aea0f31248300ad589a0f7f03a2777dccfba573360 | 1 - ...bff56e482058bb9c90c9a43ef6a39730c00b412a5d | 1 - ...6982fee2846191cd0683dc754a15bc110a28e9078c | 1 - ...dcc654ab1f3b97936686f49dfd650ab44af6344139 | 1 - ...04212a1cb71ebe6237a617674d3510f8e17ab3445b | 1 - ...818ea1df438a3ffe7c3a46891f8e8487c9e69fb123 | 1 - ...0e023fb3cf19aa50dbe61e6f8e8f525961fd5b1bbb | 1 - ...cf42e3fc485a7a26d73894e6d8c95af633c42b6de2 | 1 - ...1a49535f197c9dd9c470e9f2600bfad4ea6d027573 | 1 - ...545411e1931cf091b076ab7c213cf5c11545bc7c6e | 1 - ...1bd7c276244c27e1d5194e8edb74e75d52ff493a4e | 1 - ...aa8a2043504b69ff6b4bc4179898bc27792ef3022e | 1 - ...c8f0bd0c9fd94a3f6d1d5936c1c2f3be426aac4aff | 1 - ...7e0c01b91df0661018b1a2397cca4f4f92e8cc582b | 1 - ...f3cc171758301585a8664ac06c233173de9ae0d659 | 1 - ...aa955d5529832a6564f00018d078eafb2cc3492366 | 1 - ...77cb60488183c689841a7c7b46f48532a5ec027d84 | 1 - ...b1d2e8daef46fae39a69a5706fea672062ffc12c43 | 1 - ...22f39d2a596fee1431f5758c98e413de2d3d555215 | 2 - ...61bbc7c43bc57f84ecb98b078ea59b7b6043d0a597 | 2 - ...8d2011f15adb02193d2cb6ee505edff64ffc0d7916 | 2 - ...ed711d38a8bb52ac146da78efef25e10594e5458d1 | 2 - ...35970205e57bc03d7976faa87c20df58bab03dfe28 | 2 - ...0319fe8397f4713f36eb0afc6d444a7d44de1fc686 | 2 - ...9793543daa02bad67c19847a8ed8bda9d53eeb89d0 | 2 - ...6a3973b3bca0bea2478535e092ffdc24f42867e1a5 | 2 - ...19bc462b941df157195a813cad6ba755d91f592436 | 2 - ...448e77fe4adb0c0a6bb98fc82b570ba52c1a6927a4 | 2 - ...8831816b60eb61f4f1088488b551b5bd77396482ff | 2 - ...315ee2bd8edd1c246f21090d2a8945e34ca18277c8 | 2 - ...7a3165a45f8c4b1ae866426d02daae74a797141283 | 2 - ...ed517cf894f0fd47d98f1bc76343c99ad26354591d | 2 - ...c21caa886dd71b723f3994627101792486f6bcd34c | 2 - ...30e4bebe9ad1203cf8ca0947f81a852898b8a418f1 | 2 - ...259b57cd3a3b3205d1478b89fec7c09c4b46be92f1 | 2 - ...4a3ad8622d807d60c8d83daca790bd494e902a2da8 | 2 - ...91997d10ebd539428508c9f084714d0d26f4744917 | 2 - ...3adc54b8729392cc5a79b3d5cb7fac9d6a737dd934 | 2 - ...835f77295cc06bb54c18ebea477a34d64ff0ec99df | 2 - ...d00fce2f6e4e056b17af7a9061d163162dcb8e177a | 2 - ...c88b25832e6ac204ad08e049e531e9ee00c73025d1 | 2 - ...97afaece36bc04eae93f42a62240781fbfcc6eef8b | 2 - ...f3235ea32fd4766e9211dcc7254b8df4ebb497959a | 2 - ...f93994701c6bb3d2cc45474a246184baca8fa9f02d | 2 - ...801b8205dd75d9218523e43923707d8be3910faf52 | 2 - ...9ecaa0e56b7e36f1560427fca2f7fd8d663c6a496b | 2 - ...c0318bddaf6cb9f96c322ec5ab16697e627d825c6f | 2 - ...b39fb50627df01e5b652219ee73176ff0d5c6d84a2 | 2 - ...b2fbd5d06e51bb886354a490338467e02f68c25e5f | 2 - ...52b120eb500fa308ae3472751ed58594bd73502b6f | 2 - ...b0139a4541e44b0e9e13a3e0eb08d2652d928ccc27 | 2 - ...8930cfdc37bd68c9e25a85555ce26e9ca4361f8d2b | 2 - ...a31959179fbe877fb754f15fe43562f370a0017e07 | 2 - ...c6d111f0635242074a31525620c001537d4ccb7613 | 2 - ...5eedf1c060a3ff2eb25b031dd931bc2f1c85fb7fa8 | 2 - ...219852d4dc95d5a58f45905cb4f32bb4e4db469751 | 2 - ...9e9eb23bb0a4db54f70d91ecad830ab0000db721e2 | 2 - ...189a63531700729c171aad2efd76c7cb9917e6ed85 | 2 - ...31742547925be2899650a381ff0bf228c4b62a6797 | 2 - ...d1091a62c0526b4d70a6535dc502008d0bbfaecb40 | 2 - ...103bccd33e0145bcb52d08f3879706beb6589112e0 | 2 - ...24aed6bfe835d2cc20f2cc2b5ad90caffbd2aacef2 | 2 - ...2eb52b859b6f851c6feec2b7e00a6549c5618df7e2 | 2 - ...ee4f13ec35ff9f35b0b190a4844c115a7bba73734c | 2 - ...28d924d4b9c5cd00a88b39810eb2edf1f63ff5edbd | 2 - ...5dc48130eda0edaf369a5a068a34fb4c5e77ef734e | 2 - ...fc7aa8dbe873b248370daa7ebfb742df1add7db17e | 2 - ...79c198e0300126d60025b54258983a976ff91f0d86 | 2 - ...c22cd6dad25f584367197f4bca746a1b9790f116a7 | 2 - ...ace6d77aec7aadf29aaf4cb18b531ac9e22d937811 | 2 - ...81f049f29f1a4d824f5211ea851d7caa60772c4747 | 2 - ...3ddd9e564b2aacc7d8b027ae1198519c6fcdb7e070 | 2 - ...8bc5df28865b6b39a163f32f9a143b41df3ce59063 | 2 - ...82d60c47194a60605880aef84b30c105626e65040a | 2 - ...b4924c4eb6ad24f30d347f5d386251c5d8207f934d | 2 - ...e321c6fe349b679a45a15a5cb58c5fc5a4052d6490 | 2 - ...28e865265fd54e0463ec29e747f110228b869d05f3 | 2 - ...b402350adf39d6e9785809cc14a37e8d77c54edfa9 | 2 - ...caf180ff1f51ec9e36427e047e149de2ed6132e796 | 2 - ...77d9cea8fbec9b7e27e6052296ad34cb7d66afe89b | 2 - ...70b0e6ecbb439b461229deef6fe8c039b0e59b6746 | 2 - ...a92dad61f2c568d3af718f1e959d8569adac4fe6fd | 2 - ...21c741d91831299895c7d75deef912fb94ab9fd360 | 2 - ...b0df3771f622be343650e9738ffd46416479bc3d34 | 2 - ...fb73070249a5001a2d94728c1e9210d7beb4254a5d | 2 - ...8c943dfe0c7fbc1e16eb458eb4b1ddc62edfe92515 | 2 - ...64753727edeba273136bb4c0ca4f03a47056a9f0c9 | 2 - ...30e8dd07a0d46cc481a3fc4494e572c2063d847b9f | 2 - ...9435482d7d891b85169ec72abbf4c2e721464c3e00 | 2 - ...12d12eb7e3e5be09b185dedb40657c67416b5df1f3 | 2 - ...24adc6cb461dde08239c4b56cfeb21f32287ffb32f | 2 - ...19c628288871551211285029ca6d933bf85a65581c | 2 - ...e758c369fbc53d98eebb25aaefbcc61e5cab9ca48c | 2 - ...682cc8f7beaf768e910e8ece8173a0ef9281939536 | 2 - ...ed403864bad38cc5277d9afbb2ee51889768220588 | 2 - ...ca461cfe77aecaac354adc3d2b6bae01a26b898613 | 2 - ...32e3d014514067ca1d1742ce776aa17744497820fe | 2 - ...baa29b6e328a295b52081b47254791aa17eea9952a | 2 - ...def3ed3c658a9cb61429724147f0f48e6cb5094d96 | 2 - ...9dbd3ed87da90ee30782538169b54512b1fd2d4dfb | 2 - ...1fea451bd6ef30db60bfdd76880d4c61620074595c | 2 - ...4164c1086775b4f8a654148953b84ac11d4637bdde | 2 - ...0ebee410ec2805f914709b6b1b39021aa90a2e8b6b | 2 - ...709f7250d560baef8330917392128ffd462e505437 | 2 - ...07ccc5f8550a3e1422c6ec4948a479a379a8d7e66a | 2 - ...93b308ad78947da6e98b64126ea5245038f75474c8 | 2 - ...3f73f3aa1fccf19e2ec5f2c5b6b1cef80d74b34d2b | 2 - ...91fa7b875f41e42351d04c8239be78b717911de371 | 2 - ...c7bf68661b22c7030c4c44122b4018b0a3e6552de1 | 2 - ...90ebdba5e5c96116f151ff2b7e27c27b479a4b376e | 2 - ...2547e42e7ed5a4f8ad45a83a04d5c9a01edf37d11b | 2 - ...153ea5563a8212c549d7d1ddb87996c72452fb35e0 | 2 - ...650199ae6cb7aa40384ae94804512509e375655875 | 2 - ...c6230a3511191b171a1c1a123edbb6edf116ba9e23 | 2 - ...bfcf7c46610c27dd67f010eb3a4b174c6d725422f0 | 2 - ...58e0af9cc3284863c196cf94555fa692ee35f36972 | 2 - ...5b8578d059a0bed987b0d456fcd8a1339dc702c5de | 2 - ...9f356ad7fee68f764d93de705a2b49ec6b574c8277 | 2 - ...98644829d6a0199d91ab7824cef2b664dfba1e8f83 | 2 - ...266f606a45427e32f1a8ecd617f1c4418a885e3e3e | 2 - ...b83b07119da4ec7615b5d4dea8847555dea78fb671 | 2 - ...2b37cab7872fdf5ac58613e186f40d90948846b6ae | 2 - ...39d722f8e8ab4ca37f7bf36d52965050b7b537216d | 2 - ...f3aa98041a2b499275407efe764ea67dc405fe904a | 2 - ...2dd1cdef08cfebe0d95ec4e45996502e3b7eede426 | 2 - ...1eaf452f0f4e0d449709fd5ba4946483a98f1e8935 | 2 - ...d079ce85736dc7990c9b8f65056578597dcf57265a | 2 - ...846c1027b7dc5c0e7d92be36b6849a5820f36f2981 | 2 - ...854ef501019b1f7c634171ea4dcbc5feae30d8b1c8 | 2 - ...7c4f8c7e1c62dd580d9d41fb02be57ec15ead3a522 | 2 - ...d58c0d31c1d3a2f2dc2678de6efaa257aaf3872339 | 2 - ...7cf896d7fd2aec0cb02a34b7404b684f5e51b39177 | 2 - ...826e182d2065ed618885da12c93c287a0edc681321 | 2 - ...195545f78f70c0b10311a13ca91281cbe6c92a74c1 | 2 - ...8140b36ae3e168071ddc76fadd38fbcea5e25bb987 | 2 - ...86875275e1349d3a07875de5b173750e320afdf012 | 2 - ...f9f791e42d0a03aae36ddd1b5ad4cf56b4761619d5 | 2 - ...f46e38aa316000a4ca5007ef8d97e49fb22441bc31 | 2 - ...4007fd3cd5e5a8dd80afa34aa3a835f6c47a8eaf5b | 2 - ...6757b9e6c97552fb4f5772766ba547e8f7eea37e0c | 2 - ...b4d42e23c0151c3fdbb7aaf578b9348bbc7c2314ff | 2 - ...36487dc2325d3cafcf1f82f78eca3fe955f4b14d2e | 2 - ...6e95c1d80e0847c1c1267a48c25d1fca3d2449630c | 2 - ...c1cf0ba8b4af9ca17cccd224d93c01658b420862b2 | 2 - ...7dbe661263f43a1c048fe83fdb301986b70270373a | 2 - ...8f9057a6c93712ade62949167d4546c06132d46979 | 2 - ...8e6afad30b95953af4202d319c8611c7463c1b173c | 2 - ...e778b2fbf3928ccd009203dd9f3ebbb4b623aab597 | 2 - ...2f6c2a68b8aeadfa68a5e59b1b3496c9ba731e66f5 | 2 - ...842c5764cf106b5adca71ef16125f407f5b1b26a52 | 2 - ...f6530f6069c934f631b553eb64a76dc3742fb66410 | 2 - ...4cdef4afc6c475f6cd406074a786051570fd2246ff | 2 - ...c3fc8abae5f54ac146a250aaf689d672417ad15cd6 | 2 - ...446213eae2f83aa7f275a2edda8cb401908c0b40b9 | 2 - ...eaa96236c8da1072c856424406dadcd57dc3fab0d5 | 2 - ...353c0d7aa9b18c915d8864766b294452a7b21e6309 | 2 - ...339080812fb79206b6df042f17ff905527e038aa66 | 2 - ...a66a65f3967e46a4e70a43fd52ced66e7f68d1cf36 | 2 - ...0bc304f6f9496794bd3fc8ff8c4f5b57de21f98f40 | 2 - ...d8586ff75e67725a67ee900d2e810fb0e0a0c9e4c8 | 2 - ...e7e5fb64155727046bc6a82b63ed156bd0762d7aae | 2 - ...c02ffea150840d257e1733da3e3b8c65254e10d6fd | 2 - ...aee1d41b23eced3979fb607dc0a36dca94f320cc2b | 2 - ...b897bb8ae9b2b780628229dbf342d5967ab2f172cf | 2 - ...dd14bfcc5bf0d87b2ffebf4e7f5a940b92f0ed537a | 2 - ...e3bb5aca226b72e04aae0767814ff108ce3f7e5fb3 | 2 - ...2763bb9153307eeaa521dd4d7796b89b0ead519142 | 2 - ...100a76132ab7b062d1e60061f36452964dcf68d891 | 2 - ...b0c69c85788328d820786bbd8e627f3dbb2c8ffafc | 2 - ...fadf39b3c4a904096dde4311f6969b976715439046 | 2 - ...c941945174b4385b33f155113527f507a5d09cad7b | 2 - ...6a5c93005b47fe7fd9f58ead34054e19f8b90bf905 | 2 - ...78e8d40bd269fe5ffadf3a4241095f6fcd40d9e288 | 2 - ...dac8d6f6adafed964cba1442313d2d1548fd08d6f9 | 2 - ...49744db2f5160ec96a36dd640b071397297866ccc8 | 2 - ...34ef07bf8057e8adef76a8e75b6f64d3a748c2f1a8 | 2 - ...d3b5d7ff750c2272781314083f6aca4374600c4f1c | 2 - ...d4f4f9e31c1806f9ac73cb138f6ccdcda1ba236d81 | 2 - ...a34ee3a5da79db46ba962fe5d5c16a1c642640bcfa | 2 - ...6c6251028ddf450c5a83c02728857e94274da11407 | 2 - ...090021444868b3c4bb5854d4c7fec0c174ba466e68 | 2 - ...4d1d28afd61f65aaf945a1084fdc888c0369e0a01e | 2 - ...328c96f7b38e3b4f8d0dc60d6eae9c72d78c1d2a8b | 2 - ...096cfc10d8b07fb874597f61e364f68e08b3004189 | 2 - ...34c83b9dc82b137c87aab14d4c16edc24f6a347ce3 | 2 - ...45a6a8bb899182145c39414ae4cb03f6adeeba7b48 | 2 - ...71d3f5f3a002720e85583a3cc71c30697f0aebc4bb | 2 - ...032e2d1dd9568bc91bf12d4dc1d609d1524d7be417 | 2 - ...27d5044c8d8359e1b37cd760c5cd3e95edc984e85f | 2 - ...18297f8c1cc87db59043c3d6288531df36266785b5 | 2 - ...37d2dc4de143a3975fe6e58c75c1ba9e1da019ab14 | 2 - ...bec245d5747857a6114b662efb0dab4e15284045cf | 2 - ...7c074ec2d851c864ef374eb1bbea8fc43fb1d2e7d6 | 2 - ...c2f217750c332e05d75529b80d27203e5e021a7fa6 | 2 - ...3b84b38389128aec538e54d2d292f2a5694586c787 | 2 - ...5bac8a288c403f50e0fe4bac31e591d0db667e3b9d | 2 - ...21859a92614e7148d3831383687acd330f74746486 | 2 - ...c315e06dd0df50568b4ad1ea473109eedf1235974e | 2 - ...db7370fc5cd9ac2a6f56c221125b6d8e77675f959c | 2 - ...75365125a7ae08ea75fe6500c45ac207735e65972e | 2 - ...0a39607e9182041dcf89fea967f37fa5b3197790a9 | 2 - ...128600e0017e25aed1fd7d006df183545fed106d50 | 2 - ...4569af0021adb9e2cc78eb63a9c2d5ef035259d151 | 2 - ...23759b4b999aaff996918d1edab852c6c401ed14a7 | 2 - ...d572b9d592806850770eb1f13e86bbb61bccb0c13c | 2 - ...52b07d0cba695407a2e02b6c7cd26a4528b7bb574b | 2 - ...2d1e63c90d3593ac6a416885dab3461e60916e127c | 2 - ...027ce266e08154eb133313ffe4dccbe09783f96048 | 2 - ...79c3b9f96757c725f2a8f415059f1f2812523bf2d8 | 2 - ...150e424c4494ef6e6f90ae0aebcb7c83cadaa647d2 | 2 - ...9532805379c66953f323e96644754d0de29afa1cd5 | 2 - ...7a2d12403bbdda30482b012e7886e6d7c733d0f786 | 2 - ...cf06f2a64e97d26bf1777bb39c50baa6a37fad537c | 2 - ...3bb264f1a9ef5c6ac6e29130ffc8258c005671454c | 2 - ...4cd2f9770050f8f271c5d2d754de6e24f72decf0b0 | 2 - ...bc8f462c161f9f0ea74162e1a32645c06e23538ddd | 2 - ...fa95b7063031579e64bd8bac67c8084d098557fbe3 | 2 - ...8e99071aa2300b3492106f0600546e5f802c825a6f | 2 - ...70183dd42b572298cffb5943bdcb137e9111e8d8e7 | 2 - ...766ef192577ffcbdfb51c041f303f3ae9d80b8f56c | 2 - ...cb573451e167c5fd8174d90a5a90189c56540c91e0 | 2 - ...a76890f75a6c93c9f78fa20b35331616a67719265d | 2 - ...6f6f7b5b97ba059b35d58a230f9e4f047b68bba144 | 2 - ...564467e3d4f5ef2a540d11bf2486d338d3262afbec | 2 - ...cf7cb37f6c84523b82a4b1a1c8a0bee8b5fef82065 | 2 - ...9dc59136c18492f88a87b7dbb49a2fb66d4116d8f5 | 2 - ...5256773421b1a6e22c946cc666f75eb16917a8b46b | 2 - ...3f011b9d6bcc9ce7b1f641ab7c0cbb76823aa5559b | 2 - ...d8f8559bb38d9bba5afc7f4adcf41e4df1e32ecf9f | 2 - ...ab32cb2988dce032cf16364a5a995d03c394b2df05 | 2 - ...a25551f3fed57fe88caa7aadf1b3d9f9158e6f9364 | 2 - ...5974fe541b911e8995ab67b9a4d5efc8fedf14506c | 2 - ...f7656a43e2449aed23610a5e5f2bd25825bd7b3690 | 2 - ...a53ca14bce5837a3078291b63506f73f781d80a69e | 2 - ...1a65f66117cf6b0095128f2bcf41403e63c1de7daa | 2 - ...2800ae0964f8430d17d2ccfd12a32128071bfaae2a | 2 - ...5473d24cc0bff6990c7d1c6bf419c8ca221bd27c06 | 2 - ...7ea73c5fd3eea1c16f7eedd2003396a2ab7ae20f60 | 2 - ...ed0c2a50472e6ce4c64ed40b0a2211e2bc1bfb8ebb | 2 - ...c79cb8de3c467856ff11c9885c29c860728fbb34ae | 2 - ...d8305f9baf86be2557160e3eab59ef0f83de82ee5c | 2 - ...ab6affb021c351aa930d51ecd32d4df856a8267259 | 2 - ...7b7a95194a6d6255f01b487e228b4a1198e2f9c070 | 2 - ...385421f01db8129b41f9577340f6ab55eaf33866f9 | 2 - ...c038f2de86219ea5fc4caa71b035ee96c605118368 | 2 - ...dbd1a17afbc25e131e09e285a6c375e643beb63cbb | 2 - ...8380c58d7524ad5f2a15dc2bcf88f3207432fcdd21 | 2 - ...a50f1df67c5936b1d3f1d648cccf8c13f8702f5647 | 2 - ...4fb324094dc86727197a0fccf872a06df2d4947b0d | 2 - ...ef470488e66ee83e80b3a49a300120396ed4c454c6 | 2 - ...1f2aedf8dfa93f6ec897060bb9c30a6ab8dc2f8144 | 2 - ...affacfd3d068a217304e77bf5ceaf2d088086b463a | 2 - ...1db9248b979241c0ea12bdc48fce84590b82b82ad9 | 2 - ...d3d98efe8bf1779454ab4f788b740eac20cad9cf02 | 2 - ...ec6a7bbf56f5879bde1a3299baab1da44a5f66a86f | 2 - ...17a613c3d3c1a8b388cb8ba3c5d7090df38ce488e4 | 2 - ...5f38d1f8d529ffe10243ea50ec742d9550e7ac8f01 | 2 - ...c8e7fd88de868f0dc20501413bcb7ae214191677cb | 2 - ...094398f337f05fce0a40f0b10efedbb546ce64287c | 2 - ...59882d8ebe2b01f255bfb9890de89e540611c3ae56 | 2 - ...1942d3cee03aff1f11987036e96321494198a2b027 | 2 - ...dc1947469aa82460428c71a7f82ba0b886b714b1b9 | 2 - ...d09e3381c8c34a5688f38eeee59c8ac5fc0704bfbe | 2 - ...4213e405aa3cc742006e7850b3bd0b7d673440ee22 | 2 - ...151327f63b1bf0906e8697436cabcdf30716aee777 | 2 - ...c4e6113db0f121c62a2211269e2eca5a5d9ca75558 | 2 - ...d36499b9eb1c7ad371726541f350ff85eff46595fd | 2 - ...23442f2265ba7f9a4c2f6a187f02ba97074a924514 | 2 - ...8d18414ce9039322397b70af431b9db186ebf15604 | 2 - ...7c6ac21ae85006f0b0340203d32802d8da263c77cf | 2 - ...131630b435d04f70a57112e2c54b62bc865aa639ee | 2 - ...76f9270eec8d5bac8935ac59b0ae77bfe8fe87c2a7 | 2 - ...f8690f5294fad0334f5e8c75c2a9d44a7182384961 | 2 - ...1acf025d5a6ba307550f6f9faca3ac08954b01bef0 | 2 - ...08fa52b5f2a68592ddbb11fd287a24e8abb6ee93f1 | 2 - ...7458468aea037b17dd514f395d4353a143b272cc7d | 2 - ...74b709fdda6f8e8ae0bd0c3f0d590ab541b8c6496b | 2 - ...28848d2380c5746ce664c931064cf4874c6adb859f | 2 - ...965a7c1803b8b30de07e02d2b519843e088bea341a | 2 - ...19e04ab5f8ccfe4bbc0e88f2847518133391167f7e | 2 - ...765fa2ecc2cda73b1bc583f427dcc12d430891cc4f | 2 - ...0561f85c1ba0444b9925ec934f8bbb8a1df1c88aa9 | 2 - ...a60baea791bcb3aa44fc3739f89c512ef3184b4667 | 2 - ...bad78d05e68583308408b490127a09407e2c936771 | 2 - ...4f3b5fd26c3354b9ab15c98e4ed66dffd0a3519951 | 2 - ...35e5781836b7af0fe048744107f4ed9fb55695975c | 2 - ...c494bd38e4819d847a4ec37708f3bb2f4b4a8354d6 | 2 - ...128ea28870866a718f0ccc788c5cb42371ca767cd9 | 2 - ...e630cab56d8296efab7f2cf44f3342e0cf3646266b | 2 - ...49e37f704f3e71c4f8576e676c957237506ccdc5f8 | 2 - ...013cfb43dfa1886b5c523b205c7e4e1073ac3cfaf5 | 2 - ...90b6ab0ecae21a1eaa868f58313970ff18a0b99ae7 | 2 - ...fb25c9586facc0ca580cca1690f950c0c23e25d5fa | 2 - ...f3d842135c7ccef35a9a622dac7aa266e8f2a29764 | 2 - ...f202b6dc3da72f2084bca9957e6526ca0c406b0c52 | 2 - ...8d8f105cd13da401ee121c16d0f34b3b9eb351b103 | 2 - ...9a021a59cbb24c231f80f0fa1edd7637ffc348a818 | 2 - ...c445ccb922e6275b37da0e43cbf7b50b31fcb32b84 | 2 - ...72364ad62d6a501f741e4c035df299f2619205356b | 2 - ...51fad18cc4cb9162a930c60fb3a19e93397e0f791e | 2 - ...d3de17a44ee657d3292092b88a533af7e83555b65f | 2 - ...bbc851bff7c0396d4d623b8838da394f95693f9ac3 | 2 - ...cd6cbbdd21d0659bd00dbad17fb6d7c8f291cb55b6 | 2 - ...8fd18abb06f2443c1b138b350d7dbc0949b98d4c85 | 2 - ...7014d5d310a7d2ebae77b56020f8868a37ba910d30 | 2 - ...a25147759190880cf879d95050dc4fda30364042ff | 2 - ...48919adba5e7ab418856f3e7a196fc8afd9f954c38 | 2 - ...c7ea90ee4baeec3e8536b81fadd54c91f203762917 | 2 - ...43b6b852b0c637fd2a37c0ca66d083a1985c600bad | 2 - ...03531e7c02b520a09e1fc3301f6bd3bb8808ed5e55 | 2 - ...9d5f4b2ec753421a0228fbbcaaec6f86c6b8900931 | 2 - ...b639a961a3dc4a6e0f3ad523da9128b41304f3917a | 2 - ...6203c34982f6d204c84d89631e405e2c29188e99d5 | 2 - ...c97952b549e62b2a17a47a15c1c0c7f785a1d018c6 | 2 - ...49b89275fd5bfbeddd4d94bd7b307fd921cba3865d | 2 - ...b95f2d2258fdd0100c97057690a28eda241bacafec | 2 - ...b40d2d24f162fdc5c9791348b24446c8c4c2bc3b49 | 2 - ...90db5e5c136f6d361469f84114a54d8d29603be70f | 2 - ...5d581799ed3112ffd724e667628a1081527bf4c2e8 | 2 - ...5013f4cb18f1f4fb8e734b1bb376c9fdd9ec382755 | 2 - ...09a14abfd1cabb1a5dde9a97ba927252a7491579d2 | 2 - ...d99fa5306ec55e65914128ef0f716ab5dd8b390a4c | 2 - ...6fc3c272bda3bc2db117695d80ecae56e3afbe49fe | 2 - ...bb79f4d574818d74957b41ab13a6120ef005943468 | 2 - ...57d6b2ce6d373a2c63ad01d0ea2f7e9067ae95b1d9 | 2 - ...73630b8a5e958c592e885858c348405eb063226b81 | 2 - ...34a6a114d4c065a9d3cbb84ac2d3b65431d4668d23 | 2 - ...3a691502530024e5c3e7224ca5f53b949c3df43c57 | 2 - ...1312fc41880c0de138f6fc7ac93fb1443388c6160e | 2 - ...17f48aa0c8f3cd34d7e03c228fb60c2442b9ada629 | 2 - ...2e3a2665fa4f8fb449173de566a6f27d3030030430 | 2 - ...72fd65b682c4ea3af4c7bd4e1bef8aa24439c4561c | 2 - ...9cc42612df29807759908df48a3f78102ba7b61174 | 2 - ...fcf8b9e4305f2c18e4ea45e416f7764cb5675368df | 2 - ...0cbfedec2a5e4c2c26ce04ef73ede0c957ec8eee90 | 2 - ...561ae09d393781a1a3d303c84782684d1e2359a9b3 | 2 - ...43374b045b2430fde254b11f0d5dcd598ab524612b | 2 - ...e003bde78c7810b52d90a74e012cc4986a3f5de22b | 2 - ...6519c91bbb8361d21a44990d891b74fa4ba3360d00 | 2 - ...d08992554d672f4c94481dcc791664224c34536544 | 2 - ...5c8c049ac70f21318a6e7512190cb3ed8c8f7120f4 | 2 - ...e23c26e6f1324c5274d20919987f8cc6b8639e37c4 | 2 - ...d8f152ff55ffbd139fd93e938f68faa1a928b6982b | 2 - ...d022a3c984b5ca1e37dd381ed71f3b22b298a2cd6a | 2 - ...e00ca3b4dc9704886a1a350fda3836de162ace2427 | 2 - ...66e874ce79a00c91eed53ae828ecffd43b417b6a1b | 2 - ...e12c8ae5b37cfb874f81899d3fb3a281e1e5293a90 | 2 - ...a7f5923d66de59d33d786765e69120d8b8a915e45d | 2 - ...99514b6300069440ce006ad55fc06d0f3b30d33342 | 2 - ...0af342c708d19ea6ce5240d3733523faa61e3aac27 | 2 - ...2f19af4d90c644fae5249267bf18b6a526f86febd8 | 2 - ...1973abc29f193a3db5f9a87d5e14f92051e821fb99 | 2 - ...72b03e9f399ab203a271bd43dbb9c53c09cb96a853 | 2 - ...43001690a84a7cc109725eaf478424a5b11d906224 | 2 - ...c142c7ffdb6f28c6441752a0d0e36d41baad3f654d | 2 - ...e60ea9580bfece6e6e15cf7a917215d4ab95313f4f | 2 - ...7d98370b72230cb564d96142309147a31efe1d69ce | 2 - ...6b1159b03bb8286dc252b8ccab790b0a566fdfb4b9 | 2 - ...6a6b27211af6676e645077b28c28c7ab73eacc9331 | 2 - ...2a0efafbfdd377f6fde4cc4a56415c38520871fe58 | 2 - ...cece7dc43eac97019345958e941a2a4f5d171bede5 | 2 - ...8ad44df3d1ac60907041d7c6c0fa087ecb82fdbdf7 | 2 - ...94dbb768cc470948faf23facfe197080a52f1b1dc4 | 2 - ...a3bed23ddf1ebdacb0b2dcf6840e8a864af8aa6384 | 2 - ...dd4887fd08aafc0e7532a7c0c3b8fa66ca5298d15a | 2 - ...723760c65e91a7328d4e22f43555518a40568f72ee | 2 - ...ca5918e3204a02b3498754f03dc12feccd95996a54 | 2 - ...9da5fc343a77300f9f31cb478880b85b79ac22f581 | 2 - ...9d67934fa6122561f6d0c3c7edaa022570c7bcc201 | 2 - ...f868c59b6ede5891dc7fb541a717fcc07a99ff1b04 | 2 - ...15f83379a971386cd663b1bbaf075aeca132839990 | 2 - ...ad414813e17ec50232495f6a57a6d316b4491151f4 | 2 - ...0a309c7f4fb559611ea5da997366bf0a16747c0b7c | 2 - ...b8d131beb5a721036453e192273048ce1c2120c8df | 2 - ...71ec024491bde8d3ae5983a0dd421711f21572a426 | 2 - ...3d9974927fcf65ef90188c8c61fc9399b4b2307479 | 2 - ...b21987a1e73403571f4141cd8052c8fddbaebe0509 | 2 - ...94a303fc8bfb8a86933a2871e917ffb3060c8ecfb2 | 2 - ...f6326f96f5addb79ffb34dccefd08e0d998dca280f | 2 - ...3537469be2ba68fe8f902211f5bd14d74292a80268 | 2 - 777 files changed, 2 insertions(+), 6952 deletions(-) delete mode 100644 runtime/dist/bundle-src/custom-widget.js delete mode 100644 runtime/dist/bundle-src/custom-widget.js.map delete mode 100644 runtime/dist/kpi-overview-runtime-widget-2.0.0.zip delete mode 100644 runtime/dist/widget-library/bundles/custom-widget.umd.js delete mode 100644 runtime/dist/widget-library/bundles/custom-widget.umd.js.map delete mode 100644 runtime/dist/widget-library/bundles/custom-widget.umd.min.js delete mode 100644 runtime/dist/widget-library/bundles/custom-widget.umd.min.js.map delete mode 100644 runtime/dist/widget-library/custom-widget.d.ts delete mode 100644 runtime/dist/widget-library/custom-widget.metadata.json delete mode 100644 runtime/dist/widget-library/esm2015/custom-widget.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/color-picker/color-palette/color-palette-component.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/color-picker/color-picker-component.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/color-picker/color-slider/color-slider-component.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.component.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.module.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.service.js delete mode 100644 runtime/dist/widget-library/esm2015/lib/preview-image.js delete mode 100644 runtime/dist/widget-library/esm2015/public-api.js delete mode 100644 runtime/dist/widget-library/fesm2015/custom-widget.js delete mode 100644 runtime/dist/widget-library/fesm2015/custom-widget.js.map delete mode 100644 runtime/dist/widget-library/lib/color-picker/color-palette/color-palette-component.d.ts delete mode 100644 runtime/dist/widget-library/lib/color-picker/color-picker-component.d.ts delete mode 100644 runtime/dist/widget-library/lib/color-picker/color-slider/color-slider-component.d.ts delete mode 100644 runtime/dist/widget-library/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.d.ts delete mode 100644 runtime/dist/widget-library/lib/gp-kpi-overview-widget.component.d.ts delete mode 100644 runtime/dist/widget-library/lib/gp-kpi-overview-widget.module.d.ts delete mode 100644 runtime/dist/widget-library/lib/gp-kpi-overview-widget.service.d.ts delete mode 100644 runtime/dist/widget-library/lib/preview-image.d.ts delete mode 100644 runtime/dist/widget-library/package.json delete mode 100644 runtime/dist/widget-library/public-api.d.ts delete mode 100644 runtime/dist/widget-library/styles/index.css delete mode 100644 runtime/dist/widget/aab5230a050927447e5c.js delete mode 100644 runtime/dist/widget/aab5230a050927447e5c.js.map delete mode 100644 runtime/dist/widget/cumulocity.json delete mode 100644 runtime/dist/widget/importManifest.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~5a50f6a0.8586e64f62002fa0693c.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~5a50f6a0.8586e64f62002fa0693c.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~e4dfd1bd.e4e2abf51ece4378c310.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~e4dfd1bd.e4e2abf51ece4378c310.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~ffdf5190.82f3227bf0ced29661b8.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget-vendors~ffdf5190.82f3227bf0ced29661b8.js.map delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget.c3ab952931da8599a6a4.js delete mode 100644 runtime/dist/widget/kpi-overview-runtime-widget.c3ab952931da8599a6a4.js.map delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/0a/82e6d907db091fda44576ddab2f313ea9f84c7ae309f9260e975c15394493c8fed652c9631310cb662d5b817ecded2405cc4f801144284f03dd60c45a1b3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/2d/632b0e982e0eba9de5aac5633ea0c463e61562625c7d5e59fbd05f1c969269beacf074ecee4acecfe564d8a12c9f57e67c7506535404515a7b8f6d3307e5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/01/bf/f6d73ea958e1152d9ee9de71ebc2601df666b1bf1de59069076980a2cd4605b9ef3f423e879957ba5f964ba2c6b4775b12f2e5079db245f5e216d47e189e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/01/c7/98d3b03bd5bc812cdc667be885319138b2dbf0177315cf4d8eb27e8542cb6d604ed7ece365b002c60c3925ef94c73a12a5071bb05ab1b028416dbf024ed7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/02/34/3a77584c03099ab10a1c12fb66ce93b32aacb26fccf70bcb10f8a55b3bdd07f57ce7d2013f26a27f88935980a59611a9473f9a643b247ece628ce6218327 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/02/86/42c441cdd8b3f204b98c6a3cabf86beffadc4039688dc3e800d54ef92ac98a24832eeb5776e4ef3818e76bc943e91cc5ce9d9c08ffb388b530925fca1e3d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/02/a7/6526fb45fd1bc26cada89cbc06b4ed22c504d5e24725c40b6a1c46cc237f8626e20be78ce41327c5489aabb00fc7544c18bfb016dcdb0dbd99f56f4701ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/03/08/87a4e8a33e0c682f5747ebdddd4a639d8491e73d09fe905d0da561aa5f3088df33665458a93aaf6e888f66d88ef99a3992c76d8f8c5b78d639650bbf48be delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/03/90/d3b4ec65911e7c9bfeddd8af6939e0adccdc8477e9bb8a0ec462ffb7720402460e396905a19e9daeb3266d4c03d6e768304b9d477bb2c20d390884ffa6ea delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/04/a1/f846f8272b07c1b440157897d72f5f4e186d38f108f52a98675fb3f688301bc5416afc428bf66047b6c7bcd5584029be745aa1e562f9807af52ac5198710 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/05/0d/72200784f8a1e695619c66eb5d9f3815ac85154ba548bbf232f190b60a7631c156ffc5068784616e4cb2518bbd5e846b518164d5cb0f960ab6744e191db0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/05/f5/5069e535e4fcc6099c3e1fd008683c6cc4f5408f64b46a1422251277cd87c6698da13badb1a38635b1ad3a43cf8e20798bdcb46920b935508e8fa0603852 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/05/fa/98c905c01733cf0b45f4d38cc44995ebf68e7ce282fa1cb47f9713d6f8cbaa4738b73b9fff0e6c1607f91c51942e5ec2be52168877db3a4a764b8e9d6f26 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/86/c03db8756eac62ceedcfca116096549191abe5d999ad54752771d8fd8319cde01f4a73a2f8a5e9955ff8f29d51a3c6fa01ad733c3a554ccc79344d0fde44 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/a8/51ac501f115a5a1373b378b533458d358f2df4791da562ef72ee4cecd5f4bd88cb77738a9e6ca2b6143266a9d385966dbbbb9f788697018e5e2b02df1aca delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/aa/bc28a2b07b77449223b337f346e6a74da53b3ed2ae50c27db192ca2fc5dfa2dc688091d5095253e8f8da61ff612aaf3c38963582bc2323825e83c2c1d517 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/06/d6/4ec6b2e80720ce47d988f0c283955edc7ec30f8b1e796b8fb0e5271b82d28b9ffa63a5439bd0ddc8e2d406e8198e16e65b455b78a5928723f4eb50308c13 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/07/bd/1e7fd2e96fcc016066a957c04b34133efb10f6ce21afd28aa1e7f65d016d259bd89d2184e0b2e93955f8abcd34c9874d523dc27e55ad7a3d05cab6d3e6c9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/08/d9/151c4cebd12ac37b06235de7cd3490ebbcb98b098e4024e71072f56e7804b096ef902c872c154254e9cc9347b0d25df781e10415ff37ad177e0c8bb24112 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/09/02/fc08075fc51e4cd4cf62d44f3a860eeea5008c2fa1a21d2163ccad790b8cf65b86202e3f01ab4cf94840edb1ce40bac535d0e5569402b8eb7b44b1b2819b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0a/40/1c581d12fe6301c23d28dfb7f06d62be4ba991b5bfdd4d3316be797e93e96e513043375ba217dcff798ff97694d6e422f752fc863450718d24cf2f456f7a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0a/9b/45e8c2adcca2e913490f4ae6b606988542d641943f8956c8f8318613662af3ebae9f355a20c330dc136672ff00fe05712018582559986219b7cebfcbdc65 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0b/32/de7963481460b86e0bf603c2e1f72fad339bb7d3ecc2d0444b7b4208f15d7df891140a14bbf2c478bd5d1bfd4629e4dc9cade40508d988e1fb592bab5f5e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0b/90/7ee28ac3a1561daa3b89b8416236f60bf11b04961cf70f03616bc22fdf963a14559677d9ba26fd5fa1004532295dc76ae2e96fd0d41d91b5cb0c5557eca6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0c/80/71130396fa1a03d280b4f9d3114588fea83fb3d168fba7c8b2f5e65dc6759a6f6776aa26fbb8a2050973d4811bf449d2cbb85e96e745be167059d6295bba delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0d/07/cd75fe56cc21f54d0216f5e82954fb04ed837997ec2a2bb0bd94610e54d9e6e59024c7b19ce268cad03fe1d331aa54a87c96f44ba4c6801b5fde84c0563b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0d/6b/64a8d35d024cf09faa93084414abfe0c9d9f8cb037a88afa541825205f55bcab9dbe6d30686ea827c6985c0741d2d8bc03bb567e06bca35c60b585c42889 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0d/ca/2f941122995984b0d888a7c27b170b65224b409cb21835299263497c7c8f96231234c248caa08a8d1f769350c785c0792e5ca7b8fecd80cd73418849df90 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0e/ed/de8f0e7c2defb494ddf77d903f158ab90970011e47c89f5f98ce01e9cd3d1d159044d0fd8622f0e2f62892d378a552958df0d005e0b37ad67cd49dea4beb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/0f/a9/f0f2ee53177498c350adc86260000cd22d928c6d38f01dd0bb9950cdf434cc04e60ca8f93bf77fc5007b1df61063997ac67609ac772eaab91b89c23989f3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/10/57/dbbe24dcd7c4074bf72101099e24f266b57fd8adf7964ebf37f30e2504dba9aac93f3f8efb5acfb8dd971e664506445287c098e34ec7b51ba73485e932ca delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/11/00/df70ccf1ff55ac3aa203b791157e72fe5b71db401cd52ab9396ee726758b432894abcb6c37922d8697dfee0db626ddb03f976bf3cadba542ec2b676bb72a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/11/07/4086f3ea8ff136643d00944a110bc3fd86850e09dcba1384b3635b43449f71c787115f51ab6e54810d590fb2e28a7c4a1898f36a34e5eec610e46ed1822f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/11/cd/e34b7de16e1b2645719d061bceae00121c1c8e482bf246d8b54c7ea609c34dcf14662f830d347321364de67b251e20f4e5d27158857938cbfc1721702175 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/13/70/74b6d817aee14aaf80a7f97468dd27ffc5ccf6d3fb0d4592f7a8399d494b463371d12814ac5716b70f5523829cae99cc361574e87ca50340de629f954590 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/14/15/1527f257c6ffac2b2663935447adce5bfc3c6aa658c66ac62024eae98a32d90f5a88a2e5a0e540a9afa7969ca9d2f44739c71da156ac86ec146fad814c89 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/15/3c/9c4145343d53903afb4dc476f3b5a7848ae1fa351ad8a0743b4dc0cb00aeecd1bf7ed17cc98950a8713d7ccb0458782cbe79da8c406cbe58dabb1c4fb0e3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/15/54/aeac4d384596121dabb71e95fb0fb68ee33b10f48f36d95730fd7a5cc2b3efc1097a28c83149e4f52c6a35a76c726262ac4a36b8af701e2bbdfcf590e140 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/15/a5/0fee7562c01e99c41e3a40b24c11f5a03629db4ed9fa6225f7d52b270ffb8f21ee8dd03974af1c2774b19424c51f425dcceb9858e734a481d3fd2ac0471b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/15/d5/81b74ebd9439782c05e3c2c8d6de01f91f6a019f783e7b2c727fa05e47b4814179044909aee2ab988a3435642b60bd9f72eba5e47e338cbfa3ad7b64f4f9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/16/83/c59e6728929c16bedac11b17a5776a64b148b539a6c891afffeb1ba1dd5f2df8343146f11573d352f60b28ec49595adfb2bca1ef92f5e06bfb46d031df0c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/17/bd/c7df5a7355f1d89c0d2733c3864a91a670bce573ab8655cf8d4019f9b631a0b96c67ca4f91f7c294da6fcbf8dce046bbd47f8af9dfad81ba190d21494fdd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/18/39/c81c4c24a0fef257b01250d3dfc656de6188ba73c1fa765cebcc00ee1837cccf236040dd5193e1c5ec8a8d894890b10289773ea81ba8bce4a366252bb0c9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/18/cd/4eed9aff763e3fb110ec0bfe83abcd68c773ef6608ba2e9b9fb420eb205e7138980194fc07538ccf56c1b9e9108f09fe3383a95255941f6f15716f56c52d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/19/11/9813e240b3841cef4e92a495945dd4d335857031e0911ca8f2ac18287c57d537706196bfd0136e0d50cfa6f8307e559756c8054a2f188e33f485ae144785 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1a/0a/06090a1601fcb297aba865b55275c46e8ba5b30495c2cc1e465d840fe9daa10b330f88376c7611cada6ae93dc5a20fc2d9dbd914cf32cc428f81f9d75869 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1a/12/3513e43928e6d50b568213f706b98be0ff6bf68d730145cb79d22a41ee66c9a44247bcec7ca62ce4c6bc7c53db4f127116752bdfdfb5279bafbd9104fc33 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1a/71/193f366e4694b80dd91da82f1a3edd5d6ac416fe17ef80a9216ad94d10e68acf35b99f880fb5e17b940163fbf5e74e03577238b608a8e8e28639f4d884ca delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/59/9507d39e19a3107d481bd14dc3cfa564c4ee1b879d2b1afdfd8c8a5b87a5dcce53566c2c59decf2ee1f8f045d1c6ca857cfb252c3bd2aa328a93f1a5b1ef delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/c0/bc75332cc6a4205202eb21f2763e3dc93ea3d13cf3546d669d22b22059db45ba21d6402b0e5de6d239b8a56e608bc7d9964adbd1db8a4bf9afd548176242 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1c/7d/f97b4b9c69635aa802816f3709edd4288243e8ade7bcc941f33f06a8e1d2665e0478bef9df6da5cb88727bdf34b1fb6c23d8fc5c1a6bc5b12fbe02a840c6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1c/b5/51089d555516158940e8de71ed73a24266e20cfbc9d5513183ee2cdd037f0379c299ca6a7d339795ce8484a08344075143ee6f976416617f112f43a921ba delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/1d/2de11ef6aca6fd96eb46fd3dddb62b0ea6771219fae99010199458820966a2cb4cab4a684e245759de62392dcc19ba69df23c8bbadb79080550576beaef5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1d/a2/049e4c1754be9cc90b74037ea14825ddb06ea5e7c9a15ea7acebba6f8ebb9db282762333c844f87b1eb31adefdf0aedde4fb6cb11397a036a7e8acb54c6c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1f/fc/574615ccf855344a3eb446b55582fd8036ad4385834164ddbe49fce012c566a2df773939f80bcd260d9d38aa0260cf83c0805c715131d366eb6258cfa2da delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/0d/5386464b3d30da8ab6fdf6bbbcd3e6528698ac3931e4240034359977767199ec6f695632ea202a5307f3408d6b6b518b377f0dbd83986e45f8ab13a325e5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/38/7114a41fd6e9037fca479ab2e7d6951fc9ba6240087ec315e94da14b79029d14c3eabe0babacb69f3702589ebc7d0cde90628f0ed8d7b6779159df908936 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/23/02/86118e3bc81aae08491e3e87eb933fc454ab34810a4f1ffa5614f1e662a610ffba2e8a48245b9ed03a108baaac96b09d01cba316c8d5e6eb38b9a55d8076 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/23/24/96799f0c8612c794bd9bc6d1cea4a2d455b5275872efba6bf6dc36a2d5586401c1d2fafd325072eed1877bd9323bb53fb709cd8cb0fffe0ab92e676ef46f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/23/a3/fde49630b67e65ec19aa295ee3f028465f1bc59d7eca39f6a36ac26007ecd82eb281047b55ddcabf1a7616f9633a6a0cce7a680ce43fdbb774943113757c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/23/db/c4582b16e886b9b97c1d14aeeb3aa5c1efd58bd0d1f262dfa104e94037bc0012e0141fd4be3d68551afcde515a61c54815fa4974210bdf6656c740f0935f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/24/76/d90e3e75def43da1e3d83656034873313ad7c7f16babc5382956b6a8de25ec7660fcb6ea83c497481c2b9a577819c3dddef3e70c722ebefd3356ad20d586 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/24/84/cee073e0cbdcf23a69b15fe4a894001343776ac208e326d773b1f78542dda161e60404ff10868964b5e0c6ef655a9dbe34f19b9b07252052d4f19104244b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/24/b9/e2b562f2784bcd372d4919c08f8a2bacd5c0e94a05354aa6cc7ecaf60af2b17a4303b262ed5ee610e1f858778aedea05a0da127fb32e00b1b8fb2a974f13 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/25/cc/dc047865c2c0b45bf90644a2786e83f8397d54510a5e106151310b7078135499b366b19bca802701ddd5815361781140b5faf0a154b9eeae37db59347b38 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/26/6f/431a7472375c8f9d2f727bf0094d039e3fafda61b1e44ea69a5c0cf93a4a1cfdfa2bad832babd1b227cc6b0f75c88e48b3a78f4fbdcdc25b2e8dc1e59e3c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/28/f5/0f2c708a027cd7f065ac1b1e214ebddd812e478c6c9623ec8683d8655f4fe64a25e495059637757723bc6f2f1c850e99a9d1dd8a11d67c0dd8382295d18b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/29/76/5cff59e08ab476ca3feee55aea94f6cb290a1777c7bd4adaf2c696ee15809c73d0560e3075d5c4781b579b7ba8f61bb6be6459fcd38d93abcf15f31c413b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2a/3e/685b73c60bd9dc8621304c6eb71f75f03e35237f3c711d752dfe1fc9c2ab73603a50bb081a7228238d4cbb4ec9fa68c0ebce776577435bdbc82e7dd5d8d6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2a/cd/8389556f6e07b23fd43635e40efe6bd117d4c80f1fc2d42bd9fffd735d559549513597b68a189bfcb8deeb5af825f85b6d7d88a26db0decf10412244ec21 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2c/68/a67c90b1d24f36daf3ad3204113456889bb88d0d8d53a7645eb5840286e0bf7785450fe5abe6979f432b90ec24d6153ba78cd5b3fc5b51de41274105eedf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2d/19/366c4e28d4ca638e0ddeb157d49096a1ddea06ad44d1713c5424f9c94aecedd16de5879f07d5e51e0bab7a5a325967eaff8e4c04025c000f9ac7710be3ba delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2e/10/7d9c05b8232f57ab029dff050a2a8d34be11481f2ec5582439bfdbb9d6924a673ec985480f4c47060074fb4876967073cc3169072b4bb482f3b555628626 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2e/18/1092e36b3765af4078c9202708a9a10dec0cf438357c1eedff4a9b280dc0eb75383e4adf9a37d6354e78ee0d28fa90a966f6963e5b75441a27172863d0a4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2e/d6/3d6e83eed90650ffc7ccc268cbee64c43ebafb9152357024e73dabf371d8cbf98b94b79047fa828a9c16aca9f485f19872158fe7390192bfdf1b7afa638f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/2f/85/36e7b2312ab276286e2591aa905b2f860ebfceae0fa0a1ad971fb97b257b43a9ea15fecf41c5b90a0d6e6e4cc97b8b6b8db692b1871ddd5702f63a3f328d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/30/57/ff4a0bd99ba277fe5db7420e528174ae1518784f353f04b8969f046fbb8e956c0bd6fd55da06bd87a70a7e98a5ec127b43ae53b081a88b06f4f0633b3054 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/31/b2/f82025adebdc6390d2aa94cef1d716da2098c371c5e844470d21bd06397d184f61386b698f6124d2ea095189b85e57333c347b13aa3ad5d7b6e2f0a7f5ef delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/31/d6/7793593f36302dbb252d9c485559d1e19b84715cc487b790b0773569fe958d2349e640e5f3b34baf3caf9fc4fc9a2c493ef3b346304ceb9d46609cf78cf4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/31/e3/65c30f0bbcf008d46b47341feeec5e3deebe0cf3e30e86b16ba441e2bfeb57cd14f9308355b2f5c763d228f774cd84e7cf922f4f4c60a9b723491f932612 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/32/6c/45abe5a188352233d4d757d1baad941b5a83c55526f46aaad311b064ed9ab130de92ec5a83769a81ea64472c885260246c8031d7dd9f4a17aee5dc86d45b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/32/7e/21fda18144b5658db5f7bc0c4b474170a636ece7662617e79f716710092b1b9a7c688810d1fddec68a67f59a51d0f7077e8851cb593384a8a9eb82060480 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/34/2c/95d66f40e7e21280f5560e47c6f6fe209ca3efb051e11b94e5db8d5ca247f2c0ed9252a4422231297851921dac19815355842d78c837833b2ca5e6a7ee64 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/34/dd/10f7ee112b310c255c3f47583d7cab5eb99d9f4b9ac9e0b544478da70d28f995616e025f4d7edbe7c534983b29d8dccfd28d523ccf9b69375b248d0f1a17 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/34/fc/9de5d96aa4bd1c8167e4e269992494f4dcc617a1bb0ebd61664c882dc58c286af245520d66947f9c6bb846eed0790edb0ea9cff53c68d813fdd8eae3abbe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/35/7b/79e2c9365c0e3bd15fcf53d283219ebb88e2943b4e927bc1c504cdc159bc8f7c4a55db65b8ffe334b2bcf83f9c66bab3aae32c7adf6a7c8323ba707fa1e1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/36/34/801344abec00d6111950697e18c391f87be555f3eedc6edf3fed28c1a1409122642eee99377bb54da69e4732a486d4024f3734c1ce09e5ed71c6c925fdbf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/36/5c/ac2d3cae379cd4dda2883999df30bc1b6ce264f0412acdfcfc41f2131a43540c0721851f6b932fa984b473f06a1aa7a7b32798c2de3cd4794104d15fee5c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/37/1f/a0a6c93450e197d05b0ad1f17d7c9f0c2f7ca2a19f583f9a946b59ca2ce8dc0b4e4cfbe8f1bb8089f22026099c5c548ce838a4f1b8055407390894557ea7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/38/47/c4637975d8a1b91c3fb3aaa53f6f5a7ad7048d6421c8223c743b990a1b23b0c131847fe353b6f0ebda786c9dca96a7dc20ac3a2b5289ecced406b60a3cf9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/39/50/cf09aa13b7312b35fa0a042c9d29e1919b9803b99a10371e29ff899b262a39b453a8e03df9785ecc48476045bf32bb85ff506b48e2dff910ec2d6ea33ff1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3a/14/cb71abf021fed8b39d4a542702292d2f7537972cf8e0464d35abf5af57f170064aad161c5469a6ab37a8a8900e64a9714383d65d372cf3ca048b9e7cb333 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3a/96/fd9cad2b2cecf52ca15d491ad0f5a8944a1ec5387c6fe32eca628bdcb30070c69a2dd64be31bcc090b12d33c09e069f24debb9a198e4ca1241012c576872 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3c/46/f27c313213c4e057216e11414703908392fc3c7f85f24fae4a045588ce2c13f13af53ad206278f3412e45795626f2b8f6245769e3b3d1be705681cd27bbe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3c/86/ebbda79da58a092e638cfeb2956aa2749fb18361410eb337e63a4874dcba1997f07c1473307909cea597816989a31a07684b34521d7723d6ed5674470b06 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3d/25/1ce52d21e6d1bcb2bc57eafa6ddc726b9881cb1a21a5789c695ce57666a1c396c04f54c8e618fc0d626f5ae6e8354f78fd3415a22d4676cdbc1862fa956a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/3f/ce/a9b3306baddf42473dd78ab5dcbde2c68a17660f5156ea9862e3ef314487e35036c656d22de70229b6aab30737db5b022043c3c9e95378fdec2ff5f4af5f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/40/82/cc066a1145d42688114aa31c2b771bbbbe5d1771346b912290fea52513502a39edf3fcfcb8d07d24a032e61d117ada69a3cccd14755fdaa8c81fcc2e4400 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/40/e1/1d5f7a92bcc2a63fe277e28bdeaf3bb951644601e9118d7e59682dd73c0ae8ac13dfecf5afe13618ae3b116278772a0175581f8dc3650d199b2d530e6904 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/42/15/22743f8a7559bbc0634d7364283e5c708a007093120272090ccd7fc2dd7595e22ca5efdb9ae27a12b36e2e70f3b68b93045e083d73b2f773549be8526926 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/42/6e/9392e7371366b405c4efc016c61d40f6299ca9dc07752d1bcaefd7fc9c23fc5ed12ca5571f5e12d7a0494e05535104a6052e897fd6e47b82b2700ab0ac41 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/09/91b178fba3581713582365b172fd2e391935244049a54d57e3940bff74e22b8710e4e56893754c00daf0d4920d7261c611722633d31f35a173f87e041ee0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/43/ba/a029b50f111b8cb300badeca399350ce9a672bed9210e6a9a8bd3b5dd93e47fcc2a6d0f58054f2e83e3dec915db94f61c979281c3a2c6a9c6922042e8fe7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/44/07/de7ef20d156aa64f6ad6f88b64b4fa96b137762e3490c42ae1930b37276a61065ade8b7e9e7e5183aec9cdcb2419068ee84a0cce1b0609a27a79649f7362 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/45/58/5ce0a30712d1eb4262e10c33f17081b5c1440e710c1ac880a0f295125a31a4347c9fca82e8599f0b3606b2ee8d72c2ae6258500ed6eeb95d298bf4c1dd0f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/46/d1/c57032e18d4d3673a5d53fff2b4cad0a030d0d6b123f8bbc7201345e90d0f6d6409507544d7d2116ff9c3cbc0708a028fa780dbd9c9f4236e5716e9bad0b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/47/3f/4eba814104061521fb23f4e557b82a2aa9a72477b62e3868a111ac11dc2b1ecb161ad0bb7b33c0f5a59fd92d4707b6cfd8c517ee882433b5b99e510728c6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/47/d4/0eddc2e13c48ffcba1655d9f4c5e36f39ff477c58d460d8903b3380e894d348a59f99261ab3a339e75f14cbc0975cfe2fb0bc2754aabbb96e12723369b15 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/48/6d/2effd59b20352d21154b38f7fe101b372f72db57156d7dc075045248fd97880c20ff395ce2cb0ab9a92d59ae6b0fd90b195028baba47d73494f98f14944e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/48/8d/0f5dc7ced611b06eefa2b7ce070cbc4f24349140248d48dad864f53fe7c96e700a2238e0f9e8a2815c3347cb312d95e95e1f045e87c234d1fd6bfb1955a9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/48/a1/3e3c03dcd712db42839ee3fcc2872c9b79a9e8d98a0f91c68f8705fd66833a116be42300ed6f2fa7964f1fc7628addc87556f72ba534ad76b703a4823602 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/49/27/88b4fd8a2faf2be8fc313816083887534fe69ac2de417af771a2af16ad204cd20437fd686f1ceaa7a21eb2ea253348b32dad674b5dad3d502e2a748f87d8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/49/5f/c0f152ba2b88f3fe358b470b518766f158f02430f027e5825b2822183f1da87514298eabdf3dcdef7b22b8754b5cab4536ef54cc2b6706d28ab64e4eaeb4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4a/00/2312b3281cdf13ccceb0b93f82f941a5f86b1b1815799cf8956d9360b96a8b0e99d7b5dbf376d0aeb569c2861ce3ef2e694140f49785275510d21cfb410c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4a/91/f0747a93c99f2d51f7b39403f79f0016e8a1603e2f99eb4c67da9c002a9980eb07f929c8b7300ba1eb2241ac2d5d521f0dd1a306479e4bda073b76e66f09 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4a/9f/1c9bee89a42e90bbaa653f205be0cca9efec78ae2dd85c5567309ef6609be858ff55dea71dd340f2dbec9ddd9c1d2b9dd5abfb65d887e2a5f614f07b2100 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4b/c0/a0251b08be9771b97250a1c3a8c8edb553951afcbdf4561ae37a156a1a8cad6c5492cae070ef224a81639bdad8d13244c21a7c520ed9612a14eb6b00268f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4b/f7/d89dd0afeb2e527679940974196c3c06bdfb89ae8ccb0263013c72599ee4460d34e966bfe102242da762e2455f97b192d431fef80e8c3d72e3efc60f3812 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/51/35/4b7c0483f80b5f5d8f9102f576ccbe9507ab79197fcafbe430a2a8207657842349784a410035d1537263d6443ce75d9f38e71a6219bf534f8021542c388e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/51/3d/5e2ce5c70ec571bbd72e881e9905be1cbccffc5269e9059b471e2de1f29adfdec0c4f879efb4dd3cbe37af23ec76d0a82a931daa76c44b2d8e8f6dee565a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/03/2eeb34d7fc88a1793f3a8ab99b1d2a1d48c69bcdce1e82bc7393ca2ac34de74347ff9c7e36405b26367650e71e0500b0e81e78f86d3f7f13497f12fbacae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/1d/fef89970e9dcc29a054f422665b663da5210ca00abb6542901c9daa588e13a7bbb7f5a221ea68ebbf51d93a8e93b9d2f0922285a3f788a5e8dbe63d0eb5b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/37/e96b722fdce154dd01dfd679e6f983bf616ef6d917531e04dace4b7490fbd587ff14db68864e687ac26d3edf00a428954da785c8fc13180eadfa45575d79 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/8a/eeb5a582b32d19782eff0334aeaf7002431e9d1d7d60ac2458fa13e299d774bf6a62b75dff51a5d816e71ca792508fb5aececf3d99f44f623b4f2d8a8498 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/55/89/f04a4626a7c86d3aa3f742c9f7d2662b2a1d79b50079946502958743e8b4c1c7ced42e517885913116df1146ecdbc95869c69fa8fa369bddc191a7086fba delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/56/e6/fa5dae9c28103e3de839168d7c745ac30d101cc8422d85cf4d12aeadbb881e205d33c52e997feda12821af61d1ac6eac58da5ada55b5543cd7953d015d4d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/57/60/59f6a3c65867db6a461f083a75fcb60f8ec2d2617bec6ae5566fabe308da9da6e7ce20d3f0da4f4ae19e9bfac111940854b65a8a6470f3013a9ef125fba8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/58/1a/bdcf1d7097a8ba22d3ec57d0eb2ee800d17b86881da70e2c26b5139c8eea6ce29945346441643c4c694beaffe4aeb8d81dd8f6dced773f1ee0793a676cb1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5a/ea/b5414c72ef8a9830432c3588af74a25621b29c6e6e341d99e4d0ea98d43261ccb5890b6a59a7d6d2103c7a093898abd6048813e17c36bb0ef39821710b94 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5b/77/68f86348ad824178957f733b0d5e3d99a2f23036489a84f887c9c63c242b8aae4d51a680d0bd545defd19b65567942ed889e3ad7c65b4f3f2af631303624 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5b/9e/4af75f7958f103d0004d071cfa3fcc8dcf0e71895f0483e5a19bae25ff54ae9672e90d3295503bde1837ad98a9f08d35aca5687f1ad72a81ad1c639f5e0c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5b/a1/88e43232d0f2ce9296645b458106a9c5cac06ec64f446f84cc9e289945cca1b4f0aa7aaf3fabc83312e002d19f7e3c09b3b80eda98ff3a469de2f3def247 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5c/39/b238219248bdaa954b8da30020d08c33579e344f8fff0ba35c9c1759cf38b753489f9a0f81097ef4c6b037858971819114340ca9ce77b7f55b4d6f76128f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5c/48/c22af33c68306a8fc48ca5f87f5096bf40d902642b69d5f2a42ee896c104b6a68ca081221692c52bdd389fb67f4f45368b058bf8f3e88b0375f5b322e9f7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5c/6b/ecd021213d51b4a1da8ed151e17d57262e32e69a57273345b415ad6256ff5d6e730e5b02b0495bcf18a3b08b9d28405d93abc72b1513f0bf2e05928b15de delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5c/e9/c5af59113a73158224e205104b8249c8e89b419b08c5454aca765dac9b61244144b992c676a38df3e1dee1fcf4b176d14042c6d00685aa0816540f60c302 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5d/cd/d153c21efbc2af0fb7e25e0f5ff49b21cbe08940966c1169e41836b3f850cf8593b637dddec0f901d47cb1c7aed43aaf80bf3404a30fd63803ada62cab6c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5d/f5/7f1451fe9a97eb091ee30ac3d0343167f83cf8f9deb3af6fc48974f0506dcd9de2b9b3529eeb8510c489d731001b9ea02ef3c139e502ab6dff259ad238a6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5d/f9/a5fa4e79e5cc1bb3dc910607c7d6629384093c5584a2e34f14b13deedf1d87230c0630d700d4a4dada5b7dd95ff277ca5426ed6dfe17e2001c9d0bfa73ea delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5e/51/2bd6014a9b57caaf2c60bde8b7dbb15a94907eb269fa865c37f3e7e4d4b1b67dc9d349c1528e67810a3534b19ec8b850dc2d35a6bdc138badb33a5d47250 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5e/5d/bb5654093e64abe430b4b122baccf582272ecf3d996f1e9a71915e723046d7fc2ebd4fd887afd78e175626a46b43a6d280ec6e591c4831ce58beddae49d6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5e/8c/6e37e9c59b155d72cafc87e561baa51e565529f65b9d82ceb2efc87db65fa5c715f2860b065cf2edcb6383ba4b0d8a51a555feafd50b488bda717d332a3b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5e/e7/1ca78b977ac1db10d0d10120f392c9e7fc004a615fd6d949b6043688ebf411289406f9678ffce19482bd2956f3b35fd502558dc705c03cf85fe7d8d64264 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/7c/989c5e9e9abbce73242efc991c6b098cc8417de5e038263ff00ed08d893f6fe3a93173536c3fd53269add2d05eeb43485f848f1311ad69678398173a6268 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/62/12/65aa5837d06d9ec34952fd98b4b8a8de1e8076fda461a1fbd3e3c6568cd4c9bdd4210aff3c44686f80e4922e1c3461cfedf78436540a01359003b57f8551 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/62/17/4ba7f2bd18eeece0c3545d08a5504bdea89739a31134e48a7357d80d564ead9ff0d929ef6850aa99aa4b1f2de92a002dc29cc4f733ed912e4c9cbbc4e67f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/62/72/6cb920fbe911d63c4497d55cfa5857572d8498f42900a838296fd0c06bdadeaf56c17ce956c023cc108f69b8bf5e978d08e73d666061276a46fc3435cd17 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/64/76/70e915981e4ff0a4ee760bf3e9f89755bebd8d56d1149bf83e82e41a761aafed7c4fd826c6c4e36371ca73cc4ba2d5bbe9c865ae4ec7660001936e7cd328 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/64/8d/cad51683456a9955278bcfb58cdb14c9bcdaec38f16a4a9beef60058ccc074d48ea21d3e451397e79123b5b2f9685f779460aac4f73bbc60bc780b63c667 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/35/86a17993cc4cfc7c48abd4e3f9d6e28dfc3107c3bea4bd294a58c8e0105ec309b0b1f42e0c22769fa6aa33de3a7a7ed3ee23431ea0901647039a17596fa1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/65/f7/a3000bede05ae45e4daf24575f294bbc69ab4f511aed5f464b50fbfb4109212b3f0ff2105d3850558c6d9c0a98c667b187deee70220811074f20ac11d527 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/66/48/4f890ac818c2bfc0d33c631c3bae4e459d2551aa4be8f0d5f7fde6443f68392d57459ab647f57ecc0254097a7f009f75a2b7e86c76ea0884dbc2c8ee5824 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/66/56/c8f6f142f6529b3c4984ec04541b04d3651382054f9596e7d1c819da8566d298858ae528f3fd2cfa8d9509dbcbec5afcf9d8dbe4da69c258c3ac847e492e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/66/a0/6e4f1c900cfe559951fa25d625b647a0ed48d06ddcd62e09eb7299e6d382d7ea4f7fd0f74653a98a8ac8417bc560db4d74fb833e64b68af1ab212cbce7b8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/66/e4/d2e3afa2d2a0126fb08568eda474a04e215d1608035e4a2bcb2696d0ac9aafae07def9f0fc9d61196d1554b0844f2d724b85754c68e92560c3cdb120bd7c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/67/e2/f40435769ded02d2d78853c3265b6f5c728f12cfbf18d5f26856a667696fd28cac5574f78d3fd3c386114d043d54970aab32ce4b457c8190fc0f9b98c6c2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/86/d3d9e5eb3acee720734a8394c0dbc71e8079658cfe4acbdd815d7f26d8372a6c7c5c3d15fcf710fc5943b573ae024e184db316c64c49f9e9d0d2aa171af0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/69/dd/1c4fcce7bf8e7e7bd046381c70aaa0c7eb34787ddab703a2c76af1055774a932e2d6509853b49a15c225dbb14f8bbcb742e0c1263c4b702bcd57bd7351ba delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/6a/0c/23d495c8ace7f0fa44ca5e6e78000e1d77ee0d11cf954378ad99506fac24c036a8eb03c0ad7ebf1e5974070650f182424bc73c8ad026ef4727bf1c65d1a2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/6d/37/f82c557ebbe7d9ac85eda62550013e66109a7c03ea77ef0dfa19cdb3ce5b3e81a15925a0402c2fa5d8127df4af1b812d5cdaec986c8513744a09748e658a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/6e/6f/1d2c3516c954c9f7ccb66b48dc1aa37c08d450c5b5c831e91e77082cda0151a77cfc8cd6d60b296493c538d1ebb9adc39b93416cfc1aac774a005ca9c9c6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/6e/f1/aa73eca9ff39bfae212207340339bd914d5763a693ac2dd2b0dbba0b9a9f98f9b2c7dd853d812a7d07b4a8f3d672b3bbcc18ef96c107aacf6581a4a7ba66 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/71/ff/758e06e2723634d17791ece2731aa76a194ad9c107b3a1543ae19380d76346bbbe81253ede6315482e6e26d12578e33cf8ab3183adcaf80eb88fb16238d4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/1f/371620333c257d00eb0dc7ab49937fd945529fe0c785a851dda920ad8479e666a6f00a37b0d75bd611811adfa8cced58a5049d56c0dcf300ef37093f6acd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/9b/b05fe42e1010e0b3344940cee399b08f68e3ce6e71de6c10154fc65cec773d14f33e6f54aeb257067ee1e0ba81542f788395c3b906cada3540c6e6ab115f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/73/51/438ba0dba2fe6554b8e20fa5e8c5a71c0f01a98f3fc42ade18e04a0cacea5656bed3a9ccf5110889e44eb543fba85d88e5b381157c4c36889d6ffd321be0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/74/db/ce19040ef7d4c4ceed2db2f408c24c6a9590cf8339f92ed80a88ea4c8ee4455db922e54c2fda6f111dd56d87df2faa0ddf3148c895d4ad1e87c87d423872 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/76/69/71787050c345a5fedf5778f585cad52e03a68010674cce36836411314ee2973926c5b6449a1765ad27de90fa09d439e549ad4582b5033db64f7ea05142a8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/76/89/079cf8fc5e2fd66eca4129136e4863e58f0e15de2af5276b9c7ec509c3001d2c1f354c320ea6377248af57a8892f590dbb618f06440dbe3e41e6937b4c07 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/77/42/d644b26739b2981d5a938aaf30a87979a4bf548bb6d6c765e3b6e6fccbc53c798d376fc7f4c2c44c1bf668ddba60d5d5439aa9f7bd26dec6769567dca11f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/77/f3/9bd5f52a7e22de02027dcffbe4eaba4c78afbce6030e39f21c13eafcbd243798fc331068b641f00bffca44879374863f8b49c34898898b830ef0d3a21ec4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/04/20701acb7bf205a9a3bf481a8a8aae3f2ad4e0920a5850ce20fd894bf748ee190090bda7ef774ca2275f497c0b69c1557f20802a8c271d765482b71d641f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/95/200ee826d89fec37e2521deb8798851bb617e6b456a8e4f686d8b773f8e1cd9f6080a9dcd905ab97a665f29f0c72bc5a20df8d1710137044e8d623744072 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/be/2faa2df0b7133f8fef5eff9c8bc895a249f7760419706bc9399a7ba6a200d53f0e46d3af66b362c4eb80ecd84947f2c071de38682ace2075a2431551a84f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/c7/17e9c5a387a2c9ea129bdcfe4b1aa73cd551b4dbeed18bf72ca7f441b10a76345c1063becb876482c4c5f2299c3b9f17037aa52ef4871ce7a6297467a2c0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/cf/1085af83dcea72f04d81d831ad054abb60ed79ee90061660707950792eb6705800478457f99d8693bbd8880a7ebb171e24c7aa3dba08182fc1a66a7dfed6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/78/d9/52103f068307a34beb10020e63eaf9d8de35b903c1799e0c0e8d3f606b746dade48d2cebd16cec393e448411638448280556ee0ed997ee1cd8c8870c82bf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/79/a8/b324cd75b4c2e6b0c7474b3102189b9acfe064611386b12e86cecb560ebdd0cca0c03285550c6554cd4b3dd535a26655f4fe9897e9b6ac9ed9d54e1e01b5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7a/4d/3ce953c39de6a7ce366070f92a388feba94ca2aedee4b223a133fd62a05be11ea2ac71da7b41bb040e5a3b53352e03b45c6ab7b935f67fc79a489604f9cf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7b/47/f2ba6c2c9c7b490f7160113646147f95ae0b07176e1d5b72faeed705094bffb65aad594180118a4c77cbc8125b4240d72fbca574224e59bdbe0fdee8ba49 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7b/bc/80c536028cbf84b198b4a6aa20bf9c9f19065406c6e48970769ade5511ac176fe70315232b47cc465e466d6316099451d8315b934715612cc99a3853a9f2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7c/53/6b28cc887120aafb7e63565976be7b143006998fd1e738e5704f560d648bfa9f08cb5da5022eaf943aff756d85d59b7688ae2e522c6d8e7d821046e1ad16 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7d/27/10e9a29a10fc3ab4410160b91d720be794cf9400daca183b27f29d22ba7325db0ebbe3972b09ad0966ab7bb8d2ecb458693581d5b68fac216a49a6a9b237 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7d/bd/39c2a711f8b3809d37695a7011693ef5e70ce6076ae22f8aef64b87229d47083112951bc1cf22c925b1bd328b1fbcedc0bedc53e3c90144172d7e1f7e9af delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/7e/25/9f24f54a114052e4f69aa4a44ea879d4277bd5a8d82a8741c4e1c4b50378805fdc538a994e0c26db6dbfe2559923c2436eb106b56147e76a7d5e7ee6fd39 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/81/47/7904d147532c81b48e9f3f7f2cc553acc773742a0b16dba2fca28f66988bae7c0a31b4a579a689b4f2804045f4abbc1032b226cd4bd201141d22495d5db6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/81/c1/9edb6e8e345d4ca780c2d117617b04101e9afbe660e376d1b6bcedda857bf2cff6d3a2827097934ca1ffb42f110ec8bd13a6268a1356f91f39bd8e1cf098 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/81/d6/e66779ae5991268944ee96fec8ea61a32516be4e9ca1fa54535cfcaa176f0f5a8a8b0d19455586ff268bc455656c19ee9321a00d9b4a2b7223e7819af65e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/82/27/46783a8ea6031cc70942e96c82e4bbf36a1b8f0dc964e55cebdaeaa3d994f32de10ef06f21cba790b2bdc980ec8445e20c4d125d7b720ba86be0030013be delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/82/6c/b6abc47fb7ba590860abdae21ace8383a8a4d64e34efcaac2fc65842efd94822652a9c3a623548af8639491e6bfdc0e3b51f67df3fab733606e7ea1c01a6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/82/76/45d9428c229f40396ff9ddd3a49fc543ba17492c4156cae8ebcb3ed5867c6b233dc8ae4f50e0e334b8245c553b0cedbe3065f631e6e6d10f8575ca77a748 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/82/82/90653b14b16ff054a6b6746a75daa26e8d94cf66bddc6836419595d877aa2b07019d5f02ef6469875e9d92f34a5dca79090d2c1612080197942d721a2758 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/82/f4/749231ebb1da3d2944e699d316d78673b48604dcad871b42b6ae640c497ef782ac1e489c0e7843fce951421738aef03474a3b8adabcb4547070cf4cfd319 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/84/1f/246356cfcc07896fb9ec8f32b463903852d10fcfb80ed24f1935e360d45a47ed88aec5723c36d627159ffecca41149ecf200e1ef98fe2fc98d86008b9e3e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/84/fa/9ca83897522abd191db35935174d130e3b53718fec739729cf61eef8feafeec479b6723b4a637117e96cd6a2d17e5327fefc6d35c268e25d1d909d203e44 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/85/36/cfd9c87a2818f469b90f675ce13ede4eacdf0913f33824e6db37234d7c701d69aba05d7f5f4d91989acfe4ce4685a671769946fa4cacbcce73cde913ecd1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/86/2a/9eb4bd0cf662f8c85cb9a93dd72d0b483ed9cc4764fbf709d5fac1f6109fb5d2928aefcbe2642913ed95bc8933ba77db9c4f63959f26ba18bae502f89633 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/86/75/7212b476cedd8a30df956af5ebc2a565d09b4ed247a4e5e9509677c502d5ab2aae0a148f98cd52167a346f4b4a70658757fb99bdddd19ea09266ffa877a7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/86/f8/9739862b831467cf3992bc7de12051f7cfda4119f08021434e4d859775199f13e03e7c39eb8129380f341d9a4552c2b246eba2eb04d1128c105cbc0adac9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/87/da/ef2a1205096f94456e0e8e72ad94d3fecc0a443e4247e86f88ce6136e1ba88a191c6f400d5a36b638db9535cce40164df77d201a0f800a20f1d41e53a925 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/37/7fdb34947e6a88b61f894ca4c405582af108685530d347cbc52d238e2810b97dd94a2c8b486dcbfd7b0bc56a344314d666a30d399bf891f0a03022517759 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/db/76fde88f5789dc8d65d422d814c740010ebca805976d7481643bd793d3b3b7f9021405b0bf2f89141280352a3e906bf2b57108834b7fb61908bb922cb860 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/f1/205338989339b5e4c33561532c87b301af5909b375a3abdf666224bb5c4e201c98ff9a436ef8571eef38189af3f17f1b942b05ae8ff69a88337e4226e44a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8a/95/b4c6d4625ba8aa572b31da5aef8585d8cdabaf256513a1ce8b605149d37008a1712b7e28e8c87dd94a59da06df7d689ddfd9d91cfde9e2eada1e086e9cf4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8b/58/126a024affe38e7d9ba18e71716ed51493b1c13f2941df20ce0817b1bc05a57afb67f3e4d54a64a98d1290c2a5d8aeb998a5650af833fc5543087ee7a39c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8b/be/c80d12d2f6d96df4533e8c5134f0dd5b7b6551cbb923e086fb7dc3f041cf79be349b8e2c93471d91fcd3fcceb778c1ecacebb17d48be871bdf546ca95c56 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8c/f5/c577bb0f1a0931b3e38f6c1917f2bb94a93a8f435e1dc999acceb0cdcd206796c03888cb4734e85f99cce77fbf410ebd3840192b4a4b713913820364ba1d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8e/61/8f8e9d8fcd5c23b1775c9daff272f285e0c13032f8d1d6e73d32dd1798cbc94d204ed01031027e3de9b7c89d1db13a5c3b7a75140269fbd8736585636908 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8e/85/a92623524117cb25cd1457e4fe8fae1199b4a6c5601936dd325662e4d06e64ef9bd35e29f28190e328a9a50ad6ef8f660215175bb72e239dbef1fd39028c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8e/a6/5549d7be0923cc022b2bde75721c30e97892fdb2d660bd17adc0f464c9a748b4c5bbbf4c7c78750ded10d43f53cde39b03ec8509170594a3fc1c95d1a426 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8f/55/3d15412dca27d19f6157b6521b52306a3b1c460702329a081fa9afb6eb74879932dc9521739cfb70a65852d3d996551d266ef4bb1944291744d634fe6d9b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/90/93/9761b4bb1028cf04f2c2f409ecfa1e08cdddc97138d7bd545b0d3572e48b3511ca8915692500945d6c16998e562226df4c9ed5668eaaf6c8c71e2ea186f6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/90/b7/42f58878f0d6081b4cf53bcb8274bb756ea8587d8b5f2a2582d4a9d029a279739f52bd8d3522b891c415bb2e55b9b98621200e013cf86cfa140011e3607d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/93/0c0d546c8abab87c615229b37b6e9de9ea5ee2c6b987d7f4a1ace63043ce177bf9d1ef374842342179634c95df6b2dda9bed11936c1b1a1cfe2282c67696 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/94/f1/304f8ecb1db0becb258ce249d6007442e4d553fe4ee4882a595b32e9e2f22fd7a21a63dfb678072d28fdcea94a5c6cb5a3f0087bcbafa2e6219f9815d79f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/96/75/983785095730a3fe536013ed16e5457294547d6fadc04f3641dc48e9c33e508fa202b1ef11c1839a30709db8c0934be6e72de470ba6d74d35fe5cc81f749 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/97/64/3afd72eaf9906c3474c551116ac52b133b9c7cd8ce8bc051be35193b4eb6b35a123e2e39888c5972ffbdb14e27ffb6ab2585af7f976dbe98eb79e782f16c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/97/a4/07e6a581477b5b400b69691e895ab8311374ddae541a18c1993f1c086da20313b2db2925e44944989659f2a76d18dfdce13673d2b5447e171b4b1aff4f2b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/98/b0/669cae8aa3bff033ab0cf0ad368568ac694a796e678266c94e8ac4830cf67c10a474f0383230c53e583eb30be994c20d98f75e0858b9d891fa1251fbb888 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/99/61/35166fa69a68817bdbbfb239d41bca890a007a7d6f2b61969b2da9e906c01db3efd05f982e4d8de68e11ed59d1181dd6cc5679e13e6929cc7e343e291553 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/99/ed/1e0145c559715e76ba5adf0c574b170968a3bd9940ad73cdee38313b94c834a6f8f94f0c3e72aca52ee79ca5396cd52dce65df98144f86bf95d39816a7c9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/99/fd/4965ed20757bda0cd26feceb072ea6659e5c7555b54001a7898d68401a7274c48a75248a01414dbd3b8ee53d12d4e414b5ec6fb44cb5640dcb04c1aab1a9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9a/a7/d09777e5b641f3b8f19cb0e2d94bd342a5f566e7991fdf5bcadb0669cb3ae923d042994c61b32bdf0215be96a4037f2129d22f84b17049e1694345a04cbc delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9b/a9/fe3bc0019c92b7d7824a2c254a22f70a4b922af53562889ae43becee96294092a0a06cc1450290eeba945749b6f114efbba4a040cd5d539d451321189815 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9d/5c/b6fa971828ce86e892f9595beac92c252e158badcf7084b2e1d56cb2abce99d896431278faa65be64ef7fd83ad8d07ef3f6050c30014d1bad9ad12dfe760 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9e/ed/16208578d080568951d8e8d059f521e032636ac7ebc8aa72ce179cad4a1b01118c92ed11c869b2e4d8ae772f2148aff693983edc8b6c8299b3d44e021265 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9f/35/63fb2141c5de03f9dde82097d4be59b6856e297d59fd326bf2d43bfc760f148e69af74bd543d70bd3d147e465de581a2ed0651bc233e2970b226447391e5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/9f/95/048d23451d099e874b2f762d105cf4fce0ed89e3b9f8a3f2955162342f3eec88d2a68151f41d6daf2cf55ca9cc92faba51586312e1b9015e694ce0235f43 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a0/36/077284bad16902104bfb1d8ddb5a0867741ed14cc5c65338cd79c2a110088e0b1f72b9585489aa866b3ef2f70b88593ace0b324196a3449159e790d4fc88 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a0/53/1212abe272cd9ac460d925b851539fd49a24c8736014bf9f96acec5fa3ec2752b67c7e181d72b24551aab0b524119a90dccf8e9325ba9f3808168ddace46 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a2/3e/e3017c83c236621d79c87685cdf41bea7cf2d3481fa1481843cdf0f7ae90f553fdadefc11a40e1eab9bc5d7661be7d2e19d317b0d0630b5c6d0c994f7917 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a2/58/234f901ba919997865c141e70d1cbc6be8a4585a429331fae044f7c09062502584fa11ba1374636bb22542a762e01b1655bc766efc59b117e2fb610f01d4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/03/b9a96122bad296b7247935520bc5bb5469f426305d1846cbe645723dff375ab8894513596ca4d6d88834b163e5c3bac728c9bf98501aa121de873349efdd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a4/d8/e8a061b55e1479ab4919baf19c6839ee8c689336a109b51e4f92055191d54fc6f2c557e18138feecd465cf4081836e123e4a3c4bef3b44b6a4435218003d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a5/97/f3d5df30b6d41bd5521e561c1a38b105c63dcfa7ee0ac273811928e01cfeaa3a611f0fc94b1d8fcfd908593330d743e0e4a46fbcbe719a656038bf764161 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a6/68/91284b8ff37a566907c5706c82ebfe90c6f901d6c25a81b796a35f07d581418d1635b2d390d18122be23e5bb319426046365c0bfb8e86489c352ebe184fb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/ca/5e1a11767d4a32eb0869a4ba1fe4f9aebaa27c41aa67dc8639fed1e2f333afd1ef3d7262bf8d062b8f581aa3a8996f8eb994ba5a0a2cd49ed368c7fd0502 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/e8/11344bf85aac594c3b53437e118cf4078bf85156e28fbf1668d9396e401bf4bfb2f2af14b6cddf8313f837a704df3e338368e86fe011bc680ec78aef49c9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a8/ee/b78c9f560c04e6b66bfd40b698aab4c658d7b3334d9541218f3900aecb5a03f660ea2550365e81523ca341a29eb9df613ffcc6e8e41ea915c6290a5b5477 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a9/24/97419ee466812203260933766bb81cc1058a8d0085a38623d35b5101638c0fb48a0e4e2ab3efa22da8b839760ecb8e6d31bd9ac0e4eea0dd04f279a7668c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/aa/a5/0554a1a32059ea29f45fb05607ff4b180edad7f7665a0f0f15e7761cbcd3c444b50485495067e313aacc5d8caa20110a6877c5ed4a4c658a217bc3de5eae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/aa/a8/2bd365fa56b5d84ad150d9669bd53803f1e398819e81f4d78b5ae79db372cc09e5844b72e7bec59e2fc734c8d408be11a8883aaa4eeecf3aa1d8fcdd9523 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/aa/f9/a12abae25fc70390ea7d6bf7cf86d728e8d430a563919d797ce31e996b6d5f1d65de530e03090746cb3f46445846425c1e3b211a0262c61b3475d90b3e0f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ab/21/9041138786ae6f9a7d9fa2eda63ec8dd63b37f996e3ef7e3becdbf2200f9b7c759e26db08c58a49c4b362b44d80ef2c1e37379220ff35dbc38e2eac0d510 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ab/8f/30de16d2050a6f36c3e9251470930cca540e21f22d7f14f72bcdc44fa395e0a3ffe8c05b882252c15b4062005aaf94db5cf0fac7d2093609b93536b17aaf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ac/85/0c8a27e2a691092b553c3c8f0cf3609756d31490a86a98bccd4425e1f95999940c2699c364fbf17e420bba64027462e6bad11b1169c5ee9de8a40d220cac delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ac/c6/4e520b236b77719e686bc2cc4227793355546525551e7c8366a57a670eb1080c7933c78539fd6abb3ca72e67e3b11c1f1d5b4804581d11edccbdea5e7dac delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ad/37/d02f9e87860d06f55e8b241a719ed551bc866c506b469130e0221d4ba283f718e32110056f3ef2ef59dd3f4918574b5ca4c6a0f11602d68b76e58e2a1c94 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ad/60/c28cb3bac84a6b0af50454035face3546e407cfb489740114e5443088ed997924597b63e2473e355d1dda7d8c8fa88adf3827f15a80ae9021cc44a57734c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ad/7b/a4349a3a2e87ee9e67ebdbce15f5f972351c9ceb7354ec449487f4eee407d4e601d29e0590a8daaa12fe87d4c2a7899685c59f4eddaaf780350351ad73ac delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/43/751b8b612e48f149a73d52fa3459158bffe4a6e2ce6adc0de4636ef7f2c2df5dc8d3f601b50884c660a618040506b8f34d14c7ebc03e4121d91bd02475d1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b1/ba/3bbadd0b004b4c7e0bc1d535a4839ea9c107a72a4f09702a68b8c913092b8129f19b00670588dd9e93ff118c437640c2a9984aa58f55badfffe2b784d513 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/4a/bf551b0e8493c3821d896c30b96780079d5ea221648fe2b7611cab032a97640265682c126d8b2a27e879e6d75d575492150e42becf9e87600ad1d56cbc1e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/ff/62d407e286edf856fbd4fea7c9da43a93879df53a784fd3bfe9919ca5e0cc62ba1a4b5b477b98f93bb2e02a5eeb51cc4d68b1aa258da4c1520947f260668 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b5/8c/2a07d896829dfa7e79c543aba986f87b7f9bb19762e74fe5ec2e25f31d74aaa3e563884e8bf036ed475a8d7a6a0cb5b828ae80c2a2edf5cf031e7cb6029b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b5/8c/ecc58b06fa9687e21d2e13a1023e990c9d02bc27a9f05b29fdc7c758f039b0384028575525ad52e639eee85a424cd9e53ff9543889ca7550f23afd2243e6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b7/5d/9c37f024fd97aee4867ca51af6413e3f31ca76657c8ea2b734288bbaaa017cf41d944129f8f81386e7884aceaa8a55790988d28ef685d83589fde3c7f56a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b7/6b/59e2d805784381c2924b6f9b74718659615e8083514ada7e8abdfd29e02adc5c4d6c91a04eeb13fa698f5a7aaf524a00358dce2cf78b527edb66c1b6e1c3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b8/1d/4f94f15c06d7f8b386296eb0b8cecacd2b2d6a2ded805493c6cf59c417f93ceed62ac9b7b7ee3bf45822856b952553ce5f405ea609ec1655c677b9acfdfc delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b8/2f/1c71bd87023efec1600100bf09475939978c1a791e7ddeda058ded32917bc70379c5a43c00d3dc023d5e527894936fda479ccee8945f893bffd5fc564701 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b8/94/01cfddb6d76ae880b092c553257ef9b70621b1e60d4c43e6debd66fd4f4eb15cdcd1d495a9bc70f06d6f115ac83d487ffb9b4c45a0f7b24578365583de51 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b8/f3/967d292304b9a8d510efaec068ac290a85fd0419a4cd035ba28ccd673203f90f082f0a6b2dea2fefdc95d09d1b36a7d60465ae570a9ac28f8fd954277471 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b9/be/ba9953c2909f484c0abd931cc02cc9f395dd2c3cafb598723f5ea0abab50f04b32251de92fc2d28bd7519bb7c29c1a7579827f69e941167949f0e48d4097 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ba/c7/d6faeca77abc2b1df890c3da09f0647857a5834d0b8cefea47defa9c0ec9d733c8713a3359adae0ac4992d43742c218e7e6a2f71e0cb58d521a2c03b21f0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/bc/ad/883492770d883e66078543eaf28bcbe6b73de5043343e20b9fb5d3bebb7998d5ab780edcf96620aeed3f7c05bc1a7211d2de82057599afd0d546fd892354 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/bd/0f/63b723648c19b37a43d9b3be32a30cb5cc8481931b7bb07fd9d5e1d339442fa491bf49a64354899802bc204c2dc93a887eaf53b044d1a3dd79c9610b1685 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/bd/d5/7d6599de18730527ad21a10809190114f1090738c5f3f56303c46345e0cbbeb3a2a62e964d7e946e93d6528cd240ecec370cec01509c71b790c4781aaea9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/be/86/b0479e27986f87d6b9fe1d3c77651f3cbb1a99058ae1b81d7ab482bb1f6bfae054d3d598e97fb79fc121cea1c245f8def1de8ff1ee74ff662a8743e48dbe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/be/cb/e79f323a8008f011c6391197226cb08dd262a2eb4f1d439fe9021d6781f08b3ecb86131cfbd9caabb88d43cc8044d22af88244ad47d9ac968870d2f888e4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/bf/51/0f02a4ac86221cb66b8ded4bd02b14029cd56dd0b5d7f8f2b9ae2b15aa29eaa48f1d2db45700490b58a2f4d9f94a5afaa26f599dbe71bf665f95cb22685f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c1/14/205a24900bd3c37a53ff494a4faf4b81f87561a8618075756c02d1586281cfc9fce27c02e845f38400ba62c994505b3eb2241d8fb7cfa52eb529d69972c0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c1/2b/4b5a37307960bc9a18fcd5e51a3b37b76ad97a71d8bcc114d3b436fdc4c489b9e5a8ed912a8b2445bc4dfcf6721d5c8eeb5e6c80abe2bb48b2c058672465 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c1/b5/d2b936bb6570d0b55e86ed385ebdb0e48555149eef9279248fd14eef9c85ebbcf7ec1220b137a1696f2fe9958f29ecc56964f9ef946f403987cd13e781d1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c3/fc/34b8fba5942ba6e288117434e01ad32515fb972d1217efe302859eb9a24e5e8483281d854f830b6a351e44a3a52d407cbbceafb2ad330c5ea7fc486ff593 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/14/6d8a3c0fbed8bddbe89cc63234c01ef194fe2bf58e8518dc2c74fe8700df2a6ee794c81780f7e7d80e84e1d00100df8eec5136a26ff4a4569fa36a1388c1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/1a/4209767c9bfb7b8d798f5ff1c43fab4b80f26e00995239fdad5658ab11f4d395872ee0ec90eb58e502fbcafe8ad1e9a2b42fce3be864055d376acb805e49 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/33/8865ce0cc145d9b3f0045eed5afe0df372be3205f0b33cf1ec40c6c7f98aa963e53b3af9098f7325f1f5126125a5eb9ee89163dfd0df94be563a4a025f19 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/43/e48aa1f10fd46733a13e348425e5f03f8a801e2ed8db40b56162554d87ec5f361d5cccf37e1f8e275f5b2b544b8bc177bcf7f9bad1e41fba6514fde65cfc delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/e7/25dbbe6ca9e0b9f8c6d78bddea5c55be9610a2101aa3b08672ff75c583ba78fc729f8b0469f2e8e357452a5110ad8f0f12c0f52138ec82b6c31b48deb1ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c5/6a/79c99ed07ec669e04b77457e135ebd1cb577dc024614f896f9bd7e7cb45f4f733be6463cf52a589c47ada84fdbc18ebf64ed4eef503ccf57aaf1b7380881 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c7/b3/1558ce638a2370b018819ef0cbd8ab879a59a382ea97c5f0681086eb64712356efc8a97693c772d1bce66260072164df3997de344c4a2d1b6ad0c150a1f5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c7/c5/ddb91ff4d664d16257c7aed76bdd7b09c88f1c41b3a18fff7d93af2151fb3bf45f7b18e228b5deb3756caef9ebc494f1113f4570dbb921a4f84ee388dd04 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c8/6a/c0f2d6e6512a2316c20da62ff7768a387df6e3ebe4905c40ee7d643185a4e7255f77e3128130fa5a15f2696604f70516efca550d9c970e1a848eb525a7f2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/a8/d7aaf9e8bae963b2c774f75be9d73ed501479e2c02b0d1266b04282e0622590d1d8979bbc2e33428040dda4d1eeac550b1b0fd06adfb4f8b39d623a1ee25 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c9/ae/5d3a7ba0891b06631622274c5e159657b139d6ca7c280f11fbe07b427b7086ccf6bb43b54c69de57f15590ab61ddea88b6c22633cb3973764697e76d783e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cb/dd/a2a54bad063d12338997f844edd6890abfc4dc62403224a77e3fcdb55a88a1b1c999025d96e2f90338589af53c92536d17b0e224992b7f508a721b97ee85 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cc/5c/807682aecf28177aca371f0622c478527eb5e8b056263922de35fa5c129382c2daf1939ac1e585f40e88b004125a776864a685f9c83f2561a59566736af7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cc/64/01f0b6cfa2eb8211c7d75c16be7a4502d120bb3bbd69f68ab6b6612db41f341385dae0b5a2a420a295f8778f24b4c6508172e4f25d2604e3a803e873fd68 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cc/c0/d77564d5cd64d601012d965c6d54d62216da6d8351092b56c0ea573498a4fc05818ecb4c18e647409a6da9a6c5a8a1b2c15419353c3a2882a27421190d05 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cd/fe/8824cf9e1e7f616c3d895e77cef0ddea92bcd67dae2ac6d649ab475f3dbc6417ea944a1343699bae50d5e5a7bc2e0689d3b46b999c2eaf67e8c6fc316d0f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cf/1a/b684540a340a2df7a5d44c0ffcff67eaa37d0f897a790f57851eebb0ee41b31c4223753d8c9ec549088789c7037c350c4c6eec9b729c323513e8dc6f6179 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/cf/3c/0a281a7e5f19ccecda7ce45782d2d077df4bfa1438b91448e21898161453a72ff4c5a19d52e0f2c5f910fd643c470da3c8d9b948010b975d6e01b471eb86 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d0/b1/75ba0556aaa121ffc1154067697eb5963c29252436c60d8c64bccf076b67784f079f28acfd8c31e53a3f7bd42ed853f1b489c288dbab613ceda0d8cab1fe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d1/76/0d767ed173c4418a1fe4fd299c13e3c8fe2330440c32610934d6fd73c1ffcabb94077eaa6342fbe5e1752da403d3884e59831c4e16e72139dc7789d86d00 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d1/78/367abd0cb537fec4b676190bf59dc4264a83faec5d3be4fd120b39d982f62f8fca3782bc370118ac218cc4cfe2951f7aaad9a0892454dd26866abc99e806 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d1/c7/d230bb9f7af08dfd99c1dbeba3609a93155963c779cc4f9f5525206eee0d3a29ac84b7b22ed91f2896d91a96ccdda32123a003154b80e467c8e970884bb5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d2/c8/1c9a09bc995d76827fe55f41939c8b4583a0df4933e666680ed4a74c009ad819d80111dce6e7dbcfac3989075d72e11b16a4b31a1ddb19cd2a8a027fae97 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d3/0e/fbcdcc97c5daa9a4b155e78395fc13c500cda78eb5aedf7127c8841ab088b678d3cad6b2c801e47284449018bbb60826a497985b485d9e48c3445824e312 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d3/53/a14d5f49ba6908f95e6540c1d8bd2587ecd0859fcf68ac71a032dcf8adc79d9f42477d0f20aa5b96555039a6e44092408adc2ce000a4b5ed8ac7099be177 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d5/9f/3f887a2785cb6804ba2394389811014459eb00c12b8dc0fd5a39fafd327c6c053edf252cd823026610cf69194a3e28eb0e96b9daa72af18b505f41351749 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d6/6f/22d615f594bdcb060ba8122f18332f4bc0312b6c5b74974709033c405ec94e93da0ed4293858aa0d79fb7e9e668c71e51353d036e5cf70fa87e8ee43df85 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d6/de/4c576d63e68c6182077253de39ee48bd56aac29b7ff224f0d18741e5aebda50d0064c1f4d96666c895479f4e71546358297c4600211470a2818619d5522c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d7/4c/d2259648b7f721fc1b7f16161d32ec683a80259ade61a5ea0ed40d1000ce83c26051085cade314ab35d6e231fb30c07314c2845bb95b305fcd093b8c3b93 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d8/35/465249e4042430028adeef0443766332155ad1b5471bf29816d731f6851c24ef3d3ea7737070f870d30a730779f471d23853606135941f995e35a00ba42d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/d8/65/d0660f3ff272c9a2a0570f6a15944c4558157f4128cdc1fb68233ecf151e38b416b422628bac5e1106f25316ef32ba4f07b6a18a93c2383cab3bc605d489 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/db/44/977745531e698bfa14a894d2ca5fc71bf76d93c50a8f800785cd8d793536dfe475d3436f594dded6014a1f134e317fb69ad3879170946d807af5a22947af delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/db/68/fa5c2d3097a9ee8bc88af0730eca21655b0f01a7bdb2622a229f09dcde88e19959a70c80baee8c32e5542f23b1037554c9752250dbe7b79ce7a0032b2cf2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/db/85/47537a5618001a0c0273983be193eb6e76f1720381afbf4671c1c736b91723ab929787d690c7898b293303bfb3efb08f93dc2acb6987dab9705e53dbb691 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/dc/6d/1b18fd584b12a6a8368bbf80f72167b736318eb529a1b2790351431af5c4783e5b470ee9bd6c43a286f94e0a24fdca5755f73cdf50a733e502a0a1fde2b7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/dc/cd/1d350b4855bf089a78e93857cd38e5202d113b789251a05e039301fd8c4833f3d77a0e3ec8264e00ca39c010c87dc1569fd6855ef28e60eef087c2b7a405 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/dd/94/74c14fa3fba16e4ac4e1560e7dd800923d22ff4eeaf92d4efe7448512008c614cfd44aee5bf57fb46dec2333671f48b0c514c2c67531d5f12e332ee7271b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/de/15/364b9da49726f3833261e85f07e408b0d49397a98bffbf6a3a9f112fa1f8ce6d73fa4c3cb01abc36c64935ac27d4ab6b3fb5ab49ffac26489ff40ec52a1a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/de/fc/1d8a6fc918d9cba086bf7aacdd6166721599f48d8b55022136798092852d6540637550ebc6591e6042eb37f3a6f7fd01f7d4d885fd843687d1b42ce62c04 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/df/2d/188b2a286c7885359245a587822aee3a54a192aef8f6ed7c2ccf05d5ab1a44303c1321115a8750b3167c9ee51965a4972f45e3b8b5181fc6c06c0898e0b3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/df/32/29643a8a1c73ca63de8281230e261ffe1a42ab14321b5c2f90e6a52240981a2e5f20d92b49fb485dfa2ab1a1b8d2e92bf02f8d84f39929c62edbbeef7bf2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/28/4070a8d6ee750728e956d1f65c194a418b5741bba2a33b3e4d4b99ee69654b0f56f00ddcf7e10c6b2f7d23bc56dbb8c9779adf3df51d324c3b7a14254312 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/5e/41e7e9deb4a6a3bbd4d00affb30dcec1f0e971ffb944e4c34e16428bdaadff23fda2a225bd34ac3d4393d8af0642a1c0e1ccb1f9d8f0f25a927a4e6921a5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/69/598dc565cf3c242d900c79e5e4cb2d56f4bc68c14aa905e60890607ed533119e35fe8aea54acd2168fc150d8729fb20a24e382492beb328c6bd2ba9cf359 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e0/a2/a3a788c91523120c7ed4b7263413041ae6d7702c5c04041fdcd588067729ee18826a42200bf8e6b7c2dcf021cc9deed272d465e103a3bcd7b3ccb340c89e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e2/06/8336f155a6c6bb2777130e89d2cea777b09c6539619745f2b9ad690e99101be55a1e63821459513e984508b3787544495f8dee4374d06ed2c51c9fb7e433 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e2/12/d72b45d72dab93da65435bb8dd7200775eb1a3156e32c23b168c43ee631b57eace19f495632582deb7a165791cdc22529782199b3c2551e617a3a5027969 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e3/ce/4915c2d293cbda41135c8a41cf2e2f32c47519382d0106ceedacb1c53b9070b26005336a3273b0ffbb6650a4f3c3c06687cc3b17528a5c88e4521f04a905 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e3/e6/2f6360f7d237dab387ae243a746ac946b73d3649dcda9c16fc757e8308bf2e4cdb7a7acfe805e907630cc8fca26becf3c4d5c06a08d41d81040906c358fb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e4/cf/250b49554b3982a6ae1d14154fc2ec1e77682118f2db9fae24589d01d36270b00d9440877ee86bfcee10e76aa90030cc40e643d813e2ea0ad2d7b7928383 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/65/8d42057fd3031e4009e4a23331cc777815c78689d10a4d5f83d313e558b349c52c3b1e86829373a041780b400809dde50230490bd6ea7b3c65f9179a9988 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/7a/225a24b7b97cc007b7ddcb65a1e6c12ca36177dedbf9a492ea262179e2ef7ac4a63259735bcc4eaaf49da22d8e26877d46511c2740d9cff25223b2c1914a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/83/ce1b1a2555f8c2894d89f34827653fcaf8bd36082e65cace2a0388f988d327dd49a2b94f05b27f115f7a81f14a27075f28e175de9fd524579bea14528bae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e7/08/585d457a6645e14b126f7735f435a3511d8cd95b8c38948df268896f9e99d9c44000cc6eadeaa8555aa88548945744d611824ce4c6d877e947112a255071 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e7/0e/27960671720523fe29b6ae34bcfb895132a6f83441ecd6648b895a57fd04d2d3b6a561dc801776817d9ddaeb595f5318ed4bbd326ba64a08cb77c9916b3e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e7/6d/f9c6d8e4cd2c5970af449a411d5a98a9dffbd45f1aa5aed4a192dc41db2d9eb2cdf89e16febd76fb4503036af78bbd5e404d4fe77b8cd8a3844b23773fec delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e8/9f/5a91d3e2dfdd2c037274c1ac0085dd371b0639f535921cd7a21fda12583cd6bd54e86c78a31cd92f20f72cefadbfd78878aeffbc7f8765c7231bdfe8f26a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e8/ec/bfcb12555ed3bf2776367072b6261c00bbd4b71299889a2d81103d63b9abea8641ebbd53cb10900aad38acb2619f280695ecf039460c9888f28d1a805267 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e9/52/6c33cfd200fdd6205a058edd58fef14fdf28b48472386e8e5aac7c3b1a871716f09dbfe4a8dcacdee2a77a82a965d4cab5e83768a271546a0a3f2aac9f98 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e9/f0/0c3b22571c509169ffd33224d1b4edd25df7defa6ff9ac0f23da8856366c1e6c18d83dd4f86abc209cfdd580acf614e240bd50d1bbfdb9558dda6a7be1e4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ea/86/090879213bcc6bb704b2162156ded7e7ca54d91cf6d534e2f849e1d1d382c9d2ff0d2303e6d966d6718f5a07f5634d836f2e8a3a027ce6b78f3db29c63f5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/eb/7b/e638fdf58653422fa301d51c39a995b082aa52130a03d96d56f78b50596a59edc73cdc45d5d2e7bb443f2de2d9b494257b97a4ab25bbd024b2919d981609 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/eb/a5/aa6f17f20ae7c02b421a6627a734d854477d3afc3091beb32269048166e95949058aaf80ddd501d3756786d97ac1949180dda508bc77c13db69e974f699f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/37/56c593ba97a0ca175374e2378a59be59865db22312de7e1565777f632662dc43e980089a4518e571b64be77d6a4f6f9b09ac87c4548615ca05f83b5570ca delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ed/89/078de49458d71a21791bb33831ab7089467e4877ceba4bf8873183893f7687f321ca9b531a89e4923ce0695807893f671a929f4130485cb2305c0d03f917 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ee/3a/5498b8430dd7ad14cf21ec7629217a17580bd4d7b9c8680b1ccfa263ef0e95e4a4c24adb3a3442a5ee15a222be64e6bf6ccc980109428f8a74d3ceb19a4a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ee/dd/d3ba66ea4ddf582b482482c94d1e02c8bed1f29813534c24b4e2c6b1ab870d34366e6efa5b8a012c6d99cec693f6255d25da13c634ee6a87789bfcea103a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f0/a4/79806b2fda9c04007e03ac65480629ede92e5c97fe1d2b0745c51a3825e81d9895b573ba721d6919040cdf528734374bc005672159cee8112ae7c4995f8b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f1/35/4d96265b36a82e1211b990099e8bb3df60aceeeaa97aedcaac1eb3edfebc31611b01dfe45094a02c05e65246972294fcc5893d0fc4d5c6c3ce5a1e25e68f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f2/21/618b3d97b742716b754b61eb683863d6526cf3cc5707181d8682287b73087d840e720409f1bd8b3842c2a28cb46356dde032901c4ad5125090f2958a9ab6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f3/75/481af8828fae60f8801aee91e0de3c7b043c295445a4f38e03fd00335e2a1d13a35d2738e74ff4ca05aea0f31248300ad589a0f7f03a2777dccfba573360 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f4/eb/8786a3f6e75ab44405051893400d5f9b896916edaebaa821b79845a1d61f5e0abe8e444ec4d0ce668cbff56e482058bb9c90c9a43ef6a39730c00b412a5d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f6/0a/05e788946ebf82e9a09d6d2fe2a8f037acfb7a40b5fd1825e0b51bb62c5875ffdcc8be1600570cc24a6982fee2846191cd0683dc754a15bc110a28e9078c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f6/8c/d2da82ccd59ac75d19ecaa8636a566bf7744b8af2cd0f3db36402f568619322fae45c1003924168893dcc654ab1f3b97936686f49dfd650ab44af6344139 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f6/d4/a9784bb6d6db9619346b35355a562ab7b1ed948901fb85ed09b80a72dda81963ba939f7cc46adf791a04212a1cb71ebe6237a617674d3510f8e17ab3445b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f8/88/c44f3e9668fd2a6f71ec39b5aa5bb01927d6bf8d19fcb7dd7e65c8ef3f4d9c9afbc30474c43d41a09b818ea1df438a3ffe7c3a46891f8e8487c9e69fb123 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/0c/dde1ce6d2e45d026f2b1d965b0e4a8cd53f7b637517073591e238d3d035b6b1fa67b2391f22bcf23930e023fb3cf19aa50dbe61e6f8e8f525961fd5b1bbb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/35/455c163e1c35ed6b97e8443d1fc759814900f7d74b928d7867d4d6d4addb417b37efefc216d0603cf4cf42e3fc485a7a26d73894e6d8c95af633c42b6de2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/ad/06d6f94f1e5b07aaddb3f1f012c88c21ffb2552dda267f438534492696a9b85ef0f46d42637fb3f8671a49535f197c9dd9c470e9f2600bfad4ea6d027573 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fa/85/23d89a74c14313f7720fabdfb48c1d3bcc728b9acf33a4d7ad4c13d36ce7ed685a61ac4cd199d1118f545411e1931cf091b076ab7c213cf5c11545bc7c6e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fb/86/583ac5d9b5365bf9cfd2e64790adcde2b7bad38742ab1c6bedc0d7b88f8e0942384dc864e1ee59b1721bd7c276244c27e1d5194e8edb74e75d52ff493a4e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fb/8f/ee273e6a3a2ce1bc616138203ceb8b8d7abe2483fababe5409855f34313f12acafde931343741e58e3aa8a2043504b69ff6b4bc4179898bc27792ef3022e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fc/26/709fba78bb5f25fc6b1a4fb84aeace0017e66752a28c74695f792c5465f35e5cc5be9394869871ad7bc8f0bd0c9fd94a3f6d1d5936c1c2f3be426aac4aff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fd/28/80e130c8c233af688dfbfe02f2cf78f24cd7b5ee74e28d0466f60934651b0367f44f5469468eabeb5e7e0c01b91df0661018b1a2397cca4f4f92e8cc582b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fe/06/796e042fa2b7d20cc54f9964d97c8d1c117e9a7bb74f1c9830f959c41a5f0813c0fa14dab742ae8dc6f3cc171758301585a8664ac06c233173de9ae0d659 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fe/45/ed627ef993a23e059e4d3d809c4c3b8a6c454acc6b073f6cb112ee054c08f0b26bbd3c908d04259b46aa955d5529832a6564f00018d078eafb2cc3492366 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fe/fc/5fcd34ed2563af5c4ac6f5357892ba2ef06209d95e8cbd88b566939d1dd0f349f5dc3f2486b08b5fc877cb60488183c689841a7c7b46f48532a5ec027d84 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/ff/96/322397d951421ad60aa6983e36e43cd40d020a22fdb35870f818b7b183a4cb2ec175034b3a1825223cb1d2e8daef46fae39a69a5706fea672062ffc12c43 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/00/66/32012869db0721913022f39d2a596fee1431f5758c98e413de2d3d555215 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/02/31/c857aa833c205a1a1261bbc7c43bc57f84ecb98b078ea59b7b6043d0a597 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/02/32/83cb3efdeb15f43b8a8d2011f15adb02193d2cb6ee505edff64ffc0d7916 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/02/69/63d5b6a4953b8c19a9ed711d38a8bb52ac146da78efef25e10594e5458d1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/03/ae/061bcfb516a0be06b235970205e57bc03d7976faa87c20df58bab03dfe28 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/04/c0/1093991c39cd74b9060319fe8397f4713f36eb0afc6d444a7d44de1fc686 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/07/a1/b8d6c3b9935206733b9793543daa02bad67c19847a8ed8bda9d53eeb89d0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/08/81/4da3567867eb2441186a3973b3bca0bea2478535e092ffdc24f42867e1a5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/09/a7/16903c4097cfd8de8919bc462b941df157195a813cad6ba755d91f592436 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/09/f1/38386c826248417144448e77fe4adb0c0a6bb98fc82b570ba52c1a6927a4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0a/ad/d32a1d72f518ea91358831816b60eb61f4f1088488b551b5bd77396482ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0c/6c/29c918c4147966ebd1315ee2bd8edd1c246f21090d2a8945e34ca18277c8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0c/ff/5062c544a0f6cf8ba57a3165a45f8c4b1ae866426d02daae74a797141283 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0e/9d/016f6e3028ebe38a18ed517cf894f0fd47d98f1bc76343c99ad26354591d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0e/f8/b9047f5dbd81f12866c21caa886dd71b723f3994627101792486f6bcd34c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/0f/f4/ca15e81baecf7462a230e4bebe9ad1203cf8ca0947f81a852898b8a418f1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/10/2f/e2d3fccc3f94357ad8259b57cd3a3b3205d1478b89fec7c09c4b46be92f1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/10/4f/d374450e39b1626d934a3ad8622d807d60c8d83daca790bd494e902a2da8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/10/54/c6ce9bd36a964fa3fe91997d10ebd539428508c9f084714d0d26f4744917 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/10/c4/f474943e879982e73e3adc54b8729392cc5a79b3d5cb7fac9d6a737dd934 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/11/c7/aed8303dc94dcc8e5e835f77295cc06bb54c18ebea477a34d64ff0ec99df delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/12/80/6ef7a68c3ca651d4dbd00fce2f6e4e056b17af7a9061d163162dcb8e177a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/13/0c/16622a0bb3381a6d76c88b25832e6ac204ad08e049e531e9ee00c73025d1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/14/71/8c1250b3959011d32f97afaece36bc04eae93f42a62240781fbfcc6eef8b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/14/87/4d3073df848a2cb5a6f3235ea32fd4766e9211dcc7254b8df4ebb497959a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/14/8a/f51e4e1ef0289fc9d3f93994701c6bb3d2cc45474a246184baca8fa9f02d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/15/99/d219a060f7eff158ae801b8205dd75d9218523e43923707d8be3910faf52 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/16/2d/6f991696fde4119ed69ecaa0e56b7e36f1560427fca2f7fd8d663c6a496b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/18/69/e0d22ee4c5cc9e6cb9c0318bddaf6cb9f96c322ec5ab16697e627d825c6f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/18/ec/41f5b63684620aa8fbb39fb50627df01e5b652219ee73176ff0d5c6d84a2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/19/09/3391502fd1ffb20a61b2fbd5d06e51bb886354a490338467e02f68c25e5f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/19/16/d2498469e770b2960a52b120eb500fa308ae3472751ed58594bd73502b6f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/19/7c/364a4b0a9df44cb10bb0139a4541e44b0e9e13a3e0eb08d2652d928ccc27 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1b/23/482e31050f64842f2d8930cfdc37bd68c9e25a85555ce26e9ca4361f8d2b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1c/58/0ad03acaef4108e63ea31959179fbe877fb754f15fe43562f370a0017e07 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1c/77/40c7fc21af7dd2b678c6d111f0635242074a31525620c001537d4ccb7613 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1c/c8/240530eda5d141e5a25eedf1c060a3ff2eb25b031dd931bc2f1c85fb7fa8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1d/0b/b936b88737e9e3a7f3219852d4dc95d5a58f45905cb4f32bb4e4db469751 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1d/14/a29b0a592d2bdbd0599e9eb23bb0a4db54f70d91ecad830ab0000db721e2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1e/6d/9dd51f83f8180f8d4d189a63531700729c171aad2efd76c7cb9917e6ed85 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1f/a6/76fdc0f4a8b222309531742547925be2899650a381ff0bf228c4b62a6797 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/1f/bb/7d6ad5a175c377d75bd1091a62c0526b4d70a6535dc502008d0bbfaecb40 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/21/84/668102037c7446e35b103bccd33e0145bcb52d08f3879706beb6589112e0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/23/00/04c6d45ea155993c1224aed6bfe835d2cc20f2cc2b5ad90caffbd2aacef2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/23/52/68aa7c3529f0101cdb2eb52b859b6f851c6feec2b7e00a6549c5618df7e2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/24/ab/78afc356880b106379ee4f13ec35ff9f35b0b190a4844c115a7bba73734c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/25/b6/1d03b76de27bfff0e828d924d4b9c5cd00a88b39810eb2edf1f63ff5edbd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/25/c5/02f79a1624f9162e6d5dc48130eda0edaf369a5a068a34fb4c5e77ef734e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/27/c7/7b5a1886b1ed33abc8fc7aa8dbe873b248370daa7ebfb742df1add7db17e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/28/b0/d5569a341b95c2054379c198e0300126d60025b54258983a976ff91f0d86 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/28/be/cec00123105090b3dac22cd6dad25f584367197f4bca746a1b9790f116a7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2a/03/d8838e70c961ddb2d4ace6d77aec7aadf29aaf4cb18b531ac9e22d937811 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2a/7e/45a10d2b87bf0b475981f049f29f1a4d824f5211ea851d7caa60772c4747 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2a/bb/fe78c5f82b1bc285343ddd9e564b2aacc7d8b027ae1198519c6fcdb7e070 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2b/76/68976b06e0e2629f3f8bc5df28865b6b39a163f32f9a143b41df3ce59063 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2c/a9/7ca10c658356cef4d282d60c47194a60605880aef84b30c105626e65040a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2c/b1/1850a50010565b63a1b4924c4eb6ad24f30d347f5d386251c5d8207f934d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2d/63/f78cbef9fac12dca34e321c6fe349b679a45a15a5cb58c5fc5a4052d6490 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2d/fe/5a985da928b01732a128e865265fd54e0463ec29e747f110228b869d05f3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/2f/09/779fc691e6ad79740bb402350adf39d6e9785809cc14a37e8d77c54edfa9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/30/92/8e2b61751dd6555cb5caf180ff1f51ec9e36427e047e149de2ed6132e796 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/30/df/ff28496bf5b048468177d9cea8fbec9b7e27e6052296ad34cb7d66afe89b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/31/71/f5d565ee9ec640f5b570b0e6ecbb439b461229deef6fe8c039b0e59b6746 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/31/e7/4b2486597697d16153a92dad61f2c568d3af718f1e959d8569adac4fe6fd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/32/4d/f41e5e0ca0461889f021c741d91831299895c7d75deef912fb94ab9fd360 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/33/7b/19601750abe94c9210b0df3771f622be343650e9738ffd46416479bc3d34 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/33/b9/f7842a56188e236736fb73070249a5001a2d94728c1e9210d7beb4254a5d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/33/c8/132f13a318607b1b6a8c943dfe0c7fbc1e16eb458eb4b1ddc62edfe92515 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/33/cd/d2ee023488419ce4b964753727edeba273136bb4c0ca4f03a47056a9f0c9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/35/65/f0d4501d69bac70fb930e8dd07a0d46cc481a3fc4494e572c2063d847b9f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/36/2a/8bbb17ca1f21d285649435482d7d891b85169ec72abbf4c2e721464c3e00 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/36/d3/5d1fb5d34a0a83fedf12d12eb7e3e5be09b185dedb40657c67416b5df1f3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/37/a4/b28989be4d3501e38824adc6cb461dde08239c4b56cfeb21f32287ffb32f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/37/be/004728548ef35db74d19c628288871551211285029ca6d933bf85a65581c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/37/ce/3ca019de54c6046846e758c369fbc53d98eebb25aaefbcc61e5cab9ca48c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/37/ee/a92b9be78665861785682cc8f7beaf768e910e8ece8173a0ef9281939536 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/37/fd/57eac342adb6963503ed403864bad38cc5277d9afbb2ee51889768220588 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/38/8c/28311b292e3551d87bca461cfe77aecaac354adc3d2b6bae01a26b898613 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3a/17/8d82f9585768197abc32e3d014514067ca1d1742ce776aa17744497820fe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3a/41/261d508af6a4065ebabaa29b6e328a295b52081b47254791aa17eea9952a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3a/d7/c988775d23f542d934def3ed3c658a9cb61429724147f0f48e6cb5094d96 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3b/a9/d540ceda4be29f7eeb9dbd3ed87da90ee30782538169b54512b1fd2d4dfb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3d/01/9451c35b36390716471fea451bd6ef30db60bfdd76880d4c61620074595c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3d/11/72527b5a6e34868f254164c1086775b4f8a654148953b84ac11d4637bdde delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3d/6d/79ed1130c6fff2b85b0ebee410ec2805f914709b6b1b39021aa90a2e8b6b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/3e/f2/c9cc72edc3f16b6fd7709f7250d560baef8330917392128ffd462e505437 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/40/32/a32ed93a1b8b139c1107ccc5f8550a3e1422c6ec4948a479a379a8d7e66a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/40/b5/946300c800d829328993b308ad78947da6e98b64126ea5245038f75474c8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/40/c7/0038d5e9f4cf4afcf23f73f3aa1fccf19e2ec5f2c5b6b1cef80d74b34d2b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/41/0f/56348bf59618d9893d91fa7b875f41e42351d04c8239be78b717911de371 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/41/8c/11328b013381b0a075c7bf68661b22c7030c4c44122b4018b0a3e6552de1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/43/fb/84df45bc1901d70b0890ebdba5e5c96116f151ff2b7e27c27b479a4b376e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/44/4d/bbe3fe7cdce7be763a2547e42e7ed5a4f8ad45a83a04d5c9a01edf37d11b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/44/a7/3b6ad5f24f551369a3153ea5563a8212c549d7d1ddb87996c72452fb35e0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/45/04/fad2b2ac381bad049b650199ae6cb7aa40384ae94804512509e375655875 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/45/1f/26fb79a5d3fb91e90fc6230a3511191b171a1c1a123edbb6edf116ba9e23 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/46/96/3cf81574e5eb14ddb2bfcf7c46610c27dd67f010eb3a4b174c6d725422f0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/46/c8/61723dd458c452bb0b58e0af9cc3284863c196cf94555fa692ee35f36972 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/46/df/3d9a21339bd88613845b8578d059a0bed987b0d456fcd8a1339dc702c5de delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/47/81/1b31ca2013115afc409f356ad7fee68f764d93de705a2b49ec6b574c8277 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/48/02/ee13ecceff09b828a398644829d6a0199d91ab7824cef2b664dfba1e8f83 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/48/1c/8cd4fbeb4c3f674a58266f606a45427e32f1a8ecd617f1c4418a885e3e3e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/48/9c/447725266b02a67b9eb83b07119da4ec7615b5d4dea8847555dea78fb671 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/49/16/7e3be4494c985fcc5d2b37cab7872fdf5ac58613e186f40d90948846b6ae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/4c/b5/02d7dfe7b5e35c8ed639d722f8e8ab4ca37f7bf36d52965050b7b537216d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/4d/03/6bb04b9972a3c42e3cf3aa98041a2b499275407efe764ea67dc405fe904a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/4d/11/85fe817daa8e1401252dd1cdef08cfebe0d95ec4e45996502e3b7eede426 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/53/b4/a47384de4bda4eb74e1eaf452f0f4e0d449709fd5ba4946483a98f1e8935 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/53/cb/eaae63d9f05fa6757bd079ce85736dc7990c9b8f65056578597dcf57265a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/55/4a/d739185b07d2971bfd846c1027b7dc5c0e7d92be36b6849a5820f36f2981 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/55/92/81e669f735f5bffcdd854ef501019b1f7c634171ea4dcbc5feae30d8b1c8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/56/34/cb9d04fa5f02fff41c7c4f8c7e1c62dd580d9d41fb02be57ec15ead3a522 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/58/bf/f9781066315a4ececbd58c0d31c1d3a2f2dc2678de6efaa257aaf3872339 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/59/54/a5d285d755a19b33ae7cf896d7fd2aec0cb02a34b7404b684f5e51b39177 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5a/c2/2b3e4057463c80e3a7826e182d2065ed618885da12c93c287a0edc681321 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5b/33/2135d60440b18ef424195545f78f70c0b10311a13ca91281cbe6c92a74c1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5b/52/128970f57f99957ecc8140b36ae3e168071ddc76fadd38fbcea5e25bb987 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5b/8a/0c2fd7a6eb00eb754c86875275e1349d3a07875de5b173750e320afdf012 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5c/a4/43f6008d30e0a39600f9f791e42d0a03aae36ddd1b5ad4cf56b4761619d5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5c/c1/a46bb59270172c6a2af46e38aa316000a4ca5007ef8d97e49fb22441bc31 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5d/8f/850193540dbd957c724007fd3cd5e5a8dd80afa34aa3a835f6c47a8eaf5b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5f/78/e0d421d4e9d7d6dd0e6757b9e6c97552fb4f5772766ba547e8f7eea37e0c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/5f/e3/4aea72b88f090b186ab4d42e23c0151c3fdbb7aaf578b9348bbc7c2314ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/60/55/9fed81bd99219f728536487dc2325d3cafcf1f82f78eca3fe955f4b14d2e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/60/a6/b88cf61dbdb5893c896e95c1d80e0847c1c1267a48c25d1fca3d2449630c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/61/2a/5b172e5267af705bc0c1cf0ba8b4af9ca17cccd224d93c01658b420862b2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/61/f5/3ebb22ce2d660061997dbe661263f43a1c048fe83fdb301986b70270373a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/62/0c/83ca180e25112bd6cd8f9057a6c93712ade62949167d4546c06132d46979 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/63/52/a43212b059a8c04ac28e6afad30b95953af4202d319c8611c7463c1b173c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/64/bb/d54badd0eea2f3aac0e778b2fbf3928ccd009203dd9f3ebbb4b623aab597 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/65/0a/7668141dbba00b071c2f6c2a68b8aeadfa68a5e59b1b3496c9ba731e66f5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/65/8b/aed6d2e15d73c4d2bd842c5764cf106b5adca71ef16125f407f5b1b26a52 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/65/b9/257f274b3b301e1605f6530f6069c934f631b553eb64a76dc3742fb66410 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/65/c1/41e99bbf72b636d1714cdef4afc6c475f6cd406074a786051570fd2246ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/06/b2e7eabde5fe4bf4b1c3fc8abae5f54ac146a250aaf689d672417ad15cd6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/31/ed2df1f5b9be311ce2446213eae2f83aa7f275a2edda8cb401908c0b40b9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/49/a83d2a5ad8f7e93255eaa96236c8da1072c856424406dadcd57dc3fab0d5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/96/dd7e9f099fb3a40f6a353c0d7aa9b18c915d8864766b294452a7b21e6309 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/b5/30e572a14028e05ccc339080812fb79206b6df042f17ff905527e038aa66 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/66/b9/974a3a5f512c253862a66a65f3967e46a4e70a43fd52ced66e7f68d1cf36 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/67/02/e1e44eba5da920cf3f0bc304f6f9496794bd3fc8ff8c4f5b57de21f98f40 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/67/20/147d0f1804625dcfedd8586ff75e67725a67ee900d2e810fb0e0a0c9e4c8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/67/77/38f1f0351c470cc7f0e7e5fb64155727046bc6a82b63ed156bd0762d7aae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/68/4f/6bcba749fe229e7cbcc02ffea150840d257e1733da3e3b8c65254e10d6fd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6c/ab/a05b24ec25bfcae845aee1d41b23eced3979fb607dc0a36dca94f320cc2b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6c/f6/a8a3ff1a76f2845a8bb897bb8ae9b2b780628229dbf342d5967ab2f172cf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6d/60/6a53216fb493f83932dd14bfcc5bf0d87b2ffebf4e7f5a940b92f0ed537a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6d/e1/2879d822c5d4bb4552e3bb5aca226b72e04aae0767814ff108ce3f7e5fb3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6e/eb/5542307ba393536d792763bb9153307eeaa521dd4d7796b89b0ead519142 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6e/f4/b85d739aa66ccae7aa100a76132ab7b062d1e60061f36452964dcf68d891 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6f/a3/3adfc3ee18398facf0b0c69c85788328d820786bbd8e627f3dbb2c8ffafc delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/6f/a3/43c1a4285e5c8b1518fadf39b3c4a904096dde4311f6969b976715439046 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/70/2a/f5eb58441943817a83c941945174b4385b33f155113527f507a5d09cad7b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/70/f0/2db6a4e246d5181f656a5c93005b47fe7fd9f58ead34054e19f8b90bf905 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/71/d1/29f2dfa9f1170d3f8478e8d40bd269fe5ffadf3a4241095f6fcd40d9e288 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/72/c7/6c8788577c3ac47a3cdac8d6f6adafed964cba1442313d2d1548fd08d6f9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/72/de/7a77532a59016b7afb49744db2f5160ec96a36dd640b071397297866ccc8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/73/17/234095c37d549e981134ef07bf8057e8adef76a8e75b6f64d3a748c2f1a8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/73/89/f4e31a2a711b90b075d3b5d7ff750c2272781314083f6aca4374600c4f1c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/74/0b/54af1eb4535b769f40d4f4f9e31c1806f9ac73cb138f6ccdcda1ba236d81 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/75/98/02b1c1b04510ef69f3a34ee3a5da79db46ba962fe5d5c16a1c642640bcfa delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/76/64/cde8d069df46c9e2d46c6251028ddf450c5a83c02728857e94274da11407 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/76/ea/1dfc11fdb48ed2bc40090021444868b3c4bb5854d4c7fec0c174ba466e68 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/77/42/2ecdc296487033ad9e4d1d28afd61f65aaf945a1084fdc888c0369e0a01e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/78/2a/e8d65d676c6d4eae52328c96f7b38e3b4f8d0dc60d6eae9c72d78c1d2a8b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/79/d3/985b5a0b99fe724b6c096cfc10d8b07fb874597f61e364f68e08b3004189 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7a/3a/0ede0100e8a296df6234c83b9dc82b137c87aab14d4c16edc24f6a347ce3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7a/94/89a618af8be381c4f845a6a8bb899182145c39414ae4cb03f6adeeba7b48 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7c/c5/793326f3710391f83271d3f5f3a002720e85583a3cc71c30697f0aebc4bb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7c/d2/32b6bc34ea4a0ba92a032e2d1dd9568bc91bf12d4dc1d609d1524d7be417 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7d/09/924043293d2ddd752e27d5044c8d8359e1b37cd760c5cd3e95edc984e85f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7d/4b/2969597d0f85944b1b18297f8c1cc87db59043c3d6288531df36266785b5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7d/c1/a4cd3f4d9ece651a6437d2dc4de143a3975fe6e58c75c1ba9e1da019ab14 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7d/c7/db310142a49b953277bec245d5747857a6114b662efb0dab4e15284045cf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7e/60/fcf20a25588b8cc1bc7c074ec2d851c864ef374eb1bbea8fc43fb1d2e7d6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7e/9e/1c081e0f5c220d261bc2f217750c332e05d75529b80d27203e5e021a7fa6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7e/a7/7dfc61cfee30acc3a93b84b38389128aec538e54d2d292f2a5694586c787 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/7f/ce/778df24d77daccf0de5bac8a288c403f50e0fe4bac31e591d0db667e3b9d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/80/da/28e55eed745c722bdb21859a92614e7148d3831383687acd330f74746486 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/81/75/7df664398ae1645623c315e06dd0df50568b4ad1ea473109eedf1235974e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/82/25/b1229739d60166fa31db7370fc5cd9ac2a6f56c221125b6d8e77675f959c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/82/f9/bcd1d1108ec083072775365125a7ae08ea75fe6500c45ac207735e65972e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/83/84/77c86d46cd0acc7f940a39607e9182041dcf89fea967f37fa5b3197790a9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/83/87/3ff1671e2b9da46b52128600e0017e25aed1fd7d006df183545fed106d50 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/83/ce/9713213fc4637e66144569af0021adb9e2cc78eb63a9c2d5ef035259d151 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/85/46/088c39754b8b46f89e23759b4b999aaff996918d1edab852c6c401ed14a7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/85/d5/4fbd26c310129fba0bd572b9d592806850770eb1f13e86bbb61bccb0c13c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/86/bc/6c91de273cdaddb90452b07d0cba695407a2e02b6c7cd26a4528b7bb574b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/87/24/ab3e7aaf30ccace2ca2d1e63c90d3593ac6a416885dab3461e60916e127c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/87/7d/e0ab38f9b2894d5734027ce266e08154eb133313ffe4dccbe09783f96048 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/88/74/c0e3b5f8339e5e455f79c3b9f96757c725f2a8f415059f1f2812523bf2d8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/88/7b/d9bef7d24feaf97cc3150e424c4494ef6e6f90ae0aebcb7c83cadaa647d2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/89/2e/5163cea467732561ea9532805379c66953f323e96644754d0de29afa1cd5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/89/e2/4ad1a980fa536e3b907a2d12403bbdda30482b012e7886e6d7c733d0f786 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8b/50/9f1452cf43626247a7cf06f2a64e97d26bf1777bb39c50baa6a37fad537c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8b/6e/2958b2079b9194a7163bb264f1a9ef5c6ac6e29130ffc8258c005671454c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8c/c0/626f54ef007c1df8314cd2f9770050f8f271c5d2d754de6e24f72decf0b0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8c/f8/5559c1106ea9f23011bc8f462c161f9f0ea74162e1a32645c06e23538ddd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8d/39/2f2cdc887696212bc0fa95b7063031579e64bd8bac67c8084d098557fbe3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8d/60/2328935636a794b80f8e99071aa2300b3492106f0600546e5f802c825a6f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8d/7e/8a5d1ca0a94625c96370183dd42b572298cffb5943bdcb137e9111e8d8e7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8e/23/feac0297aad2e98c04766ef192577ffcbdfb51c041f303f3ae9d80b8f56c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8e/37/99b5015189dd9e312ccb573451e167c5fd8174d90a5a90189c56540c91e0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8e/5c/3306c1d8e0dd0351aba76890f75a6c93c9f78fa20b35331616a67719265d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8e/e0/7ce804b7f8ba0735c66f6f7b5b97ba059b35d58a230f9e4f047b68bba144 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/8f/fa/88f1860461dab3c6f4564467e3d4f5ef2a540d11bf2486d338d3262afbec delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/90/87/cf0c8dd6740e73cb50cf7cb37f6c84523b82a4b1a1c8a0bee8b5fef82065 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/90/a1/6b8c9c4c3c9321398b9dc59136c18492f88a87b7dbb49a2fb66d4116d8f5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/90/c0/532c9c6594095880cb5256773421b1a6e22c946cc666f75eb16917a8b46b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/93/b4/62f57c2e88726fad963f011b9d6bcc9ce7b1f641ab7c0cbb76823aa5559b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/95/0d/e270501de81b49d656d8f8559bb38d9bba5afc7f4adcf41e4df1e32ecf9f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/95/16/a1eda066a52d86af06ab32cb2988dce032cf16364a5a995d03c394b2df05 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/96/8a/b729b45a72c4adad86a25551f3fed57fe88caa7aadf1b3d9f9158e6f9364 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/97/b6/8a805a208de67988c65974fe541b911e8995ab67b9a4d5efc8fedf14506c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/98/38/f277fc90028a18a060f7656a43e2449aed23610a5e5f2bd25825bd7b3690 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/99/b0/081f1dff5bed881124a53ca14bce5837a3078291b63506f73f781d80a69e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9a/6d/1c3928eb0efdb2b73d1a65f66117cf6b0095128f2bcf41403e63c1de7daa delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9b/29/9144a02c84de39436e2800ae0964f8430d17d2ccfd12a32128071bfaae2a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9b/dc/305f02bbd1a8d5b11d5473d24cc0bff6990c7d1c6bf419c8ca221bd27c06 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9c/93/e834b389a2cf7c81687ea73c5fd3eea1c16f7eedd2003396a2ab7ae20f60 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9d/ed/5b061e3632945d74c8ed0c2a50472e6ce4c64ed40b0a2211e2bc1bfb8ebb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9e/65/4a4e10bd4b0d9620d3c79cb8de3c467856ff11c9885c29c860728fbb34ae delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9e/6f/39735b4e27e5f737afd8305f9baf86be2557160e3eab59ef0f83de82ee5c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9e/9f/95d214835edc1fd4ecab6affb021c351aa930d51ecd32d4df856a8267259 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/9e/f6/4c50e6b4bac710c7de7b7a95194a6d6255f01b487e228b4a1198e2f9c070 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a2/66/4f9920de3459cf3644385421f01db8129b41f9577340f6ab55eaf33866f9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a2/68/94967496980c968f47c038f2de86219ea5fc4caa71b035ee96c605118368 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a3/34/d791a4f179b4422f22dbd1a17afbc25e131e09e285a6c375e643beb63cbb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a3/c4/674ff5b3f3132120cd8380c58d7524ad5f2a15dc2bcf88f3207432fcdd21 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a3/ed/a04a975cd58b4c7944a50f1df67c5936b1d3f1d648cccf8c13f8702f5647 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a4/0a/7e6f70f88c8618bc6e4fb324094dc86727197a0fccf872a06df2d4947b0d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a4/85/cf8c65eca7dbe183e1ef470488e66ee83e80b3a49a300120396ed4c454c6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a5/21/925a05f03b87e9a1781f2aedf8dfa93f6ec897060bb9c30a6ab8dc2f8144 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a5/28/5155456ed00011db6faffacfd3d068a217304e77bf5ceaf2d088086b463a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a5/7e/9c6ff27071481d7b291db9248b979241c0ea12bdc48fce84590b82b82ad9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a5/a4/bfdf9dfec7dc6a5319d3d98efe8bf1779454ab4f788b740eac20cad9cf02 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a5/ab/838fc42aa0fd17a53eec6a7bbf56f5879bde1a3299baab1da44a5f66a86f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a6/2b/485e15fa5284e9672817a613c3d3c1a8b388cb8ba3c5d7090df38ce488e4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a6/7f/b44178950c596ca8455f38d1f8d529ffe10243ea50ec742d9550e7ac8f01 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a7/57/7ec3d0b2fab1fa30edc8e7fd88de868f0dc20501413bcb7ae214191677cb delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a8/28/4bf9ec5d08e55a5917094398f337f05fce0a40f0b10efedbb546ce64287c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a8/b5/334b21d0e52fdcb2b159882d8ebe2b01f255bfb9890de89e540611c3ae56 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/a9/97/4be25ea986c63ff1e61942d3cee03aff1f11987036e96321494198a2b027 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/aa/ed/5231fd12040391c4cddc1947469aa82460428c71a7f82ba0b886b714b1b9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/aa/ef/589456595fd44c6276d09e3381c8c34a5688f38eeee59c8ac5fc0704bfbe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ab/0f/a86065d2f6d42189ae4213e405aa3cc742006e7850b3bd0b7d673440ee22 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ac/1f/c66ea9ead428924710151327f63b1bf0906e8697436cabcdf30716aee777 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ac/26/1516514206e6b34cb6c4e6113db0f121c62a2211269e2eca5a5d9ca75558 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ac/6c/d38c8524f1c52ab9bed36499b9eb1c7ad371726541f350ff85eff46595fd delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ac/77/43971937eba8b1d88323442f2265ba7f9a4c2f6a187f02ba97074a924514 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ac/fa/b9ff73cb64d85c05d58d18414ce9039322397b70af431b9db186ebf15604 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ae/33/152efd25b3d17c5e7a7c6ac21ae85006f0b0340203d32802d8da263c77cf delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/af/d0/43225b164d28d32a05131630b435d04f70a57112e2c54b62bc865aa639ee delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b1/ad/5456fb11a016ed965a76f9270eec8d5bac8935ac59b0ae77bfe8fe87c2a7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b2/1c/8bdf6f39268991595cf8690f5294fad0334f5e8c75c2a9d44a7182384961 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b2/3d/f04e981c51ba6419d11acf025d5a6ba307550f6f9faca3ac08954b01bef0 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b4/a1/64f254f30bed476c5108fa52b5f2a68592ddbb11fd287a24e8abb6ee93f1 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b4/af/0d9fd344907d5aa9d97458468aea037b17dd514f395d4353a143b272cc7d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b4/cd/76adc71f409f96026e74b709fdda6f8e8ae0bd0c3f0d590ab541b8c6496b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b4/fa/230301c32579bac88728848d2380c5746ce664c931064cf4874c6adb859f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b5/ec/e8b5ef01a2aff21e80965a7c1803b8b30de07e02d2b519843e088bea341a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b6/71/1ef23e4b4809660edb19e04ab5f8ccfe4bbc0e88f2847518133391167f7e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b7/60/9277c0f7eb3c73adf6765fa2ecc2cda73b1bc583f427dcc12d430891cc4f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b7/d3/e4fac92cad1ccb4d6b0561f85c1ba0444b9925ec934f8bbb8a1df1c88aa9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b7/d4/dcf8672e2aba31f0afa60baea791bcb3aa44fc3739f89c512ef3184b4667 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b8/4a/124643dd34ac485e0fbad78d05e68583308408b490127a09407e2c936771 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b8/60/ae505cf8282f622eb14f3b5fd26c3354b9ab15c98e4ed66dffd0a3519951 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/b9/47/6ab365d48f878804df35e5781836b7af0fe048744107f4ed9fb55695975c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ba/a0/2a62e583082de18f68c494bd38e4819d847a4ec37708f3bb2f4b4a8354d6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ba/c2/b1d9d3b687d8d86bf7128ea28870866a718f0ccc788c5cb42371ca767cd9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bb/f0/5434f9d7efc3ffe554e630cab56d8296efab7f2cf44f3342e0cf3646266b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bc/e6/a09c7bcebff6d0842a49e37f704f3e71c4f8576e676c957237506ccdc5f8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bd/b1/349530de4842f8ece2013cfb43dfa1886b5c523b205c7e4e1073ac3cfaf5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bd/d0/0505174c49c754fdad90b6ab0ecae21a1eaa868f58313970ff18a0b99ae7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bd/d4/1ff630d700d9278ff9fb25c9586facc0ca580cca1690f950c0c23e25d5fa delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/bd/d6/ce386b9d1cc49197f7f3d842135c7ccef35a9a622dac7aa266e8f2a29764 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/be/70/de64e4c69fb68b8656f202b6dc3da72f2084bca9957e6526ca0c406b0c52 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/be/7c/c14c5f5a02295328d18d8f105cd13da401ee121c16d0f34b3b9eb351b103 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c0/c3/1f39e436a8ede115a79a021a59cbb24c231f80f0fa1edd7637ffc348a818 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c1/20/6cd4049d5193697529c445ccb922e6275b37da0e43cbf7b50b31fcb32b84 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c2/62/2a2dd8f5be98aa64dc72364ad62d6a501f741e4c035df299f2619205356b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c3/e8/2607449efa9d52f0e851fad18cc4cb9162a930c60fb3a19e93397e0f791e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c3/fb/b69c02654d9ff9564cd3de17a44ee657d3292092b88a533af7e83555b65f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c4/c1/775ab34f927f3aaacebbc851bff7c0396d4d623b8838da394f95693f9ac3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c5/8b/89cc7285ecb4a9e447cd6cbbdd21d0659bd00dbad17fb6d7c8f291cb55b6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c5/9e/19dd5ba1e57befff268fd18abb06f2443c1b138b350d7dbc0949b98d4c85 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c5/c9/de0b5967937ba176b17014d5d310a7d2ebae77b56020f8868a37ba910d30 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c5/cf/b11fbafe44c0cc75d0a25147759190880cf879d95050dc4fda30364042ff delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c6/3e/af002098f76211dabe48919adba5e7ab418856f3e7a196fc8afd9f954c38 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c6/8d/03a4f06fae02d05eacc7ea90ee4baeec3e8536b81fadd54c91f203762917 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c6/d5/7b0d0ea180e23a94d943b6b852b0c637fd2a37c0ca66d083a1985c600bad delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c8/9d/8107e76e9b00d4850f03531e7c02b520a09e1fc3301f6bd3bb8808ed5e55 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c9/8e/6a06ce5f9b14865bfc9d5f4b2ec753421a0228fbbcaaec6f86c6b8900931 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c9/b7/6eb318bdfbc955f74cb639a961a3dc4a6e0f3ad523da9128b41304f3917a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c9/d5/38c99bfdbb258c77db6203c34982f6d204c84d89631e405e2c29188e99d5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/c9/de/9da6c72041ca353f4cc97952b549e62b2a17a47a15c1c0c7f785a1d018c6 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ca/3d/9ab557bea6fb23630449b89275fd5bfbeddd4d94bd7b307fd921cba3865d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/cb/9b/9df25efb5e76729d32b95f2d2258fdd0100c97057690a28eda241bacafec delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/cc/1f/506c1e09092a614e91b40d2d24f162fdc5c9791348b24446c8c4c2bc3b49 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/cc/f4/e21f0c13ace6bb725b90db5e5c136f6d361469f84114a54d8d29603be70f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/cd/68/4c080a471fbbbd19285d581799ed3112ffd724e667628a1081527bf4c2e8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/cd/86/8e866896cdc66b715c5013f4cb18f1f4fb8e734b1bb376c9fdd9ec382755 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d0/69/1303263c05b07dc22d09a14abfd1cabb1a5dde9a97ba927252a7491579d2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d1/02/9d687ba9abe075222ad99fa5306ec55e65914128ef0f716ab5dd8b390a4c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d1/38/dd74f12003cfcc771e6fc3c272bda3bc2db117695d80ecae56e3afbe49fe delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d1/94/3b65b0745ecfc57da0bb79f4d574818d74957b41ab13a6120ef005943468 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d2/34/959672c7e64c4683d557d6b2ce6d373a2c63ad01d0ea2f7e9067ae95b1d9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d5/af/113602b60d0d0c648473630b8a5e958c592e885858c348405eb063226b81 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d7/13/a4332b0aa0f51cc00934a6a114d4c065a9d3cbb84ac2d3b65431d4668d23 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d8/ad/5fed8f5d143ad7b5903a691502530024e5c3e7224ca5f53b949c3df43c57 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d8/d7/af880cd2224586b6491312fc41880c0de138f6fc7ac93fb1443388c6160e delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d9/73/1ed5e4c2a7939ca12b17f48aa0c8f3cd34d7e03c228fb60c2442b9ada629 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/d9/98/491a3b87765c3911212e3a2665fa4f8fb449173de566a6f27d3030030430 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/db/14/61a3cfabc86a76ecd972fd65b682c4ea3af4c7bd4e1bef8aa24439c4561c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/dc/15/699dc3dfe38eeed65f9cc42612df29807759908df48a3f78102ba7b61174 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/dc/a3/b0ef406c77fa46ebc1fcf8b9e4305f2c18e4ea45e416f7764cb5675368df delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/df/97/d25e1792c257755f8e0cbfedec2a5e4c2c26ce04ef73ede0c957ec8eee90 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e0/6d/029f641716acda90c8561ae09d393781a1a3d303c84782684d1e2359a9b3 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e1/49/a9e9d43305b47312c943374b045b2430fde254b11f0d5dcd598ab524612b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e1/96/5258673bc16ad49df6e003bde78c7810b52d90a74e012cc4986a3f5de22b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e2/40/49f1812959a2685bde6519c91bbb8361d21a44990d891b74fa4ba3360d00 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e2/64/8bc5a9deda0c7b7027d08992554d672f4c94481dcc791664224c34536544 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e2/83/d48460a43e650c561e5c8c049ac70f21318a6e7512190cb3ed8c8f7120f4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e3/8a/58636d60c0469ccde4e23c26e6f1324c5274d20919987f8cc6b8639e37c4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e3/a2/4fb4e84dd78932d8c1d8f152ff55ffbd139fd93e938f68faa1a928b6982b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e3/b7/203fcb2c8e139daea1d022a3c984b5ca1e37dd381ed71f3b22b298a2cd6a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e4/46/bc80eb264258246bc0e00ca3b4dc9704886a1a350fda3836de162ace2427 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e5/71/8ca76ea01aa1edf17b66e874ce79a00c91eed53ae828ecffd43b417b6a1b delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e7/21/38e9ca685a7bde532de12c8ae5b37cfb874f81899d3fb3a281e1e5293a90 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e7/68/a6e1373242505f88baa7f5923d66de59d33d786765e69120d8b8a915e45d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e8/22/278b9d41806120d66599514b6300069440ce006ad55fc06d0f3b30d33342 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e8/60/b6179f4f8dbdf3f7c80af342c708d19ea6ce5240d3733523faa61e3aac27 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e8/84/1528f301ad904bf95d2f19af4d90c644fae5249267bf18b6a526f86febd8 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e9/0a/2c359cd4f8c9e5aa571973abc29f193a3db5f9a87d5e14f92051e821fb99 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e9/73/4b6568b2f797b56c8872b03e9f399ab203a271bd43dbb9c53c09cb96a853 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/e9/76/b8351e4ca0d7aac45843001690a84a7cc109725eaf478424a5b11d906224 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ea/60/d425f6684bbf4e17d5c142c7ffdb6f28c6441752a0d0e36d41baad3f654d delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ea/d3/496004bf64132c4cf3e60ea9580bfece6e6e15cf7a917215d4ab95313f4f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/eb/2a/72da45172e4cc519a47d98370b72230cb564d96142309147a31efe1d69ce delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/eb/fd/ab6dde2bab17fc828c6b1159b03bb8286dc252b8ccab790b0a566fdfb4b9 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ec/36/5b88cab3b8b5981a266a6b27211af6676e645077b28c28c7ab73eacc9331 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ec/87/db5fc7e04925a68af52a0efafbfdd377f6fde4cc4a56415c38520871fe58 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ed/92/81b9626fbd51581537cece7dc43eac97019345958e941a2a4f5d171bede5 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ed/eb/2f03ecb0836921f8208ad44df3d1ac60907041d7c6c0fa087ecb82fdbdf7 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/ef/03/4ea3309e861e59a56194dbb768cc470948faf23facfe197080a52f1b1dc4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f0/91/b0dc794d588fd4a833a3bed23ddf1ebdacb0b2dcf6840e8a864af8aa6384 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f1/42/849423d77642f9f08edd4887fd08aafc0e7532a7c0c3b8fa66ca5298d15a delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f1/ec/abd0fcc1217b4c6e95723760c65e91a7328d4e22f43555518a40568f72ee delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f4/89/523a8d43b8bd3261aeca5918e3204a02b3498754f03dc12feccd95996a54 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f4/a1/5d037b20f3953763c69da5fc343a77300f9f31cb478880b85b79ac22f581 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f4/ce/2940c08c685d5d1aec9d67934fa6122561f6d0c3c7edaa022570c7bcc201 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f5/bd/5d295f4f282632fdb2f868c59b6ede5891dc7fb541a717fcc07a99ff1b04 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f5/fb/eb73e0510cc95744d815f83379a971386cd663b1bbaf075aeca132839990 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f7/cd/1fc177f604d1d14994ad414813e17ec50232495f6a57a6d316b4491151f4 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f7/fb/1188e6f66176cc54e80a309c7f4fb559611ea5da997366bf0a16747c0b7c delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/f9/55/a052668a58378a22e7b8d131beb5a721036453e192273048ce1c2120c8df delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fb/08/f53f3caebc921fa9b671ec024491bde8d3ae5983a0dd421711f21572a426 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fb/1b/74a685f97bb78df52e3d9974927fcf65ef90188c8c61fc9399b4b2307479 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fc/95/da1bcf1e1a475ae0edb21987a1e73403571f4141cd8052c8fddbaebe0509 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fc/ef/290a0f78d44bce809694a303fc8bfb8a86933a2871e917ffb3060c8ecfb2 delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fd/eb/d2287bd603602923bbf6326f96f5addb79ffb34dccefd08e0d998dca280f delete mode 100644 runtime/node_modules/.cache/terser-webpack-plugin/index-v5/fe/d7/9d54d535726d0e07de3537469be2ba68fe8f902211f5bd14d74292a80268 diff --git a/.gitignore b/.gitignore index 86d943a..55ad080 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ # dependencies /node_modules +/runtime/node_modules +/runtime/dist # profiling files chrome-profiler-events*.json diff --git a/runtime/dist/bundle-src/custom-widget.js b/runtime/dist/bundle-src/custom-widget.js deleted file mode 100644 index 95bc103..0000000 --- a/runtime/dist/bundle-src/custom-widget.js +++ /dev/null @@ -1,1225 +0,0 @@ -import '~styles/index.css'; -import { __awaiter } from 'tslib'; -import { Injectable, Component, Input, EventEmitter, ElementRef, Output, ViewChild, HostListener, NgModule } from '@angular/core'; -import { InventoryService } from '@c8y/client'; -import { get, has, set } from 'lodash'; -import { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components'; -import { NgSelectModule } from '@ng-select/ng-select'; -import { FormsModule } from '@angular/forms'; - -class GpKpiOverviewWidgetService { - constructor(inventory) { - this.inventory = inventory; - } - getDevicesAvailability(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalDevices = 0; - let availableDevices = 0; - let unavailableDevices = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - totalDevices = 1; - if (response.childDevices.references.length > 0) { - let available = false; - const promises = response.childDevices.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - })); - if (available) { - if (response.hasOwnProperty('c8y_Availability')) { - if (response.c8y_Availability.status === 'AVAILABLE') { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - else { - availableDevices = 1; - } - } - else { - unavailableDevices = 1; - } - yield Promise.all(promises); - } - else { - if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - } - else { - if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const ChildInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = ChildInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - let available = false; - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_Availability')) { - if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - else { - available = false; - } - })); - yield Promise.all(promises1); - } - if (available) { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - })); - yield Promise.all(promises); - } - totalDevices = inventory.data.childAssets.references.length; - } - return { totalDevices, availableDevices, unavailableDevices }; - }); - } - getFirmwareRisks(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let highRiskCount = 0; - let mediumRiskCount = 0; - let lowRiskCount = 0; - let noRiskCount = 0; - const firmwareData = yield this.inventory.list({ type: 'sag_racm_currentFirmware' }); - if (firmwareData.data.length > 0) { - this.latestFirmwareVersion = firmwareData.data[0].firmware.version; - } - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - return { highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount }; - }); - } - calculateRiskCount(device) { - let atRisk = false; - let noRisk = 0; - let lowRisk = 0; - let mediumRisk = 0; - let highRisk = 0; - if (device) { - const firmwareStatus = device.c8y_Firmware; - let versionIssues = 0; - if (firmwareStatus && firmwareStatus.version) { - versionIssues = firmwareStatus.version - this.latestFirmwareVersion; - } - if (versionIssues <= 0) { - atRisk = true; - } - if (atRisk) { - if (atRisk) { - if (versionIssues >= 0) { - noRisk += 1; - } - else if (versionIssues === -1) { - lowRisk += 1; - } - else if (versionIssues === -2) { - mediumRisk += 1; - } - else if (versionIssues <= -3) { - highRisk += 1; - } - } - } - } - return { noRisk, lowRisk, mediumRisk, highRisk }; - } - getAlarms(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalAlarms = 0; - let majorAlertsCount = 0; - let minorAlertsCount = 0; - let criticalAlertsCount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(response); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(childDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(assetChildDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount; - return { totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount }; - }); - } - calculateAlarmsCount(device) { - let minorAlerts = 0; - let majorAlerts = 0; - let criticalAlerts = 0; - const activeAlerts = device.c8y_ActiveAlarmsStatus; - if (activeAlerts !== undefined) { - if (activeAlerts.hasOwnProperty('minor')) { - if (activeAlerts.minor > 0) { - minorAlerts += device.c8y_ActiveAlarmsStatus.minor; - } - } - if (activeAlerts.hasOwnProperty('major')) { - if (activeAlerts.major > 0) { - majorAlerts += device.c8y_ActiveAlarmsStatus.major; - } - } - if (activeAlerts.hasOwnProperty('critical')) { - if (activeAlerts.critical > 0) { - criticalAlerts += device.c8y_ActiveAlarmsStatus.critical; - } - } - } - return { minorAlerts, majorAlerts, criticalAlerts }; - } - getNewKPICount(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let newKPICount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPICount = 1; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPICount = 0; - } - return newKPICount; - }); - } - getNewKPIValue(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let response = null; - let newKPIValue; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPIValue = response[newKPI]; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPIValue = ''; - } - return newKPIValue; - }); - } -} -GpKpiOverviewWidgetService.decorators = [ - { type: Injectable } -]; -GpKpiOverviewWidgetService.ctorParameters = () => [ - { type: InventoryService } -]; - -class GpKpiOverviewWidgetComponent { - constructor(kpiService) { - this.kpiService = kpiService; - this.device = { - id: '' - }; - this.kpi = { - title: '', - topMargin: '', - icon: '', - value: 0, - unit: '', - color: '', - bgcolor: '', - unitColor: '', - titleColor: '', - messageColor: '', - otherKPIName: '', - otherKPIMetric: '', - kpiName: '', - message: '', - titleSize: 20, - messageSize: 10, - kpiSize: 30, - unitSize: 20, - imageSize: 60, - containerHeight: 80, - default: { - color: '', - bgcolor: '' - } - }; - } - ngOnInit() { - // Get Device Id - this.device.id = get(this.config, 'device.id'); - if (this.device.id === undefined || this.device.id.length === 0) { - } - // Get KPI Title - this.kpi.title = get(this.config, 'customwidgetdata.metadata.title'); - if (this.kpi.title === undefined || this.kpi.title.length === 0) { - this.kpi.title = 'Default Title'; - } - // Get KPI Name - this.kpi.kpiName = get(this.config, 'customwidgetdata.kpi.kpiName'); - if (this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) { - this.kpi.kpiName = 'totalDevices'; - } - // Get KPI Icon - this.kpi.icon = get(this.config, 'customwidgetdata.metadata.icon'); - if (this.kpi.icon === undefined || this.kpi.icon.length === 0) { - this.kpi.icon = 'data:image/png;base64,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'; - } - // Get KPI Message - this.kpi.message = get(this.config, 'customwidgetdata.kpi.message'); - if (this.kpi.message === undefined || this.kpi.message.length === 0) { - this.kpi.message = ''; - } - // Get KPI Color - this.kpi.default.color = get(this.config, 'customwidgetdata.kpi.color'); - if (this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) { - this.kpi.default.color = '#b0b0b0'; - } - this.kpi.color = this.kpi.default.color; - // Get Bg KPI Color - this.kpi.default.bgcolor = get(this.config, 'customwidgetdata.kpi.bgcolor'); - if (this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) { - this.kpi.default.bgcolor = '#FFFFFF'; - } - this.kpi.bgcolor = this.kpi.default.bgcolor; - // Get Title Color - this.kpi.titleColor = get(this.config, 'customwidgetdata.kpi.titleColor'); - if (this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) { - this.kpi.titleColor = '#b0b0b0'; - } - // Get Unit Color - this.kpi.unitColor = get(this.config, 'customwidgetdata.kpi.unitColor'); - if (this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) { - this.kpi.unitColor = '#b0b0b0'; - } - // Get message Color - this.kpi.messageColor = get(this.config, 'customwidgetdata.kpi.messageColor'); - if (this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) { - this.kpi.messageColor = '#808080'; - } - // Get KPI Unit - this.kpi.unit = get(this.config, 'customwidgetdata.kpi.unit'); - this.kpi.titleSize = get(this.config, 'customwidgetdata.kpi.titleSize'); - this.kpi.kpiSize = get(this.config, 'customwidgetdata.kpi.kpiSize'); - this.kpi.unitSize = get(this.config, 'customwidgetdata.kpi.unitSize'); - this.kpi.messageSize = get(this.config, 'customwidgetdata.kpi.messageSize'); - this.kpi.imageSize = get(this.config, 'customwidgetdata.kpi.imageSize'); - this.kpi.value = null; - this.getDeviceData(); - } - ngAfterViewInit() { - this.configureTopMarginRequired(); - } - // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not. - configureTopMarginRequired() { - const allWidgets = document.querySelectorAll('.dashboard-grid-child'); - allWidgets.forEach((w) => { - const widgetElement = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget'); - if (widgetElement !== undefined && widgetElement !== null) { - const widgetTitleElement = w.querySelector('div > div > div > c8y-dashboard-child-title'); - const widgetTitleDisplayValue = window.getComputedStyle(widgetTitleElement).getPropertyValue('display'); - if (widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') { - this.kpi.topMargin = '25px'; - } - else { - this.kpi.topMargin = '0'; - } - } - }); - } - getDeviceData() { - return __awaiter(this, void 0, void 0, function* () { - if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') { - if (this.kpi.kpiName === 'totalDevices') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.totalDevices; - } - } - else if (this.kpi.kpiName === 'available') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.availableDevices; - } - } - else if (this.kpi.kpiName === 'unavailable') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.unavailableDevices; - } - } - else if (this.kpi.kpiName === 'totalAlarms') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.totalAlarms; - } - } - else if (this.kpi.kpiName === 'major') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.majorAlertsCount; - } - } - else if (this.kpi.kpiName === 'minor') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.minorAlertsCount; - } - } - else if (this.kpi.kpiName === 'critical') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.criticalAlertsCount; - } - } - else if (this.kpi.kpiName === 'highRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.highRiskCount; - } - } - else if (this.kpi.kpiName === 'mediumRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.mediumRiskCount; - } - } - else if (this.kpi.kpiName === 'lowRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.lowRiskCount; - } - } - else if (this.kpi.kpiName === 'noRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.noRiskCount; - } - } - else if (this.kpi.kpiName === 'other') { - if (this.kpi.otherKPIMetric === 'value') { - const result = yield this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - else if (this.kpi.otherKPIMetric === 'count') { - const result = yield this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - } - else { - this.kpi.value = 0; - } - } - }); - } - // Getter KPI Title - getKPITitle() { - return this.kpi.title; - } - // Getter KPI Title Top Margin - getKPITitleTopMargin() { - return this.kpi.topMargin; - } - // Getter KPI Icon - getKPIIcon() { - return this.kpi.icon; - } - // Get KPI Container Height - getKPIContainerHeight() { - return '90px'; - } - // Getter KPI Value - getKPIValue() { - return this.kpi.value; - } - // Getter KPI Unit - getKPIUnit() { - return this.kpi.unit; - } - // Getter KPI Name - getKPIName() { - return this.kpi.kpiName; - } - // Getter KPI Color - getKPIColor() { - return this.kpi.color; - } - // Getter Title Color - getTitleColor() { - return this.kpi.titleColor; - } - // Getter Unit Color - getUnitColor() { - return this.kpi.unitColor; - } - // Getter Message Color - getMessageColor() { - return this.kpi.messageColor; - } - // Getter KPI background Color - getKPIBgColor() { - return this.kpi.bgcolor; - } - // Getter Other KPI Name - getOtherKPIName() { - return this.kpi.otherKPIName; - } - // Getter Other KPI metric - getOtherKPIMetric() { - return this.kpi.otherKPIMetric; - } - // Getter Other KPI Message - getKPIMessage() { - return this.kpi.message; - } - getKPISize() { - return this.kpi.kpiSize + 'px'; - } - getTitleSize() { - return this.kpi.titleSize + 'px'; - } - getMessageSize() { - return this.kpi.messageSize + 'px'; - } - getUnitSize() { - return this.kpi.unitSize + 'px'; - } - getImageSize() { - return this.kpi.imageSize + 'px'; - } - getContainerHeight() { - if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.imageSize + 10; - } - else if (this.kpi.titleSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.titleSize + 10; - } - else { - this.kpi.containerHeight = this.kpi.kpiSize + 10; - } - return this.kpi.containerHeight + 'px'; - } -} -GpKpiOverviewWidgetComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget', - template: "
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n

{{getKPITitle()}}

\r\n \r\n \r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n" - },] } -]; -GpKpiOverviewWidgetComponent.ctorParameters = () => [ - { type: GpKpiOverviewWidgetService } -]; -GpKpiOverviewWidgetComponent.propDecorators = { - config: [{ type: Input }] -}; - -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -// tslint:disable-next-line: max-line-length -const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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'; - -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ -class GpKpiOverviewWidgetConfigComponent { - constructor() { - this.config = {}; - this.kpiColorPickerClosed = true; - this.kpiBgColorPickerClosed = true; - this.titleColorPickerClosed = true; - this.kpiUnitColorPickerClosed = true; - this.messageColorPickerClosed = true; - this.widgetInfo = { - metadata: { - title: '', - icon: '', - }, - kpi: { - color: '#b0b0b0', - unit: '', - bgcolor: '#FFFFFF', - kpiName: '', - message: '', - otherKPIValue: '', - otherKPIName: '', - titleColor: '#808080', - unitColor: '#b0b0b0', - messageColor: '#808080', - titleSize: 20, - messageSize: 10, - unitSize: 20, - kpiSize: 30, - imageSize: 60, - } - }; - this.kpiNamesList = [ - { - id: 'totalDevices', - text: 'Total Devices' - }, - { - id: 'available', - text: 'Available Devices' - }, - { - id: 'unavailable', - text: 'Unavailable Devices' - }, - { - id: 'totalAlarms', - text: 'Total Alarms' - }, - { - id: 'major', - text: 'Major Alarms' - }, - { - id: 'minor', - text: 'Minor Alarms' - }, - { - id: 'critical', - text: 'Critical Alarms' - }, - { - id: 'highRisk', - text: 'High Risk' - }, - { - id: 'mediumRisk', - text: 'Medium Risk' - }, - { - id: 'lowRisk', - text: 'Low Risk' - }, - { - id: 'noRisk', - text: 'No Risk' - }, - { - id: 'other', - text: 'Other Property' - } - ]; - } - ngOnInit() { - return __awaiter(this, void 0, void 0, function* () { - // Editing an existing widget - if (has(this.config, 'customwidgetdata')) { - this.widgetInfo = get(this.config, 'customwidgetdata'); - } - else { // Adding a new widget - set(this.config, 'customwidgetdata', this.widgetInfo); - } - }); - } - updateIconInConfig($event) { - const kpiIcon = $event.target.files[0]; - const reader = new FileReader(); - reader.readAsDataURL(kpiIcon); - reader.onload = () => { - this.widgetInfo.metadata.icon = reader.result; - set(this.config, 'customwidgetdata', this.widgetInfo); - }; - } - updateConfig() { - set(this.config, 'customwidgetdata', this.widgetInfo); - } - setSelectedColorForKPI(value) { - this.widgetInfo.kpi.color = value; - this.updateConfig(); - } - closeKPIColorPicker() { - this.kpiColorPickerClosed = true; - } - openKPIColorPicker() { - this.kpiColorPickerClosed = false; - } - setSelectedColorForTitle(value) { - this.widgetInfo.kpi.titleColor = value; - this.updateConfig(); - } - closeTitleColorPicker() { - this.titleColorPickerClosed = true; - } - openTitleColorPicker() { - this.titleColorPickerClosed = false; - } - setSelectedColorForKPIUnit(value) { - this.widgetInfo.kpi.unitColor = value; - this.updateConfig(); - } - closeKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = true; - } - openKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = false; - } - setSelectedColorForMessage(value) { - this.widgetInfo.kpi.messageColor = value; - this.updateConfig(); - } - closeMessageColorPicker() { - this.messageColorPickerClosed = true; - } - openMessageColorPicker() { - this.messageColorPickerClosed = false; - } - closeKPIBgColorPicker() { - this.kpiBgColorPickerClosed = true; - } - openKPIBgColorPicker() { - this.kpiBgColorPickerClosed = false; - } - setSelectedColorForBackground(value) { - this.widgetInfo.kpi.bgcolor = value; - this.updateConfig(); - } -} -GpKpiOverviewWidgetConfigComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget-config', - template: "\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
", - styles: [".showColorPicker{display:block}.hideColorPicker{display:none}"] - },] } -]; -GpKpiOverviewWidgetConfigComponent.ctorParameters = () => []; -GpKpiOverviewWidgetConfigComponent.propDecorators = { - config: [{ type: Input }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorPickerComponent { - constructor(eRef) { - this.eRef = eRef; - this.colorSet = new EventEmitter(true); - this.colorPickerClosed = new EventEmitter(); - this.colorType = 'hexa'; - } - closeColorPicker() { - this.colorPickerClosed.emit(true); - } - applyColorClicked() { - if (this.color !== undefined) { - if (this.colorType === 'hexa') { - this.colorSet.emit(this.RGBAToHexA(this.color)); - } - else { - this.colorSet.emit(this.color); - } - } - } - RGBAToHexA(rgba) { - const sep = rgba.indexOf(',') > -1 ? ',' : ' '; - rgba = rgba.substr(5).split(')')[0].split(sep); - // Strip the slash if using space-separated syntax - if (rgba.indexOf('/') > -1) { - rgba.splice(3, 1); - } - let r = (+rgba[0]).toString(16); - let g = (+rgba[1]).toString(16); - let b = (+rgba[2]).toString(16); - let a = Math.round(+rgba[3] * 255).toString(16); - if (r.length === 1) { - r = '0' + r; - } - if (g.length === 1) { - g = '0' + g; - } - if (b.length === 1) { - b = '0' + b; - } - if (a.length === 1) { - a = '0' + a; - } - return '#' + r + g + b + a; - } -} -ColorPickerComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-picker', - template: "\n
\n \n \n
\n \n \n
\n
\n \n\n\n ", - styles: [".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"] - },] } -]; -ColorPickerComponent.ctorParameters = () => [ - { type: ElementRef } -]; -ColorPickerComponent.propDecorators = { - colorSet: [{ type: Output }], - colorPickerClosed: [{ type: Output }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorSliderComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - // tslint:disable-next-line: use-lifecycle-interface - ngAfterViewInit() { - this.draw(); - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - onMouseUp(evt) { - this.mousedown = false; - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.clearRect(0, 0, width, height); - const gradient = this.ctx.createLinearGradient(0, 0, 0, height); - gradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); - gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)'); - gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)'); - gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)'); - gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)'); - gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)'); - gradient.addColorStop(1, 'rgba(255, 0, 0, 1)'); - this.ctx.beginPath(); - this.ctx.rect(0, 0, width, height); - this.ctx.fillStyle = gradient; - this.ctx.fill(); - this.ctx.closePath(); - if (this.selectedHeight) { - this.ctx.beginPath(); - this.ctx.strokeStyle = 'white'; - this.ctx.lineWidth = 5; - this.ctx.rect(0, this.selectedHeight - 5, width, 10); - this.ctx.stroke(); - this.ctx.closePath(); - } - } -} -ColorSliderComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-slider', - template: " " - },] } -]; -ColorSliderComponent.propDecorators = { - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorPaletteComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - ngAfterViewInit() { - this.draw(); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)'; - this.ctx.fillRect(0, 0, width, height); - const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0); - whiteGrad.addColorStop(0, 'rgba(255,255,255,1)'); - whiteGrad.addColorStop(1, 'rgba(255,255,255,0)'); - this.ctx.fillStyle = whiteGrad; - this.ctx.fillRect(0, 0, width, height); - const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height); - blackGrad.addColorStop(0, 'rgba(0,0,0,0)'); - blackGrad.addColorStop(1, 'rgba(0,0,0,1)'); - this.ctx.fillStyle = blackGrad; - this.ctx.fillRect(0, 0, width, height); - if (this.selectedPosition) { - this.ctx.strokeStyle = 'white'; - this.ctx.fillStyle = 'white'; - this.ctx.beginPath(); - this.ctx.arc(this.selectedPosition.x, this.selectedPosition.y, 10, 0, 2 * Math.PI); - this.ctx.lineWidth = 5; - this.ctx.stroke(); - } - } - ngOnChanges(changes) { - // tslint:disable-next-line: no-string-literal - if (changes['hue']) { - this.draw(); - const pos = this.selectedPosition; - if (pos) { - this.color.emit(this.getColorAtPosition(pos.x, pos.y)); - } - } - } - onMouseUp(evt) { - this.mousedown = false; - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY)); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } -} -ColorPaletteComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-palette', - template: "\n", - styles: [".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"] - },] } -]; -ColorPaletteComponent.propDecorators = { - hue: [{ type: Input }], - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const ɵ0 = { - id: 'kpi-overview.widget', - label: 'KPI Overview', - previewImage: previewImage, - description: 'KPI Overview', - component: GpKpiOverviewWidgetComponent, - configComponent: GpKpiOverviewWidgetConfigComponent, - data: { - ng1: { - options: { - noDeviceTarget: false, - noNewWidgets: false, - deviceTargetNotRequired: false, - groupsSelectable: true - } - } - } -}; -class GpKpiOverviewWidgetModule { -} -GpKpiOverviewWidgetModule.decorators = [ - { type: NgModule, args: [{ - declarations: [ - GpKpiOverviewWidgetComponent, - GpKpiOverviewWidgetConfigComponent, - ColorPickerComponent, - ColorSliderComponent, - ColorPaletteComponent - ], - imports: [ - NgSelectModule, - FormsModule, - CommonModule, - CoreModule - ], - exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - providers: [ - GpKpiOverviewWidgetService, - { - provide: HOOK_COMPONENTS, - multi: true, - useValue: ɵ0 - } - ], - },] } -]; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Generated bundle index. Do not edit. - */ - -export { GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetModule, GpKpiOverviewWidgetService, ɵ0, GpKpiOverviewWidgetConfigComponent as ɵa, ColorPickerComponent as ɵb, ColorSliderComponent as ɵc, ColorPaletteComponent as ɵd, previewImage as ɵe }; -//# sourceMappingURL=custom-widget.js.map diff --git a/runtime/dist/bundle-src/custom-widget.js.map b/runtime/dist/bundle-src/custom-widget.js.map deleted file mode 100644 index b461953..0000000 --- a/runtime/dist/bundle-src/custom-widget.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"custom-widget.js","sources":["../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.service.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/preview-image.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-picker-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-slider/color-slider-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-palette/color-palette-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.module.ts","../../../../projects/gp-kpi-overview-widget/src/public-api.ts","../../../../projects/gp-kpi-overview-widget/src/custom-widget.ts"],"sourcesContent":["/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ThrowStmt } from '@angular/compiler';\nimport { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\n\n\n@Injectable()\nexport class GpKpiOverviewWidgetService {\n latestFirmwareVersion: any;\n\n\n constructor(public inventory: InventoryService) {\n }\n\n async getDevicesAvailability(deviceId){\n let totalDevices = 0;\n let availableDevices = 0;\n let unavailableDevices = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n totalDevices = 1;\n\n if (response.childDevices.references.length > 0) {\n\n let available = false;\n const promises = response.childDevices.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n\n if (childDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n });\n if(available){\n if (response.hasOwnProperty('c8y_Availability')) {\n if (response.c8y_Availability.status === 'AVAILABLE') {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }else{\n availableDevices = 1;\n }\n }\n else{\n unavailableDevices = 1;\n }\n await Promise.all(promises);\n } else {\n if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }\n }\n else {\n if (response.childAssets.references.length > 0) {\n const promises = response.childAssets.references.map(async (childDevice) => {\n const ChildInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = ChildInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_Availability')) {\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n availableDevices += 1;\n }\n else{\n unavailableDevices += 1;\n }\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n let available = false;\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n else{\n available = false;\n }\n });\n await Promise.all(promises1);\n }\n if (available) {\n availableDevices += 1;\n }else{\n unavailableDevices += 1;\n }\n }\n });\n await Promise.all(promises);\n }\n totalDevices = inventory.data.childAssets.references.length;\n }\n return {totalDevices, availableDevices, unavailableDevices};\n }\n\n async getFirmwareRisks(deviceId){\n let highRiskCount = 0;\n let mediumRiskCount = 0;\n let lowRiskCount = 0;\n let noRiskCount = 0;\n const firmwareData = await this.inventory.list({ type: 'sag_racm_currentFirmware' });\n if (firmwareData.data.length > 0) {\n this.latestFirmwareVersion = firmwareData.data[0].firmware.version;\n }\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk;\n }\n else if(response.childAssets.references.length > 0){\n\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n return {highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount};\n }\n\n calculateRiskCount(device){\n let atRisk = false;\n let noRisk = 0;\n let lowRisk = 0;\n let mediumRisk = 0;\n let highRisk = 0;\n\n if (device) {\n const firmwareStatus = device.c8y_Firmware;\n let versionIssues = 0;\n if (firmwareStatus && firmwareStatus.version) {\n versionIssues = firmwareStatus.version - this.latestFirmwareVersion;\n }\n if (versionIssues <= 0) {\n atRisk = true; }\n if ( atRisk) {\n if (atRisk) {\n if (versionIssues >= 0) {\n noRisk += 1;\n } else if (versionIssues === -1) {\n lowRisk += 1;\n } else if (versionIssues === -2) {\n mediumRisk += 1;\n } else if (versionIssues <= -3) {\n highRisk += 1;\n }\n }\n }\n }\n return {noRisk, lowRisk, mediumRisk, highRisk}\n }\n async getAlarms(deviceId){\n let totalAlarms = 0;\n let majorAlertsCount = 0;\n let minorAlertsCount = 0;\n let criticalAlertsCount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(response);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(childDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(assetChildDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount;\n return {totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount};\n }\n\n\n calculateAlarmsCount(device){\n let minorAlerts = 0;\n let majorAlerts = 0;\n let criticalAlerts = 0;\n const activeAlerts = device.c8y_ActiveAlarmsStatus;\n if (activeAlerts !== undefined) {\n if (activeAlerts.hasOwnProperty('minor')) {\n if (activeAlerts.minor > 0) { minorAlerts += device.c8y_ActiveAlarmsStatus.minor; }\n }\n if (activeAlerts.hasOwnProperty('major')) {\n if (activeAlerts.major > 0) { majorAlerts += device.c8y_ActiveAlarmsStatus.major }\n }\n if (activeAlerts.hasOwnProperty('critical')) {\n if (activeAlerts.critical > 0) { criticalAlerts += device.c8y_ActiveAlarmsStatus.critical }\n }\n }\n return {minorAlerts, majorAlerts, criticalAlerts}\n }\n\n async getNewKPICount(deviceId, newKPI){\n let newKPICount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPICount = 1;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPICount = 0;\n }\n return newKPICount;\n }\n\n async getNewKPIValue(deviceId, newKPI){\n let response: any = null;\n let newKPIValue;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPIValue = response[newKPI];\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPIValue = '';\n }\n return newKPIValue;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport * as _ from 'lodash';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\n\n\ninterface Device {\n id: string;\n}\n\ninterface KPI {\n default: {\n color: string;\n bgcolor: string\n }\n title: string;\n icon: string;\n topMargin: string;\n color: string;\n bgcolor: string;\n unitColor: string;\n titleColor: string;\n messageColor: string;\n value: any;\n unit: string;\n message: string;\n kpiName: string;\n otherKPIName: string;\n otherKPIMetric: string;\n titleSize: number;\n messageSize: number;\n kpiSize: number;\n unitSize: number;\n imageSize: number;\n containerHeight: number;\n}\n\n@Component({\n selector: 'lib-gp-kpi-overview-widget',\n templateUrl: './gp-kpi-overview-widget.html',\n styles: []\n})\nexport class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit{\n\n @Input() config;\n\n private device: Device = {\n id: ''\n }\n\n private kpi: KPI = {\n title: '',\n topMargin: '',\n icon: '',\n value: 0,\n unit: '',\n color: '',\n bgcolor: '',\n unitColor: '',\n titleColor: '',\n messageColor: '',\n otherKPIName: '',\n otherKPIMetric: '',\n kpiName: '',\n message: '',\n titleSize: 20,\n messageSize: 10,\n kpiSize: 30,\n unitSize: 20,\n imageSize: 60,\n containerHeight: 80,\n default: {\n color: '',\n bgcolor: ''\n }\n }\n\n constructor(private kpiService: GpKpiOverviewWidgetService) { }\n\n ngOnInit() {\n\n // Get Device Id\n this.device.id = _.get(this.config, 'device.id');\n if(this.device.id === undefined || this.device.id.length === 0) {\n }\n // Get KPI Title\n this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title');\n if(this.kpi.title === undefined || this.kpi.title.length === 0) {\n this.kpi.title = 'Default Title';\n }\n // Get KPI Name\n this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName');\n if(this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) {\n this.kpi.kpiName = 'totalDevices';\n }\n // Get KPI Icon\n this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon');\n if(this.kpi.icon === undefined || this.kpi.icon.length === 0) {\n this.kpi.icon = 'data:image/png;base64,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';\n }\n // Get KPI Message\n this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message');\n if(this.kpi.message === undefined || this.kpi.message.length === 0) {\n this.kpi.message = '';\n }\n // Get KPI Color\n this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color');\n if(this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) {\n this.kpi.default.color = '#b0b0b0';\n }\n this.kpi.color = this.kpi.default.color;\n // Get Bg KPI Color\n this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor');\n if(this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) {\n this.kpi.default.bgcolor = '#FFFFFF';\n }\n this.kpi.bgcolor = this.kpi.default.bgcolor;\n\n // Get Title Color\n this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor');\n if(this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) {\n this.kpi.titleColor = '#b0b0b0';\n }\n\n // Get Unit Color\n this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor');\n if(this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) {\n this.kpi.unitColor = '#b0b0b0';\n }\n\n // Get message Color\n this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor');\n if(this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) {\n this.kpi.messageColor = '#808080';\n }\n // Get KPI Unit\n this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit');\n this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize');\n this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize');\n this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize');\n this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize');\n this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize');\n this.kpi.value = null;\n this.getDeviceData();\n }\n\n ngAfterViewInit() {\n this.configureTopMarginRequired();\n }\n\n // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not.\n private configureTopMarginRequired(): void {\n const allWidgets: NodeListOf = document.querySelectorAll('.dashboard-grid-child');\n allWidgets.forEach((w:Element) => {\n const widgetElement: Element = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget');\n if(widgetElement !== undefined && widgetElement !== null) {\n const widgetTitleElement: Element = w.querySelector('div > div > div > c8y-dashboard-child-title');\n const widgetTitleDisplayValue: string = window.getComputedStyle(widgetTitleElement).getPropertyValue('display');\n if(widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') {\n this.kpi.topMargin = '25px';\n } else {\n this.kpi.topMargin = '0';\n }\n }\n });\n }\n async getDeviceData() {\n if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') {\n\n if (this.kpi.kpiName === 'totalDevices'){\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.totalDevices;\n }\n }\n else if (this.kpi.kpiName === 'available') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.availableDevices;\n }\n }\n else if (this.kpi.kpiName === 'unavailable') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.unavailableDevices;\n }\n }\n else if (this.kpi.kpiName === 'totalAlarms') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.totalAlarms;\n }\n }\n else if (this.kpi.kpiName === 'major') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.majorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'minor') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.minorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'critical') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.criticalAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'highRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.highRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'mediumRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.mediumRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'lowRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.lowRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'noRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.noRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'other') {\n\n if (this.kpi.otherKPIMetric === 'value') {\n const result = await this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n else if(this.kpi.otherKPIMetric === 'count') {\n const result = await this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n }\n else{\n this.kpi.value = 0;\n }\n }\n }\n // Getter KPI Title\n public getKPITitle(): string {\n return this.kpi.title;\n }\n // Getter KPI Title Top Margin\n public getKPITitleTopMargin() {\n return this.kpi.topMargin;\n }\n // Getter KPI Icon\n public getKPIIcon(): string {\n return this.kpi.icon;\n }\n // Get KPI Container Height\n public getKPIContainerHeight(): string {\n return '90px';\n }\n // Getter KPI Value\n public getKPIValue() {\n return this.kpi.value;\n }\n // Getter KPI Unit\n public getKPIUnit() {\n return this.kpi.unit;\n }\n // Getter KPI Name\n public getKPIName() {\n return this.kpi.kpiName;\n }\n // Getter KPI Color\n public getKPIColor() {\n return this.kpi.color;\n }\n // Getter Title Color\n public getTitleColor() {\n return this.kpi.titleColor;\n }\n // Getter Unit Color\n public getUnitColor() {\n return this.kpi.unitColor;\n }\n // Getter Message Color\n public getMessageColor() {\n return this.kpi.messageColor;\n }\n // Getter KPI background Color\n public getKPIBgColor() {\n return this.kpi.bgcolor;\n }\n // Getter Other KPI Name\n public getOtherKPIName() {\n return this.kpi.otherKPIName;\n }\n // Getter Other KPI metric\n public getOtherKPIMetric() {\n return this.kpi.otherKPIMetric;\n }\n // Getter Other KPI Message\n public getKPIMessage() {\n return this.kpi.message;\n }\n public getKPISize() {\n return this.kpi.kpiSize + 'px';\n }\n public getTitleSize() {\n return this.kpi.titleSize + 'px';\n }\n public getMessageSize() {\n return this.kpi.messageSize + 'px';\n }\n public getUnitSize() {\n return this.kpi.unitSize + 'px';\n }\n public getImageSize() {\n return this.kpi.imageSize + 'px';\n }\n\n public getContainerHeight(){\n if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) {\n this.kpi.containerHeight = this.kpi.imageSize + 10;\n } else if(this.kpi.titleSize > this.kpi.kpiSize){\n this.kpi.containerHeight = this.kpi.titleSize + 10;\n }else{\n this.kpi.containerHeight = this.kpi.kpiSize + 10;\n }\n return this.kpi.containerHeight + 'px';\n }\n}\n","/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n*/\r\n\r\n\r\n// tslint:disable-next-line: max-line-length\r\nexport const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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';\r\n","\r\n\r\n/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n */\r\n\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'lib-gp-kpi-overview-widget-config',\r\n templateUrl: './gp-kpi-overview-widget-config.html',\r\n styleUrls: ['./gp-kpi-overview-widget-config.css']\r\n})\r\nexport class GpKpiOverviewWidgetConfigComponent implements OnInit {\r\n @Input() config: any = {};\r\n kpiColorPickerClosed = true;\r\n kpiBgColorPickerClosed = true;\r\n titleColorPickerClosed = true;\r\n kpiUnitColorPickerClosed = true;\r\n messageColorPickerClosed = true;\r\n\r\n\r\n\r\n widgetInfo = {\r\n metadata: {\r\n title: '',\r\n icon: '',\r\n },\r\n kpi: {\r\n color: '#b0b0b0',\r\n unit: '',\r\n bgcolor: '#FFFFFF',\r\n kpiName: '',\r\n message: '',\r\n otherKPIValue: '',\r\n otherKPIName: '',\r\n titleColor: '#808080',\r\n unitColor: '#b0b0b0',\r\n messageColor: '#808080',\r\n titleSize: 20,\r\n messageSize: 10,\r\n unitSize: 20,\r\n kpiSize: 30,\r\n imageSize: 60,\r\n\r\n }\r\n}\r\nkpiNamesList = [\r\n {\r\n id: 'totalDevices',\r\n text: 'Total Devices'\r\n },\r\n {\r\n id: 'available',\r\n text: 'Available Devices'\r\n },\r\n {\r\n id: 'unavailable',\r\n text: 'Unavailable Devices'\r\n },\r\n {\r\n id: 'totalAlarms',\r\n text: 'Total Alarms'\r\n },\r\n {\r\n id: 'major',\r\n text: 'Major Alarms'\r\n },\r\n {\r\n id: 'minor',\r\n text: 'Minor Alarms'\r\n },\r\n {\r\n id: 'critical',\r\n text: 'Critical Alarms'\r\n },\r\n {\r\n id: 'highRisk',\r\n text: 'High Risk'\r\n }\r\n ,\r\n {\r\n id: 'mediumRisk',\r\n text: 'Medium Risk'\r\n },\r\n {\r\n id: 'lowRisk',\r\n text: 'Low Risk'\r\n },\r\n {\r\n id: 'noRisk',\r\n text: 'No Risk'\r\n },\r\n {\r\n id: 'other',\r\n text: 'Other Property'\r\n }\r\n\r\n ];\r\n constructor() {}\r\n\r\n async ngOnInit() {\r\n // Editing an existing widget\r\n if(_.has(this.config, 'customwidgetdata')) {\r\n this.widgetInfo = _.get(this.config, 'customwidgetdata');\r\n } else { // Adding a new widget\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n }\r\n\r\n public updateIconInConfig($event: Event) {\r\n const kpiIcon = ($event.target as HTMLInputElement).files[0];\r\n const reader = new FileReader();\r\n reader.readAsDataURL(kpiIcon);\r\n reader.onload = () => {\r\n this.widgetInfo.metadata.icon = reader.result as string;\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n };\r\n }\r\n\r\n public updateConfig() {\r\n\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n\r\n\r\n setSelectedColorForKPI(value: string) {\r\n this.widgetInfo.kpi.color = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIColorPicker() {\r\n this.kpiColorPickerClosed = true;\r\n }\r\n\r\n openKPIColorPicker() {\r\n this.kpiColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForTitle(value: string) {\r\n this.widgetInfo.kpi.titleColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeTitleColorPicker() {\r\n this.titleColorPickerClosed = true;\r\n }\r\n\r\n openTitleColorPicker() {\r\n this.titleColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForKPIUnit(value: string) {\r\n this.widgetInfo.kpi.unitColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = true;\r\n }\r\n\r\n openKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForMessage(value: string) {\r\n this.widgetInfo.kpi.messageColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeMessageColorPicker() {\r\n this.messageColorPickerClosed = true;\r\n }\r\n\r\n openMessageColorPicker() {\r\n this.messageColorPickerClosed = false;\r\n }\r\n\r\n\r\n closeKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = true;\r\n }\r\n\r\n openKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForBackground(value: string) {\r\n this.widgetInfo.kpi.bgcolor = value;\r\n this.updateConfig();\r\n }\r\n\r\n}","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-picker',\n templateUrl: './color-picker-component.html',\n styleUrls: ['./color-picker-component.css'],\n})\nexport class ColorPickerComponent {\n @Output() colorSet: EventEmitter = new EventEmitter(true);\n @Output() colorPickerClosed: EventEmitter = new EventEmitter();\n\n public hue: string;\n public color: string;\n public colorType: any = 'hexa';\n constructor(private eRef: ElementRef) {}\n\n closeColorPicker(): void {\n this.colorPickerClosed.emit(true);\n }\n applyColorClicked(): void {\n if (this.color !== undefined) {\n if (this.colorType === 'hexa') {\n this.colorSet.emit(this.RGBAToHexA(this.color));\n } else {\n this.colorSet.emit(this.color);\n }\n }\n }\n\n RGBAToHexA(rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = '0' + r; }\n if (g.length === 1) { g = '0' + g; }\n if (b.length === 1) { b = '0' + b; }\n if (a.length === 1) { a = '0' + a; }\n\n return '#' + r + g + b + a;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-slider',\n templateUrl: './color-slider-component.html',\n})\nexport class ColorSliderComponent {\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n private mousedown = false;\n private selectedHeight: number;\n\n // tslint:disable-next-line: use-lifecycle-interface\n ngAfterViewInit() {\n this.draw();\n }\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n this.ctx.clearRect(0, 0, width, height);\n\n const gradient = this.ctx.createLinearGradient(0, 0, 0, height);\n gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');\n gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\n gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\n gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\n gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\n gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\n gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');\n\n this.ctx.beginPath();\n this.ctx.rect(0, 0, width, height);\n this.ctx.fillStyle = gradient;\n this.ctx.fill();\n this.ctx.closePath();\n\n if (this.selectedHeight) {\n this.ctx.beginPath();\n this.ctx.strokeStyle = 'white';\n this.ctx.lineWidth = 5;\n this.ctx.rect(0, this.selectedHeight - 5, width, 10);\n this.ctx.stroke();\n this.ctx.closePath();\n }\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ViewChild,\n ElementRef,\n AfterViewInit,\n Input,\n Output,\n SimpleChanges,\n OnChanges,\n EventEmitter,\n HostListener,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-palette',\n templateUrl: './color-palette-component.html',\n styleUrls: ['./color-palette-component.css'],\n})\nexport class ColorPaletteComponent implements AfterViewInit, OnChanges {\n @Input()\n hue: string;\n\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n\n private mousedown = false;\n\n public selectedPosition: { x: number; y: number };\n\n ngAfterViewInit() {\n this.draw();\n }\n\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n\n this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)';\n this.ctx.fillRect(0, 0, width, height);\n\n const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n this.ctx.fillStyle = whiteGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n this.ctx.fillStyle = blackGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n if (this.selectedPosition) {\n this.ctx.strokeStyle = 'white';\n this.ctx.fillStyle = 'white';\n this.ctx.beginPath();\n this.ctx.arc(\n this.selectedPosition.x,\n this.selectedPosition.y,\n 10,\n 0,\n 2 * Math.PI\n );\n this.ctx.lineWidth = 5;\n this.ctx.stroke();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // tslint:disable-next-line: no-string-literal\n if (changes['hue']) {\n this.draw();\n const pos = this.selectedPosition;\n if (pos) {\n this.color.emit(this.getColorAtPosition(pos.x, pos.y));\n }\n }\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY));\n }\n\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components';\nimport { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component';\nimport * as preview from './preview-image';\nimport { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { ColorPickerComponent } from './color-picker/color-picker-component';\nimport { ColorSliderComponent } from './color-picker/color-slider/color-slider-component';\nimport { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component';\n@NgModule({\n declarations: [\n GpKpiOverviewWidgetComponent,\n GpKpiOverviewWidgetConfigComponent,\n ColorPickerComponent,\n ColorSliderComponent,\n ColorPaletteComponent\n ],\n imports: [\n NgSelectModule,\n FormsModule,\n CommonModule,\n CoreModule\n ],\n exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n\n providers: [\n GpKpiOverviewWidgetService,\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: {\n id: 'kpi-overview.widget',\n label: 'KPI Overview',\n previewImage: preview.previewImage,\n description: 'KPI Overview',\n component: GpKpiOverviewWidgetComponent,\n configComponent: GpKpiOverviewWidgetConfigComponent,\n data: {\n ng1: {\n options: {\n noDeviceTarget: false,\n noNewWidgets: false,\n deviceTargetNotRequired: false,\n groupsSelectable: true\n }\n }\n }\n }\n }],\n})\nexport class GpKpiOverviewWidgetModule { }\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Public API Surface of gp-kpi-overview-widget\n */\n\nexport * from './lib/gp-kpi-overview-widget.service';\nexport * from './lib/gp-kpi-overview-widget.component';\nexport * from './lib/gp-kpi-overview-widget.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {ColorPaletteComponent as ɵd} from './lib/color-picker/color-palette/color-palette-component';\nexport {ColorPickerComponent as ɵb} from './lib/color-picker/color-picker-component';\nexport {ColorSliderComponent as ɵc} from './lib/color-picker/color-slider/color-slider-component';\nexport {GpKpiOverviewWidgetConfigComponent as ɵa} from './lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nexport {previewImage as ɵe} from './lib/preview-image';"],"names":["_.get","_.has","_.set","preview.previewImage"],"mappings":"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"} \ No newline at end of file diff --git a/runtime/dist/kpi-overview-runtime-widget-2.0.0.zip b/runtime/dist/kpi-overview-runtime-widget-2.0.0.zip deleted file mode 100644 index 53bc4bb586f1471817088a7e00e5655ee122528f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340568 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%0AqPVO_tDv2jwJw2M(odeRT%9G@Q6-pyb3n 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

Ygq1B)AxZjxXu+@c}SV^7(~HX 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

n%*^&hI0TzP} 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 X0s--l3t>Hfy`LZ19SqNNC*XepJ-JsW diff --git a/runtime/dist/widget-library/bundles/custom-widget.umd.js b/runtime/dist/widget-library/bundles/custom-widget.umd.js deleted file mode 100644 index 51ac29d..0000000 --- a/runtime/dist/widget-library/bundles/custom-widget.umd.js +++ /dev/null @@ -1,1762 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@c8y/client'), require('lodash'), require('@c8y/ngx-components'), require('@ng-select/ng-select'), require('@angular/forms')) : - typeof define === 'function' && define.amd ? define('kpi-overview-runtime-widget', ['exports', '@angular/core', '@c8y/client', 'lodash', '@c8y/ngx-components', '@ng-select/ng-select', '@angular/forms'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['kpi-overview-runtime-widget'] = {}, global.ng.core, global.client, global._, global['@c8y/ngx-components'], global.ngSelect, global.ng.forms)); -}(this, (function (exports, core, client, _, ngxComponents, ngSelect, forms) { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - /* global Reflect, Promise */ - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) - if (Object.prototype.hasOwnProperty.call(b, p)) - d[p] = b[p]; }; - return extendStatics(d, b); - }; - function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - var __assign = function () { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - function __rest(s, e) { - var t = {}; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; - } - function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r = Reflect.decorate(decorators, target, key, desc); - else - for (var i = decorators.length - 1; i >= 0; i--) - if (d = decorators[i]) - r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - } - function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); }; - } - function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - } - function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { - step(generator.next(value)); - } - catch (e) { - reject(e); - } } - function rejected(value) { try { - step(generator["throw"](value)); - } - catch (e) { - reject(e); - } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - function __generator(thisArg, body) { - var _ = { label: 0, sent: function () { if (t[0] & 1) - throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) - throw new TypeError("Generator is already executing."); - while (_) - try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) - return t; - if (y = 0, t) - op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) - _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } - catch (e) { - op = [6, e]; - y = 0; - } - finally { - f = t = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - } - var __createBinding = Object.create ? (function (o, m, k, k2) { - if (k2 === undefined) - k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } }); - }) : (function (o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - function __exportStar(m, o) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) - __createBinding(o, m, p); - } - function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) - return m.call(o); - if (o && typeof o.length === "number") - return { - next: function () { - if (o && i >= o.length) - o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); - } - function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) - return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) - ar.push(r.value); - } - catch (error) { - e = { error: error }; - } - finally { - try { - if (r && !r.done && (m = i["return"])) - m.call(i); - } - finally { - if (e) - throw e.error; - } - } - return ar; - } - /** @deprecated */ - function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - } - /** @deprecated */ - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) - s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - } - function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - } - function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - } - function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) - i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { - step(g[n](v)); - } - catch (e) { - settle(q[0][3], e); - } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) - resume(q[0][0], q[0][1]); } - } - function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } - } - function __asyncValues(o) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); } - } - function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw }); - } - else { - cooked.raw = raw; - } - return cooked; - } - ; - var __setModuleDefault = Object.create ? (function (o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - }) : function (o, v) { - o["default"] = v; - }; - function __importStar(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; - } - function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; - } - function __classPrivateFieldGet(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - } - function __classPrivateFieldSet(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; - } - - var GpKpiOverviewWidgetService = /** @class */ (function () { - function GpKpiOverviewWidgetService(inventory) { - this.inventory = inventory; - } - GpKpiOverviewWidgetService.prototype.getDevicesAvailability = function (deviceId) { - return __awaiter(this, void 0, void 0, function () { - var totalDevices, availableDevices, unavailableDevices, response, inventory, available_1, promises, promises; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - totalDevices = 0; - availableDevices = 0; - unavailableDevices = 0; - response = null; - return [4 /*yield*/, this.inventory.detail(deviceId)]; - case 1: - inventory = _a.sent(); - response = inventory.data; - if (!response.hasOwnProperty('c8y_IsDevice')) return [3 /*break*/, 5]; - totalDevices = 1; - if (!(response.childDevices.references.length > 0)) return [3 /*break*/, 3]; - available_1 = false; - promises = response.childDevices.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var childInventory, childDeviceData; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - childInventory = _a.sent(); - childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - available_1 = true; - } - else { - available_1 = false; - } - } - return [2 /*return*/]; - } - }); - }); }); - if (available_1) { - if (response.hasOwnProperty('c8y_Availability')) { - if (response.c8y_Availability.status === 'AVAILABLE') { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - else { - availableDevices = 1; - } - } - else { - unavailableDevices = 1; - } - return [4 /*yield*/, Promise.all(promises)]; - case 2: - _a.sent(); - return [3 /*break*/, 4]; - case 3: - if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - _a.label = 4; - case 4: return [3 /*break*/, 8]; - case 5: - if (!(response.childAssets.references.length > 0)) return [3 /*break*/, 7]; - promises = response.childAssets.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var ChildInventory, childDeviceData, available_2, promises1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - ChildInventory = _a.sent(); - childDeviceData = ChildInventory.data; - if (!childDeviceData.hasOwnProperty('c8y_Availability')) return [3 /*break*/, 2]; - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - return [3 /*break*/, 5]; - case 2: - if (!childDeviceData.hasOwnProperty('c8y_IsAsset')) return [3 /*break*/, 5]; - available_2 = false; - if (!(childDeviceData.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises1 = childDeviceData.childAssets.references.map(function (assetChildDevice) { return __awaiter(_this, void 0, void 0, function () { - var assetChildInventory, assetChildDeviceData; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(assetChildDevice.managedObject.id)]; - case 1: - assetChildInventory = _a.sent(); - assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_Availability')) { - if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') { - available_2 = true; - } - else { - available_2 = false; - } - } - else { - available_2 = false; - } - return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises1)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - if (available_2) { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - _a.label = 5; - case 5: return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises)]; - case 6: - _a.sent(); - _a.label = 7; - case 7: - totalDevices = inventory.data.childAssets.references.length; - _a.label = 8; - case 8: return [2 /*return*/, { totalDevices: totalDevices, availableDevices: availableDevices, unavailableDevices: unavailableDevices }]; - } - }); - }); - }; - GpKpiOverviewWidgetService.prototype.getFirmwareRisks = function (deviceId) { - return __awaiter(this, void 0, void 0, function () { - var highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount, firmwareData, response, inventory, risks, promises; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - highRiskCount = 0; - mediumRiskCount = 0; - lowRiskCount = 0; - noRiskCount = 0; - return [4 /*yield*/, this.inventory.list({ type: 'sag_racm_currentFirmware' })]; - case 1: - firmwareData = _a.sent(); - if (firmwareData.data.length > 0) { - this.latestFirmwareVersion = firmwareData.data[0].firmware.version; - } - response = null; - return [4 /*yield*/, this.inventory.detail(deviceId)]; - case 2: - inventory = _a.sent(); - response = inventory.data; - if (!response.hasOwnProperty('c8y_IsDevice')) return [3 /*break*/, 3]; - risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - return [3 /*break*/, 5]; - case 3: - if (!(response.childAssets.references.length > 0)) return [3 /*break*/, 5]; - promises = response.childAssets.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var childInventory, childDeviceData, risks, promises1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - childInventory = _a.sent(); - childDeviceData = childInventory.data; - if (!childDeviceData.hasOwnProperty('c8y_IsDevice')) return [3 /*break*/, 2]; - risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - return [3 /*break*/, 4]; - case 2: - if (!childDeviceData.hasOwnProperty('c8y_IsAsset')) return [3 /*break*/, 4]; - if (!(childDeviceData.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises1 = childDeviceData.childAssets.references.map(function (assetChildDevice) { return __awaiter(_this, void 0, void 0, function () { - var assetChildInventory, assetChildDeviceData, risks; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(assetChildDevice.managedObject.id)]; - case 1: - assetChildInventory = _a.sent(); - assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises1)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises)]; - case 4: - _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/, { highRiskCount: highRiskCount, mediumRiskCount: mediumRiskCount, lowRiskCount: lowRiskCount, noRiskCount: noRiskCount }]; - } - }); - }); - }; - GpKpiOverviewWidgetService.prototype.calculateRiskCount = function (device) { - var atRisk = false; - var noRisk = 0; - var lowRisk = 0; - var mediumRisk = 0; - var highRisk = 0; - if (device) { - var firmwareStatus = device.c8y_Firmware; - var versionIssues = 0; - if (firmwareStatus && firmwareStatus.version) { - versionIssues = firmwareStatus.version - this.latestFirmwareVersion; - } - if (versionIssues <= 0) { - atRisk = true; - } - if (atRisk) { - if (atRisk) { - if (versionIssues >= 0) { - noRisk += 1; - } - else if (versionIssues === -1) { - lowRisk += 1; - } - else if (versionIssues === -2) { - mediumRisk += 1; - } - else if (versionIssues <= -3) { - highRisk += 1; - } - } - } - } - return { noRisk: noRisk, lowRisk: lowRisk, mediumRisk: mediumRisk, highRisk: highRisk }; - }; - GpKpiOverviewWidgetService.prototype.getAlarms = function (deviceId) { - return __awaiter(this, void 0, void 0, function () { - var totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount, response, inventory, alerts, promises; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - totalAlarms = 0; - majorAlertsCount = 0; - minorAlertsCount = 0; - criticalAlertsCount = 0; - response = null; - return [4 /*yield*/, this.inventory.detail(deviceId)]; - case 1: - inventory = _a.sent(); - response = inventory.data; - if (!response.hasOwnProperty('c8y_IsDevice')) return [3 /*break*/, 2]; - alerts = this.calculateAlarmsCount(response); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - return [3 /*break*/, 4]; - case 2: - if (!(response.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises = response.childAssets.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var childInventory, childDeviceData, alerts, promises1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - childInventory = _a.sent(); - childDeviceData = childInventory.data; - if (!childDeviceData.hasOwnProperty('c8y_IsDevice')) return [3 /*break*/, 2]; - alerts = this.calculateAlarmsCount(childDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - return [3 /*break*/, 4]; - case 2: - if (!childDeviceData.hasOwnProperty('c8y_IsAsset')) return [3 /*break*/, 4]; - if (!(childDeviceData.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises1 = childDeviceData.childAssets.references.map(function (assetChildDevice) { return __awaiter(_this, void 0, void 0, function () { - var assetChildInventory, assetChildDeviceData, alerts; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(assetChildDevice.managedObject.id)]; - case 1: - assetChildInventory = _a.sent(); - assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - alerts = this.calculateAlarmsCount(assetChildDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises1)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount; - return [2 /*return*/, { totalAlarms: totalAlarms, majorAlertsCount: majorAlertsCount, minorAlertsCount: minorAlertsCount, criticalAlertsCount: criticalAlertsCount }]; - } - }); - }); - }; - GpKpiOverviewWidgetService.prototype.calculateAlarmsCount = function (device) { - var minorAlerts = 0; - var majorAlerts = 0; - var criticalAlerts = 0; - var activeAlerts = device.c8y_ActiveAlarmsStatus; - if (activeAlerts !== undefined) { - if (activeAlerts.hasOwnProperty('minor')) { - if (activeAlerts.minor > 0) { - minorAlerts += device.c8y_ActiveAlarmsStatus.minor; - } - } - if (activeAlerts.hasOwnProperty('major')) { - if (activeAlerts.major > 0) { - majorAlerts += device.c8y_ActiveAlarmsStatus.major; - } - } - if (activeAlerts.hasOwnProperty('critical')) { - if (activeAlerts.critical > 0) { - criticalAlerts += device.c8y_ActiveAlarmsStatus.critical; - } - } - } - return { minorAlerts: minorAlerts, majorAlerts: majorAlerts, criticalAlerts: criticalAlerts }; - }; - GpKpiOverviewWidgetService.prototype.getNewKPICount = function (deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function () { - var newKPICount, response, inventory, promises; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - newKPICount = 0; - response = null; - return [4 /*yield*/, this.inventory.detail(deviceId)]; - case 1: - inventory = _a.sent(); - response = inventory.data; - if (!(response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI))) return [3 /*break*/, 2]; - newKPICount = 1; - return [3 /*break*/, 5]; - case 2: - if (!(response.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises = response.childAssets.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var childInventory, childDeviceData, promises1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - childInventory = _a.sent(); - childDeviceData = childInventory.data; - if (!childDeviceData.hasOwnProperty(newKPI)) return [3 /*break*/, 2]; - newKPICount += 1; - return [3 /*break*/, 4]; - case 2: - if (!childDeviceData.hasOwnProperty('c8y_IsAsset')) return [3 /*break*/, 4]; - if (!(childDeviceData.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises1 = childDeviceData.childAssets.references.map(function (assetChildDevice) { return __awaiter(_this, void 0, void 0, function () { - var assetChildInventory, assetChildDeviceData; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(assetChildDevice.managedObject.id)]; - case 1: - assetChildInventory = _a.sent(); - assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises1)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises)]; - case 3: - _a.sent(); - return [3 /*break*/, 5]; - case 4: - newKPICount = 0; - _a.label = 5; - case 5: return [2 /*return*/, newKPICount]; - } - }); - }); - }; - GpKpiOverviewWidgetService.prototype.getNewKPIValue = function (deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function () { - var response, newKPIValue, inventory, promises; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - response = null; - return [4 /*yield*/, this.inventory.detail(deviceId)]; - case 1: - inventory = _a.sent(); - response = inventory.data; - if (!(response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI))) return [3 /*break*/, 2]; - newKPIValue = response[newKPI]; - return [3 /*break*/, 5]; - case 2: - if (!(response.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises = response.childAssets.references.map(function (childDevice) { return __awaiter(_this, void 0, void 0, function () { - var childInventory, childDeviceData, promises1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(childDevice.managedObject.id)]; - case 1: - childInventory = _a.sent(); - childDeviceData = childInventory.data; - if (!childDeviceData.hasOwnProperty(newKPI)) return [3 /*break*/, 2]; - newKPIValue += response[newKPI]; - return [3 /*break*/, 4]; - case 2: - if (!childDeviceData.hasOwnProperty('c8y_IsAsset')) return [3 /*break*/, 4]; - if (!(childDeviceData.childAssets.references.length > 0)) return [3 /*break*/, 4]; - promises1 = childDeviceData.childAssets.references.map(function (assetChildDevice) { return __awaiter(_this, void 0, void 0, function () { - var assetChildInventory, assetChildDeviceData; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.inventory.detail(assetChildDevice.managedObject.id)]; - case 1: - assetChildInventory = _a.sent(); - assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises1)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: return [2 /*return*/]; - } - }); - }); }); - return [4 /*yield*/, Promise.all(promises)]; - case 3: - _a.sent(); - return [3 /*break*/, 5]; - case 4: - newKPIValue = ''; - _a.label = 5; - case 5: return [2 /*return*/, newKPIValue]; - } - }); - }); - }; - return GpKpiOverviewWidgetService; - }()); - GpKpiOverviewWidgetService.decorators = [ - { type: core.Injectable } - ]; - GpKpiOverviewWidgetService.ctorParameters = function () { return [ - { type: client.InventoryService } - ]; }; - - var GpKpiOverviewWidgetComponent = /** @class */ (function () { - function GpKpiOverviewWidgetComponent(kpiService) { - this.kpiService = kpiService; - this.device = { - id: '' - }; - this.kpi = { - title: '', - topMargin: '', - icon: '', - value: 0, - unit: '', - color: '', - bgcolor: '', - unitColor: '', - titleColor: '', - messageColor: '', - otherKPIName: '', - otherKPIMetric: '', - kpiName: '', - message: '', - titleSize: 20, - messageSize: 10, - kpiSize: 30, - unitSize: 20, - imageSize: 60, - containerHeight: 80, - default: { - color: '', - bgcolor: '' - } - }; - } - GpKpiOverviewWidgetComponent.prototype.ngOnInit = function () { - // Get Device Id - this.device.id = _.get(this.config, 'device.id'); - if (this.device.id === undefined || this.device.id.length === 0) { - } - // Get KPI Title - this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title'); - if (this.kpi.title === undefined || this.kpi.title.length === 0) { - this.kpi.title = 'Default Title'; - } - // Get KPI Name - this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName'); - if (this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) { - this.kpi.kpiName = 'totalDevices'; - } - // Get KPI Icon - this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon'); - if (this.kpi.icon === undefined || this.kpi.icon.length === 0) { - this.kpi.icon = 'data:image/png;base64,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'; - } - // Get KPI Message - this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message'); - if (this.kpi.message === undefined || this.kpi.message.length === 0) { - this.kpi.message = ''; - } - // Get KPI Color - this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color'); - if (this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) { - this.kpi.default.color = '#b0b0b0'; - } - this.kpi.color = this.kpi.default.color; - // Get Bg KPI Color - this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor'); - if (this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) { - this.kpi.default.bgcolor = '#FFFFFF'; - } - this.kpi.bgcolor = this.kpi.default.bgcolor; - // Get Title Color - this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor'); - if (this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) { - this.kpi.titleColor = '#b0b0b0'; - } - // Get Unit Color - this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor'); - if (this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) { - this.kpi.unitColor = '#b0b0b0'; - } - // Get message Color - this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor'); - if (this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) { - this.kpi.messageColor = '#808080'; - } - // Get KPI Unit - this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit'); - this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize'); - this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize'); - this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize'); - this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize'); - this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize'); - this.kpi.value = null; - this.getDeviceData(); - }; - GpKpiOverviewWidgetComponent.prototype.ngAfterViewInit = function () { - this.configureTopMarginRequired(); - }; - // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not. - GpKpiOverviewWidgetComponent.prototype.configureTopMarginRequired = function () { - var _this = this; - var allWidgets = document.querySelectorAll('.dashboard-grid-child'); - allWidgets.forEach(function (w) { - var widgetElement = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget'); - if (widgetElement !== undefined && widgetElement !== null) { - var widgetTitleElement = w.querySelector('div > div > div > c8y-dashboard-child-title'); - var widgetTitleDisplayValue = window.getComputedStyle(widgetTitleElement).getPropertyValue('display'); - if (widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') { - _this.kpi.topMargin = '25px'; - } - else { - _this.kpi.topMargin = '0'; - } - } - }); - }; - GpKpiOverviewWidgetComponent.prototype.getDeviceData = function () { - return __awaiter(this, void 0, void 0, function () { - var result, result, result, result, result, result, result, result, result, result, result, result, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(this.kpi.kpiName !== null && this.kpi.kpiName !== '')) return [3 /*break*/, 28]; - if (!(this.kpi.kpiName === 'totalDevices')) return [3 /*break*/, 2]; - return [4 /*yield*/, this.kpiService.getDevicesAvailability(this.device.id)]; - case 1: - result = _a.sent(); - if (result) { - this.kpi.value = result.totalDevices; - } - return [3 /*break*/, 28]; - case 2: - if (!(this.kpi.kpiName === 'available')) return [3 /*break*/, 4]; - return [4 /*yield*/, this.kpiService.getDevicesAvailability(this.device.id)]; - case 3: - result = _a.sent(); - if (result) { - this.kpi.value = result.availableDevices; - } - return [3 /*break*/, 28]; - case 4: - if (!(this.kpi.kpiName === 'unavailable')) return [3 /*break*/, 6]; - return [4 /*yield*/, this.kpiService.getDevicesAvailability(this.device.id)]; - case 5: - result = _a.sent(); - if (result) { - this.kpi.value = result.unavailableDevices; - } - return [3 /*break*/, 28]; - case 6: - if (!(this.kpi.kpiName === 'totalAlarms')) return [3 /*break*/, 8]; - return [4 /*yield*/, this.kpiService.getAlarms(this.device.id)]; - case 7: - result = _a.sent(); - if (result) { - this.kpi.value = result.totalAlarms; - } - return [3 /*break*/, 28]; - case 8: - if (!(this.kpi.kpiName === 'major')) return [3 /*break*/, 10]; - return [4 /*yield*/, this.kpiService.getAlarms(this.device.id)]; - case 9: - result = _a.sent(); - if (result) { - this.kpi.value = result.majorAlertsCount; - } - return [3 /*break*/, 28]; - case 10: - if (!(this.kpi.kpiName === 'minor')) return [3 /*break*/, 12]; - return [4 /*yield*/, this.kpiService.getAlarms(this.device.id)]; - case 11: - result = _a.sent(); - if (result) { - this.kpi.value = result.minorAlertsCount; - } - return [3 /*break*/, 28]; - case 12: - if (!(this.kpi.kpiName === 'critical')) return [3 /*break*/, 14]; - return [4 /*yield*/, this.kpiService.getAlarms(this.device.id)]; - case 13: - result = _a.sent(); - if (result) { - this.kpi.value = result.criticalAlertsCount; - } - return [3 /*break*/, 28]; - case 14: - if (!(this.kpi.kpiName === 'highRisk')) return [3 /*break*/, 16]; - return [4 /*yield*/, this.kpiService.getFirmwareRisks(this.device.id)]; - case 15: - result = _a.sent(); - if (result) { - this.kpi.value = result.highRiskCount; - } - return [3 /*break*/, 28]; - case 16: - if (!(this.kpi.kpiName === 'mediumRisk')) return [3 /*break*/, 18]; - return [4 /*yield*/, this.kpiService.getFirmwareRisks(this.device.id)]; - case 17: - result = _a.sent(); - if (result) { - this.kpi.value = result.mediumRiskCount; - } - return [3 /*break*/, 28]; - case 18: - if (!(this.kpi.kpiName === 'lowRisk')) return [3 /*break*/, 20]; - return [4 /*yield*/, this.kpiService.getFirmwareRisks(this.device.id)]; - case 19: - result = _a.sent(); - if (result) { - this.kpi.value = result.lowRiskCount; - } - return [3 /*break*/, 28]; - case 20: - if (!(this.kpi.kpiName === 'noRisk')) return [3 /*break*/, 22]; - return [4 /*yield*/, this.kpiService.getFirmwareRisks(this.device.id)]; - case 21: - result = _a.sent(); - if (result) { - this.kpi.value = result.noRiskCount; - } - return [3 /*break*/, 28]; - case 22: - if (!(this.kpi.kpiName === 'other')) return [3 /*break*/, 27]; - if (!(this.kpi.otherKPIMetric === 'value')) return [3 /*break*/, 24]; - return [4 /*yield*/, this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName)]; - case 23: - result = _a.sent(); - if (result) { - this.kpi.value = result; - } - return [3 /*break*/, 26]; - case 24: - if (!(this.kpi.otherKPIMetric === 'count')) return [3 /*break*/, 26]; - return [4 /*yield*/, this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName)]; - case 25: - result = _a.sent(); - if (result) { - this.kpi.value = result; - } - _a.label = 26; - case 26: return [3 /*break*/, 28]; - case 27: - this.kpi.value = 0; - _a.label = 28; - case 28: return [2 /*return*/]; - } - }); - }); - }; - // Getter KPI Title - GpKpiOverviewWidgetComponent.prototype.getKPITitle = function () { - return this.kpi.title; - }; - // Getter KPI Title Top Margin - GpKpiOverviewWidgetComponent.prototype.getKPITitleTopMargin = function () { - return this.kpi.topMargin; - }; - // Getter KPI Icon - GpKpiOverviewWidgetComponent.prototype.getKPIIcon = function () { - return this.kpi.icon; - }; - // Get KPI Container Height - GpKpiOverviewWidgetComponent.prototype.getKPIContainerHeight = function () { - return '90px'; - }; - // Getter KPI Value - GpKpiOverviewWidgetComponent.prototype.getKPIValue = function () { - return this.kpi.value; - }; - // Getter KPI Unit - GpKpiOverviewWidgetComponent.prototype.getKPIUnit = function () { - return this.kpi.unit; - }; - // Getter KPI Name - GpKpiOverviewWidgetComponent.prototype.getKPIName = function () { - return this.kpi.kpiName; - }; - // Getter KPI Color - GpKpiOverviewWidgetComponent.prototype.getKPIColor = function () { - return this.kpi.color; - }; - // Getter Title Color - GpKpiOverviewWidgetComponent.prototype.getTitleColor = function () { - return this.kpi.titleColor; - }; - // Getter Unit Color - GpKpiOverviewWidgetComponent.prototype.getUnitColor = function () { - return this.kpi.unitColor; - }; - // Getter Message Color - GpKpiOverviewWidgetComponent.prototype.getMessageColor = function () { - return this.kpi.messageColor; - }; - // Getter KPI background Color - GpKpiOverviewWidgetComponent.prototype.getKPIBgColor = function () { - return this.kpi.bgcolor; - }; - // Getter Other KPI Name - GpKpiOverviewWidgetComponent.prototype.getOtherKPIName = function () { - return this.kpi.otherKPIName; - }; - // Getter Other KPI metric - GpKpiOverviewWidgetComponent.prototype.getOtherKPIMetric = function () { - return this.kpi.otherKPIMetric; - }; - // Getter Other KPI Message - GpKpiOverviewWidgetComponent.prototype.getKPIMessage = function () { - return this.kpi.message; - }; - GpKpiOverviewWidgetComponent.prototype.getKPISize = function () { - return this.kpi.kpiSize + 'px'; - }; - GpKpiOverviewWidgetComponent.prototype.getTitleSize = function () { - return this.kpi.titleSize + 'px'; - }; - GpKpiOverviewWidgetComponent.prototype.getMessageSize = function () { - return this.kpi.messageSize + 'px'; - }; - GpKpiOverviewWidgetComponent.prototype.getUnitSize = function () { - return this.kpi.unitSize + 'px'; - }; - GpKpiOverviewWidgetComponent.prototype.getImageSize = function () { - return this.kpi.imageSize + 'px'; - }; - GpKpiOverviewWidgetComponent.prototype.getContainerHeight = function () { - if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.imageSize + 10; - } - else if (this.kpi.titleSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.titleSize + 10; - } - else { - this.kpi.containerHeight = this.kpi.kpiSize + 10; - } - return this.kpi.containerHeight + 'px'; - }; - return GpKpiOverviewWidgetComponent; - }()); - GpKpiOverviewWidgetComponent.decorators = [ - { type: core.Component, args: [{ - selector: 'lib-gp-kpi-overview-widget', - template: "

\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n

{{getKPITitle()}}

\r\n \r\n \r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n" - },] } - ]; - GpKpiOverviewWidgetComponent.ctorParameters = function () { return [ - { type: GpKpiOverviewWidgetService } - ]; }; - GpKpiOverviewWidgetComponent.propDecorators = { - config: [{ type: core.Input }] - }; - - /* - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - // tslint:disable-next-line: max-line-length - var previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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'; - - var GpKpiOverviewWidgetConfigComponent = /** @class */ (function () { - function GpKpiOverviewWidgetConfigComponent() { - this.config = {}; - this.kpiColorPickerClosed = true; - this.kpiBgColorPickerClosed = true; - this.titleColorPickerClosed = true; - this.kpiUnitColorPickerClosed = true; - this.messageColorPickerClosed = true; - this.widgetInfo = { - metadata: { - title: '', - icon: '', - }, - kpi: { - color: '#b0b0b0', - unit: '', - bgcolor: '#FFFFFF', - kpiName: '', - message: '', - otherKPIValue: '', - otherKPIName: '', - titleColor: '#808080', - unitColor: '#b0b0b0', - messageColor: '#808080', - titleSize: 20, - messageSize: 10, - unitSize: 20, - kpiSize: 30, - imageSize: 60, - } - }; - this.kpiNamesList = [ - { - id: 'totalDevices', - text: 'Total Devices' - }, - { - id: 'available', - text: 'Available Devices' - }, - { - id: 'unavailable', - text: 'Unavailable Devices' - }, - { - id: 'totalAlarms', - text: 'Total Alarms' - }, - { - id: 'major', - text: 'Major Alarms' - }, - { - id: 'minor', - text: 'Minor Alarms' - }, - { - id: 'critical', - text: 'Critical Alarms' - }, - { - id: 'highRisk', - text: 'High Risk' - }, - { - id: 'mediumRisk', - text: 'Medium Risk' - }, - { - id: 'lowRisk', - text: 'Low Risk' - }, - { - id: 'noRisk', - text: 'No Risk' - }, - { - id: 'other', - text: 'Other Property' - } - ]; - } - GpKpiOverviewWidgetConfigComponent.prototype.ngOnInit = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - // Editing an existing widget - if (_.has(this.config, 'customwidgetdata')) { - this.widgetInfo = _.get(this.config, 'customwidgetdata'); - } - else { // Adding a new widget - _.set(this.config, 'customwidgetdata', this.widgetInfo); - } - return [2 /*return*/]; - }); - }); - }; - GpKpiOverviewWidgetConfigComponent.prototype.updateIconInConfig = function ($event) { - var _this = this; - var kpiIcon = $event.target.files[0]; - var reader = new FileReader(); - reader.readAsDataURL(kpiIcon); - reader.onload = function () { - _this.widgetInfo.metadata.icon = reader.result; - _.set(_this.config, 'customwidgetdata', _this.widgetInfo); - }; - }; - GpKpiOverviewWidgetConfigComponent.prototype.updateConfig = function () { - _.set(this.config, 'customwidgetdata', this.widgetInfo); - }; - GpKpiOverviewWidgetConfigComponent.prototype.setSelectedColorForKPI = function (value) { - this.widgetInfo.kpi.color = value; - this.updateConfig(); - }; - GpKpiOverviewWidgetConfigComponent.prototype.closeKPIColorPicker = function () { - this.kpiColorPickerClosed = true; - }; - GpKpiOverviewWidgetConfigComponent.prototype.openKPIColorPicker = function () { - this.kpiColorPickerClosed = false; - }; - GpKpiOverviewWidgetConfigComponent.prototype.setSelectedColorForTitle = function (value) { - this.widgetInfo.kpi.titleColor = value; - this.updateConfig(); - }; - GpKpiOverviewWidgetConfigComponent.prototype.closeTitleColorPicker = function () { - this.titleColorPickerClosed = true; - }; - GpKpiOverviewWidgetConfigComponent.prototype.openTitleColorPicker = function () { - this.titleColorPickerClosed = false; - }; - GpKpiOverviewWidgetConfigComponent.prototype.setSelectedColorForKPIUnit = function (value) { - this.widgetInfo.kpi.unitColor = value; - this.updateConfig(); - }; - GpKpiOverviewWidgetConfigComponent.prototype.closeKPIUnitColorPicker = function () { - this.kpiUnitColorPickerClosed = true; - }; - GpKpiOverviewWidgetConfigComponent.prototype.openKPIUnitColorPicker = function () { - this.kpiUnitColorPickerClosed = false; - }; - GpKpiOverviewWidgetConfigComponent.prototype.setSelectedColorForMessage = function (value) { - this.widgetInfo.kpi.messageColor = value; - this.updateConfig(); - }; - GpKpiOverviewWidgetConfigComponent.prototype.closeMessageColorPicker = function () { - this.messageColorPickerClosed = true; - }; - GpKpiOverviewWidgetConfigComponent.prototype.openMessageColorPicker = function () { - this.messageColorPickerClosed = false; - }; - GpKpiOverviewWidgetConfigComponent.prototype.closeKPIBgColorPicker = function () { - this.kpiBgColorPickerClosed = true; - }; - GpKpiOverviewWidgetConfigComponent.prototype.openKPIBgColorPicker = function () { - this.kpiBgColorPickerClosed = false; - }; - GpKpiOverviewWidgetConfigComponent.prototype.setSelectedColorForBackground = function (value) { - this.widgetInfo.kpi.bgcolor = value; - this.updateConfig(); - }; - return GpKpiOverviewWidgetConfigComponent; - }()); - GpKpiOverviewWidgetConfigComponent.decorators = [ - { type: core.Component, args: [{ - selector: 'lib-gp-kpi-overview-widget-config', - template: "\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
", - styles: [".showColorPicker{display:block}.hideColorPicker{display:none}"] - },] } - ]; - GpKpiOverviewWidgetConfigComponent.ctorParameters = function () { return []; }; - GpKpiOverviewWidgetConfigComponent.propDecorators = { - config: [{ type: core.Input }] - }; - - /** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var ColorPickerComponent = /** @class */ (function () { - function ColorPickerComponent(eRef) { - this.eRef = eRef; - this.colorSet = new core.EventEmitter(true); - this.colorPickerClosed = new core.EventEmitter(); - this.colorType = 'hexa'; - } - ColorPickerComponent.prototype.closeColorPicker = function () { - this.colorPickerClosed.emit(true); - }; - ColorPickerComponent.prototype.applyColorClicked = function () { - if (this.color !== undefined) { - if (this.colorType === 'hexa') { - this.colorSet.emit(this.RGBAToHexA(this.color)); - } - else { - this.colorSet.emit(this.color); - } - } - }; - ColorPickerComponent.prototype.RGBAToHexA = function (rgba) { - var sep = rgba.indexOf(',') > -1 ? ',' : ' '; - rgba = rgba.substr(5).split(')')[0].split(sep); - // Strip the slash if using space-separated syntax - if (rgba.indexOf('/') > -1) { - rgba.splice(3, 1); - } - var r = (+rgba[0]).toString(16); - var g = (+rgba[1]).toString(16); - var b = (+rgba[2]).toString(16); - var a = Math.round(+rgba[3] * 255).toString(16); - if (r.length === 1) { - r = '0' + r; - } - if (g.length === 1) { - g = '0' + g; - } - if (b.length === 1) { - b = '0' + b; - } - if (a.length === 1) { - a = '0' + a; - } - return '#' + r + g + b + a; - }; - return ColorPickerComponent; - }()); - ColorPickerComponent.decorators = [ - { type: core.Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-picker', - template: "\n
\n \n \n
\n \n \n
\n
\n \n\n\n ", - styles: [".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"] - },] } - ]; - ColorPickerComponent.ctorParameters = function () { return [ - { type: core.ElementRef } - ]; }; - ColorPickerComponent.propDecorators = { - colorSet: [{ type: core.Output }], - colorPickerClosed: [{ type: core.Output }] - }; - - /** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var ColorSliderComponent = /** @class */ (function () { - function ColorSliderComponent() { - this.color = new core.EventEmitter(true); - this.mousedown = false; - } - // tslint:disable-next-line: use-lifecycle-interface - ColorSliderComponent.prototype.ngAfterViewInit = function () { - this.draw(); - }; - ColorSliderComponent.prototype.onMouseDown = function (evt) { - this.mousedown = true; - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - }; - ColorSliderComponent.prototype.onMouseMove = function (evt) { - if (this.mousedown) { - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - }; - ColorSliderComponent.prototype.onMouseUp = function (evt) { - this.mousedown = false; - }; - ColorSliderComponent.prototype.emitColor = function (x, y) { - var rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - }; - ColorSliderComponent.prototype.getColorAtPosition = function (x, y) { - var imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - }; - ColorSliderComponent.prototype.draw = function () { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - var width = this.canvas.nativeElement.width; - var height = this.canvas.nativeElement.height; - this.ctx.clearRect(0, 0, width, height); - var gradient = this.ctx.createLinearGradient(0, 0, 0, height); - gradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); - gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)'); - gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)'); - gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)'); - gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)'); - gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)'); - gradient.addColorStop(1, 'rgba(255, 0, 0, 1)'); - this.ctx.beginPath(); - this.ctx.rect(0, 0, width, height); - this.ctx.fillStyle = gradient; - this.ctx.fill(); - this.ctx.closePath(); - if (this.selectedHeight) { - this.ctx.beginPath(); - this.ctx.strokeStyle = 'white'; - this.ctx.lineWidth = 5; - this.ctx.rect(0, this.selectedHeight - 5, width, 10); - this.ctx.stroke(); - this.ctx.closePath(); - } - }; - return ColorSliderComponent; - }()); - ColorSliderComponent.decorators = [ - { type: core.Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-slider', - template: " " - },] } - ]; - ColorSliderComponent.propDecorators = { - color: [{ type: core.Output }], - canvas: [{ type: core.ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: core.HostListener, args: ['window:mouseup', ['$event'],] }] - }; - - /** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var ColorPaletteComponent = /** @class */ (function () { - function ColorPaletteComponent() { - this.color = new core.EventEmitter(true); - this.mousedown = false; - } - ColorPaletteComponent.prototype.ngAfterViewInit = function () { - this.draw(); - }; - ColorPaletteComponent.prototype.draw = function () { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - var width = this.canvas.nativeElement.width; - var height = this.canvas.nativeElement.height; - this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)'; - this.ctx.fillRect(0, 0, width, height); - var whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0); - whiteGrad.addColorStop(0, 'rgba(255,255,255,1)'); - whiteGrad.addColorStop(1, 'rgba(255,255,255,0)'); - this.ctx.fillStyle = whiteGrad; - this.ctx.fillRect(0, 0, width, height); - var blackGrad = this.ctx.createLinearGradient(0, 0, 0, height); - blackGrad.addColorStop(0, 'rgba(0,0,0,0)'); - blackGrad.addColorStop(1, 'rgba(0,0,0,1)'); - this.ctx.fillStyle = blackGrad; - this.ctx.fillRect(0, 0, width, height); - if (this.selectedPosition) { - this.ctx.strokeStyle = 'white'; - this.ctx.fillStyle = 'white'; - this.ctx.beginPath(); - this.ctx.arc(this.selectedPosition.x, this.selectedPosition.y, 10, 0, 2 * Math.PI); - this.ctx.lineWidth = 5; - this.ctx.stroke(); - } - }; - ColorPaletteComponent.prototype.ngOnChanges = function (changes) { - // tslint:disable-next-line: no-string-literal - if (changes['hue']) { - this.draw(); - var pos = this.selectedPosition; - if (pos) { - this.color.emit(this.getColorAtPosition(pos.x, pos.y)); - } - } - }; - ColorPaletteComponent.prototype.onMouseUp = function (evt) { - this.mousedown = false; - }; - ColorPaletteComponent.prototype.onMouseDown = function (evt) { - this.mousedown = true; - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY)); - }; - ColorPaletteComponent.prototype.onMouseMove = function (evt) { - if (this.mousedown) { - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - }; - ColorPaletteComponent.prototype.emitColor = function (x, y) { - var rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - }; - ColorPaletteComponent.prototype.getColorAtPosition = function (x, y) { - var imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - }; - return ColorPaletteComponent; - }()); - ColorPaletteComponent.decorators = [ - { type: core.Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-palette', - template: "\n", - styles: [".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"] - },] } - ]; - ColorPaletteComponent.propDecorators = { - hue: [{ type: core.Input }], - color: [{ type: core.Output }], - canvas: [{ type: core.ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: core.HostListener, args: ['window:mouseup', ['$event'],] }] - }; - - /** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - var ɵ0 = { - id: 'kpi-overview.widget', - label: 'KPI Overview', - previewImage: previewImage, - description: 'KPI Overview', - component: GpKpiOverviewWidgetComponent, - configComponent: GpKpiOverviewWidgetConfigComponent, - data: { - ng1: { - options: { - noDeviceTarget: false, - noNewWidgets: false, - deviceTargetNotRequired: false, - groupsSelectable: true - } - } - } - }; - var GpKpiOverviewWidgetModule = /** @class */ (function () { - function GpKpiOverviewWidgetModule() { - } - return GpKpiOverviewWidgetModule; - }()); - GpKpiOverviewWidgetModule.decorators = [ - { type: core.NgModule, args: [{ - declarations: [ - GpKpiOverviewWidgetComponent, - GpKpiOverviewWidgetConfigComponent, - ColorPickerComponent, - ColorSliderComponent, - ColorPaletteComponent - ], - imports: [ - ngSelect.NgSelectModule, - forms.FormsModule, - ngxComponents.CommonModule, - ngxComponents.CoreModule - ], - exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - providers: [ - GpKpiOverviewWidgetService, - { - provide: ngxComponents.HOOK_COMPONENTS, - multi: true, - useValue: ɵ0 - } - ], - },] } - ]; - - /** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - /** - * Generated bundle index. Do not edit. - */ - - exports.GpKpiOverviewWidgetComponent = GpKpiOverviewWidgetComponent; - exports.GpKpiOverviewWidgetModule = GpKpiOverviewWidgetModule; - exports.GpKpiOverviewWidgetService = GpKpiOverviewWidgetService; - exports.ɵ0 = ɵ0; - exports.ɵa = GpKpiOverviewWidgetConfigComponent; - exports.ɵb = ColorPickerComponent; - exports.ɵc = ColorSliderComponent; - exports.ɵd = ColorPaletteComponent; - exports.ɵe = previewImage; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -//# sourceMappingURL=custom-widget.umd.js.map diff --git a/runtime/dist/widget-library/bundles/custom-widget.umd.js.map b/runtime/dist/widget-library/bundles/custom-widget.umd.js.map deleted file mode 100644 index 996ead8..0000000 --- a/runtime/dist/widget-library/bundles/custom-widget.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"custom-widget.umd.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.service.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/preview-image.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-picker-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-slider/color-slider-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-palette/color-palette-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.module.ts","../../../../projects/gp-kpi-overview-widget/src/public-api.ts","../../../../projects/gp-kpi-overview-widget/src/custom-widget.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ThrowStmt } from '@angular/compiler';\nimport { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\n\n\n@Injectable()\nexport class GpKpiOverviewWidgetService {\n latestFirmwareVersion: any;\n\n\n constructor(public inventory: InventoryService) {\n }\n\n async getDevicesAvailability(deviceId){\n let totalDevices = 0;\n let availableDevices = 0;\n let unavailableDevices = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n totalDevices = 1;\n\n if (response.childDevices.references.length > 0) {\n\n let available = false;\n const promises = response.childDevices.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n\n if (childDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n });\n if(available){\n if (response.hasOwnProperty('c8y_Availability')) {\n if (response.c8y_Availability.status === 'AVAILABLE') {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }else{\n availableDevices = 1;\n }\n }\n else{\n unavailableDevices = 1;\n }\n await Promise.all(promises);\n } else {\n if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }\n }\n else {\n if (response.childAssets.references.length > 0) {\n const promises = response.childAssets.references.map(async (childDevice) => {\n const ChildInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = ChildInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_Availability')) {\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n availableDevices += 1;\n }\n else{\n unavailableDevices += 1;\n }\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n let available = false;\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n else{\n available = false;\n }\n });\n await Promise.all(promises1);\n }\n if (available) {\n availableDevices += 1;\n }else{\n unavailableDevices += 1;\n }\n }\n });\n await Promise.all(promises);\n }\n totalDevices = inventory.data.childAssets.references.length;\n }\n return {totalDevices, availableDevices, unavailableDevices};\n }\n\n async getFirmwareRisks(deviceId){\n let highRiskCount = 0;\n let mediumRiskCount = 0;\n let lowRiskCount = 0;\n let noRiskCount = 0;\n const firmwareData = await this.inventory.list({ type: 'sag_racm_currentFirmware' });\n if (firmwareData.data.length > 0) {\n this.latestFirmwareVersion = firmwareData.data[0].firmware.version;\n }\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk;\n }\n else if(response.childAssets.references.length > 0){\n\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n return {highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount};\n }\n\n calculateRiskCount(device){\n let atRisk = false;\n let noRisk = 0;\n let lowRisk = 0;\n let mediumRisk = 0;\n let highRisk = 0;\n\n if (device) {\n const firmwareStatus = device.c8y_Firmware;\n let versionIssues = 0;\n if (firmwareStatus && firmwareStatus.version) {\n versionIssues = firmwareStatus.version - this.latestFirmwareVersion;\n }\n if (versionIssues <= 0) {\n atRisk = true; }\n if ( atRisk) {\n if (atRisk) {\n if (versionIssues >= 0) {\n noRisk += 1;\n } else if (versionIssues === -1) {\n lowRisk += 1;\n } else if (versionIssues === -2) {\n mediumRisk += 1;\n } else if (versionIssues <= -3) {\n highRisk += 1;\n }\n }\n }\n }\n return {noRisk, lowRisk, mediumRisk, highRisk}\n }\n async getAlarms(deviceId){\n let totalAlarms = 0;\n let majorAlertsCount = 0;\n let minorAlertsCount = 0;\n let criticalAlertsCount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(response);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(childDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(assetChildDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount;\n return {totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount};\n }\n\n\n calculateAlarmsCount(device){\n let minorAlerts = 0;\n let majorAlerts = 0;\n let criticalAlerts = 0;\n const activeAlerts = device.c8y_ActiveAlarmsStatus;\n if (activeAlerts !== undefined) {\n if (activeAlerts.hasOwnProperty('minor')) {\n if (activeAlerts.minor > 0) { minorAlerts += device.c8y_ActiveAlarmsStatus.minor; }\n }\n if (activeAlerts.hasOwnProperty('major')) {\n if (activeAlerts.major > 0) { majorAlerts += device.c8y_ActiveAlarmsStatus.major }\n }\n if (activeAlerts.hasOwnProperty('critical')) {\n if (activeAlerts.critical > 0) { criticalAlerts += device.c8y_ActiveAlarmsStatus.critical }\n }\n }\n return {minorAlerts, majorAlerts, criticalAlerts}\n }\n\n async getNewKPICount(deviceId, newKPI){\n let newKPICount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPICount = 1;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPICount = 0;\n }\n return newKPICount;\n }\n\n async getNewKPIValue(deviceId, newKPI){\n let response: any = null;\n let newKPIValue;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPIValue = response[newKPI];\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPIValue = '';\n }\n return newKPIValue;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport * as _ from 'lodash';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\n\n\ninterface Device {\n id: string;\n}\n\ninterface KPI {\n default: {\n color: string;\n bgcolor: string\n }\n title: string;\n icon: string;\n topMargin: string;\n color: string;\n bgcolor: string;\n unitColor: string;\n titleColor: string;\n messageColor: string;\n value: any;\n unit: string;\n message: string;\n kpiName: string;\n otherKPIName: string;\n otherKPIMetric: string;\n titleSize: number;\n messageSize: number;\n kpiSize: number;\n unitSize: number;\n imageSize: number;\n containerHeight: number;\n}\n\n@Component({\n selector: 'lib-gp-kpi-overview-widget',\n templateUrl: './gp-kpi-overview-widget.html',\n styles: []\n})\nexport class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit{\n\n @Input() config;\n\n private device: Device = {\n id: ''\n }\n\n private kpi: KPI = {\n title: '',\n topMargin: '',\n icon: '',\n value: 0,\n unit: '',\n color: '',\n bgcolor: '',\n unitColor: '',\n titleColor: '',\n messageColor: '',\n otherKPIName: '',\n otherKPIMetric: '',\n kpiName: '',\n message: '',\n titleSize: 20,\n messageSize: 10,\n kpiSize: 30,\n unitSize: 20,\n imageSize: 60,\n containerHeight: 80,\n default: {\n color: '',\n bgcolor: ''\n }\n }\n\n constructor(private kpiService: GpKpiOverviewWidgetService) { }\n\n ngOnInit() {\n\n // Get Device Id\n this.device.id = _.get(this.config, 'device.id');\n if(this.device.id === undefined || this.device.id.length === 0) {\n }\n // Get KPI Title\n this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title');\n if(this.kpi.title === undefined || this.kpi.title.length === 0) {\n this.kpi.title = 'Default Title';\n }\n // Get KPI Name\n this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName');\n if(this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) {\n this.kpi.kpiName = 'totalDevices';\n }\n // Get KPI Icon\n this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon');\n if(this.kpi.icon === undefined || this.kpi.icon.length === 0) {\n this.kpi.icon = 'data:image/png;base64,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';\n }\n // Get KPI Message\n this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message');\n if(this.kpi.message === undefined || this.kpi.message.length === 0) {\n this.kpi.message = '';\n }\n // Get KPI Color\n this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color');\n if(this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) {\n this.kpi.default.color = '#b0b0b0';\n }\n this.kpi.color = this.kpi.default.color;\n // Get Bg KPI Color\n this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor');\n if(this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) {\n this.kpi.default.bgcolor = '#FFFFFF';\n }\n this.kpi.bgcolor = this.kpi.default.bgcolor;\n\n // Get Title Color\n this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor');\n if(this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) {\n this.kpi.titleColor = '#b0b0b0';\n }\n\n // Get Unit Color\n this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor');\n if(this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) {\n this.kpi.unitColor = '#b0b0b0';\n }\n\n // Get message Color\n this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor');\n if(this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) {\n this.kpi.messageColor = '#808080';\n }\n // Get KPI Unit\n this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit');\n this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize');\n this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize');\n this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize');\n this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize');\n this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize');\n this.kpi.value = null;\n this.getDeviceData();\n }\n\n ngAfterViewInit() {\n this.configureTopMarginRequired();\n }\n\n // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not.\n private configureTopMarginRequired(): void {\n const allWidgets: NodeListOf = document.querySelectorAll('.dashboard-grid-child');\n allWidgets.forEach((w:Element) => {\n const widgetElement: Element = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget');\n if(widgetElement !== undefined && widgetElement !== null) {\n const widgetTitleElement: Element = w.querySelector('div > div > div > c8y-dashboard-child-title');\n const widgetTitleDisplayValue: string = window.getComputedStyle(widgetTitleElement).getPropertyValue('display');\n if(widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') {\n this.kpi.topMargin = '25px';\n } else {\n this.kpi.topMargin = '0';\n }\n }\n });\n }\n async getDeviceData() {\n if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') {\n\n if (this.kpi.kpiName === 'totalDevices'){\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.totalDevices;\n }\n }\n else if (this.kpi.kpiName === 'available') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.availableDevices;\n }\n }\n else if (this.kpi.kpiName === 'unavailable') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.unavailableDevices;\n }\n }\n else if (this.kpi.kpiName === 'totalAlarms') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.totalAlarms;\n }\n }\n else if (this.kpi.kpiName === 'major') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.majorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'minor') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.minorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'critical') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.criticalAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'highRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.highRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'mediumRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.mediumRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'lowRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.lowRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'noRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.noRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'other') {\n\n if (this.kpi.otherKPIMetric === 'value') {\n const result = await this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n else if(this.kpi.otherKPIMetric === 'count') {\n const result = await this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n }\n else{\n this.kpi.value = 0;\n }\n }\n }\n // Getter KPI Title\n public getKPITitle(): string {\n return this.kpi.title;\n }\n // Getter KPI Title Top Margin\n public getKPITitleTopMargin() {\n return this.kpi.topMargin;\n }\n // Getter KPI Icon\n public getKPIIcon(): string {\n return this.kpi.icon;\n }\n // Get KPI Container Height\n public getKPIContainerHeight(): string {\n return '90px';\n }\n // Getter KPI Value\n public getKPIValue() {\n return this.kpi.value;\n }\n // Getter KPI Unit\n public getKPIUnit() {\n return this.kpi.unit;\n }\n // Getter KPI Name\n public getKPIName() {\n return this.kpi.kpiName;\n }\n // Getter KPI Color\n public getKPIColor() {\n return this.kpi.color;\n }\n // Getter Title Color\n public getTitleColor() {\n return this.kpi.titleColor;\n }\n // Getter Unit Color\n public getUnitColor() {\n return this.kpi.unitColor;\n }\n // Getter Message Color\n public getMessageColor() {\n return this.kpi.messageColor;\n }\n // Getter KPI background Color\n public getKPIBgColor() {\n return this.kpi.bgcolor;\n }\n // Getter Other KPI Name\n public getOtherKPIName() {\n return this.kpi.otherKPIName;\n }\n // Getter Other KPI metric\n public getOtherKPIMetric() {\n return this.kpi.otherKPIMetric;\n }\n // Getter Other KPI Message\n public getKPIMessage() {\n return this.kpi.message;\n }\n public getKPISize() {\n return this.kpi.kpiSize + 'px';\n }\n public getTitleSize() {\n return this.kpi.titleSize + 'px';\n }\n public getMessageSize() {\n return this.kpi.messageSize + 'px';\n }\n public getUnitSize() {\n return this.kpi.unitSize + 'px';\n }\n public getImageSize() {\n return this.kpi.imageSize + 'px';\n }\n\n public getContainerHeight(){\n if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) {\n this.kpi.containerHeight = this.kpi.imageSize + 10;\n } else if(this.kpi.titleSize > this.kpi.kpiSize){\n this.kpi.containerHeight = this.kpi.titleSize + 10;\n }else{\n this.kpi.containerHeight = this.kpi.kpiSize + 10;\n }\n return this.kpi.containerHeight + 'px';\n }\n}\n","/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n*/\r\n\r\n\r\n// tslint:disable-next-line: max-line-length\r\nexport const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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';\r\n","\r\n\r\n/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n */\r\n\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'lib-gp-kpi-overview-widget-config',\r\n templateUrl: './gp-kpi-overview-widget-config.html',\r\n styleUrls: ['./gp-kpi-overview-widget-config.css']\r\n})\r\nexport class GpKpiOverviewWidgetConfigComponent implements OnInit {\r\n @Input() config: any = {};\r\n kpiColorPickerClosed = true;\r\n kpiBgColorPickerClosed = true;\r\n titleColorPickerClosed = true;\r\n kpiUnitColorPickerClosed = true;\r\n messageColorPickerClosed = true;\r\n\r\n\r\n\r\n widgetInfo = {\r\n metadata: {\r\n title: '',\r\n icon: '',\r\n },\r\n kpi: {\r\n color: '#b0b0b0',\r\n unit: '',\r\n bgcolor: '#FFFFFF',\r\n kpiName: '',\r\n message: '',\r\n otherKPIValue: '',\r\n otherKPIName: '',\r\n titleColor: '#808080',\r\n unitColor: '#b0b0b0',\r\n messageColor: '#808080',\r\n titleSize: 20,\r\n messageSize: 10,\r\n unitSize: 20,\r\n kpiSize: 30,\r\n imageSize: 60,\r\n\r\n }\r\n}\r\nkpiNamesList = [\r\n {\r\n id: 'totalDevices',\r\n text: 'Total Devices'\r\n },\r\n {\r\n id: 'available',\r\n text: 'Available Devices'\r\n },\r\n {\r\n id: 'unavailable',\r\n text: 'Unavailable Devices'\r\n },\r\n {\r\n id: 'totalAlarms',\r\n text: 'Total Alarms'\r\n },\r\n {\r\n id: 'major',\r\n text: 'Major Alarms'\r\n },\r\n {\r\n id: 'minor',\r\n text: 'Minor Alarms'\r\n },\r\n {\r\n id: 'critical',\r\n text: 'Critical Alarms'\r\n },\r\n {\r\n id: 'highRisk',\r\n text: 'High Risk'\r\n }\r\n ,\r\n {\r\n id: 'mediumRisk',\r\n text: 'Medium Risk'\r\n },\r\n {\r\n id: 'lowRisk',\r\n text: 'Low Risk'\r\n },\r\n {\r\n id: 'noRisk',\r\n text: 'No Risk'\r\n },\r\n {\r\n id: 'other',\r\n text: 'Other Property'\r\n }\r\n\r\n ];\r\n constructor() {}\r\n\r\n async ngOnInit() {\r\n // Editing an existing widget\r\n if(_.has(this.config, 'customwidgetdata')) {\r\n this.widgetInfo = _.get(this.config, 'customwidgetdata');\r\n } else { // Adding a new widget\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n }\r\n\r\n public updateIconInConfig($event: Event) {\r\n const kpiIcon = ($event.target as HTMLInputElement).files[0];\r\n const reader = new FileReader();\r\n reader.readAsDataURL(kpiIcon);\r\n reader.onload = () => {\r\n this.widgetInfo.metadata.icon = reader.result as string;\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n };\r\n }\r\n\r\n public updateConfig() {\r\n\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n\r\n\r\n setSelectedColorForKPI(value: string) {\r\n this.widgetInfo.kpi.color = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIColorPicker() {\r\n this.kpiColorPickerClosed = true;\r\n }\r\n\r\n openKPIColorPicker() {\r\n this.kpiColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForTitle(value: string) {\r\n this.widgetInfo.kpi.titleColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeTitleColorPicker() {\r\n this.titleColorPickerClosed = true;\r\n }\r\n\r\n openTitleColorPicker() {\r\n this.titleColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForKPIUnit(value: string) {\r\n this.widgetInfo.kpi.unitColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = true;\r\n }\r\n\r\n openKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForMessage(value: string) {\r\n this.widgetInfo.kpi.messageColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeMessageColorPicker() {\r\n this.messageColorPickerClosed = true;\r\n }\r\n\r\n openMessageColorPicker() {\r\n this.messageColorPickerClosed = false;\r\n }\r\n\r\n\r\n closeKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = true;\r\n }\r\n\r\n openKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForBackground(value: string) {\r\n this.widgetInfo.kpi.bgcolor = value;\r\n this.updateConfig();\r\n }\r\n\r\n}","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-picker',\n templateUrl: './color-picker-component.html',\n styleUrls: ['./color-picker-component.css'],\n})\nexport class ColorPickerComponent {\n @Output() colorSet: EventEmitter = new EventEmitter(true);\n @Output() colorPickerClosed: EventEmitter = new EventEmitter();\n\n public hue: string;\n public color: string;\n public colorType: any = 'hexa';\n constructor(private eRef: ElementRef) {}\n\n closeColorPicker(): void {\n this.colorPickerClosed.emit(true);\n }\n applyColorClicked(): void {\n if (this.color !== undefined) {\n if (this.colorType === 'hexa') {\n this.colorSet.emit(this.RGBAToHexA(this.color));\n } else {\n this.colorSet.emit(this.color);\n }\n }\n }\n\n RGBAToHexA(rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = '0' + r; }\n if (g.length === 1) { g = '0' + g; }\n if (b.length === 1) { b = '0' + b; }\n if (a.length === 1) { a = '0' + a; }\n\n return '#' + r + g + b + a;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-slider',\n templateUrl: './color-slider-component.html',\n})\nexport class ColorSliderComponent {\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n private mousedown = false;\n private selectedHeight: number;\n\n // tslint:disable-next-line: use-lifecycle-interface\n ngAfterViewInit() {\n this.draw();\n }\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n this.ctx.clearRect(0, 0, width, height);\n\n const gradient = this.ctx.createLinearGradient(0, 0, 0, height);\n gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');\n gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\n gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\n gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\n gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\n gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\n gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');\n\n this.ctx.beginPath();\n this.ctx.rect(0, 0, width, height);\n this.ctx.fillStyle = gradient;\n this.ctx.fill();\n this.ctx.closePath();\n\n if (this.selectedHeight) {\n this.ctx.beginPath();\n this.ctx.strokeStyle = 'white';\n this.ctx.lineWidth = 5;\n this.ctx.rect(0, this.selectedHeight - 5, width, 10);\n this.ctx.stroke();\n this.ctx.closePath();\n }\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ViewChild,\n ElementRef,\n AfterViewInit,\n Input,\n Output,\n SimpleChanges,\n OnChanges,\n EventEmitter,\n HostListener,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-palette',\n templateUrl: './color-palette-component.html',\n styleUrls: ['./color-palette-component.css'],\n})\nexport class ColorPaletteComponent implements AfterViewInit, OnChanges {\n @Input()\n hue: string;\n\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n\n private mousedown = false;\n\n public selectedPosition: { x: number; y: number };\n\n ngAfterViewInit() {\n this.draw();\n }\n\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n\n this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)';\n this.ctx.fillRect(0, 0, width, height);\n\n const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n this.ctx.fillStyle = whiteGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n this.ctx.fillStyle = blackGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n if (this.selectedPosition) {\n this.ctx.strokeStyle = 'white';\n this.ctx.fillStyle = 'white';\n this.ctx.beginPath();\n this.ctx.arc(\n this.selectedPosition.x,\n this.selectedPosition.y,\n 10,\n 0,\n 2 * Math.PI\n );\n this.ctx.lineWidth = 5;\n this.ctx.stroke();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // tslint:disable-next-line: no-string-literal\n if (changes['hue']) {\n this.draw();\n const pos = this.selectedPosition;\n if (pos) {\n this.color.emit(this.getColorAtPosition(pos.x, pos.y));\n }\n }\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY));\n }\n\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components';\nimport { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component';\nimport * as preview from './preview-image';\nimport { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { ColorPickerComponent } from './color-picker/color-picker-component';\nimport { ColorSliderComponent } from './color-picker/color-slider/color-slider-component';\nimport { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component';\n@NgModule({\n declarations: [\n GpKpiOverviewWidgetComponent,\n GpKpiOverviewWidgetConfigComponent,\n ColorPickerComponent,\n ColorSliderComponent,\n ColorPaletteComponent\n ],\n imports: [\n NgSelectModule,\n FormsModule,\n CommonModule,\n CoreModule\n ],\n exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n\n providers: [\n GpKpiOverviewWidgetService,\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: {\n id: 'kpi-overview.widget',\n label: 'KPI Overview',\n previewImage: preview.previewImage,\n description: 'KPI Overview',\n component: GpKpiOverviewWidgetComponent,\n configComponent: GpKpiOverviewWidgetConfigComponent,\n data: {\n ng1: {\n options: {\n noDeviceTarget: false,\n noNewWidgets: false,\n deviceTargetNotRequired: false,\n groupsSelectable: true\n }\n }\n }\n }\n }],\n})\nexport class GpKpiOverviewWidgetModule { }\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Public API Surface of gp-kpi-overview-widget\n */\n\nexport * from './lib/gp-kpi-overview-widget.service';\nexport * from './lib/gp-kpi-overview-widget.component';\nexport * from './lib/gp-kpi-overview-widget.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {ColorPaletteComponent as ɵd} from './lib/color-picker/color-palette/color-palette-component';\nexport {ColorPickerComponent as ɵb} from './lib/color-picker/color-picker-component';\nexport {ColorSliderComponent as ɵc} from './lib/color-picker/color-slider/color-slider-component';\nexport {GpKpiOverviewWidgetConfigComponent as ɵa} from './lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nexport {previewImage as ɵe} from './lib/preview-image';"],"names":["Injectable","InventoryService","_.get","Component","Input","_.has","_.set","EventEmitter","ElementRef","Output","ViewChild","HostListener","preview.previewImage","NgModule","NgSelectModule","FormsModule","CommonModule","CoreModule","HOOK_COMPONENTS"],"mappings":"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"} \ No newline at end of file diff --git a/runtime/dist/widget-library/bundles/custom-widget.umd.min.js b/runtime/dist/widget-library/bundles/custom-widget.umd.min.js deleted file mode 100644 index ee271b7..0000000 --- a/runtime/dist/widget-library/bundles/custom-widget.umd.min.js +++ /dev/null @@ -1,16 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@c8y/client"),require("lodash"),require("@c8y/ngx-components"),require("@ng-select/ng-select"),require("@angular/forms")):"function"==typeof define&&define.amd?define("kpi-overview-runtime-widget",["exports","@angular/core","@c8y/client","lodash","@c8y/ngx-components","@ng-select/ng-select","@angular/forms"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["kpi-overview-runtime-widget"]={},e.ng.core,e.client,e._,e["@c8y/ngx-components"],e.ngSelect,e.ng.forms)}(this,(function(e,t,i,r,o,n,s){"use strict"; -/*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */function a(e,t,i,r){return new(i||(i=Promise))((function(o,n){function s(e){try{l(r.next(e))}catch(e){n(e)}}function a(e){try{l(r.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,a)}l((r=r.apply(e,t||[])).next())}))}function l(e,t){var i,r,o,n,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function a(n){return function(a){return function(n){if(i)throw new TypeError("Generator is already executing.");for(;s;)try{if(i=1,r&&(o=2&n[0]?r.return:n[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,n[1])).done)return o;switch(r=0,o&&(n=[2&n[0],o.value]),n[0]){case 0:case 1:o=n;break;case 4:return s.label++,{value:n[1],done:!1};case 5:s.label++,r=n[1],n=[0];continue;case 7:n=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==n[0]&&2!==n[0])){s=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]0?(s=!1,c=o.childDevices.references.map((function(e){return a(p,void 0,void 0,(function(){var t,i;return l(this,(function(r){switch(r.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return t=r.sent(),(i=t.data).hasOwnProperty("c8y_Availability")&&(s="AVAILABLE"===i.c8y_Availability.status),[2]}}))}))})),s?o.hasOwnProperty("c8y_Availability")?"AVAILABLE"===o.c8y_Availability.status?i=1:r=1:i=1:r=1,[4,Promise.all(c)]):[3,3]):[3,5];case 2:return d.sent(),[3,4];case 3:o.hasOwnProperty("c8y_Availability")&&"AVAILABLE"===o.c8y_Availability.status?i=1:r=1,d.label=4;case 4:return[3,8];case 5:return o.childAssets.references.length>0?(c=o.childAssets.references.map((function(e){return a(p,void 0,void 0,(function(){var t,o,n,s,c=this;return l(this,(function(p){switch(p.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return t=p.sent(),(o=t.data).hasOwnProperty("c8y_Availability")?("AVAILABLE"===o.c8y_Availability.status?i+=1:r+=1,[3,5]):[3,2];case 2:return o.hasOwnProperty("c8y_IsAsset")?(n=!1,o.childAssets.references.length>0?(s=o.childAssets.references.map((function(e){return a(c,void 0,void 0,(function(){var t,i;return l(this,(function(r){switch(r.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return t=r.sent(),i=t.data,n=!!i.hasOwnProperty("c8y_Availability")&&"AVAILABLE"===i.c8y_Availability.status,[2]}}))}))})),[4,Promise.all(s)]):[3,4]):[3,5];case 3:p.sent(),p.label=4;case 4:n?i+=1:r+=1,p.label=5;case 5:return[2]}}))}))})),[4,Promise.all(c)]):[3,7];case 6:d.sent(),d.label=7;case 7:t=n.data.childAssets.references.length,d.label=8;case 8:return[2,{totalDevices:t,availableDevices:i,unavailableDevices:r}]}}))}))},e.prototype.getFirmwareRisks=function(e){return a(this,void 0,void 0,(function(){var t,i,r,o,n,s,c,p,d,u=this;return l(this,(function(h){switch(h.label){case 0:return t=0,i=0,r=0,o=0,[4,this.inventory.list({type:"sag_racm_currentFirmware"})];case 1:return(n=h.sent()).data.length>0&&(this.latestFirmwareVersion=n.data[0].firmware.version),s=null,[4,this.inventory.detail(e)];case 2:return c=h.sent(),(s=c.data).hasOwnProperty("c8y_IsDevice")?(p=this.calculateRiskCount(s),t=p.highRisk,i=p.mediumRisk,r=p.lowRisk,o=p.noRisk,[3,5]):[3,3];case 3:return s.childAssets.references.length>0?(d=s.childAssets.references.map((function(e){return a(u,void 0,void 0,(function(){var n,c,p,d,u=this;return l(this,(function(h){switch(h.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return n=h.sent(),(c=n.data).hasOwnProperty("c8y_IsDevice")?(p=this.calculateRiskCount(s),t=p.highRisk,i=p.mediumRisk,r=p.lowRisk,o=p.noRisk,[3,4]):[3,2];case 2:return c.hasOwnProperty("c8y_IsAsset")&&c.childAssets.references.length>0?(d=c.childAssets.references.map((function(e){return a(u,void 0,void 0,(function(){var n,a;return l(this,(function(l){switch(l.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return n=l.sent(),n.data.hasOwnProperty("c8y_IsDevice")&&(a=this.calculateRiskCount(s),t=a.highRisk,i=a.mediumRisk,r=a.lowRisk,o=a.noRisk),[2]}}))}))})),[4,Promise.all(d)]):[3,4];case 3:h.sent(),h.label=4;case 4:return[2]}}))}))})),[4,Promise.all(d)]):[3,5];case 4:h.sent(),h.label=5;case 5:return[2,{highRiskCount:t,mediumRiskCount:i,lowRiskCount:r,noRiskCount:o}]}}))}))},e.prototype.calculateRiskCount=function(e){var t=!1,i=0,r=0,o=0,n=0;if(e){var s=e.c8y_Firmware,a=0;s&&s.version&&(a=s.version-this.latestFirmwareVersion),a<=0&&(t=!0),t&&t&&(a>=0?i+=1:-1===a?r+=1:-2===a?o+=1:a<=-3&&(n+=1))}return{noRisk:i,lowRisk:r,mediumRisk:o,highRisk:n}},e.prototype.getAlarms=function(e){return a(this,void 0,void 0,(function(){var t,i,r,o,n,s,c,p=this;return l(this,(function(d){switch(d.label){case 0:return 0,t=0,i=0,r=0,o=null,[4,this.inventory.detail(e)];case 1:return n=d.sent(),(o=n.data).hasOwnProperty("c8y_IsDevice")?(s=this.calculateAlarmsCount(o),i=s.minorAlerts,t=s.majorAlerts,r=s.criticalAlerts,[3,4]):[3,2];case 2:return o.childAssets.references.length>0?(c=o.childAssets.references.map((function(e){return a(p,void 0,void 0,(function(){var o,n,s,c,p=this;return l(this,(function(d){switch(d.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return o=d.sent(),(n=o.data).hasOwnProperty("c8y_IsDevice")?(s=this.calculateAlarmsCount(n),i=s.minorAlerts,t=s.majorAlerts,r=s.criticalAlerts,[3,4]):[3,2];case 2:return n.hasOwnProperty("c8y_IsAsset")&&n.childAssets.references.length>0?(c=n.childAssets.references.map((function(e){return a(p,void 0,void 0,(function(){var o,n,s;return l(this,(function(a){switch(a.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return o=a.sent(),(n=o.data).hasOwnProperty("c8y_IsDevice")&&(s=this.calculateAlarmsCount(n),i=s.minorAlerts,t=s.majorAlerts,r=s.criticalAlerts),[2]}}))}))})),[4,Promise.all(c)]):[3,4];case 3:d.sent(),d.label=4;case 4:return[2]}}))}))})),[4,Promise.all(c)]):[3,4];case 3:d.sent(),d.label=4;case 4:return[2,{totalAlarms:t+i+r,majorAlertsCount:t,minorAlertsCount:i,criticalAlertsCount:r}]}}))}))},e.prototype.calculateAlarmsCount=function(e){var t=0,i=0,r=0,o=e.c8y_ActiveAlarmsStatus;return void 0!==o&&(o.hasOwnProperty("minor")&&o.minor>0&&(t+=e.c8y_ActiveAlarmsStatus.minor),o.hasOwnProperty("major")&&o.major>0&&(i+=e.c8y_ActiveAlarmsStatus.major),o.hasOwnProperty("critical")&&o.critical>0&&(r+=e.c8y_ActiveAlarmsStatus.critical)),{minorAlerts:t,majorAlerts:i,criticalAlerts:r}},e.prototype.getNewKPICount=function(e,t){return a(this,void 0,void 0,(function(){var i,r,o,n,s=this;return l(this,(function(c){switch(c.label){case 0:return i=0,r=null,[4,this.inventory.detail(e)];case 1:return o=c.sent(),(r=o.data).hasOwnProperty("c8y_IsDevice")&&r.hasOwnProperty(t)?(i=1,[3,5]):[3,2];case 2:return r.childAssets.references.length>0?(n=r.childAssets.references.map((function(e){return a(s,void 0,void 0,(function(){var r,o,n,s=this;return l(this,(function(c){switch(c.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return r=c.sent(),(o=r.data).hasOwnProperty(t)?(i+=1,[3,4]):[3,2];case 2:return o.hasOwnProperty("c8y_IsAsset")&&o.childAssets.references.length>0?(n=o.childAssets.references.map((function(e){return a(s,void 0,void 0,(function(){var r;return l(this,(function(o){switch(o.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return r=o.sent(),r.data.hasOwnProperty(t)&&(i+=1),[2]}}))}))})),[4,Promise.all(n)]):[3,4];case 3:c.sent(),c.label=4;case 4:return[2]}}))}))})),[4,Promise.all(n)]):[3,4];case 3:return c.sent(),[3,5];case 4:i=0,c.label=5;case 5:return[2,i]}}))}))},e.prototype.getNewKPIValue=function(e,t){return a(this,void 0,void 0,(function(){var i,r,o,n,s=this;return l(this,(function(c){switch(c.label){case 0:return i=null,[4,this.inventory.detail(e)];case 1:return o=c.sent(),(i=o.data).hasOwnProperty("c8y_IsDevice")&&i.hasOwnProperty(t)?(r=i[t],[3,5]):[3,2];case 2:return i.childAssets.references.length>0?(n=i.childAssets.references.map((function(e){return a(s,void 0,void 0,(function(){var o,n,s,c=this;return l(this,(function(p){switch(p.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return o=p.sent(),(n=o.data).hasOwnProperty(t)?(r+=i[t],[3,4]):[3,2];case 2:return n.hasOwnProperty("c8y_IsAsset")&&n.childAssets.references.length>0?(s=n.childAssets.references.map((function(e){return a(c,void 0,void 0,(function(){var o;return l(this,(function(n){switch(n.label){case 0:return[4,this.inventory.detail(e.managedObject.id)];case 1:return o=n.sent(),o.data.hasOwnProperty(t)&&(r+=i[t]),[2]}}))}))})),[4,Promise.all(s)]):[3,4];case 3:p.sent(),p.label=4;case 4:return[2]}}))}))})),[4,Promise.all(n)]):[3,4];case 3:return c.sent(),[3,5];case 4:r="",c.label=5;case 5:return[2,r]}}))}))},e}();c.decorators=[{type:t.Injectable}],c.ctorParameters=function(){return[{type:i.InventoryService}]};var p=function(){function e(e){this.kpiService=e,this.device={id:""},this.kpi={title:"",topMargin:"",icon:"",value:0,unit:"",color:"",bgcolor:"",unitColor:"",titleColor:"",messageColor:"",otherKPIName:"",otherKPIMetric:"",kpiName:"",message:"",titleSize:20,messageSize:10,kpiSize:30,unitSize:20,imageSize:60,containerHeight:80,default:{color:"",bgcolor:""}}}return e.prototype.ngOnInit=function(){this.device.id=r.get(this.config,"device.id"),void 0===this.device.id||this.device.id.length,this.kpi.title=r.get(this.config,"customwidgetdata.metadata.title"),void 0!==this.kpi.title&&0!==this.kpi.title.length||(this.kpi.title="Default Title"),this.kpi.kpiName=r.get(this.config,"customwidgetdata.kpi.kpiName"),void 0!==this.kpi.kpiName&&0!==this.kpi.kpiName.length||(this.kpi.kpiName="totalDevices"),this.kpi.icon=r.get(this.config,"customwidgetdata.metadata.icon"),void 0!==this.kpi.icon&&0!==this.kpi.icon.length||(this.kpi.icon="data:image/png;base64,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"),this.kpi.message=r.get(this.config,"customwidgetdata.kpi.message"),void 0!==this.kpi.message&&0!==this.kpi.message.length||(this.kpi.message=""),this.kpi.default.color=r.get(this.config,"customwidgetdata.kpi.color"),void 0!==this.kpi.default.color&&0===this.kpi.default.color.indexOf("#")||(this.kpi.default.color="#b0b0b0"),this.kpi.color=this.kpi.default.color,this.kpi.default.bgcolor=r.get(this.config,"customwidgetdata.kpi.bgcolor"),void 0!==this.kpi.default.bgcolor&&0===this.kpi.default.bgcolor.indexOf("#")||(this.kpi.default.bgcolor="#FFFFFF"),this.kpi.bgcolor=this.kpi.default.bgcolor,this.kpi.titleColor=r.get(this.config,"customwidgetdata.kpi.titleColor"),void 0!==this.kpi.titleColor&&0===this.kpi.titleColor.indexOf("#")||(this.kpi.titleColor="#b0b0b0"),this.kpi.unitColor=r.get(this.config,"customwidgetdata.kpi.unitColor"),void 0!==this.kpi.unitColor&&0===this.kpi.unitColor.indexOf("#")||(this.kpi.unitColor="#b0b0b0"),this.kpi.messageColor=r.get(this.config,"customwidgetdata.kpi.messageColor"),void 0!==this.kpi.messageColor&&0===this.kpi.messageColor.indexOf("#")||(this.kpi.messageColor="#808080"),this.kpi.unit=r.get(this.config,"customwidgetdata.kpi.unit"),this.kpi.titleSize=r.get(this.config,"customwidgetdata.kpi.titleSize"),this.kpi.kpiSize=r.get(this.config,"customwidgetdata.kpi.kpiSize"),this.kpi.unitSize=r.get(this.config,"customwidgetdata.kpi.unitSize"),this.kpi.messageSize=r.get(this.config,"customwidgetdata.kpi.messageSize"),this.kpi.imageSize=r.get(this.config,"customwidgetdata.kpi.imageSize"),this.kpi.value=null,this.getDeviceData()},e.prototype.ngAfterViewInit=function(){this.configureTopMarginRequired()},e.prototype.configureTopMarginRequired=function(){var e=this;document.querySelectorAll(".dashboard-grid-child").forEach((function(t){var i=t.querySelector("div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget");if(null!=i){var r=t.querySelector("div > div > div > c8y-dashboard-child-title"),o=window.getComputedStyle(r).getPropertyValue("display");e.kpi.topMargin=null!=o&&"none"===o?"25px":"0"}}))},e.prototype.getDeviceData=function(){return a(this,void 0,void 0,(function(){var e;return l(this,(function(t){switch(t.label){case 0:return null===this.kpi.kpiName||""===this.kpi.kpiName?[3,28]:"totalDevices"!==this.kpi.kpiName?[3,2]:[4,this.kpiService.getDevicesAvailability(this.device.id)];case 1:return(e=t.sent())&&(this.kpi.value=e.totalDevices),[3,28];case 2:return"available"!==this.kpi.kpiName?[3,4]:[4,this.kpiService.getDevicesAvailability(this.device.id)];case 3:return(e=t.sent())&&(this.kpi.value=e.availableDevices),[3,28];case 4:return"unavailable"!==this.kpi.kpiName?[3,6]:[4,this.kpiService.getDevicesAvailability(this.device.id)];case 5:return(e=t.sent())&&(this.kpi.value=e.unavailableDevices),[3,28];case 6:return"totalAlarms"!==this.kpi.kpiName?[3,8]:[4,this.kpiService.getAlarms(this.device.id)];case 7:return(e=t.sent())&&(this.kpi.value=e.totalAlarms),[3,28];case 8:return"major"!==this.kpi.kpiName?[3,10]:[4,this.kpiService.getAlarms(this.device.id)];case 9:return(e=t.sent())&&(this.kpi.value=e.majorAlertsCount),[3,28];case 10:return"minor"!==this.kpi.kpiName?[3,12]:[4,this.kpiService.getAlarms(this.device.id)];case 11:return(e=t.sent())&&(this.kpi.value=e.minorAlertsCount),[3,28];case 12:return"critical"!==this.kpi.kpiName?[3,14]:[4,this.kpiService.getAlarms(this.device.id)];case 13:return(e=t.sent())&&(this.kpi.value=e.criticalAlertsCount),[3,28];case 14:return"highRisk"!==this.kpi.kpiName?[3,16]:[4,this.kpiService.getFirmwareRisks(this.device.id)];case 15:return(e=t.sent())&&(this.kpi.value=e.highRiskCount),[3,28];case 16:return"mediumRisk"!==this.kpi.kpiName?[3,18]:[4,this.kpiService.getFirmwareRisks(this.device.id)];case 17:return(e=t.sent())&&(this.kpi.value=e.mediumRiskCount),[3,28];case 18:return"lowRisk"!==this.kpi.kpiName?[3,20]:[4,this.kpiService.getFirmwareRisks(this.device.id)];case 19:return(e=t.sent())&&(this.kpi.value=e.lowRiskCount),[3,28];case 20:return"noRisk"!==this.kpi.kpiName?[3,22]:[4,this.kpiService.getFirmwareRisks(this.device.id)];case 21:return(e=t.sent())&&(this.kpi.value=e.noRiskCount),[3,28];case 22:return"other"!==this.kpi.kpiName?[3,27]:"value"!==this.kpi.otherKPIMetric?[3,24]:[4,this.kpiService.getNewKPIValue(this.device.id,this.kpi.otherKPIName)];case 23:return(e=t.sent())&&(this.kpi.value=e),[3,26];case 24:return"count"!==this.kpi.otherKPIMetric?[3,26]:[4,this.kpiService.getNewKPICount(this.device.id,this.kpi.otherKPIName)];case 25:(e=t.sent())&&(this.kpi.value=e),t.label=26;case 26:return[3,28];case 27:this.kpi.value=0,t.label=28;case 28:return[2]}}))}))},e.prototype.getKPITitle=function(){return this.kpi.title},e.prototype.getKPITitleTopMargin=function(){return this.kpi.topMargin},e.prototype.getKPIIcon=function(){return this.kpi.icon},e.prototype.getKPIContainerHeight=function(){return"90px"},e.prototype.getKPIValue=function(){return this.kpi.value},e.prototype.getKPIUnit=function(){return this.kpi.unit},e.prototype.getKPIName=function(){return this.kpi.kpiName},e.prototype.getKPIColor=function(){return this.kpi.color},e.prototype.getTitleColor=function(){return this.kpi.titleColor},e.prototype.getUnitColor=function(){return this.kpi.unitColor},e.prototype.getMessageColor=function(){return this.kpi.messageColor},e.prototype.getKPIBgColor=function(){return this.kpi.bgcolor},e.prototype.getOtherKPIName=function(){return this.kpi.otherKPIName},e.prototype.getOtherKPIMetric=function(){return this.kpi.otherKPIMetric},e.prototype.getKPIMessage=function(){return this.kpi.message},e.prototype.getKPISize=function(){return this.kpi.kpiSize+"px"},e.prototype.getTitleSize=function(){return this.kpi.titleSize+"px"},e.prototype.getMessageSize=function(){return this.kpi.messageSize+"px"},e.prototype.getUnitSize=function(){return this.kpi.unitSize+"px"},e.prototype.getImageSize=function(){return this.kpi.imageSize+"px"},e.prototype.getContainerHeight=function(){return this.kpi.imageSize>this.kpi.titleSize&&this.kpi.imageSize>this.kpi.kpiSize?this.kpi.containerHeight=this.kpi.imageSize+10:this.kpi.titleSize>this.kpi.kpiSize?this.kpi.containerHeight=this.kpi.titleSize+10:this.kpi.containerHeight=this.kpi.kpiSize+10,this.kpi.containerHeight+"px"},e}();p.decorators=[{type:t.Component,args:[{selector:"lib-gp-kpi-overview-widget",template:'
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI title --\x3e\r\n

{{getKPITitle()}}

\r\n \r\n \x3c!-- KPI value and unit --\x3e\r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \x3c!-- KPI text --\x3e\r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n'}]}],p.ctorParameters=function(){return[{type:c}]},p.propDecorators={config:[{type:t.Input}]};var d="data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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",u=function(){function e(){this.config={},this.kpiColorPickerClosed=!0,this.kpiBgColorPickerClosed=!0,this.titleColorPickerClosed=!0,this.kpiUnitColorPickerClosed=!0,this.messageColorPickerClosed=!0,this.widgetInfo={metadata:{title:"",icon:""},kpi:{color:"#b0b0b0",unit:"",bgcolor:"#FFFFFF",kpiName:"",message:"",otherKPIValue:"",otherKPIName:"",titleColor:"#808080",unitColor:"#b0b0b0",messageColor:"#808080",titleSize:20,messageSize:10,unitSize:20,kpiSize:30,imageSize:60}},this.kpiNamesList=[{id:"totalDevices",text:"Total Devices"},{id:"available",text:"Available Devices"},{id:"unavailable",text:"Unavailable Devices"},{id:"totalAlarms",text:"Total Alarms"},{id:"major",text:"Major Alarms"},{id:"minor",text:"Minor Alarms"},{id:"critical",text:"Critical Alarms"},{id:"highRisk",text:"High Risk"},{id:"mediumRisk",text:"Medium Risk"},{id:"lowRisk",text:"Low Risk"},{id:"noRisk",text:"No Risk"},{id:"other",text:"Other Property"}]}return e.prototype.ngOnInit=function(){return a(this,void 0,void 0,(function(){return l(this,(function(e){return r.has(this.config,"customwidgetdata")?this.widgetInfo=r.get(this.config,"customwidgetdata"):r.set(this.config,"customwidgetdata",this.widgetInfo),[2]}))}))},e.prototype.updateIconInConfig=function(e){var t=this,i=e.target.files[0],o=new FileReader;o.readAsDataURL(i),o.onload=function(){t.widgetInfo.metadata.icon=o.result,r.set(t.config,"customwidgetdata",t.widgetInfo)}},e.prototype.updateConfig=function(){r.set(this.config,"customwidgetdata",this.widgetInfo)},e.prototype.setSelectedColorForKPI=function(e){this.widgetInfo.kpi.color=e,this.updateConfig()},e.prototype.closeKPIColorPicker=function(){this.kpiColorPickerClosed=!0},e.prototype.openKPIColorPicker=function(){this.kpiColorPickerClosed=!1},e.prototype.setSelectedColorForTitle=function(e){this.widgetInfo.kpi.titleColor=e,this.updateConfig()},e.prototype.closeTitleColorPicker=function(){this.titleColorPickerClosed=!0},e.prototype.openTitleColorPicker=function(){this.titleColorPickerClosed=!1},e.prototype.setSelectedColorForKPIUnit=function(e){this.widgetInfo.kpi.unitColor=e,this.updateConfig()},e.prototype.closeKPIUnitColorPicker=function(){this.kpiUnitColorPickerClosed=!0},e.prototype.openKPIUnitColorPicker=function(){this.kpiUnitColorPickerClosed=!1},e.prototype.setSelectedColorForMessage=function(e){this.widgetInfo.kpi.messageColor=e,this.updateConfig()},e.prototype.closeMessageColorPicker=function(){this.messageColorPickerClosed=!0},e.prototype.openMessageColorPicker=function(){this.messageColorPickerClosed=!1},e.prototype.closeKPIBgColorPicker=function(){this.kpiBgColorPickerClosed=!0},e.prototype.openKPIBgColorPicker=function(){this.kpiBgColorPickerClosed=!1},e.prototype.setSelectedColorForBackground=function(e){this.widgetInfo.kpi.bgcolor=e,this.updateConfig()},e}();u.decorators=[{type:t.Component,args:[{selector:"lib-gp-kpi-overview-widget-config",template:'\r\n\r\n\r\n
\r\n\r\n
\r\n \x3c!-- KPI title --\x3e\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \x3c!-- Upload icon--\x3e\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \x3c!-- KPI Name --\x3e\r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Unit --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Message --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \x3c!-- KPI color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI Title color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Unit color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI Message color --\x3e\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \x3c!-- KPI Background color --\x3e\r\n \x3c!-- \r\n \r\n \r\n --\x3e\r\n\r\n
',styles:[".showColorPicker{display:block}.hideColorPicker{display:none}"]}]}],u.ctorParameters=function(){return[]},u.propDecorators={config:[{type:t.Input}]};var h=function(){function e(e){this.eRef=e,this.colorSet=new t.EventEmitter(!0),this.colorPickerClosed=new t.EventEmitter,this.colorType="hexa"}return e.prototype.closeColorPicker=function(){this.colorPickerClosed.emit(!0)},e.prototype.applyColorClicked=function(){void 0!==this.color&&("hexa"===this.colorType?this.colorSet.emit(this.RGBAToHexA(this.color)):this.colorSet.emit(this.color))},e.prototype.RGBAToHexA=function(e){var t=e.indexOf(",")>-1?",":" ";(e=e.substr(5).split(")")[0].split(t)).indexOf("/")>-1&&e.splice(3,1);var i=(+e[0]).toString(16),r=(+e[1]).toString(16),o=(+e[2]).toString(16),n=Math.round(255*+e[3]).toString(16);return 1===i.length&&(i="0"+i),1===r.length&&(r="0"+r),1===o.length&&(o="0"+o),1===n.length&&(n="0"+n),"#"+i+r+o+n},e}();h.decorators=[{type:t.Component,args:[{selector:"app-color-picker",template:'\x3c!--\n RGBA\n HEXA\n--\x3e\n
\n \n \n
\n \n \n
\n
\n \n\n\n ',styles:[".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"]}]}],h.ctorParameters=function(){return[{type:t.ElementRef}]},h.propDecorators={colorSet:[{type:t.Output}],colorPickerClosed:[{type:t.Output}]};var g=function(){function e(){this.color=new t.EventEmitter(!0),this.mousedown=!1}return e.prototype.ngAfterViewInit=function(){this.draw()},e.prototype.onMouseDown=function(e){this.mousedown=!0,this.selectedHeight=e.offsetY,this.draw(),this.emitColor(e.offsetX,e.offsetY)},e.prototype.onMouseMove=function(e){this.mousedown&&(this.selectedHeight=e.offsetY,this.draw(),this.emitColor(e.offsetX,e.offsetY))},e.prototype.onMouseUp=function(e){this.mousedown=!1},e.prototype.emitColor=function(e,t){var i=this.getColorAtPosition(e,t);this.color.emit(i)},e.prototype.getColorAtPosition=function(e,t){var i=this.ctx.getImageData(e,t,1,1).data;return"rgba("+i[0]+","+i[1]+","+i[2]+",1)"},e.prototype.draw=function(){this.ctx||(this.ctx=this.canvas.nativeElement.getContext("2d"));var e=this.canvas.nativeElement.width,t=this.canvas.nativeElement.height;this.ctx.clearRect(0,0,e,t);var i=this.ctx.createLinearGradient(0,0,0,t);i.addColorStop(0,"rgba(255, 0, 0, 1)"),i.addColorStop(.17,"rgba(255, 255, 0, 1)"),i.addColorStop(.34,"rgba(0, 255, 0, 1)"),i.addColorStop(.51,"rgba(0, 255, 255, 1)"),i.addColorStop(.68,"rgba(0, 0, 255, 1)"),i.addColorStop(.85,"rgba(255, 0, 255, 1)"),i.addColorStop(1,"rgba(255, 0, 0, 1)"),this.ctx.beginPath(),this.ctx.rect(0,0,e,t),this.ctx.fillStyle=i,this.ctx.fill(),this.ctx.closePath(),this.selectedHeight&&(this.ctx.beginPath(),this.ctx.strokeStyle="white",this.ctx.lineWidth=5,this.ctx.rect(0,this.selectedHeight-5,e,10),this.ctx.stroke(),this.ctx.closePath())},e}();g.decorators=[{type:t.Component,args:[{selector:"app-color-slider",template:' '}]}],g.propDecorators={color:[{type:t.Output}],canvas:[{type:t.ViewChild,args:["canvas",{static:!0}]}],onMouseUp:[{type:t.HostListener,args:["window:mouseup",["$event"]]}]};var f=function(){function e(){this.color=new t.EventEmitter(!0),this.mousedown=!1}return e.prototype.ngAfterViewInit=function(){this.draw()},e.prototype.draw=function(){this.ctx||(this.ctx=this.canvas.nativeElement.getContext("2d"));var e=this.canvas.nativeElement.width,t=this.canvas.nativeElement.height;this.ctx.fillStyle=this.hue||"rgba(255,255,255,1)",this.ctx.fillRect(0,0,e,t);var i=this.ctx.createLinearGradient(0,0,e,0);i.addColorStop(0,"rgba(255,255,255,1)"),i.addColorStop(1,"rgba(255,255,255,0)"),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,e,t);var r=this.ctx.createLinearGradient(0,0,0,t);r.addColorStop(0,"rgba(0,0,0,0)"),r.addColorStop(1,"rgba(0,0,0,1)"),this.ctx.fillStyle=r,this.ctx.fillRect(0,0,e,t),this.selectedPosition&&(this.ctx.strokeStyle="white",this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.arc(this.selectedPosition.x,this.selectedPosition.y,10,0,2*Math.PI),this.ctx.lineWidth=5,this.ctx.stroke())},e.prototype.ngOnChanges=function(e){if(e.hue){this.draw();var t=this.selectedPosition;t&&this.color.emit(this.getColorAtPosition(t.x,t.y))}},e.prototype.onMouseUp=function(e){this.mousedown=!1},e.prototype.onMouseDown=function(e){this.mousedown=!0,this.selectedPosition={x:e.offsetX,y:e.offsetY},this.draw(),this.color.emit(this.getColorAtPosition(e.offsetX,e.offsetY))},e.prototype.onMouseMove=function(e){this.mousedown&&(this.selectedPosition={x:e.offsetX,y:e.offsetY},this.draw(),this.emitColor(e.offsetX,e.offsetY))},e.prototype.emitColor=function(e,t){var i=this.getColorAtPosition(e,t);this.color.emit(i)},e.prototype.getColorAtPosition=function(e,t){var i=this.ctx.getImageData(e,t,1,1).data;return"rgba("+i[0]+","+i[1]+","+i[2]+",1)"},e}();f.decorators=[{type:t.Component,args:[{selector:"app-color-palette",template:'\n',styles:[".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"]}]}],f.propDecorators={hue:[{type:t.Input}],color:[{type:t.Output}],canvas:[{type:t.ViewChild,args:["canvas",{static:!0}]}],onMouseUp:[{type:t.HostListener,args:["window:mouseup",["$event"]]}]};var v={id:"kpi-overview.widget",label:"KPI Overview",previewImage:d,description:"KPI Overview",component:p,configComponent:u,data:{ng1:{options:{noDeviceTarget:!1,noNewWidgets:!1,deviceTargetNotRequired:!1,groupsSelectable:!0}}}},m=function(){};m.decorators=[{type:t.NgModule,args:[{declarations:[p,u,h,g,f],imports:[n.NgSelectModule,s.FormsModule,o.CommonModule,o.CoreModule],exports:[p,u],entryComponents:[p,u],providers:[c,{provide:o.HOOK_COMPONENTS,multi:!0,useValue:v}]}]}],e.GpKpiOverviewWidgetComponent=p,e.GpKpiOverviewWidgetModule=m,e.GpKpiOverviewWidgetService=c,e.ɵ0=v,e.ɵa=u,e.ɵb=h,e.ɵc=g,e.ɵd=f,e.ɵe=d,Object.defineProperty(e,"__esModule",{value:!0})})); -//# sourceMappingURL=custom-widget.umd.min.js.map \ No newline at end of file diff --git a/runtime/dist/widget-library/bundles/custom-widget.umd.min.js.map b/runtime/dist/widget-library/bundles/custom-widget.umd.min.js.map deleted file mode 100644 index dae09cd..0000000 --- a/runtime/dist/widget-library/bundles/custom-widget.umd.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.service.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/preview-image.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-picker-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-slider/color-slider-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-palette/color-palette-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.module.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","Object","create","GpKpiOverviewWidgetService","inventory","prototype","getDevicesAvailability","deviceId","totalDevices","availableDevices","unavailableDevices","response","detail","_a","data","hasOwnProperty","childDevices","references","available_1","promises","map","childDevice","_this","managedObject","id","childInventory","childDeviceData","c8y_Availability","status","all","childAssets","ChildInventory","available_2","promises1","assetChildDevice","assetChildInventory","assetChildDeviceData","getFirmwareRisks","highRiskCount","mediumRiskCount","lowRiskCount","noRiskCount","list","type","firmwareData","latestFirmwareVersion","firmware","version","risks","calculateRiskCount","highRisk","mediumRisk","lowRisk","noRisk","device","atRisk","firmwareStatus","c8y_Firmware","versionIssues","getAlarms","majorAlertsCount","minorAlertsCount","criticalAlertsCount","alerts","calculateAlarmsCount","minorAlerts","majorAlerts","criticalAlerts","totalAlarms","activeAlerts","c8y_ActiveAlarmsStatus","undefined","minor","major","critical","getNewKPICount","newKPI","newKPICount","getNewKPIValue","newKPIValue","Injectable","InventoryService","GpKpiOverviewWidgetComponent","kpiService","kpi","title","topMargin","icon","unit","color","bgcolor","unitColor","titleColor","messageColor","otherKPIName","otherKPIMetric","kpiName","message","titleSize","messageSize","kpiSize","unitSize","imageSize","containerHeight","default","ngOnInit","_.get","config","indexOf","getDeviceData","ngAfterViewInit","configureTopMarginRequired","document","querySelectorAll","forEach","w","widgetElement","querySelector","widgetTitleElement","widgetTitleDisplayValue","window","getComputedStyle","getPropertyValue","getKPITitle","getKPITitleTopMargin","getKPIIcon","getKPIContainerHeight","getKPIValue","getKPIUnit","getKPIName","getKPIColor","getTitleColor","getUnitColor","getMessageColor","getKPIBgColor","getOtherKPIName","getOtherKPIMetric","getKPIMessage","getKPISize","getTitleSize","getMessageSize","getUnitSize","getImageSize","getContainerHeight","Component","args","selector","template","Input","previewImage","GpKpiOverviewWidgetConfigComponent","kpiColorPickerClosed","kpiBgColorPickerClosed","titleColorPickerClosed","kpiUnitColorPickerClosed","messageColorPickerClosed","widgetInfo","metadata","otherKPIValue","kpiNamesList","text","_.has","_.set","updateIconInConfig","$event","kpiIcon","target","files","reader","FileReader","readAsDataURL","onload","updateConfig","setSelectedColorForKPI","closeKPIColorPicker","openKPIColorPicker","setSelectedColorForTitle","closeTitleColorPicker","openTitleColorPicker","setSelectedColorForKPIUnit","closeKPIUnitColorPicker","openKPIUnitColorPicker","setSelectedColorForMessage","closeMessageColorPicker","openMessageColorPicker","closeKPIBgColorPicker","openKPIBgColorPicker","setSelectedColorForBackground","ColorPickerComponent","eRef","colorSet","EventEmitter","colorPickerClosed","colorType","closeColorPicker","emit","applyColorClicked","RGBAToHexA","rgba","sep","substr","split","splice","r","toString","b","a","Math","round","ElementRef","Output","ColorSliderComponent","mousedown","draw","onMouseDown","evt","selectedHeight","offsetY","emitColor","offsetX","onMouseMove","onMouseUp","x","rgbaColor","getColorAtPosition","imageData","ctx","getImageData","canvas","nativeElement","getContext","width","height","clearRect","gradient","createLinearGradient","addColorStop","beginPath","rect","fillStyle","fill","closePath","strokeStyle","lineWidth","stroke","ViewChild","static","HostListener","ColorPaletteComponent","hue","fillRect","whiteGrad","blackGrad","selectedPosition","arc","PI","ngOnChanges","changes","pos","preview.previewImage","description","component","configComponent","ng1","options","noDeviceTarget","noNewWidgets","deviceTargetNotRequired","groupsSelectable","NgModule","declarations","imports","NgSelectModule","FormsModule","CommonModule","CoreModule","exports","entryComponents","providers","provide","HOOK_COMPONENTS","multi","useValue","ɵ0"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ThrowStmt } from '@angular/compiler';\nimport { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\n\n\n@Injectable()\nexport class GpKpiOverviewWidgetService {\n latestFirmwareVersion: any;\n\n\n constructor(public inventory: InventoryService) {\n }\n\n async getDevicesAvailability(deviceId){\n let totalDevices = 0;\n let availableDevices = 0;\n let unavailableDevices = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n totalDevices = 1;\n\n if (response.childDevices.references.length > 0) {\n\n let available = false;\n const promises = response.childDevices.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n\n if (childDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n });\n if(available){\n if (response.hasOwnProperty('c8y_Availability')) {\n if (response.c8y_Availability.status === 'AVAILABLE') {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }else{\n availableDevices = 1;\n }\n }\n else{\n unavailableDevices = 1;\n }\n await Promise.all(promises);\n } else {\n if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }\n }\n else {\n if (response.childAssets.references.length > 0) {\n const promises = response.childAssets.references.map(async (childDevice) => {\n const ChildInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = ChildInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_Availability')) {\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n availableDevices += 1;\n }\n else{\n unavailableDevices += 1;\n }\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n let available = false;\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n else{\n available = false;\n }\n });\n await Promise.all(promises1);\n }\n if (available) {\n availableDevices += 1;\n }else{\n unavailableDevices += 1;\n }\n }\n });\n await Promise.all(promises);\n }\n totalDevices = inventory.data.childAssets.references.length;\n }\n return {totalDevices, availableDevices, unavailableDevices};\n }\n\n async getFirmwareRisks(deviceId){\n let highRiskCount = 0;\n let mediumRiskCount = 0;\n let lowRiskCount = 0;\n let noRiskCount = 0;\n const firmwareData = await this.inventory.list({ type: 'sag_racm_currentFirmware' });\n if (firmwareData.data.length > 0) {\n this.latestFirmwareVersion = firmwareData.data[0].firmware.version;\n }\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk;\n }\n else if(response.childAssets.references.length > 0){\n\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n return {highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount};\n }\n\n calculateRiskCount(device){\n let atRisk = false;\n let noRisk = 0;\n let lowRisk = 0;\n let mediumRisk = 0;\n let highRisk = 0;\n\n if (device) {\n const firmwareStatus = device.c8y_Firmware;\n let versionIssues = 0;\n if (firmwareStatus && firmwareStatus.version) {\n versionIssues = firmwareStatus.version - this.latestFirmwareVersion;\n }\n if (versionIssues <= 0) {\n atRisk = true; }\n if ( atRisk) {\n if (atRisk) {\n if (versionIssues >= 0) {\n noRisk += 1;\n } else if (versionIssues === -1) {\n lowRisk += 1;\n } else if (versionIssues === -2) {\n mediumRisk += 1;\n } else if (versionIssues <= -3) {\n highRisk += 1;\n }\n }\n }\n }\n return {noRisk, lowRisk, mediumRisk, highRisk}\n }\n async getAlarms(deviceId){\n let totalAlarms = 0;\n let majorAlertsCount = 0;\n let minorAlertsCount = 0;\n let criticalAlertsCount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(response);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(childDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(assetChildDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount;\n return {totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount};\n }\n\n\n calculateAlarmsCount(device){\n let minorAlerts = 0;\n let majorAlerts = 0;\n let criticalAlerts = 0;\n const activeAlerts = device.c8y_ActiveAlarmsStatus;\n if (activeAlerts !== undefined) {\n if (activeAlerts.hasOwnProperty('minor')) {\n if (activeAlerts.minor > 0) { minorAlerts += device.c8y_ActiveAlarmsStatus.minor; }\n }\n if (activeAlerts.hasOwnProperty('major')) {\n if (activeAlerts.major > 0) { majorAlerts += device.c8y_ActiveAlarmsStatus.major }\n }\n if (activeAlerts.hasOwnProperty('critical')) {\n if (activeAlerts.critical > 0) { criticalAlerts += device.c8y_ActiveAlarmsStatus.critical }\n }\n }\n return {minorAlerts, majorAlerts, criticalAlerts}\n }\n\n async getNewKPICount(deviceId, newKPI){\n let newKPICount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPICount = 1;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPICount = 0;\n }\n return newKPICount;\n }\n\n async getNewKPIValue(deviceId, newKPI){\n let response: any = null;\n let newKPIValue;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPIValue = response[newKPI];\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPIValue = '';\n }\n return newKPIValue;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport * as _ from 'lodash';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\n\n\ninterface Device {\n id: string;\n}\n\ninterface KPI {\n default: {\n color: string;\n bgcolor: string\n }\n title: string;\n icon: string;\n topMargin: string;\n color: string;\n bgcolor: string;\n unitColor: string;\n titleColor: string;\n messageColor: string;\n value: any;\n unit: string;\n message: string;\n kpiName: string;\n otherKPIName: string;\n otherKPIMetric: string;\n titleSize: number;\n messageSize: number;\n kpiSize: number;\n unitSize: number;\n imageSize: number;\n containerHeight: number;\n}\n\n@Component({\n selector: 'lib-gp-kpi-overview-widget',\n templateUrl: './gp-kpi-overview-widget.html',\n styles: []\n})\nexport class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit{\n\n @Input() config;\n\n private device: Device = {\n id: ''\n }\n\n private kpi: KPI = {\n title: '',\n topMargin: '',\n icon: '',\n value: 0,\n unit: '',\n color: '',\n bgcolor: '',\n unitColor: '',\n titleColor: '',\n messageColor: '',\n otherKPIName: '',\n otherKPIMetric: '',\n kpiName: '',\n message: '',\n titleSize: 20,\n messageSize: 10,\n kpiSize: 30,\n unitSize: 20,\n imageSize: 60,\n containerHeight: 80,\n default: {\n color: '',\n bgcolor: ''\n }\n }\n\n constructor(private kpiService: GpKpiOverviewWidgetService) { }\n\n ngOnInit() {\n\n // Get Device Id\n this.device.id = _.get(this.config, 'device.id');\n if(this.device.id === undefined || this.device.id.length === 0) {\n }\n // Get KPI Title\n this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title');\n if(this.kpi.title === undefined || this.kpi.title.length === 0) {\n this.kpi.title = 'Default Title';\n }\n // Get KPI Name\n this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName');\n if(this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) {\n this.kpi.kpiName = 'totalDevices';\n }\n // Get KPI Icon\n this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon');\n if(this.kpi.icon === undefined || this.kpi.icon.length === 0) {\n this.kpi.icon = 'data:image/png;base64,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';\n }\n // Get KPI Message\n this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message');\n if(this.kpi.message === undefined || this.kpi.message.length === 0) {\n this.kpi.message = '';\n }\n // Get KPI Color\n this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color');\n if(this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) {\n this.kpi.default.color = '#b0b0b0';\n }\n this.kpi.color = this.kpi.default.color;\n // Get Bg KPI Color\n this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor');\n if(this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) {\n this.kpi.default.bgcolor = '#FFFFFF';\n }\n this.kpi.bgcolor = this.kpi.default.bgcolor;\n\n // Get Title Color\n this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor');\n if(this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) {\n this.kpi.titleColor = '#b0b0b0';\n }\n\n // Get Unit Color\n this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor');\n if(this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) {\n this.kpi.unitColor = '#b0b0b0';\n }\n\n // Get message Color\n this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor');\n if(this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) {\n this.kpi.messageColor = '#808080';\n }\n // Get KPI Unit\n this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit');\n this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize');\n this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize');\n this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize');\n this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize');\n this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize');\n this.kpi.value = null;\n this.getDeviceData();\n }\n\n ngAfterViewInit() {\n this.configureTopMarginRequired();\n }\n\n // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not.\n private configureTopMarginRequired(): void {\n const allWidgets: NodeListOf = document.querySelectorAll('.dashboard-grid-child');\n allWidgets.forEach((w:Element) => {\n const widgetElement: Element = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget');\n if(widgetElement !== undefined && widgetElement !== null) {\n const widgetTitleElement: Element = w.querySelector('div > div > div > c8y-dashboard-child-title');\n const widgetTitleDisplayValue: string = window.getComputedStyle(widgetTitleElement).getPropertyValue('display');\n if(widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') {\n this.kpi.topMargin = '25px';\n } else {\n this.kpi.topMargin = '0';\n }\n }\n });\n }\n async getDeviceData() {\n if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') {\n\n if (this.kpi.kpiName === 'totalDevices'){\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.totalDevices;\n }\n }\n else if (this.kpi.kpiName === 'available') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.availableDevices;\n }\n }\n else if (this.kpi.kpiName === 'unavailable') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.unavailableDevices;\n }\n }\n else if (this.kpi.kpiName === 'totalAlarms') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.totalAlarms;\n }\n }\n else if (this.kpi.kpiName === 'major') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.majorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'minor') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.minorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'critical') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.criticalAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'highRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.highRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'mediumRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.mediumRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'lowRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.lowRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'noRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.noRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'other') {\n\n if (this.kpi.otherKPIMetric === 'value') {\n const result = await this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n else if(this.kpi.otherKPIMetric === 'count') {\n const result = await this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n }\n else{\n this.kpi.value = 0;\n }\n }\n }\n // Getter KPI Title\n public getKPITitle(): string {\n return this.kpi.title;\n }\n // Getter KPI Title Top Margin\n public getKPITitleTopMargin() {\n return this.kpi.topMargin;\n }\n // Getter KPI Icon\n public getKPIIcon(): string {\n return this.kpi.icon;\n }\n // Get KPI Container Height\n public getKPIContainerHeight(): string {\n return '90px';\n }\n // Getter KPI Value\n public getKPIValue() {\n return this.kpi.value;\n }\n // Getter KPI Unit\n public getKPIUnit() {\n return this.kpi.unit;\n }\n // Getter KPI Name\n public getKPIName() {\n return this.kpi.kpiName;\n }\n // Getter KPI Color\n public getKPIColor() {\n return this.kpi.color;\n }\n // Getter Title Color\n public getTitleColor() {\n return this.kpi.titleColor;\n }\n // Getter Unit Color\n public getUnitColor() {\n return this.kpi.unitColor;\n }\n // Getter Message Color\n public getMessageColor() {\n return this.kpi.messageColor;\n }\n // Getter KPI background Color\n public getKPIBgColor() {\n return this.kpi.bgcolor;\n }\n // Getter Other KPI Name\n public getOtherKPIName() {\n return this.kpi.otherKPIName;\n }\n // Getter Other KPI metric\n public getOtherKPIMetric() {\n return this.kpi.otherKPIMetric;\n }\n // Getter Other KPI Message\n public getKPIMessage() {\n return this.kpi.message;\n }\n public getKPISize() {\n return this.kpi.kpiSize + 'px';\n }\n public getTitleSize() {\n return this.kpi.titleSize + 'px';\n }\n public getMessageSize() {\n return this.kpi.messageSize + 'px';\n }\n public getUnitSize() {\n return this.kpi.unitSize + 'px';\n }\n public getImageSize() {\n return this.kpi.imageSize + 'px';\n }\n\n public getContainerHeight(){\n if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) {\n this.kpi.containerHeight = this.kpi.imageSize + 10;\n } else if(this.kpi.titleSize > this.kpi.kpiSize){\n this.kpi.containerHeight = this.kpi.titleSize + 10;\n }else{\n this.kpi.containerHeight = this.kpi.kpiSize + 10;\n }\n return this.kpi.containerHeight + 'px';\n }\n}\n","/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n*/\r\n\r\n\r\n// tslint:disable-next-line: max-line-length\r\nexport const previewImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb0AAAETCAIAAAAtWk+NAAAx10lEQVR42u3deVwTZ/4H8OFMwBBBURHxQLQCCi0qFg/Eq7hQsWo9qFRd9aWtVavduku7/lYrXXeLxVWXWlqtttpiPahWqVqpolSt7IJgxaOVxYuICAghBEgg4O+bTAgJJCGDIEo+7z/aZDJ55sB88n1mnplYiEslDAAAmMyiVFLW1usAAPAssaiqqra2tmrr1QAAeHopFDXyqqra2lr2qYXmEQAAGKJQKCplcvYxchMAwCTiUomVlbJ3jtwEADBJibjU2tqaQW4CAJgIuQkAwE19bj569KitVwYA4BmA3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwGgXbl7925GRgb7ePDgwb169WrxRSA3AaBdyczMTEtLYx/7+/v7+fm1+CJaIDerq6uPHTsmFArHjh3LTpFKpd9//z3F/KhRo7Kyso4ePaqZuUOHDvQNMGzYMB6P1/iNGrQyN2/eTElJyc/Pp7f4q9jY2JSUlOzbt2/MmDGenp4NVoBmCwwM/PHHH69evardlKur68yZM4uKir755hvNxE6dOtE6+Pr6lpWVGWlw3LhxtA4SiSQ0NJSm08TGjb/yyiu0UB8fn0GDBrETf/3110uXLs2YMcPe3p6elpeX79+/n7axT58+Lf73AwBCH2QKMjs7O/rw/vzzzzk5Oex0Dw+P0aNHU3RUVlYqFAoHB4cWWVzL52ZVVdWJEyfowcSJE21tbSlELl68OGXKFD6fTxNLS0uTk5M7duxIrzKqJGqcm7Qmly9fPnfu3Pjx43v27El7hHYE7RF6C63ryZMnafvpMft7coQykYJp0qRJ3bt3pwZpTsprTWuWlpaU0bm5uYcPH546dSolJk2kOE5KSqLcDAgIMNIgRf/p06e1c7Nx47SNNA89ppC1sLCoqamhzb9x48Zrr73WrVs3mp6Xl/fDDz9Mnz6dXTQAtCzKRPoU379/v0uXLvSY6jbtVwUCAX1sCwsLKR8mTJhAjx9/iS2cm7W1tZR39+7dCwsLo9VlVMUXlc1U8bHFF3nw4MGRI0cowig99eYmFZUUWxSa/fr1Y6dQch04cGD48OHe3t70TXLq1Clq0NHRkX2VFnHlypVXX32Vgs9QAXv37t3ExMRZs2Y5Oztr3kWoHVpbQw1S1jfITb2N//bbb1RWU+FJGUopT1snl8uHDBny/PPP06vU1PXr19lXW+ofCgBoUC/w/Pnzpsw5cuTIgQMHPv4SWzI3qbdLdSLFBGUEG5qMvtykau7QoUOTJ0+m+ktvElEM0VsoWNkSlVFVoNRfrqiooKqQ/puQkEAZyvas2aVTGo4YMYLKRtNzk5by3//+l1aMWjDUINWPpuQmfRNQRckWs1TY0jfHgAEDqKSltaWClOprCvSgoCBq7fH/YACgjSqVH3/8kYotzRTqjFPJQrUn1ZiUPzSD5iUnJ6c//OEPj99bb8ncdHd3p84vxQetsebVBrlJhRjFSkFBAc1mqDykiBSLxRRVNjY22u1Q55cSmSZqMpRaoBT+7rvvqLx1dXU1csBUOzdpS4uLi48ePUorTN8/FGeGGqQ3mpKb9F4qhykZ+/Tpk5aWVl5ePmjQINoV1AiPxzt8+LCPj4/28VMAaCn0caY+aGpqKn0MGVVoUjJSPrKvUp5SqrLRSR9G+rx7eHg8fgXTYrlJSUe1lVQqDQkJ0T4BQnmnfV6I9O7dmzasc+fOhmJOE1UNclOTvyKR6MSJE9SPpp71xYsXb9++TQlFvWC2wQanbl5//fVevXpRbmqfF6J8HDVq1IsvvshuvKEGmUa5qbdx9pgmfVu88MILNA91BGgi9daHDRtGdTc9mDRpkqbOBYAWl52dzZ5m8PLyonCkLGKn19bWUhf++vXr9Jhypn///i2yuBbLTeqrTps2jSLmzJkzVEtq8r7BeSGKfM3pF0O5abzepDiTyWRUEg4ZMqRv375URVJM02NNgw1O3bBLpNzUnBd6+PAhvWvy5Mlubm7sPIYaZBrlpt7GGdXQBwpf6uz/9NNP9M1B+Ut/LVpVCtMLFy5oH3MAgBb3+++/U27QA+rq0cdQU1FSrNEH8MqVK/SYeoQDBgxokcW1ynmh0tJS9mQ6o+/4pt43ak//7bffKGrZ0zKajdfuStMUSiVaip+fH7VAYcpWcyb202klk5OTaeaXXnqJ3XhDDTKm9dMZ1UnzkydP+vr60gN2JWmJtOHUDnXbJ0yYoPkCBICWVVhYSOUae4iTKjb6ANLnlH2JPrzUF9S8NGbMGO2jiM3W8uOQ2MGbnp6eVLJR6jcjN42fT2enFBQUHD9+vFu3bgqFgnr97DaYmJvs2w8ePEid8R49ehhpkDE5N8vKyqh96rBTdLKn0WnK0aNHaQp9AbJTAKDF0ceTPrlU9GimdO3albKiY8eONJGKTfpoa16iidQd1KRqs7XKuHc2pF5++WXq8DYjN42M39QM5amqqqJFUHE+ZcoUTZjq7adrxm9q5yaVnKdOnaKI1JScehtkmuqns43T1wM1RX+8nJwczbBN9qDntWvXZs+ezZ5iAoAWR3FB3VPNhZXGDR48mK3nHnOhrZKb7DGFmzdvUgZRlHDNTcbw9ULa81Aip6amUhRqxl3qPS+kuV6owTike/fuUV1Ma6gpORs3yDR1XohtnN006unTF4b2oUxqkP6cNANtwmP+nQDAkPLycqpR6DNOdVWNivarVipUGNFnn2qvFvkw4vp0AHjmURlEnT8XFxepVEpF2+3bt9np1OWlPrtAIKAKjHqZmiLpMSE3AaBdSU9P174f0tChQ1t8EchNAGhXNGM5mRYds6kNuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwEAuEFuAgBwg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3odXkFyweJUsx/PqCvb0ih9L/FZLrJXGxsiPnHhVVMEIPy6Dpdu8t6OxsxTDp9weEVxtuwHL9ObfpLspH8nN5/n9UyBkmeFOn2DCB1jyShIXi1bQSQfzzO7o6G1vd4uh+0p1azz1GWU2f22F6kKPQSrepxhbxYkTyVcfpkVVsRo9gYf0r8pQ834UKeuC3znHveBm7Q4I+ctw2vW4miTgxTrozsfZaPsPYM37BtkuWOAR5dGhqiYLfIzupdvLDnTGVCSm1OSUM42QREGSzZFWnABfbJ/QnNlfITWg1JuWmQpSQH/perVz3JZ6Xza593f2umZibstSognm7VdNC7NJiu2gFV/NzU70m43iHNnfzsGeMp1iab6X/8hp6GLGj65ogft0LmhVTrSpT0DA3RQXLp8qSShq2FxzjGDtF2GRuytPvTw2vzmn4msWCvc6RQ+1a5o8I+iA3odXUyCSSGvXjzFL/xcqyK2Jb55V+6mk8YQcm6/7U6cpPvjDEdtsqBw9hreiUZNV7NTSFF2Z3LkbASGrZmUWJJVOj6LHlmkSnMBd2mgVPaM+jYlBSuGpwZaK6VYs1p3pG9NasBPfcnGuftpxCpybnWNnqtao1ibBPW+fM0zQVwDsUK3DTfivPRqgoVa9DhP1l5czsHiiO9pPurKhber5ubtaI42dJoi5RnWgVGecw3cOKkcjj10s3JzN1XwlGl8iTqhv3sN62rWNAF0t5YfnmxRXxtMZutodOuXhbtfU/gPYLuQlPRF2Pu65vzpImLi9Wdm/dbPae6O6nDhtFzu77oVGPGiRgUYJo5Hu12n1zDUniPf93ahg3yyDn2pRLqh5xhKbi5J6bmi4woxDtyx+/mhZqEXms54LnjDdVnvTOw+UUnPY2ezO7+7GZdT1/fFiVSBOUDXIz/b5veLVcWaJ2WRNUVx6WFC73r0xSz8MYW2J+QeNev+T4PVXZa7HmRM8Ij7b+o7dfyE14IvTmprwoamBFPMXmKuGpNx3rZxYVzBsjS6VEiHHaNsWBnWY4N9Xh67bSYZuTNHTtI2W1dcbFW/3q4+RmfSXrvUZ4aK6l8abqMotZech1iY/yQ5WzO1f1BWAVk9YjzKlh0l377O7UGJrLettV1yBefTNJm8uv0f+9O6wMNpqbmmKW6s1dzkE4pvkEITfhidCbm/oqJhU9EWYwN+88CB8vz2TTSviw/rEquR43N3UmWus/2qhpueHXgDh+qiQqS+uQq+72ZkbfDd9OU232/q+7n/5VkhhfYtH3onGr1IeGhS9YRYTbTQ8TuvGs2/qP3f4hN+GJaLXcFMXnjmdrTOURPUn8dHHUJYa3SHBZ/cYWyk3l2/lnjOcmI0tZW7CYgtOHd+xQN4+6ras/xa+zvRaJi0tWKQ9lNj83GUZRlFr411XVKfn1LwZEOsQucBLi4GZrQm7CE9FauSmOGyPZLFJ20k8tc6qfzd56V5prgLLz2wr1puGm6kYdKVcyOE111FXTSWceo95sYuWrJDllSQmVm+JriyqUzz2WCQ6t7MRjoLUgN+GJaN7xTa081Z+bWfnjpypPvDRWNx7oyR3fVG3Rwyj/8vgKWnPh9PMS5WmiMLu0TXXjokw6vinNOScvpP935QU8V2tsifIKScWj+kEFpEaSsES8WlnDNhxGCi0LuQlPRKucT1dc+yRv6mYDS1QfVXxi59NZdQM2gyyDUmpp3rDYzjEhHdQv6uamZqx+xFdd14yqG/JZdz69yaSu3yFn3KZrxiidyxvwR0XdCrf1H739Qm7CE6E/Nxn5JfX4Td44212rG43f3FQ/gl1PbtYVd27ULZ1XX7AVHisJXVtb10E2OASSJ+zA0zkI+HjjN+3Vp7M1aaiiW/c1Gr8ZFyrZTAvwsFqz3iFMOX5TtjOyPC6dqfvOMLrEwhL2JBhvHG9vlINHF2umsDxhTVkU6s3Wh9yEJ8JAbiprOiPXC9nXT2mcm5qEWrDXNXKo1knknAdTJ8qvNRgC2UijNXms64Xqu/Z1aa6kPQae0Xc8V1SwOFSWUtGwPdOuFxKKvn8wdVWNpNGLfuuEeyMcGWg1yE14IgzmJmPs+nQtjXKzro+vPc5crW4A0Au8Uwl2qc3NTS7Xp2ufSqq/6FP3mksD58FU16fHJaguMFden24TsVAY5mXi9ekKSY44IU6mvj7dnvEeZT19tkPEKIe2+0ubBeQmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITaXa2lqZTCYWi6VSKT2gp5aWljwez8HBQSgU2tvb09O2XkcAeFogNxmFQkFxmZ6enpiYmJWVlZeXV1FRwefzXV1dn3/++dDQ0ICAAIFAYGWFO8ECgJK55yaFZkZGxueff3758uXRo0ePHDnyueeeozKTkjQ7O/v06dOXLl3q1avXihUr/Pz8EJ0AwJh5btbU1Jw6dWrXrl3UGZ81a1bfvn0dHR2p0qQ9Qi9VVlZSz53S8/Dhw7du3frTn/7k7+9PhWdbrzUAtDHzzc3a2lqqJTdv3ty1a9cFCxZ4enrqPYgpk8lycnK++OKL3NzctWvXUjXK4+EHCADMmpnmJoUmlZORkZFVVVXUBx84cKCRmakvf//+/TfffNPX13fZsmU9evRo69UHgLZkprkpl8svX768ZMmSf/zjH+PHj2/ywCXNf/bs2fXr17/zzjthYWEWFhZtvQUA0GbMNDcfPnz473//u6Cg4C9/+Yu7u3uT89POofo0PDx85MiRb731loMD7gsLYL7MNDdFIhEVm7NmzXr55ZednJxMfNeGDRvy8vKoX29K1AJAe2WmuXnr1q0pU6Zs377d19eXz+dXV1eLxWLaEQKBwMbGRjNbRUUFlZk0RShU/qrBDz/8cOjQobfffvv5559v6y0AgDZjprmZk5MTHBx89OjRfv360fZLJJL9+/fb2dmFhoZql580G2VlYGDg4MGD6emZM2e++uqrpUuX+vv7t/UWAECbMdPcvHnzJvXQ9+zZM3DgQFtb25KSkr179548eXL9+vWenp6a2Xbu3Hn+/HlNgXnixAmKV8pNNkYBwDyZaW7m5uYuXLhw0aJFVHV27NiR+uk0Zdq0aTExMUFBQdQxp70hl8vnzJnj4+OzcuVKtp++ZcsWqkBXrFjh4eHR1lsAAG3GTHOzqKiIIrKysvJPf/pT7969adsrKiqornR3d1+wYIGrqyslaUZGxocffkhPp0yZYmFhIZPJ5s6dS5XmW2+9RVHb1lsAAG3GTHOTUvLChQsfffTR+++/P3LkSB6PR0GZmJj47bffLl++fPTo0TTDpk2b7t69S8E6YMAAqj1TU1PXrVtHr77yyiu4PRKAOTPT3KSNpfqRuuo9evRYtmxZr169aMr9+/eplhw7duySJUvKysqozKSUDAkJ6dChQ2Fh4Xvvvefo6Eg1ad++fdt69QGgLZlpbjJ116f/3//935gxY6iopL1Ae4CeisXiFStWUKW5evXqL774wsfHp7i4+MCBA9u3b9+xY8egQYNwVyQAM2e+uUkqKyt37tx58eLFVatWeXt705Tz58/HxcVRkl65coXy8d1333V1db18+TLNMHfu3EmTJnXs2BEXWQKYObPOTZKRkfHZZ59NmDBh5syZ9PTBgwebN2/+5ZdfFApFVFRUQEAAj8c7c+bM+++/f/jw4a5du7I7Cx6DQi4qS0qpTEqoyRE9yilRTbNnvD0sPYbahIV3CPJohTv11UhzLlSk/FSVmFGbc52Rq6bxXCw8fK3CxvGCxjt4ONm29W6BZ4m55+adO3eowKQqkpKRUd2R8+uvv16/fj2VmQcPHnRycqqqqjpy5Ah10ik37e3t23p9n3GFD+P+XL75nLFZeF7WazZ0nO7VoWWWWFOWulMSHVtzrcLYXN6z+OsjO3kL8aUIJjH33MzLy9u6dauNjc0HH3zATsnMzPznP/85ZMiQt99+287Orry8nHJzz5497AVFbb2+zzB5Vv68iKrMCpNmDl4njIlwfNwbnd4pXL2sMuG6aTPbW67c7bTkhRbK62dKUYJo5Hu17OMFe3tFDm3rFXrqITcb5mZxcXFqamr37t19fHxo17C5GR8ff+DAAeRm84kKFofKUkwLTVZQjOO2KcJmL1B+48Hy6XLtJfJcLINDrAOG27gpO+WPRNerU09VJ6Wru+0qFgv2OkcONbu/MnKTK+RmXnR0dEZGxsiRI9kpCoWiurqaHvD5fAsLC3pMffnKysqEhATkZnNJEhaKV6dwfJO9VWxKj2BTb1alq6RwVVBloiY0nSxXbuq4ZFTju/8p5CLx5iUVOzU1qb1lTJJbmEtb77AnC7nJlbnnZmlp6dGjR9PS0jp00N9Be6Ti6ur6xhtvaN8qCTjIyh8/tUqkO43nZb1+szC4j4BnReElSfikPCqh4b9Av3WOeyOaUXJKk94pXp5Y98zDets3XYO6GD52WVEcPVW6M6duxSLs09Y5m9VvoSA3uTL33JTL5deuXbt+/bqRUZmWlpYdO3YcO3YscrN5cnbnhkbp/uuyt96W6hqkfZqtRpKwuFFNOo5/fltXZ46Lk6ffDw2vrotpy/VnXKa7NXXCJ+dB+ER5pvqJxZpTPSN6t/Vee4KQm1yZe26WlZV9/PHHn3zyiaFfDWJv8NGpU6fTp0/jfHqzyFLWFiyO15nkttLh1LKGPXB5Sp7vQoXOJHubvZe7+3FbnDRxefGq4+onfmuEe+c6cn2X9xrhIZPe1U4gN7lCbpZt3bqV6s3Y2Fi9M1RXV586dWrjxo3IzebSc3Az6CPHbdMbdcDzCxaPkunOaLP3fxxzs6RwuX9lkvqJVUxajzDTjpBKjt/zX16jfmK8zq2Ria6VpSTIE7RGg3r4WHoH2U4P6xDgYfSMvPY2LhL8HtnJ8KzF0f2kOw3uB61Xg/jnd6jWtqY850J5wh556uVH1/KVr/BcLPwCrMPCBdOHNji2a9oR5ybW0HwhN8s+/fTT7OzsL774Qu8MlJs//vjj3//+d+Rmc5UnvfOw/mijiv7cFBXMGyNL1ZnEOTd14i/MLm1TF1OPj+os3dByFZJLRauWVaXkG2xGOMom9qPOAS4GBtK3Wm463CiIeldmaNCVMIS3N7qbR/2/X+TmY0Fulm3ZsiU5OXnRokV6Z1AoFFevXj2twuPxHj58eO/ePbFYPGTIkAcPHty9e7dz585ubm7OzlyPwpmRxsc3eYsElxt9IPX00zkFn0rm5rvhn6gfB6x33DXL9HdLc87JC9WPLd38ndwanhuqvPbZw/CYWnmTLdlbLIh1jAzS9+N9rZObe+cqVi9U5DDG8Mbxj8V1dVMfxkduPhZzz82KioqvvvoqPj7e0K+z0W6h6KRY3LZt2+3bt0+ePHn27Nny8vIZM2ZQnt64caNDhw5BQUEhISGurq62trhcT58b+aGhVTqfanvL9cd0T9foOy8UvKlTbBinyy7LEheXrEpWP1nwjWtkQEtdAqQQJeSHvlcfmjwXy4iV/KABtt5ujOhq1bV0efxO7auSDAwFbY3ctGd4FerDBc7jrN8K43ko/y0/EqXLE+JrMkvq3xOxo8uaID1j6XB8kytzz83a2tqSkpLi4mIj81hYWNjY2FAnffbs2dRtHzt2LJu2vXv3pvSk9x4/fnzUqFFr1qyheMWtOfWpTFlb2ODUEONhtT6mY5i34XFIHraHjrl4c7v5lE4ZtSSh18oXWmYD5JfuT51erYn+oDXKy5mEDdatQhwfKYmqO7mkf/xpa+Rm3f6M2dYlrLfuNzd9Gy0Rr677ImFC7NJi9dTvyE2uzD03GVV0EiMzsHeDz87O/vOf//zmm2+GUu1UVUVdez8/v65du1Ls7tq1i3rx69at8/T07NSpE+79oYfuGMmmNS5ITaKdJpbrz7lNb5kR7JL46eKoS+onfquFe+cbONuum1O8uR3S1nTW6e63Um562Ow91N1P7+F3nbNt1tuuugY1GpuK3OTKrHOTNpkSsKamhopEHo+n9wZxFKm//fYbZWJBQQF12D/44IPx48fTRKlUamdnx/4W5uHDhzds2EDFppeX1/Lly9lb0kFDFSU73yqLPmfCnHpLJ5O0Tm6m3/cNr1b30F/gHdvXzcNIFayTU41O6LdKblqsTOy+xMvQd4wk4XXx6tS6fXLGbbpbwzmQm1yZaW5SVlLwfffdd0VFRZSGlJtCoXDatGmUfQ2qRSonaTaqKP/whz9Qx3z06NGurq5lZWUikcjKyqpbt27Uf8/Lyzt//jwFK3XYJ02atGzZMoyQ108i3rlKEp1sfCbLNae6RjQnNJnWyU1FZnRe+Hb1ExMOuerMHxbbOSZEa2RSq+RmE6MOMqPvatZHbywiN7kyr9yUy+WlpaVULVJpefHiRfaIJPWsKUNv3br17rvvvvTSSxR5NEPHjh3Z69Op2Pzoo498fX2XLl1KNSm99ODBgx9++CElJYUeT5w4kd5CScqoTs1TsUkpHBsba+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxISwp4mauvtflpofybVuOQm50ukjQ+fNEzn6nid+yFpn0+3is3oEdxkEmt/VUTYX9a+CzJys11o/7lZUFDw888/b9++/c6dO1QJBgcHUz5SjUnT33///dzcXOp9V1VV0cQNGzb07t3b1taWnmZmZq5YsYJeev311ykr6e3UAaecpYry5Zdf1m6/oqKC2l++fHn//v19fHwWL17s4eHR1hv9FNF/V02T++ncby3RvPtv6twkVPc+8602frOJchi5+fRq/7lJPfQdO3Z4enqOHTv2+eefp2qRNvjhw4exsbFXr16dNWtWnz592MHtDg4OlJWUklRCUnf7ypUrv/zyS3p6OvXEhw8fTmVpZGTk22+/PWfOHCpIz549S+UnRWR1dfX3339PrW3cuJGWQqUrfoZIx/X88WENfyTD1PNCyl9nc9o2xYHhQn4uz/+PCvWYJxOv1zR6v3edBpu8Xkjnp40aFbzaRwOM9/rlRVEDK+qSHLn5dGn/uRkXF5eSkvLXv/7V19dXM5FqT0rMZcuWhYaGdurUiWrGS5cuvffee5s2bRoyZIhmtps3b8bExHTs2PEf//gHFaEREREUuxMmTKDu/LfffkuVKb2dSleqNylzP/zwQwrNtt7cp09NSdz4ss2ihpP95tutWShQjUOiol2SeUgaFd14VHzzfrJCkrhYrDmrbuzabfUaNnVReY04fpZEMyRAb+ib2pROr59Zech1iY/eTK/MjC4K3675SD653GzGF5UZav+5uXnz5oyMDAo+7XPcFIgTJ07ctWuXn58flYdUPxYWFoaEhHz66adUWmpmo7KU3kjJuGXLFnp6/vz5+Pj4//znP5SYFK+UnlSN0n8DAwPnz59Pffwmz9SbJz2HOE3T/J9Ia/Czwx5W6zc7TvdqfF5eIReVxq0qj0uvm2DgRzQb1ML674dUI0lcXbpKc1cn/T+NqdOL15/pNWUpH4mXf/lI6zKBVs7N70UjV9U+7j43J+0/N6nepO52VFSU9jU8ubm5CxYsoOikTne3bt3Kysp++umnzz77jKpL7bK0oKCAcpNScsOGDYzqVBIlLE2kcpVykx6LRCKqNKkFnAgypsHdzEzUZJ1oFCVd+IJq7QJW+ILV9Ik2AV5WqlBQ/X76iepE7YGl9hZLdjqv1P/76bJr24vCoxvefzPYj+fRyVIikmWmyuK3ad/s0vBPsV/PDw3Tuhupk0VYBC9sqGqtShSp6dUHDtUWNay7Wzc3GxxL8Q6zXfCqTRfaRUWWwVM6Nf837Nuv9p+bx48fp2qxR48eCxcupEzs0KEDe03ksWPH/vWvf1GpOHToUMrBgwcPUpLOmDHDycmJHZ+UlZW1Z8+ezMxM6p5r7gbPRidVoFRasmfqaSJuHNc0is6V4tXHTZ7fwyp2R7dgzveR0yG/8WBVhDypxLS5nazWxHeKeM7IsWmT7/fOWETscFwTZKi3K8vcXBj+SVMfNw/LIPvalCz2SSvnpqHbv5s6zt/stP/cpPKQetNUTl68ePFvf/sbBSWfz6fsk0gkP/74I71UWloqEAgoUidNmsTePbOqqury5curV6+mQpJq0lGjRlEfvK23ox2ozEkUR0VVpzYVZAErO2xc0tmZ80099JGIEzaWRcc/khhf4iK7yCVO3sImY1pRlFr411XVzf99IVZNeebOksXRtYbWShjC27Xe7to7mixr7dxsdGSDhdw0oP3nJikvL6ficerUqfv376fqUnO+WyaTPXjwgDrpNIUKUs0tOCk3s7OzKUY3btzIDmtv6y1oR9gfgzxSlZRe+7+cR5oOqbOXxeDB1gFBdhNHCpx5LV2/yyWZiRWJydWZdT/0yC6x3wDr4CB+ULCDG6cl0iZkSpISqxKb8XuW2vKLE/ZWJp6qyTTQiFbetX5uMsrvmMQ46c7EWnYXCT0sAqZ2WP8m+ul6mEVuUq/8xIkTa9eupT57z549TXkLFaGUs1OmTHn99deRmwCgzSxys6io6Ouvv46Pjz9w4ECfPn2aPIdDu6K4uHjOnDmenp7vvPOOiVELAGbCLHKzurpaJBK9/fbb3bt3pxx0cXEpKCjIy8t78cUXNT+JrlAoLly44OTk1K1bt4qKin//+98ZGRkxMTGDBg3C6CIA0GYWuUkqKyvT0tK++OILW1tbBwcHys38/PzNmzf379+fz+dXVVXl5uauXLmSHlO2yuXy+/fvz58/f+zYsbgjHAA0YC65yah63//5z3+++uorKj+pijx37py3tzc78EgqlbI/fTFmzJicnJySkpKIiIgJEyZo3yQJAIBlRrnJotKSopD9Id8NGzb06dOnS5cupaWlV69effPNN1955RWBQEDBqum/AwA0YHa5yWJHtu/bt+/OnTsymYzH47m4uISHh1MX3tLSkl5FmQkAhphpbjKq6JRIJFR4sj9vaWNjIxQKraxaZLA1ALRn5pubAADNg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCb8MzK2L0u8ZZ72Nq5g9tm+fnHt3z+X8Z/0YpQ1ye+bGnWkfikzHwpY+kSvOKN4cZ+qzf/2JbP0xj/N1aEujRvWUUXdn/9c6XvvDfGN7OB9ge5Cc8s883NouS4rWeLBO5Dh3l1duk/rL/R38B6/NxM3hp3VjZ47rsvuz/h7XxqITehdWV+ve7ITffJa+f6mTJ33rEt29OYYW+sCDHhM262uSlO3rrlrPSFuZGvmBJkj52b0AhyE1oXcrPlcdpLyM1WgNyE1qKKFXH9876T185RhWdB2sFDP18vkCpqGWuBm9/Lr4Z6Ukczc/e6I7fq53ZU51FVflri4Z9/y5cqGOXcgyfPCukvYGcxmJuqpvqGLvXK3vdTdlEVvdGx/8SI2UOdGX1hp5Xs6oiZNlL8s/qNAreAafPGd7l1fN+RDJFyHWyd+780S6epqSPEZ5OyixSMpbVjn9GTZwW629atSK34+onvjjV6o3rNx08TZB7JKlbojX7pjeSDP124Rc3SWjj3D351pr+Ldd3aau0mfekpvXFsX2KaSMrusWFON5KztHNTfP3YoWOZItX+p5ZnzPbvytxK3Lg7gx+4dOk4Z3Uj4tNbt/ws9ZsTOZnfMKbFvx377qiyAdpkQVef4FmTfTRHCvQ1zlLkp+3/TrWjlFvkPvylaeOeE7T1P9JmQm5Cq5FJxTJF1qEtyXfdxq141cda4CiwZvKStuy4IOa7+A0f3N22LDctLauIcQ9bOncwXyqWKvJ/3rEvk3lh5sKgnnyhgM+Ijm3dkSZ27D9iRH8Hpizn57M3pI4j3ljxkuoDbDw3+Xy+paMXLYUpvJ6WdkuiDuKmc1PCMOzqqd9oLRBaS5nu/v5eXfQ0JWYs+c7e/sN6OpTl/jftSpGsa+DSJWz4SDO/3nrktrXqKCSfXXnn0UuXjnVm15yxpDx3c3e26zl8dmAf3T13ec+WQ9kyx/6Bw/s7VKkWKnX0n78i1I1R0G4SafZSd2u+I+0mHaJjW75ME+tsgvJrSJ2b0szdW4/csnVXbo5tWfb5s9lS58AlS8dVKcPRevSKpWPZCJRd2BGdVOw398+T3XXLW2nG7q208q5+I57vzq+6n3E+M59xn7x0rp/AcOPO6oOkRYL+gSOVf0nlSxK+14zImd5t/a+0WZCb0Lp0++myC19GJ+W7hy6f68+WGrWqZJR6TYuc6WPZqAd67eDGo9k9J0bO9GUbow/f1rMVqg8z02Ru1n2Yyc0j0V9n8kcsXfGSc9O5WaG1etKzn29MzrfVmtKwKbE6ClVER7fsSJd6zVhNcSDL2L0xMbfnyyvmDlW3dWHHxqQCr5nvz/RSrTm/7+Slc/z0VVy3jmzcnWntv3B5qJsl+1ZVHgnqykFj/XTx2e1bkvPdgt9ZOFy9h7MPbtyTZcvmpizz641HRD21NvDCjk1J+Z4zV89wUm67beCKJeMcVX+oHR8niV+Y+26Yu+7i1OtWX72q/iYK5auOhhv3Kvppy9ZfFP4L36Xor9+xz01b+5pPW/8LbQ7kJrQundxUFTH53soPkmYG2S87on/KZ7OmySN3Oq010U+vOyxAatN2f3isRNWsKf10rUOBqqb6hK6d56/duKGmmIKkLXEX2PVXNitSpWTdi6qer0I5f77RI7OqaBbUl35Ktw5H774kCFyxVJlqRvaSakt1tl17o2ozd68/kuupvf/FyXFbzlYpX7U+tXXrOX5w5MLhfHbfFvrNe3dyH93F6Vk3mehy1n37/v59bxlp3DF1R/SJfLexC+eNVh1ueMYhN6F16SSd3g98nlYPsfEM4uvJiclpd4tkCs0buOem0bBrOjdNbkpr/u7KpsRMI45N56be7VJOzG3620XPS1obpXpV70opX1VVjvyXIheO4GftW39Q5DP3XVVdr92mkXNxxhuvLbrw9Y6k2zLG0trZ1ct9yLBxvm58y1b4B/dEIDehdTWdm6JjG3ek8fXmpqqjJxL0D5w4erCrsu+nOlr67ORmlXtgkJeDzrrxu/v6uF3jnpvpu9cdbZnclPUNHDeg4Ur5UIqxXW774Mj5jkf+uT93kKqTznDLTcONK8mKsrPSsi7fvC4qUjD2LuMi3gh88pcMtATkJrSux+mnqw6KGcq4pzI369ffUbmpBXXHbRvIaOV+us5xQ62NYve/57TVs/QfVSyirvovDpNnOSZ9m+3FdtIZ3cWpvuQcVTVp/V9QIpZZChyt04w0rpyH4TsK1e9S3D6ydVemGMc3AfR6nPNCqmDSOplAM8fuSBM/Vm6qCjftd6mKrKJm56bYcdjCFSHs+rHnhRTsYUHxuc+3nMp3HrV06fi6oT3SrLSbPf19HZsaefo454Ua7+Gs/dEHr9uzG8WeNXIOfGPpuLrhQdIrabfc/NUDiVQj6mUCvtTap34n6Cwu+2D0niyB1oAlVZ9AdQbJyXDjqgOdYu1vkVtHPt6d6aK9Y58lyE1oXaqBgQq3gHG+3VX9NYPjkFSfctVpXJGj17gX3V36+feXHNm4K1Nq7+wzeFiXquzLV7KLKpjHPL6pXoSti99I1TCdi6phOrXNz03GknHsFzjCw6Es55ezN8SMW/C77Kls9iuhmO88SDlKiSnL/W96VpG9/9w3Qt2vNDFi38g4JCXjZ88aj0OSMoywbqPYV22dfYaqVyrtShF/6NylL7urTteoAq5Ad1io8XFIFzLza+uGLhhuXKG9RYzs/q+/ZObJ3CZGLgzgM88g5Ca0MmnWwS+Vo7sZ57oiRf+4dzXR6R37zomktUz/V9fOHtRgCPfkEbVH9qcz6gq0ebmpPSzc0tq5X/Bo4S8H052a30+fMUJ8um7ce7/giFn+zpqOeW1R2qHvNIP2XTxHvxLm72Jr0pVOhsa9KzU16qDBTnuuaE9ysdZG6ex/F6/AVyYPqz/HXX/SX8/BB33j3t38QqeGemn+gIYb19kieino1WlDnZlnE3ITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwEAuEFuAgBwg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwEAuEFuAgBwg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwEAuEFuAgBwg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDADXITAIAb5CYAADfITQAAbpCbAADcIDcBALhBbgIAcIPcBADgBrkJAMANchMAgBvkJgAAN8hNAABukJsAANwgNwEAuEFuAgBwg9wEAOAGuQkAwA1yEwCAG+QmAAA3yE0AAG6QmwAA3CA3AQC4QW4CAHCD3AQA4Aa5CQDAgUwmr5TJ1LlZUVlpx+e39SoBADy9KDFLikvs7O3VuXkv7351VVUtqk4AAH0sLSxsbG3t7OzY0CQW1GNHVx0AwAgLCwsrK6v6p5IyaVuvEgDAs+T/AS3tSj/26u2eAAAAAElFTkSuQmCC';\r\n","\r\n\r\n/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n */\r\n\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'lib-gp-kpi-overview-widget-config',\r\n templateUrl: './gp-kpi-overview-widget-config.html',\r\n styleUrls: ['./gp-kpi-overview-widget-config.css']\r\n})\r\nexport class GpKpiOverviewWidgetConfigComponent implements OnInit {\r\n @Input() config: any = {};\r\n kpiColorPickerClosed = true;\r\n kpiBgColorPickerClosed = true;\r\n titleColorPickerClosed = true;\r\n kpiUnitColorPickerClosed = true;\r\n messageColorPickerClosed = true;\r\n\r\n\r\n\r\n widgetInfo = {\r\n metadata: {\r\n title: '',\r\n icon: '',\r\n },\r\n kpi: {\r\n color: '#b0b0b0',\r\n unit: '',\r\n bgcolor: '#FFFFFF',\r\n kpiName: '',\r\n message: '',\r\n otherKPIValue: '',\r\n otherKPIName: '',\r\n titleColor: '#808080',\r\n unitColor: '#b0b0b0',\r\n messageColor: '#808080',\r\n titleSize: 20,\r\n messageSize: 10,\r\n unitSize: 20,\r\n kpiSize: 30,\r\n imageSize: 60,\r\n\r\n }\r\n}\r\nkpiNamesList = [\r\n {\r\n id: 'totalDevices',\r\n text: 'Total Devices'\r\n },\r\n {\r\n id: 'available',\r\n text: 'Available Devices'\r\n },\r\n {\r\n id: 'unavailable',\r\n text: 'Unavailable Devices'\r\n },\r\n {\r\n id: 'totalAlarms',\r\n text: 'Total Alarms'\r\n },\r\n {\r\n id: 'major',\r\n text: 'Major Alarms'\r\n },\r\n {\r\n id: 'minor',\r\n text: 'Minor Alarms'\r\n },\r\n {\r\n id: 'critical',\r\n text: 'Critical Alarms'\r\n },\r\n {\r\n id: 'highRisk',\r\n text: 'High Risk'\r\n }\r\n ,\r\n {\r\n id: 'mediumRisk',\r\n text: 'Medium Risk'\r\n },\r\n {\r\n id: 'lowRisk',\r\n text: 'Low Risk'\r\n },\r\n {\r\n id: 'noRisk',\r\n text: 'No Risk'\r\n },\r\n {\r\n id: 'other',\r\n text: 'Other Property'\r\n }\r\n\r\n ];\r\n constructor() {}\r\n\r\n async ngOnInit() {\r\n // Editing an existing widget\r\n if(_.has(this.config, 'customwidgetdata')) {\r\n this.widgetInfo = _.get(this.config, 'customwidgetdata');\r\n } else { // Adding a new widget\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n }\r\n\r\n public updateIconInConfig($event: Event) {\r\n const kpiIcon = ($event.target as HTMLInputElement).files[0];\r\n const reader = new FileReader();\r\n reader.readAsDataURL(kpiIcon);\r\n reader.onload = () => {\r\n this.widgetInfo.metadata.icon = reader.result as string;\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n };\r\n }\r\n\r\n public updateConfig() {\r\n\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n\r\n\r\n setSelectedColorForKPI(value: string) {\r\n this.widgetInfo.kpi.color = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIColorPicker() {\r\n this.kpiColorPickerClosed = true;\r\n }\r\n\r\n openKPIColorPicker() {\r\n this.kpiColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForTitle(value: string) {\r\n this.widgetInfo.kpi.titleColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeTitleColorPicker() {\r\n this.titleColorPickerClosed = true;\r\n }\r\n\r\n openTitleColorPicker() {\r\n this.titleColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForKPIUnit(value: string) {\r\n this.widgetInfo.kpi.unitColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = true;\r\n }\r\n\r\n openKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForMessage(value: string) {\r\n this.widgetInfo.kpi.messageColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeMessageColorPicker() {\r\n this.messageColorPickerClosed = true;\r\n }\r\n\r\n openMessageColorPicker() {\r\n this.messageColorPickerClosed = false;\r\n }\r\n\r\n\r\n closeKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = true;\r\n }\r\n\r\n openKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForBackground(value: string) {\r\n this.widgetInfo.kpi.bgcolor = value;\r\n this.updateConfig();\r\n }\r\n\r\n}","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-picker',\n templateUrl: './color-picker-component.html',\n styleUrls: ['./color-picker-component.css'],\n})\nexport class ColorPickerComponent {\n @Output() colorSet: EventEmitter = new EventEmitter(true);\n @Output() colorPickerClosed: EventEmitter = new EventEmitter();\n\n public hue: string;\n public color: string;\n public colorType: any = 'hexa';\n constructor(private eRef: ElementRef) {}\n\n closeColorPicker(): void {\n this.colorPickerClosed.emit(true);\n }\n applyColorClicked(): void {\n if (this.color !== undefined) {\n if (this.colorType === 'hexa') {\n this.colorSet.emit(this.RGBAToHexA(this.color));\n } else {\n this.colorSet.emit(this.color);\n }\n }\n }\n\n RGBAToHexA(rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = '0' + r; }\n if (g.length === 1) { g = '0' + g; }\n if (b.length === 1) { b = '0' + b; }\n if (a.length === 1) { a = '0' + a; }\n\n return '#' + r + g + b + a;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-slider',\n templateUrl: './color-slider-component.html',\n})\nexport class ColorSliderComponent {\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n private mousedown = false;\n private selectedHeight: number;\n\n // tslint:disable-next-line: use-lifecycle-interface\n ngAfterViewInit() {\n this.draw();\n }\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n this.ctx.clearRect(0, 0, width, height);\n\n const gradient = this.ctx.createLinearGradient(0, 0, 0, height);\n gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');\n gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\n gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\n gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\n gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\n gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\n gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');\n\n this.ctx.beginPath();\n this.ctx.rect(0, 0, width, height);\n this.ctx.fillStyle = gradient;\n this.ctx.fill();\n this.ctx.closePath();\n\n if (this.selectedHeight) {\n this.ctx.beginPath();\n this.ctx.strokeStyle = 'white';\n this.ctx.lineWidth = 5;\n this.ctx.rect(0, this.selectedHeight - 5, width, 10);\n this.ctx.stroke();\n this.ctx.closePath();\n }\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ViewChild,\n ElementRef,\n AfterViewInit,\n Input,\n Output,\n SimpleChanges,\n OnChanges,\n EventEmitter,\n HostListener,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-palette',\n templateUrl: './color-palette-component.html',\n styleUrls: ['./color-palette-component.css'],\n})\nexport class ColorPaletteComponent implements AfterViewInit, OnChanges {\n @Input()\n hue: string;\n\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n\n private mousedown = false;\n\n public selectedPosition: { x: number; y: number };\n\n ngAfterViewInit() {\n this.draw();\n }\n\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n\n this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)';\n this.ctx.fillRect(0, 0, width, height);\n\n const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n this.ctx.fillStyle = whiteGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n this.ctx.fillStyle = blackGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n if (this.selectedPosition) {\n this.ctx.strokeStyle = 'white';\n this.ctx.fillStyle = 'white';\n this.ctx.beginPath();\n this.ctx.arc(\n this.selectedPosition.x,\n this.selectedPosition.y,\n 10,\n 0,\n 2 * Math.PI\n );\n this.ctx.lineWidth = 5;\n this.ctx.stroke();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // tslint:disable-next-line: no-string-literal\n if (changes['hue']) {\n this.draw();\n const pos = this.selectedPosition;\n if (pos) {\n this.color.emit(this.getColorAtPosition(pos.x, pos.y));\n }\n }\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY));\n }\n\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components';\nimport { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component';\nimport * as preview from './preview-image';\nimport { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { ColorPickerComponent } from './color-picker/color-picker-component';\nimport { ColorSliderComponent } from './color-picker/color-slider/color-slider-component';\nimport { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component';\n@NgModule({\n declarations: [\n GpKpiOverviewWidgetComponent,\n GpKpiOverviewWidgetConfigComponent,\n ColorPickerComponent,\n ColorSliderComponent,\n ColorPaletteComponent\n ],\n imports: [\n NgSelectModule,\n FormsModule,\n CommonModule,\n CoreModule\n ],\n exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n\n providers: [\n GpKpiOverviewWidgetService,\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: {\n id: 'kpi-overview.widget',\n label: 'KPI Overview',\n previewImage: preview.previewImage,\n description: 'KPI Overview',\n component: GpKpiOverviewWidgetComponent,\n configComponent: GpKpiOverviewWidgetConfigComponent,\n data: {\n ng1: {\n options: {\n noDeviceTarget: false,\n noNewWidgets: false,\n deviceTargetNotRequired: false,\n groupsSelectable: true\n }\n }\n }\n }\n }],\n})\nexport class GpKpiOverviewWidgetModule { }\n"]} \ No newline at end of file diff --git a/runtime/dist/widget-library/custom-widget.d.ts b/runtime/dist/widget-library/custom-widget.d.ts deleted file mode 100644 index 3365a16..0000000 --- a/runtime/dist/widget-library/custom-widget.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -export * from './public-api'; -export { ColorPaletteComponent as ɵd } from './lib/color-picker/color-palette/color-palette-component'; -export { ColorPickerComponent as ɵb } from './lib/color-picker/color-picker-component'; -export { ColorSliderComponent as ɵc } from './lib/color-picker/color-slider/color-slider-component'; -export { GpKpiOverviewWidgetConfigComponent as ɵa } from './lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component'; -export { previewImage as ɵe } from './lib/preview-image'; diff --git a/runtime/dist/widget-library/custom-widget.metadata.json b/runtime/dist/widget-library/custom-widget.metadata.json deleted file mode 100644 index fb62ccf..0000000 --- a/runtime/dist/widget-library/custom-widget.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"__symbolic":"module","version":4,"metadata":{"GpKpiOverviewWidgetService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":22,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@c8y/client","name":"InventoryService","line":27,"character":32}]}],"getDevicesAvailability":[{"__symbolic":"method"}],"getFirmwareRisks":[{"__symbolic":"method"}],"calculateRiskCount":[{"__symbolic":"method"}],"getAlarms":[{"__symbolic":"method"}],"calculateAlarmsCount":[{"__symbolic":"method"}],"getNewKPICount":[{"__symbolic":"method"}],"getNewKPIValue":[{"__symbolic":"method"}]}},"GpKpiOverviewWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":53,"character":1},"arguments":[{"selector":"lib-gp-kpi-overview-widget","styles":[],"template":"
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n

{{getKPITitle()}}

\r\n \r\n \r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n"}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GpKpiOverviewWidgetService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"configureTopMarginRequired":[{"__symbolic":"method"}],"getDeviceData":[{"__symbolic":"method"}],"getKPITitle":[{"__symbolic":"method"}],"getKPITitleTopMargin":[{"__symbolic":"method"}],"getKPIIcon":[{"__symbolic":"method"}],"getKPIContainerHeight":[{"__symbolic":"method"}],"getKPIValue":[{"__symbolic":"method"}],"getKPIUnit":[{"__symbolic":"method"}],"getKPIName":[{"__symbolic":"method"}],"getKPIColor":[{"__symbolic":"method"}],"getTitleColor":[{"__symbolic":"method"}],"getUnitColor":[{"__symbolic":"method"}],"getMessageColor":[{"__symbolic":"method"}],"getKPIBgColor":[{"__symbolic":"method"}],"getOtherKPIName":[{"__symbolic":"method"}],"getOtherKPIMetric":[{"__symbolic":"method"}],"getKPIMessage":[{"__symbolic":"method"}],"getKPISize":[{"__symbolic":"method"}],"getTitleSize":[{"__symbolic":"method"}],"getMessageSize":[{"__symbolic":"method"}],"getUnitSize":[{"__symbolic":"method"}],"getImageSize":[{"__symbolic":"method"}],"getContainerHeight":[{"__symbolic":"method"}]}},"GpKpiOverviewWidgetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":28,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"GpKpiOverviewWidgetComponent"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"}],"imports":[{"__symbolic":"reference","module":"@ng-select/ng-select","name":"NgSelectModule","line":37,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":38,"character":4},{"__symbolic":"reference","module":"@c8y/ngx-components","name":"CommonModule","line":39,"character":4},{"__symbolic":"reference","module":"@c8y/ngx-components","name":"CoreModule","line":40,"character":4}],"exports":[{"__symbolic":"reference","name":"GpKpiOverviewWidgetComponent"},{"__symbolic":"reference","name":"ɵa"}],"entryComponents":[{"__symbolic":"reference","name":"GpKpiOverviewWidgetComponent"},{"__symbolic":"reference","name":"ɵa"}],"providers":[{"__symbolic":"reference","name":"GpKpiOverviewWidgetService"},{"provide":{"__symbolic":"reference","module":"@c8y/ngx-components","name":"HOOK_COMPONENTS","line":48,"character":13},"multi":true,"useValue":{"id":"kpi-overview.widget","label":"KPI Overview","previewImage":{"__symbolic":"reference","name":"ɵe"},"description":"KPI Overview","component":{"__symbolic":"reference","name":"GpKpiOverviewWidgetComponent"},"configComponent":{"__symbolic":"reference","name":"ɵa"},"data":{"ng1":{"options":{"noDeviceTarget":false,"noNewWidgets":false,"deviceTargetNotRequired":false,"groupsSelectable":true}}}}}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":23,"character":1},"arguments":[{"selector":"lib-gp-kpi-overview-widget-config","template":"\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
","styles":[".showColorPicker{display:block}.hideColorPicker{display:none}"]}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"updateIconInConfig":[{"__symbolic":"method"}],"updateConfig":[{"__symbolic":"method"}],"setSelectedColorForKPI":[{"__symbolic":"method"}],"closeKPIColorPicker":[{"__symbolic":"method"}],"openKPIColorPicker":[{"__symbolic":"method"}],"setSelectedColorForTitle":[{"__symbolic":"method"}],"closeTitleColorPicker":[{"__symbolic":"method"}],"openTitleColorPicker":[{"__symbolic":"method"}],"setSelectedColorForKPIUnit":[{"__symbolic":"method"}],"closeKPIUnitColorPicker":[{"__symbolic":"method"}],"openKPIUnitColorPicker":[{"__symbolic":"method"}],"setSelectedColorForMessage":[{"__symbolic":"method"}],"closeMessageColorPicker":[{"__symbolic":"method"}],"openMessageColorPicker":[{"__symbolic":"method"}],"closeKPIBgColorPicker":[{"__symbolic":"method"}],"openKPIBgColorPicker":[{"__symbolic":"method"}],"setSelectedColorForBackground":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":25,"character":1},"arguments":[{"selector":"app-color-picker","template":"\n
\n \n \n
\n \n \n
\n
\n \n\n\n ","styles":[".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"]}]}],"members":{"colorSet":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":3}}]}],"colorPickerClosed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":33,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":38,"character":28}]}],"closeColorPicker":[{"__symbolic":"method"}],"applyColorClicked":[{"__symbolic":"method"}],"RGBAToHexA":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":26,"character":1},"arguments":[{"selector":"app-color-slider","template":" "}]}],"members":{"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":3}}]}],"canvas":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":35,"character":3},"arguments":["canvas",{"static":true}]}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"onMouseDown":[{"__symbolic":"method"}],"onMouseMove":[{"__symbolic":"method"}],"onMouseUp":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":59,"character":3},"arguments":["window:mouseup",["$event"]]}]}],"emitColor":[{"__symbolic":"method"}],"getColorAtPosition":[{"__symbolic":"method"}],"draw":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":31,"character":1},"arguments":[{"selector":"app-color-palette","template":"\n","styles":[".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"]}]}],"members":{"hue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":41,"character":3}}]}],"canvas":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":44,"character":3},"arguments":["canvas",{"static":true}]}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"draw":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"onMouseUp":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":108,"character":3},"arguments":["window:mouseup",["$event"]]}]}],"onMouseDown":[{"__symbolic":"method"}],"onMouseMove":[{"__symbolic":"method"}],"emitColor":[{"__symbolic":"method"}],"getColorAtPosition":[{"__symbolic":"method"}]}},"ɵe":"data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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"},"origins":{"GpKpiOverviewWidgetService":"./lib/gp-kpi-overview-widget.service","GpKpiOverviewWidgetComponent":"./lib/gp-kpi-overview-widget.component","GpKpiOverviewWidgetModule":"./lib/gp-kpi-overview-widget.module","ɵa":"./lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component","ɵb":"./lib/color-picker/color-picker-component","ɵc":"./lib/color-picker/color-slider/color-slider-component","ɵd":"./lib/color-picker/color-palette/color-palette-component","ɵe":"./lib/preview-image"},"importAs":"kpi-overview-runtime-widget"} \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/custom-widget.js b/runtime/dist/widget-library/esm2015/custom-widget.js deleted file mode 100644 index 1d07957..0000000 --- a/runtime/dist/widget-library/esm2015/custom-widget.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -export * from './public-api'; -export { ColorPaletteComponent as ɵd } from './lib/color-picker/color-palette/color-palette-component'; -export { ColorPickerComponent as ɵb } from './lib/color-picker/color-picker-component'; -export { ColorSliderComponent as ɵc } from './lib/color-picker/color-slider/color-slider-component'; -export { GpKpiOverviewWidgetConfigComponent as ɵa } from './lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component'; -export { previewImage as ɵe } from './lib/preview-image'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXdpZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dwLWtwaS1vdmVydmlldy13aWRnZXQvc3JjL2N1c3RvbS13aWRnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDckcsT0FBTyxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMsa0NBQWtDLElBQUksRUFBRSxFQUFDLE1BQU0sNkVBQTZFLENBQUM7QUFDckksT0FBTyxFQUFDLFlBQVksSUFBSSxFQUFFLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtDb2xvclBhbGV0dGVDb21wb25lbnQgYXMgybVkfSBmcm9tICcuL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGFsZXR0ZS9jb2xvci1wYWxldHRlLWNvbXBvbmVudCc7XG5leHBvcnQge0NvbG9yUGlja2VyQ29tcG9uZW50IGFzIMm1Yn0gZnJvbSAnLi9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci1jb21wb25lbnQnO1xuZXhwb3J0IHtDb2xvclNsaWRlckNvbXBvbmVudCBhcyDJtWN9IGZyb20gJy4vbGliL2NvbG9yLXBpY2tlci9jb2xvci1zbGlkZXIvY29sb3Itc2xpZGVyLWNvbXBvbmVudCc7XG5leHBvcnQge0dwS3BpT3ZlcnZpZXdXaWRnZXRDb25maWdDb21wb25lbnQgYXMgybVhfSBmcm9tICcuL2xpYi9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0LWNvbmZpZy9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQnO1xuZXhwb3J0IHtwcmV2aWV3SW1hZ2UgYXMgybVlfSBmcm9tICcuL2xpYi9wcmV2aWV3LWltYWdlJzsiXX0= \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/color-picker/color-palette/color-palette-component.js b/runtime/dist/widget-library/esm2015/lib/color-picker/color-palette/color-palette-component.js deleted file mode 100644 index b48ec15..0000000 --- a/runtime/dist/widget-library/esm2015/lib/color-picker/color-palette/color-palette-component.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Component, ViewChild, Input, Output, EventEmitter, HostListener, } from '@angular/core'; -export class ColorPaletteComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - ngAfterViewInit() { - this.draw(); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)'; - this.ctx.fillRect(0, 0, width, height); - const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0); - whiteGrad.addColorStop(0, 'rgba(255,255,255,1)'); - whiteGrad.addColorStop(1, 'rgba(255,255,255,0)'); - this.ctx.fillStyle = whiteGrad; - this.ctx.fillRect(0, 0, width, height); - const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height); - blackGrad.addColorStop(0, 'rgba(0,0,0,0)'); - blackGrad.addColorStop(1, 'rgba(0,0,0,1)'); - this.ctx.fillStyle = blackGrad; - this.ctx.fillRect(0, 0, width, height); - if (this.selectedPosition) { - this.ctx.strokeStyle = 'white'; - this.ctx.fillStyle = 'white'; - this.ctx.beginPath(); - this.ctx.arc(this.selectedPosition.x, this.selectedPosition.y, 10, 0, 2 * Math.PI); - this.ctx.lineWidth = 5; - this.ctx.stroke(); - } - } - ngOnChanges(changes) { - // tslint:disable-next-line: no-string-literal - if (changes['hue']) { - this.draw(); - const pos = this.selectedPosition; - if (pos) { - this.color.emit(this.getColorAtPosition(pos.x, pos.y)); - } - } - } - onMouseUp(evt) { - this.mousedown = false; - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY)); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } -} -ColorPaletteComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-palette', - template: "\n", - styles: [".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"] - },] } -]; -ColorPaletteComponent.propDecorators = { - hue: [{ type: Input }], - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGFsZXR0ZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0L3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBhbGV0dGUvY29sb3ItcGFsZXR0ZS1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFHVCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsTUFBTSxPQUFPLHFCQUFxQjtJQU5sQztRQVdFLFVBQUssR0FBeUIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFPN0MsY0FBUyxHQUFHLEtBQUssQ0FBQztJQTBGNUIsQ0FBQztJQXRGQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUVoRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FB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ZnR3YXJlIEFHLCBEYXJtc3RhZHQsIEdlcm1hbnkgYW5kL29yIGl0cyBsaWNlbnNvcnNcbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbG9yLXBhbGV0dGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGFsZXR0ZS1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBhbGV0dGUtY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xvclBhbGV0dGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBodWU6IHN0cmluZztcblxuICBAT3V0cHV0KClcbiAgY29sb3I6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBAVmlld0NoaWxkKCdjYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjYW52YXM6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuXG4gIHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cbiAgcHJpdmF0ZSBtb3VzZWRvd24gPSBmYWxzZTtcblxuICBwdWJsaWMgc2VsZWN0ZWRQb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmRyYXcoKTtcbiAgfVxuXG4gIGRyYXcoKSB7XG4gICAgaWYgKCF0aGlzLmN0eCkge1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodDtcblxuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMuaHVlIHx8ICdyZ2JhKDI1NSwyNTUsMjU1LDEpJztcbiAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGNvbnN0IHdoaXRlR3JhZCA9IHRoaXMuY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHdpZHRoLCAwKTtcbiAgICB3aGl0ZUdyYWQuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKDI1NSwyNTUsMjU1LDEpJyk7XG4gICAgd2hpdGVHcmFkLmFkZENvbG9yU3RvcCgxLCAncmdiYSgyNTUsMjU1LDI1NSwwKScpO1xuXG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gd2hpdGVHcmFkO1xuICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgY29uc3QgYmxhY2tHcmFkID0gdGhpcy5jdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgaGVpZ2h0KTtcbiAgICBibGFja0dyYWQuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKDAsMCwwLDApJyk7XG4gICAgYmxhY2tHcmFkLmFkZENvbG9yU3RvcCgxLCAncmdiYSgwLDAsMCwxKScpO1xuXG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gYmxhY2tHcmFkO1xuICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQb3NpdGlvbikge1xuICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jdHguYXJjKFxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9zaXRpb24ueCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvc2l0aW9uLnksXG4gICAgICAgIDEwLFxuICAgICAgICAwLFxuICAgICAgICAyICogTWF0aC5QSVxuICAgICAgKTtcbiAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDU7XG4gICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgIGlmIChjaGFuZ2VzWydodWUnXSkge1xuICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnNlbGVjdGVkUG9zaXRpb247XG4gICAgICBpZiAocG9zKSB7XG4gICAgICAgIHRoaXMuY29sb3IuZW1pdCh0aGlzLmdldENvbG9yQXRQb3NpdGlvbihwb3MueCwgcG9zLnkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uTW91c2VVcChldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlZG93biA9IGZhbHNlO1xuICB9XG5cbiAgb25Nb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZWRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRQb3NpdGlvbiA9IHsgeDogZXZ0Lm9mZnNldFgsIHk6IGV2dC5vZmZzZXRZIH07XG4gICAgdGhpcy5kcmF3KCk7XG4gICAgdGhpcy5jb2xvci5lbWl0KHRoaXMuZ2V0Q29sb3JBdFBvc2l0aW9uKGV2dC5vZmZzZXRYLCBldnQub2Zmc2V0WSkpO1xuICB9XG5cbiAgb25Nb3VzZU1vdmUoZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMubW91c2Vkb3duKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUG9zaXRpb24gPSB7IHg6IGV2dC5vZmZzZXRYLCB5OiBldnQub2Zmc2V0WSB9O1xuICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICB0aGlzLmVtaXRDb2xvcihldnQub2Zmc2V0WCwgZXZ0Lm9mZnNldFkpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRDb2xvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGNvbnN0IHJnYmFDb2xvciA9IHRoaXMuZ2V0Q29sb3JBdFBvc2l0aW9uKHgsIHkpO1xuICAgIHRoaXMuY29sb3IuZW1pdChyZ2JhQ29sb3IpO1xuICB9XG5cbiAgZ2V0Q29sb3JBdFBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgcmV0dXJuIChcbiAgICAgICdyZ2JhKCcgKyBpbWFnZURhdGFbMF0gKyAnLCcgKyBpbWFnZURhdGFbMV0gKyAnLCcgKyBpbWFnZURhdGFbMl0gKyAnLDEpJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/color-picker/color-picker-component.js b/runtime/dist/widget-library/esm2015/lib/color-picker/color-picker-component.js deleted file mode 100644 index dd352cc..0000000 --- a/runtime/dist/widget-library/esm2015/lib/color-picker/color-picker-component.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Component, Output, EventEmitter, ElementRef, } from '@angular/core'; -export class ColorPickerComponent { - constructor(eRef) { - this.eRef = eRef; - this.colorSet = new EventEmitter(true); - this.colorPickerClosed = new EventEmitter(); - this.colorType = 'hexa'; - } - closeColorPicker() { - this.colorPickerClosed.emit(true); - } - applyColorClicked() { - if (this.color !== undefined) { - if (this.colorType === 'hexa') { - this.colorSet.emit(this.RGBAToHexA(this.color)); - } - else { - this.colorSet.emit(this.color); - } - } - } - RGBAToHexA(rgba) { - const sep = rgba.indexOf(',') > -1 ? ',' : ' '; - rgba = rgba.substr(5).split(')')[0].split(sep); - // Strip the slash if using space-separated syntax - if (rgba.indexOf('/') > -1) { - rgba.splice(3, 1); - } - let r = (+rgba[0]).toString(16); - let g = (+rgba[1]).toString(16); - let b = (+rgba[2]).toString(16); - let a = Math.round(+rgba[3] * 255).toString(16); - if (r.length === 1) { - r = '0' + r; - } - if (g.length === 1) { - g = '0' + g; - } - if (b.length === 1) { - b = '0' + b; - } - if (a.length === 1) { - a = '0' + a; - } - return '#' + r + g + b + a; - } -} -ColorPickerComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-picker', - template: "\n
\n \n \n
\n \n \n
\n
\n \n\n\n ", - styles: [".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"] - },] } -]; -ColorPickerComponent.ctorParameters = () => [ - { type: ElementRef } -]; -ColorPickerComponent.propDecorators = { - colorSet: [{ type: Output }], - colorPickerClosed: [{ type: Output }] -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dwLWtwaS1vdmVydmlldy13aWRnZXQvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFRdkIsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTjFCLGFBQVEsR0FBeUIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsc0JBQWlCLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFJakUsY0FBUyxHQUFRLE1BQU0sQ0FBQztJQUNRLENBQUM7SUFFeEMsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFJO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDL0MsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQyxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FBRTtRQUVsRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FBRTtRQUNwQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FBRTtRQUNwQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FBRTtRQUNwQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FBRTtRQUVwQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7O1lBOUNGLFNBQVMsU0FBQztnQkFDVCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLGd6QkFBNEM7O2FBRTdDOzs7WUFSQyxVQUFVOzs7dUJBVVQsTUFBTTtnQ0FDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgU29mdHdhcmUgQUcsIERhcm1zdGFkdCwgR2VybWFueSBhbmQvb3IgaXRzIGxpY2Vuc29yc1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1jb2xvci1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLWNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sb3ItcGlja2VyLWNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JQaWNrZXJDb21wb25lbnQge1xuICBAT3V0cHV0KCkgY29sb3JTZXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgQE91dHB1dCgpIGNvbG9yUGlja2VyQ2xvc2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGh1ZTogc3RyaW5nO1xuICBwdWJsaWMgY29sb3I6IHN0cmluZztcbiAgcHVibGljIGNvbG9yVHlwZTogYW55ID0gJ2hleGEnO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgY2xvc2VDb2xvclBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9yUGlja2VyQ2xvc2VkLmVtaXQodHJ1ZSk7XG4gIH1cbiAgYXBwbHlDb2xvckNsaWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuY29sb3JUeXBlID09PSAnaGV4YScpIHtcbiAgICAgICAgdGhpcy5jb2xvclNldC5lbWl0KHRoaXMuUkdCQVRvSGV4QSh0aGlzLmNvbG9yKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbG9yU2V0LmVtaXQodGhpcy5jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgUkdCQVRvSGV4QShyZ2JhKSB7XG4gICAgY29uc3Qgc2VwID0gcmdiYS5pbmRleE9mKCcsJykgPiAtMSA/ICcsJyA6ICcgJztcbiAgICByZ2JhID0gcmdiYS5zdWJzdHIoNSkuc3BsaXQoJyknKVswXS5zcGxpdChzZXApO1xuXG4gICAgLy8gU3RyaXAgdGhlIHNsYXNoIGlmIHVzaW5nIHNwYWNlLXNlcGFyYXRlZCBzeW50YXhcbiAgICBpZiAocmdiYS5pbmRleE9mKCcvJykgPiAtMSkgeyByZ2JhLnNwbGljZSgzLCAxKTsgfVxuXG4gICAgbGV0IHIgPSAoK3JnYmFbMF0pLnRvU3RyaW5nKDE2KTtcbiAgICBsZXQgZyA9ICgrcmdiYVsxXSkudG9TdHJpbmcoMTYpO1xuICAgIGxldCAgYiA9ICgrcmdiYVsyXSkudG9TdHJpbmcoMTYpO1xuICAgIGxldCAgYSA9IE1hdGgucm91bmQoK3JnYmFbM10gKiAyNTUpLnRvU3RyaW5nKDE2KTtcblxuICAgIGlmIChyLmxlbmd0aCA9PT0gMSkgeyByID0gJzAnICsgcjsgfVxuICAgIGlmIChnLmxlbmd0aCA9PT0gMSkgeyBnID0gJzAnICsgZzsgfVxuICAgIGlmIChiLmxlbmd0aCA9PT0gMSkgeyBiID0gJzAnICsgYjsgfVxuICAgIGlmIChhLmxlbmd0aCA9PT0gMSkgeyBhID0gJzAnICsgYTsgfVxuXG4gICAgcmV0dXJuICcjJyArIHIgKyBnICsgYiArIGE7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/color-picker/color-slider/color-slider-component.js b/runtime/dist/widget-library/esm2015/lib/color-picker/color-slider/color-slider-component.js deleted file mode 100644 index 6d491d8..0000000 --- a/runtime/dist/widget-library/esm2015/lib/color-picker/color-slider/color-slider-component.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Component, ViewChild, HostListener, Output, EventEmitter, } from '@angular/core'; -export class ColorSliderComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - // tslint:disable-next-line: use-lifecycle-interface - ngAfterViewInit() { - this.draw(); - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - onMouseUp(evt) { - this.mousedown = false; - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.clearRect(0, 0, width, height); - const gradient = this.ctx.createLinearGradient(0, 0, 0, height); - gradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); - gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)'); - gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)'); - gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)'); - gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)'); - gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)'); - gradient.addColorStop(1, 'rgba(255, 0, 0, 1)'); - this.ctx.beginPath(); - this.ctx.rect(0, 0, width, height); - this.ctx.fillStyle = gradient; - this.ctx.fill(); - this.ctx.closePath(); - if (this.selectedHeight) { - this.ctx.beginPath(); - this.ctx.strokeStyle = 'white'; - this.ctx.lineWidth = 5; - this.ctx.rect(0, this.selectedHeight - 5, width, 10); - this.ctx.stroke(); - this.ctx.closePath(); - } - } -} -ColorSliderComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-slider', - template: " " - },] } -]; -ColorSliderComponent.propDecorators = { - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Itc2xpZGVyLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dwLWtwaS1vdmVydmlldy13aWRnZXQvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3Itc2xpZGVyL2NvbG9yLXNsaWRlci1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQU92QixNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBT0UsVUFBSyxHQUF5QixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQU03QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBbUU1QixDQUFDO0lBaEVDLG9EQUFvRDtJQUNwRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFlO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBZTtRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxD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QUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQzs7O1lBL0VGLFNBQVMsU0FBQztnQkFDVCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLG1LQUE0QzthQUM3Qzs7O29CQUVFLE1BQU07cUJBR04sU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7d0JBd0JwQyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCBTb2Z0d2FyZSBBRywgRGFybXN0YWR0LCBHZXJtYW55IGFuZC9vciBpdHMgbGljZW5zb3JzXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtY29sb3Itc2xpZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXNsaWRlci1jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbG9yU2xpZGVyQ29tcG9uZW50IHtcbiAgQE91dHB1dCgpXG4gIGNvbG9yOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgY2FudmFzOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcblxuICBwcml2YXRlIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwcml2YXRlIG1vdXNlZG93biA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkSGVpZ2h0OiBudW1iZXI7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtbGlmZWN5Y2xlLWludGVyZmFjZVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5kcmF3KCk7XG4gIH1cbiAgb25Nb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZWRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRIZWlnaHQgPSBldnQub2Zmc2V0WTtcbiAgICB0aGlzLmRyYXcoKTtcbiAgICB0aGlzLmVtaXRDb2xvcihldnQub2Zmc2V0WCwgZXZ0Lm9mZnNldFkpO1xuICB9XG4gIG9uTW91c2VNb3ZlKGV2dDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1vdXNlZG93bikge1xuICAgICAgdGhpcy5zZWxlY3RlZEhlaWdodCA9IGV2dC5vZmZzZXRZO1xuICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICB0aGlzLmVtaXRDb2xvcihldnQub2Zmc2V0WCwgZXZ0Lm9mZnNldFkpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uTW91c2VVcChldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlZG93biA9IGZhbHNlO1xuICB9XG4gIGVtaXRDb2xvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGNvbnN0IHJnYmFDb2xvciA9IHRoaXMuZ2V0Q29sb3JBdFBvc2l0aW9uKHgsIHkpO1xuICAgIHRoaXMuY29sb3IuZW1pdChyZ2JhQ29sb3IpO1xuICB9XG4gIGdldENvbG9yQXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGNvbnN0IGltYWdlRGF0YSA9IHRoaXMuY3R4LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIHJldHVybiAoXG4gICAgICAncmdiYSgnICsgaW1hZ2VEYXRhWzBdICsgJywnICsgaW1hZ2VEYXRhWzFdICsgJywnICsgaW1hZ2VEYXRhWzJdICsgJywxKSdcbiAgICApO1xuICB9XG4gIGRyYXcoKSB7XG4gICAgaWYgKCF0aGlzLmN0eCkge1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0O1xuICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGNvbnN0IGdyYWRpZW50ID0gdGhpcy5jdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgaGVpZ2h0KTtcbiAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCwgJ3JnYmEoMjU1LCAwLCAwLCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjE3LCAncmdiYSgyNTUsIDI1NSwgMCwgMSknKTtcbiAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMC4zNCwgJ3JnYmEoMCwgMjU1LCAwLCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjUxLCAncmdiYSgwLCAyNTUsIDI1NSwgMSknKTtcbiAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMC42OCwgJ3JnYmEoMCwgMCwgMjU1LCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjg1LCAncmdiYSgyNTUsIDAsIDI1NSwgMSknKTtcbiAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJ3JnYmEoMjU1LCAwLCAwLCAxKScpO1xuXG4gICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgdGhpcy5jdHgucmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBncmFkaWVudDtcbiAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZEhlaWdodCkge1xuICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9ICd3aGl0ZSc7XG4gICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSA1O1xuICAgICAgdGhpcy5jdHgucmVjdCgwLCB0aGlzLnNlbGVjdGVkSGVpZ2h0IC0gNSwgd2lkdGgsIDEwKTtcbiAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.js b/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.js deleted file mode 100644 index 9ddd391..0000000 --- a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.js +++ /dev/null @@ -1,188 +0,0 @@ -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ -import { __awaiter } from "tslib"; -import { Component, Input } from '@angular/core'; -import * as _ from 'lodash'; -export class GpKpiOverviewWidgetConfigComponent { - constructor() { - this.config = {}; - this.kpiColorPickerClosed = true; - this.kpiBgColorPickerClosed = true; - this.titleColorPickerClosed = true; - this.kpiUnitColorPickerClosed = true; - this.messageColorPickerClosed = true; - this.widgetInfo = { - metadata: { - title: '', - icon: '', - }, - kpi: { - color: '#b0b0b0', - unit: '', - bgcolor: '#FFFFFF', - kpiName: '', - message: '', - otherKPIValue: '', - otherKPIName: '', - titleColor: '#808080', - unitColor: '#b0b0b0', - messageColor: '#808080', - titleSize: 20, - messageSize: 10, - unitSize: 20, - kpiSize: 30, - imageSize: 60, - } - }; - this.kpiNamesList = [ - { - id: 'totalDevices', - text: 'Total Devices' - }, - { - id: 'available', - text: 'Available Devices' - }, - { - id: 'unavailable', - text: 'Unavailable Devices' - }, - { - id: 'totalAlarms', - text: 'Total Alarms' - }, - { - id: 'major', - text: 'Major Alarms' - }, - { - id: 'minor', - text: 'Minor Alarms' - }, - { - id: 'critical', - text: 'Critical Alarms' - }, - { - id: 'highRisk', - text: 'High Risk' - }, - { - id: 'mediumRisk', - text: 'Medium Risk' - }, - { - id: 'lowRisk', - text: 'Low Risk' - }, - { - id: 'noRisk', - text: 'No Risk' - }, - { - id: 'other', - text: 'Other Property' - } - ]; - } - ngOnInit() { - return __awaiter(this, void 0, void 0, function* () { - // Editing an existing widget - if (_.has(this.config, 'customwidgetdata')) { - this.widgetInfo = _.get(this.config, 'customwidgetdata'); - } - else { // Adding a new widget - _.set(this.config, 'customwidgetdata', this.widgetInfo); - } - }); - } - updateIconInConfig($event) { - const kpiIcon = $event.target.files[0]; - const reader = new FileReader(); - reader.readAsDataURL(kpiIcon); - reader.onload = () => { - this.widgetInfo.metadata.icon = reader.result; - _.set(this.config, 'customwidgetdata', this.widgetInfo); - }; - } - updateConfig() { - _.set(this.config, 'customwidgetdata', this.widgetInfo); - } - setSelectedColorForKPI(value) { - this.widgetInfo.kpi.color = value; - this.updateConfig(); - } - closeKPIColorPicker() { - this.kpiColorPickerClosed = true; - } - openKPIColorPicker() { - this.kpiColorPickerClosed = false; - } - setSelectedColorForTitle(value) { - this.widgetInfo.kpi.titleColor = value; - this.updateConfig(); - } - closeTitleColorPicker() { - this.titleColorPickerClosed = true; - } - openTitleColorPicker() { - this.titleColorPickerClosed = false; - } - setSelectedColorForKPIUnit(value) { - this.widgetInfo.kpi.unitColor = value; - this.updateConfig(); - } - closeKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = true; - } - openKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = false; - } - setSelectedColorForMessage(value) { - this.widgetInfo.kpi.messageColor = value; - this.updateConfig(); - } - closeMessageColorPicker() { - this.messageColorPickerClosed = true; - } - openMessageColorPicker() { - this.messageColorPickerClosed = false; - } - closeKPIBgColorPicker() { - this.kpiBgColorPickerClosed = true; - } - openKPIBgColorPicker() { - this.kpiBgColorPickerClosed = false; - } - setSelectedColorForBackground(value) { - this.widgetInfo.kpi.bgcolor = value; - this.updateConfig(); - } -} -GpKpiOverviewWidgetConfigComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget-config', - template: "\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
", - styles: [".showColorPicker{display:block}.hideColorPicker{display:none}"] - },] } -]; -GpKpiOverviewWidgetConfigComponent.ctorParameters = () => []; -GpKpiOverviewWidgetConfigComponent.propDecorators = { - config: [{ type: Input }] -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC9zcmMvbGliL2dwLWtwaS1vdmVydmlldy13aWRnZXQtY29uZmlnL2dwLWtwaS1vdmVydmlldy13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQU81QixNQUFNLE9BQU8sa0NBQWtDO0lBc0Y3QztRQXJGUyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQzFCLHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QiwyQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDOUIsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLDZCQUF3QixHQUFHLElBQUksQ0FBQztRQUNoQyw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFJaEMsZUFBVSxHQUFHO1lBQ1gsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxFQUFFO2dCQUNULElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFdBQVcs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QyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7O1lBdExGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxvMlFBQW1EOzthQUVwRDs7OztxQkFFRSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vKlxyXG4qIENvcHlyaWdodCAoYykgMjAyMCBTb2Z0d2FyZSBBRywgRGFybXN0YWR0LCBHZXJtYW55IGFuZC9vciBpdHMgbGljZW5zb3JzXHJcbipcclxuKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxyXG4qXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ncC1rcGktb3ZlcnZpZXctd2lkZ2V0LWNvbmZpZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dwLWtwaS1vdmVydmlldy13aWRnZXQtY29uZmlnLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dwLWtwaS1vdmVydmlldy13aWRnZXQtY29uZmlnLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcEtwaU92ZXJ2aWV3V2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHt9O1xyXG4gIGtwaUNvbG9yUGlja2VyQ2xvc2VkID0gdHJ1ZTtcclxuICBrcGlCZ0NvbG9yUGlja2VyQ2xvc2VkID0gdHJ1ZTtcclxuICB0aXRsZUNvbG9yUGlja2VyQ2xvc2VkID0gdHJ1ZTtcclxuICBrcGlVbml0Q29sb3JQaWNrZXJDbG9zZWQgPSB0cnVlO1xyXG4gIG1lc3NhZ2VDb2xvclBpY2tlckNsb3NlZCA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgd2lkZ2V0SW5mbyA9IHtcclxuICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgaWNvbjogJycsXHJcbiAgICB9LFxyXG4gICAga3BpOiB7XHJcbiAgICAgIGNvbG9yOiAnI2IwYjBiMCcsXHJcbiAgICAgIHVuaXQ6ICcnLFxyXG4gICAgICBiZ2NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgIGtwaU5hbWU6ICcnLFxyXG4gICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgb3RoZXJLUElWYWx1ZTogJycsXHJcbiAgICAgIG90aGVyS1BJTmFtZTogJycsXHJcbiAgICAgIHRpdGxlQ29sb3I6ICcjODA4MDgwJyxcclxuICAgICAgdW5pdENvbG9yOiAnI2IwYjBiMCcsXHJcbiAgICAgIG1lc3NhZ2VDb2xvcjogJyM4MDgwODAnLFxyXG4gICAgICB0aXRsZVNpemU6IDIwLFxyXG4gICAgICBtZXNzYWdlU2l6ZTogMTAsXHJcbiAgICAgIHVuaXRTaXplOiAyMCxcclxuICAgICAga3BpU2l6ZTogMzAsXHJcbiAgICAgIGltYWdlU2l6ZTogNjAsXHJcblxyXG4gIH1cclxufVxyXG5rcGlOYW1lc0xpc3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAndG90YWxEZXZpY2VzJyxcclxuICAgICAgdGV4dDogJ1RvdGFsIERldmljZXMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ2F2YWlsYWJsZScsXHJcbiAgICAgIHRleHQ6ICdBdmFpbGFibGUgRGV2aWNlcydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAndW5hdmFpbGFibGUnLFxyXG4gICAgICB0ZXh0OiAnVW5hdmFpbGFibGUgRGV2aWNlcydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAndG90YWxBbGFybXMnLFxyXG4gICAgICB0ZXh0OiAnVG90YWwgQWxhcm1zJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdtYWpvcicsXHJcbiAgICAgIHRleHQ6ICdNYWpvciBBbGFybXMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ21pbm9yJyxcclxuICAgICAgdGV4dDogJ01pbm9yIEFsYXJtcydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnY3JpdGljYWwnLFxyXG4gICAgICB0ZXh0OiAnQ3JpdGljYWwgQWxhcm1zJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdoaWdoUmlzaycsXHJcbiAgICAgIHRleHQ6ICdIaWdoIFJpc2snXHJcbiAgICB9XHJcbiAgICAsXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnbWVkaXVtUmlzaycsXHJcbiAgICAgIHRleHQ6ICdNZWRpdW0gUmlzaydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnbG93UmlzaycsXHJcbiAgICAgIHRleHQ6ICdMb3cgUmlzaydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnbm9SaXNrJyxcclxuICAgICAgdGV4dDogJ05vIFJpc2snXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ290aGVyJyxcclxuICAgICAgdGV4dDogJ090aGVyIFByb3BlcnR5J1xyXG4gICAgfVxyXG5cclxuICBdO1xyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHdpZGdldFxyXG4gICAgaWYoXy5oYXModGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhJykpIHtcclxuICAgICAgdGhpcy53aWRnZXRJbmZvID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhJyk7XHJcbiAgICB9IGVsc2UgeyAvLyBBZGRpbmcgYSBuZXcgd2lkZ2V0XHJcbiAgICAgIF8uc2V0KHRoaXMuY29uZmlnLCAnY3VzdG9td2lkZ2V0ZGF0YScsIHRoaXMud2lkZ2V0SW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlSWNvbkluQ29uZmlnKCRldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IGtwaUljb24gPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1swXTtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChrcGlJY29uKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRJbmZvLm1ldGFkYXRhLmljb24gPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcclxuICAgICAgICBfLnNldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEnLCB0aGlzLndpZGdldEluZm8pO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDb25maWcoKSB7XHJcblxyXG4gICAgXy5zZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhJywgdGhpcy53aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG5cclxuICBzZXRTZWxlY3RlZENvbG9yRm9yS1BJKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMud2lkZ2V0SW5mby5rcGkuY29sb3IgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUtQSUNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5rcGlDb2xvclBpY2tlckNsb3NlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvcGVuS1BJQ29sb3JQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmtwaUNvbG9yUGlja2VyQ2xvc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENvbG9yRm9yVGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy53aWRnZXRJbmZvLmtwaS50aXRsZUNvbG9yID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VUaXRsZUNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy50aXRsZUNvbG9yUGlja2VyQ2xvc2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5UaXRsZUNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy50aXRsZUNvbG9yUGlja2VyQ2xvc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENvbG9yRm9yS1BJVW5pdCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLndpZGdldEluZm8ua3BpLnVuaXRDb2xvciA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlS1BJVW5pdENvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5rcGlVbml0Q29sb3JQaWNrZXJDbG9zZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb3BlbktQSVVuaXRDb2xvclBpY2tlcigpIHtcclxuICAgIHRoaXMua3BpVW5pdENvbG9yUGlja2VyQ2xvc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENvbG9yRm9yTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLndpZGdldEluZm8ua3BpLm1lc3NhZ2VDb2xvciA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVDb25maWcoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlTWVzc2FnZUNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5tZXNzYWdlQ29sb3JQaWNrZXJDbG9zZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1lc3NhZ2VDb2xvclBpY2tlcigpIHtcclxuICAgIHRoaXMubWVzc2FnZUNvbG9yUGlja2VyQ2xvc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VLUElCZ0NvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5rcGlCZ0NvbG9yUGlja2VyQ2xvc2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5LUElCZ0NvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5rcGlCZ0NvbG9yUGlja2VyQ2xvc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENvbG9yRm9yQmFja2dyb3VuZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLndpZGdldEluZm8ua3BpLmJnY29sb3IgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XHJcbiAgfVxyXG5cclxufSJdfQ== \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.component.js b/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.component.js deleted file mode 100644 index ee231a2..0000000 --- a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.component.js +++ /dev/null @@ -1,326 +0,0 @@ -import { __awaiter } from "tslib"; -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Component, Input } from '@angular/core'; -import * as _ from 'lodash'; -import { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service'; -export class GpKpiOverviewWidgetComponent { - constructor(kpiService) { - this.kpiService = kpiService; - this.device = { - id: '' - }; - this.kpi = { - title: '', - topMargin: '', - icon: '', - value: 0, - unit: '', - color: '', - bgcolor: '', - unitColor: '', - titleColor: '', - messageColor: '', - otherKPIName: '', - otherKPIMetric: '', - kpiName: '', - message: '', - titleSize: 20, - messageSize: 10, - kpiSize: 30, - unitSize: 20, - imageSize: 60, - containerHeight: 80, - default: { - color: '', - bgcolor: '' - } - }; - } - ngOnInit() { - // Get Device Id - this.device.id = _.get(this.config, 'device.id'); - if (this.device.id === undefined || this.device.id.length === 0) { - } - // Get KPI Title - this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title'); - if (this.kpi.title === undefined || this.kpi.title.length === 0) { - this.kpi.title = 'Default Title'; - } - // Get KPI Name - this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName'); - if (this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) { - this.kpi.kpiName = 'totalDevices'; - } - // Get KPI Icon - this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon'); - if (this.kpi.icon === undefined || this.kpi.icon.length === 0) { - this.kpi.icon = 'data:image/png;base64,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'; - } - // Get KPI Message - this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message'); - if (this.kpi.message === undefined || this.kpi.message.length === 0) { - this.kpi.message = ''; - } - // Get KPI Color - this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color'); - if (this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) { - this.kpi.default.color = '#b0b0b0'; - } - this.kpi.color = this.kpi.default.color; - // Get Bg KPI Color - this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor'); - if (this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) { - this.kpi.default.bgcolor = '#FFFFFF'; - } - this.kpi.bgcolor = this.kpi.default.bgcolor; - // Get Title Color - this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor'); - if (this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) { - this.kpi.titleColor = '#b0b0b0'; - } - // Get Unit Color - this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor'); - if (this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) { - this.kpi.unitColor = '#b0b0b0'; - } - // Get message Color - this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor'); - if (this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) { - this.kpi.messageColor = '#808080'; - } - // Get KPI Unit - this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit'); - this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize'); - this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize'); - this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize'); - this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize'); - this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize'); - this.kpi.value = null; - this.getDeviceData(); - } - ngAfterViewInit() { - this.configureTopMarginRequired(); - } - // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not. - configureTopMarginRequired() { - const allWidgets = document.querySelectorAll('.dashboard-grid-child'); - allWidgets.forEach((w) => { - const widgetElement = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget'); - if (widgetElement !== undefined && widgetElement !== null) { - const widgetTitleElement = w.querySelector('div > div > div > c8y-dashboard-child-title'); - const widgetTitleDisplayValue = window.getComputedStyle(widgetTitleElement).getPropertyValue('display'); - if (widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') { - this.kpi.topMargin = '25px'; - } - else { - this.kpi.topMargin = '0'; - } - } - }); - } - getDeviceData() { - return __awaiter(this, void 0, void 0, function* () { - if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') { - if (this.kpi.kpiName === 'totalDevices') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.totalDevices; - } - } - else if (this.kpi.kpiName === 'available') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.availableDevices; - } - } - else if (this.kpi.kpiName === 'unavailable') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.unavailableDevices; - } - } - else if (this.kpi.kpiName === 'totalAlarms') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.totalAlarms; - } - } - else if (this.kpi.kpiName === 'major') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.majorAlertsCount; - } - } - else if (this.kpi.kpiName === 'minor') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.minorAlertsCount; - } - } - else if (this.kpi.kpiName === 'critical') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.criticalAlertsCount; - } - } - else if (this.kpi.kpiName === 'highRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.highRiskCount; - } - } - else if (this.kpi.kpiName === 'mediumRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.mediumRiskCount; - } - } - else if (this.kpi.kpiName === 'lowRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.lowRiskCount; - } - } - else if (this.kpi.kpiName === 'noRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.noRiskCount; - } - } - else if (this.kpi.kpiName === 'other') { - if (this.kpi.otherKPIMetric === 'value') { - const result = yield this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - else if (this.kpi.otherKPIMetric === 'count') { - const result = yield this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - } - else { - this.kpi.value = 0; - } - } - }); - } - // Getter KPI Title - getKPITitle() { - return this.kpi.title; - } - // Getter KPI Title Top Margin - getKPITitleTopMargin() { - return this.kpi.topMargin; - } - // Getter KPI Icon - getKPIIcon() { - return this.kpi.icon; - } - // Get KPI Container Height - getKPIContainerHeight() { - return '90px'; - } - // Getter KPI Value - getKPIValue() { - return this.kpi.value; - } - // Getter KPI Unit - getKPIUnit() { - return this.kpi.unit; - } - // Getter KPI Name - getKPIName() { - return this.kpi.kpiName; - } - // Getter KPI Color - getKPIColor() { - return this.kpi.color; - } - // Getter Title Color - getTitleColor() { - return this.kpi.titleColor; - } - // Getter Unit Color - getUnitColor() { - return this.kpi.unitColor; - } - // Getter Message Color - getMessageColor() { - return this.kpi.messageColor; - } - // Getter KPI background Color - getKPIBgColor() { - return this.kpi.bgcolor; - } - // Getter Other KPI Name - getOtherKPIName() { - return this.kpi.otherKPIName; - } - // Getter Other KPI metric - getOtherKPIMetric() { - return this.kpi.otherKPIMetric; - } - // Getter Other KPI Message - getKPIMessage() { - return this.kpi.message; - } - getKPISize() { - return this.kpi.kpiSize + 'px'; - } - getTitleSize() { - return this.kpi.titleSize + 'px'; - } - getMessageSize() { - return this.kpi.messageSize + 'px'; - } - getUnitSize() { - return this.kpi.unitSize + 'px'; - } - getImageSize() { - return this.kpi.imageSize + 'px'; - } - getContainerHeight() { - if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.imageSize + 10; - } - else if (this.kpi.titleSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.titleSize + 10; - } - else { - this.kpi.containerHeight = this.kpi.kpiSize + 10; - } - return this.kpi.containerHeight + 'px'; - } -} -GpKpiOverviewWidgetComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget', - template: "
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n

{{getKPITitle()}}

\r\n \r\n \r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n" - },] } -]; -GpKpiOverviewWidgetComponent.ctorParameters = () => [ - { type: GpKpiOverviewWidgetService } -]; -GpKpiOverviewWidgetComponent.propDecorators = { - config: [{ type: Input }] -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0L3NyYy9saWIvZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQXVDOUUsTUFBTSxPQUFPLDRCQUE0QjtJQW1DdkMsWUFBb0IsVUFBc0M7UUFBdEMsZUFBVSxHQUFWLFVBQVUsQ0FBNEI7UUEvQmxELFdBQU0sR0FBVztZQUN2QixFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUE7UUFFTyxRQUFHLEdBQVE7WUFDakIsS0FBSyxFQUFFLEVBQUU7WUFDVCxTQUFTLEVBQUUsRUFBRTtZQUNiLElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLENBQUM7WUFDUixJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsRUFBRTtZQUNiLFVBQVUsRUFBRSxFQUFFO1lBQ2QsWUFBWSxFQUFFLEVBQUU7WUFDaEIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsV0FBVyxFQUFFLEVBQUU7WUFDZixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixlQUFlLEVBQUUsRUFBRTtZ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WTtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDcEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1NBQ3JEO2FBQU0sSUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQztZQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7U0FDdEQ7YUFBSTtZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztTQUNsRDtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLENBQUM7OztZQS9TRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsbStDQUE0QzthQUU3Qzs7O1lBdENRLDBCQUEwQjs7O3FCQXlDaEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIFNvZnR3YXJlIEFHLCBEYXJtc3RhZHQsIEdlcm1hbnkgYW5kL29yIGl0cyBsaWNlbnNvcnNcbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgR3BLcGlPdmVydmlld1dpZGdldFNlcnZpY2UgfSBmcm9tICcuL2dwLWtwaS1vdmVydmlldy13aWRnZXQuc2VydmljZSc7XG5cblxuaW50ZXJmYWNlIERldmljZSB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBLUEkge1xuICBkZWZhdWx0OiB7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBiZ2NvbG9yOiBzdHJpbmdcbiAgfVxuICB0aXRsZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIHRvcE1hcmdpbjogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBiZ2NvbG9yOiBzdHJpbmc7XG4gIHVuaXRDb2xvcjogc3RyaW5nO1xuICB0aXRsZUNvbG9yOiBzdHJpbmc7XG4gIG1lc3NhZ2VDb2xvcjogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICB1bml0OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAga3BpTmFtZTogc3RyaW5nO1xuICBvdGhlcktQSU5hbWU6IHN0cmluZztcbiAgb3RoZXJLUElNZXRyaWM6IHN0cmluZztcbiAgdGl0bGVTaXplOiBudW1iZXI7XG4gIG1lc3NhZ2VTaXplOiBudW1iZXI7XG4gIGtwaVNpemU6IG51bWJlcjtcbiAgdW5pdFNpemU6IG51bWJlcjtcbiAgaW1hZ2VTaXplOiBudW1iZXI7XG4gIGNvbnRhaW5lckhlaWdodDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0Lmh0bWwnLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEdwS3BpT3ZlcnZpZXdXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXR7XG5cbiAgQElucHV0KCkgY29uZmlnO1xuXG4gIHByaXZhdGUgZGV2aWNlOiBEZXZpY2UgPSB7XG4gICAgaWQ6ICcnXG4gIH1cblxuICBwcml2YXRlIGtwaTogS1BJID0ge1xuICAgIHRpdGxlOiAnJyxcbiAgICB0b3BNYXJnaW46ICcnLFxuICAgIGljb246ICcnLFxuICAgIHZhbHVlOiAwLFxuICAgIHVuaXQ6ICcnLFxuICAgIGNvbG9yOiAnJyxcbiAgICBiZ2NvbG9yOiAnJyxcbiAgICB1bml0Q29sb3I6ICcnLFxuICAgIHRpdGxlQ29sb3I6ICcnLFxuICAgIG1lc3NhZ2VDb2xvcjogJycsXG4gICAgb3RoZXJLUElOYW1lOiAnJyxcbiAgICBvdGhlcktQSU1ldHJpYzogJycsXG4gICAga3BpTmFtZTogJycsXG4gICAgbWVzc2FnZTogJycsXG4gICAgdGl0bGVTaXplOiAyMCxcbiAgICBtZXNzYWdlU2l6ZTogMTAsXG4gICAga3BpU2l6ZTogMzAsXG4gICAgdW5pdFNpemU6IDIwLFxuICAgIGltYWdlU2l6ZTogNjAsXG4gICAgY29udGFpbmVySGVpZ2h0OiA4MCxcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb2xvcjogJycsXG4gICAgICBiZ2NvbG9yOiAnJ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga3BpU2VydmljZTogR3BLcGlPdmVydmlld1dpZGdldFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgICAgIC8vIEdldCBEZXZpY2UgSWRcbiAgICAgICAgdGhpcy5kZXZpY2UuaWQgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2RldmljZS5pZCcpO1xuICAgICAgICBpZih0aGlzLmRldmljZS5pZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGV2aWNlLmlkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCBLUEkgVGl0bGVcbiAgICAgICAgdGhpcy5rcGkudGl0bGUgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEubWV0YWRhdGEudGl0bGUnKTtcbiAgICAgICAgaWYodGhpcy5rcGkudGl0bGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtwaS50aXRsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmtwaS50aXRsZSA9ICdEZWZhdWx0IFRpdGxlJztcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgS1BJIE5hbWVcbiAgICAgICAgdGhpcy5rcGkua3BpTmFtZSA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnY3VzdG9td2lkZ2V0ZGF0YS5rcGkua3BpTmFtZScpO1xuICAgICAgICBpZih0aGlzLmtwaS5rcGlOYW1lID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkua3BpTmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmtwaS5rcGlOYW1lID0gJ3RvdGFsRGV2aWNlcyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IEtQSSBJY29uXG4gICAgICAgIHRoaXMua3BpLmljb24gPSBfLmdldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEubWV0YWRhdGEuaWNvbicpO1xuICAgICAgICBpZih0aGlzLmtwaS5pY29uID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkuaWNvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmtwaS5pY29uID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTWdBQUFESUNBWUFBQUN0V0s2ZUFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFEbWxKUkVGVWVKenQzWHV3VldVWngvSHZBeWdJQWlFa2FFaDRpOHd1WmxKcU4wMXIwbVN5VW5PNjZtU1dXUlk1T1RwT3QzRnlTc01hcld6VTFNbHBNdlBDNUdVU0swM1VzcUZFU3ZFQ21sZklRSlFFUEhBNHF6OFdSdy9IdmM5ZTcxbVg1MTE3L1Q0ejd6K2J6VG0vOWU3OW5QWHV2ZGI3dmlBaUlpSWlJaUlpSWlJaUlpSWlqV1BlQVVTR2FUSXdCUmdMOUFCcmdKVkE0aGxLeE1zZXdPa1lDekJXWVNRdDJqcU11ekhPQmQ2RFRnRFNBSWRqM042bUlEcTFSNEc1d0Rqdmd4QXAybDRZdHc2ek1BYTNwNEJQZUIrUVNGRk94TmhRVUhFTWJGY0JFNzBQVG1TNERHTmVDWVV4c1AwVG1PNTlvQ0xoalBOTExvNyt0aHpZeWZ0d1JVTE1yYWc0K3R0aVlEdnZneGJKWWpiR3hvb0xKTUc0eVB2QVJUb1ppYkhZb1RqU0JnZDVkNERJVUU1d0s0NjAzWU11S0Vxa1JtQXNjeTZRQkRpaWZVQVJQNGNBdTN1SHdQaDh1MzlTZ1lnZjQxanZDRnNjQm94djlROHFFUEYwcUhlQUxiYWh6WWQxRlloNG1RYk04QTd4RW1PL1ZnK3JRTVRMNjcwRERES3IxWU1xRVBFeXpUdkFJRk5hUGFnQ0VTL2Jld2NZcEdVZUZZaDRpVzFxN0laV0Q2cEF4TXR6M2dFR1dkUHFRUldJZUhuTU84QWd5MXM5cUFJUkwwdUJ6ZDRoWHBLd3BOWERLaER4c2c1WTdCMWlnRnRiUGFnQ0VVODNlZ2ZZWWhId1pLdC9VSUdJbjRSZkVjTzNXUW0vOUk0ZzBwcHhrL1B0N3F2UXVsa1NzZGtZZlk1elFiN3UzUUVpUXpNdWRpcVFKY0FvNzhNWDZXUUN4c01WRjhjNjRBM2VCeTZTMWQ0WXoxVlVISnVCajNnZnNFaW9BekdlTDdrNGVvSGp2QTlVWkxqZWpQSHZrb3JqT1laWW9FR2tMaVpSL0ZwWkM0SGR2QTlNcEFpRzhWUkJoZkVnOENudkF4SXAwZ0U1aStKNTBxME81cER6YmhGOUJ5enhNVDRXOE93RndIM0FXaEllQWU0SDdpR21PNFZGQ21Vc3ozaW02QU4yOW80clVxVjlBb1pTZDVZZFJuZnpTbHlNajJaK2JzSzFKU1lSaVpCeFgrWXpDTXowaml0U3BWa0J3NnUvVnhGSVF5eUppWVpYSW0wWml3S0dWN0V0WFNwU3Foa0J3NnY3cWdxbElaYkVJdnZ3Q2cydnBHbU0yd09HVi90NHh4V3AwbFNNelJrTHBPVUtpR1hSRUV0aWNDVFozNHZYbEJsRUpEN0d6UUhEcS8yOTQ0cFVhUkxHeG93RjhpUVY3Mm11SVpaNG0wTzZpV1lXMXhMRFNvd2lsVEhtQnd5dkR2S09LMUtsY1Jqck14YklNOERJcWdOcWlDV2VEZ2UyeS9qYytUak1FdFNVMjg0bWsrNkF1aDNRUTdwVjEwclhSTjFDY3o5cWFRL2dkSXdGR0t2YW5PNy9oM0VueHZlQTJkNkJhMm8weHRxTXc2czFaUDhnTHlVNVBPaDJoMWZlUEhjOGVoRkRIQkhRdjlxL3c5RmVHTGNPc3pBR3QvdUJnNzBQcUJhTVN3Tyt2ZnF3ZDl5bU9oRmpRMEhGMGQvNk1INkFQdDhOWmVRUXc5ZkI3UVZnakhmZ3BqR01lUVVYeHVCMlBkbS9vV21hOXdYMDQxWGVZWnZIT0wvazR1aHZ0d0RiZWg5dWRJeWZCZ3l2UHU0ZHQybm1WbFFjL2UweTd3T09UTWk2dXk4QzIzc0hicExaWkw4eHJyZ0duL1UrOElpRXJMdjdPKyt3VFRLUzRwZlV6OXFlSmIzWUtNWVA5WWNsVGljNEZVZC91OEM3QTZLUWZkM2RqY0FrNzdoTk1RSmptWE9CYkFDbWVuZUVzNUIxZHhkNGg0WG0zS3g0Q0xDN2M0WXhOSDBqbDdCN3J6UzF0akxHTDV6UEh2MXRrWGRYdU1xKzd1NW1kTGF0a1BGWUJNWFIvOEx2NE4wZFRrTFczYjNkTzJ5L0pneXhwZ0V6dkVOc01ZTG0zdjFieStGVkV3b2t0alZjWjNrSGNKRjlXN1dFaUZaT2JFS0JUUE1Pc0JXTExFODFaZ0J2eS9qY1JjQVRKV1lKMG9RQ2llMVdoZkhlQVJ6VWNuZ0Z6U2lRMkphSmlTMVArY0oyclZXQlZPeFo3d0JiU1ZqdEhhRmlVNEVETXo1M0NiQ3N4Q3pCbWxBZ2ozb0hHT1FSN3dBVnk3N3Vib1FMTXpTaFFKYVNya1lTaTN1OEExUXE1T3A1Wk1PcjVqQnVpK0FpWVlLeGtvclhsblVXc3U3dWc5NWhXMm5DR1FRUzVudEgyR0kremZxUUhycnVyampaRWFQSC9RelN0S3ZvWWV2dTd1Y2R0OWxDbHBrcHIxMkF3L3F5VHNhUmZjV1lmM3VIRlppSjhXSUVSWElUemJoWWVIUkFuL3pJTzZ5a3ZoMUJnU1FZUzRqbkJzcHlHTC9PM0Ivd0x1KzRrdG9HNCs0SUNpVEJXQUc4M2J0RFNoS3k3dTRLbXZKbFVVMU14M2c2Z2dKSk1OWURSM2wzU0FsQzF0MzltWGRZR2N5NEpJTGk2Rzk5d0JuZVhWS29zSFYzRC9XT0sxdmJHNk0zZ3NJWTNDNmpPMVpoSEVYMmRYZFhveldNSXhPeTVmRHcydk01L3U5dDFIOUs3aUVCeDN1cGQxaloydUVsRnNZSzREaGdZczRpZkFqWTA3ZWJjZ2hiZC9jSTc3anlzbEVZUzBzb2pIOEFYd0xHRHZwZEYrYjRtYXVCOS9wMFV5NGg2KzZ1QlVaN0IrNmtTZU8va3dpYm4zNDFzQnJZRFpoQWVnVjhJN0FLZUpTRXhjQnQwUElxY0M4Skp3RVBZc3dqL0d2TUhUQVdrUEFGNFBMQS8rdHBmMkRuak0rOWdianVzbTYwU1JpckEvNkNyNlM0cTkxelNQYzBITzdaNUd6cWNnZHcyTHE3SWJNTXBWVEdqNFBlbEhCQ3dRbjJ3WGdpUjVIOGxqcHN4cE45M2QzMWJEMGtGVWV6Q052eVlESGxYTm5kQ1dOUmppSzVtOWhXYU5sYXlMcTd1clU5R3NiMWdXZVBNamZoSEl0eGJZNGllUXg0VTRuNWhzODRLNkNQUCtrZFYxTHZEM3dEVmpHeHlqRE95VkVrYTRIREtzZ1pKdnU2dXozQVJPKzRrbTZZODgrQU4xNFBzRWVGK1U1ZytMdGQ5UUpmcVRCckp5SHI3dDdrSFZaU1h3eDgwLzNRSWVQN01OYmtPSnZFTWdIcmpJRGgxZWU4dzBwNk5mdVpnRGZhZi9FNzdiK2VmSnY3K0UvQXl2N2xReS9haWk0Q3hybEJiN0wwSXFLbnlSZ0xjeFNKNXdTc0dRRTUvK1NVVVFiWW5iQUZHdjVGSE1PVWJUR3V5RkVrWGhPd3ZoYndoK2hraDN5eWxkQ3ZVZUVEM3BFSCtTWkczekNMcFBvSldOblBmSDFrdncxRlNuSlE0QnZxUnUvQWJSeEw5aFZCV3IwUnE1cUFOUlZqYzhaY2QxV1VTZG9ZZ1hGUHdCdHBFL0Z0cmpQUUFSai95VEhrcW1JQzFoY0N6dFNubHB4Rk92aGM0QnZvZk8vQUdjekUrRmVPSXJtTk1pZGdoY3g3Z1ptbDVaQ090c2RZRWZER1dVMTladTVOQ0hvanZyS1ZOUUVyWk4zZGY1VHcreVV6NCt5Z053MmM0aDA1VUl3VHNENFQwTjluRnZ5N0pjQnJDZnRBdTVUNlRoVDdHdGsvRkE5dVBhUlRnb3NSdHU1dXpKLzF1cHp4bThDeng0ZThJK2NVd3dTc2tIVjM3eS9pb0dWNDNobjQ1cmpaTzNCQnZDZGdoYXk3ZTFaUkJ5MWhET052QVM5VUw3QzNkK2dDK1UzQUNsdDNkNTlDajFveSszVGdHK0pDNzhBbEtITUNsZ0h2QUw2RmNRUEd3NlJEdTVDci9NdXI2d29aYUN6R2t3RXYxSE4wNzEya1JVL0FHZ2VjaXZGSWpwL1ozODUxNnBPR003NFQ5RUkxNHlwdUVST3dqcUhJaGIzVFpZQ2tZdE14MWdXOFVBL1RIV3ZlWnBGM0FsYXhEVTZqTGtzV2RZM1FXOExUZmJxYkpPOEVyS0xiMWNBWTcwNXBpcmNUOWlHeHFSTjA4azdBS3JyOWtUcXM2MVY3eHAwQkw4cG00QzNla1IzbG5ZQlZkTHNHRGJkS2RXemdDM0tKZCtCSTVKbUFWV3lEYjNoM1JyY2FnL0ZZd0l1eEZwanFIVG9pZVNaZ0ZkbGVCR1o1ZDBZM09qUHdMMVYzYldsV2pMd1RzSXBxMTN0M1JMZlppYkNiOHg2bEJ2dE9PSmxKOWdXbXl4eHE3ZXZkRWQwalpFUEl0UE9QOW80Y3NWRmszK0NtekhheGQwZDBpMzBKbS8rdzBEdHc1QTZMb0RnU2pEWFVkMDVPUkl3L0IzUjZIN0NmZCtTb0dUK1BvRGo2ei9Udjh1Nk9MTXJZQjZNb0h3UGVFL0Q4SzRCRkpXWHBGaUg5V1RiZHA1WERhTUkrVEw2QUZpWHJaSFRnY0xYc1Zvc3RvR005ZzN5VmRQUE1iQkxPQVo0dUxVMTNtRTVjci9kMDd3QjF0U1BHOHdGL2lSNUg5L2xrOGRZSXpob0QyMSs5T3lTTG1QNmlwTkk1ekJNeVB6L2hER0JEYVhtNngyYnZBSVBFbHFjVzNvVFJHL0JYNkMvb0JyaXNkbzNnckRHdy9kNjdRN0tJNnd4aW5FZjJyUWdTRXVZQ1NZbUp1c25UUUo5M2lBRWU5dzZRUlV3Rk1nYzROT0Q1VjBJOXhyR1I2QUVlOFE3eGtvUUh2Q1BVeVRZWUR3YWNudGNEdTNpSHJoM2o4Z2lHVm1uejJld25XQ3hua0pPQjF3VThmeDd3UkVsWnVsY1N6Y0o1cTRHL2U0ZW9pOGtZendiODlYbUtkR2thQ1RlV2ZNdVdGdFYrNHQwUjlXRmNFSGhxUHM0N2NxMFo1enNYUngvZHRjSmxxZmJDMkJUUXVZdlExN3A1N1lMdjdNS3J2VHVnUG95YkFzOGU3L2FPM0JWQ0Y5NHJycTBIN1RTVjFRY0RPL2UzM29HN3lHakM5bk1zcHFXck4wb0dvekR1QytqY0Y0RmR2VU4zbVQweFZsZFlJRmQ2SDNDZG5Cell1ZC8zRHR5bDlxZWFiN1grZ05ZSnlPeFZHS3NDT25jbE1ONDdkQmViamZGTWljVnhMVnA2TklCeFh1QzQ5ZlBla1J0Z0Y0dzdDaTZNWHRMTk8ydjlyV1BSNFEyWVNYcFZmQW93bHZScS9UclNtOVArUjdxejBUWVpmOTY5Sk94TFhEZlpkYXNSd0VtazB3MG01ZnhaZDVEd1plRGUvTEhxYnd6cHluMVhCdzZkc3B3OUR2WSt1QVlhRDV4R3VxTlV5T3UxQ2VOR3dtNDQ3V3JqU2JmbktyWW9YbTd6dlE5UTJBODRIZU02alB0SmJ3bmFoTEVlWXlYR1hhUnJJSDhhMk5FNWExU09vc2lkaUY3WmVvQTl2QTlTSk5TMkdCZVZXQmo5Ylo3M2dZcUUyaDdqbGdxSzQ3L0FSTytERllIczgwRzJ4YmlPYWo2QXJVTFRhS1ZXcWhsV0RXelhVL1B2ejZVNWpxcTRPTklHcDNnZnVFZ240eW4zMjZxaDJndG85VDF4MXVrenlGeGdweXFDdERBTzQ3dE92MXNFR0hxY1B3YmpTV0J5VldGYTJFVENyc0JUamhta3dZWTZneHlKYjNGQWVzL1c4YzRacE1IYUY0aHhWSVU1MmpPTzhZNGd6ZFZ1aUdWYkx0aDVuMEZTQ1RzREs3eGpTUE8wTzRQTUpKYmlTTlZpRlQ3cFB1MEtKR1NWd3lyRWxrY2FvbDJCVEtrMFJTZkdOTzhJMGt6dENpUzJIWnMwcDFsY3RDdVFua3BUZExiZU80QTBVN3NDV1ZOcGlrNlN5UEpJWTdRcmtHV1ZwdWhzdVhjQWFhYWhDbVJkbFVFNldPSWRRSnFwWFlIMEFuZFdHV1FJSzRHbDNpR2ttZHJmYXBKRXM2cElMRGxFdHJJRHZ2dEk5RStjT3NDN0kwUmFNMzdxWENBTHZidEFaQ2l2d1hOUE8zaXZkd2VJZEhLcVU0RmM0WDNnSWxtTW9KcjFzQWEyWmNBRTd3TVh5V295eGdNVkZjZXphQmRVcWFFWkdBOVZVQno2MWtwcTY5VVV2OUZLZjFzT3ZOSDdBRVh5R29WeEZzYkdnaitRYXoxZTZTcDdrVzZhMDVlak1CYWlyM0tseTgzQ09KdnNPeEt0d0xnUWZkYVFHaWg2Z2VoZGdIMkIxMkZNQWNZQkcwam5jeXduM2JQdWdZSi9wNGlJaUlpSWlJaUlpSWlJaUlpSVNISCtEeG9FQ0lUTGpRb0JBQUFBQUVsRlRrU3VRbUNDJztcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgS1BJIE1lc3NhZ2VcbiAgICAgICAgdGhpcy5rcGkubWVzc2FnZSA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnY3VzdG9td2lkZ2V0ZGF0YS5rcGkubWVzc2FnZScpO1xuICAgICAgICBpZih0aGlzLmtwaS5tZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkubWVzc2FnZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmtwaS5tZXNzYWdlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IEtQSSBDb2xvclxuICAgICAgICB0aGlzLmtwaS5kZWZhdWx0LmNvbG9yID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS5jb2xvcicpO1xuICAgICAgICBpZih0aGlzLmtwaS5kZWZhdWx0LmNvbG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkuZGVmYXVsdC5jb2xvci5pbmRleE9mKCcjJykgIT09IDApIHtcbiAgICAgICAgICB0aGlzLmtwaS5kZWZhdWx0LmNvbG9yID0gJyNiMGIwYjAnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua3BpLmNvbG9yID0gdGhpcy5rcGkuZGVmYXVsdC5jb2xvcjtcbiAgICAgICAgLy8gR2V0IEJnIEtQSSBDb2xvclxuICAgICAgICB0aGlzLmtwaS5kZWZhdWx0LmJnY29sb3IgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEua3BpLmJnY29sb3InKTtcbiAgICAgICAgaWYodGhpcy5rcGkuZGVmYXVsdC5iZ2NvbG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkuZGVmYXVsdC5iZ2NvbG9yLmluZGV4T2YoJyMnKSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMua3BpLmRlZmF1bHQuYmdjb2xvciA9ICcjRkZGRkZGJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtwaS5iZ2NvbG9yID0gdGhpcy5rcGkuZGVmYXVsdC5iZ2NvbG9yO1xuXG4gICAgICAgIC8vIEdldCBUaXRsZSBDb2xvclxuICAgICAgICB0aGlzLmtwaS50aXRsZUNvbG9yID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS50aXRsZUNvbG9yJyk7XG4gICAgICAgIGlmKHRoaXMua3BpLnRpdGxlQ29sb3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtwaS50aXRsZUNvbG9yLmluZGV4T2YoJyMnKSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMua3BpLnRpdGxlQ29sb3IgPSAnI2IwYjBiMCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgVW5pdCBDb2xvclxuICAgICAgICB0aGlzLmtwaS51bml0Q29sb3IgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEua3BpLnVuaXRDb2xvcicpO1xuICAgICAgICBpZih0aGlzLmtwaS51bml0Q29sb3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmtwaS51bml0Q29sb3IuaW5kZXhPZignIycpICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5rcGkudW5pdENvbG9yID0gJyNiMGIwYjAnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IG1lc3NhZ2UgQ29sb3JcbiAgICAgICAgdGhpcy5rcGkubWVzc2FnZUNvbG9yID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS5tZXNzYWdlQ29sb3InKTtcbiAgICAgICAgaWYodGhpcy5rcGkubWVzc2FnZUNvbG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5rcGkubWVzc2FnZUNvbG9yLmluZGV4T2YoJyMnKSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMua3BpLm1lc3NhZ2VDb2xvciA9ICcjODA4MDgwJztcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgS1BJIFVuaXRcbiAgICAgICAgdGhpcy5rcGkudW5pdCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnY3VzdG9td2lkZ2V0ZGF0YS5rcGkudW5pdCcpO1xuICAgICAgICB0aGlzLmtwaS50aXRsZVNpemUgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2N1c3RvbXdpZGdldGRhdGEua3BpLnRpdGxlU2l6ZScpO1xuICAgICAgICB0aGlzLmtwaS5rcGlTaXplID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS5rcGlTaXplJyk7XG4gICAgICAgIHRoaXMua3BpLnVuaXRTaXplID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS51bml0U2l6ZScpO1xuICAgICAgICB0aGlzLmtwaS5tZXNzYWdlU2l6ZSA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnY3VzdG9td2lkZ2V0ZGF0YS5rcGkubWVzc2FnZVNpemUnKTtcbiAgICAgICAgdGhpcy5rcGkuaW1hZ2VTaXplID0gXy5nZXQodGhpcy5jb25maWcsICdjdXN0b213aWRnZXRkYXRhLmtwaS5pbWFnZVNpemUnKTtcbiAgICAgICAgdGhpcy5rcGkudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmdldERldmljZURhdGEoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZ3VyZVRvcE1hcmdpblJlcXVpcmVkKCk7XG4gIH1cblxuICAgIC8vIENvbmZpZ3VyZSB0b3AgbWFyZ2luIHdpdGhpbiB0aGUgd2lkZ2V0LiBUaGlzIGlzIG9uIHRoZSBiYXNpcyBpZiB0aGUgV2lkZ2V0IHRpdGxlIGlzIHNldCB0byBoaWRkZW4gb3Igbm90LlxuICAgIHByaXZhdGUgY29uZmlndXJlVG9wTWFyZ2luUmVxdWlyZWQoKTogdm9pZCB7XG4gICAgICBjb25zdCBhbGxXaWRnZXRzOiBOb2RlTGlzdE9mPEVsZW1lbnQ+ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRhc2hib2FyZC1ncmlkLWNoaWxkJyk7XG4gICAgICAgIGFsbFdpZGdldHMuZm9yRWFjaCgodzpFbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2lkZ2V0RWxlbWVudDogRWxlbWVudCA9IHcucXVlcnlTZWxlY3RvcignZGl2ID4gZGl2ID4gZGl2ID4gYzh5LWR5bmFtaWMtY29tcG9uZW50ID4gbGliLWdwLWtwaS1vdmVydmlldy13aWRnZXQnKTtcbiAgICAgICAgICBpZih3aWRnZXRFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgd2lkZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0VGl0bGVFbGVtZW50OiBFbGVtZW50ID0gdy5xdWVyeVNlbGVjdG9yKCdkaXYgPiBkaXYgPiBkaXYgPiBjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlJyk7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRUaXRsZURpc3BsYXlWYWx1ZTogc3RyaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUod2lkZ2V0VGl0bGVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICBpZih3aWRnZXRUaXRsZURpc3BsYXlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHdpZGdldFRpdGxlRGlzcGxheVZhbHVlICE9PSBudWxsICYmIHdpZGdldFRpdGxlRGlzcGxheVZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5rcGkudG9wTWFyZ2luID0gJzI1cHgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5rcGkudG9wTWFyZ2luID0gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICBhc3luYyBnZXREZXZpY2VEYXRhKCkge1xuICAgIGlmICh0aGlzLmtwaS5rcGlOYW1lICE9PSBudWxsICYmIHRoaXMua3BpLmtwaU5hbWUgIT09ICcnKSB7XG5cbiAgICAgICAgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICd0b3RhbERldmljZXMnKXtcbiAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMua3BpU2VydmljZS5nZXREZXZpY2VzQXZhaWxhYmlsaXR5KHRoaXMuZGV2aWNlLmlkKTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmtwaS52YWx1ZSA9IHJlc3VsdC50b3RhbERldmljZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICdhdmFpbGFibGUnKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldERldmljZXNBdmFpbGFiaWxpdHkodGhpcy5kZXZpY2UuaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMua3BpLnZhbHVlID0gcmVzdWx0LmF2YWlsYWJsZURldmljZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICd1bmF2YWlsYWJsZScpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmtwaVNlcnZpY2UuZ2V0RGV2aWNlc0F2YWlsYWJpbGl0eSh0aGlzLmRldmljZS5pZCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5rcGkudmFsdWUgPSByZXN1bHQudW5hdmFpbGFibGVEZXZpY2VzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmtwaS5rcGlOYW1lID09PSAndG90YWxBbGFybXMnKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldEFsYXJtcyh0aGlzLmRldmljZS5pZCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5rcGkudmFsdWUgPSByZXN1bHQudG90YWxBbGFybXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICdtYWpvcicpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxhcm1zKHRoaXMuZGV2aWNlLmlkKTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmtwaS52YWx1ZSA9IHJlc3VsdC5tYWpvckFsZXJ0c0NvdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmtwaS5rcGlOYW1lID09PSAnbWlub3InKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldEFsYXJtcyh0aGlzLmRldmljZS5pZCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5rcGkudmFsdWUgPSByZXN1bHQubWlub3JBbGVydHNDb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5rcGkua3BpTmFtZSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMua3BpU2VydmljZS5nZXRBbGFybXModGhpcy5kZXZpY2UuaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMua3BpLnZhbHVlID0gcmVzdWx0LmNyaXRpY2FsQWxlcnRzQ291bnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICdoaWdoUmlzaycpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmtwaVNlcnZpY2UuZ2V0RmlybXdhcmVSaXNrcyh0aGlzLmRldmljZS5pZCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5rcGkudmFsdWUgPSByZXN1bHQuaGlnaFJpc2tDb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5rcGkua3BpTmFtZSA9PT0gJ21lZGl1bVJpc2snKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldEZpcm13YXJlUmlza3ModGhpcy5kZXZpY2UuaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMua3BpLnZhbHVlID0gcmVzdWx0Lm1lZGl1bVJpc2tDb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5rcGkua3BpTmFtZSA9PT0gJ2xvd1Jpc2snKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldEZpcm13YXJlUmlza3ModGhpcy5kZXZpY2UuaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMua3BpLnZhbHVlID0gcmVzdWx0Lmxvd1Jpc2tDb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5rcGkua3BpTmFtZSA9PT0gJ25vUmlzaycpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmtwaVNlcnZpY2UuZ2V0RmlybXdhcmVSaXNrcyh0aGlzLmRldmljZS5pZCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5rcGkudmFsdWUgPSByZXN1bHQubm9SaXNrQ291bnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua3BpLmtwaU5hbWUgPT09ICdvdGhlcicpIHtcblxuICAgICAgICAgIGlmICh0aGlzLmtwaS5vdGhlcktQSU1ldHJpYyA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldE5ld0tQSVZhbHVlKHRoaXMuZGV2aWNlLmlkLCB0aGlzLmtwaS5vdGhlcktQSU5hbWUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICB0aGlzLmtwaS52YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0aGlzLmtwaS5vdGhlcktQSU1ldHJpYyA9PT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5rcGlTZXJ2aWNlLmdldE5ld0tQSUNvdW50KHRoaXMuZGV2aWNlLmlkLCB0aGlzLmtwaS5vdGhlcktQSU5hbWUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICB0aGlzLmtwaS52YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0aGlzLmtwaS52YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgICAgIC8vIEdldHRlciBLUEkgVGl0bGVcbiAgcHVibGljIGdldEtQSVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua3BpLnRpdGxlO1xuICB9XG4gIC8vIEdldHRlciBLUEkgVGl0bGUgVG9wIE1hcmdpblxuICBwdWJsaWMgZ2V0S1BJVGl0bGVUb3BNYXJnaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMua3BpLnRvcE1hcmdpbjtcbiAgfVxuICAvLyBHZXR0ZXIgS1BJIEljb25cbiAgcHVibGljIGdldEtQSUljb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rcGkuaWNvbjtcbiAgfVxuICAvLyBHZXQgS1BJIENvbnRhaW5lciBIZWlnaHRcbiAgcHVibGljIGdldEtQSUNvbnRhaW5lckhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuICc5MHB4JztcbiAgfVxuICAvLyBHZXR0ZXIgS1BJIFZhbHVlXG4gIHB1YmxpYyBnZXRLUElWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkudmFsdWU7XG4gIH1cbiAgLy8gR2V0dGVyIEtQSSBVbml0XG4gIHB1YmxpYyBnZXRLUElVbml0KCkge1xuICAgIHJldHVybiB0aGlzLmtwaS51bml0O1xuICB9XG4gIC8vIEdldHRlciBLUEkgTmFtZVxuICBwdWJsaWMgZ2V0S1BJTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkua3BpTmFtZTtcbiAgfVxuICAvLyBHZXR0ZXIgS1BJIENvbG9yXG4gIHB1YmxpYyBnZXRLUElDb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkuY29sb3I7XG4gIH1cbiAgLy8gR2V0dGVyIFRpdGxlIENvbG9yXG4gIHB1YmxpYyBnZXRUaXRsZUNvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS50aXRsZUNvbG9yO1xuICB9XG4gIC8vIEdldHRlciBVbml0IENvbG9yXG4gIHB1YmxpYyBnZXRVbml0Q29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMua3BpLnVuaXRDb2xvcjtcbiAgfVxuICAvLyBHZXR0ZXIgTWVzc2FnZSBDb2xvclxuICBwdWJsaWMgZ2V0TWVzc2FnZUNvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS5tZXNzYWdlQ29sb3I7XG4gIH1cbiAgLy8gR2V0dGVyIEtQSSBiYWNrZ3JvdW5kIENvbG9yXG4gIHB1YmxpYyBnZXRLUElCZ0NvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS5iZ2NvbG9yO1xuICB9XG4gIC8vIEdldHRlciBPdGhlciBLUEkgTmFtZVxuICBwdWJsaWMgZ2V0T3RoZXJLUElOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS5vdGhlcktQSU5hbWU7XG4gIH1cbiAgLy8gR2V0dGVyIE90aGVyIEtQSSBtZXRyaWNcbiAgcHVibGljIGdldE90aGVyS1BJTWV0cmljKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS5vdGhlcktQSU1ldHJpYztcbiAgfVxuICAgIC8vIEdldHRlciBPdGhlciBLUEkgTWVzc2FnZVxuICBwdWJsaWMgZ2V0S1BJTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkubWVzc2FnZTtcbiAgfVxuICBwdWJsaWMgZ2V0S1BJU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkua3BpU2l6ZSArICdweCc7XG4gIH1cbiAgcHVibGljIGdldFRpdGxlU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rcGkudGl0bGVTaXplICsgJ3B4JztcbiAgfVxuICBwdWJsaWMgZ2V0TWVzc2FnZVNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMua3BpLm1lc3NhZ2VTaXplICsgJ3B4JztcbiAgfVxuICBwdWJsaWMgZ2V0VW5pdFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMua3BpLnVuaXRTaXplICsgJ3B4JztcbiAgfVxuICBwdWJsaWMgZ2V0SW1hZ2VTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmtwaS5pbWFnZVNpemUgKyAncHgnO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRhaW5lckhlaWdodCgpe1xuICAgICAgaWYgKHRoaXMua3BpLmltYWdlU2l6ZSA+IHRoaXMua3BpLnRpdGxlU2l6ZSAmJiB0aGlzLmtwaS5pbWFnZVNpemUgPiB0aGlzLmtwaS5rcGlTaXplKSB7XG4gICAgICAgIHRoaXMua3BpLmNvbnRhaW5lckhlaWdodCA9IHRoaXMua3BpLmltYWdlU2l6ZSArIDEwO1xuICAgICB9IGVsc2UgaWYodGhpcy5rcGkudGl0bGVTaXplID4gdGhpcy5rcGkua3BpU2l6ZSl7XG4gICAgICAgIHRoaXMua3BpLmNvbnRhaW5lckhlaWdodCA9IHRoaXMua3BpLnRpdGxlU2l6ZSArIDEwO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5rcGkuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5rcGkua3BpU2l6ZSArIDEwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rcGkuY29udGFpbmVySGVpZ2h0ICsgJ3B4JztcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.module.js b/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.module.js deleted file mode 100644 index b1f5186..0000000 --- a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.module.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { NgModule } from '@angular/core'; -import { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components'; -import { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component'; -import * as preview from './preview-image'; -import { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component'; -import { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service'; -import { NgSelectModule } from '@ng-select/ng-select'; -import { FormsModule } from '@angular/forms'; -import { ColorPickerComponent } from './color-picker/color-picker-component'; -import { ColorSliderComponent } from './color-picker/color-slider/color-slider-component'; -import { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component'; -const ɵ0 = { - id: 'kpi-overview.widget', - label: 'KPI Overview', - previewImage: preview.previewImage, - description: 'KPI Overview', - component: GpKpiOverviewWidgetComponent, - configComponent: GpKpiOverviewWidgetConfigComponent, - data: { - ng1: { - options: { - noDeviceTarget: false, - noNewWidgets: false, - deviceTargetNotRequired: false, - groupsSelectable: true - } - } - } -}; -export class GpKpiOverviewWidgetModule { -} -GpKpiOverviewWidgetModule.decorators = [ - { type: NgModule, args: [{ - declarations: [ - GpKpiOverviewWidgetComponent, - GpKpiOverviewWidgetConfigComponent, - ColorPickerComponent, - ColorSliderComponent, - ColorPaletteComponent - ], - imports: [ - NgSelectModule, - FormsModule, - CommonModule, - CoreModule - ], - exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - providers: [ - GpKpiOverviewWidgetService, - { - provide: HOOK_COMPONENTS, - multi: true, - useValue: ɵ0 - } - ], - },] } -]; -export { ɵ0 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0L3NyYy9saWIvZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sS0FBSyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztXQXVCL0U7SUFDTixFQUFFLEVBQUUscUJBQXFCO0lBQ3pCLEtBQUssRUFBRSxjQUFjO0lBQ3JCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtJQUNsQyxXQUFXLEVBQUUsY0FBYztJQUMzQixTQUFTLEVBQUUsNEJBQTRCO0lBQ3ZDLGVBQWUsRUFBRSxrQ0FBa0M7SUFDbkQsSUFBSSxFQUFFO1FBQ0YsR0FBRyxFQUFFO1lBQ0QsT0FBTyxFQUFFO2dCQUNULGNBQWMsRUFBRSxLQUFLO2dCQUNyQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsdUJBQXVCLEVBQUUsS0FBSztnQkFDOUIsZ0JBQWdCLEVBQUUsSUFBSTthQUNyQjtTQUNKO0tBQ0o7Q0FDSjtBQUdMLE1BQU0sT0FBTyx5QkFBeUI7OztZQTFDckMsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWiw0QkFBNEI7b0JBQzVCLGtDQUFrQztvQkFDbEMsb0JBQW9CO29CQUNwQixvQkFBb0I7b0JBQ3BCLHFCQUFxQjtpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLGNBQWM7b0JBQ2QsV0FBVztvQkFDWCxZQUFZO29CQUNaLFVBQVU7aUJBQ1g7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsa0NBQWtDLENBQUM7Z0JBQzNFLGVBQWUsRUFBRSxDQUFDLDRCQUE0QixFQUFFLGtDQUFrQyxDQUFDO2dCQUVuRixTQUFTLEVBQUU7b0JBQ1QsMEJBQTBCO29CQUMxQjt3QkFDQSxPQUFPLEVBQUUsZUFBZTt3QkFDeEIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsUUFBUSxJQWlCUDtxQkFDQTtpQkFBQzthQUNMIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgU29mdHdhcmUgQUcsIERhcm1zdGFkdCwgR2VybWFueSBhbmQvb3IgaXRzIGxpY2Vuc29yc1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIENvcmVNb2R1bGUsIEhPT0tfQ09NUE9ORU5UUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgR3BLcGlPdmVydmlld1dpZGdldENvbXBvbmVudCB9IGZyb20gJy4vZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgcHJldmlldyBmcm9tICcuL3ByZXZpZXctaW1hZ2UnO1xuaW1wb3J0IHsgR3BLcGlPdmVydmlld1dpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJy4vZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC1jb25maWcvZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC1jb25maWcuY29tcG9uZW50JztcbmltcG9ydCB7IEdwS3BpT3ZlcnZpZXdXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmdTZWxlY3RNb2R1bGUgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9yUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2xvclNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29sb3ItcGlja2VyL2NvbG9yLXNsaWRlci9jb2xvci1zbGlkZXItY29tcG9uZW50JztcbmltcG9ydCB7IENvbG9yUGFsZXR0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29sb3ItcGlja2VyL2NvbG9yLXBhbGV0dGUvY29sb3ItcGFsZXR0ZS1jb21wb25lbnQnO1xuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgR3BLcGlPdmVydmlld1dpZGdldENvbXBvbmVudCxcbiAgICBHcEtwaU92ZXJ2aWV3V2lkZ2V0Q29uZmlnQ29tcG9uZW50LFxuICAgIENvbG9yUGlja2VyQ29tcG9uZW50LFxuICAgIENvbG9yU2xpZGVyQ29tcG9uZW50LFxuICAgIENvbG9yUGFsZXR0ZUNvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgTmdTZWxlY3RNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcmVNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW0dwS3BpT3ZlcnZpZXdXaWRnZXRDb21wb25lbnQsIEdwS3BpT3ZlcnZpZXdXaWRnZXRDb25maWdDb21wb25lbnRdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtHcEtwaU92ZXJ2aWV3V2lkZ2V0Q29tcG9uZW50LCBHcEtwaU92ZXJ2aWV3V2lkZ2V0Q29uZmlnQ29tcG9uZW50XSxcblxuICBwcm92aWRlcnM6IFtcbiAgICBHcEtwaU92ZXJ2aWV3V2lkZ2V0U2VydmljZSxcbiAgICB7XG4gICAgcHJvdmlkZTogSE9PS19DT01QT05FTlRTLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZVZhbHVlOiB7XG4gICAgICAgIGlkOiAna3BpLW92ZXJ2aWV3LndpZGdldCcsXG4gICAgICAgIGxhYmVsOiAnS1BJIE92ZXJ2aWV3JyxcbiAgICAgICAgcHJldmlld0ltYWdlOiBwcmV2aWV3LnByZXZpZXdJbWFnZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdLUEkgT3ZlcnZpZXcnLFxuICAgICAgICBjb21wb25lbnQ6IEdwS3BpT3ZlcnZpZXdXaWRnZXRDb21wb25lbnQsXG4gICAgICAgIGNvbmZpZ0NvbXBvbmVudDogR3BLcGlPdmVydmlld1dpZGdldENvbmZpZ0NvbXBvbmVudCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbmcxOiB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG5vRGV2aWNlVGFyZ2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBub05ld1dpZGdldHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldmljZVRhcmdldE5vdFJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBncm91cHNTZWxlY3RhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBHcEtwaU92ZXJ2aWV3V2lkZ2V0TW9kdWxlIHsgfVxuIl19 \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.service.js b/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.service.js deleted file mode 100644 index 2a4518f..0000000 --- a/runtime/dist/widget-library/esm2015/lib/gp-kpi-overview-widget.service.js +++ /dev/null @@ -1,346 +0,0 @@ -import { __awaiter } from "tslib"; -import { Injectable } from '@angular/core'; -import { InventoryService } from '@c8y/client'; -export class GpKpiOverviewWidgetService { - constructor(inventory) { - this.inventory = inventory; - } - getDevicesAvailability(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalDevices = 0; - let availableDevices = 0; - let unavailableDevices = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - totalDevices = 1; - if (response.childDevices.references.length > 0) { - let available = false; - const promises = response.childDevices.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - })); - if (available) { - if (response.hasOwnProperty('c8y_Availability')) { - if (response.c8y_Availability.status === 'AVAILABLE') { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - else { - availableDevices = 1; - } - } - else { - unavailableDevices = 1; - } - yield Promise.all(promises); - } - else { - if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - } - else { - if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const ChildInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = ChildInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - let available = false; - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_Availability')) { - if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - else { - available = false; - } - })); - yield Promise.all(promises1); - } - if (available) { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - })); - yield Promise.all(promises); - } - totalDevices = inventory.data.childAssets.references.length; - } - return { totalDevices, availableDevices, unavailableDevices }; - }); - } - getFirmwareRisks(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let highRiskCount = 0; - let mediumRiskCount = 0; - let lowRiskCount = 0; - let noRiskCount = 0; - const firmwareData = yield this.inventory.list({ type: 'sag_racm_currentFirmware' }); - if (firmwareData.data.length > 0) { - this.latestFirmwareVersion = firmwareData.data[0].firmware.version; - } - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - return { highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount }; - }); - } - calculateRiskCount(device) { - let atRisk = false; - let noRisk = 0; - let lowRisk = 0; - let mediumRisk = 0; - let highRisk = 0; - if (device) { - const firmwareStatus = device.c8y_Firmware; - let versionIssues = 0; - if (firmwareStatus && firmwareStatus.version) { - versionIssues = firmwareStatus.version - this.latestFirmwareVersion; - } - if (versionIssues <= 0) { - atRisk = true; - } - if (atRisk) { - if (atRisk) { - if (versionIssues >= 0) { - noRisk += 1; - } - else if (versionIssues === -1) { - lowRisk += 1; - } - else if (versionIssues === -2) { - mediumRisk += 1; - } - else if (versionIssues <= -3) { - highRisk += 1; - } - } - } - } - return { noRisk, lowRisk, mediumRisk, highRisk }; - } - getAlarms(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalAlarms = 0; - let majorAlertsCount = 0; - let minorAlertsCount = 0; - let criticalAlertsCount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(response); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(childDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(assetChildDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount; - return { totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount }; - }); - } - calculateAlarmsCount(device) { - let minorAlerts = 0; - let majorAlerts = 0; - let criticalAlerts = 0; - const activeAlerts = device.c8y_ActiveAlarmsStatus; - if (activeAlerts !== undefined) { - if (activeAlerts.hasOwnProperty('minor')) { - if (activeAlerts.minor > 0) { - minorAlerts += device.c8y_ActiveAlarmsStatus.minor; - } - } - if (activeAlerts.hasOwnProperty('major')) { - if (activeAlerts.major > 0) { - majorAlerts += device.c8y_ActiveAlarmsStatus.major; - } - } - if (activeAlerts.hasOwnProperty('critical')) { - if (activeAlerts.critical > 0) { - criticalAlerts += device.c8y_ActiveAlarmsStatus.critical; - } - } - } - return { minorAlerts, majorAlerts, criticalAlerts }; - } - getNewKPICount(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let newKPICount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPICount = 1; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPICount = 0; - } - return newKPICount; - }); - } - getNewKPIValue(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let response = null; - let newKPIValue; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPIValue = response[newKPI]; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPIValue = ''; - } - return newKPIValue; - }); - } -} -GpKpiOverviewWidgetService.decorators = [ - { type: Injectable } -]; -GpKpiOverviewWidgetService.ctorParameters = () => [ - { type: InventoryService } -]; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldC9zcmMvbGliL2dwLWtwaS1vdmVydmlldy13aWRnZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBa0JBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSS9DLE1BQU0sT0FBTywwQkFBMEI7SUFJckMsWUFBbUIsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFDOUMsQ0FBQztJQUVLLHNCQUFzQixDQUFDLFFBQVE7O1lBQ25DLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUM7WUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQzNDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBRWpCLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFFL0MsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN0QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBTyxXQUFXLEVBQUUsRUFBRTt3QkFDMUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJ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cUJBQ2pDO3lCQUNJLElBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBQzt3QkFDcEQsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNyRCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBTyxnQkFBZ0IsRUFBRSxFQUFFO2dDQUN4RixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUMzRixNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQ0FDdEQsSUFBSSxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7b0NBQy9DLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7aUNBQ2pDOzRCQUNELENBQUMsQ0FBQSxDQUFDLENBQUM7NEJBQ0gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3lCQUM5QjtxQkFDRjtnQkFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3QjtpQkFDRztnQkFDRixXQUFXLEdBQUcsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztLQUFBOzs7WUFyVUYsVUFBVTs7O1lBSEYsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgU29mdHdhcmUgQUcsIERhcm1zdGFkdCwgR2VybWFueSBhbmQvb3IgaXRzIGxpY2Vuc29yc1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdwS3BpT3ZlcnZpZXdXaWRnZXRTZXJ2aWNlIHtcbiAgbGF0ZXN0RmlybXdhcmVWZXJzaW9uOiBhbnk7XG5cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlKSB7XG4gIH1cblxuICBhc3luYyBnZXREZXZpY2VzQXZhaWxhYmlsaXR5KGRldmljZUlkKXtcbiAgICBsZXQgdG90YWxEZXZpY2VzID0gMDtcbiAgICBsZXQgYXZhaWxhYmxlRGV2aWNlcyA9IDA7XG4gICAgbGV0IHVuYXZhaWxhYmxlRGV2aWNlcyA9IDA7XG4gICAgICBsZXQgcmVzcG9uc2U6IGFueSA9IG51bGw7XG4gICAgICBjb25zdCBpbnZlbnRvcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGV2aWNlSWQpO1xuICAgICAgcmVzcG9uc2UgPSBpbnZlbnRvcnkuZGF0YTtcbiAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0lzRGV2aWNlJykpIHtcbiAgICAgICAgdG90YWxEZXZpY2VzID0gMTtcblxuICAgICAgICBpZiAocmVzcG9uc2UuY2hpbGREZXZpY2VzLnJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gcmVzcG9uc2UuY2hpbGREZXZpY2VzLnJlZmVyZW5jZXMubWFwKGFzeW5jIChjaGlsZERldmljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRJbnZlbnRvcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoY2hpbGREZXZpY2UubWFuYWdlZE9iamVjdC5pZCk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZERldmljZURhdGEgPSBjaGlsZEludmVudG9yeS5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfQXZhaWxhYmlsaXR5Jykpe1xuXG4gICAgICAgICAgICAgIGlmIChjaGlsZERldmljZURhdGEuYzh5X0F2YWlsYWJpbGl0eS5zdGF0dXMgPT09ICdBVkFJTEFCTEUnKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYoYXZhaWxhYmxlKXtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0F2YWlsYWJpbGl0eScpKSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5jOHlfQXZhaWxhYmlsaXR5LnN0YXR1cyA9PT0gJ0FWQUlMQUJMRScpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVEZXZpY2VzID0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlRGV2aWNlcyA9IDE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICBhdmFpbGFibGVEZXZpY2VzID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHVuYXZhaWxhYmxlRGV2aWNlcyA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ2M4eV9BdmFpbGFiaWxpdHknKSAmJiAocmVzcG9uc2UuYzh5X0F2YWlsYWJpbGl0eS5zdGF0dXMgPT09ICdBVkFJTEFCTEUnKSkge1xuICAgICAgICAgICAgYXZhaWxhYmxlRGV2aWNlcyA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICB1bmF2YWlsYWJsZURldmljZXMgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IHJlc3BvbnNlLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubWFwKGFzeW5jIChjaGlsZERldmljZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBDaGlsZEludmVudG9yeSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChjaGlsZERldmljZS5tYW5hZ2VkT2JqZWN0LmlkKTtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGREZXZpY2VEYXRhID0gQ2hpbGRJbnZlbnRvcnkuZGF0YTtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0F2YWlsYWJpbGl0eScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRGV2aWNlRGF0YS5jOHlfQXZhaWxhYmlsaXR5LnN0YXR1cyA9PT0gJ0FWQUlMQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZURldmljZXMgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlRGV2aWNlcyArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmKGNoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0lzQXNzZXQnKSl7XG4gICAgICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZERldmljZURhdGEuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlczEgPSBjaGlsZERldmljZURhdGEuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5tYXAoYXN5bmMgKGFzc2V0Q2hpbGREZXZpY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNzZXRDaGlsZEludmVudG9yeSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChhc3NldENoaWxkRGV2aWNlLm1hbmFnZWRPYmplY3QuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NldENoaWxkRGV2aWNlRGF0YSA9IGFzc2V0Q2hpbGRJbnZlbnRvcnkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2V0Q2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfQXZhaWxhYmlsaXR5Jykpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2V0Q2hpbGREZXZpY2VEYXRhLmM4eV9BdmFpbGFiaWxpdHkuc3RhdHVzID09PSAnQVZBSUxBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlczEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICBhdmFpbGFibGVEZXZpY2VzICs9IDE7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB1bmF2YWlsYWJsZURldmljZXMgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b3RhbERldmljZXMgPSBpbnZlbnRvcnkuZGF0YS5jaGlsZEFzc2V0cy5yZWZlcmVuY2VzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3RvdGFsRGV2aWNlcywgYXZhaWxhYmxlRGV2aWNlcywgdW5hdmFpbGFibGVEZXZpY2VzfTtcbiAgICB9XG5cbiAgYXN5bmMgZ2V0RmlybXdhcmVSaXNrcyhkZXZpY2VJZCl7XG4gICAgbGV0IGhpZ2hSaXNrQ291bnQgPSAwO1xuICAgIGxldCBtZWRpdW1SaXNrQ291bnQgPSAwO1xuICAgIGxldCBsb3dSaXNrQ291bnQgPSAwO1xuICAgIGxldCBub1Jpc2tDb3VudCA9IDA7XG4gICAgY29uc3QgZmlybXdhcmVEYXRhID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7IHR5cGU6ICdzYWdfcmFjbV9jdXJyZW50RmlybXdhcmUnIH0pO1xuICAgIGlmIChmaXJtd2FyZURhdGEuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5sYXRlc3RGaXJtd2FyZVZlcnNpb24gPSBmaXJtd2FyZURhdGEuZGF0YVswXS5maXJtd2FyZS52ZXJzaW9uO1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IG51bGw7XG4gICAgY29uc3QgaW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkKTtcbiAgICByZXNwb25zZSA9IGludmVudG9yeS5kYXRhO1xuICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0lzRGV2aWNlJykpIHtcbiAgICAgIGNvbnN0IHJpc2tzID0gdGhpcy5jYWxjdWxhdGVSaXNrQ291bnQocmVzcG9uc2UpO1xuICAgICAgaGlnaFJpc2tDb3VudCA9IHJpc2tzLmhpZ2hSaXNrO1xuICAgICAgbWVkaXVtUmlza0NvdW50ID0gcmlza3MubWVkaXVtUmlzaztcbiAgICAgIGxvd1Jpc2tDb3VudCA9IHJpc2tzLmxvd1Jpc2s7XG4gICAgICBub1Jpc2tDb3VudCA9IHJpc2tzLm5vUmlzaztcbiAgICB9XG4gICAgZWxzZSBpZihyZXNwb25zZS5jaGlsZEFzc2V0cy5yZWZlcmVuY2VzLmxlbmd0aCA+IDApe1xuXG4gICAgICBjb25zdCBwcm9taXNlcyA9IHJlc3BvbnNlLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubWFwKGFzeW5jIChjaGlsZERldmljZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZEludmVudG9yeSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChjaGlsZERldmljZS5tYW5hZ2VkT2JqZWN0LmlkKTtcbiAgICAgICAgY29uc3QgY2hpbGREZXZpY2VEYXRhID0gY2hpbGRJbnZlbnRvcnkuZGF0YTtcbiAgICAgICAgaWYgKGNoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0lzRGV2aWNlJykpIHtcbiAgICAgICAgICBjb25zdCByaXNrcyA9IHRoaXMuY2FsY3VsYXRlUmlza0NvdW50KHJlc3BvbnNlKTtcbiAgICAgICAgICBoaWdoUmlza0NvdW50ID0gcmlza3MuaGlnaFJpc2s7XG4gICAgICAgICAgbWVkaXVtUmlza0NvdW50ID0gcmlza3MubWVkaXVtUmlzaztcbiAgICAgICAgICBsb3dSaXNrQ291bnQgPSByaXNrcy5sb3dSaXNrO1xuICAgICAgICAgIG5vUmlza0NvdW50ID0gcmlza3Mubm9SaXNrOyAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnYzh5X0lzQXNzZXQnKSl7XG4gICAgICAgICAgaWYgKGNoaWxkRGV2aWNlRGF0YS5jaGlsZEFzc2V0cy5yZWZlcmVuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzMSA9IGNoaWxkRGV2aWNlRGF0YS5jaGlsZEFzc2V0cy5yZWZlcmVuY2VzLm1hcChhc3luYyAoYXNzZXRDaGlsZERldmljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXRDaGlsZEludmVudG9yeSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChhc3NldENoaWxkRGV2aWNlLm1hbmFnZWRPYmplY3QuaWQpO1xuICAgICAgICAgICAgY29uc3QgYXNzZXRDaGlsZERldmljZURhdGEgPSBhc3NldENoaWxkSW52ZW50b3J5LmRhdGE7XG4gICAgICAgICAgICBpZiAoYXNzZXRDaGlsZERldmljZURhdGEuaGFzT3duUHJvcGVydHkoJ2M4eV9Jc0RldmljZScpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJpc2tzID0gdGhpcy5jYWxjdWxhdGVSaXNrQ291bnQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICBoaWdoUmlza0NvdW50ID0gcmlza3MuaGlnaFJpc2s7XG4gICAgICAgICAgICAgIG1lZGl1bVJpc2tDb3VudCA9IHJpc2tzLm1lZGl1bVJpc2s7XG4gICAgICAgICAgICAgIGxvd1Jpc2tDb3VudCA9IHJpc2tzLmxvd1Jpc2s7XG4gICAgICAgICAgICAgIG5vUmlza0NvdW50ID0gcmlza3Mubm9SaXNrOyAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH1cbiAgICByZXR1cm4ge2hpZ2hSaXNrQ291bnQsIG1lZGl1bVJpc2tDb3VudCwgbG93Umlza0NvdW50LCBub1Jpc2tDb3VudH07XG4gIH1cblxuICBjYWxjdWxhdGVSaXNrQ291bnQoZGV2aWNlKXtcbiAgICBsZXQgYXRSaXNrID0gZmFsc2U7XG4gICAgbGV0IG5vUmlzayA9IDA7XG4gICAgbGV0IGxvd1Jpc2sgPSAwO1xuICAgIGxldCBtZWRpdW1SaXNrID0gMDtcbiAgICBsZXQgaGlnaFJpc2sgPSAwO1xuXG4gICAgaWYgKGRldmljZSkge1xuICAgICAgIGNvbnN0IGZpcm13YXJlU3RhdHVzID0gZGV2aWNlLmM4eV9GaXJtd2FyZTtcbiAgICAgICBsZXQgdmVyc2lvbklzc3VlcyA9IDA7XG4gICAgICAgaWYgKGZpcm13YXJlU3RhdHVzICAmJiBmaXJtd2FyZVN0YXR1cy52ZXJzaW9uKSB7XG4gICAgICAgICB2ZXJzaW9uSXNzdWVzID0gZmlybXdhcmVTdGF0dXMudmVyc2lvbiAtIHRoaXMubGF0ZXN0RmlybXdhcmVWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgaWYgKHZlcnNpb25Jc3N1ZXMgPD0gMCkge1xuICAgICAgICAgIGF0UmlzayA9IHRydWU7IH1cbiAgICAgICBpZiAoIGF0Umlzaykge1xuICAgICAgICAgICAgaWYgKGF0Umlzaykge1xuICAgICAgICAgICAgICBpZiAodmVyc2lvbklzc3VlcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbm9SaXNrICs9IDE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbklzc3VlcyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsb3dSaXNrICs9IDE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbklzc3VlcyA9PT0gLTIpIHtcbiAgICAgICAgICAgICAgICBtZWRpdW1SaXNrICs9IDE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbklzc3VlcyA8PSAtMykge1xuICAgICAgICAgICAgICAgIGhpZ2hSaXNrICs9IDE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtub1Jpc2ssIGxvd1Jpc2ssIG1lZGl1bVJpc2ssIGhpZ2hSaXNrfVxuICB9XG4gIGFzeW5jIGdldEFsYXJtcyhkZXZpY2VJZCl7XG4gICAgbGV0IHRvdGFsQWxhcm1zID0gMDtcbiAgICBsZXQgbWFqb3JBbGVydHNDb3VudCA9IDA7XG4gICAgbGV0IG1pbm9yQWxlcnRzQ291bnQgPSAwO1xuICAgIGxldCBjcml0aWNhbEFsZXJ0c0NvdW50ID0gMDtcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IG51bGw7XG4gICAgY29uc3QgaW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkKTtcbiAgICByZXNwb25zZSA9IGludmVudG9yeS5kYXRhO1xuXG4gICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdjOHlfSXNEZXZpY2UnKSkge1xuICAgICAgY29uc3QgYWxlcnRzID0gdGhpcy5jYWxjdWxhdGVBbGFybXNDb3VudChyZXNwb25zZSk7XG4gICAgICBtaW5vckFsZXJ0c0NvdW50ID0gYWxlcnRzLm1pbm9yQWxlcnRzO1xuICAgICAgbWFqb3JBbGVydHNDb3VudCA9IGFsZXJ0cy5tYWpvckFsZXJ0cztcbiAgICAgIGNyaXRpY2FsQWxlcnRzQ291bnQgPSBhbGVydHMuY3JpdGljYWxBbGVydHM7XG4gICAgfVxuICAgIGVsc2UgaWYocmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gcmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5tYXAoYXN5bmMgKGNoaWxkRGV2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkSW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGNoaWxkRGV2aWNlLm1hbmFnZWRPYmplY3QuaWQpO1xuICAgICAgICBjb25zdCBjaGlsZERldmljZURhdGEgPSBjaGlsZEludmVudG9yeS5kYXRhO1xuICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfSXNEZXZpY2UnKSkge1xuICAgICAgICAgIGNvbnN0IGFsZXJ0cyA9IHRoaXMuY2FsY3VsYXRlQWxhcm1zQ291bnQoY2hpbGREZXZpY2VEYXRhKTtcbiAgICAgICAgICBtaW5vckFsZXJ0c0NvdW50ID0gYWxlcnRzLm1pbm9yQWxlcnRzO1xuICAgICAgICAgIG1ham9yQWxlcnRzQ291bnQgPSBhbGVydHMubWFqb3JBbGVydHM7XG4gICAgICAgIGNyaXRpY2FsQWxlcnRzQ291bnQgPSBhbGVydHMuY3JpdGljYWxBbGVydHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjaGlsZERldmljZURhdGEuaGFzT3duUHJvcGVydHkoJ2M4eV9Jc0Fzc2V0Jykpe1xuICAgICAgICAgIGlmIChjaGlsZERldmljZURhdGEuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlczEgPSBjaGlsZERldmljZURhdGEuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5tYXAoYXN5bmMgKGFzc2V0Q2hpbGREZXZpY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0Q2hpbGRJbnZlbnRvcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoYXNzZXRDaGlsZERldmljZS5tYW5hZ2VkT2JqZWN0LmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0Q2hpbGREZXZpY2VEYXRhID0gYXNzZXRDaGlsZEludmVudG9yeS5kYXRhO1xuICAgICAgICAgICAgaWYgKGFzc2V0Q2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfSXNEZXZpY2UnKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbGVydHMgPSB0aGlzLmNhbGN1bGF0ZUFsYXJtc0NvdW50KGFzc2V0Q2hpbGREZXZpY2VEYXRhKTtcbiAgICAgICAgICAgICAgbWlub3JBbGVydHNDb3VudCA9IGFsZXJ0cy5taW5vckFsZXJ0cztcbiAgICAgICAgICAgICAgbWFqb3JBbGVydHNDb3VudCA9IGFsZXJ0cy5tYWpvckFsZXJ0cztcbiAgICAgICAgICAgICAgY3JpdGljYWxBbGVydHNDb3VudCA9IGFsZXJ0cy5jcml0aWNhbEFsZXJ0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH1cbiAgICB0b3RhbEFsYXJtcyA9IG1ham9yQWxlcnRzQ291bnQgKyBtaW5vckFsZXJ0c0NvdW50ICsgY3JpdGljYWxBbGVydHNDb3VudDtcbiAgICByZXR1cm4ge3RvdGFsQWxhcm1zLCBtYWpvckFsZXJ0c0NvdW50LCBtaW5vckFsZXJ0c0NvdW50LCBjcml0aWNhbEFsZXJ0c0NvdW50fTtcbiAgfVxuXG5cbiAgY2FsY3VsYXRlQWxhcm1zQ291bnQoZGV2aWNlKXtcbiAgICBsZXQgbWlub3JBbGVydHMgPSAwO1xuICAgIGxldCBtYWpvckFsZXJ0cyA9IDA7XG4gICAgbGV0IGNyaXRpY2FsQWxlcnRzID0gMDtcbiAgICBjb25zdCBhY3RpdmVBbGVydHMgPSBkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cztcbiAgICBpZiAoYWN0aXZlQWxlcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoYWN0aXZlQWxlcnRzLmhhc093blByb3BlcnR5KCdtaW5vcicpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlQWxlcnRzLm1pbm9yID4gMCkgeyBtaW5vckFsZXJ0cyArPSBkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy5taW5vcjsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWN0aXZlQWxlcnRzLmhhc093blByb3BlcnR5KCdtYWpvcicpKSB7XG4gICAgICAgICAgIGlmIChhY3RpdmVBbGVydHMubWFqb3IgPiAwKSB7IG1ham9yQWxlcnRzICs9IGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLm1ham9yIH1cbiAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWN0aXZlQWxlcnRzLmhhc093blByb3BlcnR5KCdjcml0aWNhbCcpKSB7XG4gICAgICAgICAgIGlmIChhY3RpdmVBbGVydHMuY3JpdGljYWwgPiAwKSB7IGNyaXRpY2FsQWxlcnRzICs9IGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLmNyaXRpY2FsIH1cbiAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge21pbm9yQWxlcnRzLCBtYWpvckFsZXJ0cywgY3JpdGljYWxBbGVydHN9XG4gIH1cblxuICBhc3luYyBnZXROZXdLUElDb3VudChkZXZpY2VJZCwgbmV3S1BJKXtcbiAgICBsZXQgbmV3S1BJQ291bnQgPSAwO1xuICAgIGxldCByZXNwb25zZTogYW55ID0gbnVsbDtcbiAgICBjb25zdCBpbnZlbnRvcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGV2aWNlSWQpO1xuICAgIHJlc3BvbnNlID0gaW52ZW50b3J5LmRhdGE7XG4gICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdjOHlfSXNEZXZpY2UnKSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShuZXdLUEkpKSB7XG4gICAgICBuZXdLUElDb3VudCA9IDE7XG4gICAgfVxuICAgIGVsc2UgaWYocmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gcmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5tYXAoYXN5bmMgKGNoaWxkRGV2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkSW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGNoaWxkRGV2aWNlLm1hbmFnZWRPYmplY3QuaWQpO1xuICAgICAgICBjb25zdCBjaGlsZERldmljZURhdGEgPSBjaGlsZEludmVudG9yeS5kYXRhO1xuICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KG5ld0tQSSkpIHtcbiAgICAgICAgICBuZXdLUElDb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfSXNBc3NldCcpKXtcbiAgICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMxID0gY2hpbGREZXZpY2VEYXRhLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubWFwKGFzeW5jIChhc3NldENoaWxkRGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NldENoaWxkSW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGFzc2V0Q2hpbGREZXZpY2UubWFuYWdlZE9iamVjdC5pZCk7XG4gICAgICAgICAgICBjb25zdCBhc3NldENoaWxkRGV2aWNlRGF0YSA9IGFzc2V0Q2hpbGRJbnZlbnRvcnkuZGF0YTtcbiAgICAgICAgICAgIGlmIChhc3NldENoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eShuZXdLUEkpKSB7XG4gICAgICAgICAgICAgIG5ld0tQSUNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIG5ld0tQSUNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0tQSUNvdW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV3S1BJVmFsdWUoZGV2aWNlSWQsIG5ld0tQSSl7XG4gICAgbGV0IHJlc3BvbnNlOiBhbnkgPSBudWxsO1xuICAgIGxldCBuZXdLUElWYWx1ZTtcbiAgICBjb25zdCBpbnZlbnRvcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGV2aWNlSWQpO1xuICAgIHJlc3BvbnNlID0gaW52ZW50b3J5LmRhdGE7XG4gICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdjOHlfSXNEZXZpY2UnKSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShuZXdLUEkpKSB7XG4gICAgICBuZXdLUElWYWx1ZSA9IHJlc3BvbnNlW25ld0tQSV07XG4gICAgfVxuICAgIGVsc2UgaWYocmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gcmVzcG9uc2UuY2hpbGRBc3NldHMucmVmZXJlbmNlcy5tYXAoYXN5bmMgKGNoaWxkRGV2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkSW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGNoaWxkRGV2aWNlLm1hbmFnZWRPYmplY3QuaWQpO1xuICAgICAgICBjb25zdCBjaGlsZERldmljZURhdGEgPSBjaGlsZEludmVudG9yeS5kYXRhO1xuICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KG5ld0tQSSkpIHtcbiAgICAgICAgICBuZXdLUElWYWx1ZSArPSByZXNwb25zZVtuZXdLUEldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoY2hpbGREZXZpY2VEYXRhLmhhc093blByb3BlcnR5KCdjOHlfSXNBc3NldCcpKXtcbiAgICAgICAgICBpZiAoY2hpbGREZXZpY2VEYXRhLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMxID0gY2hpbGREZXZpY2VEYXRhLmNoaWxkQXNzZXRzLnJlZmVyZW5jZXMubWFwKGFzeW5jIChhc3NldENoaWxkRGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NldENoaWxkSW52ZW50b3J5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGFzc2V0Q2hpbGREZXZpY2UubWFuYWdlZE9iamVjdC5pZCk7XG4gICAgICAgICAgICBjb25zdCBhc3NldENoaWxkRGV2aWNlRGF0YSA9IGFzc2V0Q2hpbGRJbnZlbnRvcnkuZGF0YTtcbiAgICAgICAgICAgIGlmIChhc3NldENoaWxkRGV2aWNlRGF0YS5oYXNPd25Qcm9wZXJ0eShuZXdLUEkpKSB7XG4gICAgICAgICAgICAgIG5ld0tQSVZhbHVlICs9IHJlc3BvbnNlW25ld0tQSV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIG5ld0tQSVZhbHVlID0gJyc7XG4gICAgfVxuICAgIHJldHVybiBuZXdLUElWYWx1ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/lib/preview-image.js b/runtime/dist/widget-library/esm2015/lib/preview-image.js deleted file mode 100644 index 9a7a720..0000000 --- a/runtime/dist/widget-library/esm2015/lib/preview-image.js +++ /dev/null @@ -1,20 +0,0 @@ -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -// tslint:disable-next-line: max-line-length -export const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dwLWtwaS1vdmVydmlldy13aWRnZXQvc3JjL2xpYi9wcmV2aWV3LWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0VBZ0JFO0FBR0YsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyx3dGhCQUF3dGhCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4qIENvcHlyaWdodCAoYykgMjAyMCBTb2Z0d2FyZSBBRywgRGFybXN0YWR0LCBHZXJtYW55IGFuZC9vciBpdHMgbGljZW5zb3JzXHJcbipcclxuKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxyXG4qXHJcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbipcclxuKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuKlxyXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjb25zdCBwcmV2aWV3SW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFiMEFBQUVUQ0FJQUFBQXRXaytOQUFBeDEwbEVRVlI0MnUzZGVWd1RaLzRIOE9GTXdCQkJVUkh4UUxRQ0NpMHFGZy9FcTdoUXNXbzlxRlJkOWFXdFZhdmR1a3U3L2xZclhYZUx4VldYV2xxdHR0cGlQYWhXcVZxcG9sU3Q3SUpneGFPVnhZdUlDQWdoQkVnZzRPK2JUQWdKSkNHRElFbys3ei9hWkRKNTVzQjg4bjFtbnBsWWlFc2xEQUFBbU15aVZGTFcxdXNBQVBBc3NhaXFxcmEydG1ycjFRQUFlSG9wRkRYeXFxcmEybHIycVlYbUVRQUFHS0pRS0NwbGN2WXhjaE1Bd0NUaVVvbVZsYkozanR3RUFEQkppYmpVMnRxYVFXNENBSmdJdVFrQXdFMTliajU2OUtpdFZ3WUE0Qm1BM0FRQTRBYTVDUURBRFhJVEFJQWI1Q1lBQURmSVRRQUFicENiQUFEY0lEY0JBTGhCYmdJQWNJUGNCQURnQnJrSkFNQU5jaE1BZ0J2a0pnQUFOOGhOQUFCdWtKc0FBTndnTndHZ1hibDc5MjVHUmdiN2VQRGd3YjE2OVdyeFJTQTNBYUJkeWN6TVRFdExZeC83Ky92NytmbTErQ0phSURlcnE2dVBIVHNtRkFySGpoM0xUcEZLcGQ5Ly96M0YvS2hSbzdLeXNvNGVQYXFadVVPSER2UU5NR3pZTUI2UDEvaU5HclF5TjIvZVRFbEp5Yy9QcDdmNHE5alkySlNVbE96YnQyL01tREdlbnA0TlZvQm1Dd3dNL1BISEg2OWV2YXJkbEt1cjY4eVpNNHVLaXI3NTVodk54RTZkT3RFNitQcjZscFdWR1dsdzNMaHh0QTRTaVNRME5KU20wOFRHamIveXlpdTBVQjhmbjBHREJyRVRmLzMxMTB1WExzMllNY1BlM3A2ZWxwZVg3OSsvbjdheFQ1OCtMZjczQXdCQ0gyUUtNanM3Ty9ydy92enp6ems1T2V4MER3K1AwYU5IVTNSVVZsWXFGQW9IQjRjV1dWekw1MlpWVmRXSkV5Zm93Y1NKRTIxdGJTbEVMbDY4T0dYS0ZENmZUeE5MUzB1VGs1TTdkdXhJcnpLcUpHcWNtN1FtbHk5ZlBuZnUzUGp4NDN2MjdFbDdoSFlFN1JGNkM2M3J5Wk1uYWZ2cE1mdDdjb1F5a1lKcDBxUkozYnQzcHdacFRzcHJUV3VXbHBhVTBibTV1WWNQSDU0NmRTb2xKazJrT0U1S1NxTGNEQWdJTU5JZ1JmL3AwNmUxYzdOeDQ3U05OQTg5cHBDMXNMQ29xYW1oemI5eDQ4WnJyNzNXclZzM21wNlhsL2ZERHo5TW56NmRYVFFBdEN6S1JQb1UzNzkvdjB1WEx2U1k2amJ0VndVQ0FYMXNDd3NMS1I4bVRKaEFqeDkvaVMyY203VzF0WlIzOSs3ZEN3c0xvOVZsVk1VWGxjMVU4YkhGRjNudzRNR1JJMGNvd2lnOTllWW1GWlVVV3hTYS9mcjFZNmRRY2gwNGNHRDQ4T0hlM3Q3MFRYTHExQ2xxME5IUmtYMlZGbkhseXBWWFgzMlZnczlRQVh2Mzd0M0V4TVJaczJZNU96dHIza1dvSFZwYlF3MVMxamZJVGIyTi8vYmJiMVJXVStGSkdVb3BUMXNubDh1SERCbnkvUFBQMDZ2VTFQWHIxOWxYVytvZkNnQm9VQy93L1BuenBzdzVjdVRJZ1FNSFB2NFNXekkzcWJkTGRTTEZCR1VFRzVxTXZ0eWthdTdRb1VPVEowK20ra3R2RWxFTTBWc29XTmtTbFZGVm9OUmZycWlvb0txUS9wdVFrRUFaeXZhczJhVlRHbzRZTVlMS1J0TnprNWJ5My8vK2wxYU1XakRVSU5XUHB1UW1mUk5RUmNrV3MxVFkwamZIZ0FFRHFLU2x0YVdDbE9wckN2U2dvQ0JxN2ZIL1lBQ2dqU3FWSDMvOGtZb3R6UlRxakZQSlFyVW4xWmlVUHpTRDVpVW5KNmMvL09FUGo5OWJiOG5jZEhkM3A4NHZ4UWV0c2ViVkJybEpoUmpGU2tGQkFjMW1xRHlraUJTTHhSUlZOalkyMnUxUTU1Y1NtU1pxTXBSYW9CVCs3cnZ2cUx4MWRYVTFjc0JVT3pkcFM0dUxpNDhlUFVvclROOC9GR2VHR3FRM21wS2I5RjRxaHlrWisvVHBrNWFXVmw1ZVBtalFJTm9WMUFpUHh6dDgrTENQajQvMjhWTUFhQ24wY2FZK2FHcHFLbjBNR1ZWb1VqSlNQckt2VXA1U3FyTFJTUjlHK3J4N2VIZzhmZ1hUWXJsSlNVZTFsVlFxRFFrSjBUNEJRbm1uZlY2STlPN2RtemFzYytmT2htSk9FMVVOY2xPVHZ5S1I2TVNKRTlTUHBwNzF4WXNYYjkrK1RRbEZ2V0Myd1FhbmJsNS8vZlZldlhwUmJtcWZGNko4SERWcTFJc3Z2c2h1dktFR21VYTVxYmR4OXBnbWZWdTg4TUlMTkE5MUJHZ2k5ZGFIRFJ0R2RUYzltRFJwa3FiT0JZQVdsNTJkelo1bThQTHlvbkNrTEdLbjE5YldVaGYrK3ZYcjlKaHlwbi8vL2kyeXVCYkxUZXFyVHBzMmpTTG16Smt6VkV0cThyN0JlU0dLZk0zcEYwTzVhYnplcERpVHlXUlVFZzRaTXFSdjM3NVVSVkpNMDJOTmd3MU8zYkJMcE56VW5CZDYrUEFodld2eTVNbHVibTdzUElZYVpCcmxwdDdHR2RYUUJ3cGY2dXovOU5OUDlNMUIrVXQvTFZwVkN0TUxGeTVvSDNNQWdCYjMrKysvVTI3UUErcnEwY2RRVTFGU3JORUg4TXFWSy9TWWVvUURCZ3hva2NXMXlubWgwdEpTOW1RNm8rLzRwdDQzYWsvLzdiZmZLR3JaMHpLYWpkZnVTdE1VU2lWYWlwK2ZIN1ZBWWNwV2N5YjIwMmtsazVPVGFlYVhYbnFKM1hoRERUS205ZE1aMVVuemt5ZFArdnI2MGdOMkpXbUp0T0hVRG5YYkoweVlvUGtDQklDV1ZWaFlTT1VhZTRpVEtqYjZBTkxubEgySlByelVGOVM4TkdiTUdPMmppTTNXOHVPUTJNR2JucDZlVkxKUjZqY2pONDJmVDJlbkZCUVVIRDkrdkZ1M2JncUZnbnI5N0RhWW1KdnMydzhlUEVpZDhSNDllaGhwa0RFNU44dkt5cWg5NnJCVGRMS24wV25LMGFOSGFRcDlBYkpUQUtERjBjZVRQcmxVOUdpbWRPM2FsYktpWThlT05KR0tUZnBvYTE2aWlkUWQxS1JxczdYS3VIYzJwRjUrK1dYcThEWWpONDJNMzlRTTVhbXFxcUpGVUhFK1pjb1VUWmpxN2FkcnhtOXE1eWFWbktkT25hS0kxSlNjZWh0a211cW5zNDNUMXdNMVJYKzhuSndjemJCTjlxRG50V3ZYWnMrZXpaNWlBb0FXUjNGQjNWUE5oWlhHRFI0OG1LM25Ibk9oclpLYjdER0ZtemR2VWdaUmxIRE5UY2J3OVVMYTgxQWlwNmFtVWhScXhsM3FQUytrdVY2b3dUaWtlL2Z1VVYxTWE2Z3BPUnMzeURSMVhvaHRuTjAwNnVuVEY0YjJvVXhxa1A2Y05BTnR3bVArblFEQWtQTHljcXBSNkROT2RWV05pdmFyVmlwVUdORm5uMnF2RnZrdzR2cDBBSGptVVJsRW5UOFhGeGVwVkVwRjIrM2J0OW5wMU9XbFBydEFJS0FLakhxWm1pTHBNU0UzQWFCZFNVOVAxNzRmMHRDaFExdDhFY2hOQUdoWE5HTTVtUllkczZrTnVRa0F3QTF5RXdDQUcrUW1BQUEzeUUwQUFHNlFtd0FBM0NBM0FRQzRRVzRDQUhDRDNBUUE0QWE1Q1FEQURYSVRBSUFiNUNZQUFEZklUUUFBYnBDYkFBRGNJRGNCQUxoQmJnSUFjSVBjQkFEZ0Jya0pBTUFOY2hNQWdCdmtKZ0FBTjhoTkFBQnVrSnNBQU53Z053RUF1RUZ1QWdCd2c5d0VBT0FHdVFrQXdBMXlFd0NBRytRbUFBQTN5RTBBQUc2UW13QUEzQ0Ezb2RYa0Z5d2VKVXN4L1BxQ3ZiMGloOUwvRlpMckpYR3hzaVBuSGhWVk1FSVB5NkRwZHU4dDZPeHN4VERwOXdlRVZ4dHV3SEw5T2JmcExzcEg4bk41L245VXlCa21lRk9uMkRDQjFqeVNoSVhpMWJRU1FmenpPN282RzF2ZDR1aCswcDFhenoxR1dVMmYyMkY2a0tQUVNyZXB4aGJ4WWtUeVZjZnBrVlZzUm85Z1lmMHI4cFE4MzRVS2V1QzN6bkh2ZUJtN1E0SStjdHcydlc0bWlUZ3hUcm96c2ZaYVBzUFlNMzdCdGt1V09BUjVkR2hxaVlMZkl6dXBkdkxEblRHVkNTbTFPU1VNNDJRUkVHU3paRlduQUJmYkovUW5ObGZJVFdnMUp1V21RcFNRSC9wZXJWejNKWjZYemE1OTNmMnVtWmlic3RTb2dubTdWZE5DN05KaXUyZ0ZWL056VTcwbTQzaUhObmZ6c0dlTXAxaWFiNlgvOGhwNkdMR2o2NW9nZnQwTG1oVlRyU3BUMERBM1JRWExwOHFTU2hxMkZ4empHRHRGMkdSdXl0UHZUdzJ2em1uNG1zV0N2YzZSUSsxYTVvOEkraUEzb2RYVXlDU1NHdlhqekZML3hjcXlLMkpiNTVWKzZtazhZUWNtNi83VTZjcFB2akRFZHRzcUJ3OWhyZWlVWk5WN05UU0ZGMlozTGtiQVNHclptVVdKSlZPajZMSGxta1NuTUJkMm1nVlBhTStqWWxCU3VHcHdaYUs2VllzMXAzcEc5TmFzQlBmY25HdWZ0cHhDcHlibldObnF0YW8xaWJCUFcrZk0welFWd0RzVUszRFRmaXZQUnFnb1ZhOURoUDFsNWN6c0hpaU85cFB1cktoYmVyNXVidGFJNDJkSm9pNVJuV2dWR2VjdzNjT0trY2pqMTBzM0p6TjFYd2xHbDhpVHFodjNzTjYycldOQUYwdDVZZm5teFJYeHRNWnV0b2RPdVhoYnRmVS9nUFlMdVFsUFJGMlB1NjV2enBJbUxpOVdkbS9kYlBhZTZPNm5EaHRGenU3N29WR1BHaVJnVVlKbzVIdTEybjF6RFVuaVBmOTNhaGczeXlEbjJwUkxxaDV4aEtiaTVKNmJtaTR3b3hEdHl4Ky9taFpxRVhtczU0TG5qRGRWbnZUT3crVVVuUFkyZXpPNys3R1pkVDEvZkZpVlNCT1VEWEl6L2I1dmVMVmNXYUoyV1JOVVZ4NldGQzczcjB4U3o4TVlXMkorUWVOZXYrVDRQVlhaYTdIbVJNOElqN2IrbzdkZnlFMTRJdlRtcHJ3b2FtQkZQTVhtS3VHcE54M3JaeFlWekJzalM2VkVpSEhhTnNXQm5XWTROOVhoNjdiU1ladVROSFR0STJXMWRjYkZXLzNxNCtSbWZTWHJ2VVo0YUs2bDhhYnFNb3RaZWNoMWlZL3lRNVd6TzFmMUJXQVZrOVlqektsaDBsMzc3TzdVR0pyTGV0dFYxeUJlZlROSm04dXYwZis5TzZ3TU5wcWJtbUtXNnMxZHprRTRwdmtFSVRmaGlkQ2JtL29xSmhVOUVXWXdOKzg4Q0I4dnoyVFRTdml3L3JFcXVSNDNOM1VtV3VzLzJxaHB1ZUhYZ0RoK3FpUXFTK3VRcSs3MlprYmZEZDlPVTIzMi9xKzduLzVWa2hoZll0SDNvbkdyMUllR2hTOVlSWVRiVFE4VHV2R3MyL3FQM2Y0aE4rR0phTFhjRk1YbmptZHJUT1VSUFVuOGRISFVKWWEzU0hCWi9jWVd5azNsMi9sbmpPY21JMHRaVzdDWWd0T0hkK3hRTjQrNnJhcy94YSt6dlJhSmkwdFdLUTlsTmo4M0dVWlJsRnI0MTFYVktmbjFMd1pFT3NRdWNCTGk0R1pyUW03Q0U5RmF1U21PR3lQWkxGSjIwazh0YzZxZnpkNTZWNXByZ0xMejJ3cjFwdUdtNmtZZEtWY3lPRTExMUZYVFNXY2VvOTVzWXVXckpEbGxTUW1WbStKcml5cVV6ejJXQ1E2dDdNUmpvTFVnTitHSmFON3hUYTA4MVorYldmbmpweXBQdkRSV054N295UjNmVkczUnd5ai84dmdLV25QaDlQTVM1V21pTUx1MFRYWGpva3c2dmluTk9TY3ZwUDkzNVFVOFYydHNpZklLU2NXaitrRUZwRWFTc0VTOFdsbkROaHhHQ2kwTHVRbFBSS3VjVDFkYyt5UnY2bVlEUzFRZlZYeGk1OU5aZFFNMmd5eURVbXBwM3JEWXpqRWhIZFF2NnVhbVpxeCt4RmRkMTR5cUcvSlpkejY5eWFTdTN5Rm4zS1pyeGlpZHl4dndSMFhkQ3JmMUg3MzlRbTdDRTZFL054bjVKZlg0VGQ0NDIxMnJHNDNmM0ZRL2dsMVBidFlWZDI3VUxaMVhYN0FWSGlzSlhWdGIxMEUyT0FTU0orekEwemtJK0hqak4rM1ZwN00xYWFpaVcvYzFHcjhaRnlyWlRBdndzRnF6M2lGTU9YNVR0ak95UEM2ZHFmdk9NTHJFd2hMMkpCaHZIRzl2bElOSEYydW1zRHhoVFZrVTZzM1doOXlFSjhKQWJpcHJPaVBYQzluWFQybWNtNXFFV3JEWE5YS28xa25rbkFkVEo4cXZOUmdDMlVpak5YbXM2NFhxdS9aMWFhNmtQUWFlMFhjOFYxU3dPRlNXVXRHd1BkT3VGeEtLdm44d2RWV05wTkdMZnV1RWV5TWNHV2cxeUUxNElnem1KbVBzK25RdGpYS3pybyt2UGM1Y3JXNEEwQXU4VXdsMnFjM05UUzdYcDJ1ZlNxcS82RlAzbWtzRDU4RlUxNmZISmFndU1GZGVuMjRUc1ZBWTVtWGk5ZWtLU1k0NElVNm12ajdkbnZFZVpUMTl0a1BFS0llMiswdWJCZVFtQUFBM3lFMEFBRzZRbXdBQTNDQTNBUUM0UVc0Q0FIQ0QzQVFBNEFhNUNRREFEWElUQUlBYjVDWUFBRGZJVGFYYTJscVpUQ1lXaTZWU0tUMmdwNWFXbGp3ZXo4SEJRU2dVMnR2YjA5TzJYa2NBZUZvZ054bUZRa0Z4bVo2ZW5waVltSldWbFplWFYxRlJ3ZWZ6WFYxZG4zLysrZERRMElDQUFJRkFZR1dGTzhFQ2dKSzU1eWFGWmtaR3h1ZWZmMzc1OHVYUm8wZVBIRG55dWVlZW96S1RralE3Ty92MDZkT1hMbDNxMWF2WGloVXIvUHo4RUowQXdKaDVidGJVMUp3NmRXclhybDNVR1o4MWExYmZ2bjBkSFIycDBxUTlRaTlWVmxaU3o1M1M4L0RodzdkdTNmclRuLzdrNys5UGhXZGJyelVBdERIenpjM2EybHFxSlRkdjN0eTFhOWNGQ3haNGVucnFQWWdwazhseWNuSysrT0tMM056Y3RXdlhValhLNCtFSENBRE1tcG5tSm9VbWxaT1JrWkZWVlZYVUJ4ODRjS0NSbWFrdmYvLysvVGZmZk5QWDEzZlpzbVU5ZXZSbzY5VUhnTFprcHJrcGw4c3ZYNzY4Wk1tU2YvempIK1BIajIveXdDWE5mL2JzMmZYcjE3L3p6anRoWVdFV0ZoWnR2UVVBMEdiTU5EY2ZQbno0NzMvL3U2Q2c0QzkvK1l1N3UzdVQ4OVBPb2ZvMFBEeDg1TWlSYjczMWxvTUQ3Z3NMWUw3TU5EZEZJaEVWbTdObXpYcjU1WmVkbkp4TWZOZUdEUnZ5OHZLb1gyOUsxQUpBZTJXbXVYbnIxcTBwVTZaczM3N2QxOWVYeitkWFYxZUx4V0xhRVFLQndNYkdSak5iUlVVRmxaazBSU2hVL3FyQkR6LzhjT2pRb2JmZmZ2djU1NTl2NnkwQWdEWmpwcm1aazVNVEhCeDg5T2pSZnYzNjBmWkxKSkw5Ky9mYjJkbUZob1pxbDU4MEcyVmxZR0RnNE1HRDZlbVpNMmUrK3VxcnBVdVgrdnY3dC9VV0FFQ2JNZFBjdkhuekp2WFE5K3paTTNEZ1FGdGIyNUtTa3IxNzk1NDhlWEw5K3ZXZW5wNmEyWGJ1M0huKy9IbE5nWG5peEFtS1Y4cE5Oa1lCd0R5WmFXN201dVl1WExodzBhSkZWSFYyN05pUit1azBaZHEwYVRFeE1VRkJRZFF4cDcwaGw4dm56Sm5qNCtPemN1Vkt0cCsrWmNzV3FrQlhyRmpoNGVIUjFsc0FBRzNHVEhPenFLaUlJckt5c3ZKUGYvcFQ3OTY5YWRzcktpcW9yblIzZDErd1lJR3JxeXNsYVVaR3hvY2Zma2hQcDB5WlltRmhJWlBKNXM2ZFM1WG1XMis5UlZIYjFsc0FBRzNHVEhPVFV2TENoUXNmZmZUUisrKy9QM0xrU0I2UFIwR1ptSmo0N2JmZkxsKytmUFRvMFRURHBrMmI3dDY5UzhFNllNQUFxajFUVTFQWHJWdEhyNzd5eWl1NFBSS0FPVFBUM0tTTnBmcVJ1dW85ZXZSWXRteFpyMTY5YU1yOSsvZXBsaHc3ZHV5U0pVdkt5c3FvektTVURBa0o2ZENoUTJGaDRYdnZ2ZWZvNkVnMWFkKytmZHQ2OVFHZ0xabHBiakoxMTZmLzMvLzkzNWd4WTZpb3BMMUFlNENlaXNYaUZTdFdVS1c1ZXZYcUw3NzR3c2ZIcDdpNCtNQ0JBOXUzYjkreFk4ZWdRWU53VnlRQU0yZSt1VWtxS3l0Mzd0eDU4ZUxGVmF0V2VYdDcwNVR6NTgvSHhjVlJrbDY1Y29YeThkMTMzM1YxZGIxOCtUTE5NSGZ1M0VtVEpuWHMyQkVYV1FLWU9iUE9UWktSa2ZIWlo1OU5tREJoNXN5WjlQVEJnd2ViTjIvKzVaZGZGQXBGVkZSVVFFQUFqOGM3YytiTSsrKy9mL2p3NGE1ZHU3STdDeDZEUWk0cVMwcXBURXFveVJFOXlpbFJUYk5udkQwc1BZYmFoSVYzQ1BKb2hUdjExVWh6TGxTay9GU1ZtRkdiYzUyUnE2YnhYQ3c4ZkszQ3h2R0N4anQ0T05tMjlXNkJaNG01NSthZE8zZW93S1Fxa3BLUlVkMlI4K3V2djE2L2ZqMlZtUWNQSG5SeWNxcXFxanB5NUFoMTBpazM3ZTN0MjNwOW4zR0ZEK1ArWEw3NW5MRlplRjdXYXpaMG5PN1ZvV1dXV0ZPV3VsTVNIVnR6cmNMWVhONnorT3NqTzNrTDhhVUlKakgzM016THk5dTZkYXVOamMwSEgzekFUc25NelB6blAvODVaTWlRdDk5KzI4N09ycnk4bkhKeno1NDk3QVZGYmIyK3p6QjVWdjY4aUtyTUNwTm1EbDRuaklsd2ZOd2JuZDRwWEwyc011RzZhVFBiVzY3YzdiVGtoUmJLNjJkS1VZSm81SHUxN09NRmUzdEZEbTNyRlhycUlUY2I1bVp4Y1hGcWFtcjM3dDE5Zkh4bzE3QzVHUjhmZitEQUFlUm04NGtLRm9mS1Vrd0xUVlpRak9PMktjSm1MMUIrNDhIeTZYTHRKZkpjTElORHJBT0cyN2dwTytXUFJOZXJVMDlWSjZXcnUrMHFGZ3YyT2tjT05idS9NbktUSytSbVhuUjBkRVpHeHNpUkk5a3BDb1dpdXJxYUh2RDVmQXNMQzNwTWZmbkt5c3FFaEFUa1puTkpFaGFLVjZkd2ZKTzlWV3hLajJCVGIxYWxxNlJ3VlZCbG9pWTBuU3hYYnVxNFpGVGp1LzhwNUNMeDVpVVZPelUxcWIxbFRKSmJtRXRiNzdBbkM3bkpsYm5uWm1scDZkR2pSOVBTMGpwMDBOOUJlNlRpNnVyNnhodHZhTjhxQ1RqSXloOC90VXFrTzQzblpiMStzekM0ajRCblJlRWxTZmlrUENxaDRiOUF2M1dPZXlPYVVYSktrOTRwWHA1WTk4ekRldHMzWFlPNkdENTJXVkVjUFZXNk02ZHV4U0xzMDlZNW05VnZvU0EzdVRMMzNKVEw1ZGV1WGJ0Ky9icVJVWm1XbHBZZE8zWWNPM1lzY3JONWNuYm5oa2JwL3V1eXQ5Nlc2aHFrZlpxdFJwS3d1RkZOT281L2ZsdFhaNDZMazZmZkR3MnZyb3RweS9WblhLYTdOWFhDSitkQitFUjVwdnFKeFpwVFBTTjZ0L1ZlZTRLUW0xeVplMjZXbFpWOS9QSEhuM3p5aWFGZkRXSnY4TkdwVTZmVHAwL2pmSHF6eUZMV0ZpeU8xNW5rdHRMaDFMS0dQWEI1U3A3dlFvWE9KSHVidlplNyszRmJuRFJ4ZWZHcTQrb25mbXVFZStjNmNuMlg5eHJoSVpQZTFVNGdON2xDYnBadDNicVY2czNZMkZpOU0xUlhWNTg2ZFdyanhvM0l6ZWJTYzNBejZDUEhiZE1iZGNEekN4YVBrdW5PYUxQM2Z4eHpzNlJ3dVg5bGt2cUpWVXhhanpEVGpwQktqdC96WDE2amZtSzh6cTJSaWE2VnBTVElFN1JHZzNyNFdIb0gyVTRQNnhEZ1lmU012UFkyTGhMOEh0bko4S3pGMGYya093M3VCNjFYZy9qbmQ2ald0cVk4NTBKNXdoNTU2dVZIMS9LVnIvQmNMUHdDck1QQ0JkT0hOamkyYTlvUjV5YlcwSHdoTjhzKy9mVFQ3T3pzTDc3NFF1OE1sSnMvL3ZqajMvLytkK1JtYzVVbnZmT3cvbWlqaXY3Y0ZCWE1HeU5MMVpuRU9UZDE0aS9NTG0xVEYxT1BqK29zM2RCeUZaSkxSYXVXVmFYa0cyeEdPTW9tOXFQT0FTNEdCdEszV200NjNDaUllbGRtYU5DVk1JUzNON3FiUi8yL1grVG1ZMEZ1bG0zWnNpVTVPWG5Sb2tWNloxQW9GRmV2WGoydHd1UHhIajU4ZU8vZVBiRllQR1RJa0FjUEh0eTllN2R6NTg1dWJtN096bHlQd3BtUnhzYzNlWXNFbHh0OUlQWDAwemtGbjBybTVydmhuNmdmQjZ4MzNEWEw5SGRMYzg3SkM5V1BMZDM4bmR3YW5odXF2UGJady9DWVdubVRMZGxiTEloMWpBelM5K045clpPYmUrY3FWaTlVNURERzhNYnhqOFYxZFZNZnhrZHVQaFp6ejgyS2lvcXZ2dm9xUGo3ZTBLK3owVzZoNktSWTNMWnQyKzNidDArZVBIbjI3Tm55OHZJWk0yWlFudDY0Y2FORGh3NUJRVUVoSVNHdXJxNjJ0cmhjVDU4YithR2hWVHFmYW52TDljZDBUOWZvT3k4VXZLbFRiQmlueXk3TEVoZVhyRXBXUDFud2pXdGtRRXRkQXFRUUplU0h2bGNmbWp3WHk0aVYvS0FCdHQ1dWpPaHExYlYwZWZ4TzdhdVNEQXdGYlkzY3RHZDRGZXJEQmM3anJOOEs0M2tvL3kwL0VxWExFK0pyTWt2cTN4T3hvOHVhSUQxajZYQjhreXR6ejgzYTJ0cVNrcExpNG1JajgxaFlXTmpZMkZBbmZmYnMyZFJ0SHp0MkxKdTJ2WHYzcHZTazl4NC9mbnpVcUZGcjFxeWhlTVd0T2ZXcFRGbGIyT0RVRU9OaHRUNm1ZNWkzNFhGSUhyYUhqcmw0Yzd2NWxFNFp0U1NoMThvWFdtWUQ1SmZ1VDUxZXJZbitvRFhLeTVtRURkYXRRaHdmS1ltcU83bWtmL3hwYStSbTNmNk0yZFlsckxmdU56ZDlHeTBScjY3N0ltRkM3TkppOWRUdnlFMnV6RDAzR1ZWMEVpTXpzSGVEejg3Ty92T2YvL3ptbTIrR1V1MVVWVVZkZXo4L3Y2NWR1MUxzN3RxMWkzcng2OWF0OC9UMDdOU3BFKzc5b1lmdUdNbW1OUzVJVGFLZEpwYnJ6N2xOYjVrUjdKTDQ2ZUtvUytvbmZxdUZlK2NiT051dW0xTzh1UjNTMW5UVzZlNjNVbTU2Mk93OTFOMVA3K0YzbmJOdDF0dXV1Z1kxR3B1SzNPVEtySE9UTnBrU3NLYW1ob3BFSG8rbjl3WnhGS20vL2ZZYlpXSkJRUUYxMkQvNDRJUHg0OGZUUktsVWFtZG54LzRXNXVIRGh6ZHMyRURGcHBlWDEvTGx5OWxiMGtGREZTVTczeXFMUG1mQ25IcExKNU8wVG02bTMvY05yMWIzMEYvZ0hkdlh6Y05JRmF5VFU0MU82TGRLYmxxc1RPeSt4TXZRZDR3azRYWHg2dFM2ZlhMR2JicGJ3em1RbTF5WmFXNVNWbEx3ZmZmZGQwVkZSWlNHbEp0Q29YRGF0R21VZlEycVJTb25hVGFxS1Avd2h6OVF4M3owNk5HdXJxNWxaV1Vpa2NqS3lxcGJ0MjdVZjgvTHl6dC8vandGSzNYWUowMmF0R3paTW95UTEwOGkzcmxLRXAxc2ZDYkxOYWU2UmpRbk5Kbld5VTFGWm5SZStIYjFFeE1PdWVyTUh4YmJPU1pFYTJSU3ErUm1FNk1PTXFQdmF0WkhieXdpTjdreXI5eVV5K1dscGFWVUxWSnBlZkhpUmZhSUpQV3NLVU52M2JyMTdydnZ2dlRTU3hSNU5FUEhqaDNaNjlPcDJQem9vNDk4ZlgyWExsMUtOU205OU9EQmd4OSsrQ0VsSllVZVQ1dzRrZDVDU2Nxb1RzMVRzVWtwSEJzYmErZ3NreGxURktVVUxGcXV1R2JhclQwQ0loMWlGemdKT2Q5WnZ6VnlVeHczUnJKWnhLVk43ZnAwZm9mZlYzZXVmd201MlM2WVMyN1MxbEhNM2JoeDQ4c3Z2Nnl1cnZiMDlEeDU4dVRBZ1FNWEwxNU1xVWRGWlh4OGZGSlNVa2hJQ0R2TWFONjhlWlNWdHJhMnAwK2ZwaHljTVdQR3E2KytTcmxaWGw1KzRNQUJtdkxXVzI4VkZ4ZWZPSEdDb25QVnFsV1VzQlMrZi9uTFh5aFZZMkppM04zZDIzcUxueW9OVDBhYndtT1I0RkJrSjQ3WGliZENia29LVncydVZBOC9OZkg2SmUxdzFBeEtiL3dTY3ZPWlpTNjVLWlBKcmw2OVNybldvMGNQS2dhcGlyeDc5eTRsNEhQUFBVZmhTRVVpNWQzTW1UUHQ3T3dvVWlrRTA5UFRQL3p3dzRDQUFIb2pSUzM3KzBJREJneWcyVDc5OU5PdVhidXk0ejMvL3ZlLzA1UlBQdm5Fd2NHQlpxRHduVDE3OXZ6NTg5RlAxOWJnWkRSTGVhdmc1UTdlTG5iS214SkpLcTRsbHExZVc5TmdIdjNENDQzUk9aKytNckhYRXEvSFhuc2pJV2lROWlBaDNhaEZicllMWnBHYlZWVlZkKzdjV2JseTVhQkJnOExEd3gwZEhhbFVsRWdrTDc3NElnVWxlenFJaWxEcXVkTytvRzQ3elgvNDhPRXpaODVFUlVWUlI1Nkt5cmk0T01wRXlzM0N3a0lxTm1ubXYvM3RieFVWRmV2V3JhdXNyUHo4ODgrcFUwK2Q5NDgvL25qMDZOSFUzNmRGdFBWR1B6MTBUa2F6Z3RZN2JtczBJbDJlZm45cXVHNjgybHZ2U25NTjRGQno2bzdmYkpFSWVNemNiQkJxeU0xMndTeHlreUp5Ly83OVc3ZHUvZWFiYi9yMTYwZmRiZVB6VS9tWm41Ky9jT0hDRVNOR1VBN3UzTG16VDU4K1ZLc0tCQUxxcHljbkozLzIyV2RCUVVGeXVmelhYMytkUEhueW5EbHpMQzB0S1ZJcFRLbjhwR0IxYzNNemJkWE13SjBINGVNMXR4cFNvUklzczd1Zm5tT1hPamZYWURVOHI5S1VscjllcUJtNVdmTXdla0E1Y3JNZE00dmNMQzB0cFpyeFgvLzZGM1czS2RFMDQ0M1lleDFSU2xwWldiRm5nVFRUNlMzejVzMmpjQnc4ZVBDdVhidW93LzdhYTYvUlBMU3ppb3FLVHA0OCtlMjMzOUs3SWlJaXhvd1pReVdxWElWeWs0STFPanFhT3ZKdHZkRlBqZFM4QWEvclhqMXBPSDMwWEpHNVRIQjVKWWRML1pwL2ZYcGh3ZUxoOWVNY2QvM3VHc0FtdS9ieFRUZmJRMmRjbWg1bGh1T2I3VjM3ejAzMmpORC8vdmUvd01EQXhNUkV5a0gyNENOTmw4bGtWRERldTNldmMrZk8vdjcrMUdkbnIvYXBxYW01ZmZ2MitQSGp2L3p5UytyYWYvZmRkM3YzN3FVdWVaY3VYU2gyaFVLZFR5STFMaGFMTXpJeWNuSnk5dTNiRnhJU3dwNG1hdXZ0Zmxwb2Z5YlZ1T1FtNTB1a2pRK2ZORXpuNm5pZCt5RnBuMCszaXMzb0VkeGtFbXQvVlVUWVg5YStDekp5czExby83bFpVRkR3ODg4L2I5KysvYzZkTzFRSkJnY0hVejVTalVuVDMzLy8vZHpjWE9wOVYxVlYwY1FOR3piMDd0M2IxdGFXbm1abVpxNVlzWUplZXYzMTF5a3I2ZTNVQWFlY3BZcnk1WmRmMW02L29xS0MybCsrZkhuLy92MTlmSHdXTDE3czRlSFIxaHY5Rk5GL1YwMlQrK25jYnkzUnZQdHY2dHdrVlBjKzg2MDJmck9KY2hpNStmUnEvN2xKUGZRZE8zWjRlbnFPSFR2MitlZWZwMnFSTnZqaHc0ZXhzYkZYcjE2ZE5XdFduejU5Mk1IdERnNE9sSldVa2xSQ1VuZjd5cFVydi96eVMzcDZPdlhFaHc4ZlRtVnBaR1RrMjIrL1BXZk9IQ3BJejU0OVMrVW5SV1IxZGZYMzMzOVByVzNjdUpHV1FxVXJmb1pJeC9YODhXRU5meVREMVBOQ3lsOW5jOW8yeFlIaFFuNHV6LytQQ3ZXWUp4T3YxelI2djNlZEJwdThYa2pucDQwYUZiemFSd09NOS9ybFJWRURLK3FTSExuNWRHbi91UmtYRjVlU2t2TFh2LzdWMTlkWE01RnFUMHJNWmN1V2hZYUdkdXJVaVdyR1M1Y3V2ZmZlZTVzMmJSb3laSWhtdHBzM2I4YkV4SFRzMlBFZi8vZ0hGYUVSRVJFVXV4TW1US0R1L0xmZmZrdVZLYjJkU2xlcU55bHpQL3p3UXdyTnR0N2NwMDlOU2R6NHNzMmlocFA5NXR1dFdTaFFqVU9pb2wyU2VVZ2FGZDE0Vkh6emZySkNrcmhZckRtcmJ1emFiZlVhTm5WUmVZMDRmcFpFTXlSQWIraWIycFJPcjU5WmVjaDFpWS9lVEsvTWpDNEszNjc1U0Q2NTNHekdGNVVaYXYrNXVYbno1b3lNREFvKzdYUGNGSWdUSjA3Y3RXdVhuNThmbFlkVVB4WVdGb2FFaEh6NjZhZFVXbXBtbzdLVTNrakp1R1hMRm5wNi92ejUrUGo0Ly96blA1U1lGSytVbmxTTjBuOERBd1BuejU5UGZmd216OVNiSnoySE9FM1QvSjlJYS9Dend4NVc2emM3VHZkcWZGNWVJUmVWeHEwcWowdXZtMkRnUnpRYjFNTDY3NGRVSTBsY1hicEtjMWNuL1QrTnFkT0wxNS9wTldVcEg0bVhmL2xJNnpLQlZzN043MFVqVjlVKzdqNDNKKzAvTjZuZXBPNTJWRlNVOWpVOHVibTVDeFlzb09pa1RuZTNidDNLeXNwKyt1bW56ejc3aktwTDdiSzBvS0NBY3BOU2NzT0dEWXpxVkJJbExFMmtjcFZ5a3g2TFJDS3FOS2tGbkFneXBzSGR6RXpVWkoxb0ZDVmQrSUpxN1FKVytJTFY5SWsyQVY1V3FsQlEvWDc2aWVwRTdZR2w5aFpMZGpxdjFQLzc2YkpyMjR2Q294dmVmelBZaitmUnlWSWlrbVdteXVLM2FkL3MwdkJQc1YvUER3M1R1aHVwazBWWUJDOXNxR3F0U2hTcDZkVUhEdFVXTmF5N1d6YzNHeHhMOFE2elhmQ3FUUmZhUlVXV3dWTTZOZjgzN051djlwK2J4NDhmcDJxeFI0OGVDeGN1cEV6czBLRURlMDNrc1dQSC92V3ZmMUdwT0hUb1VNckJnd2NQVXBMT21ESER5Y21KSForVWxaVzFaOCtlek14TTZwNXI3Z2JQUmlkVm9GUmFzbWZxYVNKdUhOYzBpczZWNHRYSFRaN2Z3eXAyUjdkZ3p2ZVIweUcvOFdCVmhEeXB4TFM1bmF6V3hIZUtlTTdJc1dtVDcvZk9XRVRzY0Z3VFpLaTNLOHZjWEJqK1NWTWZOdy9MSVB2YWxDejJTU3ZucHFIYnY1czZ6dC9zdFAvY3BQS1FldE5VVGw2OGVQRnZmL3NiQlNXZno2ZnNrMGdrUC83NEk3MVVXbG9xRUFnb1VpZE5tc1RlUGJPcXF1cnk1Y3VyVjYrbVFwSnEwbEdqUmxFZnZLMjNveDJvekVrVVIwVlZwellWWkFFck8yeGMwdG1aODAwOTlKR0lFemFXUmNjL2toaGY0aUs3eUNWTzNzSW1ZMXBSbEZyNDExWFZ6Zjk5SVZaTmVlYk9rc1hSdFliV1NoakMyN1hlN3RvN21peHI3ZHhzZEdTRGhkdzBvUDNuSmlrdkw2ZmljZXJVcWZ2Mzc2ZnFVbk8rV3lhVFBYandnRHJwTklVS1VzMHRPQ2szczdPektVWTNidHpJRG10djZ5MW9SOWdmZ3p4U2xaUmUrNytjUjVvT3FiT1h4ZURCMWdGQmRoTkhDcHg1TFYyL3l5V1ppUldKeWRXWmRULzB5QzZ4M3dEcjRDQitVTENERzZjbDBpWmtTcElTcXhLYjhYdVcydktMRS9aV0pwNnF5VFRRaUZiZXRYNXVNc3J2bU1RNDZjN0VXbllYQ1Qwc0FxWjJXUDhtK3VsNm1FVnVVcS84eElrVGE5ZXVwVDU3ejU0OVRYa0xGYUdVczFPbVRIbjk5ZGVSbXdDZ3pTeHlzNmlvNk91dnY0NlBqejl3NEVDZlBuMmFQSWREdTZLNHVIak9uRG1lbnA3dnZQT09pVkVMQUdiQ0xIS3p1cnBhSkJLOS9mYmIzYnQzcHh4MGNYRXBLQ2pJeTh0NzhjVVhOVCtKcmxBb0xseTQ0T1RrMUsxYnQ0cUtpbi8vKzk4WkdSa3hNVEdEQmczQzZDSUEwR1lXdVVrcUt5dlQwdEsrK09JTFcxdGJCd2NIeXMzOC9Qek5temYzNzkrZnorZFhWVlhsNXVhdVhMbVNIbE8yeXVYeSsvZnZ6NTgvZit6WXNiZ2pIQUEwWUM2NXlhaDYzLy81ejMrKyt1b3JLaitwaWp4MzdweTN0emM3OEVncWxiSS9mVEZtekppY25KeVNrcEtJaUlnSkV5Wm8zeVFKQUlCbFJybkpvdEtTb3BEOUlkOE5HemIwNmRPblM1Y3VwYVdsVjY5ZWZmUE5OMTk1NVJXQlFFREJxdW0vQXdBMFlIYTV5V0pIdHUvYnQrL09uVHN5bVl6SDQ3bTR1SVNIaDFNWDN0TFNrbDVGbVFrQWhwaHBiaktxNkpSSUpGUjRzajl2YVdOakl4UUtyYXhhWkxBMUFMUm41cHViQUFETmc5d0VBT0FHdVFrQXdBMXlFd0NBRytRbUFBQTN5RTBBQUc2UW13QUEzQ0EzQVFDNFFXNENBSENEM0FRQTRBYTVDUURBRFhJVEFJQWI1Q1lBQURmSVRRQUFicENiOE16SzJMMHU4Wlo3Mk5xNWc5dG0rZm5IdDN6K1g4Wi8wWXBRMXllK2JHbldrZmlrekh3cFkra1N2T0tONGNaK3F6Zi8ySmJQMHhqL04xYUV1alJ2V1VVWGRuLzljNlh2dkRmR043T0I5Z2U1Q2M4czg4M05vdVM0cldlTEJPNURoM2wxZHVrL3JML1IzOEI2L054TTNocDNWalo0N3JzdnV6L2g3WHhxSVRlaGRXVit2ZTdJVGZmSmErZjZtVEozM3JFdDI5T1lZVytzQ0RIaE0yNjJ1U2xPM3JybHJQU0Z1Wkd2bUJKa2o1MmIwQWh5RTFvWGNyUGxjZHBMeU0xV2dOeUUxcUtLRlhIOTg3NlQxODVSaFdkQjJzRkRQMTh2a0NwcUdXdUJtOS9McjRaNlVrY3pjL2U2STdmcTUzWlU1MUZWZmxyaTRaOS95NWNxR09YY2d5ZlBDdWt2WUdjeG1KdXFwdnFHTHZYSzN2ZFRkbEVWdmRHeC84U0kyVU9kR1gxaHA1WHM2b2laTmxMOHMvcU5BcmVBYWZQR2Q3bDFmTitSREpGeUhXeWQrNzgwUzZlcHFTUEVaNU95aXhTTXBiVmpuOUdUWndXNjI5YXRTSzM0K29udmpqVjZvM3JOeDA4VFpCN0pLbGJvalg3cGplU0RQMTI0UmMzU1dqajNEMzUxcHIrTGRkM2FhdTBtZmVrcHZYRnNYMkthU01ydXNXRk9ONUt6dEhOVGZQM1lvV09aSXRYK3A1Wm56UGJ2eXR4SzNMZzdneCs0ZE9rNFozVWo0dE5idC93czlac1RPWm5mTUtiRnZ4Mzc3cWl5QWRwa1FWZWY0Rm1UZlRSSEN2UTF6bExrcCszL1RyV2psRnZrUHZ5bGFlT2VFN1QxUDlKbVFtNUNxNUZKeFRKRjFxRXR5WGZkeHExNDFjZGE0Q2l3WnZLU3R1eTRJT2E3K0EwZjNOMjJMRGN0TGF1SWNROWJPbmN3WHlxV0t2Si8zckV2azNsaDVzS2dubnloZ00rSWptM2RrU1oyN0Q5aVJIOEhwaXpuNTdNM3BJNGozbGp4a3VvRGJEdzMrWHkrcGFNWExZVXB2SjZXZGt1aUR1S21jMVBDTU96cXFkOW9MUkJhUzVudS92NWVYZlEwSldZcytjN2Uvc042T3BUbC9qZnRTcEdzYStEU0pXejRTRE8vM25ya3RyWHFLQ1NmWFhubjBVdVhqblZtMTV5eHBEeDNjM2UyNnpsOGRtQWYzVDEzZWMrV1E5a3l4LzZCdy9zN1ZLa1dLblgwbjc4aTFJMVIwRzRTYWZaU2QydStJKzBtSGFKalc3NU1FK3RzZ3ZKclNKMmIwc3pkVzQvY3NuVlhibzV0V2ZiNXM5bFM1OEFsUzhkVktjUFJldlNLcFdQWkNKUmQyQkdkVk93Mzk4K1QzWFhMVzJuRzdxMjA4cTUrSTU3dnpxKzZuM0UrTTU5eG43eDBycC9BY09QTzZvT2tSWUwrZ1NPVmYwbmxTeEsrMTR6SW1kNXQvYSswV1pDYjBMcDArK215QzE5R0orVzdoeTZmNjgrV0dyV3FaSlI2VFl1YzZXUFpxQWQ2N2VER285azlKMGJPOUdVYm93L2Yxck1WcWc4ejAyUnUxbjJZeWMwajBWOW44a2NzWGZHU2M5TzVXYUcxZXRLem4yOU16cmZWbXRLd0tiRTZDbFZFUjdmc1NKZDZ6VmhOY1NETDJMMHhNYmZueXl2bURsVzNkV0hIeHFRQ3I1bnZ6L1JTclRtLzcrU2xjL3owVlZ5M2ptemNuV250djNCNXFKc2wrMVpWSGducXlrRmovWFR4MmUxYmt2UGRndDlaT0Z5OWg3TVBidHlUWmN2bXBpeno2NDFIUkQyMU52RENqazFKK1o0elY4OXdVbTY3YmVDS0plTWNWWCtvSFI4bmlWK1krMjZZdSs3aTFPdFdYNzJxL2lZSzVhdU9oaHYzS3ZwcHk5WmZGUDRMMzZYb3I5K3h6MDFiKzVwUFcvOExiUTdrSnJRdW5keFVGVEg1M3NvUGttWUcyUzg3b24vS1o3T215U04zT3EwMTBVK3ZPeXhBYXROMmYzaXNSTldzS2YxMHJVT0JxcWI2aEs2ZDU2L2R1S0dtbUlLa0xYRVgyUFZYTml0U3BXVGRpNnFlcjBJNWY3N1JJN09xYUJiVWwzNUt0dzVINzc0a0NGeXhWSmxxUnZhU2FrdDF0bDE3bzJvemQ2OC9rdXVwdmYvRnlYRmJ6bFlwWDdVK3RYWHJPWDV3NU1MaGZIYmZGdnJOZTNkeUg5M0Y2VmszbWVoeTFuMzcvdjU5YnhscDNERjFSL1NKZkxleEMrZU5WaDF1ZU1ZaE42RjE2U1NkM2c5OG5sWVBzZkVNNHV2SmljbHBkNHRrQ3MwYnVPZW0wYkJyT2pkTmJrcHIvdTdLcHNSTUk0NU41NmJlN1ZKT3pHMzYyMFhQUzFvYnBYcFY3MG9wWDFWVmp2eVhJaGVPNEdmdFczOVE1RFAzWFZWZHI5Mm1rWE54eGh1dkxicnc5WTZrMnpMRzB0cloxY3Q5eUxCeHZtNTh5MWI0Qi9kRUlEZWhkVFdkbTZKakczZWs4ZlhtcHFxakp4TDBENXc0ZXJDcnN1K25PbHI2N09SbWxYdGdrSmVEenJyeHUvdjZ1RjNqbnB2cHU5Y2RiWm5jbFBVTkhEZWc0VXI1VUlxeFhXNzc0TWo1amtmK3VUOTNrS3FUem5ETFRjT05LOG1Lc3JQU3NpN2Z2QzRxVWpEMkx1TWkzZ2g4OHBjTXRBVGtKclN1eCttbnF3NktHY3E0cHpJMzY5ZmZVYm1wQlhYSGJSdklhT1YrdXM1eFE2Mk5ZdmUvNTdUVnMvUWZWU3lpcnZvdkRwTm5PU1o5bSszRmR0SVozY1dwdnVRY1ZUVnAvVjlRSXBaWkNoeXQwNHcwcnB5SDRUc0sxZTlTM0Q2eWRWZW1HTWMzQWZSNm5QTkNxbURTT3BsQU04ZnVTQk0vVm02cUNqZnRkNm1LcktKbTU2YlljZGpDRlNIcytySG5oUlRzWVVIeHVjKzNuTXAzSHJWMDZmaTZvVDNTckxTYlBmMTlIWnNhZWZvNDU0VWE3K0dzL2RFSHI5dXpHOFdlTlhJT2ZHUHB1THJoUWRJcmFiZmMvTlVEaVZRajZtVUN2dFRhcDM0bjZDd3UrMkQwbml5QjFvQWxWWjlBZFFiSnlYRGpxZ09kWXUxdmtWdEhQdDZkNmFLOVk1OGx5RTFvWGFxQmdRcTNnSEcrM1ZYOU5ZUGprRlNmY3RWcFhKR2oxN2dYM1YzNitmZVhITm00SzFOcTcrd3plRmlYcXV6TFY3S0xLcGpIUEw2cFhvU3RpOTlJMVRDZGk2cGhPclhOejAzR2tuSHNGempDdzZFczU1ZXpOOFNNVy9DNzdLbHM5aXVobU84OFNEbEtpU25ML1c5NlZwRzkvOXczUXQydk5ERmkzOGc0SkNYalo4OGFqME9TTW95d2JxUFlWMjJkZllhcVZ5cnRTaEYvNk55bEw3dXJUdGVvQXE1QWQxaW84WEZJRnpMemErdUdMaGh1WEtHOVJZenMvcSsvWk9iSjNDWkdMZ3pnTTg4ZzVDYTBNbW5Xd1MrVm83c1o1N29pUmYrNGR6WFI2UjM3em9ta3RVei9WOWZPSHRSZ0NQZmtFYlZIOXFjejZncTBlYm1wUFN6YzB0cTVYL0JvNFM4SDA1MmEzMCtmTVVKOHVtN2NlNy9naUZuK3pwcU9lVzFSMnFIdk5JUDJYVHhIdnhMbTcySnIwcFZPaHNhOUt6VTE2cURCVG51dWFFOXlzZFpHNmV4L0Y2L0FWeVlQcXovSFhYL1NYOC9CQjMzajN0MzhRcWVHZW1uK2dJWWIxOWtpZWlubzFXbERuWmxuRTNJVEFJQWI1Q1lBQURmSVRRQUFicENiQUFEY0lEY0JBTGhCYmdJQWNJUGNCQURnQnJrSkFNQU5jaE1BZ0J2a0pnQUFOOGhOQUFCdWtKc0FBTndnTndFQXVFRnVBZ0J3Zzl3RUFPQUd1UWtBd0ExeUV3Q0FHK1FtQUFBM3lFMEFBRzZRbXdBQTNDQTNBUUM0UVc0Q0FIQ0QzQVFBNEFhNUNRREFEWElUQUlBYjVDWUFBRGZJVFFBQWJwQ2JBQURjSURjQkFMaEJiZ0lBY0lQY0JBRGdCcmtKQU1BTmNoTUFnQnZrSmdBQU44aE5BQUJ1a0pzQUFOd2dOd0VBdUVGdUFnQndnOXdFQU9BR3VRa0F3QTF5RXdDQUcrUW1BQUEzeUUwQUFHNlFtd0FBM0NBM0FRQzRRVzRDQUhDRDNBUUE0QWE1Q1FEQURYSVRBSUFiNUNZQUFEZklUUUFBYnBDYkFBRGNJRGNCQUxoQmJnSUFjSVBjQkFEZ0Jya0pBTUFOY2hNQWdCdmtKZ0FBTjhoTkFBQnVrSnNBQU53Z053RUF1RUZ1QWdCd2c5d0VBT0FHdVFrQXdBMXlFd0NBRytRbUFBQTN5RTBBQUc2UW13QUEzQ0EzQVFDNFFXNENBSENEM0FRQTRBYTVDUURBRFhJVEFJQWI1Q1lBQURmSVRRQUFicENiQUFEY0lEY0JBTGhCYmdJQWNJUGNCQURnQnJrSkFNQU5jaE1BZ0J2a0pnQUFOOGhOQUFCdWtKc0FBTndnTndFQXVFRnVBZ0J3Zzl3RUFPQUd1UWtBd0ExeUV3Q0FHK1FtQUFBM3lFMEFBRzZRbXdBQTNDQTNBUUM0UVc0Q0FIQ0QzQVFBNEFhNUNRREFnVXdtcjVUSjFMbFpVVmxweCtlMzlTb0JBRHk5S0RGTGlrdnM3TzNWdVhrdjczNTFWVlV0cWs0QUFIMHNMU3hzYkczdDdPelkwQ1FXMUdOSFZ4MEF3QWdMQ3dzcks2djZwNUl5YVZ1dkVnREFzK1QvQVMzdFNqLzI2dTJlQUFBQUFFbEZUa1N1UW1DQyc7XHJcbiJdfQ== \ No newline at end of file diff --git a/runtime/dist/widget-library/esm2015/public-api.js b/runtime/dist/widget-library/esm2015/public-api.js deleted file mode 100644 index 6ca81bd..0000000 --- a/runtime/dist/widget-library/esm2015/public-api.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Public API Surface of gp-kpi-overview-widget - */ -export * from './lib/gp-kpi-overview-widget.service'; -export * from './lib/gp-kpi-overview-widget.component'; -export * from './lib/gp-kpi-overview-widget.module'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dwLWtwaS1vdmVydmlldy13aWRnZXQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSDs7R0FFRztBQUVILGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgU29mdHdhcmUgQUcsIERhcm1zdGFkdCwgR2VybWFueSBhbmQvb3IgaXRzIGxpY2Vuc29yc1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZ3Ata3BpLW92ZXJ2aWV3LXdpZGdldFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2dwLWtwaS1vdmVydmlldy13aWRnZXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncC1rcGktb3ZlcnZpZXctd2lkZ2V0Lm1vZHVsZSc7XG4iXX0= \ No newline at end of file diff --git a/runtime/dist/widget-library/fesm2015/custom-widget.js b/runtime/dist/widget-library/fesm2015/custom-widget.js deleted file mode 100644 index f099891..0000000 --- a/runtime/dist/widget-library/fesm2015/custom-widget.js +++ /dev/null @@ -1,1224 +0,0 @@ -import { __awaiter } from 'tslib'; -import { Injectable, Component, Input, EventEmitter, ElementRef, Output, ViewChild, HostListener, NgModule } from '@angular/core'; -import { InventoryService } from '@c8y/client'; -import { get, has, set } from 'lodash'; -import { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components'; -import { NgSelectModule } from '@ng-select/ng-select'; -import { FormsModule } from '@angular/forms'; - -class GpKpiOverviewWidgetService { - constructor(inventory) { - this.inventory = inventory; - } - getDevicesAvailability(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalDevices = 0; - let availableDevices = 0; - let unavailableDevices = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - totalDevices = 1; - if (response.childDevices.references.length > 0) { - let available = false; - const promises = response.childDevices.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - })); - if (available) { - if (response.hasOwnProperty('c8y_Availability')) { - if (response.c8y_Availability.status === 'AVAILABLE') { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - else { - availableDevices = 1; - } - } - else { - unavailableDevices = 1; - } - yield Promise.all(promises); - } - else { - if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) { - availableDevices = 1; - } - else { - unavailableDevices = 1; - } - } - } - else { - if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const ChildInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = ChildInventory.data; - if (childDeviceData.hasOwnProperty('c8y_Availability')) { - if (childDeviceData.c8y_Availability.status === 'AVAILABLE') { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - let available = false; - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_Availability')) { - if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') { - available = true; - } - else { - available = false; - } - } - else { - available = false; - } - })); - yield Promise.all(promises1); - } - if (available) { - availableDevices += 1; - } - else { - unavailableDevices += 1; - } - } - })); - yield Promise.all(promises); - } - totalDevices = inventory.data.childAssets.references.length; - } - return { totalDevices, availableDevices, unavailableDevices }; - }); - } - getFirmwareRisks(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let highRiskCount = 0; - let mediumRiskCount = 0; - let lowRiskCount = 0; - let noRiskCount = 0; - const firmwareData = yield this.inventory.list({ type: 'sag_racm_currentFirmware' }); - if (firmwareData.data.length > 0) { - this.latestFirmwareVersion = firmwareData.data[0].firmware.version; - } - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const risks = this.calculateRiskCount(response); - highRiskCount = risks.highRisk; - mediumRiskCount = risks.mediumRisk; - lowRiskCount = risks.lowRisk; - noRiskCount = risks.noRisk; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - return { highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount }; - }); - } - calculateRiskCount(device) { - let atRisk = false; - let noRisk = 0; - let lowRisk = 0; - let mediumRisk = 0; - let highRisk = 0; - if (device) { - const firmwareStatus = device.c8y_Firmware; - let versionIssues = 0; - if (firmwareStatus && firmwareStatus.version) { - versionIssues = firmwareStatus.version - this.latestFirmwareVersion; - } - if (versionIssues <= 0) { - atRisk = true; - } - if (atRisk) { - if (atRisk) { - if (versionIssues >= 0) { - noRisk += 1; - } - else if (versionIssues === -1) { - lowRisk += 1; - } - else if (versionIssues === -2) { - mediumRisk += 1; - } - else if (versionIssues <= -3) { - highRisk += 1; - } - } - } - } - return { noRisk, lowRisk, mediumRisk, highRisk }; - } - getAlarms(deviceId) { - return __awaiter(this, void 0, void 0, function* () { - let totalAlarms = 0; - let majorAlertsCount = 0; - let minorAlertsCount = 0; - let criticalAlertsCount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(response); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(childDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) { - const alerts = this.calculateAlarmsCount(assetChildDeviceData); - minorAlertsCount = alerts.minorAlerts; - majorAlertsCount = alerts.majorAlerts; - criticalAlertsCount = alerts.criticalAlerts; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount; - return { totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount }; - }); - } - calculateAlarmsCount(device) { - let minorAlerts = 0; - let majorAlerts = 0; - let criticalAlerts = 0; - const activeAlerts = device.c8y_ActiveAlarmsStatus; - if (activeAlerts !== undefined) { - if (activeAlerts.hasOwnProperty('minor')) { - if (activeAlerts.minor > 0) { - minorAlerts += device.c8y_ActiveAlarmsStatus.minor; - } - } - if (activeAlerts.hasOwnProperty('major')) { - if (activeAlerts.major > 0) { - majorAlerts += device.c8y_ActiveAlarmsStatus.major; - } - } - if (activeAlerts.hasOwnProperty('critical')) { - if (activeAlerts.critical > 0) { - criticalAlerts += device.c8y_ActiveAlarmsStatus.critical; - } - } - } - return { minorAlerts, majorAlerts, criticalAlerts }; - } - getNewKPICount(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let newKPICount = 0; - let response = null; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPICount = 1; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPICount += 1; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPICount = 0; - } - return newKPICount; - }); - } - getNewKPIValue(deviceId, newKPI) { - return __awaiter(this, void 0, void 0, function* () { - let response = null; - let newKPIValue; - const inventory = yield this.inventory.detail(deviceId); - response = inventory.data; - if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) { - newKPIValue = response[newKPI]; - } - else if (response.childAssets.references.length > 0) { - const promises = response.childAssets.references.map((childDevice) => __awaiter(this, void 0, void 0, function* () { - const childInventory = yield this.inventory.detail(childDevice.managedObject.id); - const childDeviceData = childInventory.data; - if (childDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - else if (childDeviceData.hasOwnProperty('c8y_IsAsset')) { - if (childDeviceData.childAssets.references.length > 0) { - const promises1 = childDeviceData.childAssets.references.map((assetChildDevice) => __awaiter(this, void 0, void 0, function* () { - const assetChildInventory = yield this.inventory.detail(assetChildDevice.managedObject.id); - const assetChildDeviceData = assetChildInventory.data; - if (assetChildDeviceData.hasOwnProperty(newKPI)) { - newKPIValue += response[newKPI]; - } - })); - yield Promise.all(promises1); - } - } - })); - yield Promise.all(promises); - } - else { - newKPIValue = ''; - } - return newKPIValue; - }); - } -} -GpKpiOverviewWidgetService.decorators = [ - { type: Injectable } -]; -GpKpiOverviewWidgetService.ctorParameters = () => [ - { type: InventoryService } -]; - -class GpKpiOverviewWidgetComponent { - constructor(kpiService) { - this.kpiService = kpiService; - this.device = { - id: '' - }; - this.kpi = { - title: '', - topMargin: '', - icon: '', - value: 0, - unit: '', - color: '', - bgcolor: '', - unitColor: '', - titleColor: '', - messageColor: '', - otherKPIName: '', - otherKPIMetric: '', - kpiName: '', - message: '', - titleSize: 20, - messageSize: 10, - kpiSize: 30, - unitSize: 20, - imageSize: 60, - containerHeight: 80, - default: { - color: '', - bgcolor: '' - } - }; - } - ngOnInit() { - // Get Device Id - this.device.id = get(this.config, 'device.id'); - if (this.device.id === undefined || this.device.id.length === 0) { - } - // Get KPI Title - this.kpi.title = get(this.config, 'customwidgetdata.metadata.title'); - if (this.kpi.title === undefined || this.kpi.title.length === 0) { - this.kpi.title = 'Default Title'; - } - // Get KPI Name - this.kpi.kpiName = get(this.config, 'customwidgetdata.kpi.kpiName'); - if (this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) { - this.kpi.kpiName = 'totalDevices'; - } - // Get KPI Icon - this.kpi.icon = get(this.config, 'customwidgetdata.metadata.icon'); - if (this.kpi.icon === undefined || this.kpi.icon.length === 0) { - this.kpi.icon = 'data:image/png;base64,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'; - } - // Get KPI Message - this.kpi.message = get(this.config, 'customwidgetdata.kpi.message'); - if (this.kpi.message === undefined || this.kpi.message.length === 0) { - this.kpi.message = ''; - } - // Get KPI Color - this.kpi.default.color = get(this.config, 'customwidgetdata.kpi.color'); - if (this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) { - this.kpi.default.color = '#b0b0b0'; - } - this.kpi.color = this.kpi.default.color; - // Get Bg KPI Color - this.kpi.default.bgcolor = get(this.config, 'customwidgetdata.kpi.bgcolor'); - if (this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) { - this.kpi.default.bgcolor = '#FFFFFF'; - } - this.kpi.bgcolor = this.kpi.default.bgcolor; - // Get Title Color - this.kpi.titleColor = get(this.config, 'customwidgetdata.kpi.titleColor'); - if (this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) { - this.kpi.titleColor = '#b0b0b0'; - } - // Get Unit Color - this.kpi.unitColor = get(this.config, 'customwidgetdata.kpi.unitColor'); - if (this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) { - this.kpi.unitColor = '#b0b0b0'; - } - // Get message Color - this.kpi.messageColor = get(this.config, 'customwidgetdata.kpi.messageColor'); - if (this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) { - this.kpi.messageColor = '#808080'; - } - // Get KPI Unit - this.kpi.unit = get(this.config, 'customwidgetdata.kpi.unit'); - this.kpi.titleSize = get(this.config, 'customwidgetdata.kpi.titleSize'); - this.kpi.kpiSize = get(this.config, 'customwidgetdata.kpi.kpiSize'); - this.kpi.unitSize = get(this.config, 'customwidgetdata.kpi.unitSize'); - this.kpi.messageSize = get(this.config, 'customwidgetdata.kpi.messageSize'); - this.kpi.imageSize = get(this.config, 'customwidgetdata.kpi.imageSize'); - this.kpi.value = null; - this.getDeviceData(); - } - ngAfterViewInit() { - this.configureTopMarginRequired(); - } - // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not. - configureTopMarginRequired() { - const allWidgets = document.querySelectorAll('.dashboard-grid-child'); - allWidgets.forEach((w) => { - const widgetElement = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget'); - if (widgetElement !== undefined && widgetElement !== null) { - const widgetTitleElement = w.querySelector('div > div > div > c8y-dashboard-child-title'); - const widgetTitleDisplayValue = window.getComputedStyle(widgetTitleElement).getPropertyValue('display'); - if (widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') { - this.kpi.topMargin = '25px'; - } - else { - this.kpi.topMargin = '0'; - } - } - }); - } - getDeviceData() { - return __awaiter(this, void 0, void 0, function* () { - if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') { - if (this.kpi.kpiName === 'totalDevices') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.totalDevices; - } - } - else if (this.kpi.kpiName === 'available') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.availableDevices; - } - } - else if (this.kpi.kpiName === 'unavailable') { - const result = yield this.kpiService.getDevicesAvailability(this.device.id); - if (result) { - this.kpi.value = result.unavailableDevices; - } - } - else if (this.kpi.kpiName === 'totalAlarms') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.totalAlarms; - } - } - else if (this.kpi.kpiName === 'major') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.majorAlertsCount; - } - } - else if (this.kpi.kpiName === 'minor') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.minorAlertsCount; - } - } - else if (this.kpi.kpiName === 'critical') { - const result = yield this.kpiService.getAlarms(this.device.id); - if (result) { - this.kpi.value = result.criticalAlertsCount; - } - } - else if (this.kpi.kpiName === 'highRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.highRiskCount; - } - } - else if (this.kpi.kpiName === 'mediumRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.mediumRiskCount; - } - } - else if (this.kpi.kpiName === 'lowRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.lowRiskCount; - } - } - else if (this.kpi.kpiName === 'noRisk') { - const result = yield this.kpiService.getFirmwareRisks(this.device.id); - if (result) { - this.kpi.value = result.noRiskCount; - } - } - else if (this.kpi.kpiName === 'other') { - if (this.kpi.otherKPIMetric === 'value') { - const result = yield this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - else if (this.kpi.otherKPIMetric === 'count') { - const result = yield this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName); - if (result) { - this.kpi.value = result; - } - } - } - else { - this.kpi.value = 0; - } - } - }); - } - // Getter KPI Title - getKPITitle() { - return this.kpi.title; - } - // Getter KPI Title Top Margin - getKPITitleTopMargin() { - return this.kpi.topMargin; - } - // Getter KPI Icon - getKPIIcon() { - return this.kpi.icon; - } - // Get KPI Container Height - getKPIContainerHeight() { - return '90px'; - } - // Getter KPI Value - getKPIValue() { - return this.kpi.value; - } - // Getter KPI Unit - getKPIUnit() { - return this.kpi.unit; - } - // Getter KPI Name - getKPIName() { - return this.kpi.kpiName; - } - // Getter KPI Color - getKPIColor() { - return this.kpi.color; - } - // Getter Title Color - getTitleColor() { - return this.kpi.titleColor; - } - // Getter Unit Color - getUnitColor() { - return this.kpi.unitColor; - } - // Getter Message Color - getMessageColor() { - return this.kpi.messageColor; - } - // Getter KPI background Color - getKPIBgColor() { - return this.kpi.bgcolor; - } - // Getter Other KPI Name - getOtherKPIName() { - return this.kpi.otherKPIName; - } - // Getter Other KPI metric - getOtherKPIMetric() { - return this.kpi.otherKPIMetric; - } - // Getter Other KPI Message - getKPIMessage() { - return this.kpi.message; - } - getKPISize() { - return this.kpi.kpiSize + 'px'; - } - getTitleSize() { - return this.kpi.titleSize + 'px'; - } - getMessageSize() { - return this.kpi.messageSize + 'px'; - } - getUnitSize() { - return this.kpi.unitSize + 'px'; - } - getImageSize() { - return this.kpi.imageSize + 'px'; - } - getContainerHeight() { - if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.imageSize + 10; - } - else if (this.kpi.titleSize > this.kpi.kpiSize) { - this.kpi.containerHeight = this.kpi.titleSize + 10; - } - else { - this.kpi.containerHeight = this.kpi.kpiSize + 10; - } - return this.kpi.containerHeight + 'px'; - } -} -GpKpiOverviewWidgetComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget', - template: "
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n

{{getKPITitle()}}

\r\n \r\n \r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n" - },] } -]; -GpKpiOverviewWidgetComponent.ctorParameters = () => [ - { type: GpKpiOverviewWidgetService } -]; -GpKpiOverviewWidgetComponent.propDecorators = { - config: [{ type: Input }] -}; - -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -// tslint:disable-next-line: max-line-length -const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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'; - -/* -* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors -* -* SPDX-License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ -class GpKpiOverviewWidgetConfigComponent { - constructor() { - this.config = {}; - this.kpiColorPickerClosed = true; - this.kpiBgColorPickerClosed = true; - this.titleColorPickerClosed = true; - this.kpiUnitColorPickerClosed = true; - this.messageColorPickerClosed = true; - this.widgetInfo = { - metadata: { - title: '', - icon: '', - }, - kpi: { - color: '#b0b0b0', - unit: '', - bgcolor: '#FFFFFF', - kpiName: '', - message: '', - otherKPIValue: '', - otherKPIName: '', - titleColor: '#808080', - unitColor: '#b0b0b0', - messageColor: '#808080', - titleSize: 20, - messageSize: 10, - unitSize: 20, - kpiSize: 30, - imageSize: 60, - } - }; - this.kpiNamesList = [ - { - id: 'totalDevices', - text: 'Total Devices' - }, - { - id: 'available', - text: 'Available Devices' - }, - { - id: 'unavailable', - text: 'Unavailable Devices' - }, - { - id: 'totalAlarms', - text: 'Total Alarms' - }, - { - id: 'major', - text: 'Major Alarms' - }, - { - id: 'minor', - text: 'Minor Alarms' - }, - { - id: 'critical', - text: 'Critical Alarms' - }, - { - id: 'highRisk', - text: 'High Risk' - }, - { - id: 'mediumRisk', - text: 'Medium Risk' - }, - { - id: 'lowRisk', - text: 'Low Risk' - }, - { - id: 'noRisk', - text: 'No Risk' - }, - { - id: 'other', - text: 'Other Property' - } - ]; - } - ngOnInit() { - return __awaiter(this, void 0, void 0, function* () { - // Editing an existing widget - if (has(this.config, 'customwidgetdata')) { - this.widgetInfo = get(this.config, 'customwidgetdata'); - } - else { // Adding a new widget - set(this.config, 'customwidgetdata', this.widgetInfo); - } - }); - } - updateIconInConfig($event) { - const kpiIcon = $event.target.files[0]; - const reader = new FileReader(); - reader.readAsDataURL(kpiIcon); - reader.onload = () => { - this.widgetInfo.metadata.icon = reader.result; - set(this.config, 'customwidgetdata', this.widgetInfo); - }; - } - updateConfig() { - set(this.config, 'customwidgetdata', this.widgetInfo); - } - setSelectedColorForKPI(value) { - this.widgetInfo.kpi.color = value; - this.updateConfig(); - } - closeKPIColorPicker() { - this.kpiColorPickerClosed = true; - } - openKPIColorPicker() { - this.kpiColorPickerClosed = false; - } - setSelectedColorForTitle(value) { - this.widgetInfo.kpi.titleColor = value; - this.updateConfig(); - } - closeTitleColorPicker() { - this.titleColorPickerClosed = true; - } - openTitleColorPicker() { - this.titleColorPickerClosed = false; - } - setSelectedColorForKPIUnit(value) { - this.widgetInfo.kpi.unitColor = value; - this.updateConfig(); - } - closeKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = true; - } - openKPIUnitColorPicker() { - this.kpiUnitColorPickerClosed = false; - } - setSelectedColorForMessage(value) { - this.widgetInfo.kpi.messageColor = value; - this.updateConfig(); - } - closeMessageColorPicker() { - this.messageColorPickerClosed = true; - } - openMessageColorPicker() { - this.messageColorPickerClosed = false; - } - closeKPIBgColorPicker() { - this.kpiBgColorPickerClosed = true; - } - openKPIBgColorPicker() { - this.kpiBgColorPickerClosed = false; - } - setSelectedColorForBackground(value) { - this.widgetInfo.kpi.bgcolor = value; - this.updateConfig(); - } -} -GpKpiOverviewWidgetConfigComponent.decorators = [ - { type: Component, args: [{ - selector: 'lib-gp-kpi-overview-widget-config', - template: "\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
", - styles: [".showColorPicker{display:block}.hideColorPicker{display:none}"] - },] } -]; -GpKpiOverviewWidgetConfigComponent.ctorParameters = () => []; -GpKpiOverviewWidgetConfigComponent.propDecorators = { - config: [{ type: Input }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorPickerComponent { - constructor(eRef) { - this.eRef = eRef; - this.colorSet = new EventEmitter(true); - this.colorPickerClosed = new EventEmitter(); - this.colorType = 'hexa'; - } - closeColorPicker() { - this.colorPickerClosed.emit(true); - } - applyColorClicked() { - if (this.color !== undefined) { - if (this.colorType === 'hexa') { - this.colorSet.emit(this.RGBAToHexA(this.color)); - } - else { - this.colorSet.emit(this.color); - } - } - } - RGBAToHexA(rgba) { - const sep = rgba.indexOf(',') > -1 ? ',' : ' '; - rgba = rgba.substr(5).split(')')[0].split(sep); - // Strip the slash if using space-separated syntax - if (rgba.indexOf('/') > -1) { - rgba.splice(3, 1); - } - let r = (+rgba[0]).toString(16); - let g = (+rgba[1]).toString(16); - let b = (+rgba[2]).toString(16); - let a = Math.round(+rgba[3] * 255).toString(16); - if (r.length === 1) { - r = '0' + r; - } - if (g.length === 1) { - g = '0' + g; - } - if (b.length === 1) { - b = '0' + b; - } - if (a.length === 1) { - a = '0' + a; - } - return '#' + r + g + b + a; - } -} -ColorPickerComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-picker', - template: "\n
\n \n \n
\n \n \n
\n
\n \n\n\n ", - styles: [".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"] - },] } -]; -ColorPickerComponent.ctorParameters = () => [ - { type: ElementRef } -]; -ColorPickerComponent.propDecorators = { - colorSet: [{ type: Output }], - colorPickerClosed: [{ type: Output }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorSliderComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - // tslint:disable-next-line: use-lifecycle-interface - ngAfterViewInit() { - this.draw(); - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedHeight = evt.offsetY; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - onMouseUp(evt) { - this.mousedown = false; - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.clearRect(0, 0, width, height); - const gradient = this.ctx.createLinearGradient(0, 0, 0, height); - gradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); - gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)'); - gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)'); - gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)'); - gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)'); - gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)'); - gradient.addColorStop(1, 'rgba(255, 0, 0, 1)'); - this.ctx.beginPath(); - this.ctx.rect(0, 0, width, height); - this.ctx.fillStyle = gradient; - this.ctx.fill(); - this.ctx.closePath(); - if (this.selectedHeight) { - this.ctx.beginPath(); - this.ctx.strokeStyle = 'white'; - this.ctx.lineWidth = 5; - this.ctx.rect(0, this.selectedHeight - 5, width, 10); - this.ctx.stroke(); - this.ctx.closePath(); - } - } -} -ColorSliderComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-slider', - template: " " - },] } -]; -ColorSliderComponent.propDecorators = { - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ColorPaletteComponent { - constructor() { - this.color = new EventEmitter(true); - this.mousedown = false; - } - ngAfterViewInit() { - this.draw(); - } - draw() { - if (!this.ctx) { - this.ctx = this.canvas.nativeElement.getContext('2d'); - } - const width = this.canvas.nativeElement.width; - const height = this.canvas.nativeElement.height; - this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)'; - this.ctx.fillRect(0, 0, width, height); - const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0); - whiteGrad.addColorStop(0, 'rgba(255,255,255,1)'); - whiteGrad.addColorStop(1, 'rgba(255,255,255,0)'); - this.ctx.fillStyle = whiteGrad; - this.ctx.fillRect(0, 0, width, height); - const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height); - blackGrad.addColorStop(0, 'rgba(0,0,0,0)'); - blackGrad.addColorStop(1, 'rgba(0,0,0,1)'); - this.ctx.fillStyle = blackGrad; - this.ctx.fillRect(0, 0, width, height); - if (this.selectedPosition) { - this.ctx.strokeStyle = 'white'; - this.ctx.fillStyle = 'white'; - this.ctx.beginPath(); - this.ctx.arc(this.selectedPosition.x, this.selectedPosition.y, 10, 0, 2 * Math.PI); - this.ctx.lineWidth = 5; - this.ctx.stroke(); - } - } - ngOnChanges(changes) { - // tslint:disable-next-line: no-string-literal - if (changes['hue']) { - this.draw(); - const pos = this.selectedPosition; - if (pos) { - this.color.emit(this.getColorAtPosition(pos.x, pos.y)); - } - } - } - onMouseUp(evt) { - this.mousedown = false; - } - onMouseDown(evt) { - this.mousedown = true; - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY)); - } - onMouseMove(evt) { - if (this.mousedown) { - this.selectedPosition = { x: evt.offsetX, y: evt.offsetY }; - this.draw(); - this.emitColor(evt.offsetX, evt.offsetY); - } - } - emitColor(x, y) { - const rgbaColor = this.getColorAtPosition(x, y); - this.color.emit(rgbaColor); - } - getColorAtPosition(x, y) { - const imageData = this.ctx.getImageData(x, y, 1, 1).data; - return ('rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'); - } -} -ColorPaletteComponent.decorators = [ - { type: Component, args: [{ - // tslint:disable-next-line: component-selector - selector: 'app-color-palette', - template: "\n", - styles: [".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"] - },] } -]; -ColorPaletteComponent.propDecorators = { - hue: [{ type: Input }], - color: [{ type: Output }], - canvas: [{ type: ViewChild, args: ['canvas', { static: true },] }], - onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }] -}; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const ɵ0 = { - id: 'kpi-overview.widget', - label: 'KPI Overview', - previewImage: previewImage, - description: 'KPI Overview', - component: GpKpiOverviewWidgetComponent, - configComponent: GpKpiOverviewWidgetConfigComponent, - data: { - ng1: { - options: { - noDeviceTarget: false, - noNewWidgets: false, - deviceTargetNotRequired: false, - groupsSelectable: true - } - } - } -}; -class GpKpiOverviewWidgetModule { -} -GpKpiOverviewWidgetModule.decorators = [ - { type: NgModule, args: [{ - declarations: [ - GpKpiOverviewWidgetComponent, - GpKpiOverviewWidgetConfigComponent, - ColorPickerComponent, - ColorSliderComponent, - ColorPaletteComponent - ], - imports: [ - NgSelectModule, - FormsModule, - CommonModule, - CoreModule - ], - exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent], - providers: [ - GpKpiOverviewWidgetService, - { - provide: HOOK_COMPONENTS, - multi: true, - useValue: ɵ0 - } - ], - },] } -]; - -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Generated bundle index. Do not edit. - */ - -export { GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetModule, GpKpiOverviewWidgetService, ɵ0, GpKpiOverviewWidgetConfigComponent as ɵa, ColorPickerComponent as ɵb, ColorSliderComponent as ɵc, ColorPaletteComponent as ɵd, previewImage as ɵe }; -//# sourceMappingURL=custom-widget.js.map diff --git a/runtime/dist/widget-library/fesm2015/custom-widget.js.map b/runtime/dist/widget-library/fesm2015/custom-widget.js.map deleted file mode 100644 index b461953..0000000 --- a/runtime/dist/widget-library/fesm2015/custom-widget.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"custom-widget.js","sources":["../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.service.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/preview-image.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-picker-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-slider/color-slider-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/color-picker/color-palette/color-palette-component.ts","../../../../projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.module.ts","../../../../projects/gp-kpi-overview-widget/src/public-api.ts","../../../../projects/gp-kpi-overview-widget/src/custom-widget.ts"],"sourcesContent":["/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ThrowStmt } from '@angular/compiler';\nimport { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\n\n\n@Injectable()\nexport class GpKpiOverviewWidgetService {\n latestFirmwareVersion: any;\n\n\n constructor(public inventory: InventoryService) {\n }\n\n async getDevicesAvailability(deviceId){\n let totalDevices = 0;\n let availableDevices = 0;\n let unavailableDevices = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n totalDevices = 1;\n\n if (response.childDevices.references.length > 0) {\n\n let available = false;\n const promises = response.childDevices.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n\n if (childDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n });\n if(available){\n if (response.hasOwnProperty('c8y_Availability')) {\n if (response.c8y_Availability.status === 'AVAILABLE') {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }else{\n availableDevices = 1;\n }\n }\n else{\n unavailableDevices = 1;\n }\n await Promise.all(promises);\n } else {\n if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }\n }\n else {\n if (response.childAssets.references.length > 0) {\n const promises = response.childAssets.references.map(async (childDevice) => {\n const ChildInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = ChildInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_Availability')) {\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n availableDevices += 1;\n }\n else{\n unavailableDevices += 1;\n }\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n let available = false;\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n else{\n available = false;\n }\n });\n await Promise.all(promises1);\n }\n if (available) {\n availableDevices += 1;\n }else{\n unavailableDevices += 1;\n }\n }\n });\n await Promise.all(promises);\n }\n totalDevices = inventory.data.childAssets.references.length;\n }\n return {totalDevices, availableDevices, unavailableDevices};\n }\n\n async getFirmwareRisks(deviceId){\n let highRiskCount = 0;\n let mediumRiskCount = 0;\n let lowRiskCount = 0;\n let noRiskCount = 0;\n const firmwareData = await this.inventory.list({ type: 'sag_racm_currentFirmware' });\n if (firmwareData.data.length > 0) {\n this.latestFirmwareVersion = firmwareData.data[0].firmware.version;\n }\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk;\n }\n else if(response.childAssets.references.length > 0){\n\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n return {highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount};\n }\n\n calculateRiskCount(device){\n let atRisk = false;\n let noRisk = 0;\n let lowRisk = 0;\n let mediumRisk = 0;\n let highRisk = 0;\n\n if (device) {\n const firmwareStatus = device.c8y_Firmware;\n let versionIssues = 0;\n if (firmwareStatus && firmwareStatus.version) {\n versionIssues = firmwareStatus.version - this.latestFirmwareVersion;\n }\n if (versionIssues <= 0) {\n atRisk = true; }\n if ( atRisk) {\n if (atRisk) {\n if (versionIssues >= 0) {\n noRisk += 1;\n } else if (versionIssues === -1) {\n lowRisk += 1;\n } else if (versionIssues === -2) {\n mediumRisk += 1;\n } else if (versionIssues <= -3) {\n highRisk += 1;\n }\n }\n }\n }\n return {noRisk, lowRisk, mediumRisk, highRisk}\n }\n async getAlarms(deviceId){\n let totalAlarms = 0;\n let majorAlertsCount = 0;\n let minorAlertsCount = 0;\n let criticalAlertsCount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(response);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(childDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(assetChildDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount;\n return {totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount};\n }\n\n\n calculateAlarmsCount(device){\n let minorAlerts = 0;\n let majorAlerts = 0;\n let criticalAlerts = 0;\n const activeAlerts = device.c8y_ActiveAlarmsStatus;\n if (activeAlerts !== undefined) {\n if (activeAlerts.hasOwnProperty('minor')) {\n if (activeAlerts.minor > 0) { minorAlerts += device.c8y_ActiveAlarmsStatus.minor; }\n }\n if (activeAlerts.hasOwnProperty('major')) {\n if (activeAlerts.major > 0) { majorAlerts += device.c8y_ActiveAlarmsStatus.major }\n }\n if (activeAlerts.hasOwnProperty('critical')) {\n if (activeAlerts.critical > 0) { criticalAlerts += device.c8y_ActiveAlarmsStatus.critical }\n }\n }\n return {minorAlerts, majorAlerts, criticalAlerts}\n }\n\n async getNewKPICount(deviceId, newKPI){\n let newKPICount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPICount = 1;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPICount = 0;\n }\n return newKPICount;\n }\n\n async getNewKPIValue(deviceId, newKPI){\n let response: any = null;\n let newKPIValue;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPIValue = response[newKPI];\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPIValue = '';\n }\n return newKPIValue;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport * as _ from 'lodash';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\n\n\ninterface Device {\n id: string;\n}\n\ninterface KPI {\n default: {\n color: string;\n bgcolor: string\n }\n title: string;\n icon: string;\n topMargin: string;\n color: string;\n bgcolor: string;\n unitColor: string;\n titleColor: string;\n messageColor: string;\n value: any;\n unit: string;\n message: string;\n kpiName: string;\n otherKPIName: string;\n otherKPIMetric: string;\n titleSize: number;\n messageSize: number;\n kpiSize: number;\n unitSize: number;\n imageSize: number;\n containerHeight: number;\n}\n\n@Component({\n selector: 'lib-gp-kpi-overview-widget',\n templateUrl: './gp-kpi-overview-widget.html',\n styles: []\n})\nexport class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit{\n\n @Input() config;\n\n private device: Device = {\n id: ''\n }\n\n private kpi: KPI = {\n title: '',\n topMargin: '',\n icon: '',\n value: 0,\n unit: '',\n color: '',\n bgcolor: '',\n unitColor: '',\n titleColor: '',\n messageColor: '',\n otherKPIName: '',\n otherKPIMetric: '',\n kpiName: '',\n message: '',\n titleSize: 20,\n messageSize: 10,\n kpiSize: 30,\n unitSize: 20,\n imageSize: 60,\n containerHeight: 80,\n default: {\n color: '',\n bgcolor: ''\n }\n }\n\n constructor(private kpiService: GpKpiOverviewWidgetService) { }\n\n ngOnInit() {\n\n // Get Device Id\n this.device.id = _.get(this.config, 'device.id');\n if(this.device.id === undefined || this.device.id.length === 0) {\n }\n // Get KPI Title\n this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title');\n if(this.kpi.title === undefined || this.kpi.title.length === 0) {\n this.kpi.title = 'Default Title';\n }\n // Get KPI Name\n this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName');\n if(this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) {\n this.kpi.kpiName = 'totalDevices';\n }\n // Get KPI Icon\n this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon');\n if(this.kpi.icon === undefined || this.kpi.icon.length === 0) {\n this.kpi.icon = 'data:image/png;base64,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';\n }\n // Get KPI Message\n this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message');\n if(this.kpi.message === undefined || this.kpi.message.length === 0) {\n this.kpi.message = '';\n }\n // Get KPI Color\n this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color');\n if(this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) {\n this.kpi.default.color = '#b0b0b0';\n }\n this.kpi.color = this.kpi.default.color;\n // Get Bg KPI Color\n this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor');\n if(this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) {\n this.kpi.default.bgcolor = '#FFFFFF';\n }\n this.kpi.bgcolor = this.kpi.default.bgcolor;\n\n // Get Title Color\n this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor');\n if(this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) {\n this.kpi.titleColor = '#b0b0b0';\n }\n\n // Get Unit Color\n this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor');\n if(this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) {\n this.kpi.unitColor = '#b0b0b0';\n }\n\n // Get message Color\n this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor');\n if(this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) {\n this.kpi.messageColor = '#808080';\n }\n // Get KPI Unit\n this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit');\n this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize');\n this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize');\n this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize');\n this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize');\n this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize');\n this.kpi.value = null;\n this.getDeviceData();\n }\n\n ngAfterViewInit() {\n this.configureTopMarginRequired();\n }\n\n // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not.\n private configureTopMarginRequired(): void {\n const allWidgets: NodeListOf = document.querySelectorAll('.dashboard-grid-child');\n allWidgets.forEach((w:Element) => {\n const widgetElement: Element = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget');\n if(widgetElement !== undefined && widgetElement !== null) {\n const widgetTitleElement: Element = w.querySelector('div > div > div > c8y-dashboard-child-title');\n const widgetTitleDisplayValue: string = window.getComputedStyle(widgetTitleElement).getPropertyValue('display');\n if(widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') {\n this.kpi.topMargin = '25px';\n } else {\n this.kpi.topMargin = '0';\n }\n }\n });\n }\n async getDeviceData() {\n if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') {\n\n if (this.kpi.kpiName === 'totalDevices'){\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.totalDevices;\n }\n }\n else if (this.kpi.kpiName === 'available') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.availableDevices;\n }\n }\n else if (this.kpi.kpiName === 'unavailable') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.unavailableDevices;\n }\n }\n else if (this.kpi.kpiName === 'totalAlarms') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.totalAlarms;\n }\n }\n else if (this.kpi.kpiName === 'major') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.majorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'minor') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.minorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'critical') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.criticalAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'highRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.highRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'mediumRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.mediumRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'lowRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.lowRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'noRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.noRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'other') {\n\n if (this.kpi.otherKPIMetric === 'value') {\n const result = await this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n else if(this.kpi.otherKPIMetric === 'count') {\n const result = await this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n }\n else{\n this.kpi.value = 0;\n }\n }\n }\n // Getter KPI Title\n public getKPITitle(): string {\n return this.kpi.title;\n }\n // Getter KPI Title Top Margin\n public getKPITitleTopMargin() {\n return this.kpi.topMargin;\n }\n // Getter KPI Icon\n public getKPIIcon(): string {\n return this.kpi.icon;\n }\n // Get KPI Container Height\n public getKPIContainerHeight(): string {\n return '90px';\n }\n // Getter KPI Value\n public getKPIValue() {\n return this.kpi.value;\n }\n // Getter KPI Unit\n public getKPIUnit() {\n return this.kpi.unit;\n }\n // Getter KPI Name\n public getKPIName() {\n return this.kpi.kpiName;\n }\n // Getter KPI Color\n public getKPIColor() {\n return this.kpi.color;\n }\n // Getter Title Color\n public getTitleColor() {\n return this.kpi.titleColor;\n }\n // Getter Unit Color\n public getUnitColor() {\n return this.kpi.unitColor;\n }\n // Getter Message Color\n public getMessageColor() {\n return this.kpi.messageColor;\n }\n // Getter KPI background Color\n public getKPIBgColor() {\n return this.kpi.bgcolor;\n }\n // Getter Other KPI Name\n public getOtherKPIName() {\n return this.kpi.otherKPIName;\n }\n // Getter Other KPI metric\n public getOtherKPIMetric() {\n return this.kpi.otherKPIMetric;\n }\n // Getter Other KPI Message\n public getKPIMessage() {\n return this.kpi.message;\n }\n public getKPISize() {\n return this.kpi.kpiSize + 'px';\n }\n public getTitleSize() {\n return this.kpi.titleSize + 'px';\n }\n public getMessageSize() {\n return this.kpi.messageSize + 'px';\n }\n public getUnitSize() {\n return this.kpi.unitSize + 'px';\n }\n public getImageSize() {\n return this.kpi.imageSize + 'px';\n }\n\n public getContainerHeight(){\n if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) {\n this.kpi.containerHeight = this.kpi.imageSize + 10;\n } else if(this.kpi.titleSize > this.kpi.kpiSize){\n this.kpi.containerHeight = this.kpi.titleSize + 10;\n }else{\n this.kpi.containerHeight = this.kpi.kpiSize + 10;\n }\n return this.kpi.containerHeight + 'px';\n }\n}\n","/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n*/\r\n\r\n\r\n// tslint:disable-next-line: max-line-length\r\nexport const previewImage = 'data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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';\r\n","\r\n\r\n/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n */\r\n\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'lib-gp-kpi-overview-widget-config',\r\n templateUrl: './gp-kpi-overview-widget-config.html',\r\n styleUrls: ['./gp-kpi-overview-widget-config.css']\r\n})\r\nexport class GpKpiOverviewWidgetConfigComponent implements OnInit {\r\n @Input() config: any = {};\r\n kpiColorPickerClosed = true;\r\n kpiBgColorPickerClosed = true;\r\n titleColorPickerClosed = true;\r\n kpiUnitColorPickerClosed = true;\r\n messageColorPickerClosed = true;\r\n\r\n\r\n\r\n widgetInfo = {\r\n metadata: {\r\n title: '',\r\n icon: '',\r\n },\r\n kpi: {\r\n color: '#b0b0b0',\r\n unit: '',\r\n bgcolor: '#FFFFFF',\r\n kpiName: '',\r\n message: '',\r\n otherKPIValue: '',\r\n otherKPIName: '',\r\n titleColor: '#808080',\r\n unitColor: '#b0b0b0',\r\n messageColor: '#808080',\r\n titleSize: 20,\r\n messageSize: 10,\r\n unitSize: 20,\r\n kpiSize: 30,\r\n imageSize: 60,\r\n\r\n }\r\n}\r\nkpiNamesList = [\r\n {\r\n id: 'totalDevices',\r\n text: 'Total Devices'\r\n },\r\n {\r\n id: 'available',\r\n text: 'Available Devices'\r\n },\r\n {\r\n id: 'unavailable',\r\n text: 'Unavailable Devices'\r\n },\r\n {\r\n id: 'totalAlarms',\r\n text: 'Total Alarms'\r\n },\r\n {\r\n id: 'major',\r\n text: 'Major Alarms'\r\n },\r\n {\r\n id: 'minor',\r\n text: 'Minor Alarms'\r\n },\r\n {\r\n id: 'critical',\r\n text: 'Critical Alarms'\r\n },\r\n {\r\n id: 'highRisk',\r\n text: 'High Risk'\r\n }\r\n ,\r\n {\r\n id: 'mediumRisk',\r\n text: 'Medium Risk'\r\n },\r\n {\r\n id: 'lowRisk',\r\n text: 'Low Risk'\r\n },\r\n {\r\n id: 'noRisk',\r\n text: 'No Risk'\r\n },\r\n {\r\n id: 'other',\r\n text: 'Other Property'\r\n }\r\n\r\n ];\r\n constructor() {}\r\n\r\n async ngOnInit() {\r\n // Editing an existing widget\r\n if(_.has(this.config, 'customwidgetdata')) {\r\n this.widgetInfo = _.get(this.config, 'customwidgetdata');\r\n } else { // Adding a new widget\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n }\r\n\r\n public updateIconInConfig($event: Event) {\r\n const kpiIcon = ($event.target as HTMLInputElement).files[0];\r\n const reader = new FileReader();\r\n reader.readAsDataURL(kpiIcon);\r\n reader.onload = () => {\r\n this.widgetInfo.metadata.icon = reader.result as string;\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n };\r\n }\r\n\r\n public updateConfig() {\r\n\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n\r\n\r\n setSelectedColorForKPI(value: string) {\r\n this.widgetInfo.kpi.color = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIColorPicker() {\r\n this.kpiColorPickerClosed = true;\r\n }\r\n\r\n openKPIColorPicker() {\r\n this.kpiColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForTitle(value: string) {\r\n this.widgetInfo.kpi.titleColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeTitleColorPicker() {\r\n this.titleColorPickerClosed = true;\r\n }\r\n\r\n openTitleColorPicker() {\r\n this.titleColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForKPIUnit(value: string) {\r\n this.widgetInfo.kpi.unitColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = true;\r\n }\r\n\r\n openKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForMessage(value: string) {\r\n this.widgetInfo.kpi.messageColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeMessageColorPicker() {\r\n this.messageColorPickerClosed = true;\r\n }\r\n\r\n openMessageColorPicker() {\r\n this.messageColorPickerClosed = false;\r\n }\r\n\r\n\r\n closeKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = true;\r\n }\r\n\r\n openKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForBackground(value: string) {\r\n this.widgetInfo.kpi.bgcolor = value;\r\n this.updateConfig();\r\n }\r\n\r\n}","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-picker',\n templateUrl: './color-picker-component.html',\n styleUrls: ['./color-picker-component.css'],\n})\nexport class ColorPickerComponent {\n @Output() colorSet: EventEmitter = new EventEmitter(true);\n @Output() colorPickerClosed: EventEmitter = new EventEmitter();\n\n public hue: string;\n public color: string;\n public colorType: any = 'hexa';\n constructor(private eRef: ElementRef) {}\n\n closeColorPicker(): void {\n this.colorPickerClosed.emit(true);\n }\n applyColorClicked(): void {\n if (this.color !== undefined) {\n if (this.colorType === 'hexa') {\n this.colorSet.emit(this.RGBAToHexA(this.color));\n } else {\n this.colorSet.emit(this.color);\n }\n }\n }\n\n RGBAToHexA(rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = '0' + r; }\n if (g.length === 1) { g = '0' + g; }\n if (b.length === 1) { b = '0' + b; }\n if (a.length === 1) { a = '0' + a; }\n\n return '#' + r + g + b + a;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-slider',\n templateUrl: './color-slider-component.html',\n})\nexport class ColorSliderComponent {\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n private mousedown = false;\n private selectedHeight: number;\n\n // tslint:disable-next-line: use-lifecycle-interface\n ngAfterViewInit() {\n this.draw();\n }\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n this.ctx.clearRect(0, 0, width, height);\n\n const gradient = this.ctx.createLinearGradient(0, 0, 0, height);\n gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');\n gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\n gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\n gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\n gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\n gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\n gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');\n\n this.ctx.beginPath();\n this.ctx.rect(0, 0, width, height);\n this.ctx.fillStyle = gradient;\n this.ctx.fill();\n this.ctx.closePath();\n\n if (this.selectedHeight) {\n this.ctx.beginPath();\n this.ctx.strokeStyle = 'white';\n this.ctx.lineWidth = 5;\n this.ctx.rect(0, this.selectedHeight - 5, width, 10);\n this.ctx.stroke();\n this.ctx.closePath();\n }\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ViewChild,\n ElementRef,\n AfterViewInit,\n Input,\n Output,\n SimpleChanges,\n OnChanges,\n EventEmitter,\n HostListener,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-palette',\n templateUrl: './color-palette-component.html',\n styleUrls: ['./color-palette-component.css'],\n})\nexport class ColorPaletteComponent implements AfterViewInit, OnChanges {\n @Input()\n hue: string;\n\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n\n private mousedown = false;\n\n public selectedPosition: { x: number; y: number };\n\n ngAfterViewInit() {\n this.draw();\n }\n\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n\n this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)';\n this.ctx.fillRect(0, 0, width, height);\n\n const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n this.ctx.fillStyle = whiteGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n this.ctx.fillStyle = blackGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n if (this.selectedPosition) {\n this.ctx.strokeStyle = 'white';\n this.ctx.fillStyle = 'white';\n this.ctx.beginPath();\n this.ctx.arc(\n this.selectedPosition.x,\n this.selectedPosition.y,\n 10,\n 0,\n 2 * Math.PI\n );\n this.ctx.lineWidth = 5;\n this.ctx.stroke();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // tslint:disable-next-line: no-string-literal\n if (changes['hue']) {\n this.draw();\n const pos = this.selectedPosition;\n if (pos) {\n this.color.emit(this.getColorAtPosition(pos.x, pos.y));\n }\n }\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY));\n }\n\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components';\nimport { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component';\nimport * as preview from './preview-image';\nimport { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { ColorPickerComponent } from './color-picker/color-picker-component';\nimport { ColorSliderComponent } from './color-picker/color-slider/color-slider-component';\nimport { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component';\n@NgModule({\n declarations: [\n GpKpiOverviewWidgetComponent,\n GpKpiOverviewWidgetConfigComponent,\n ColorPickerComponent,\n ColorSliderComponent,\n ColorPaletteComponent\n ],\n imports: [\n NgSelectModule,\n FormsModule,\n CommonModule,\n CoreModule\n ],\n exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n\n providers: [\n GpKpiOverviewWidgetService,\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: {\n id: 'kpi-overview.widget',\n label: 'KPI Overview',\n previewImage: preview.previewImage,\n description: 'KPI Overview',\n component: GpKpiOverviewWidgetComponent,\n configComponent: GpKpiOverviewWidgetConfigComponent,\n data: {\n ng1: {\n options: {\n noDeviceTarget: false,\n noNewWidgets: false,\n deviceTargetNotRequired: false,\n groupsSelectable: true\n }\n }\n }\n }\n }],\n})\nexport class GpKpiOverviewWidgetModule { }\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Public API Surface of gp-kpi-overview-widget\n */\n\nexport * from './lib/gp-kpi-overview-widget.service';\nexport * from './lib/gp-kpi-overview-widget.component';\nexport * from './lib/gp-kpi-overview-widget.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {ColorPaletteComponent as ɵd} from './lib/color-picker/color-palette/color-palette-component';\nexport {ColorPickerComponent as ɵb} from './lib/color-picker/color-picker-component';\nexport {ColorSliderComponent as ɵc} from './lib/color-picker/color-slider/color-slider-component';\nexport {GpKpiOverviewWidgetConfigComponent as ɵa} from './lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nexport {previewImage as ɵe} from './lib/preview-image';"],"names":["_.get","_.has","_.set","preview.previewImage"],"mappings":"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"} \ No newline at end of file diff --git a/runtime/dist/widget-library/lib/color-picker/color-palette/color-palette-component.d.ts b/runtime/dist/widget-library/lib/color-picker/color-palette/color-palette-component.d.ts deleted file mode 100644 index 20414e2..0000000 --- a/runtime/dist/widget-library/lib/color-picker/color-palette/color-palette-component.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { ElementRef, AfterViewInit, SimpleChanges, OnChanges, EventEmitter } from '@angular/core'; -export declare class ColorPaletteComponent implements AfterViewInit, OnChanges { - hue: string; - color: EventEmitter; - canvas: ElementRef; - private ctx; - private mousedown; - selectedPosition: { - x: number; - y: number; - }; - ngAfterViewInit(): void; - draw(): void; - ngOnChanges(changes: SimpleChanges): void; - onMouseUp(evt: MouseEvent): void; - onMouseDown(evt: MouseEvent): void; - onMouseMove(evt: MouseEvent): void; - emitColor(x: number, y: number): void; - getColorAtPosition(x: number, y: number): string; -} diff --git a/runtime/dist/widget-library/lib/color-picker/color-picker-component.d.ts b/runtime/dist/widget-library/lib/color-picker/color-picker-component.d.ts deleted file mode 100644 index 16fe153..0000000 --- a/runtime/dist/widget-library/lib/color-picker/color-picker-component.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { EventEmitter, ElementRef } from '@angular/core'; -export declare class ColorPickerComponent { - private eRef; - colorSet: EventEmitter; - colorPickerClosed: EventEmitter; - hue: string; - color: string; - colorType: any; - constructor(eRef: ElementRef); - closeColorPicker(): void; - applyColorClicked(): void; - RGBAToHexA(rgba: any): string; -} diff --git a/runtime/dist/widget-library/lib/color-picker/color-slider/color-slider-component.d.ts b/runtime/dist/widget-library/lib/color-picker/color-slider/color-slider-component.d.ts deleted file mode 100644 index b0ddb65..0000000 --- a/runtime/dist/widget-library/lib/color-picker/color-slider/color-slider-component.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { ElementRef, EventEmitter } from '@angular/core'; -export declare class ColorSliderComponent { - color: EventEmitter; - canvas: ElementRef; - private ctx; - private mousedown; - private selectedHeight; - ngAfterViewInit(): void; - onMouseDown(evt: MouseEvent): void; - onMouseMove(evt: MouseEvent): void; - onMouseUp(evt: MouseEvent): void; - emitColor(x: number, y: number): void; - getColorAtPosition(x: number, y: number): string; - draw(): void; -} diff --git a/runtime/dist/widget-library/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.d.ts b/runtime/dist/widget-library/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.d.ts deleted file mode 100644 index c3fd58b..0000000 --- a/runtime/dist/widget-library/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { OnInit } from '@angular/core'; -export declare class GpKpiOverviewWidgetConfigComponent implements OnInit { - config: any; - kpiColorPickerClosed: boolean; - kpiBgColorPickerClosed: boolean; - titleColorPickerClosed: boolean; - kpiUnitColorPickerClosed: boolean; - messageColorPickerClosed: boolean; - widgetInfo: { - metadata: { - title: string; - icon: string; - }; - kpi: { - color: string; - unit: string; - bgcolor: string; - kpiName: string; - message: string; - otherKPIValue: string; - otherKPIName: string; - titleColor: string; - unitColor: string; - messageColor: string; - titleSize: number; - messageSize: number; - unitSize: number; - kpiSize: number; - imageSize: number; - }; - }; - kpiNamesList: { - id: string; - text: string; - }[]; - constructor(); - ngOnInit(): Promise; - updateIconInConfig($event: Event): void; - updateConfig(): void; - setSelectedColorForKPI(value: string): void; - closeKPIColorPicker(): void; - openKPIColorPicker(): void; - setSelectedColorForTitle(value: string): void; - closeTitleColorPicker(): void; - openTitleColorPicker(): void; - setSelectedColorForKPIUnit(value: string): void; - closeKPIUnitColorPicker(): void; - openKPIUnitColorPicker(): void; - setSelectedColorForMessage(value: string): void; - closeMessageColorPicker(): void; - openMessageColorPicker(): void; - closeKPIBgColorPicker(): void; - openKPIBgColorPicker(): void; - setSelectedColorForBackground(value: string): void; -} diff --git a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.component.d.ts b/runtime/dist/widget-library/lib/gp-kpi-overview-widget.component.d.ts deleted file mode 100644 index d36b3f7..0000000 --- a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.component.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { AfterViewInit, OnInit } from '@angular/core'; -import { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service'; -export declare class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit { - private kpiService; - config: any; - private device; - private kpi; - constructor(kpiService: GpKpiOverviewWidgetService); - ngOnInit(): void; - ngAfterViewInit(): void; - private configureTopMarginRequired; - getDeviceData(): Promise; - getKPITitle(): string; - getKPITitleTopMargin(): string; - getKPIIcon(): string; - getKPIContainerHeight(): string; - getKPIValue(): any; - getKPIUnit(): string; - getKPIName(): string; - getKPIColor(): string; - getTitleColor(): string; - getUnitColor(): string; - getMessageColor(): string; - getKPIBgColor(): string; - getOtherKPIName(): string; - getOtherKPIMetric(): string; - getKPIMessage(): string; - getKPISize(): string; - getTitleSize(): string; - getMessageSize(): string; - getUnitSize(): string; - getImageSize(): string; - getContainerHeight(): string; -} diff --git a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.module.d.ts b/runtime/dist/widget-library/lib/gp-kpi-overview-widget.module.d.ts deleted file mode 100644 index aa7584d..0000000 --- a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class GpKpiOverviewWidgetModule { -} diff --git a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.service.d.ts b/runtime/dist/widget-library/lib/gp-kpi-overview-widget.service.d.ts deleted file mode 100644 index 09dd425..0000000 --- a/runtime/dist/widget-library/lib/gp-kpi-overview-widget.service.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { InventoryService } from '@c8y/client'; -export declare class GpKpiOverviewWidgetService { - inventory: InventoryService; - latestFirmwareVersion: any; - constructor(inventory: InventoryService); - getDevicesAvailability(deviceId: any): Promise<{ - totalDevices: number; - availableDevices: number; - unavailableDevices: number; - }>; - getFirmwareRisks(deviceId: any): Promise<{ - highRiskCount: number; - mediumRiskCount: number; - lowRiskCount: number; - noRiskCount: number; - }>; - calculateRiskCount(device: any): { - noRisk: number; - lowRisk: number; - mediumRisk: number; - highRisk: number; - }; - getAlarms(deviceId: any): Promise<{ - totalAlarms: number; - majorAlertsCount: number; - minorAlertsCount: number; - criticalAlertsCount: number; - }>; - calculateAlarmsCount(device: any): { - minorAlerts: number; - majorAlerts: number; - criticalAlerts: number; - }; - getNewKPICount(deviceId: any, newKPI: any): Promise; - getNewKPIValue(deviceId: any, newKPI: any): Promise; -} diff --git a/runtime/dist/widget-library/lib/preview-image.d.ts b/runtime/dist/widget-library/lib/preview-image.d.ts deleted file mode 100644 index 1e1038e..0000000 --- a/runtime/dist/widget-library/lib/preview-image.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const previewImage = "data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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"; diff --git a/runtime/dist/widget-library/package.json b/runtime/dist/widget-library/package.json deleted file mode 100644 index 9562a13..0000000 --- a/runtime/dist/widget-library/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "kpi-overview-runtime-widget", - "interleave": { - "dist\\bundle-src\\custom-widget.js": "kpi-overview-runtime-widget-CustomWidget", - "dist/bundle-src/custom-widget.js": "kpi-overview-runtime-widget-CustomWidget" - }, - "version": "2.0.0", - "description": "Runtime package.json for library widget (written by Software AG Global Presales)", - "author": "Darpankumar Lalani - Software AG, Global Presales", - "license": "Apache 2.0", - "main": "bundles/custom-widget.umd.js", - "module": "fesm2015/custom-widget.js", - "es2015": "fesm2015/custom-widget.js", - "esm2015": "esm2015/custom-widget.js", - "fesm2015": "fesm2015/custom-widget.js", - "typings": "custom-widget.d.ts", - "metadata": "custom-widget.metadata.json", - "sideEffects": false, - "dependencies": { - "tslib": "^2.0.0" - } -} \ No newline at end of file diff --git a/runtime/dist/widget-library/public-api.d.ts b/runtime/dist/widget-library/public-api.d.ts deleted file mode 100644 index fcc423c..0000000 --- a/runtime/dist/widget-library/public-api.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export * from './lib/gp-kpi-overview-widget.service'; -export * from './lib/gp-kpi-overview-widget.component'; -export * from './lib/gp-kpi-overview-widget.module'; diff --git a/runtime/dist/widget-library/styles/index.css b/runtime/dist/widget-library/styles/index.css deleted file mode 100644 index 0df20cb..0000000 --- a/runtime/dist/widget-library/styles/index.css +++ /dev/null @@ -1 +0,0 @@ -@import "~@ng-select/ng-select/themes/default.theme.css"; diff --git a/runtime/dist/widget/aab5230a050927447e5c.js b/runtime/dist/widget/aab5230a050927447e5c.js deleted file mode 100644 index df82ce1..0000000 --- a/runtime/dist/widget/aab5230a050927447e5c.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){function t(t){for(var r,a,c=t[0],u=t[1],l=t[2],f=0,s=[];f=1011.0.0", - "version": "2.0.0", - "license": "Apache 2.0", - "author": "Meer Arfath - Software AG, Global Presales", - "description": "The KPI Overview Widget help you to display the Device data as KPIs with customised icon and text." - - } -} diff --git a/runtime/dist/widget/importManifest.js b/runtime/dist/widget/importManifest.js deleted file mode 100644 index 5b8fd0c..0000000 --- a/runtime/dist/widget/importManifest.js +++ /dev/null @@ -1 +0,0 @@ -if(!window.entryManifest) {window.entryManifest = {}}; window.entryManifest["kpi-overview-runtime-widget"] = {"kpi-overview-runtime-widget.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget.c3ab952931da8599a6a4.js"},"kpi-overview-runtime-widget-CustomWidget.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js"},"kpi-overview-runtime-widget-stylejs.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js"},"kpi-overview-runtime-widget-vendors~30536edd.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js"},"kpi-overview-runtime-widget-vendors~376ea35c.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js"},"kpi-overview-runtime-widget-vendors~5a50f6a0.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-vendors~5a50f6a0.8586e64f62002fa0693c.js"},"kpi-overview-runtime-widget-vendors~e4dfd1bd.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-vendors~e4dfd1bd.e4e2abf51ece4378c310.js"},"kpi-overview-runtime-widget-vendors~ffdf5190.js":{"path":"/apps/kpi-overview-runtime-widget/kpi-overview-runtime-widget-vendors~ffdf5190.82f3227bf0ced29661b8.js"},"webpackRuntime.js":{"path":"/apps/kpi-overview-runtime-widget/aab5230a050927447e5c.js"}} \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js b/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js deleted file mode 100644 index 43ff9d1..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackRegister=window.webpackRegister||[]).push([{hash:"e820954345757a987a61",publicPath:"/"},["kpi-overview-runtime-widget","kpi-overview-runtime-widget-stylejs","kpi-overview-runtime-widget-vendors~30536edd","kpi-overview-runtime-widget-vendors~376ea35c","kpi-overview-runtime-widget-vendors~5a50f6a0","kpi-overview-runtime-widget-vendors~e4dfd1bd"],{"kpi-overview-runtime-widget":{js:["@angular/common","@angular/core","@angular/forms","@c8y/client","@c8y/ngx-components"],css:[]},"kpi-overview-runtime-widget-stylejs":{js:["6yW4r","a50Dl","fVnw2"],css:[]},"kpi-overview-runtime-widget-vendors~30536edd":{js:["OD/MH"],css:[]},"kpi-overview-runtime-widget-vendors~376ea35c":{js:["aeQ0u"],css:[]},"kpi-overview-runtime-widget-vendors~5a50f6a0":{js:["/XwMU","0gx5I","1SP3J","45Ve1","6wixE","8vziG","ARx7f","Ay2r+","B49rC","C734p","DydLQ","EEfkF","GVpyE","H0SfR","Jm7h2","NET8E","OSXbQ","Orptb","P9tP5","Qgj6I","SBXPP","SKx1Z","TC8XG","TOVdY","Ta6ao","UgJ6S","WDSJU","Z70TH","ZtJ39","dbZvm","di3Lx","fTtzN","j13rY","mBSwB","nXZ77","sKM7W","sneGe","t9UOB","u/LGr","u1Z8U","vZtCd","vxJpk","xmFY6","yM92C"],css:[]},"kpi-overview-runtime-widget-vendors~e4dfd1bd":{js:["6nYDD","8EmIR","ZIo0y","c9oUX","g7dq2","i/oB8","ia62o","jLS8x","k41J4","m7PES","qv/MW","vlkA2","zkuYo"],css:[]}}]),(window.webpackJsonp=window.webpackJsonp||[]).push([["kpi-overview-runtime-widget-CustomWidget"],{"kpi-overview-runtime-widget-CustomWidget":function(e,i,t){"use strict";t.r(i),t.d(i,"GpKpiOverviewWidgetComponent",(function(){return p})),t.d(i,"GpKpiOverviewWidgetModule",(function(){return k})),t.d(i,"GpKpiOverviewWidgetService",(function(){return d})),t.d(i,"ɵ0",(function(){return A})),t.d(i,"ɵa",(function(){return g})),t.d(i,"ɵb",(function(){return u})),t.d(i,"ɵc",(function(){return m})),t.d(i,"ɵd",(function(){return v})),t.d(i,"ɵe",(function(){return h}));t("a50Dl");var o=t("vlkA2"),r=t("@angular/core"),s=t("@c8y/client"),n=t("aeQ0u"),l=t("@c8y/ngx-components"),a=t("OD/MH"),c=t("@angular/forms");class d{constructor(e){this.inventory=e}getDevicesAvailability(e){return Object(o.__awaiter)(this,void 0,void 0,(function*(){let i=0,t=0,r=0,s=null;const n=yield this.inventory.detail(e);if(s=n.data,s.hasOwnProperty("c8y_IsDevice"))if(i=1,s.childDevices.references.length>0){let e=!1;const i=s.childDevices.references.map(i=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const t=(yield this.inventory.detail(i.managedObject.id)).data;t.hasOwnProperty("c8y_Availability")&&(e="AVAILABLE"===t.c8y_Availability.status)})));e?s.hasOwnProperty("c8y_Availability")?"AVAILABLE"===s.c8y_Availability.status?t=1:r=1:t=1:r=1,yield Promise.all(i)}else s.hasOwnProperty("c8y_Availability")&&"AVAILABLE"===s.c8y_Availability.status?t=1:r=1;else{if(s.childAssets.references.length>0){const e=s.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const i=(yield this.inventory.detail(e.managedObject.id)).data;if(i.hasOwnProperty("c8y_Availability"))"AVAILABLE"===i.c8y_Availability.status?t+=1:r+=1;else if(i.hasOwnProperty("c8y_IsAsset")){let e=!1;if(i.childAssets.references.length>0){const t=i.childAssets.references.map(i=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const t=(yield this.inventory.detail(i.managedObject.id)).data;e=!!t.hasOwnProperty("c8y_Availability")&&"AVAILABLE"===t.c8y_Availability.status})));yield Promise.all(t)}e?t+=1:r+=1}})));yield Promise.all(e)}i=n.data.childAssets.references.length}return{totalDevices:i,availableDevices:t,unavailableDevices:r}}))}getFirmwareRisks(e){return Object(o.__awaiter)(this,void 0,void 0,(function*(){let i=0,t=0,r=0,s=0;const n=yield this.inventory.list({type:"sag_racm_currentFirmware"});n.data.length>0&&(this.latestFirmwareVersion=n.data[0].firmware.version);let l=null;const a=yield this.inventory.detail(e);if(l=a.data,l.hasOwnProperty("c8y_IsDevice")){const e=this.calculateRiskCount(l);i=e.highRisk,t=e.mediumRisk,r=e.lowRisk,s=e.noRisk}else if(l.childAssets.references.length>0){const e=l.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const n=(yield this.inventory.detail(e.managedObject.id)).data;if(n.hasOwnProperty("c8y_IsDevice")){const e=this.calculateRiskCount(l);i=e.highRisk,t=e.mediumRisk,r=e.lowRisk,s=e.noRisk}else if(n.hasOwnProperty("c8y_IsAsset")&&n.childAssets.references.length>0){const e=n.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){if((yield this.inventory.detail(e.managedObject.id)).data.hasOwnProperty("c8y_IsDevice")){const e=this.calculateRiskCount(l);i=e.highRisk,t=e.mediumRisk,r=e.lowRisk,s=e.noRisk}})));yield Promise.all(e)}})));yield Promise.all(e)}return{highRiskCount:i,mediumRiskCount:t,lowRiskCount:r,noRiskCount:s}}))}calculateRiskCount(e){let i=!1,t=0,o=0,r=0,s=0;if(e){const n=e.c8y_Firmware;let l=0;n&&n.version&&(l=n.version-this.latestFirmwareVersion),l<=0&&(i=!0),i&&i&&(l>=0?t+=1:-1===l?o+=1:-2===l?r+=1:l<=-3&&(s+=1))}return{noRisk:t,lowRisk:o,mediumRisk:r,highRisk:s}}getAlarms(e){return Object(o.__awaiter)(this,void 0,void 0,(function*(){let i=0,t=0,r=0,s=0,n=null;if(n=(yield this.inventory.detail(e)).data,n.hasOwnProperty("c8y_IsDevice")){const e=this.calculateAlarmsCount(n);r=e.minorAlerts,t=e.majorAlerts,s=e.criticalAlerts}else if(n.childAssets.references.length>0){const e=n.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const i=(yield this.inventory.detail(e.managedObject.id)).data;if(i.hasOwnProperty("c8y_IsDevice")){const e=this.calculateAlarmsCount(i);r=e.minorAlerts,t=e.majorAlerts,s=e.criticalAlerts}else if(i.hasOwnProperty("c8y_IsAsset")&&i.childAssets.references.length>0){const e=i.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const i=(yield this.inventory.detail(e.managedObject.id)).data;if(i.hasOwnProperty("c8y_IsDevice")){const e=this.calculateAlarmsCount(i);r=e.minorAlerts,t=e.majorAlerts,s=e.criticalAlerts}})));yield Promise.all(e)}})));yield Promise.all(e)}return i=t+r+s,{totalAlarms:i,majorAlertsCount:t,minorAlertsCount:r,criticalAlertsCount:s}}))}calculateAlarmsCount(e){let i=0,t=0,o=0;const r=e.c8y_ActiveAlarmsStatus;return void 0!==r&&(r.hasOwnProperty("minor")&&r.minor>0&&(i+=e.c8y_ActiveAlarmsStatus.minor),r.hasOwnProperty("major")&&r.major>0&&(t+=e.c8y_ActiveAlarmsStatus.major),r.hasOwnProperty("critical")&&r.critical>0&&(o+=e.c8y_ActiveAlarmsStatus.critical)),{minorAlerts:i,majorAlerts:t,criticalAlerts:o}}getNewKPICount(e,i){return Object(o.__awaiter)(this,void 0,void 0,(function*(){let t=0,r=null;if(r=(yield this.inventory.detail(e)).data,r.hasOwnProperty("c8y_IsDevice")&&r.hasOwnProperty(i))t=1;else if(r.childAssets.references.length>0){const e=r.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const r=(yield this.inventory.detail(e.managedObject.id)).data;if(r.hasOwnProperty(i))t+=1;else if(r.hasOwnProperty("c8y_IsAsset")&&r.childAssets.references.length>0){const e=r.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){(yield this.inventory.detail(e.managedObject.id)).data.hasOwnProperty(i)&&(t+=1)})));yield Promise.all(e)}})));yield Promise.all(e)}else t=0;return t}))}getNewKPIValue(e,i){return Object(o.__awaiter)(this,void 0,void 0,(function*(){let t,r=null;const s=yield this.inventory.detail(e);if(r=s.data,r.hasOwnProperty("c8y_IsDevice")&&r.hasOwnProperty(i))t=r[i];else if(r.childAssets.references.length>0){const e=r.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){const s=(yield this.inventory.detail(e.managedObject.id)).data;if(s.hasOwnProperty(i))t+=r[i];else if(s.hasOwnProperty("c8y_IsAsset")&&s.childAssets.references.length>0){const e=s.childAssets.references.map(e=>Object(o.__awaiter)(this,void 0,void 0,(function*(){(yield this.inventory.detail(e.managedObject.id)).data.hasOwnProperty(i)&&(t+=r[i])})));yield Promise.all(e)}})));yield Promise.all(e)}else t="";return t}))}}d.decorators=[{type:r.Injectable}],d.ctorParameters=()=>[{type:s.InventoryService}];class p{constructor(e){this.kpiService=e,this.device={id:""},this.kpi={title:"",topMargin:"",icon:"",value:0,unit:"",color:"",bgcolor:"",unitColor:"",titleColor:"",messageColor:"",otherKPIName:"",otherKPIMetric:"",kpiName:"",message:"",titleSize:20,messageSize:10,kpiSize:30,unitSize:20,imageSize:60,containerHeight:80,default:{color:"",bgcolor:""}}}ngOnInit(){this.device.id=Object(n.get)(this.config,"device.id"),void 0===this.device.id||this.device.id.length,this.kpi.title=Object(n.get)(this.config,"customwidgetdata.metadata.title"),void 0!==this.kpi.title&&0!==this.kpi.title.length||(this.kpi.title="Default Title"),this.kpi.kpiName=Object(n.get)(this.config,"customwidgetdata.kpi.kpiName"),void 0!==this.kpi.kpiName&&0!==this.kpi.kpiName.length||(this.kpi.kpiName="totalDevices"),this.kpi.icon=Object(n.get)(this.config,"customwidgetdata.metadata.icon"),void 0!==this.kpi.icon&&0!==this.kpi.icon.length||(this.kpi.icon="data:image/png;base64,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"),this.kpi.message=Object(n.get)(this.config,"customwidgetdata.kpi.message"),void 0!==this.kpi.message&&0!==this.kpi.message.length||(this.kpi.message=""),this.kpi.default.color=Object(n.get)(this.config,"customwidgetdata.kpi.color"),void 0!==this.kpi.default.color&&0===this.kpi.default.color.indexOf("#")||(this.kpi.default.color="#b0b0b0"),this.kpi.color=this.kpi.default.color,this.kpi.default.bgcolor=Object(n.get)(this.config,"customwidgetdata.kpi.bgcolor"),void 0!==this.kpi.default.bgcolor&&0===this.kpi.default.bgcolor.indexOf("#")||(this.kpi.default.bgcolor="#FFFFFF"),this.kpi.bgcolor=this.kpi.default.bgcolor,this.kpi.titleColor=Object(n.get)(this.config,"customwidgetdata.kpi.titleColor"),void 0!==this.kpi.titleColor&&0===this.kpi.titleColor.indexOf("#")||(this.kpi.titleColor="#b0b0b0"),this.kpi.unitColor=Object(n.get)(this.config,"customwidgetdata.kpi.unitColor"),void 0!==this.kpi.unitColor&&0===this.kpi.unitColor.indexOf("#")||(this.kpi.unitColor="#b0b0b0"),this.kpi.messageColor=Object(n.get)(this.config,"customwidgetdata.kpi.messageColor"),void 0!==this.kpi.messageColor&&0===this.kpi.messageColor.indexOf("#")||(this.kpi.messageColor="#808080"),this.kpi.unit=Object(n.get)(this.config,"customwidgetdata.kpi.unit"),this.kpi.titleSize=Object(n.get)(this.config,"customwidgetdata.kpi.titleSize"),this.kpi.kpiSize=Object(n.get)(this.config,"customwidgetdata.kpi.kpiSize"),this.kpi.unitSize=Object(n.get)(this.config,"customwidgetdata.kpi.unitSize"),this.kpi.messageSize=Object(n.get)(this.config,"customwidgetdata.kpi.messageSize"),this.kpi.imageSize=Object(n.get)(this.config,"customwidgetdata.kpi.imageSize"),this.kpi.value=null,this.getDeviceData()}ngAfterViewInit(){this.configureTopMarginRequired()}configureTopMarginRequired(){document.querySelectorAll(".dashboard-grid-child").forEach(e=>{const i=e.querySelector("div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget");if(null!=i){const i=e.querySelector("div > div > div > c8y-dashboard-child-title"),t=window.getComputedStyle(i).getPropertyValue("display");this.kpi.topMargin=null!=t&&"none"===t?"25px":"0"}})}getDeviceData(){return Object(o.__awaiter)(this,void 0,void 0,(function*(){if(null!==this.kpi.kpiName&&""!==this.kpi.kpiName)if("totalDevices"===this.kpi.kpiName){const e=yield this.kpiService.getDevicesAvailability(this.device.id);e&&(this.kpi.value=e.totalDevices)}else if("available"===this.kpi.kpiName){const e=yield this.kpiService.getDevicesAvailability(this.device.id);e&&(this.kpi.value=e.availableDevices)}else if("unavailable"===this.kpi.kpiName){const e=yield this.kpiService.getDevicesAvailability(this.device.id);e&&(this.kpi.value=e.unavailableDevices)}else if("totalAlarms"===this.kpi.kpiName){const e=yield this.kpiService.getAlarms(this.device.id);e&&(this.kpi.value=e.totalAlarms)}else if("major"===this.kpi.kpiName){const e=yield this.kpiService.getAlarms(this.device.id);e&&(this.kpi.value=e.majorAlertsCount)}else if("minor"===this.kpi.kpiName){const e=yield this.kpiService.getAlarms(this.device.id);e&&(this.kpi.value=e.minorAlertsCount)}else if("critical"===this.kpi.kpiName){const e=yield this.kpiService.getAlarms(this.device.id);e&&(this.kpi.value=e.criticalAlertsCount)}else if("highRisk"===this.kpi.kpiName){const e=yield this.kpiService.getFirmwareRisks(this.device.id);e&&(this.kpi.value=e.highRiskCount)}else if("mediumRisk"===this.kpi.kpiName){const e=yield this.kpiService.getFirmwareRisks(this.device.id);e&&(this.kpi.value=e.mediumRiskCount)}else if("lowRisk"===this.kpi.kpiName){const e=yield this.kpiService.getFirmwareRisks(this.device.id);e&&(this.kpi.value=e.lowRiskCount)}else if("noRisk"===this.kpi.kpiName){const e=yield this.kpiService.getFirmwareRisks(this.device.id);e&&(this.kpi.value=e.noRiskCount)}else if("other"===this.kpi.kpiName){if("value"===this.kpi.otherKPIMetric){const e=yield this.kpiService.getNewKPIValue(this.device.id,this.kpi.otherKPIName);e&&(this.kpi.value=e)}else if("count"===this.kpi.otherKPIMetric){const e=yield this.kpiService.getNewKPICount(this.device.id,this.kpi.otherKPIName);e&&(this.kpi.value=e)}}else this.kpi.value=0}))}getKPITitle(){return this.kpi.title}getKPITitleTopMargin(){return this.kpi.topMargin}getKPIIcon(){return this.kpi.icon}getKPIContainerHeight(){return"90px"}getKPIValue(){return this.kpi.value}getKPIUnit(){return this.kpi.unit}getKPIName(){return this.kpi.kpiName}getKPIColor(){return this.kpi.color}getTitleColor(){return this.kpi.titleColor}getUnitColor(){return this.kpi.unitColor}getMessageColor(){return this.kpi.messageColor}getKPIBgColor(){return this.kpi.bgcolor}getOtherKPIName(){return this.kpi.otherKPIName}getOtherKPIMetric(){return this.kpi.otherKPIMetric}getKPIMessage(){return this.kpi.message}getKPISize(){return this.kpi.kpiSize+"px"}getTitleSize(){return this.kpi.titleSize+"px"}getMessageSize(){return this.kpi.messageSize+"px"}getUnitSize(){return this.kpi.unitSize+"px"}getImageSize(){return this.kpi.imageSize+"px"}getContainerHeight(){return this.kpi.imageSize>this.kpi.titleSize&&this.kpi.imageSize>this.kpi.kpiSize?this.kpi.containerHeight=this.kpi.imageSize+10:this.kpi.titleSize>this.kpi.kpiSize?this.kpi.containerHeight=this.kpi.titleSize+10:this.kpi.containerHeight=this.kpi.kpiSize+10,this.kpi.containerHeight+"px"}}p.decorators=[{type:r.Component,args:[{selector:"lib-gp-kpi-overview-widget",template:'
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI title --\x3e\r\n

{{getKPITitle()}}

\r\n \r\n \x3c!-- KPI value and unit --\x3e\r\n

{{getKPIValue()}} {{getKPIUnit()}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \x3c!-- KPI text --\x3e\r\n

{{getKPIMessage()}}

\r\n\r\n
\r\n
\r\n'}]}],p.ctorParameters=()=>[{type:d}],p.propDecorators={config:[{type:r.Input}]};const h="data:image/png;base64,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a+gskxlTFKUULFquuGbarT0CIh1iFzgJOd9ZvzVyUxw3RrJZxKVN7fp0foffV3eufwm52S6YS27S1lHM3bhx48svv6yurvb09Dx58uTAgQMXL15MqUdFZXx8fFJSUkhICDvMaN68eZSVtra2p0+fphycMWPGq6++SrlZXl5+4MABmvLWW28VFxefOHGConPVqlWUsBS+f/nLXyhVY2Ji3N3d23qLnyoNT0abwmOR4FBkJ47XibdCbkoKVw2uVA8/NfH6Je1w1AxKb/wScvOZZS65KZPJrl69SrnWo0cPKgapirx79y4l4HPPPUfhSEUi5d3MmTPt7OwoUikE09PTP/zww4CAAHojRS37+0IDBgyg2T799NOuXbuy4z3//ve/05RPPvnEwcGBZqDwnT179vz589FP19bgZDRLeavg5Q7eLnbKmxJJKq4llq1eW9NgHv3D443ROZ++MrHXEq/HXnsjIWiQ9iAh3ahFbrYLZpGbVVVVd+7cWbly5aBBg8LDwx0dHalUlEgkL774IgUlezqIilDqudO+oG47zX/48OEzZ85ERUVRR56Kyri4OMpEys3CwkIqNmnmv/3tbxUVFevWrausrPz888+pU0+d948//nj06NHU36dFtPVGPz10TkazgtY7bms0Il2efn9quG682lvvSnMN4FBz6o7fbJEIeMzcbBBqyM12wSxykyJy//79W7du/eabb/r160fdbePzU/mZn5+/cOHCESNGUA7u3LmzT58+VKsKBALqpycnJ3/22WdBQUFyufzXX3+dPHnynDlzLC0tKVIpTKn8pGB1c3MzbdXMwJ0H4eM1txpSoRIss7ufnmOXOjfXYDU8r9KUlr9eqBm5WfMwekA5crMdM4vcLC0tpZrxX//6F3W3KdE0443Yex1RSlpZWbFngTTT6S3z5s2jcBw8ePCuXbuow/7aa6/RPLSzioqKTp48+e2339K7IiIixowZQyWqXIVyk4I1OjqaOvJtvdFPjdS8Aa/rXj1pOH30XJG5THB5JYdL/Zp/fXphweLh9eMcd/3uGsAmu/bxTTfbQ2dcmh5lhuOb7V37z032jND//ve/wMDAxMREykH24CNNl8lkVDDeu3evc+fO/v7+1Gdnr/apqam5ffv2+PHjv/zyS+raf/fdd3v37qUueZcuXSh2hUKdTyI1LhaLMzIycnJy9u3bFxIS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";class g{constructor(){this.config={},this.kpiColorPickerClosed=!0,this.kpiBgColorPickerClosed=!0,this.titleColorPickerClosed=!0,this.kpiUnitColorPickerClosed=!0,this.messageColorPickerClosed=!0,this.widgetInfo={metadata:{title:"",icon:""},kpi:{color:"#b0b0b0",unit:"",bgcolor:"#FFFFFF",kpiName:"",message:"",otherKPIValue:"",otherKPIName:"",titleColor:"#808080",unitColor:"#b0b0b0",messageColor:"#808080",titleSize:20,messageSize:10,unitSize:20,kpiSize:30,imageSize:60}},this.kpiNamesList=[{id:"totalDevices",text:"Total Devices"},{id:"available",text:"Available Devices"},{id:"unavailable",text:"Unavailable Devices"},{id:"totalAlarms",text:"Total Alarms"},{id:"major",text:"Major Alarms"},{id:"minor",text:"Minor Alarms"},{id:"critical",text:"Critical Alarms"},{id:"highRisk",text:"High Risk"},{id:"mediumRisk",text:"Medium Risk"},{id:"lowRisk",text:"Low Risk"},{id:"noRisk",text:"No Risk"},{id:"other",text:"Other Property"}]}ngOnInit(){return Object(o.__awaiter)(this,void 0,void 0,(function*(){Object(n.has)(this.config,"customwidgetdata")?this.widgetInfo=Object(n.get)(this.config,"customwidgetdata"):Object(n.set)(this.config,"customwidgetdata",this.widgetInfo)}))}updateIconInConfig(e){const i=e.target.files[0],t=new FileReader;t.readAsDataURL(i),t.onload=()=>{this.widgetInfo.metadata.icon=t.result,Object(n.set)(this.config,"customwidgetdata",this.widgetInfo)}}updateConfig(){Object(n.set)(this.config,"customwidgetdata",this.widgetInfo)}setSelectedColorForKPI(e){this.widgetInfo.kpi.color=e,this.updateConfig()}closeKPIColorPicker(){this.kpiColorPickerClosed=!0}openKPIColorPicker(){this.kpiColorPickerClosed=!1}setSelectedColorForTitle(e){this.widgetInfo.kpi.titleColor=e,this.updateConfig()}closeTitleColorPicker(){this.titleColorPickerClosed=!0}openTitleColorPicker(){this.titleColorPickerClosed=!1}setSelectedColorForKPIUnit(e){this.widgetInfo.kpi.unitColor=e,this.updateConfig()}closeKPIUnitColorPicker(){this.kpiUnitColorPickerClosed=!0}openKPIUnitColorPicker(){this.kpiUnitColorPickerClosed=!1}setSelectedColorForMessage(e){this.widgetInfo.kpi.messageColor=e,this.updateConfig()}closeMessageColorPicker(){this.messageColorPickerClosed=!0}openMessageColorPicker(){this.messageColorPickerClosed=!1}closeKPIBgColorPicker(){this.kpiBgColorPickerClosed=!0}openKPIBgColorPicker(){this.kpiBgColorPickerClosed=!1}setSelectedColorForBackground(e){this.widgetInfo.kpi.bgcolor=e,this.updateConfig()}}g.decorators=[{type:r.Component,args:[{selector:"lib-gp-kpi-overview-widget-config",template:'\r\n\r\n\r\n
\r\n\r\n
\r\n \x3c!-- KPI title --\x3e\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.titleSize}}\r\n
\r\n
\r\n \x3c!-- Upload icon--\x3e\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.imageSize}} x {{widgetInfo.kpi.imageSize}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \x3c!-- KPI Name --\x3e\r\n \r\n \r\n \r\n \r\n {{item.text}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.kpiSize}}\r\n
\r\n
\r\n \r\n
\r\n Since you selected Other, property name and value must be entered \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Unit --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n {{widgetInfo.kpi.unitSize}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Message --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{widgetInfo.kpi.messageSize}}\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n \x3c!-- KPI color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI Title color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \x3c!-- KPI Unit color --\x3e\r\n \r\n \r\n \r\n
\r\n
\r\n \x3c!-- KPI Message color --\x3e\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \x3c!-- KPI Background color --\x3e\r\n \x3c!-- \r\n \r\n \r\n --\x3e\r\n\r\n
',styles:[".showColorPicker{display:block}.hideColorPicker{display:none}"]}]}],g.ctorParameters=()=>[],g.propDecorators={config:[{type:r.Input}]};class u{constructor(e){this.eRef=e,this.colorSet=new r.EventEmitter(!0),this.colorPickerClosed=new r.EventEmitter,this.colorType="hexa"}closeColorPicker(){this.colorPickerClosed.emit(!0)}applyColorClicked(){void 0!==this.color&&("hexa"===this.colorType?this.colorSet.emit(this.RGBAToHexA(this.color)):this.colorSet.emit(this.color))}RGBAToHexA(e){const i=e.indexOf(",")>-1?",":" ";(e=e.substr(5).split(")")[0].split(i)).indexOf("/")>-1&&e.splice(3,1);let t=(+e[0]).toString(16),o=(+e[1]).toString(16),r=(+e[2]).toString(16),s=Math.round(255*+e[3]).toString(16);return 1===t.length&&(t="0"+t),1===o.length&&(o="0"+o),1===r.length&&(r="0"+r),1===s.length&&(s="0"+s),"#"+t+o+r+s}}u.decorators=[{type:r.Component,args:[{selector:"app-color-picker",template:'\x3c!--\n RGBA\n HEXA\n--\x3e\n
\n \n \n
\n \n \n
\n
\n \n\n\n ',styles:[".btn{min-width:100%;margin-left:0!important}:host{display:block;width:316px;padding:16px}.color-wrapper{display:flex;height:150px}.input-wrapper{margin-top:16px;display:flex;border-radius:1px;border:1px solid #dcdcdc;padding:8px;height:32px;justify-content:center}.color-div{width:32px;height:32px;border-radius:50%;border:1px solid #dcdcdc}.text{flex:1;font-family:Helvetica;line-height:32px}.colorPickerFooter{padding:14px;text-align:center;box-shadow:inset 0 1px 0 rgba(0,0,0,.05)}"]}]}],u.ctorParameters=()=>[{type:r.ElementRef}],u.propDecorators={colorSet:[{type:r.Output}],colorPickerClosed:[{type:r.Output}]};class m{constructor(){this.color=new r.EventEmitter(!0),this.mousedown=!1}ngAfterViewInit(){this.draw()}onMouseDown(e){this.mousedown=!0,this.selectedHeight=e.offsetY,this.draw(),this.emitColor(e.offsetX,e.offsetY)}onMouseMove(e){this.mousedown&&(this.selectedHeight=e.offsetY,this.draw(),this.emitColor(e.offsetX,e.offsetY))}onMouseUp(e){this.mousedown=!1}emitColor(e,i){const t=this.getColorAtPosition(e,i);this.color.emit(t)}getColorAtPosition(e,i){const t=this.ctx.getImageData(e,i,1,1).data;return"rgba("+t[0]+","+t[1]+","+t[2]+",1)"}draw(){this.ctx||(this.ctx=this.canvas.nativeElement.getContext("2d"));const e=this.canvas.nativeElement.width,i=this.canvas.nativeElement.height;this.ctx.clearRect(0,0,e,i);const t=this.ctx.createLinearGradient(0,0,0,i);t.addColorStop(0,"rgba(255, 0, 0, 1)"),t.addColorStop(.17,"rgba(255, 255, 0, 1)"),t.addColorStop(.34,"rgba(0, 255, 0, 1)"),t.addColorStop(.51,"rgba(0, 255, 255, 1)"),t.addColorStop(.68,"rgba(0, 0, 255, 1)"),t.addColorStop(.85,"rgba(255, 0, 255, 1)"),t.addColorStop(1,"rgba(255, 0, 0, 1)"),this.ctx.beginPath(),this.ctx.rect(0,0,e,i),this.ctx.fillStyle=t,this.ctx.fill(),this.ctx.closePath(),this.selectedHeight&&(this.ctx.beginPath(),this.ctx.strokeStyle="white",this.ctx.lineWidth=5,this.ctx.rect(0,this.selectedHeight-5,e,10),this.ctx.stroke(),this.ctx.closePath())}}m.decorators=[{type:r.Component,args:[{selector:"app-color-slider",template:' '}]}],m.propDecorators={color:[{type:r.Output}],canvas:[{type:r.ViewChild,args:["canvas",{static:!0}]}],onMouseUp:[{type:r.HostListener,args:["window:mouseup",["$event"]]}]};class v{constructor(){this.color=new r.EventEmitter(!0),this.mousedown=!1}ngAfterViewInit(){this.draw()}draw(){this.ctx||(this.ctx=this.canvas.nativeElement.getContext("2d"));const e=this.canvas.nativeElement.width,i=this.canvas.nativeElement.height;this.ctx.fillStyle=this.hue||"rgba(255,255,255,1)",this.ctx.fillRect(0,0,e,i);const t=this.ctx.createLinearGradient(0,0,e,0);t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(1,"rgba(255,255,255,0)"),this.ctx.fillStyle=t,this.ctx.fillRect(0,0,e,i);const o=this.ctx.createLinearGradient(0,0,0,i);o.addColorStop(0,"rgba(0,0,0,0)"),o.addColorStop(1,"rgba(0,0,0,1)"),this.ctx.fillStyle=o,this.ctx.fillRect(0,0,e,i),this.selectedPosition&&(this.ctx.strokeStyle="white",this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.arc(this.selectedPosition.x,this.selectedPosition.y,10,0,2*Math.PI),this.ctx.lineWidth=5,this.ctx.stroke())}ngOnChanges(e){if(e.hue){this.draw();const e=this.selectedPosition;e&&this.color.emit(this.getColorAtPosition(e.x,e.y))}}onMouseUp(e){this.mousedown=!1}onMouseDown(e){this.mousedown=!0,this.selectedPosition={x:e.offsetX,y:e.offsetY},this.draw(),this.color.emit(this.getColorAtPosition(e.offsetX,e.offsetY))}onMouseMove(e){this.mousedown&&(this.selectedPosition={x:e.offsetX,y:e.offsetY},this.draw(),this.emitColor(e.offsetX,e.offsetY))}emitColor(e,i){const t=this.getColorAtPosition(e,i);this.color.emit(t)}getColorAtPosition(e,i){const t=this.ctx.getImageData(e,i,1,1).data;return"rgba("+t[0]+","+t[1]+","+t[2]+",1)"}}v.decorators=[{type:r.Component,args:[{selector:"app-color-palette",template:'\n',styles:[".color-palette:hover{cursor:pointer}:host{width:150px;height:150px;display:block}"]}]}],v.propDecorators={hue:[{type:r.Input}],color:[{type:r.Output}],canvas:[{type:r.ViewChild,args:["canvas",{static:!0}]}],onMouseUp:[{type:r.HostListener,args:["window:mouseup",["$event"]]}]};const A={id:"kpi-overview.widget",label:"KPI Overview",previewImage:h,description:"KPI Overview",component:p,configComponent:g,data:{ng1:{options:{noDeviceTarget:!1,noNewWidgets:!1,deviceTargetNotRequired:!1,groupsSelectable:!0}}}};class k{}k.decorators=[{type:r.NgModule,args:[{declarations:[p,g,u,m,v],imports:[a.NgSelectModule,c.FormsModule,l.CommonModule,l.CoreModule],exports:[p,g],entryComponents:[p,g],providers:[d,{provide:l.HOOK_COMPONENTS,multi:!0,useValue:A}]}]}]}}]); -//# sourceMappingURL=kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js.map \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js.map b/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js.map deleted file mode 100644 index e6b8dd3..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.service.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.component.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/color-picker/color-picker-component.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/color-picker/color-slider/color-slider-component.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/color-picker/color-palette/color-palette-component.ts","webpack:///C:/Users/MEEA/Downloads/SAG/presales/Angular/projects/gp-kpi-overview-widget/src/lib/gp-kpi-overview-widget.module.ts"],"names":["inventory","childDevice","childDeviceData","assetChildDevice","assetChildDeviceData","available","firmwareData","risks","firmwareStatus","version","alerts","activeAlerts","critical","kpiService","this","kpi","title","kpiName","icon","message","default","color","bgcolor","titleColor","unitColor","messageColor","_.get","config","w","widgetElement","widgetTitleDisplayValue","result","reader","_.set","eRef","rgba","toString","r","g","b","a","ctx","gradient","addColorStop","whiteGrad","blackGrad","pos"],"mappings":"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","file":"kpi-overview-runtime-widget-CustomWidget.e45db875201eb775e4c1.js","sourcesContent":["/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ThrowStmt } from '@angular/compiler';\nimport { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\n\n\n@Injectable()\nexport class GpKpiOverviewWidgetService {\n latestFirmwareVersion: any;\n\n\n constructor(public inventory: InventoryService) {\n }\n\n async getDevicesAvailability(deviceId){\n let totalDevices = 0;\n let availableDevices = 0;\n let unavailableDevices = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n totalDevices = 1;\n\n if (response.childDevices.references.length > 0) {\n\n let available = false;\n const promises = response.childDevices.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n\n if (childDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n });\n if(available){\n if (response.hasOwnProperty('c8y_Availability')) {\n if (response.c8y_Availability.status === 'AVAILABLE') {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }else{\n availableDevices = 1;\n }\n }\n else{\n unavailableDevices = 1;\n }\n await Promise.all(promises);\n } else {\n if (response.hasOwnProperty('c8y_Availability') && (response.c8y_Availability.status === 'AVAILABLE')) {\n availableDevices = 1;\n }\n else{\n unavailableDevices = 1;\n }\n }\n }\n else {\n if (response.childAssets.references.length > 0) {\n const promises = response.childAssets.references.map(async (childDevice) => {\n const ChildInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = ChildInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_Availability')) {\n if (childDeviceData.c8y_Availability.status === 'AVAILABLE') {\n availableDevices += 1;\n }\n else{\n unavailableDevices += 1;\n }\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n let available = false;\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_Availability')){\n\n if (assetChildDeviceData.c8y_Availability.status === 'AVAILABLE') {\n available = true;\n } else {\n available = false;\n }\n }\n else{\n available = false;\n }\n });\n await Promise.all(promises1);\n }\n if (available) {\n availableDevices += 1;\n }else{\n unavailableDevices += 1;\n }\n }\n });\n await Promise.all(promises);\n }\n totalDevices = inventory.data.childAssets.references.length;\n }\n return {totalDevices, availableDevices, unavailableDevices};\n }\n\n async getFirmwareRisks(deviceId){\n let highRiskCount = 0;\n let mediumRiskCount = 0;\n let lowRiskCount = 0;\n let noRiskCount = 0;\n const firmwareData = await this.inventory.list({ type: 'sag_racm_currentFirmware' });\n if (firmwareData.data.length > 0) {\n this.latestFirmwareVersion = firmwareData.data[0].firmware.version;\n }\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk;\n }\n else if(response.childAssets.references.length > 0){\n\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const risks = this.calculateRiskCount(response);\n highRiskCount = risks.highRisk;\n mediumRiskCount = risks.mediumRisk;\n lowRiskCount = risks.lowRisk;\n noRiskCount = risks.noRisk; }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n return {highRiskCount, mediumRiskCount, lowRiskCount, noRiskCount};\n }\n\n calculateRiskCount(device){\n let atRisk = false;\n let noRisk = 0;\n let lowRisk = 0;\n let mediumRisk = 0;\n let highRisk = 0;\n\n if (device) {\n const firmwareStatus = device.c8y_Firmware;\n let versionIssues = 0;\n if (firmwareStatus && firmwareStatus.version) {\n versionIssues = firmwareStatus.version - this.latestFirmwareVersion;\n }\n if (versionIssues <= 0) {\n atRisk = true; }\n if ( atRisk) {\n if (atRisk) {\n if (versionIssues >= 0) {\n noRisk += 1;\n } else if (versionIssues === -1) {\n lowRisk += 1;\n } else if (versionIssues === -2) {\n mediumRisk += 1;\n } else if (versionIssues <= -3) {\n highRisk += 1;\n }\n }\n }\n }\n return {noRisk, lowRisk, mediumRisk, highRisk}\n }\n async getAlarms(deviceId){\n let totalAlarms = 0;\n let majorAlertsCount = 0;\n let minorAlertsCount = 0;\n let criticalAlertsCount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n\n if (response.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(response);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(childDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty('c8y_IsDevice')) {\n const alerts = this.calculateAlarmsCount(assetChildDeviceData);\n minorAlertsCount = alerts.minorAlerts;\n majorAlertsCount = alerts.majorAlerts;\n criticalAlertsCount = alerts.criticalAlerts;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n totalAlarms = majorAlertsCount + minorAlertsCount + criticalAlertsCount;\n return {totalAlarms, majorAlertsCount, minorAlertsCount, criticalAlertsCount};\n }\n\n\n calculateAlarmsCount(device){\n let minorAlerts = 0;\n let majorAlerts = 0;\n let criticalAlerts = 0;\n const activeAlerts = device.c8y_ActiveAlarmsStatus;\n if (activeAlerts !== undefined) {\n if (activeAlerts.hasOwnProperty('minor')) {\n if (activeAlerts.minor > 0) { minorAlerts += device.c8y_ActiveAlarmsStatus.minor; }\n }\n if (activeAlerts.hasOwnProperty('major')) {\n if (activeAlerts.major > 0) { majorAlerts += device.c8y_ActiveAlarmsStatus.major }\n }\n if (activeAlerts.hasOwnProperty('critical')) {\n if (activeAlerts.critical > 0) { criticalAlerts += device.c8y_ActiveAlarmsStatus.critical }\n }\n }\n return {minorAlerts, majorAlerts, criticalAlerts}\n }\n\n async getNewKPICount(deviceId, newKPI){\n let newKPICount = 0;\n let response: any = null;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPICount = 1;\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPICount += 1;\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPICount = 0;\n }\n return newKPICount;\n }\n\n async getNewKPIValue(deviceId, newKPI){\n let response: any = null;\n let newKPIValue;\n const inventory = await this.inventory.detail(deviceId);\n response = inventory.data;\n if (response.hasOwnProperty('c8y_IsDevice') && response.hasOwnProperty(newKPI)) {\n newKPIValue = response[newKPI];\n }\n else if(response.childAssets.references.length > 0){\n const promises = response.childAssets.references.map(async (childDevice) => {\n const childInventory = await this.inventory.detail(childDevice.managedObject.id);\n const childDeviceData = childInventory.data;\n if (childDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n else if(childDeviceData.hasOwnProperty('c8y_IsAsset')){\n if (childDeviceData.childAssets.references.length > 0) {\n const promises1 = childDeviceData.childAssets.references.map(async (assetChildDevice) => {\n const assetChildInventory = await this.inventory.detail(assetChildDevice.managedObject.id);\n const assetChildDeviceData = assetChildInventory.data;\n if (assetChildDeviceData.hasOwnProperty(newKPI)) {\n newKPIValue += response[newKPI];\n }\n });\n await Promise.all(promises1);\n }\n }\n });\n await Promise.all(promises);\n }\n else{\n newKPIValue = '';\n }\n return newKPIValue;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport * as _ from 'lodash';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\n\n\ninterface Device {\n id: string;\n}\n\ninterface KPI {\n default: {\n color: string;\n bgcolor: string\n }\n title: string;\n icon: string;\n topMargin: string;\n color: string;\n bgcolor: string;\n unitColor: string;\n titleColor: string;\n messageColor: string;\n value: any;\n unit: string;\n message: string;\n kpiName: string;\n otherKPIName: string;\n otherKPIMetric: string;\n titleSize: number;\n messageSize: number;\n kpiSize: number;\n unitSize: number;\n imageSize: number;\n containerHeight: number;\n}\n\n@Component({\n selector: 'lib-gp-kpi-overview-widget',\n templateUrl: './gp-kpi-overview-widget.html',\n styles: []\n})\nexport class GpKpiOverviewWidgetComponent implements OnInit, AfterViewInit{\n\n @Input() config;\n\n private device: Device = {\n id: ''\n }\n\n private kpi: KPI = {\n title: '',\n topMargin: '',\n icon: '',\n value: 0,\n unit: '',\n color: '',\n bgcolor: '',\n unitColor: '',\n titleColor: '',\n messageColor: '',\n otherKPIName: '',\n otherKPIMetric: '',\n kpiName: '',\n message: '',\n titleSize: 20,\n messageSize: 10,\n kpiSize: 30,\n unitSize: 20,\n imageSize: 60,\n containerHeight: 80,\n default: {\n color: '',\n bgcolor: ''\n }\n }\n\n constructor(private kpiService: GpKpiOverviewWidgetService) { }\n\n ngOnInit() {\n\n // Get Device Id\n this.device.id = _.get(this.config, 'device.id');\n if(this.device.id === undefined || this.device.id.length === 0) {\n }\n // Get KPI Title\n this.kpi.title = _.get(this.config, 'customwidgetdata.metadata.title');\n if(this.kpi.title === undefined || this.kpi.title.length === 0) {\n this.kpi.title = 'Default Title';\n }\n // Get KPI Name\n this.kpi.kpiName = _.get(this.config, 'customwidgetdata.kpi.kpiName');\n if(this.kpi.kpiName === undefined || this.kpi.kpiName.length === 0) {\n this.kpi.kpiName = 'totalDevices';\n }\n // Get KPI Icon\n this.kpi.icon = _.get(this.config, 'customwidgetdata.metadata.icon');\n if(this.kpi.icon === undefined || this.kpi.icon.length === 0) {\n this.kpi.icon = 'data:image/png;base64,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';\n }\n // Get KPI Message\n this.kpi.message = _.get(this.config, 'customwidgetdata.kpi.message');\n if(this.kpi.message === undefined || this.kpi.message.length === 0) {\n this.kpi.message = '';\n }\n // Get KPI Color\n this.kpi.default.color = _.get(this.config, 'customwidgetdata.kpi.color');\n if(this.kpi.default.color === undefined || this.kpi.default.color.indexOf('#') !== 0) {\n this.kpi.default.color = '#b0b0b0';\n }\n this.kpi.color = this.kpi.default.color;\n // Get Bg KPI Color\n this.kpi.default.bgcolor = _.get(this.config, 'customwidgetdata.kpi.bgcolor');\n if(this.kpi.default.bgcolor === undefined || this.kpi.default.bgcolor.indexOf('#') !== 0) {\n this.kpi.default.bgcolor = '#FFFFFF';\n }\n this.kpi.bgcolor = this.kpi.default.bgcolor;\n\n // Get Title Color\n this.kpi.titleColor = _.get(this.config, 'customwidgetdata.kpi.titleColor');\n if(this.kpi.titleColor === undefined || this.kpi.titleColor.indexOf('#') !== 0) {\n this.kpi.titleColor = '#b0b0b0';\n }\n\n // Get Unit Color\n this.kpi.unitColor = _.get(this.config, 'customwidgetdata.kpi.unitColor');\n if(this.kpi.unitColor === undefined || this.kpi.unitColor.indexOf('#') !== 0) {\n this.kpi.unitColor = '#b0b0b0';\n }\n\n // Get message Color\n this.kpi.messageColor = _.get(this.config, 'customwidgetdata.kpi.messageColor');\n if(this.kpi.messageColor === undefined || this.kpi.messageColor.indexOf('#') !== 0) {\n this.kpi.messageColor = '#808080';\n }\n // Get KPI Unit\n this.kpi.unit = _.get(this.config, 'customwidgetdata.kpi.unit');\n this.kpi.titleSize = _.get(this.config, 'customwidgetdata.kpi.titleSize');\n this.kpi.kpiSize = _.get(this.config, 'customwidgetdata.kpi.kpiSize');\n this.kpi.unitSize = _.get(this.config, 'customwidgetdata.kpi.unitSize');\n this.kpi.messageSize = _.get(this.config, 'customwidgetdata.kpi.messageSize');\n this.kpi.imageSize = _.get(this.config, 'customwidgetdata.kpi.imageSize');\n this.kpi.value = null;\n this.getDeviceData();\n }\n\n ngAfterViewInit() {\n this.configureTopMarginRequired();\n }\n\n // Configure top margin within the widget. This is on the basis if the Widget title is set to hidden or not.\n private configureTopMarginRequired(): void {\n const allWidgets: NodeListOf = document.querySelectorAll('.dashboard-grid-child');\n allWidgets.forEach((w:Element) => {\n const widgetElement: Element = w.querySelector('div > div > div > c8y-dynamic-component > lib-gp-kpi-overview-widget');\n if(widgetElement !== undefined && widgetElement !== null) {\n const widgetTitleElement: Element = w.querySelector('div > div > div > c8y-dashboard-child-title');\n const widgetTitleDisplayValue: string = window.getComputedStyle(widgetTitleElement).getPropertyValue('display');\n if(widgetTitleDisplayValue !== undefined && widgetTitleDisplayValue !== null && widgetTitleDisplayValue === 'none') {\n this.kpi.topMargin = '25px';\n } else {\n this.kpi.topMargin = '0';\n }\n }\n });\n }\n async getDeviceData() {\n if (this.kpi.kpiName !== null && this.kpi.kpiName !== '') {\n\n if (this.kpi.kpiName === 'totalDevices'){\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.totalDevices;\n }\n }\n else if (this.kpi.kpiName === 'available') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.availableDevices;\n }\n }\n else if (this.kpi.kpiName === 'unavailable') {\n const result = await this.kpiService.getDevicesAvailability(this.device.id);\n if (result) {\n this.kpi.value = result.unavailableDevices;\n }\n }\n else if (this.kpi.kpiName === 'totalAlarms') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.totalAlarms;\n }\n }\n else if (this.kpi.kpiName === 'major') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.majorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'minor') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.minorAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'critical') {\n const result = await this.kpiService.getAlarms(this.device.id);\n if (result) {\n this.kpi.value = result.criticalAlertsCount;\n }\n }\n else if (this.kpi.kpiName === 'highRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.highRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'mediumRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.mediumRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'lowRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.lowRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'noRisk') {\n const result = await this.kpiService.getFirmwareRisks(this.device.id);\n if (result) {\n this.kpi.value = result.noRiskCount;\n }\n }\n else if (this.kpi.kpiName === 'other') {\n\n if (this.kpi.otherKPIMetric === 'value') {\n const result = await this.kpiService.getNewKPIValue(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n else if(this.kpi.otherKPIMetric === 'count') {\n const result = await this.kpiService.getNewKPICount(this.device.id, this.kpi.otherKPIName);\n if (result) {\n this.kpi.value = result;\n }\n }\n }\n else{\n this.kpi.value = 0;\n }\n }\n }\n // Getter KPI Title\n public getKPITitle(): string {\n return this.kpi.title;\n }\n // Getter KPI Title Top Margin\n public getKPITitleTopMargin() {\n return this.kpi.topMargin;\n }\n // Getter KPI Icon\n public getKPIIcon(): string {\n return this.kpi.icon;\n }\n // Get KPI Container Height\n public getKPIContainerHeight(): string {\n return '90px';\n }\n // Getter KPI Value\n public getKPIValue() {\n return this.kpi.value;\n }\n // Getter KPI Unit\n public getKPIUnit() {\n return this.kpi.unit;\n }\n // Getter KPI Name\n public getKPIName() {\n return this.kpi.kpiName;\n }\n // Getter KPI Color\n public getKPIColor() {\n return this.kpi.color;\n }\n // Getter Title Color\n public getTitleColor() {\n return this.kpi.titleColor;\n }\n // Getter Unit Color\n public getUnitColor() {\n return this.kpi.unitColor;\n }\n // Getter Message Color\n public getMessageColor() {\n return this.kpi.messageColor;\n }\n // Getter KPI background Color\n public getKPIBgColor() {\n return this.kpi.bgcolor;\n }\n // Getter Other KPI Name\n public getOtherKPIName() {\n return this.kpi.otherKPIName;\n }\n // Getter Other KPI metric\n public getOtherKPIMetric() {\n return this.kpi.otherKPIMetric;\n }\n // Getter Other KPI Message\n public getKPIMessage() {\n return this.kpi.message;\n }\n public getKPISize() {\n return this.kpi.kpiSize + 'px';\n }\n public getTitleSize() {\n return this.kpi.titleSize + 'px';\n }\n public getMessageSize() {\n return this.kpi.messageSize + 'px';\n }\n public getUnitSize() {\n return this.kpi.unitSize + 'px';\n }\n public getImageSize() {\n return this.kpi.imageSize + 'px';\n }\n\n public getContainerHeight(){\n if (this.kpi.imageSize > this.kpi.titleSize && this.kpi.imageSize > this.kpi.kpiSize) {\n this.kpi.containerHeight = this.kpi.imageSize + 10;\n } else if(this.kpi.titleSize > this.kpi.kpiSize){\n this.kpi.containerHeight = this.kpi.titleSize + 10;\n }else{\n this.kpi.containerHeight = this.kpi.kpiSize + 10;\n }\n return this.kpi.containerHeight + 'px';\n }\n}\n","\r\n\r\n/*\r\n* Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\r\n*\r\n* SPDX-License-Identifier: Apache-2.0\r\n*\r\n* Licensed under the Apache License, Version 2.0 (the \"License\");\r\n* you may not use this file except in compliance with the License.\r\n* You may obtain a copy of the License at\r\n*\r\n* http://www.apache.org/licenses/LICENSE-2.0\r\n*\r\n* Unless required by applicable law or agreed to in writing, software\r\n* distributed under the License is distributed on an \"AS IS\" BASIS,\r\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n* See the License for the specific language governing permissions and\r\n* limitations under the License.\r\n */\r\n\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'lib-gp-kpi-overview-widget-config',\r\n templateUrl: './gp-kpi-overview-widget-config.html',\r\n styleUrls: ['./gp-kpi-overview-widget-config.css']\r\n})\r\nexport class GpKpiOverviewWidgetConfigComponent implements OnInit {\r\n @Input() config: any = {};\r\n kpiColorPickerClosed = true;\r\n kpiBgColorPickerClosed = true;\r\n titleColorPickerClosed = true;\r\n kpiUnitColorPickerClosed = true;\r\n messageColorPickerClosed = true;\r\n\r\n\r\n\r\n widgetInfo = {\r\n metadata: {\r\n title: '',\r\n icon: '',\r\n },\r\n kpi: {\r\n color: '#b0b0b0',\r\n unit: '',\r\n bgcolor: '#FFFFFF',\r\n kpiName: '',\r\n message: '',\r\n otherKPIValue: '',\r\n otherKPIName: '',\r\n titleColor: '#808080',\r\n unitColor: '#b0b0b0',\r\n messageColor: '#808080',\r\n titleSize: 20,\r\n messageSize: 10,\r\n unitSize: 20,\r\n kpiSize: 30,\r\n imageSize: 60,\r\n\r\n }\r\n}\r\nkpiNamesList = [\r\n {\r\n id: 'totalDevices',\r\n text: 'Total Devices'\r\n },\r\n {\r\n id: 'available',\r\n text: 'Available Devices'\r\n },\r\n {\r\n id: 'unavailable',\r\n text: 'Unavailable Devices'\r\n },\r\n {\r\n id: 'totalAlarms',\r\n text: 'Total Alarms'\r\n },\r\n {\r\n id: 'major',\r\n text: 'Major Alarms'\r\n },\r\n {\r\n id: 'minor',\r\n text: 'Minor Alarms'\r\n },\r\n {\r\n id: 'critical',\r\n text: 'Critical Alarms'\r\n },\r\n {\r\n id: 'highRisk',\r\n text: 'High Risk'\r\n }\r\n ,\r\n {\r\n id: 'mediumRisk',\r\n text: 'Medium Risk'\r\n },\r\n {\r\n id: 'lowRisk',\r\n text: 'Low Risk'\r\n },\r\n {\r\n id: 'noRisk',\r\n text: 'No Risk'\r\n },\r\n {\r\n id: 'other',\r\n text: 'Other Property'\r\n }\r\n\r\n ];\r\n constructor() {}\r\n\r\n async ngOnInit() {\r\n // Editing an existing widget\r\n if(_.has(this.config, 'customwidgetdata')) {\r\n this.widgetInfo = _.get(this.config, 'customwidgetdata');\r\n } else { // Adding a new widget\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n }\r\n\r\n public updateIconInConfig($event: Event) {\r\n const kpiIcon = ($event.target as HTMLInputElement).files[0];\r\n const reader = new FileReader();\r\n reader.readAsDataURL(kpiIcon);\r\n reader.onload = () => {\r\n this.widgetInfo.metadata.icon = reader.result as string;\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n };\r\n }\r\n\r\n public updateConfig() {\r\n\r\n _.set(this.config, 'customwidgetdata', this.widgetInfo);\r\n }\r\n\r\n\r\n setSelectedColorForKPI(value: string) {\r\n this.widgetInfo.kpi.color = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIColorPicker() {\r\n this.kpiColorPickerClosed = true;\r\n }\r\n\r\n openKPIColorPicker() {\r\n this.kpiColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForTitle(value: string) {\r\n this.widgetInfo.kpi.titleColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeTitleColorPicker() {\r\n this.titleColorPickerClosed = true;\r\n }\r\n\r\n openTitleColorPicker() {\r\n this.titleColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForKPIUnit(value: string) {\r\n this.widgetInfo.kpi.unitColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = true;\r\n }\r\n\r\n openKPIUnitColorPicker() {\r\n this.kpiUnitColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForMessage(value: string) {\r\n this.widgetInfo.kpi.messageColor = value;\r\n this.updateConfig();\r\n }\r\n\r\n closeMessageColorPicker() {\r\n this.messageColorPickerClosed = true;\r\n }\r\n\r\n openMessageColorPicker() {\r\n this.messageColorPickerClosed = false;\r\n }\r\n\r\n\r\n closeKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = true;\r\n }\r\n\r\n openKPIBgColorPicker() {\r\n this.kpiBgColorPickerClosed = false;\r\n }\r\n\r\n setSelectedColorForBackground(value: string) {\r\n this.widgetInfo.kpi.bgcolor = value;\r\n this.updateConfig();\r\n }\r\n\r\n}","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-picker',\n templateUrl: './color-picker-component.html',\n styleUrls: ['./color-picker-component.css'],\n})\nexport class ColorPickerComponent {\n @Output() colorSet: EventEmitter = new EventEmitter(true);\n @Output() colorPickerClosed: EventEmitter = new EventEmitter();\n\n public hue: string;\n public color: string;\n public colorType: any = 'hexa';\n constructor(private eRef: ElementRef) {}\n\n closeColorPicker(): void {\n this.colorPickerClosed.emit(true);\n }\n applyColorClicked(): void {\n if (this.color !== undefined) {\n if (this.colorType === 'hexa') {\n this.colorSet.emit(this.RGBAToHexA(this.color));\n } else {\n this.colorSet.emit(this.color);\n }\n }\n }\n\n RGBAToHexA(rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = '0' + r; }\n if (g.length === 1) { g = '0' + g; }\n if (b.length === 1) { b = '0' + b; }\n if (a.length === 1) { a = '0' + a; }\n\n return '#' + r + g + b + a;\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Component,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-slider',\n templateUrl: './color-slider-component.html',\n})\nexport class ColorSliderComponent {\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n private mousedown = false;\n private selectedHeight: number;\n\n // tslint:disable-next-line: use-lifecycle-interface\n ngAfterViewInit() {\n this.draw();\n }\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedHeight = evt.offsetY;\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n this.ctx.clearRect(0, 0, width, height);\n\n const gradient = this.ctx.createLinearGradient(0, 0, 0, height);\n gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');\n gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\n gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\n gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\n gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\n gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\n gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');\n\n this.ctx.beginPath();\n this.ctx.rect(0, 0, width, height);\n this.ctx.fillStyle = gradient;\n this.ctx.fill();\n this.ctx.closePath();\n\n if (this.selectedHeight) {\n this.ctx.beginPath();\n this.ctx.strokeStyle = 'white';\n this.ctx.lineWidth = 5;\n this.ctx.rect(0, this.selectedHeight - 5, width, 10);\n this.ctx.stroke();\n this.ctx.closePath();\n }\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ViewChild,\n ElementRef,\n AfterViewInit,\n Input,\n Output,\n SimpleChanges,\n OnChanges,\n EventEmitter,\n HostListener,\n} from '@angular/core';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-color-palette',\n templateUrl: './color-palette-component.html',\n styleUrls: ['./color-palette-component.css'],\n})\nexport class ColorPaletteComponent implements AfterViewInit, OnChanges {\n @Input()\n hue: string;\n\n @Output()\n color: EventEmitter = new EventEmitter(true);\n\n @ViewChild('canvas', { static: true })\n canvas: ElementRef;\n\n private ctx: CanvasRenderingContext2D;\n\n private mousedown = false;\n\n public selectedPosition: { x: number; y: number };\n\n ngAfterViewInit() {\n this.draw();\n }\n\n draw() {\n if (!this.ctx) {\n this.ctx = this.canvas.nativeElement.getContext('2d');\n }\n const width = this.canvas.nativeElement.width;\n const height = this.canvas.nativeElement.height;\n\n this.ctx.fillStyle = this.hue || 'rgba(255,255,255,1)';\n this.ctx.fillRect(0, 0, width, height);\n\n const whiteGrad = this.ctx.createLinearGradient(0, 0, width, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n this.ctx.fillStyle = whiteGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n const blackGrad = this.ctx.createLinearGradient(0, 0, 0, height);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n this.ctx.fillStyle = blackGrad;\n this.ctx.fillRect(0, 0, width, height);\n\n if (this.selectedPosition) {\n this.ctx.strokeStyle = 'white';\n this.ctx.fillStyle = 'white';\n this.ctx.beginPath();\n this.ctx.arc(\n this.selectedPosition.x,\n this.selectedPosition.y,\n 10,\n 0,\n 2 * Math.PI\n );\n this.ctx.lineWidth = 5;\n this.ctx.stroke();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // tslint:disable-next-line: no-string-literal\n if (changes['hue']) {\n this.draw();\n const pos = this.selectedPosition;\n if (pos) {\n this.color.emit(this.getColorAtPosition(pos.x, pos.y));\n }\n }\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp(evt: MouseEvent) {\n this.mousedown = false;\n }\n\n onMouseDown(evt: MouseEvent) {\n this.mousedown = true;\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.color.emit(this.getColorAtPosition(evt.offsetX, evt.offsetY));\n }\n\n onMouseMove(evt: MouseEvent) {\n if (this.mousedown) {\n this.selectedPosition = { x: evt.offsetX, y: evt.offsetY };\n this.draw();\n this.emitColor(evt.offsetX, evt.offsetY);\n }\n }\n\n emitColor(x: number, y: number) {\n const rgbaColor = this.getColorAtPosition(x, y);\n this.color.emit(rgbaColor);\n }\n\n getColorAtPosition(x: number, y: number) {\n const imageData = this.ctx.getImageData(x, y, 1, 1).data;\n return (\n 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)'\n );\n }\n}\n","/**\n * Copyright (c) 2020 Software AG, Darmstadt, Germany and/or its licensors\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule, HOOK_COMPONENTS } from '@c8y/ngx-components';\nimport { GpKpiOverviewWidgetComponent } from './gp-kpi-overview-widget.component';\nimport * as preview from './preview-image';\nimport { GpKpiOverviewWidgetConfigComponent } from './gp-kpi-overview-widget-config/gp-kpi-overview-widget-config.component';\nimport { GpKpiOverviewWidgetService } from './gp-kpi-overview-widget.service';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { ColorPickerComponent } from './color-picker/color-picker-component';\nimport { ColorSliderComponent } from './color-picker/color-slider/color-slider-component';\nimport { ColorPaletteComponent } from './color-picker/color-palette/color-palette-component';\n@NgModule({\n declarations: [\n GpKpiOverviewWidgetComponent,\n GpKpiOverviewWidgetConfigComponent,\n ColorPickerComponent,\n ColorSliderComponent,\n ColorPaletteComponent\n ],\n imports: [\n NgSelectModule,\n FormsModule,\n CommonModule,\n CoreModule\n ],\n exports: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n entryComponents: [GpKpiOverviewWidgetComponent, GpKpiOverviewWidgetConfigComponent],\n\n providers: [\n GpKpiOverviewWidgetService,\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: {\n id: 'kpi-overview.widget',\n label: 'KPI Overview',\n previewImage: preview.previewImage,\n description: 'KPI Overview',\n component: GpKpiOverviewWidgetComponent,\n configComponent: GpKpiOverviewWidgetConfigComponent,\n data: {\n ng1: {\n options: {\n noDeviceTarget: false,\n noNewWidgets: false,\n deviceTargetNotRequired: false,\n groupsSelectable: true\n }\n }\n }\n }\n }],\n})\nexport class GpKpiOverviewWidgetModule { }\n"],"sourceRoot":""} \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js b/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js deleted file mode 100644 index 1887df9..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackRegister=window.webpackRegister||[]).push([{hash:"e820954345757a987a61",publicPath:"/"},["kpi-overview-runtime-widget-stylejs","kpi-overview-runtime-widget-vendors~e4dfd1bd","kpi-overview-runtime-widget-vendors~5a50f6a0","kpi-overview-runtime-widget-vendors~ffdf5190"],{"kpi-overview-runtime-widget-stylejs":{js:["6yW4r","a50Dl","fVnw2"],css:[]},"kpi-overview-runtime-widget-vendors~e4dfd1bd":{js:["6nYDD","8EmIR","ZIo0y","c9oUX","g7dq2","i/oB8","ia62o","jLS8x","k41J4","m7PES","qv/MW","vlkA2","zkuYo"],css:[]},"kpi-overview-runtime-widget-vendors~5a50f6a0":{js:["/XwMU","0gx5I","1SP3J","45Ve1","6wixE","8vziG","ARx7f","Ay2r+","B49rC","C734p","DydLQ","EEfkF","GVpyE","H0SfR","Jm7h2","NET8E","OSXbQ","Orptb","P9tP5","Qgj6I","SBXPP","SKx1Z","TC8XG","TOVdY","Ta6ao","UgJ6S","WDSJU","Z70TH","ZtJ39","dbZvm","di3Lx","fTtzN","j13rY","mBSwB","nXZ77","sKM7W","sneGe","t9UOB","u/LGr","u1Z8U","vZtCd","vxJpk","xmFY6","yM92C"],css:[]},"kpi-overview-runtime-widget-vendors~ffdf5190":{js:["5hs1B","Jchv7","LLq0t","O1np8","OIiaX","ORKyW","PO4sf","RxeC6","TBUrV","YcBqw","dJW9h","hLoDN","ih/RX","ixiBe","rrdx6","vw3NZ","x5g/b"],css:[]}}]),(window.webpackJsonp=window.webpackJsonp||[]).push([["kpi-overview-runtime-widget-stylejs"],{"6yW4r":function(e,n,o){(n=o("ih/RX")(!1)).push([e.i,'.ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 0 3px rgba(0,126,255,0.1)}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#333;background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,0.06)}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir="rtl"] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir="rtl"] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{top:5px;padding-bottom:5px;padding-left:3px}[dir="rtl"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#D0021B}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir="rtl"] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir="rtl"] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,0.06);left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{user-select:none;padding:8px 10px;font-weight:500;color:rgba(0,0,0,0.54);cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,0.87);padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir="rtl"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir="rtl"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir="rtl"] .ng-dropdown-panel{direction:rtl;text-align:right}\n',""]),e.exports=n},a50Dl:function(e,n,o){"use strict";var t=o("i/oB8"),r=o.n(t),l=o("fVnw2"),g=o.n(l),i={insert:"head",singleton:!1};r()(g.a,i),g.a.locals},fVnw2:function(e,n,o){var t=o("ih/RX"),r=o("6yW4r");(n=t(!1)).i(r),n.push([e.i,"\n",""]),e.exports=n}}]); -//# sourceMappingURL=kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js.map \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js.map b/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js.map deleted file mode 100644 index 0f1408c..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///../node_modules/@ng-select/ng-select/themes/default.theme.css","webpack:///./styles/index.css?12f2","webpack:///./styles/index.css"],"names":["exports","___CSS_LOADER_API_IMPORT___","push","module","i","options","locals","___CSS_LOADER_AT_RULE_IMPORT_0___"],"mappings":"yuCAEAA,EADkC,EAAQ,QAChCC,EAA4B,IAE9BC,KAAK,CAACC,EAAOC,EAAI,g5OAA66O,KAEt8OD,EAAOH,QAAUA,G,mCCNjB,gDAGIK,EAAU,CAEd,OAAiB,OACjB,WAAoB,GAEP,IAAI,IAASA,GAIX,IAAQC,Q,sBCXvB,IAAIL,EAA8B,EAAQ,SACtCM,EAAoC,EAAQ,UAChDP,EAAUC,GAA4B,IAC9BG,EAAEG,GAEVP,EAAQE,KAAK,CAACC,EAAOC,EAAI,KAAM,KAE/BD,EAAOH,QAAUA","file":"kpi-overview-runtime-widget-stylejs.459ef705f8f9cffaa829.js","sourcesContent":["// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 0 3px rgba(0,126,255,0.1)}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#333;background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,0.06)}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=\\\"rtl\\\"] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=\\\"rtl\\\"] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{top:5px;padding-bottom:5px;padding-left:3px}[dir=\\\"rtl\\\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#D0021B}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=\\\"rtl\\\"] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=\\\"rtl\\\"] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,0.06);left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{user-select:none;padding:8px 10px;font-weight:500;color:rgba(0,0,0,0.54);cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,0.87);padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=\\\"rtl\\\"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=\\\"rtl\\\"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=\\\"rtl\\\"] .ng-dropdown-panel{direction:rtl;text-align:right}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../node_modules/css-loader/dist/cjs.js!./index.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../node_modules/css-loader/dist/cjs.js!@ng-select/ng-select/themes/default.theme.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js b/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js deleted file mode 100644 index 23d9694..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackRegister=window.webpackRegister||[]).push([{hash:"e820954345757a987a61",publicPath:"/"},["kpi-overview-runtime-widget-vendors~5a50f6a0","kpi-overview-runtime-widget-vendors~ffdf5190"],{"kpi-overview-runtime-widget-vendors~5a50f6a0":{js:["/XwMU","0gx5I","1SP3J","45Ve1","6wixE","8vziG","ARx7f","Ay2r+","B49rC","C734p","DydLQ","EEfkF","GVpyE","H0SfR","Jm7h2","NET8E","OSXbQ","Orptb","P9tP5","Qgj6I","SBXPP","SKx1Z","TC8XG","TOVdY","Ta6ao","UgJ6S","WDSJU","Z70TH","ZtJ39","dbZvm","di3Lx","fTtzN","j13rY","mBSwB","nXZ77","sKM7W","sneGe","t9UOB","u/LGr","u1Z8U","vZtCd","vxJpk","xmFY6","yM92C"],css:[]},"kpi-overview-runtime-widget-vendors~ffdf5190":{js:["5hs1B","Jchv7","LLq0t","O1np8","OIiaX","ORKyW","PO4sf","RxeC6","TBUrV","YcBqw","dJW9h","hLoDN","ih/RX","ixiBe","rrdx6","vw3NZ","x5g/b"],css:[]}}]),(window.webpackJsonp=window.webpackJsonp||[]).push([["kpi-overview-runtime-widget-vendors~30536edd"],{"OD/MH":function(e,t,s){"use strict";s.d(t,"NgSelectModule",(function(){return q}));var n=s("@angular/core"),i=s("@angular/forms"),l=s("di3Lx"),a=s("u1Z8U"),r=s("Jm7h2"),o=s("vZtCd"),h=s("Qgj6I"),c=s("Z70TH"),d=s("sneGe"),p=s("u/LGr"),m=s("TOVdY"),u=s("YcBqw"),g=s("hLoDN"),_=s("dJW9h"),f=s("@angular/common");const b=/[&<>"']/g,v=RegExp(b.source),T={"&":"&","<":"<",">":">",'"':""","'":"'"};function I(e){return null!=e}function y(e){return"object"==typeof e&&I(e)}function w(e){return e instanceof Function}class S{constructor(e){this.element=e,this.escape=!0}ngOnChanges(e){var t;this.element.nativeElement.innerHTML=this.escape?(t=this.ngItemLabel)&&v.test(t)?t.replace(b,e=>T[e]):t:this.ngItemLabel}}S.decorators=[{type:n.Directive,args:[{selector:"[ngItemLabel]"}]}],S.ctorParameters=()=>[{type:n.ElementRef}],S.propDecorators={ngItemLabel:[{type:n.Input}],escape:[{type:n.Input}]};class O{constructor(e){this.template=e}}O.decorators=[{type:n.Directive,args:[{selector:"[ng-option-tmp]"}]}],O.ctorParameters=()=>[{type:n.TemplateRef}];class x{constructor(e){this.template=e}}x.decorators=[{type:n.Directive,args:[{selector:"[ng-optgroup-tmp]"}]}],x.ctorParameters=()=>[{type:n.TemplateRef}];class C{constructor(e){this.template=e}}C.decorators=[{type:n.Directive,args:[{selector:"[ng-label-tmp]"}]}],C.ctorParameters=()=>[{type:n.TemplateRef}];class L{constructor(e){this.template=e}}L.decorators=[{type:n.Directive,args:[{selector:"[ng-multi-label-tmp]"}]}],L.ctorParameters=()=>[{type:n.TemplateRef}];class k{constructor(e){this.template=e}}k.decorators=[{type:n.Directive,args:[{selector:"[ng-header-tmp]"}]}],k.ctorParameters=()=>[{type:n.TemplateRef}];class E{constructor(e){this.template=e}}E.decorators=[{type:n.Directive,args:[{selector:"[ng-footer-tmp]"}]}],E.ctorParameters=()=>[{type:n.TemplateRef}];class P{constructor(e){this.template=e}}P.decorators=[{type:n.Directive,args:[{selector:"[ng-notfound-tmp]"}]}],P.ctorParameters=()=>[{type:n.TemplateRef}];class A{constructor(e){this.template=e}}A.decorators=[{type:n.Directive,args:[{selector:"[ng-typetosearch-tmp]"}]}],A.ctorParameters=()=>[{type:n.TemplateRef}];class D{constructor(e){this.template=e}}D.decorators=[{type:n.Directive,args:[{selector:"[ng-loadingtext-tmp]"}]}],D.ctorParameters=()=>[{type:n.TemplateRef}];class V{constructor(e){this.template=e}}V.decorators=[{type:n.Directive,args:[{selector:"[ng-tag-tmp]"}]}],V.ctorParameters=()=>[{type:n.TemplateRef}];class R{constructor(e){this.template=e}}R.decorators=[{type:n.Directive,args:[{selector:"[ng-loadingspinner-tmp]"}]}],R.ctorParameters=()=>[{type:n.TemplateRef}];class F{warn(e){console.warn(e)}}function M(){return"axxxxxxxxxxx".replace(/[x]/g,(function(e){return(16*Math.random()|0).toString(16)}))}F.ɵprov=Object(n["ɵɵdefineInjectable"])({factory:function(){return new F},token:F,providedIn:"root"}),F.decorators=[{type:n.Injectable,args:[{providedIn:"root"}]}];const H={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};function B(e){return e.replace(/[^\u0000-\u007E]/g,e=>H[e]||e)}class N{constructor(e,t){this._ngSelect=e,this._selectionModel=t,this._items=[],this._filteredItems=[],this._markedIndex=-1}get items(){return this._items}get filteredItems(){return this._filteredItems}get markedIndex(){return this._markedIndex}get selectedItems(){return this._selectionModel.value}get markedItem(){return this._filteredItems[this._markedIndex]}get noItemsToSelect(){return this._ngSelect.hideSelected&&this._items.length===this.selectedItems.length}get maxItemsSelected(){return this._ngSelect.multiple&&this._ngSelect.maxSelectedItems<=this.selectedItems.length}get lastSelectedItem(){let e=this.selectedItems.length-1;for(;e>=0;e--){let t=this.selectedItems[e];if(!t.disabled)return t}return null}setItems(e){this._items=e.map((e,t)=>this.mapItem(e,t)),this._ngSelect.groupBy?(this._groups=this._groupBy(this._items,this._ngSelect.groupBy),this._items=this._flatten(this._groups)):(this._groups=new Map,this._groups.set(void 0,this._items)),this._filteredItems=[...this._items]}select(e){if(e.selected||this.maxItemsSelected)return;const t=this._ngSelect.multiple;t||this.clearSelected(),this._selectionModel.select(e,t,this._ngSelect.selectableGroupAsModel),this._ngSelect.hideSelected&&this._hideSelected(e)}unselect(e){e.selected&&(this._selectionModel.unselect(e,this._ngSelect.multiple),this._ngSelect.hideSelected&&I(e.index)&&this._ngSelect.multiple&&this._showSelected(e))}findItem(e){let t;return t=this._ngSelect.compareWith?t=>this._ngSelect.compareWith(t.value,e):this._ngSelect.bindValue?t=>!t.children&&this.resolveNested(t.value,this._ngSelect.bindValue)===e:t=>t.value===e||!t.children&&t.label&&t.label===this.resolveNested(e,this._ngSelect.bindLabel),this._items.find(e=>t(e))}addItem(e){const t=this.mapItem(e,this._items.length);return this._items.push(t),this._filteredItems.push(t),t}clearSelected(e=!1){this._selectionModel.clear(e),this._items.forEach(t=>{t.selected=e&&t.selected&&t.disabled,t.marked=!1}),this._ngSelect.hideSelected&&this.resetFilteredItems()}findByLabel(e){return e=B(e).toLocaleLowerCase(),this.filteredItems.find(t=>B(t.label).toLocaleLowerCase().substr(0,e.length)===e)}filter(e){if(!e)return void this.resetFilteredItems();this._filteredItems=[],e=this._ngSelect.searchFn?e:B(e).toLocaleLowerCase();const t=this._ngSelect.searchFn||this._defaultSearchFn,s=this._ngSelect.hideSelected;for(const n of Array.from(this._groups.keys())){const i=[];for(const l of this._groups.get(n)){if(s&&(l.parent&&l.parent.selected||l.selected))continue;t(e,this._ngSelect.searchFn?l.value:l)&&i.push(l)}if(i.length>0){const[e]=i.slice(-1);if(e.parent){const t=this._items.find(t=>t===e.parent);this._filteredItems.push(t)}this._filteredItems.push(...i)}}}resetFilteredItems(){this._filteredItems.length!==this._items.length&&(this._ngSelect.hideSelected&&this.selectedItems.length>0?this._filteredItems=this._items.filter(e=>!e.selected):this._filteredItems=this._items)}unmarkItem(){this._markedIndex=-1}markNextItem(){this._stepToItem(1)}markPreviousItem(){this._stepToItem(-1)}markItem(e){this._markedIndex=this._filteredItems.indexOf(e)}markSelectedOrDefault(e){if(0===this._filteredItems.length)return;const t=this._getLastMarkedIndex();this._markedIndex=t>-1?t:e?this.filteredItems.findIndex(e=>!e.disabled):-1}resolveNested(e,t){if(!y(e))return e;if(-1===t.indexOf("."))return e[t];{let s=t.split("."),n=e;for(let e=0,t=s.length;e-1===this.selectedItems.indexOf(e)))}_showSelected(e){if(this._filteredItems.push(e),e.parent){const t=e.parent;this._filteredItems.find(e=>e===t)||this._filteredItems.push(t)}else if(e.children)for(const t of e.children)t.selected=!1,this._filteredItems.push(t);this._filteredItems=[...this._filteredItems.sort((e,t)=>e.index-t.index)]}_hideSelected(e){if(this._filteredItems=this._filteredItems.filter(t=>t!==e),e.parent){e.parent.children.every(e=>e.selected)&&(this._filteredItems=this._filteredItems.filter(t=>t!==e.parent))}else e.children&&(this._filteredItems=this.filteredItems.filter(t=>t.parent!==e))}_defaultSearchFn(e,t){return B(t.label).toLocaleLowerCase().indexOf(e)>-1}_getNextItemIndex(e){return e>0?this._markedIndex>=this._filteredItems.length-1?0:this._markedIndex+1:this._markedIndex<=0?this._filteredItems.length-1:this._markedIndex-1}_stepToItem(e){0===this._filteredItems.length||this._filteredItems.every(e=>e.disabled)||(this._markedIndex=this._getNextItemIndex(e),this.markedItem.disabled&&this._stepToItem(e))}_getLastMarkedIndex(){if(this._ngSelect.hideSelected)return-1;if(this._markedIndex>-1&&void 0===this.markedItem)return-1;const e=this._filteredItems.indexOf(this.lastSelectedItem);return this.lastSelectedItem&&e<0?-1:Math.max(this.markedIndex,e)}_groupBy(e,t){const s=new Map;if(0===e.length)return s;if(Array.isArray(e[0].value[t])){for(const n of e){const e=(n.value[t]||[]).map((e,t)=>this.mapItem(e,t));s.set(n,e)}return s}const n=w(this._ngSelect.groupBy),i=e=>{let s=n?t(e.value):e.value[t];return I(s)?s:void 0};for(const t of e){let e=i(t);const n=s.get(e);n?n.push(t):s.set(e,[t])}return s}_flatten(e){const t=w(this._ngSelect.groupBy),s=[];for(const n of Array.from(e.keys())){let i=s.length;if(void 0===n){const t=e.get(void 0)||[];s.push(...t.map(e=>(e.index=i++,e)));continue}const l=y(n),a={label:l?"":String(n),children:void 0,parent:null,index:i++,disabled:!this._ngSelect.selectableGroup,htmlId:M()},r=t?this._ngSelect.bindLabel:this._ngSelect.groupBy,o=this._ngSelect.groupValue||(()=>l?n.value:{[r]:n}),h=e.get(n).map(e=>(e.parent=a,e.children=void 0,e.index=i++,e));a.children=h,a.value=o(n,h.map(e=>e.value)),s.push(a),s.push(...h)}return s}}var U;!function(e){e[e.Tab=9]="Tab",e[e.Enter=13]="Enter",e[e.Esc=27]="Esc",e[e.Space=32]="Space",e[e.ArrowUp=38]="ArrowUp",e[e.ArrowDown=40]="ArrowDown",e[e.Backspace=8]="Backspace"}(U||(U={}));class j{constructor(){this._dimensions={itemHeight:0,panelHeight:0,itemsPerViewport:0}}get dimensions(){return this._dimensions}calculateItems(e,t,s){const n=this._dimensions,i=n.itemHeight*t,l=Math.max(0,e)/i*t;let a=Math.min(t,Math.ceil(l)+(n.itemsPerViewport+1));const r=a,o=Math.max(0,r-n.itemsPerViewport);let h=Math.min(o,Math.floor(l)),c=n.itemHeight*Math.ceil(h)-n.itemHeight*Math.min(h,s);return c=isNaN(c)?0:c,h=isNaN(h)?-1:h,a=isNaN(a)?-1:a,h-=s,h=Math.max(0,h),a+=s,a=Math.min(t,a),{topPadding:c,scrollHeight:i,start:h,end:a}}setDimensions(e,t){const s=Math.max(1,Math.floor(t/e));this._dimensions={itemHeight:e,panelHeight:t,itemsPerViewport:s}}getScrollTo(e,t,s){const{panelHeight:n}=this.dimensions,i=e+t,l=s+n;return n>=i&&s===e?null:i>l?s+i-l:e<=s?e:null}}j.decorators=[{type:n.Injectable}];const z="undefined"!=typeof requestAnimationFrame?p.animationFrameScheduler:m.asapScheduler;class ${constructor(e,t,s,i,l){this._renderer=e,this._zone=t,this._panelService=s,this._document=l,this.items=[],this.position="auto",this.virtualScroll=!1,this.filterValue=null,this.update=new n.EventEmitter,this.scroll=new n.EventEmitter,this.scrollToEnd=new n.EventEmitter,this.outsideClick=new n.EventEmitter,this._destroy$=new u.Subject,this._scrollToEndFired=!1,this._updateScrollHeight=!1,this._lastScrollPosition=0,this._dropdown=i.nativeElement}get currentPosition(){return this._currentPosition}get itemsLength(){return this._itemsLength}set itemsLength(e){e!==this._itemsLength&&(this._itemsLength=e,this._onItemsLengthChanged())}get _startOffset(){if(this.markedItem){const{itemHeight:e,panelHeight:t}=this._panelService.dimensions,s=this.markedItem.index*e;return t>s?0:s}return 0}handleMousedown(e){"INPUT"!==e.target.tagName&&e.preventDefault()}ngOnInit(){this._select=this._dropdown.parentElement,this._virtualPadding=this.paddingElementRef.nativeElement,this._scrollablePanel=this.scrollElementRef.nativeElement,this._contentPanel=this.contentElementRef.nativeElement,this._handleScroll(),this._handleOutsideClick(),this._appendDropdown()}ngOnChanges(e){if(e.items){const t=e.items;this._onItemsChange(t.currentValue,t.firstChange)}}ngOnDestroy(){this._destroy$.next(),this._destroy$.complete(),this._destroy$.unsubscribe(),this.appendTo&&this._renderer.removeChild(this._dropdown.parentNode,this._dropdown)}scrollTo(e,t=!1){if(!e)return;const s=this.items.indexOf(e);if(s<0||s>=this.itemsLength)return;let n;if(this.virtualScroll){const e=this._panelService.dimensions.itemHeight;n=this._panelService.getScrollTo(s*e,e,this._lastScrollPosition)}else{const s=this._dropdown.querySelector("#"+e.htmlId),i=t?s.offsetTop:this._lastScrollPosition;n=this._panelService.getScrollTo(s.offsetTop,s.clientHeight,i)}I(n)&&(this._scrollablePanel.scrollTop=n)}scrollToTag(){const e=this._scrollablePanel;e.scrollTop=e.scrollHeight-e.clientHeight}adjustPosition(){this._updateYPosition()}_handleDropdownPosition(){this._currentPosition=this._calculateCurrentPosition(this._dropdown),"top"===this._currentPosition?(this._renderer.addClass(this._dropdown,"ng-select-top"),this._renderer.removeClass(this._dropdown,"ng-select-bottom"),this._renderer.addClass(this._select,"ng-select-top"),this._renderer.removeClass(this._select,"ng-select-bottom")):(this._renderer.addClass(this._dropdown,"ng-select-bottom"),this._renderer.removeClass(this._dropdown,"ng-select-top"),this._renderer.addClass(this._select,"ng-select-bottom"),this._renderer.removeClass(this._select,"ng-select-top")),this.appendTo&&this._updateYPosition(),this._dropdown.style.opacity="1"}_handleScroll(){this._zone.runOutsideAngular(()=>{Object(g.fromEvent)(this.scrollElementRef.nativeElement,"scroll").pipe(Object(l.takeUntil)(this._destroy$),Object(a.auditTime)(0,z)).subscribe(e=>{const t=e.path||e.composedPath&&e.composedPath(),s=t&&0!==t.length?t[0].scrollTop:e.target.scrollTop;this._onContentScrolled(s)})})}_handleOutsideClick(){this._document&&this._zone.runOutsideAngular(()=>{Object(_.merge)(Object(g.fromEvent)(this._document,"touchstart",{capture:!0}),Object(g.fromEvent)(this._document,"mousedown",{capture:!0})).pipe(Object(l.takeUntil)(this._destroy$)).subscribe(e=>this._checkToClose(e))})}_checkToClose(e){if(this._select.contains(e.target)||this._dropdown.contains(e.target))return;const t=e.path||e.composedPath&&e.composedPath();e.target&&e.target.shadowRoot&&t&&t[0]&&this._select.contains(t[0])||this._zone.run(()=>this.outsideClick.emit())}_onItemsChange(e,t){this.items=e||[],this._scrollToEndFired=!1,this.itemsLength=e.length,this.virtualScroll?this._updateItemsRange(t):(this._setVirtualHeight(),this._updateItems(t))}_updateItems(e){this.update.emit(this.items),!1!==e&&this._zone.runOutsideAngular(()=>{Promise.resolve().then(()=>{const t=this._scrollablePanel.clientHeight;this._panelService.setDimensions(0,t),this._handleDropdownPosition(),this.scrollTo(this.markedItem,e)})})}_updateItemsRange(e){this._zone.runOutsideAngular(()=>{this._measureDimensions().then(()=>{e?(this._renderItemsRange(this._startOffset),this._handleDropdownPosition()):this._renderItemsRange()})})}_onContentScrolled(e){this.virtualScroll&&this._renderItemsRange(e),this._lastScrollPosition=e,this._fireScrollToEnd(e)}_updateVirtualHeight(e){this._updateScrollHeight&&(this._virtualPadding.style.height=e+"px",this._updateScrollHeight=!1)}_setVirtualHeight(){this._virtualPadding&&(this._virtualPadding.style.height="0px")}_onItemsLengthChanged(){this._updateScrollHeight=!0}_renderItemsRange(e=null){if(e&&this._lastScrollPosition===e)return;e=e||this._scrollablePanel.scrollTop;const t=this._panelService.calculateItems(e,this.itemsLength,this.bufferAmount);this._updateVirtualHeight(t.scrollHeight),this._contentPanel.style.transform=`translateY(${t.topPadding}px)`,this._zone.run(()=>{this.update.emit(this.items.slice(t.start,t.end)),this.scroll.emit({start:t.start,end:t.end})}),I(e)&&0===this._lastScrollPosition&&(this._scrollablePanel.scrollTop=e,this._lastScrollPosition=e)}_measureDimensions(){if(this._panelService.dimensions.itemHeight>0||0===this.itemsLength)return Promise.resolve(this._panelService.dimensions);const[e]=this.items;return this.update.emit([e]),Promise.resolve().then(()=>{const t=this._dropdown.querySelector("#"+e.htmlId).clientHeight;this._virtualPadding.style.height=t*this.itemsLength+"px";const s=this._scrollablePanel.clientHeight;return this._panelService.setDimensions(t,s),this._panelService.dimensions})}_fireScrollToEnd(e){if(this._scrollToEndFired||0===e)return;const t=this.virtualScroll?this._virtualPadding:this._contentPanel;e+this._dropdown.clientHeight>=t.clientHeight&&(this._zone.run(()=>this.scrollToEnd.emit()),this._scrollToEndFired=!0)}_calculateCurrentPosition(e){if("auto"!==this.position)return this.position;const t=this._select.getBoundingClientRect(),s=document.documentElement.scrollTop||document.body.scrollTop;return t.top+window.pageYOffset+t.height+e.getBoundingClientRect().height>s+document.documentElement.clientHeight?"top":"bottom"}_appendDropdown(){if(this.appendTo){if(this._parent=document.querySelector(this.appendTo),!this._parent)throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);this._updateXPosition(),this._parent.appendChild(this._dropdown)}}_updateXPosition(){const e=this._select.getBoundingClientRect(),t=this._parent.getBoundingClientRect(),s=e.left-t.left;this._dropdown.style.left=s+"px",this._dropdown.style.width=e.width+"px",this._dropdown.style.minWidth=e.width+"px"}_updateYPosition(){const e=this._select.getBoundingClientRect(),t=this._parent.getBoundingClientRect(),s=e.height;if("top"===this._currentPosition){const n=t.bottom-e.bottom;this._dropdown.style.bottom=n+s+"px",this._dropdown.style.top="auto"}else if("bottom"===this._currentPosition){const n=e.top-t.top;this._dropdown.style.top=n+s+"px",this._dropdown.style.bottom="auto"}}}$.decorators=[{type:n.Component,args:[{changeDetection:n.ChangeDetectionStrategy.OnPush,encapsulation:n.ViewEncapsulation.None,selector:"ng-dropdown-panel",template:'\n
\n \n
\n
\n
\n
\n \n
\n
\n \n '}]}],$.ctorParameters=()=>[{type:n.Renderer2},{type:n.NgZone},{type:j},{type:n.ElementRef},{type:void 0,decorators:[{type:n.Optional},{type:n.Inject,args:[f.DOCUMENT]}]}],$.propDecorators={items:[{type:n.Input}],markedItem:[{type:n.Input}],position:[{type:n.Input}],appendTo:[{type:n.Input}],bufferAmount:[{type:n.Input}],virtualScroll:[{type:n.Input}],headerTemplate:[{type:n.Input}],footerTemplate:[{type:n.Input}],filterValue:[{type:n.Input}],update:[{type:n.Output}],scroll:[{type:n.Output}],scrollToEnd:[{type:n.Output}],outsideClick:[{type:n.Output}],contentElementRef:[{type:n.ViewChild,args:["content",{read:n.ElementRef,static:!0}]}],scrollElementRef:[{type:n.ViewChild,args:["scroll",{read:n.ElementRef,static:!0}]}],paddingElementRef:[{type:n.ViewChild,args:["padding",{read:n.ElementRef,static:!0}]}],handleMousedown:[{type:n.HostListener,args:["mousedown",["$event"]]}]};class W{constructor(e){this.elementRef=e,this.stateChange$=new u.Subject,this._disabled=!1}get disabled(){return this._disabled}set disabled(e){this._disabled=this._isDisabled(e)}get label(){return(this.elementRef.nativeElement.textContent||"").trim()}ngOnChanges(e){e.disabled&&this.stateChange$.next({value:this.value,disabled:this._disabled})}ngAfterViewChecked(){this.label!==this._previousLabel&&(this._previousLabel=this.label,this.stateChange$.next({value:this.value,disabled:this._disabled,label:this.elementRef.nativeElement.innerHTML}))}ngOnDestroy(){this.stateChange$.complete()}_isDisabled(e){return null!=e&&""+e!="false"}}W.decorators=[{type:n.Component,args:[{selector:"ng-option",changeDetection:n.ChangeDetectionStrategy.OnPush,template:""}]}],W.ctorParameters=()=>[{type:n.ElementRef}],W.propDecorators={value:[{type:n.Input}],disabled:[{type:n.Input}]};class G{constructor(){this.notFoundText="No items found",this.typeToSearchText="Type to search",this.addTagText="Add item",this.loadingText="Loading...",this.clearAllText="Clear all",this.disableVirtualScroll=!0,this.openOnEnter=!0,this.appearance="underline"}}G.ɵprov=Object(n["ɵɵdefineInjectable"])({factory:function(){return new G},token:G,providedIn:"root"}),G.decorators=[{type:n.Injectable,args:[{providedIn:"root"}]}];const Z=new n.InjectionToken("ng-select-selection-model");class K{constructor(e,t,s,i,l,a,r){this.classes=e,this.autoFocus=t,this._cd=a,this._console=r,this.markFirst=!0,this.dropdownPosition="auto",this.loading=!1,this.closeOnSelect=!0,this.hideSelected=!1,this.selectOnTab=!1,this.bufferAmount=4,this.selectableGroup=!1,this.selectableGroupAsModel=!0,this.searchFn=null,this.trackByFn=null,this.clearOnBackspace=!0,this.labelForId=null,this.inputAttrs={},this.readonly=!1,this.searchWhileComposing=!0,this.minTermLength=0,this.editableSearchTerm=!1,this.keyDownFn=e=>!0,this.multiple=!1,this.addTag=!1,this.searchable=!0,this.clearable=!0,this.isOpen=!1,this.blurEvent=new n.EventEmitter,this.focusEvent=new n.EventEmitter,this.changeEvent=new n.EventEmitter,this.openEvent=new n.EventEmitter,this.closeEvent=new n.EventEmitter,this.searchEvent=new n.EventEmitter,this.clearEvent=new n.EventEmitter,this.addEvent=new n.EventEmitter,this.removeEvent=new n.EventEmitter,this.scroll=new n.EventEmitter,this.scrollToEnd=new n.EventEmitter,this.viewPortItems=[],this.searchTerm=null,this.dropdownId=M(),this.escapeHTML=!0,this.useDefaultClass=!0,this._items=[],this._defaultLabel="label",this._pressedKeys=[],this._isComposing=!1,this._destroy$=new u.Subject,this._keyPress$=new u.Subject,this._onChange=e=>{},this._onTouched=()=>{},this.clearItem=e=>{const t=this.selectedItems.find(t=>t.value===e);this.unselect(t)},this.trackByOption=(e,t)=>this.trackByFn?this.trackByFn(t.value):t,this._mergeGlobalConfig(s),this.itemsList=new N(this,i()),this.element=l.nativeElement}get items(){return this._items}set items(e){this._itemsAreUsed=!0,this._items=e}get compareWith(){return this._compareWith}set compareWith(e){if(null!=e&&!w(e))throw Error("`compareWith` must be a function.");this._compareWith=e}get clearSearchOnAdd(){return I(this._clearSearchOnAdd)?this._clearSearchOnAdd:this.closeOnSelect}set clearSearchOnAdd(e){this._clearSearchOnAdd=e}get disabled(){return this.readonly||this._disabled}get filtered(){return!!this.searchTerm&&this.searchable||this._isComposing}get _editableSearchTerm(){return this.editableSearchTerm&&!this.multiple}get selectedItems(){return this.itemsList.selectedItems}get selectedValues(){return this.selectedItems.map(e=>e.value)}get hasValue(){return this.selectedItems.length>0}get currentPanelPosition(){if(this.dropdownPanel)return this.dropdownPanel.currentPosition}ngOnInit(){this._handleKeyPresses(),this._setInputAttributes()}ngOnChanges(e){e.multiple&&this.itemsList.clearSelected(),e.items&&this._setItems(e.items.currentValue||[]),e.isOpen&&(this._manualOpen=I(e.isOpen.currentValue))}ngAfterViewInit(){this._itemsAreUsed||(this.escapeHTML=!1,this._setItemsFromNgOptions()),I(this.autoFocus)&&this.focus()}ngOnDestroy(){this._destroy$.next(),this._destroy$.complete()}handleKeyDown(e){if(U[e.which]){if(!1===this.keyDownFn(e))return;this.handleKeyCode(e)}else e.key&&1===e.key.length&&this._keyPress$.next(e.key.toLocaleLowerCase())}handleKeyCode(e){switch(e.which){case U.ArrowDown:this._handleArrowDown(e);break;case U.ArrowUp:this._handleArrowUp(e);break;case U.Space:this._handleSpace(e);break;case U.Enter:this._handleEnter(e);break;case U.Tab:this._handleTab(e);break;case U.Esc:this.close(),e.preventDefault();break;case U.Backspace:this._handleBackspace()}}handleMousedown(e){const t=e.target;"INPUT"!==t.tagName&&e.preventDefault(),t.classList.contains("ng-clear-wrapper")?this.handleClearClick():t.classList.contains("ng-arrow-wrapper")?this.handleArrowClick():t.classList.contains("ng-value-icon")||(this.focused||this.focus(),this.searchable?this.open():this.toggle())}handleArrowClick(){this.isOpen?this.close():this.open()}handleClearClick(){this.hasValue&&(this.itemsList.clearSelected(!0),this._updateNgModel()),this._clearSearch(),this.focus(),this.clearEvent.emit(),this._onSelectionChanged()}clearModel(){this.clearable&&(this.itemsList.clearSelected(),this._updateNgModel())}writeValue(e){this.itemsList.clearSelected(),this._handleWriteValue(e),this._cd.markForCheck()}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this._disabled=e,this._cd.markForCheck()}toggle(){this.isOpen?this.close():this.open()}open(){this.disabled||this.isOpen||this.itemsList.maxItemsSelected||this._manualOpen||(this._isTypeahead||this.addTag||!this.itemsList.noItemsToSelect)&&(this.isOpen=!0,this.itemsList.markSelectedOrDefault(this.markFirst),this.openEvent.emit(),this.searchTerm||this.focus(),this.detectChanges())}close(){this.isOpen&&!this._manualOpen&&(this.isOpen=!1,this._isComposing=!1,this._editableSearchTerm?this.itemsList.resetFilteredItems():this._clearSearch(),this.itemsList.unmarkItem(),this._onTouched(),this.closeEvent.emit(),this._cd.markForCheck())}toggleItem(e){!e||e.disabled||this.disabled||(this.multiple&&e.selected?this.unselect(e):this.select(e),this._editableSearchTerm&&this._setSearchTermFromItems(),this._onSelectionChanged())}select(e){e.selected||(this.itemsList.select(e),this.clearSearchOnAdd&&!this._editableSearchTerm&&this._clearSearch(),this._updateNgModel(),this.multiple&&this.addEvent.emit(e.value)),(this.closeOnSelect||this.itemsList.noItemsToSelect)&&this.close()}focus(){this.searchInput.nativeElement.focus()}blur(){this.searchInput.nativeElement.blur()}unselect(e){e&&(this.itemsList.unselect(e),this.focus(),this._updateNgModel(),this.removeEvent.emit(e))}selectTag(){let e;e=w(this.addTag)?this.addTag(this.searchTerm):this._primitive?this.searchTerm:{[this.bindLabel]:this.searchTerm};const t=e=>this._isTypeahead||!this.isOpen?this.itemsList.mapItem(e,null):this.itemsList.addItem(e);e instanceof Promise?e.then(e=>this.select(t(e))).catch(()=>{}):e&&this.select(t(e))}showClear(){return this.clearable&&(this.hasValue||this.searchTerm)&&!this.disabled}get showAddTag(){if(!this._validTerm)return!1;const e=this.searchTerm.toLowerCase().trim();return this.addTag&&!this.itemsList.filteredItems.some(t=>t.label.toLowerCase()===e)&&(!this.hideSelected&&this.isOpen||!this.selectedItems.some(t=>t.label.toLowerCase()===e))&&!this.loading}showNoItemsFound(){const e=0===this.itemsList.filteredItems.length;return(e&&!this._isTypeahead&&!this.loading||e&&this._isTypeahead&&this._validTerm&&!this.loading)&&!this.showAddTag}showTypeToSearch(){return 0===this.itemsList.filteredItems.length&&this._isTypeahead&&!this._validTerm&&!this.loading}onCompositionStart(){this._isComposing=!0}onCompositionEnd(e){this._isComposing=!1,this.searchWhileComposing||this.filter(e)}filter(e){this._isComposing&&!this.searchWhileComposing||(this.searchTerm=e,this._isTypeahead&&(this._validTerm||0===this.minTermLength)&&this.typeahead.next(e),this._isTypeahead||(this.itemsList.filter(this.searchTerm),this.isOpen&&this.itemsList.markSelectedOrDefault(this.markFirst)),this.searchEvent.emit({term:e,items:this.itemsList.filteredItems.map(e=>e.value)}),this.open())}onInputFocus(e){this.focused||(this._editableSearchTerm&&this._setSearchTermFromItems(),this.element.classList.add("ng-select-focused"),this.focusEvent.emit(e),this.focused=!0)}onInputBlur(e){this.element.classList.remove("ng-select-focused"),this.blurEvent.emit(e),this.isOpen||this.disabled||this._onTouched(),this._editableSearchTerm&&this._setSearchTermFromItems(),this.focused=!1}onItemHover(e){e.disabled||this.itemsList.markItem(e)}detectChanges(){this._cd.destroyed||this._cd.detectChanges()}_setSearchTermFromItems(){const e=this.selectedItems&&this.selectedItems[0];this.searchTerm=e&&e.label||null}_setItems(e){const t=e[0];this.bindLabel=this.bindLabel||this._defaultLabel,this._primitive=I(t)?!y(t):this._primitive||this.bindLabel===this._defaultLabel,this.itemsList.setItems(e),e.length>0&&this.hasValue&&this.itemsList.mapSelectedItems(),this.isOpen&&I(this.searchTerm)&&!this._isTypeahead&&this.itemsList.filter(this.searchTerm),(this._isTypeahead||this.isOpen)&&this.itemsList.markSelectedOrDefault(this.markFirst)}_setItemsFromNgOptions(){const e=e=>{this.items=e.map(e=>({$ngOptionValue:e.value,$ngOptionLabel:e.elementRef.nativeElement.innerHTML,disabled:e.disabled})),this.itemsList.setItems(this.items),this.hasValue&&this.itemsList.mapSelectedItems(),this.detectChanges()},t=()=>{const e=Object(_.merge)(this.ngOptions.changes,this._destroy$);Object(_.merge)(...this.ngOptions.map(e=>e.stateChange$)).pipe(Object(l.takeUntil)(e)).subscribe(e=>{const t=this.itemsList.findItem(e.value);t.disabled=e.disabled,t.label=e.label||t.label,this._cd.detectChanges()})};this.ngOptions.changes.pipe(Object(r.startWith)(this.ngOptions),Object(l.takeUntil)(this._destroy$)).subscribe(s=>{this.bindLabel=this._defaultLabel,e(s),t()})}_isValidWriteValue(e){if(!I(e)||this.multiple&&""===e||Array.isArray(e)&&0===e.length)return!1;const t=e=>!(!I(this.compareWith)&&y(e)&&this.bindValue)||(this._console.warn(`Setting object(${JSON.stringify(e)}) as your model with bindValue is not allowed unless [compareWith] is used.`),!1);return this.multiple?Array.isArray(e)?e.every(e=>t(e)):(this._console.warn("Multiple select ngModel should be array."),!1):t(e)}_handleWriteValue(e){if(!this._isValidWriteValue(e))return;const t=e=>{let t=this.itemsList.findItem(e);if(t)this.itemsList.select(t);else{const s=y(e),n=!s&&!this.bindValue;s||n?this.itemsList.select(this.itemsList.mapItem(e,null)):this.bindValue&&(t={[this.bindLabel]:null,[this.bindValue]:e},this.itemsList.select(this.itemsList.mapItem(t,null)))}};this.multiple?e.forEach(e=>t(e)):t(e)}_handleKeyPresses(){this.searchable||this._keyPress$.pipe(Object(l.takeUntil)(this._destroy$),Object(o.tap)(e=>this._pressedKeys.push(e)),Object(h.debounceTime)(200),Object(c.filter)(()=>this._pressedKeys.length>0),Object(d.map)(()=>this._pressedKeys.join(""))).subscribe(e=>{const t=this.itemsList.findByLabel(e);t&&(this.isOpen?(this.itemsList.markItem(t),this._scrollToMarked(),this._cd.markForCheck()):this.select(t)),this._pressedKeys=[]})}_setInputAttributes(){const e=this.searchInput.nativeElement,t=Object.assign({type:"text",autocorrect:"off",autocapitalize:"off",autocomplete:this.labelForId?"off":this.dropdownId},this.inputAttrs);for(const s of Object.keys(t))e.setAttribute(s,t[s])}_updateNgModel(){const e=[];for(const t of this.selectedItems)if(this.bindValue){let s=null;if(t.children){const e=this.groupValue?this.bindValue:this.groupBy;s=t.value[e||this.groupBy]}else s=this.itemsList.resolveNested(t.value,this.bindValue);e.push(s)}else e.push(t.value);const t=this.selectedItems.map(e=>e.value);this.multiple?(this._onChange(e),this.changeEvent.emit(t)):(this._onChange(I(e[0])?e[0]:null),this.changeEvent.emit(t[0])),this._cd.markForCheck()}_clearSearch(){this.searchTerm&&(this._changeSearch(null),this.itemsList.resetFilteredItems())}_changeSearch(e){this.searchTerm=e,this._isTypeahead&&this.typeahead.next(e)}_scrollToMarked(){this.isOpen&&this.dropdownPanel&&this.dropdownPanel.scrollTo(this.itemsList.markedItem)}_scrollToTag(){this.isOpen&&this.dropdownPanel&&this.dropdownPanel.scrollToTag()}_onSelectionChanged(){this.isOpen&&this.multiple&&this.appendTo&&(this._cd.detectChanges(),this.dropdownPanel.adjustPosition())}_handleTab(e){(!1!==this.isOpen||this.addTag)&&(this.selectOnTab?this.itemsList.markedItem?(this.toggleItem(this.itemsList.markedItem),e.preventDefault()):this.showAddTag?(this.selectTag(),e.preventDefault()):this.close():this.close())}_handleEnter(e){if(this.isOpen||this._manualOpen)this.itemsList.markedItem?this.toggleItem(this.itemsList.markedItem):this.showAddTag&&this.selectTag();else{if(!this.openOnEnter)return;this.open()}e.preventDefault()}_handleSpace(e){this.isOpen||this._manualOpen||(this.open(),e.preventDefault())}_handleArrowDown(e){this._nextItemIsTag(1)?(this.itemsList.unmarkItem(),this._scrollToTag()):(this.itemsList.markNextItem(),this._scrollToMarked()),this.open(),e.preventDefault()}_handleArrowUp(e){this.isOpen&&(this._nextItemIsTag(-1)?(this.itemsList.unmarkItem(),this._scrollToTag()):(this.itemsList.markPreviousItem(),this._scrollToMarked()),e.preventDefault())}_nextItemIsTag(e){const t=this.itemsList.markedIndex+e;return this.addTag&&this.searchTerm&&this.itemsList.markedItem&&(t<0||t===this.itemsList.filteredItems.length)}_handleBackspace(){!this.searchTerm&&this.clearable&&this.clearOnBackspace&&this.hasValue&&(this.multiple?this.unselect(this.itemsList.lastSelectedItem):this.clearModel())}get _isTypeahead(){return this.typeahead&&this.typeahead.observers.length>0}get _validTerm(){const e=this.searchTerm&&this.searchTerm.trim();return e&&e.length>=this.minTermLength}_mergeGlobalConfig(e){this.placeholder=this.placeholder||e.placeholder,this.notFoundText=this.notFoundText||e.notFoundText,this.typeToSearchText=this.typeToSearchText||e.typeToSearchText,this.addTagText=this.addTagText||e.addTagText,this.loadingText=this.loadingText||e.loadingText,this.clearAllText=this.clearAllText||e.clearAllText,this.virtualScroll=I(this.virtualScroll)?this.virtualScroll:!!I(e.disableVirtualScroll)&&!e.disableVirtualScroll,this.openOnEnter=I(this.openOnEnter)?this.openOnEnter:e.openOnEnter,this.appendTo=this.appendTo||e.appendTo,this.bindValue=this.bindValue||e.bindValue,this.bindLabel=this.bindLabel||e.bindLabel,this.appearance=this.appearance||e.appearance}}K.decorators=[{type:n.Component,args:[{selector:"ng-select",template:'\n\n
\n
{{placeholder}}
\n\n \n
\n \n \n \n \n\n \n \n
\n
\n\n \n \n\n
\n\n \n
\n
\n\n \n \n
\n
\n\n \n \n
\n\n \n \n \n\n \n \n \n\n\n\n\n \n
\n\n \n \n \n\n \n \n
\n\n
\n \n {{addTagText}}"{{searchTerm}}"\n \n\n \n \n
\n
\n\n \n \n
{{notFoundText}}
\n
\n\n \n \n
\n\n \n \n
{{typeToSearchText}}
\n
\n\n \n \n
\n\n \n \n
{{loadingText}}
\n
\n\n \n \n
\n\n
\n',providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:Object(n.forwardRef)(()=>K),multi:!0},j],encapsulation:n.ViewEncapsulation.None,changeDetection:n.ChangeDetectionStrategy.OnPush,host:{"[class.ng-select]":"useDefaultClass","[class.ng-select-single]":"!multiple"},styles:['.ng-select{display:block;position:relative}.ng-select,.ng-select div,.ng-select input,.ng-select span{box-sizing:border-box}.ng-select [hidden]{display:none}.ng-select.ng-select-searchable .ng-select-container .ng-value-container .ng-input{opacity:1}.ng-select.ng-select-opened .ng-select-container{z-index:1001}.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder,.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;user-select:none}.ng-select.ng-select-disabled .ng-arrow-wrapper{cursor:default}.ng-select.ng-select-filtered .ng-placeholder{display:none}.ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}.ng-select .ng-select-container .ng-value-container{display:flex;flex:1}.ng-select .ng-select-container .ng-value-container .ng-input{opacity:0}.ng-select .ng-select-container .ng-value-container .ng-input>input{background:none transparent;border:0;box-shadow:none;box-sizing:content-box;cursor:default;outline:none;padding:0;width:100%}.ng-select .ng-select-container .ng-value-container .ng-input>input::-ms-clear{display:none}.ng-select .ng-select-container .ng-value-container .ng-input>input[readonly]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;padding:0;user-select:none;width:0}.ng-select.ng-select-single.ng-select-filtered .ng-select-container .ng-value-container .ng-value{visibility:hidden}.ng-select.ng-select-single .ng-select-container .ng-value-container,.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;position:absolute;width:100%}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{flex-wrap:wrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{position:absolute}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:nowrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{cursor:pointer}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{flex:1;z-index:2}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{z-index:1}.ng-select .ng-clear-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;user-select:none;width:17px}.ng-select .ng-clear-wrapper .ng-clear{display:inline-block;font-size:18px;line-height:1;pointer-events:none}.ng-select .ng-spinner-loader{-webkit-animation:load8 .8s linear infinite;animation:load8 .8s linear infinite;border:2px solid rgba(66,66,66,.2);border-left-color:#424242;border-radius:50%;font-size:10px;height:17px;margin-right:5px;position:relative;text-indent:-9999em;transform:translateZ(0);width:17px}.ng-select .ng-spinner-loader:after{border-radius:50%;height:17px;width:17px}@-webkit-keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ng-select .ng-arrow-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;text-align:center;user-select:none}.ng-select .ng-arrow-wrapper .ng-arrow{display:inline-block;height:0;pointer-events:none;position:relative;width:0}.ng-dropdown-panel{-webkit-overflow-scrolling:touch;box-sizing:border-box;opacity:0;position:absolute;width:100%;z-index:1050}.ng-dropdown-panel .ng-dropdown-panel-items{box-sizing:border-box;display:block;height:auto;max-height:240px;overflow-y:auto}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-option-label:empty:before{content:"\\200b"}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .highlighted{font-weight:700;text-decoration:underline}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.disabled{cursor:default}.ng-dropdown-panel .scroll-host{-webkit-overflow-scrolling:touch;display:block;overflow:hidden;overflow-y:auto;position:relative}.ng-dropdown-panel .scrollable-content{height:100%;left:0;position:absolute;top:0;width:100%}.ng-dropdown-panel .total-padding{opacity:0;width:1px}']}]}],K.ctorParameters=()=>[{type:String,decorators:[{type:n.Attribute,args:["class"]}]},{type:void 0,decorators:[{type:n.Attribute,args:["autofocus"]}]},{type:G},{type:void 0,decorators:[{type:n.Inject,args:[Z]}]},{type:n.ElementRef},{type:n.ChangeDetectorRef},{type:F}],K.propDecorators={bindLabel:[{type:n.Input}],bindValue:[{type:n.Input}],markFirst:[{type:n.Input}],placeholder:[{type:n.Input}],notFoundText:[{type:n.Input}],typeToSearchText:[{type:n.Input}],addTagText:[{type:n.Input}],loadingText:[{type:n.Input}],clearAllText:[{type:n.Input}],appearance:[{type:n.Input}],dropdownPosition:[{type:n.Input}],appendTo:[{type:n.Input}],loading:[{type:n.Input}],closeOnSelect:[{type:n.Input}],hideSelected:[{type:n.Input}],selectOnTab:[{type:n.Input}],openOnEnter:[{type:n.Input}],maxSelectedItems:[{type:n.Input}],groupBy:[{type:n.Input}],groupValue:[{type:n.Input}],bufferAmount:[{type:n.Input}],virtualScroll:[{type:n.Input}],selectableGroup:[{type:n.Input}],selectableGroupAsModel:[{type:n.Input}],searchFn:[{type:n.Input}],trackByFn:[{type:n.Input}],clearOnBackspace:[{type:n.Input}],labelForId:[{type:n.Input}],inputAttrs:[{type:n.Input}],tabIndex:[{type:n.Input}],readonly:[{type:n.Input}],searchWhileComposing:[{type:n.Input}],minTermLength:[{type:n.Input}],editableSearchTerm:[{type:n.Input}],keyDownFn:[{type:n.Input}],typeahead:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-typeahead"]}],multiple:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-multiple"]}],addTag:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-taggable"]}],searchable:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-searchable"]}],clearable:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-clearable"]}],isOpen:[{type:n.Input},{type:n.HostBinding,args:["class.ng-select-opened"]}],items:[{type:n.Input}],compareWith:[{type:n.Input}],clearSearchOnAdd:[{type:n.Input}],blurEvent:[{type:n.Output,args:["blur"]}],focusEvent:[{type:n.Output,args:["focus"]}],changeEvent:[{type:n.Output,args:["change"]}],openEvent:[{type:n.Output,args:["open"]}],closeEvent:[{type:n.Output,args:["close"]}],searchEvent:[{type:n.Output,args:["search"]}],clearEvent:[{type:n.Output,args:["clear"]}],addEvent:[{type:n.Output,args:["add"]}],removeEvent:[{type:n.Output,args:["remove"]}],scroll:[{type:n.Output,args:["scroll"]}],scrollToEnd:[{type:n.Output,args:["scrollToEnd"]}],optionTemplate:[{type:n.ContentChild,args:[O,{read:n.TemplateRef}]}],optgroupTemplate:[{type:n.ContentChild,args:[x,{read:n.TemplateRef}]}],labelTemplate:[{type:n.ContentChild,args:[C,{read:n.TemplateRef}]}],multiLabelTemplate:[{type:n.ContentChild,args:[L,{read:n.TemplateRef}]}],headerTemplate:[{type:n.ContentChild,args:[k,{read:n.TemplateRef}]}],footerTemplate:[{type:n.ContentChild,args:[E,{read:n.TemplateRef}]}],notFoundTemplate:[{type:n.ContentChild,args:[P,{read:n.TemplateRef}]}],typeToSearchTemplate:[{type:n.ContentChild,args:[A,{read:n.TemplateRef}]}],loadingTextTemplate:[{type:n.ContentChild,args:[D,{read:n.TemplateRef}]}],tagTemplate:[{type:n.ContentChild,args:[V,{read:n.TemplateRef}]}],loadingSpinnerTemplate:[{type:n.ContentChild,args:[R,{read:n.TemplateRef}]}],dropdownPanel:[{type:n.ViewChild,args:[Object(n.forwardRef)(()=>$)]}],searchInput:[{type:n.ViewChild,args:["searchInput",{static:!0}]}],ngOptions:[{type:n.ContentChildren,args:[W,{descendants:!0}]}],disabled:[{type:n.HostBinding,args:["class.ng-select-disabled"]}],filtered:[{type:n.HostBinding,args:["class.ng-select-filtered"]}],handleKeyDown:[{type:n.HostListener,args:["keydown",["$event"]]}]};class Y{constructor(){this._selected=[]}get value(){return this._selected}select(e,t,s){if(e.selected=!0,(!e.children||!t&&s)&&this._selected.push(e),t)if(e.parent){const t=e.parent.children.length,s=e.parent.children.filter(e=>e.selected).length;e.parent.selected=t===s}else e.children&&(this._setChildrenSelectedState(e.children,!0),this._removeChildren(e),s&&this._activeChildren(e)?this._selected=[...this._selected.filter(t=>t.parent!==e),e]:this._selected=[...this._selected,...e.children.filter(e=>!e.disabled)])}unselect(e,t){if(this._selected=this._selected.filter(t=>t!==e),e.selected=!1,t)if(e.parent&&e.parent.selected){const t=e.parent.children;this._removeParent(e.parent),this._removeChildren(e.parent),this._selected.push(...t.filter(t=>t!==e&&!t.disabled)),e.parent.selected=!1}else e.children&&(this._setChildrenSelectedState(e.children,!1),this._removeChildren(e))}clear(e){this._selected=e?this._selected.filter(e=>e.disabled):[]}_setChildrenSelectedState(e,t){for(const s of e)s.disabled||(s.selected=t)}_removeChildren(e){this._selected=[...this._selected.filter(t=>t.parent!==e),...e.children.filter(t=>t.parent===e&&t.disabled&&t.selected)]}_removeParent(e){this._selected=this._selected.filter(t=>t!==e)}_activeChildren(e){return e.children.every(e=>!e.disabled||e.selected)}}const J=function(){return new Y};class q{}q.decorators=[{type:n.NgModule,args:[{declarations:[$,W,K,x,O,C,L,k,E,P,A,D,V,R,S],imports:[f.CommonModule],exports:[K,W,x,O,C,L,k,E,P,A,D,V,R],providers:[{provide:Z,useValue:J}]}]}]}}]); -//# sourceMappingURL=kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js.map \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js.map b/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js.map deleted file mode 100644 index cb67ff6..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///../node_modules/src/ng-select/lib/value-utils.ts","webpack:///../node_modules/src/ng-select/lib/ng-templates.directive.ts","webpack:///../node_modules/src/ng-select/lib/console.service.ts","webpack:///../node_modules/src/ng-select/lib/id.ts","webpack:///../node_modules/src/ng-select/lib/search-helper.ts","webpack:///../node_modules/src/ng-select/lib/items-list.ts","webpack:///../node_modules/src/ng-select/lib/ng-select.types.ts","webpack:///../node_modules/src/ng-select/lib/ng-dropdown-panel.service.ts","webpack:///../node_modules/src/ng-select/lib/ng-dropdown-panel.component.ts","webpack:///../node_modules/src/ng-select/lib/ng-option.component.ts","webpack:///../node_modules/src/ng-select/lib/config.service.ts","webpack:///../node_modules/src/ng-select/lib/ng-select.component.ts","webpack:///../node_modules/src/ng-select/lib/selection-model.ts","webpack:///../node_modules/src/ng-select/lib/ng-select.module.ts"],"names":["unescapedHTMLExp","hasUnescapedHTMLExp","RegExp","source","htmlEscapes","'","isDefined","value","isObject","isFunction","Function","NgItemLabelDirective","element","escape","changes","string","this","nativeElement","innerHTML","ngItemLabel","test","replace","chr","selector","NgOptionTemplateDirective","template","NgOptgroupTemplateDirective","NgLabelTemplateDirective","NgMultiLabelTemplateDirective","NgHeaderTemplateDirective","NgFooterTemplateDirective","NgNotFoundTemplateDirective","NgTypeToSearchTemplateDirective","NgLoadingTextTemplateDirective","NgTagTemplateDirective","NgLoadingSpinnerTemplateDirective","ConsoleService","message","console","warn","newId","_","Math","random","toString","providedIn","diacritics","stripSpecialChars","text","a","ItemsList","_ngSelect","_selectionModel","_items","_filteredItems","_markedIndex","hideSelected","length","selectedItems","multiple","maxSelectedItems","i","item","disabled","items","map","index","mapItem","groupBy","_groups","_groupBy","_flatten","Map","set","undefined","selected","maxItemsSelected","clearSelected","select","selectableGroupAsModel","_hideSelected","unselect","_showSelected","findBy","compareWith","bindValue","children","resolveNested","label","bindLabel","find","option","push","keepDisabled","clear","forEach","marked","resetFilteredItems","term","searchHelper.stripSpecialChars","toLocaleLowerCase","filteredItems","substr","searchFn","match","_defaultSearchFn","key","Array","from","keys","matchedItems","get","parent","last","slice","head","x","filter","_stepToItem","indexOf","markDefault","lastMarkedIndex","_getLastMarkedIndex","findIndex","split","len","$ngOptionLabel","$ngOptionValue","htmlId","dropdownId","findItem","child","sort","b","every","search","opt","steps","_getNextItemIndex","markedItem","selectedIndex","lastSelectedItem","max","markedIndex","prop","groups","isArray","isFnKey","keyFn","group","isGroupByFn","withoutGroup","isObjectKey","String","selectableGroup","groupKey","groupValue","KeyCode","NgDropdownPanelService","_dimensions","itemHeight","panelHeight","itemsPerViewport","scrollPos","itemsLength","buffer","d","scrollHeight","indexByScrollTop","end","min","ceil","maxStartEnd","maxStart","start","floor","topPadding","isNaN","itemTop","lastScroll","dimensions","itemBottom","bottom","SCROLL_SCHEDULER","requestAnimationFrame","NgDropdownPanelComponent","_renderer","_zone","_panelService","_elementRef","_document","position","virtualScroll","filterValue","update","scroll","scrollToEnd","outsideClick","_destroy$","_scrollToEndFired","_updateScrollHeight","_lastScrollPosition","_dropdown","_currentPosition","_itemsLength","_onItemsLengthChanged","offset","$event","target","tagName","preventDefault","_select","parentElement","_virtualPadding","paddingElementRef","_scrollablePanel","scrollElementRef","_contentPanel","contentElementRef","_handleScroll","_handleOutsideClick","_appendDropdown","change","_onItemsChange","currentValue","firstChange","next","complete","unsubscribe","appendTo","removeChild","parentNode","startFromOption","scrollTo","getScrollTo","querySelector","offsetTop","clientHeight","scrollTop","panel","_updateYPosition","_calculateCurrentPosition","addClass","removeClass","style","opacity","runOutsideAngular","pipe","subscribe","e","path","composedPath","_onContentScrolled","capture","_checkToClose","contains","shadowRoot","run","emit","_updateItemsRange","_setVirtualHeight","_updateItems","Promise","resolve","then","setDimensions","_handleDropdownPosition","_measureDimensions","_renderItemsRange","_startOffset","_fireScrollToEnd","height","range","calculateItems","bufferAmount","_updateVirtualHeight","transform","first","optionHeight","padding","dropdownEl","selectRect","getBoundingClientRect","document","documentElement","body","top","window","pageYOffset","_parent","Error","_updateXPosition","appendChild","offsetLeft","left","width","minWidth","delta","offsetBottom","changeDetection","OnPush","encapsulation","None","read","static","NgOptionComponent","elementRef","stateChange$","_disabled","_isDisabled","textContent","trim","_previousLabel","NgSelectConfig","notFoundText","typeToSearchText","addTagText","loadingText","clearAllText","disableVirtualScroll","openOnEnter","appearance","SELECTION_MODEL_FACTORY","NgSelectComponent","classes","autoFocus","config","newSelectionModel","_cd","_console","markFirst","dropdownPosition","loading","closeOnSelect","selectOnTab","trackByFn","clearOnBackspace","labelForId","inputAttrs","readonly","searchWhileComposing","minTermLength","editableSearchTerm","keyDownFn","addTag","searchable","clearable","isOpen","blurEvent","focusEvent","changeEvent","openEvent","closeEvent","searchEvent","clearEvent","addEvent","removeEvent","viewPortItems","searchTerm","escapeHTML","useDefaultClass","_defaultLabel","_pressedKeys","_isComposing","_keyPress$","_onChange","_onTouched","clearItem","trackByOption","_mergeGlobalConfig","itemsList","_itemsAreUsed","_compareWith","fn","_clearSearchOnAdd","dropdownPanel","currentPosition","_handleKeyPresses","_setInputAttributes","_setItems","_manualOpen","_setItemsFromNgOptions","focus","which","handleKeyCode","ArrowDown","_handleArrowDown","ArrowUp","_handleArrowUp","Space","_handleSpace","Enter","_handleEnter","Tab","_handleTab","Esc","close","Backspace","_handleBackspace","classList","handleClearClick","handleArrowClick","focused","open","toggle","hasValue","_updateNgModel","_clearSearch","_onSelectionChanged","_handleWriteValue","markForCheck","state","_isTypeahead","noItemsToSelect","markSelectedOrDefault","detectChanges","_editableSearchTerm","unmarkItem","_setSearchTermFromItems","clearSearchOnAdd","searchInput","blur","tag","_primitive","handleTag","addItem","catch","_validTerm","toLowerCase","some","empty","showAddTag","typeahead","add","remove","markItem","destroyed","firstItem","setItems","mapSelectedItems","mapNgOptions","options","handleOptionChange","changedOrDestroyed","ngOptions","validateBinding","JSON","stringify","ngModel","_isValidWriteValue","val","isValObject","isPrimitive","letter","join","findByLabel","_scrollToMarked","input","attributes","type","autocorrect","autocapitalize","autocomplete","Object","setAttribute","model","_changeSearch","scrollToTag","adjustPosition","toggleItem","selectTag","_nextItemIsTag","_scrollToTag","markNextItem","markPreviousItem","nextStep","nextIndex","clearModel","observers","placeholder","providers","provide","useExisting","multi","host","descendants","DefaultSelectionModel","_selected","groupAsModel","childrenCount","selectedCount","_setChildrenSelectedState","_removeChildren","_activeChildren","_removeParent","NgSelectModule","declarations","imports","exports","useValue"],"mappings":"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ACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,I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","file":"kpi-overview-runtime-widget-vendors~30536edd.edd64d774274cc93dcc5.js","sourcesContent":["const unescapedHTMLExp = /[&<>\"']/g;\nconst hasUnescapedHTMLExp = RegExp(unescapedHTMLExp.source);\nconst htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\n\nexport function escapeHTML(string: string) {\n return (string && hasUnescapedHTMLExp.test(string)) ?\n string.replace(unescapedHTMLExp, chr => htmlEscapes[chr]) :\n string;\n}\n\nexport function isDefined(value: any) {\n return value !== undefined && value !== null;\n}\n\nexport function isObject(value: any) {\n return typeof value === 'object' && isDefined(value);\n}\n\nexport function isPromise(value: any) {\n return value instanceof Promise;\n}\n\nexport function isFunction(value: any) {\n return value instanceof Function;\n}\n","import { Directive, ElementRef, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { escapeHTML } from './value-utils';\n\n@Directive({ selector: '[ngItemLabel]' })\nexport class NgItemLabelDirective implements OnChanges {\n @Input() ngItemLabel: string;\n @Input() escape = true;\n\n constructor(private element: ElementRef) { }\n\n ngOnChanges(changes: SimpleChanges) {\n this.element.nativeElement.innerHTML = this.escape ?\n escapeHTML(this.ngItemLabel) :\n this.ngItemLabel;\n }\n}\n\n@Directive({ selector: '[ng-option-tmp]' })\nexport class NgOptionTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-optgroup-tmp]' })\nexport class NgOptgroupTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-label-tmp]' })\nexport class NgLabelTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-multi-label-tmp]' })\nexport class NgMultiLabelTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-header-tmp]' })\nexport class NgHeaderTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-footer-tmp]' })\nexport class NgFooterTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-notfound-tmp]' })\nexport class NgNotFoundTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-typetosearch-tmp]' })\nexport class NgTypeToSearchTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-loadingtext-tmp]' })\nexport class NgLoadingTextTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-tag-tmp]' })\nexport class NgTagTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n\n@Directive({ selector: '[ng-loadingspinner-tmp]' })\nexport class NgLoadingSpinnerTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n warn(message: string) {\n console.warn(message)\n }\n}\n","export function newId() {\n // First character is an 'a', it's good practice to tag id to begin with a letter\n return 'axxxxxxxxxxx'.replace(/[x]/g, function (_) {\n // tslint:disable-next-line:no-bitwise\n const val = Math.random() * 16 | 0;\n return val.toString(16);\n });\n}\n","const diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n};\n\nexport function stripSpecialChars(text: string): string {\n const match = (a: string): string => {\n return diacritics[a] || a;\n };\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","import { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map;\n\nexport class ItemsList {\n private _groups: OptionGroups;\n\n constructor(\n private _ngSelect: NgSelectComponent,\n private _selectionModel: SelectionModel) {\n }\n\n private _items: NgOption[] = [];\n\n get items(): NgOption[] {\n return this._items;\n }\n\n private _filteredItems: NgOption[] = [];\n\n get filteredItems(): NgOption[] {\n return this._filteredItems;\n }\n\n private _markedIndex = -1;\n\n get markedIndex(): number {\n return this._markedIndex;\n }\n\n get selectedItems() {\n return this._selectionModel.value;\n }\n\n get markedItem(): NgOption {\n return this._filteredItems[this._markedIndex];\n }\n\n get noItemsToSelect(): boolean {\n return this._ngSelect.hideSelected && this._items.length === this.selectedItems.length;\n }\n\n get maxItemsSelected(): boolean {\n return this._ngSelect.multiple && this._ngSelect.maxSelectedItems <= this.selectedItems.length;\n }\n\n get lastSelectedItem() {\n let i = this.selectedItems.length - 1;\n for (; i >= 0; i--) {\n let item = this.selectedItems[i];\n if (!item.disabled) {\n return item;\n }\n }\n return null;\n }\n\n setItems(items: any[]) {\n this._items = items.map((item, index) => this.mapItem(item, index));\n if (this._ngSelect.groupBy) {\n this._groups = this._groupBy(this._items, this._ngSelect.groupBy);\n this._items = this._flatten(this._groups);\n } else {\n this._groups = new Map();\n this._groups.set(undefined, this._items)\n }\n this._filteredItems = [...this._items];\n }\n\n select(item: NgOption) {\n if (item.selected || this.maxItemsSelected) {\n return;\n }\n const multiple = this._ngSelect.multiple;\n if (!multiple) {\n this.clearSelected();\n }\n\n this._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel);\n if (this._ngSelect.hideSelected) {\n this._hideSelected(item);\n }\n }\n\n unselect(item: NgOption) {\n if (!item.selected) {\n return;\n }\n this._selectionModel.unselect(item, this._ngSelect.multiple);\n if (this._ngSelect.hideSelected && isDefined(item.index) && this._ngSelect.multiple) {\n this._showSelected(item);\n }\n }\n\n findItem(value: any): NgOption {\n let findBy: (item: NgOption) => boolean;\n if (this._ngSelect.compareWith) {\n findBy = item => this._ngSelect.compareWith(item.value, value)\n } else if (this._ngSelect.bindValue) {\n findBy = item => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue) === value\n } else {\n findBy = item => item.value === value ||\n !item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel)\n }\n return this._items.find(item => findBy(item));\n }\n\n addItem(item: any) {\n const option = this.mapItem(item, this._items.length);\n this._items.push(option);\n this._filteredItems.push(option);\n return option;\n }\n\n clearSelected(keepDisabled = false) {\n this._selectionModel.clear(keepDisabled);\n this._items.forEach(item => {\n item.selected = keepDisabled && item.selected && item.disabled;\n item.marked = false;\n });\n if (this._ngSelect.hideSelected) {\n this.resetFilteredItems();\n }\n }\n\n findByLabel(term: string) {\n term = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n return this.filteredItems.find(item => {\n const label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n return label.substr(0, term.length) === term;\n });\n }\n\n filter(term: string): void {\n if (!term) {\n this.resetFilteredItems();\n return;\n }\n\n this._filteredItems = [];\n term = this._ngSelect.searchFn ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n const match = this._ngSelect.searchFn || this._defaultSearchFn;\n const hideSelected = this._ngSelect.hideSelected;\n\n for (const key of Array.from(this._groups.keys())) {\n const matchedItems = [];\n for (const item of this._groups.get(key)) {\n if (hideSelected && (item.parent && item.parent.selected || item.selected)) {\n continue;\n }\n const searchItem = this._ngSelect.searchFn ? item.value : item;\n if (match(term, searchItem)) {\n matchedItems.push(item);\n }\n }\n if (matchedItems.length > 0) {\n const [last] = matchedItems.slice(-1);\n if (last.parent) {\n const head = this._items.find(x => x === last.parent);\n this._filteredItems.push(head);\n }\n this._filteredItems.push(...matchedItems);\n }\n }\n }\n\n resetFilteredItems() {\n if (this._filteredItems.length === this._items.length) {\n return;\n }\n\n if (this._ngSelect.hideSelected && this.selectedItems.length > 0) {\n this._filteredItems = this._items.filter(x => !x.selected);\n } else {\n this._filteredItems = this._items;\n }\n }\n\n unmarkItem() {\n this._markedIndex = -1;\n }\n\n markNextItem() {\n this._stepToItem(+1);\n }\n\n markPreviousItem() {\n this._stepToItem(-1);\n }\n\n markItem(item: NgOption) {\n this._markedIndex = this._filteredItems.indexOf(item);\n }\n\n markSelectedOrDefault(markDefault?: boolean) {\n if (this._filteredItems.length === 0) {\n return;\n }\n\n const lastMarkedIndex = this._getLastMarkedIndex();\n if (lastMarkedIndex > -1) {\n this._markedIndex = lastMarkedIndex;\n } else {\n this._markedIndex = markDefault ? this.filteredItems.findIndex(x => !x.disabled) : -1;\n }\n }\n\n resolveNested(option: any, key: string): any {\n if (!isObject(option)) {\n return option;\n }\n if (key.indexOf('.') === -1) {\n return option[key];\n } else {\n let keys: string[] = key.split('.');\n let value = option;\n for (let i = 0, len = keys.length; i < len; ++i) {\n if (value == null) {\n return null;\n }\n value = value[keys[i]];\n }\n return value;\n }\n }\n\n mapItem(item: any, index: number): NgOption {\n const label = isDefined(item.$ngOptionLabel) ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel);\n const value = isDefined(item.$ngOptionValue) ? item.$ngOptionValue : item;\n return {\n index: index,\n label: isDefined(label) ? label.toString() : '',\n value: value,\n disabled: item.disabled,\n htmlId: `${this._ngSelect.dropdownId}-${index}`,\n };\n }\n\n mapSelectedItems() {\n const multiple = this._ngSelect.multiple;\n for (const selected of this.selectedItems) {\n const value = this._ngSelect.bindValue ? this.resolveNested(selected.value, this._ngSelect.bindValue) : selected.value;\n const item = isDefined(value) ? this.findItem(value) : null;\n this._selectionModel.unselect(selected, multiple);\n this._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel);\n }\n\n if (this._ngSelect.hideSelected) {\n this._filteredItems = this.filteredItems.filter(x => this.selectedItems.indexOf(x) === -1);\n }\n }\n\n private _showSelected(item: NgOption) {\n this._filteredItems.push(item);\n if (item.parent) {\n const parent = item.parent;\n const parentExists = this._filteredItems.find(x => x === parent);\n if (!parentExists) {\n this._filteredItems.push(parent);\n }\n } else if (item.children) {\n for (const child of item.children) {\n child.selected = false;\n this._filteredItems.push(child);\n }\n }\n this._filteredItems = [...this._filteredItems.sort((a, b) => (a.index - b.index))];\n }\n\n private _hideSelected(item: NgOption) {\n this._filteredItems = this._filteredItems.filter(x => x !== item);\n if (item.parent) {\n const children = item.parent.children;\n if (children.every(x => x.selected)) {\n this._filteredItems = this._filteredItems.filter(x => x !== item.parent);\n }\n } else if (item.children) {\n this._filteredItems = this.filteredItems.filter(x => x.parent !== item);\n }\n }\n\n private _defaultSearchFn(search: string, opt: NgOption) {\n const label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n return label.indexOf(search) > -1\n }\n\n private _getNextItemIndex(steps: number) {\n if (steps > 0) {\n return (this._markedIndex >= this._filteredItems.length - 1) ? 0 : (this._markedIndex + 1);\n }\n return (this._markedIndex <= 0) ? (this._filteredItems.length - 1) : (this._markedIndex - 1);\n }\n\n private _stepToItem(steps: number) {\n if (this._filteredItems.length === 0 || this._filteredItems.every(x => x.disabled)) {\n return;\n }\n\n this._markedIndex = this._getNextItemIndex(steps);\n if (this.markedItem.disabled) {\n this._stepToItem(steps);\n }\n }\n\n private _getLastMarkedIndex() {\n if (this._ngSelect.hideSelected) {\n return -1;\n }\n\n if (this._markedIndex > -1 && this.markedItem === undefined) {\n return -1;\n }\n\n const selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n if (this.lastSelectedItem && selectedIndex < 0) {\n return -1;\n }\n\n return Math.max(this.markedIndex, selectedIndex);\n }\n\n private _groupBy(items: NgOption[], prop: string | Function): OptionGroups {\n const groups = new Map();\n if (items.length === 0) {\n return groups;\n }\n\n // Check if items are already grouped by given key.\n if (Array.isArray(items[0].value[prop])) {\n for (const item of items) {\n const children = (item.value[prop] || []).map((x, index) => this.mapItem(x, index));\n groups.set(item, children);\n }\n return groups;\n }\n\n const isFnKey = isFunction(this._ngSelect.groupBy);\n const keyFn = (item: NgOption) => {\n let key = isFnKey ? (prop)(item.value) : item.value[prop];\n return isDefined(key) ? key : undefined;\n };\n\n // Group items by key.\n for (const item of items) {\n let key = keyFn(item);\n const group = groups.get(key);\n if (group) {\n group.push(item);\n } else {\n groups.set(key, [item]);\n }\n }\n return groups;\n }\n\n private _flatten(groups: OptionGroups) {\n const isGroupByFn = isFunction(this._ngSelect.groupBy);\n const items = [];\n for (const key of Array.from(groups.keys())) {\n let i = items.length;\n if (key === undefined) {\n const withoutGroup = groups.get(undefined) || [];\n items.push(...withoutGroup.map(x => {\n x.index = i++;\n return x;\n }));\n continue;\n }\n\n const isObjectKey = isObject(key);\n const parent: NgOption = {\n label: isObjectKey ? '' : String(key),\n children: undefined,\n parent: null,\n index: i++,\n disabled: !this._ngSelect.selectableGroup,\n htmlId: newId(),\n };\n const groupKey = isGroupByFn ? this._ngSelect.bindLabel : this._ngSelect.groupBy;\n const groupValue = this._ngSelect.groupValue || (() => {\n if (isObjectKey) {\n return (key).value;\n }\n return { [groupKey]: key };\n });\n const children = groups.get(key).map(x => {\n x.parent = parent;\n x.children = undefined;\n x.index = i++;\n return x;\n });\n parent.children = children;\n parent.value = groupValue(key, children.map(x => x.value));\n items.push(parent);\n items.push(...children);\n }\n return items;\n }\n}\n","export interface NgOption {\n [name: string]: any;\n index?: number;\n htmlId?: string;\n selected?: boolean;\n disabled?: boolean;\n marked?: boolean;\n label?: string;\n value?: string | Object;\n parent?: NgOption;\n children?: NgOption[];\n}\n\nexport enum KeyCode {\n Tab = 9,\n Enter = 13,\n Esc = 27,\n Space = 32,\n ArrowUp = 38,\n ArrowDown = 40,\n Backspace = 8\n}\n","import { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n scrollHeight: number;\n topPadding: number;\n start: number;\n end: number;\n}\n\nexport interface PanelDimensions {\n itemHeight: number;\n panelHeight: number;\n itemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\n private _dimensions: PanelDimensions = {\n itemHeight: 0,\n panelHeight: 0,\n itemsPerViewport: 0\n };\n\n get dimensions() {\n return this._dimensions;\n }\n\n calculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n const d = this._dimensions;\n const scrollHeight = d.itemHeight * itemsLength;\n\n const scrollTop = Math.max(0, scrollPos);\n const indexByScrollTop = scrollTop / scrollHeight * itemsLength;\n let end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n const maxStartEnd = end;\n const maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n let start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n let topPadding = d.itemHeight * Math.ceil(start) - (d.itemHeight * Math.min(start, buffer));\n topPadding = !isNaN(topPadding) ? topPadding : 0;\n start = !isNaN(start) ? start : -1;\n end = !isNaN(end) ? end : -1;\n start -= buffer;\n start = Math.max(0, start);\n end += buffer;\n end = Math.min(itemsLength, end);\n\n return {\n topPadding,\n scrollHeight,\n start,\n end\n }\n }\n\n setDimensions(itemHeight: number, panelHeight: number) {\n const itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n this._dimensions = {\n itemHeight,\n panelHeight,\n itemsPerViewport\n };\n }\n\n getScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n const { panelHeight } = this.dimensions;\n const itemBottom = itemTop + itemHeight;\n const top = lastScroll;\n const bottom = top + panelHeight;\n\n if (panelHeight >= itemBottom && lastScroll === itemTop) {\n return null;\n }\n\n if (itemBottom > bottom) {\n return top + itemBottom - bottom;\n } else if (itemTop <= top) {\n return itemTop;\n }\n\n return null;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { animationFrameScheduler, asapScheduler, fromEvent, merge, Subject } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\nimport { DropdownPosition } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst TOP_CSS_CLASS = 'ng-select-top';\nconst BOTTOM_CSS_CLASS = 'ng-select-bottom';\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n selector: 'ng-dropdown-panel',\n template: `\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n \n
\n `\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() items: NgOption[] = [];\n @Input() markedItem: NgOption;\n @Input() position: DropdownPosition = 'auto';\n @Input() appendTo: string;\n @Input() bufferAmount;\n @Input() virtualScroll = false;\n @Input() headerTemplate: TemplateRef;\n @Input() footerTemplate: TemplateRef;\n @Input() filterValue: string = null;\n\n @Output() update = new EventEmitter();\n @Output() scroll = new EventEmitter<{ start: number; end: number }>();\n @Output() scrollToEnd = new EventEmitter();\n @Output() outsideClick = new EventEmitter();\n\n @ViewChild('content', { read: ElementRef, static: true }) contentElementRef: ElementRef;\n @ViewChild('scroll', { read: ElementRef, static: true }) scrollElementRef: ElementRef;\n @ViewChild('padding', { read: ElementRef, static: true }) paddingElementRef: ElementRef;\n\n private readonly _destroy$ = new Subject();\n private readonly _dropdown: HTMLElement;\n private _virtualPadding: HTMLElement;\n private _scrollablePanel: HTMLElement;\n private _contentPanel: HTMLElement;\n private _select: HTMLElement;\n private _parent: HTMLElement;\n private _scrollToEndFired = false;\n private _updateScrollHeight = false;\n private _lastScrollPosition = 0;\n\n constructor(\n private _renderer: Renderer2,\n private _zone: NgZone,\n private _panelService: NgDropdownPanelService,\n _elementRef: ElementRef,\n @Optional() @Inject(DOCUMENT) private _document: any\n ) {\n this._dropdown = _elementRef.nativeElement;\n }\n\n private _currentPosition: DropdownPosition;\n\n get currentPosition(): DropdownPosition {\n return this._currentPosition;\n }\n\n private _itemsLength: number;\n\n private get itemsLength() {\n return this._itemsLength;\n }\n\n private set itemsLength(value: number) {\n if (value !== this._itemsLength) {\n this._itemsLength = value;\n this._onItemsLengthChanged();\n }\n }\n\n private get _startOffset() {\n if (this.markedItem) {\n const { itemHeight, panelHeight } = this._panelService.dimensions;\n const offset = this.markedItem.index * itemHeight;\n return panelHeight > offset ? 0 : offset;\n }\n return 0;\n }\n\n @HostListener('mousedown', ['$event'])\n handleMousedown($event: MouseEvent) {\n const target = $event.target as HTMLElement;\n if (target.tagName === 'INPUT') {\n return;\n }\n $event.preventDefault();\n }\n\n ngOnInit() {\n this._select = this._dropdown.parentElement;\n this._virtualPadding = this.paddingElementRef.nativeElement;\n this._scrollablePanel = this.scrollElementRef.nativeElement;\n this._contentPanel = this.contentElementRef.nativeElement;\n this._handleScroll();\n this._handleOutsideClick();\n this._appendDropdown();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.items) {\n const change = changes.items;\n this._onItemsChange(change.currentValue, change.firstChange);\n }\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n this._destroy$.unsubscribe();\n if (this.appendTo) {\n this._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n }\n }\n\n scrollTo(option: NgOption, startFromOption = false) {\n if (!option) {\n return;\n }\n\n const index = this.items.indexOf(option);\n if (index < 0 || index >= this.itemsLength) {\n return;\n }\n\n let scrollTo;\n if (this.virtualScroll) {\n const itemHeight = this._panelService.dimensions.itemHeight;\n scrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n } else {\n const item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n const lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n scrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n }\n\n if (isDefined(scrollTo)) {\n this._scrollablePanel.scrollTop = scrollTo;\n }\n }\n\n scrollToTag() {\n const panel = this._scrollablePanel;\n panel.scrollTop = panel.scrollHeight - panel.clientHeight;\n }\n\n adjustPosition() {\n this._updateYPosition();\n }\n\n private _handleDropdownPosition() {\n this._currentPosition = this._calculateCurrentPosition(this._dropdown);\n if (this._currentPosition === 'top') {\n this._renderer.addClass(this._dropdown, TOP_CSS_CLASS);\n this._renderer.removeClass(this._dropdown, BOTTOM_CSS_CLASS);\n this._renderer.addClass(this._select, TOP_CSS_CLASS);\n this._renderer.removeClass(this._select, BOTTOM_CSS_CLASS)\n } else {\n this._renderer.addClass(this._dropdown, BOTTOM_CSS_CLASS);\n this._renderer.removeClass(this._dropdown, TOP_CSS_CLASS);\n this._renderer.addClass(this._select, BOTTOM_CSS_CLASS);\n this._renderer.removeClass(this._select, TOP_CSS_CLASS);\n }\n\n if (this.appendTo) {\n this._updateYPosition();\n }\n\n this._dropdown.style.opacity = '1';\n }\n\n private _handleScroll() {\n this._zone.runOutsideAngular(() => {\n fromEvent(this.scrollElementRef.nativeElement, 'scroll')\n .pipe(takeUntil(this._destroy$), auditTime(0, SCROLL_SCHEDULER))\n .subscribe((e: { path, composedPath, target }) => {\n const path = e.path || (e.composedPath && e.composedPath());\n const scrollTop = !path || path.length === 0 ? e.target.scrollTop : path[0].scrollTop\n this._onContentScrolled(scrollTop);\n });\n });\n }\n\n private _handleOutsideClick() {\n if (!this._document) {\n return;\n }\n\n this._zone.runOutsideAngular(() => {\n merge(\n fromEvent(this._document, 'touchstart', { capture: true }),\n fromEvent(this._document, 'mousedown', { capture: true })\n ).pipe(takeUntil(this._destroy$))\n .subscribe($event => this._checkToClose($event));\n });\n }\n\n private _checkToClose($event: any) {\n if (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n return;\n }\n\n const path = $event.path || ($event.composedPath && $event.composedPath());\n if ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n return;\n }\n\n this._zone.run(() => this.outsideClick.emit());\n }\n\n private _onItemsChange(items: NgOption[], firstChange: boolean) {\n this.items = items || [];\n this._scrollToEndFired = false;\n this.itemsLength = items.length;\n\n if (this.virtualScroll) {\n this._updateItemsRange(firstChange);\n } else {\n this._setVirtualHeight();\n this._updateItems(firstChange);\n }\n }\n\n private _updateItems(firstChange: boolean) {\n this.update.emit(this.items);\n if (firstChange === false) {\n return;\n }\n\n this._zone.runOutsideAngular(() => {\n Promise.resolve().then(() => {\n const panelHeight = this._scrollablePanel.clientHeight;\n this._panelService.setDimensions(0, panelHeight);\n this._handleDropdownPosition();\n this.scrollTo(this.markedItem, firstChange);\n });\n });\n }\n\n private _updateItemsRange(firstChange: boolean) {\n this._zone.runOutsideAngular(() => {\n this._measureDimensions().then(() => {\n if (firstChange) {\n this._renderItemsRange(this._startOffset);\n this._handleDropdownPosition();\n } else {\n this._renderItemsRange();\n }\n });\n });\n }\n\n private _onContentScrolled(scrollTop: number) {\n if (this.virtualScroll) {\n this._renderItemsRange(scrollTop);\n }\n this._lastScrollPosition = scrollTop;\n this._fireScrollToEnd(scrollTop);\n }\n\n private _updateVirtualHeight(height: number) {\n if (this._updateScrollHeight) {\n this._virtualPadding.style.height = `${height}px`;\n this._updateScrollHeight = false;\n }\n }\n\n private _setVirtualHeight() {\n\n if (!this._virtualPadding) {\n return;\n }\n\n this._virtualPadding.style.height = `0px`;\n }\n\n private _onItemsLengthChanged() {\n this._updateScrollHeight = true;\n }\n\n private _renderItemsRange(scrollTop = null) {\n if (scrollTop && this._lastScrollPosition === scrollTop) {\n return;\n }\n\n scrollTop = scrollTop || this._scrollablePanel.scrollTop;\n const range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount);\n this._updateVirtualHeight(range.scrollHeight);\n this._contentPanel.style.transform = `translateY(${range.topPadding}px)`;\n\n this._zone.run(() => {\n this.update.emit(this.items.slice(range.start, range.end));\n this.scroll.emit({ start: range.start, end: range.end });\n });\n\n if (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n this._scrollablePanel.scrollTop = scrollTop;\n this._lastScrollPosition = scrollTop;\n }\n }\n\n private _measureDimensions(): Promise {\n if (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n return Promise.resolve(this._panelService.dimensions);\n }\n\n const [first] = this.items;\n this.update.emit([first]);\n\n return Promise.resolve().then(() => {\n const option = this._dropdown.querySelector(`#${first.htmlId}`);\n const optionHeight = option.clientHeight;\n this._virtualPadding.style.height = `${optionHeight * this.itemsLength}px`;\n const panelHeight = this._scrollablePanel.clientHeight;\n this._panelService.setDimensions(optionHeight, panelHeight);\n\n return this._panelService.dimensions;\n });\n }\n\n private _fireScrollToEnd(scrollTop: number) {\n if (this._scrollToEndFired || scrollTop === 0) {\n return;\n }\n\n const padding = this.virtualScroll ?\n this._virtualPadding :\n this._contentPanel;\n\n if (scrollTop + this._dropdown.clientHeight >= padding.clientHeight) {\n this._zone.run(() => this.scrollToEnd.emit());\n this._scrollToEndFired = true;\n }\n }\n\n private _calculateCurrentPosition(dropdownEl: HTMLElement) {\n if (this.position !== 'auto') {\n return this.position;\n }\n const selectRect: ClientRect = this._select.getBoundingClientRect();\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const offsetTop = selectRect.top + window.pageYOffset;\n const height = selectRect.height;\n const dropdownHeight = dropdownEl.getBoundingClientRect().height;\n if (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n return 'top';\n } else {\n return 'bottom';\n }\n }\n\n private _appendDropdown() {\n if (!this.appendTo) {\n return;\n }\n\n this._parent = document.querySelector(this.appendTo);\n if (!this._parent) {\n throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);\n }\n this._updateXPosition();\n this._parent.appendChild(this._dropdown);\n }\n\n private _updateXPosition() {\n const select = this._select.getBoundingClientRect();\n const parent = this._parent.getBoundingClientRect();\n const offsetLeft = select.left - parent.left;\n\n this._dropdown.style.left = offsetLeft + 'px';\n this._dropdown.style.width = select.width + 'px';\n this._dropdown.style.minWidth = select.width + 'px';\n }\n\n private _updateYPosition() {\n const select = this._select.getBoundingClientRect();\n const parent = this._parent.getBoundingClientRect();\n const delta = select.height;\n\n if (this._currentPosition === 'top') {\n const offsetBottom = parent.bottom - select.bottom;\n this._dropdown.style.bottom = offsetBottom + delta + 'px';\n this._dropdown.style.top = 'auto';\n } else if (this._currentPosition === 'bottom') {\n const offsetTop = select.top - parent.top;\n this._dropdown.style.top = offsetTop + delta + 'px';\n this._dropdown.style.bottom = 'auto';\n }\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'ng-option',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ``\n})\nexport class NgOptionComponent implements OnChanges, AfterViewChecked, OnDestroy {\n\n @Input() value: any;\n @Input()\n get disabled() { return this._disabled; }\n set disabled(value: any) { this._disabled = this._isDisabled(value) }\n\n readonly stateChange$ = new Subject<{ value: any, disabled: boolean, label?: string }>();\n\n private _disabled = false;\n private _previousLabel: string;\n\n constructor(public elementRef: ElementRef) { }\n\n get label(): string {\n return (this.elementRef.nativeElement.textContent || '').trim();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.disabled) {\n this.stateChange$.next({\n value: this.value,\n disabled: this._disabled\n });\n }\n }\n\n ngAfterViewChecked() {\n if (this.label !== this._previousLabel) {\n this._previousLabel = this.label;\n this.stateChange$.next({\n value: this.value,\n disabled: this._disabled,\n label: this.elementRef.nativeElement.innerHTML\n });\n }\n }\n\n ngOnDestroy() {\n this.stateChange$.complete();\n }\n\n private _isDisabled(value) {\n return value != null && `${value}` !== 'false';\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n placeholder: string;\n notFoundText = 'No items found';\n typeToSearchText = 'Type to search';\n addTagText = 'Add item';\n loadingText = 'Loading...';\n clearAllText = 'Clear all';\n disableVirtualScroll = true;\n openOnEnter = true;\n appendTo: string;\n bindValue: string;\n bindLabel: string;\n appearance = 'underline';\n}\n","import {\n Component,\n OnDestroy,\n OnChanges,\n AfterViewInit,\n forwardRef,\n ChangeDetectorRef,\n Input,\n Output,\n EventEmitter,\n ContentChild,\n TemplateRef,\n ViewEncapsulation,\n HostListener,\n HostBinding,\n ViewChild,\n ElementRef,\n ChangeDetectionStrategy,\n Inject,\n SimpleChanges,\n ContentChildren,\n QueryList,\n InjectionToken,\n Attribute\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil, startWith, tap, debounceTime, map, filter } from 'rxjs/operators';\nimport { Subject, merge } from 'rxjs';\n\nimport {\n NgOptionTemplateDirective,\n NgLabelTemplateDirective,\n NgHeaderTemplateDirective,\n NgFooterTemplateDirective,\n NgOptgroupTemplateDirective,\n NgNotFoundTemplateDirective,\n NgTypeToSearchTemplateDirective,\n NgLoadingTextTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgTagTemplateDirective,\n NgLoadingSpinnerTemplateDirective\n} from './ng-templates.directive';\n\nimport { ConsoleService } from './console.service';\nimport { isDefined, isFunction, isPromise, isObject } from './value-utils';\nimport { ItemsList } from './items-list';\nimport { NgOption, KeyCode } from './ng-select.types';\nimport { newId } from './id';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgOptionComponent } from './ng-option.component';\nimport { SelectionModelFactory } from './selection-model';\nimport { NgSelectConfig } from './config.service';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken('ng-select-selection-model');\nexport type DropdownPosition = 'bottom' | 'top' | 'auto';\nexport type AddTagFn = ((term: string) => any | Promise);\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | object, children: any[]) => string | object;\n\n@Component({\n selector: 'ng-select',\n templateUrl: './ng-select.component.html',\n styleUrls: ['./ng-select.component.scss'],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgSelectComponent),\n multi: true\n }, NgDropdownPanelService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.ng-select]': 'useDefaultClass',\n '[class.ng-select-single]': '!multiple',\n }\n})\nexport class NgSelectComponent implements OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor {\n\n @Input() bindLabel: string;\n @Input() bindValue: string;\n @Input() markFirst = true;\n @Input() placeholder: string;\n @Input() notFoundText: string;\n @Input() typeToSearchText: string;\n @Input() addTagText: string;\n @Input() loadingText: string;\n @Input() clearAllText: string;\n @Input() appearance: string;\n @Input() dropdownPosition: DropdownPosition = 'auto';\n @Input() appendTo: string;\n @Input() loading = false;\n @Input() closeOnSelect = true;\n @Input() hideSelected = false;\n @Input() selectOnTab = false;\n @Input() openOnEnter: boolean;\n @Input() maxSelectedItems: number;\n @Input() groupBy: string | Function;\n @Input() groupValue: GroupValueFn;\n @Input() bufferAmount = 4;\n @Input() virtualScroll: boolean;\n @Input() selectableGroup = false;\n @Input() selectableGroupAsModel = true;\n @Input() searchFn = null;\n @Input() trackByFn = null;\n @Input() clearOnBackspace = true;\n @Input() labelForId = null;\n @Input() inputAttrs: { [key: string]: string } = {};\n @Input() tabIndex: number;\n @Input() readonly = false;\n @Input() searchWhileComposing = true;\n @Input() minTermLength = 0;\n @Input() editableSearchTerm = false;\n @Input() keyDownFn = (_: KeyboardEvent) => true;\n\n @Input() @HostBinding('class.ng-select-typeahead') typeahead: Subject;\n @Input() @HostBinding('class.ng-select-multiple') multiple = false;\n @Input() @HostBinding('class.ng-select-taggable') addTag: boolean | AddTagFn = false;\n @Input() @HostBinding('class.ng-select-searchable') searchable = true;\n @Input() @HostBinding('class.ng-select-clearable') clearable = true;\n @Input() @HostBinding('class.ng-select-opened') isOpen = false;\n\n @Input()\n get items() { return this._items };\n\n set items(value: any[]) {\n this._itemsAreUsed = true;\n this._items = value;\n };\n\n @Input()\n get compareWith() { return this._compareWith; }\n\n set compareWith(fn: CompareWithFn) {\n if (fn !== undefined && fn !== null && !isFunction(fn)) {\n throw Error('`compareWith` must be a function.');\n }\n this._compareWith = fn;\n }\n\n @Input()\n get clearSearchOnAdd() { return isDefined(this._clearSearchOnAdd) ? this._clearSearchOnAdd : this.closeOnSelect; };\n\n set clearSearchOnAdd(value) {\n this._clearSearchOnAdd = value;\n };\n\n // output events\n @Output('blur') blurEvent = new EventEmitter();\n @Output('focus') focusEvent = new EventEmitter();\n @Output('change') changeEvent = new EventEmitter();\n @Output('open') openEvent = new EventEmitter();\n @Output('close') closeEvent = new EventEmitter();\n @Output('search') searchEvent = new EventEmitter<{ term: string, items: any[] }>();\n @Output('clear') clearEvent = new EventEmitter();\n @Output('add') addEvent = new EventEmitter();\n @Output('remove') removeEvent = new EventEmitter();\n @Output('scroll') scroll = new EventEmitter<{ start: number; end: number }>();\n @Output('scrollToEnd') scrollToEnd = new EventEmitter();\n\n // custom templates\n @ContentChild(NgOptionTemplateDirective, { read: TemplateRef }) optionTemplate: TemplateRef;\n @ContentChild(NgOptgroupTemplateDirective, { read: TemplateRef }) optgroupTemplate: TemplateRef;\n @ContentChild(NgLabelTemplateDirective, { read: TemplateRef }) labelTemplate: TemplateRef;\n @ContentChild(NgMultiLabelTemplateDirective, { read: TemplateRef }) multiLabelTemplate: TemplateRef;\n @ContentChild(NgHeaderTemplateDirective, { read: TemplateRef }) headerTemplate: TemplateRef;\n @ContentChild(NgFooterTemplateDirective, { read: TemplateRef }) footerTemplate: TemplateRef;\n @ContentChild(NgNotFoundTemplateDirective, { read: TemplateRef }) notFoundTemplate: TemplateRef;\n @ContentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef }) typeToSearchTemplate: TemplateRef;\n @ContentChild(NgLoadingTextTemplateDirective, { read: TemplateRef }) loadingTextTemplate: TemplateRef;\n @ContentChild(NgTagTemplateDirective, { read: TemplateRef }) tagTemplate: TemplateRef;\n @ContentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef }) loadingSpinnerTemplate: TemplateRef;\n\n @ViewChild(forwardRef(() => NgDropdownPanelComponent)) dropdownPanel: NgDropdownPanelComponent;\n @ViewChild('searchInput', { static: true }) searchInput: ElementRef;\n @ContentChildren(NgOptionComponent, { descendants: true }) ngOptions: QueryList;\n\n @HostBinding('class.ng-select-disabled') get disabled() { return this.readonly || this._disabled };\n\n @HostBinding('class.ng-select-filtered') get filtered() { return (!!this.searchTerm && this.searchable || this._isComposing) };\n\n itemsList: ItemsList;\n viewPortItems: NgOption[] = [];\n searchTerm: string = null;\n dropdownId = newId();\n element: HTMLElement;\n focused: boolean;\n escapeHTML = true;\n useDefaultClass = true;\n\n private _items = [];\n private _itemsAreUsed: boolean;\n private _defaultLabel = 'label';\n private _primitive;\n private _manualOpen: boolean;\n private _disabled: boolean;\n private _pressedKeys: string[] = [];\n private _compareWith: CompareWithFn;\n private _clearSearchOnAdd: boolean;\n private _isComposing = false;\n\n private get _editableSearchTerm(): boolean {\n return this.editableSearchTerm && !this.multiple;\n }\n\n private readonly _destroy$ = new Subject();\n private readonly _keyPress$ = new Subject();\n private _onChange = (_: any) => { };\n private _onTouched = () => { };\n\n clearItem = (item: any) => {\n const option = this.selectedItems.find(x => x.value === item);\n this.unselect(option);\n };\n\n constructor(\n @Attribute('class') public classes: string,\n @Attribute('autofocus') private autoFocus: any,\n config: NgSelectConfig,\n @Inject(SELECTION_MODEL_FACTORY) newSelectionModel: SelectionModelFactory,\n _elementRef: ElementRef,\n private _cd: ChangeDetectorRef,\n private _console: ConsoleService\n ) {\n this._mergeGlobalConfig(config);\n this.itemsList = new ItemsList(this, newSelectionModel());\n this.element = _elementRef.nativeElement;\n }\n\n get selectedItems(): NgOption[] {\n return this.itemsList.selectedItems;\n }\n\n get selectedValues() {\n return this.selectedItems.map(x => x.value);\n }\n\n get hasValue() {\n return this.selectedItems.length > 0;\n }\n\n get currentPanelPosition(): DropdownPosition {\n if (this.dropdownPanel) {\n return this.dropdownPanel.currentPosition;\n }\n return undefined;\n }\n\n ngOnInit() {\n this._handleKeyPresses();\n this._setInputAttributes();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.multiple) {\n this.itemsList.clearSelected();\n }\n if (changes.items) {\n this._setItems(changes.items.currentValue || []);\n }\n if (changes.isOpen) {\n this._manualOpen = isDefined(changes.isOpen.currentValue);\n }\n }\n\n ngAfterViewInit() {\n if (!this._itemsAreUsed) {\n this.escapeHTML = false;\n this._setItemsFromNgOptions();\n }\n\n if (isDefined(this.autoFocus)) {\n this.focus();\n }\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n @HostListener('keydown', ['$event'])\n handleKeyDown($event: KeyboardEvent) {\n const keyCode = KeyCode[$event.which];\n if (keyCode) {\n if (this.keyDownFn($event) === false) {\n return;\n }\n this.handleKeyCode($event)\n } else if ($event.key && $event.key.length === 1) {\n this._keyPress$.next($event.key.toLocaleLowerCase());\n }\n }\n\n handleKeyCode($event: KeyboardEvent) {\n switch ($event.which) {\n case KeyCode.ArrowDown:\n this._handleArrowDown($event);\n break;\n case KeyCode.ArrowUp:\n this._handleArrowUp($event);\n break;\n case KeyCode.Space:\n this._handleSpace($event);\n break;\n case KeyCode.Enter:\n this._handleEnter($event);\n break;\n case KeyCode.Tab:\n this._handleTab($event);\n break;\n case KeyCode.Esc:\n this.close();\n $event.preventDefault();\n break;\n case KeyCode.Backspace:\n this._handleBackspace();\n break\n }\n }\n\n handleMousedown($event: MouseEvent) {\n const target = $event.target as HTMLElement;\n if (target.tagName !== 'INPUT') {\n $event.preventDefault();\n }\n\n if (target.classList.contains('ng-clear-wrapper')) {\n this.handleClearClick();\n return;\n }\n\n if (target.classList.contains('ng-arrow-wrapper')) {\n this.handleArrowClick();\n return;\n }\n\n if (target.classList.contains('ng-value-icon')) {\n return;\n }\n\n if (!this.focused) {\n this.focus();\n }\n\n if (this.searchable) {\n this.open();\n } else {\n this.toggle();\n }\n }\n\n handleArrowClick() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n handleClearClick() {\n if (this.hasValue) {\n this.itemsList.clearSelected(true);\n this._updateNgModel();\n }\n this._clearSearch();\n this.focus();\n this.clearEvent.emit();\n\n this._onSelectionChanged();\n }\n\n clearModel() {\n if (!this.clearable) {\n return;\n }\n this.itemsList.clearSelected();\n this._updateNgModel();\n }\n\n writeValue(value: any | any[]): void {\n this.itemsList.clearSelected();\n this._handleWriteValue(value);\n this._cd.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(state: boolean): void {\n this._disabled = state;\n this._cd.markForCheck();\n }\n\n toggle() {\n if (!this.isOpen) {\n this.open();\n } else {\n this.close();\n }\n }\n\n open() {\n if (this.disabled || this.isOpen || this.itemsList.maxItemsSelected || this._manualOpen) {\n return;\n }\n\n if (!this._isTypeahead && !this.addTag && this.itemsList.noItemsToSelect) {\n return;\n }\n this.isOpen = true;\n this.itemsList.markSelectedOrDefault(this.markFirst);\n this.openEvent.emit();\n if (!this.searchTerm) {\n this.focus();\n }\n this.detectChanges();\n }\n\n close() {\n if (!this.isOpen || this._manualOpen) {\n return;\n }\n this.isOpen = false;\n this._isComposing = false;\n if (!this._editableSearchTerm) {\n this._clearSearch();\n } else {\n this.itemsList.resetFilteredItems();\n }\n this.itemsList.unmarkItem();\n this._onTouched();\n this.closeEvent.emit();\n this._cd.markForCheck();\n }\n\n toggleItem(item: NgOption) {\n if (!item || item.disabled || this.disabled) {\n return;\n }\n\n if (this.multiple && item.selected) {\n this.unselect(item);\n } else {\n this.select(item);\n }\n\n if (this._editableSearchTerm) {\n this._setSearchTermFromItems();\n }\n\n this._onSelectionChanged();\n }\n\n select(item: NgOption) {\n if (!item.selected) {\n this.itemsList.select(item);\n if (this.clearSearchOnAdd && !this._editableSearchTerm) {\n this._clearSearch();\n }\n\n this._updateNgModel();\n if (this.multiple) {\n this.addEvent.emit(item.value);\n }\n }\n\n if (this.closeOnSelect || this.itemsList.noItemsToSelect) {\n this.close();\n }\n }\n\n focus() {\n this.searchInput.nativeElement.focus();\n }\n\n blur() {\n this.searchInput.nativeElement.blur();\n }\n\n unselect(item: NgOption) {\n if (!item) {\n return;\n }\n\n this.itemsList.unselect(item);\n this.focus();\n this._updateNgModel();\n this.removeEvent.emit(item);\n }\n\n selectTag() {\n let tag;\n if (isFunction(this.addTag)) {\n tag = (this.addTag)(this.searchTerm);\n } else {\n tag = this._primitive ? this.searchTerm : { [this.bindLabel]: this.searchTerm };\n }\n\n const handleTag = (item) => this._isTypeahead || !this.isOpen ? this.itemsList.mapItem(item, null) : this.itemsList.addItem(item);\n if (isPromise(tag)) {\n tag.then(item => this.select(handleTag(item))).catch(() => { });\n } else if (tag) {\n this.select(handleTag(tag));\n }\n }\n\n showClear() {\n return this.clearable && (this.hasValue || this.searchTerm) && !this.disabled;\n }\n\n trackByOption = (_: number, item: NgOption) => {\n if (this.trackByFn) {\n return this.trackByFn(item.value);\n }\n\n return item;\n };\n\n get showAddTag() {\n if (!this._validTerm) {\n return false;\n }\n\n const term = this.searchTerm.toLowerCase().trim();\n return this.addTag &&\n (!this.itemsList.filteredItems.some(x => x.label.toLowerCase() === term) &&\n (!this.hideSelected && this.isOpen || !this.selectedItems.some(x => x.label.toLowerCase() === term))) &&\n !this.loading;\n }\n\n showNoItemsFound() {\n const empty = this.itemsList.filteredItems.length === 0;\n return ((empty && !this._isTypeahead && !this.loading) ||\n (empty && this._isTypeahead && this._validTerm && !this.loading)) &&\n !this.showAddTag;\n }\n\n showTypeToSearch() {\n const empty = this.itemsList.filteredItems.length === 0;\n return empty && this._isTypeahead && !this._validTerm && !this.loading;\n }\n\n onCompositionStart() {\n this._isComposing = true;\n }\n\n onCompositionEnd(term: string) {\n this._isComposing = false;\n if (this.searchWhileComposing) {\n return;\n }\n\n this.filter(term);\n }\n\n filter(term: string) {\n if (this._isComposing && !this.searchWhileComposing) {\n return;\n }\n\n this.searchTerm = term;\n if (this._isTypeahead && (this._validTerm || this.minTermLength === 0)) {\n this.typeahead.next(term);\n }\n\n if (!this._isTypeahead) {\n this.itemsList.filter(this.searchTerm);\n if (this.isOpen) {\n this.itemsList.markSelectedOrDefault(this.markFirst);\n }\n }\n\n this.searchEvent.emit({ term, items: this.itemsList.filteredItems.map(x => x.value) });\n this.open();\n }\n\n onInputFocus($event) {\n if (this.focused) {\n return;\n }\n\n if (this._editableSearchTerm) {\n this._setSearchTermFromItems();\n }\n\n this.element.classList.add('ng-select-focused');\n this.focusEvent.emit($event);\n this.focused = true;\n }\n\n onInputBlur($event) {\n this.element.classList.remove('ng-select-focused');\n this.blurEvent.emit($event);\n if (!this.isOpen && !this.disabled) {\n this._onTouched();\n }\n if (this._editableSearchTerm) {\n this._setSearchTermFromItems();\n }\n this.focused = false;\n }\n\n onItemHover(item: NgOption) {\n if (item.disabled) {\n return;\n }\n this.itemsList.markItem(item);\n }\n\n detectChanges() {\n if (!(this._cd).destroyed) {\n this._cd.detectChanges();\n }\n }\n\n private _setSearchTermFromItems() {\n const selected = this.selectedItems && this.selectedItems[0];\n this.searchTerm = (selected && selected.label) || null;\n }\n\n private _setItems(items: any[]) {\n const firstItem = items[0];\n this.bindLabel = this.bindLabel || this._defaultLabel;\n this._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel === this._defaultLabel;\n this.itemsList.setItems(items);\n if (items.length > 0 && this.hasValue) {\n this.itemsList.mapSelectedItems();\n }\n if (this.isOpen && isDefined(this.searchTerm) && !this._isTypeahead) {\n this.itemsList.filter(this.searchTerm);\n }\n if (this._isTypeahead || this.isOpen) {\n this.itemsList.markSelectedOrDefault(this.markFirst);\n }\n }\n\n private _setItemsFromNgOptions() {\n const mapNgOptions = (options: QueryList) => {\n this.items = options.map(option => ({\n $ngOptionValue: option.value,\n $ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n disabled: option.disabled\n }));\n this.itemsList.setItems(this.items);\n if (this.hasValue) {\n this.itemsList.mapSelectedItems();\n }\n this.detectChanges();\n };\n\n const handleOptionChange = () => {\n const changedOrDestroyed = merge(this.ngOptions.changes, this._destroy$);\n merge(...this.ngOptions.map(option => option.stateChange$))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(option => {\n const item = this.itemsList.findItem(option.value);\n item.disabled = option.disabled;\n item.label = option.label || item.label;\n this._cd.detectChanges();\n });\n };\n\n this.ngOptions.changes\n .pipe(startWith(this.ngOptions), takeUntil(this._destroy$))\n .subscribe(options => {\n this.bindLabel = this._defaultLabel;\n mapNgOptions(options);\n handleOptionChange();\n });\n }\n\n private _isValidWriteValue(value: any): boolean {\n if (!isDefined(value) || (this.multiple && value === '') || Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n const validateBinding = (item: any): boolean => {\n if (!isDefined(this.compareWith) && isObject(item) && this.bindValue) {\n this._console.warn(\n `Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`\n );\n return false;\n }\n return true;\n };\n\n if (this.multiple) {\n if (!Array.isArray(value)) {\n this._console.warn('Multiple select ngModel should be array.');\n return false;\n }\n return value.every(item => validateBinding(item));\n } else {\n return validateBinding(value);\n }\n }\n\n private _handleWriteValue(ngModel: any | any[]) {\n if (!this._isValidWriteValue(ngModel)) {\n return\n }\n\n const select = (val: any) => {\n let item = this.itemsList.findItem(val);\n if (item) {\n this.itemsList.select(item);\n } else {\n const isValObject = isObject(val);\n const isPrimitive = !isValObject && !this.bindValue;\n if ((isValObject || isPrimitive)) {\n this.itemsList.select(this.itemsList.mapItem(val, null));\n } else if (this.bindValue) {\n item = {\n [this.bindLabel]: null,\n [this.bindValue]: val\n };\n this.itemsList.select(this.itemsList.mapItem(item, null));\n }\n }\n };\n\n if (this.multiple) {\n (ngModel).forEach(item => select(item));\n } else {\n select(ngModel);\n }\n }\n\n private _handleKeyPresses() {\n if (this.searchable) {\n return;\n }\n\n this._keyPress$\n .pipe(takeUntil(this._destroy$),\n tap(letter => this._pressedKeys.push(letter)),\n debounceTime(200),\n filter(() => this._pressedKeys.length > 0),\n map(() => this._pressedKeys.join('')))\n .subscribe(term => {\n const item = this.itemsList.findByLabel(term);\n if (item) {\n if (this.isOpen) {\n this.itemsList.markItem(item);\n this._scrollToMarked();\n this._cd.markForCheck();\n } else {\n this.select(item);\n }\n }\n this._pressedKeys = [];\n });\n }\n\n private _setInputAttributes() {\n const input = this.searchInput.nativeElement;\n const attributes = {\n type: 'text',\n autocorrect: 'off',\n autocapitalize: 'off',\n autocomplete: this.labelForId ? 'off' : this.dropdownId,\n ...this.inputAttrs\n };\n\n for (const key of Object.keys(attributes)) {\n input.setAttribute(key, attributes[key]);\n }\n }\n\n private _updateNgModel() {\n const model = [];\n for (const item of this.selectedItems) {\n if (this.bindValue) {\n let value = null;\n if (item.children) {\n const groupKey = this.groupValue ? this.bindValue : this.groupBy;\n value = item.value[groupKey || this.groupBy];\n } else {\n value = this.itemsList.resolveNested(item.value, this.bindValue);\n }\n model.push(value);\n } else {\n model.push(item.value);\n }\n }\n\n const selected = this.selectedItems.map(x => x.value);\n if (this.multiple) {\n this._onChange(model);\n this.changeEvent.emit(selected);\n } else {\n this._onChange(isDefined(model[0]) ? model[0] : null);\n this.changeEvent.emit(selected[0]);\n }\n\n this._cd.markForCheck();\n }\n\n private _clearSearch() {\n if (!this.searchTerm) {\n return;\n }\n\n this._changeSearch(null);\n this.itemsList.resetFilteredItems();\n }\n\n private _changeSearch(searchTerm: string) {\n this.searchTerm = searchTerm;\n if (this._isTypeahead) {\n this.typeahead.next(searchTerm);\n }\n }\n\n private _scrollToMarked() {\n if (!this.isOpen || !this.dropdownPanel) {\n return;\n }\n this.dropdownPanel.scrollTo(this.itemsList.markedItem);\n }\n\n private _scrollToTag() {\n if (!this.isOpen || !this.dropdownPanel) {\n return;\n }\n this.dropdownPanel.scrollToTag();\n }\n\n private _onSelectionChanged() {\n if (this.isOpen && this.multiple && this.appendTo) {\n // Make sure items are rendered.\n this._cd.detectChanges();\n this.dropdownPanel.adjustPosition();\n }\n }\n\n private _handleTab($event: KeyboardEvent) {\n if (this.isOpen === false && !this.addTag) {\n return;\n }\n\n if (this.selectOnTab) {\n if (this.itemsList.markedItem) {\n this.toggleItem(this.itemsList.markedItem);\n $event.preventDefault();\n } else if (this.showAddTag) {\n this.selectTag();\n $event.preventDefault();\n } else {\n this.close();\n }\n } else {\n this.close();\n }\n }\n\n private _handleEnter($event: KeyboardEvent) {\n if (this.isOpen || this._manualOpen) {\n if (this.itemsList.markedItem) {\n this.toggleItem(this.itemsList.markedItem);\n } else if (this.showAddTag) {\n this.selectTag();\n }\n } else if (this.openOnEnter) {\n this.open();\n } else {\n return;\n }\n\n $event.preventDefault();\n }\n\n private _handleSpace($event: KeyboardEvent) {\n if (this.isOpen || this._manualOpen) {\n return;\n }\n this.open();\n $event.preventDefault();\n }\n\n private _handleArrowDown($event: KeyboardEvent) {\n if (this._nextItemIsTag(+1)) {\n this.itemsList.unmarkItem();\n this._scrollToTag();\n } else {\n this.itemsList.markNextItem();\n this._scrollToMarked();\n }\n this.open();\n $event.preventDefault();\n }\n\n private _handleArrowUp($event: KeyboardEvent) {\n if (!this.isOpen) {\n return;\n }\n\n if (this._nextItemIsTag(-1)) {\n this.itemsList.unmarkItem();\n this._scrollToTag();\n } else {\n this.itemsList.markPreviousItem();\n this._scrollToMarked();\n }\n $event.preventDefault();\n }\n\n private _nextItemIsTag(nextStep: number): boolean {\n const nextIndex = this.itemsList.markedIndex + nextStep;\n return this.addTag && this.searchTerm\n && this.itemsList.markedItem\n && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n }\n\n private _handleBackspace() {\n if (this.searchTerm || !this.clearable || !this.clearOnBackspace || !this.hasValue) {\n return;\n }\n\n if (this.multiple) {\n this.unselect(this.itemsList.lastSelectedItem);\n } else {\n this.clearModel();\n }\n }\n\n private get _isTypeahead() {\n return this.typeahead && this.typeahead.observers.length > 0;\n }\n\n private get _validTerm() {\n const term = this.searchTerm && this.searchTerm.trim();\n return term && term.length >= this.minTermLength;\n }\n\n private _mergeGlobalConfig(config: NgSelectConfig) {\n this.placeholder = this.placeholder || config.placeholder;\n this.notFoundText = this.notFoundText || config.notFoundText;\n this.typeToSearchText = this.typeToSearchText || config.typeToSearchText;\n this.addTagText = this.addTagText || config.addTagText;\n this.loadingText = this.loadingText || config.loadingText;\n this.clearAllText = this.clearAllText || config.clearAllText;\n this.virtualScroll = isDefined(this.virtualScroll)\n ? this.virtualScroll\n : isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;\n this.openOnEnter = isDefined(this.openOnEnter) ? this.openOnEnter : config.openOnEnter;\n this.appendTo = this.appendTo || config.appendTo;\n this.bindValue = this.bindValue || config.bindValue;\n this.bindLabel = this.bindLabel || config.bindLabel;\n this.appearance = this.appearance || config.appearance;\n }\n}\n","import { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n return new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n value: NgOption[];\n select(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n unselect(item: NgOption, multiple: boolean);\n clear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n private _selected: NgOption[] = [];\n\n get value(): NgOption[] {\n return this._selected;\n }\n\n select(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n item.selected = true;\n if (!item.children || (!multiple && groupAsModel)) {\n this._selected.push(item);\n }\n if (multiple) {\n if (item.parent) {\n const childrenCount = item.parent.children.length;\n const selectedCount = item.parent.children.filter(x => x.selected).length;\n item.parent.selected = childrenCount === selectedCount;\n } else if (item.children) {\n this._setChildrenSelectedState(item.children, true);\n this._removeChildren(item);\n if (groupAsModel && this._activeChildren(item)) {\n this._selected = [...this._selected.filter(x => x.parent !== item), item]\n } else {\n this._selected = [...this._selected, ...item.children.filter(x => !x.disabled)];\n }\n }\n }\n }\n\n unselect(item: NgOption, multiple: boolean) {\n this._selected = this._selected.filter(x => x !== item);\n item.selected = false;\n if (multiple) {\n if (item.parent && item.parent.selected) {\n const children = item.parent.children;\n this._removeParent(item.parent);\n this._removeChildren(item.parent);\n this._selected.push(...children.filter(x => x !== item && !x.disabled));\n item.parent.selected = false;\n } else if (item.children) {\n this._setChildrenSelectedState(item.children, false);\n this._removeChildren(item);\n }\n }\n }\n\n clear(keepDisabled: boolean) {\n this._selected = keepDisabled ? this._selected.filter(x => x.disabled) : [];\n }\n\n private _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n for (const child of children) {\n if (child.disabled) {\n continue;\n }\n child.selected = selected;\n };\n }\n\n private _removeChildren(parent: NgOption) {\n this._selected = [\n ...this._selected.filter(x => x.parent !== parent), \n ...parent.children.filter(x => x.parent === parent && x.disabled && x.selected)\n ];\n }\n\n private _removeParent(parent: NgOption) {\n this._selected = this._selected.filter(x => x !== parent)\n }\n\n private _activeChildren(item: NgOption): boolean {\n return item.children.every(x => !x.disabled || x.selected);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgOptionComponent } from './ng-option.component';\nimport { NgSelectComponent, SELECTION_MODEL_FACTORY } from './ng-select.component';\nimport {\n NgFooterTemplateDirective,\n NgHeaderTemplateDirective,\n NgLabelTemplateDirective,\n NgLoadingSpinnerTemplateDirective,\n NgLoadingTextTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgNotFoundTemplateDirective,\n NgOptgroupTemplateDirective,\n NgOptionTemplateDirective,\n NgTagTemplateDirective,\n NgItemLabelDirective,\n NgTypeToSearchTemplateDirective\n} from './ng-templates.directive';\nimport { DefaultSelectionModelFactory } from './selection-model';\n\n@NgModule({\n declarations: [\n NgDropdownPanelComponent,\n NgOptionComponent,\n NgSelectComponent,\n NgOptgroupTemplateDirective,\n NgOptionTemplateDirective,\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgHeaderTemplateDirective,\n NgFooterTemplateDirective,\n NgNotFoundTemplateDirective,\n NgTypeToSearchTemplateDirective,\n NgLoadingTextTemplateDirective,\n NgTagTemplateDirective,\n NgLoadingSpinnerTemplateDirective,\n NgItemLabelDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n NgSelectComponent,\n NgOptionComponent,\n NgOptgroupTemplateDirective,\n NgOptionTemplateDirective,\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgHeaderTemplateDirective,\n NgFooterTemplateDirective,\n NgNotFoundTemplateDirective,\n NgTypeToSearchTemplateDirective,\n NgLoadingTextTemplateDirective,\n NgTagTemplateDirective,\n NgLoadingSpinnerTemplateDirective\n ],\n providers: [\n { provide: SELECTION_MODEL_FACTORY, useValue: DefaultSelectionModelFactory }\n ]\n})\nexport class NgSelectModule {}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js b/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js deleted file mode 100644 index ef9b38a..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js +++ /dev/null @@ -1,10 +0,0 @@ -(window.webpackRegister=window.webpackRegister||[]).push([{hash:"e820954345757a987a61",publicPath:"/"},["kpi-overview-runtime-widget-vendors~e4dfd1bd","kpi-overview-runtime-widget-vendors~5a50f6a0"],{"kpi-overview-runtime-widget-vendors~e4dfd1bd":{js:["6nYDD","8EmIR","ZIo0y","c9oUX","g7dq2","i/oB8","ia62o","jLS8x","k41J4","m7PES","qv/MW","vlkA2","zkuYo"],css:[]},"kpi-overview-runtime-widget-vendors~5a50f6a0":{js:["/XwMU","0gx5I","1SP3J","45Ve1","6wixE","8vziG","ARx7f","Ay2r+","B49rC","C734p","DydLQ","EEfkF","GVpyE","H0SfR","Jm7h2","NET8E","OSXbQ","Orptb","P9tP5","Qgj6I","SBXPP","SKx1Z","TC8XG","TOVdY","Ta6ao","UgJ6S","WDSJU","Z70TH","ZtJ39","dbZvm","di3Lx","fTtzN","j13rY","mBSwB","nXZ77","sKM7W","sneGe","t9UOB","u/LGr","u1Z8U","vZtCd","vxJpk","xmFY6","yM92C"],css:[]}}]),(window.webpackJsonp=window.webpackJsonp||[]).push([["kpi-overview-runtime-widget-vendors~376ea35c"],{aeQ0u:function(n,t,r){(function(n,e){var u; -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var i="Expected a function",o="__lodash_placeholder__",f=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],a="[object Arguments]",c="[object Array]",l="[object Boolean]",v="[object Date]",s="[object Error]",h="[object Function]",p="[object GeneratorFunction]",d="[object Map]",_="[object Number]",g="[object Object]",y="[object RegExp]",w="[object Set]",b="[object String]",m="[object Symbol]",x="[object WeakMap]",j="[object ArrayBuffer]",A="[object DataView]",k="[object Float32Array]",E="[object Float64Array]",O="[object Int8Array]",R="[object Int16Array]",I="[object Int32Array]",S="[object Uint8Array]",z="[object Uint16Array]",C="[object Uint32Array]",L=/\b__p \+= '';/g,W=/\b(__p \+=) '' \+/g,U=/(__e\(.*?\)|\b__t\)) \+\n'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,T=/[&<>"']/g,D=RegExp(B.source),$=RegExp(T.source),N=/<%-([\s\S]+?)%>/g,M=/<%([\s\S]+?)%>/g,P=/<%=([\s\S]+?)%>/g,F=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Z=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,J=/[\\^$.*+?()[\]{}|]/g,G=RegExp(J.source),V=/^\s+|\s+$/g,K=/^\s+/,Y=/\s+$/,X=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,H=/\{\n\/\* \[wrapped with (.+)\] \*/,Q=/,? & /,nn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tn=/\\(\\)?/g,rn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,en=/\w*$/,un=/^[-+]0x[0-9a-f]+$/i,on=/^0b[01]+$/i,fn=/^\[object .+?Constructor\]$/,an=/^0o[0-7]+$/i,cn=/^(?:0|[1-9]\d*)$/,ln=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,vn=/($^)/,sn=/['\n\r\u2028\u2029\\]/g,hn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",dn="[\\ud800-\\udfff]",_n="["+pn+"]",gn="["+hn+"]",yn="\\d+",wn="[\\u2700-\\u27bf]",bn="[a-z\\xdf-\\xf6\\xf8-\\xff]",mn="[^\\ud800-\\udfff"+pn+yn+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",xn="\\ud83c[\\udffb-\\udfff]",jn="[^\\ud800-\\udfff]",An="(?:\\ud83c[\\udde6-\\uddff]){2}",kn="[\\ud800-\\udbff][\\udc00-\\udfff]",En="[A-Z\\xc0-\\xd6\\xd8-\\xde]",On="(?:"+bn+"|"+mn+")",Rn="(?:"+En+"|"+mn+")",In="(?:"+gn+"|"+xn+")"+"?",Sn="[\\ufe0e\\ufe0f]?"+In+("(?:\\u200d(?:"+[jn,An,kn].join("|")+")[\\ufe0e\\ufe0f]?"+In+")*"),zn="(?:"+[wn,An,kn].join("|")+")"+Sn,Cn="(?:"+[jn+gn+"?",gn,An,kn,dn].join("|")+")",Ln=RegExp("['’]","g"),Wn=RegExp(gn,"g"),Un=RegExp(xn+"(?="+xn+")|"+Cn+Sn,"g"),Bn=RegExp([En+"?"+bn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[_n,En,"$"].join("|")+")",Rn+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[_n,En+On,"$"].join("|")+")",En+"?"+On+"+(?:['’](?:d|ll|m|re|s|t|ve))?",En+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",yn,zn].join("|"),"g"),Tn=RegExp("[\\u200d\\ud800-\\udfff"+hn+"\\ufe0e\\ufe0f]"),Dn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,$n=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Nn=-1,Mn={};Mn[k]=Mn[E]=Mn[O]=Mn[R]=Mn[I]=Mn[S]=Mn["[object Uint8ClampedArray]"]=Mn[z]=Mn[C]=!0,Mn[a]=Mn[c]=Mn[j]=Mn[l]=Mn[A]=Mn[v]=Mn[s]=Mn[h]=Mn[d]=Mn[_]=Mn[g]=Mn[y]=Mn[w]=Mn[b]=Mn[x]=!1;var Pn={};Pn[a]=Pn[c]=Pn[j]=Pn[A]=Pn[l]=Pn[v]=Pn[k]=Pn[E]=Pn[O]=Pn[R]=Pn[I]=Pn[d]=Pn[_]=Pn[g]=Pn[y]=Pn[w]=Pn[b]=Pn[m]=Pn[S]=Pn["[object Uint8ClampedArray]"]=Pn[z]=Pn[C]=!0,Pn[s]=Pn[h]=Pn[x]=!1;var Fn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Zn=parseFloat,qn=parseInt,Jn="object"==typeof n&&n&&n.Object===Object&&n,Gn="object"==typeof self&&self&&self.Object===Object&&self,Vn=Jn||Gn||Function("return this")(),Kn=t&&!t.nodeType&&t,Yn=Kn&&"object"==typeof e&&e&&!e.nodeType&&e,Xn=Yn&&Yn.exports===Kn,Hn=Xn&&Jn.process,Qn=function(){try{var n=Yn&&Yn.require&&Yn.require("util").types;return n||Hn&&Hn.binding&&Hn.binding("util")}catch(n){}}(),nt=Qn&&Qn.isArrayBuffer,tt=Qn&&Qn.isDate,rt=Qn&&Qn.isMap,et=Qn&&Qn.isRegExp,ut=Qn&&Qn.isSet,it=Qn&&Qn.isTypedArray;function ot(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function ft(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u-1}function ht(n,t,r){for(var e=-1,u=null==n?0:n.length;++e-1;);return r}function Ut(n,t){for(var r=n.length;r--&&xt(t,n[r],0)>-1;);return r}function Bt(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}var Tt=Ot({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Dt=Ot({"&":"&","<":"<",">":">",'"':""","'":"'"});function $t(n){return"\\"+Fn[n]}function Nt(n){return Tn.test(n)}function Mt(n){var t=-1,r=Array(n.size);return n.forEach((function(n,e){r[++t]=[e,n]})),r}function Pt(n,t){return function(r){return n(t(r))}}function Ft(n,t){for(var r=-1,e=n.length,u=0,i=[];++r",""":'"',"'":"'"});var Kt=function n(t){var r,e=(t=null==t?Vn:Kt.defaults(Vn.Object(),t,Kt.pick(Vn,$n))).Array,u=t.Date,hn=t.Error,pn=t.Function,dn=t.Math,_n=t.Object,gn=t.RegExp,yn=t.String,wn=t.TypeError,bn=e.prototype,mn=pn.prototype,xn=_n.prototype,jn=t["__core-js_shared__"],An=mn.toString,kn=xn.hasOwnProperty,En=0,On=(r=/[^.]+$/.exec(jn&&jn.keys&&jn.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",Rn=xn.toString,In=An.call(_n),Sn=Vn._,zn=gn("^"+An.call(kn).replace(J,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Cn=Xn?t.Buffer:void 0,Un=t.Symbol,Tn=t.Uint8Array,Fn=Cn?Cn.allocUnsafe:void 0,Jn=Pt(_n.getPrototypeOf,_n),Gn=_n.create,Kn=xn.propertyIsEnumerable,Yn=bn.splice,Hn=Un?Un.isConcatSpreadable:void 0,Qn=Un?Un.iterator:void 0,wt=Un?Un.toStringTag:void 0,Ot=function(){try{var n=Qu(_n,"defineProperty");return n({},"",{}),n}catch(n){}}(),Yt=t.clearTimeout!==Vn.clearTimeout&&t.clearTimeout,Xt=u&&u.now!==Vn.Date.now&&u.now,Ht=t.setTimeout!==Vn.setTimeout&&t.setTimeout,Qt=dn.ceil,nr=dn.floor,tr=_n.getOwnPropertySymbols,rr=Cn?Cn.isBuffer:void 0,er=t.isFinite,ur=bn.join,ir=Pt(_n.keys,_n),or=dn.max,fr=dn.min,ar=u.now,cr=t.parseInt,lr=dn.random,vr=bn.reverse,sr=Qu(t,"DataView"),hr=Qu(t,"Map"),pr=Qu(t,"Promise"),dr=Qu(t,"Set"),_r=Qu(t,"WeakMap"),gr=Qu(_n,"create"),yr=_r&&new _r,wr={},br=Ei(sr),mr=Ei(hr),xr=Ei(pr),jr=Ei(dr),Ar=Ei(_r),kr=Un?Un.prototype:void 0,Er=kr?kr.valueOf:void 0,Or=kr?kr.toString:void 0;function Rr(n){if(Zo(n)&&!Lo(n)&&!(n instanceof Cr)){if(n instanceof zr)return n;if(kn.call(n,"__wrapped__"))return Oi(n)}return new zr(n)}var Ir=function(){function n(){}return function(t){if(!Fo(t))return{};if(Gn)return Gn(t);n.prototype=t;var r=new n;return n.prototype=void 0,r}}();function Sr(){}function zr(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Cr(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Lr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Yr(n,t,r,e,u,i){var o,f=1&t,c=2&t,s=4&t;if(r&&(o=u?r(n,e,u,i):r(n)),void 0!==o)return o;if(!Fo(n))return n;var x=Lo(n);if(x){if(o=function(n){var t=n.length,r=new n.constructor(t);t&&"string"==typeof n[0]&&kn.call(n,"index")&&(r.index=n.index,r.input=n.input);return r}(n),!f)return gu(n,o)}else{var L=ri(n),W=L==h||L==p;if(To(n))return vu(n,f);if(L==g||L==a||W&&!u){if(o=c||W?{}:ui(n),!f)return c?function(n,t){return yu(n,ti(n),t)}(n,function(n,t){return n&&yu(t,xf(t),n)}(o,n)):function(n,t){return yu(n,ni(n),t)}(n,Jr(o,n))}else{if(!Pn[L])return u?n:{};o=function(n,t,r){var e=n.constructor;switch(t){case j:return su(n);case l:case v:return new e(+n);case A:return function(n,t){var r=t?su(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case k:case E:case O:case R:case I:case S:case"[object Uint8ClampedArray]":case z:case C:return hu(n,r);case d:return new e;case _:case b:return new e(n);case y:return function(n){var t=new n.constructor(n.source,en.exec(n));return t.lastIndex=n.lastIndex,t}(n);case w:return new e;case m:return u=n,Er?_n(Er.call(u)):{}}var u}(n,L,f)}}i||(i=new Tr);var U=i.get(n);if(U)return U;i.set(n,o),Ko(n)?n.forEach((function(e){o.add(Yr(e,t,r,e,n,i))})):qo(n)&&n.forEach((function(e,u){o.set(u,Yr(e,t,r,u,n,i))}));var B=x?void 0:(s?c?Ju:qu:c?xf:mf)(n);return at(B||n,(function(e,u){B&&(e=n[u=e]),Fr(o,u,Yr(e,t,r,u,n,i))})),o}function Xr(n,t,r){var e=r.length;if(null==n)return!e;for(n=_n(n);e--;){var u=r[e],i=t[u],o=n[u];if(void 0===o&&!(u in n)||!i(o))return!1}return!0}function Hr(n,t,r){if("function"!=typeof n)throw new wn(i);return wi((function(){n.apply(void 0,r)}),t)}function Qr(n,t,r,e){var u=-1,i=st,o=!0,f=n.length,a=[],c=t.length;if(!f)return a;r&&(t=pt(t,zt(r))),e?(i=ht,o=!1):t.length>=200&&(i=Lt,o=!1,t=new Br(t));n:for(;++u-1},Wr.prototype.set=function(n,t){var r=this.__data__,e=Zr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Ur.prototype.clear=function(){this.size=0,this.__data__={hash:new Lr,map:new(hr||Wr),string:new Lr}},Ur.prototype.delete=function(n){var t=Xu(this,n).delete(n);return this.size-=t?1:0,t},Ur.prototype.get=function(n){return Xu(this,n).get(n)},Ur.prototype.has=function(n){return Xu(this,n).has(n)},Ur.prototype.set=function(n,t){var r=Xu(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Br.prototype.add=Br.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Br.prototype.has=function(n){return this.__data__.has(n)},Tr.prototype.clear=function(){this.__data__=new Wr,this.size=0},Tr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Tr.prototype.get=function(n){return this.__data__.get(n)},Tr.prototype.has=function(n){return this.__data__.has(n)},Tr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Wr){var e=r.__data__;if(!hr||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Ur(e)}return r.set(n,t),this.size=r.size,this};var ne=mu(ae),te=mu(ce,!0);function re(n,t){var r=!0;return ne(n,(function(n,e,u){return r=!!t(n,e,u)})),r}function ee(n,t,r){for(var e=-1,u=n.length;++e0&&r(f)?t>1?ie(f,t-1,r,e,u):dt(u,f):e||(u[u.length]=f)}return u}var oe=xu(),fe=xu(!0);function ae(n,t){return n&&oe(n,t,mf)}function ce(n,t){return n&&fe(n,t,mf)}function le(n,t){return vt(t,(function(t){return No(n[t])}))}function ve(n,t){for(var r=0,e=(t=fu(t,n)).length;null!=n&&rt}function de(n,t){return null!=n&&kn.call(n,t)}function _e(n,t){return null!=n&&t in _n(n)}function ge(n,t,r){for(var u=r?ht:st,i=n[0].length,o=n.length,f=o,a=e(o),c=1/0,l=[];f--;){var v=n[f];f&&t&&(v=pt(v,zt(t))),c=fr(v.length,c),a[f]=!r&&(t||i>=120&&v.length>=120)?new Br(f&&v):void 0}v=n[0];var s=-1,h=a[0];n:for(;++s=f)return a;var c=r[e];return a*("desc"==c?-1:1)}}return n.index-t.index}(n,t,r)}))}function Le(n,t,r){for(var e=-1,u=t.length,i={};++e-1;)f!==n&&Yn.call(f,a,1),Yn.call(n,a,1);return n}function Ue(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;oi(u)?Yn.call(n,u,1):Qe(n,u)}}return n}function Be(n,t){return n+nr(lr()*(t-n+1))}function Te(n,t){var r="";if(!n||t<1||t>9007199254740991)return r;do{t%2&&(r+=n),(t=nr(t/2))&&(n+=n)}while(t);return r}function De(n,t){return bi(pi(n,t,Gf),n+"")}function $e(n){return $r(Sf(n))}function Ne(n,t){var r=Sf(n);return ji(r,Kr(t,0,r.length))}function Me(n,t,r,e){if(!Fo(n))return n;for(var u=-1,i=(t=fu(t,n)).length,o=i-1,f=n;null!=f&&++ui?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=e(i);++u>>1,o=n[i];null!==o&&!Xo(o)&&(r?o<=t:o=200){var c=t?null:Tu(n);if(c)return Zt(c);o=!1,u=Lt,a=new Br}else a=t?[]:f;n:for(;++e=e?n:qe(n,t,r)}var lu=Yt||function(n){return Vn.clearTimeout(n)};function vu(n,t){if(t)return n.slice();var r=n.length,e=Fn?Fn(r):new n.constructor(r);return n.copy(e),e}function su(n){var t=new n.constructor(n.byteLength);return new Tn(t).set(new Tn(n)),t}function hu(n,t){var r=t?su(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function pu(n,t){if(n!==t){var r=void 0!==n,e=null===n,u=n==n,i=Xo(n),o=void 0!==t,f=null===t,a=t==t,c=Xo(t);if(!f&&!c&&!i&&n>t||i&&o&&a&&!f&&!c||e&&o&&a||!r&&a||!u)return 1;if(!e&&!i&&!c&&n1?r[u-1]:void 0,o=u>2?r[2]:void 0;for(i=n.length>3&&"function"==typeof i?(u--,i):void 0,o&&fi(r[0],r[1],o)&&(i=u<3?void 0:i,u=1),t=_n(t);++e-1?u[i?t[o]:o]:void 0}}function Ou(n){return Zu((function(t){var r=t.length,e=r,u=zr.prototype.thru;for(n&&t.reverse();e--;){var o=t[e];if("function"!=typeof o)throw new wn(i);if(u&&!f&&"wrapper"==Vu(o))var f=new zr([],!0)}for(e=f?e:r;++e1&&w.reverse(),v&&cf))return!1;var c=i.get(n),l=i.get(t);if(c&&l)return c==t&&l==n;var v=-1,s=!0,h=2&r?new Br:void 0;for(i.set(n,t),i.set(t,n);++v-1&&n%1==0&&n1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(X,"{\n/* [wrapped with "+t+"] */\n")}(e,function(n,t){return at(f,(function(r){var e="_."+r[0];t&r[1]&&!st(n,e)&&n.push(e)})),n.sort()}(function(n){var t=n.match(H);return t?t[1].split(Q):[]}(e),r)))}function xi(n){var t=0,r=0;return function(){var e=ar(),u=16-(e-r);if(r=e,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}function ji(n,t){var r=-1,e=n.length,u=e-1;for(t=void 0===t?e:t;++r1?n[t-1]:void 0;return r="function"==typeof r?(n.pop(),r):void 0,Gi(n,r)}));function no(n){var t=Rr(n);return t.__chain__=!0,t}function to(n,t){return t(n)}var ro=Zu((function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return Vr(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Cr&&oi(r)?((e=e.slice(r,+r+(t?1:0))).__actions__.push({func:to,args:[u],thisArg:void 0}),new zr(e,this.__chain__).thru((function(n){return t&&!n.length&&n.push(void 0),n}))):this.thru(u)}));var eo=wu((function(n,t,r){kn.call(n,r)?++n[r]:Gr(n,r,1)}));var uo=Eu(zi),io=Eu(Ci);function oo(n,t){return(Lo(n)?at:ne)(n,Yu(t,3))}function fo(n,t){return(Lo(n)?ct:te)(n,Yu(t,3))}var ao=wu((function(n,t,r){kn.call(n,r)?n[r].push(t):Gr(n,r,[t])}));var co=De((function(n,t,r){var u=-1,i="function"==typeof t,o=Uo(n)?e(n.length):[];return ne(n,(function(n){o[++u]=i?ot(t,n,r):ye(n,t,r)})),o})),lo=wu((function(n,t,r){Gr(n,r,t)}));function vo(n,t){return(Lo(n)?pt:Oe)(n,Yu(t,3))}var so=wu((function(n,t,r){n[r?0:1].push(t)}),(function(){return[[],[]]}));var ho=De((function(n,t){if(null==n)return[];var r=t.length;return r>1&&fi(n,t[0],t[1])?t=[]:r>2&&fi(t[0],t[1],t[2])&&(t=[t[0]]),Ce(n,ie(t,1),[])})),po=Xt||function(){return Vn.Date.now()};function _o(n,t,r){return t=r?void 0:t,$u(n,128,void 0,void 0,void 0,void 0,t=n&&null==t?n.length:t)}function go(n,t){var r;if("function"!=typeof t)throw new wn(i);return n=ef(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=void 0),r}}var yo=De((function(n,t,r){var e=1;if(r.length){var u=Ft(r,Ku(yo));e|=32}return $u(n,e,t,r,u)})),wo=De((function(n,t,r){var e=3;if(r.length){var u=Ft(r,Ku(wo));e|=32}return $u(t,e,n,r,u)}));function bo(n,t,r){var e,u,o,f,a,c,l=0,v=!1,s=!1,h=!0;if("function"!=typeof n)throw new wn(i);function p(t){var r=e,i=u;return e=u=void 0,l=t,f=n.apply(i,r)}function d(n){return l=n,a=wi(g,t),v?p(n):f}function _(n){var r=n-c;return void 0===c||r>=t||r<0||s&&n-l>=o}function g(){var n=po();if(_(n))return y(n);a=wi(g,function(n){var r=t-(n-c);return s?fr(r,o-(n-l)):r}(n))}function y(n){return a=void 0,h&&e?p(n):(e=u=void 0,f)}function w(){var n=po(),r=_(n);if(e=arguments,u=this,c=n,r){if(void 0===a)return d(c);if(s)return lu(a),a=wi(g,t),p(c)}return void 0===a&&(a=wi(g,t)),f}return t=of(t)||0,Fo(r)&&(v=!!r.leading,o=(s="maxWait"in r)?or(of(r.maxWait)||0,t):o,h="trailing"in r?!!r.trailing:h),w.cancel=function(){void 0!==a&&lu(a),l=0,e=c=u=a=void 0},w.flush=function(){return void 0===a?f:y(po())},w}var mo=De((function(n,t){return Hr(n,1,t)})),xo=De((function(n,t,r){return Hr(n,of(t)||0,r)}));function jo(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new wn(i);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(jo.Cache||Ur),r}function Ao(n){if("function"!=typeof n)throw new wn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}jo.Cache=Ur;var ko=au((function(n,t){var r=(t=1==t.length&&Lo(t[0])?pt(t[0],zt(Yu())):pt(ie(t,1),zt(Yu()))).length;return De((function(e){for(var u=-1,i=fr(e.length,r);++u=t})),Co=we(function(){return arguments}())?we:function(n){return Zo(n)&&kn.call(n,"callee")&&!Kn.call(n,"callee")},Lo=e.isArray,Wo=nt?zt(nt):function(n){return Zo(n)&&he(n)==j};function Uo(n){return null!=n&&Po(n.length)&&!No(n)}function Bo(n){return Zo(n)&&Uo(n)}var To=rr||oa,Do=tt?zt(tt):function(n){return Zo(n)&&he(n)==v};function $o(n){if(!Zo(n))return!1;var t=he(n);return t==s||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Go(n)}function No(n){if(!Fo(n))return!1;var t=he(n);return t==h||t==p||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Mo(n){return"number"==typeof n&&n==ef(n)}function Po(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=9007199254740991}function Fo(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function Zo(n){return null!=n&&"object"==typeof n}var qo=rt?zt(rt):function(n){return Zo(n)&&ri(n)==d};function Jo(n){return"number"==typeof n||Zo(n)&&he(n)==_}function Go(n){if(!Zo(n)||he(n)!=g)return!1;var t=Jn(n);if(null===t)return!0;var r=kn.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&An.call(r)==In}var Vo=et?zt(et):function(n){return Zo(n)&&he(n)==y};var Ko=ut?zt(ut):function(n){return Zo(n)&&ri(n)==w};function Yo(n){return"string"==typeof n||!Lo(n)&&Zo(n)&&he(n)==b}function Xo(n){return"symbol"==typeof n||Zo(n)&&he(n)==m}var Ho=it?zt(it):function(n){return Zo(n)&&Po(n.length)&&!!Mn[he(n)]};var Qo=Wu(Ee),nf=Wu((function(n,t){return n<=t}));function tf(n){if(!n)return[];if(Uo(n))return Yo(n)?Gt(n):gu(n);if(Qn&&n[Qn])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Qn]());var t=ri(n);return(t==d?Mt:t==w?Zt:Sf)(n)}function rf(n){return n?(n=of(n))===1/0||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function ef(n){var t=rf(n),r=t%1;return t==t?r?t-r:t:0}function uf(n){return n?Kr(ef(n),0,4294967295):0}function of(n){if("number"==typeof n)return n;if(Xo(n))return NaN;if(Fo(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Fo(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(V,"");var r=on.test(n);return r||an.test(n)?qn(n.slice(2),r?2:8):un.test(n)?NaN:+n}function ff(n){return yu(n,xf(n))}function af(n){return null==n?"":Xe(n)}var cf=bu((function(n,t){if(vi(t)||Uo(t))yu(t,mf(t),n);else for(var r in t)kn.call(t,r)&&Fr(n,r,t[r])})),lf=bu((function(n,t){yu(t,xf(t),n)})),vf=bu((function(n,t,r,e){yu(t,xf(t),n,e)})),sf=bu((function(n,t,r,e){yu(t,mf(t),n,e)})),hf=Zu(Vr);var pf=De((function(n,t){n=_n(n);var r=-1,e=t.length,u=e>2?t[2]:void 0;for(u&&fi(t[0],t[1],u)&&(e=1);++r1),t})),yu(n,Ju(n),r),e&&(r=Yr(r,7,Pu));for(var u=t.length;u--;)Qe(r,t[u]);return r}));var Ef=Zu((function(n,t){return null==n?{}:function(n,t){return Le(n,t,(function(t,r){return gf(n,r)}))}(n,t)}));function Of(n,t){if(null==n)return{};var r=pt(Ju(n),(function(n){return[n]}));return t=Yu(t),Le(n,r,(function(n,r){return t(n,r[0])}))}var Rf=Du(mf),If=Du(xf);function Sf(n){return null==n?[]:Ct(n,mf(n))}var zf=Au((function(n,t,r){return t=t.toLowerCase(),n+(r?Cf(t):t)}));function Cf(n){return Nf(af(n).toLowerCase())}function Lf(n){return(n=af(n))&&n.replace(ln,Tt).replace(Wn,"")}var Wf=Au((function(n,t,r){return n+(r?"-":"")+t.toLowerCase()})),Uf=Au((function(n,t,r){return n+(r?" ":"")+t.toLowerCase()})),Bf=ju("toLowerCase");var Tf=Au((function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}));var Df=Au((function(n,t,r){return n+(r?" ":"")+Nf(t)}));var $f=Au((function(n,t,r){return n+(r?" ":"")+t.toUpperCase()})),Nf=ju("toUpperCase");function Mf(n,t,r){return n=af(n),void 0===(t=r?void 0:t)?function(n){return Dn.test(n)}(n)?function(n){return n.match(Bn)||[]}(n):function(n){return n.match(nn)||[]}(n):n.match(t)||[]}var Pf=De((function(n,t){try{return ot(n,void 0,t)}catch(n){return $o(n)?n:new hn(n)}})),Ff=Zu((function(n,t){return at(t,(function(t){t=ki(t),Gr(n,t,yo(n[t],n))})),n}));function Zf(n){return function(){return n}}var qf=Ou(),Jf=Ou(!0);function Gf(n){return n}function Vf(n){return je("function"==typeof n?n:Yr(n,1))}var Kf=De((function(n,t){return function(r){return ye(r,n,t)}})),Yf=De((function(n,t){return function(r){return ye(n,r,t)}}));function Xf(n,t,r){var e=mf(t),u=le(t,e);null!=r||Fo(t)&&(u.length||!e.length)||(r=t,t=n,n=this,u=le(t,mf(t)));var i=!(Fo(r)&&"chain"in r&&!r.chain),o=No(n);return at(u,(function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__),u=r.__actions__=gu(this.__actions__);return u.push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,dt([this.value()],arguments))})})),n}function Hf(){}var Qf=zu(pt),na=zu(lt),ta=zu(yt);function ra(n){return ai(n)?Et(ki(n)):function(n){return function(t){return ve(t,n)}}(n)}var ea=Lu(),ua=Lu(!0);function ia(){return[]}function oa(){return!1}var fa=Su((function(n,t){return n+t}),0),aa=Bu("ceil"),ca=Su((function(n,t){return n/t}),1),la=Bu("floor");var va,sa=Su((function(n,t){return n*t}),1),ha=Bu("round"),pa=Su((function(n,t){return n-t}),0);return Rr.after=function(n,t){if("function"!=typeof t)throw new wn(i);return n=ef(n),function(){if(--n<1)return t.apply(this,arguments)}},Rr.ary=_o,Rr.assign=cf,Rr.assignIn=lf,Rr.assignInWith=vf,Rr.assignWith=sf,Rr.at=hf,Rr.before=go,Rr.bind=yo,Rr.bindAll=Ff,Rr.bindKey=wo,Rr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Lo(n)?n:[n]},Rr.chain=no,Rr.chunk=function(n,t,r){t=(r?fi(n,t,r):void 0===t)?1:or(ef(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,o=0,f=e(Qt(u/t));iu?0:u+r),(e=void 0===e||e>u?u:ef(e))<0&&(e+=u),e=r>e?0:uf(e);r>>0)?(n=af(n))&&("string"==typeof t||null!=t&&!Vo(t))&&!(t=Xe(t))&&Nt(n)?cu(Gt(n),0,r):n.split(t,r):[]},Rr.spread=function(n,t){if("function"!=typeof n)throw new wn(i);return t=null==t?0:or(ef(t),0),De((function(r){var e=r[t],u=cu(r,0,t);return e&&dt(u,e),ot(n,this,u)}))},Rr.tail=function(n){var t=null==n?0:n.length;return t?qe(n,1,t):[]},Rr.take=function(n,t,r){return n&&n.length?qe(n,0,(t=r||void 0===t?1:ef(t))<0?0:t):[]},Rr.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?qe(n,(t=e-(t=r||void 0===t?1:ef(t)))<0?0:t,e):[]},Rr.takeRightWhile=function(n,t){return n&&n.length?tu(n,Yu(t,3),!1,!0):[]},Rr.takeWhile=function(n,t){return n&&n.length?tu(n,Yu(t,3)):[]},Rr.tap=function(n,t){return t(n),n},Rr.throttle=function(n,t,r){var e=!0,u=!0;if("function"!=typeof n)throw new wn(i);return Fo(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),bo(n,t,{leading:e,maxWait:t,trailing:u})},Rr.thru=to,Rr.toArray=tf,Rr.toPairs=Rf,Rr.toPairsIn=If,Rr.toPath=function(n){return Lo(n)?pt(n,ki):Xo(n)?[n]:gu(Ai(af(n)))},Rr.toPlainObject=ff,Rr.transform=function(n,t,r){var e=Lo(n),u=e||To(n)||Ho(n);if(t=Yu(t,4),null==r){var i=n&&n.constructor;r=u?e?new i:[]:Fo(n)&&No(i)?Ir(Jn(n)):{}}return(u?at:ae)(n,(function(n,e,u){return t(r,n,e,u)})),r},Rr.unary=function(n){return _o(n,1)},Rr.union=Fi,Rr.unionBy=Zi,Rr.unionWith=qi,Rr.uniq=function(n){return n&&n.length?He(n):[]},Rr.uniqBy=function(n,t){return n&&n.length?He(n,Yu(t,2)):[]},Rr.uniqWith=function(n,t){return t="function"==typeof t?t:void 0,n&&n.length?He(n,void 0,t):[]},Rr.unset=function(n,t){return null==n||Qe(n,t)},Rr.unzip=Ji,Rr.unzipWith=Gi,Rr.update=function(n,t,r){return null==n?n:nu(n,t,ou(r))},Rr.updateWith=function(n,t,r,e){return e="function"==typeof e?e:void 0,null==n?n:nu(n,t,ou(r),e)},Rr.values=Sf,Rr.valuesIn=function(n){return null==n?[]:Ct(n,xf(n))},Rr.without=Vi,Rr.words=Mf,Rr.wrap=function(n,t){return Eo(ou(t),n)},Rr.xor=Ki,Rr.xorBy=Yi,Rr.xorWith=Xi,Rr.zip=Hi,Rr.zipObject=function(n,t){return uu(n||[],t||[],Fr)},Rr.zipObjectDeep=function(n,t){return uu(n||[],t||[],Me)},Rr.zipWith=Qi,Rr.entries=Rf,Rr.entriesIn=If,Rr.extend=lf,Rr.extendWith=vf,Xf(Rr,Rr),Rr.add=fa,Rr.attempt=Pf,Rr.camelCase=zf,Rr.capitalize=Cf,Rr.ceil=aa,Rr.clamp=function(n,t,r){return void 0===r&&(r=t,t=void 0),void 0!==r&&(r=(r=of(r))==r?r:0),void 0!==t&&(t=(t=of(t))==t?t:0),Kr(of(n),t,r)},Rr.clone=function(n){return Yr(n,4)},Rr.cloneDeep=function(n){return Yr(n,5)},Rr.cloneDeepWith=function(n,t){return Yr(n,5,t="function"==typeof t?t:void 0)},Rr.cloneWith=function(n,t){return Yr(n,4,t="function"==typeof t?t:void 0)},Rr.conformsTo=function(n,t){return null==t||Xr(n,t,mf(t))},Rr.deburr=Lf,Rr.defaultTo=function(n,t){return null==n||n!=n?t:n},Rr.divide=ca,Rr.endsWith=function(n,t,r){n=af(n),t=Xe(t);var e=n.length,u=r=void 0===r?e:Kr(ef(r),0,e);return(r-=t.length)>=0&&n.slice(r,u)==t},Rr.eq=Io,Rr.escape=function(n){return(n=af(n))&&$.test(n)?n.replace(T,Dt):n},Rr.escapeRegExp=function(n){return(n=af(n))&&G.test(n)?n.replace(J,"\\$&"):n},Rr.every=function(n,t,r){var e=Lo(n)?lt:re;return r&&fi(n,t,r)&&(t=void 0),e(n,Yu(t,3))},Rr.find=uo,Rr.findIndex=zi,Rr.findKey=function(n,t){return bt(n,Yu(t,3),ae)},Rr.findLast=io,Rr.findLastIndex=Ci,Rr.findLastKey=function(n,t){return bt(n,Yu(t,3),ce)},Rr.floor=la,Rr.forEach=oo,Rr.forEachRight=fo,Rr.forIn=function(n,t){return null==n?n:oe(n,Yu(t,3),xf)},Rr.forInRight=function(n,t){return null==n?n:fe(n,Yu(t,3),xf)},Rr.forOwn=function(n,t){return n&&ae(n,Yu(t,3))},Rr.forOwnRight=function(n,t){return n&&ce(n,Yu(t,3))},Rr.get=_f,Rr.gt=So,Rr.gte=zo,Rr.has=function(n,t){return null!=n&&ei(n,t,de)},Rr.hasIn=gf,Rr.head=Wi,Rr.identity=Gf,Rr.includes=function(n,t,r,e){n=Uo(n)?n:Sf(n),r=r&&!e?ef(r):0;var u=n.length;return r<0&&(r=or(u+r,0)),Yo(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&xt(n,t,r)>-1},Rr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:ef(r);return u<0&&(u=or(e+u,0)),xt(n,t,u)},Rr.inRange=function(n,t,r){return t=rf(t),void 0===r?(r=t,t=0):r=rf(r),function(n,t,r){return n>=fr(t,r)&&n=-9007199254740991&&n<=9007199254740991},Rr.isSet=Ko,Rr.isString=Yo,Rr.isSymbol=Xo,Rr.isTypedArray=Ho,Rr.isUndefined=function(n){return void 0===n},Rr.isWeakMap=function(n){return Zo(n)&&ri(n)==x},Rr.isWeakSet=function(n){return Zo(n)&&"[object WeakSet]"==he(n)},Rr.join=function(n,t){return null==n?"":ur.call(n,t)},Rr.kebabCase=Wf,Rr.last=Di,Rr.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return void 0!==r&&(u=(u=ef(r))<0?or(e+u,0):fr(u,e-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,u):mt(n,At,u,!0)},Rr.lowerCase=Uf,Rr.lowerFirst=Bf,Rr.lt=Qo,Rr.lte=nf,Rr.max=function(n){return n&&n.length?ee(n,Gf,pe):void 0},Rr.maxBy=function(n,t){return n&&n.length?ee(n,Yu(t,2),pe):void 0},Rr.mean=function(n){return kt(n,Gf)},Rr.meanBy=function(n,t){return kt(n,Yu(t,2))},Rr.min=function(n){return n&&n.length?ee(n,Gf,Ee):void 0},Rr.minBy=function(n,t){return n&&n.length?ee(n,Yu(t,2),Ee):void 0},Rr.stubArray=ia,Rr.stubFalse=oa,Rr.stubObject=function(){return{}},Rr.stubString=function(){return""},Rr.stubTrue=function(){return!0},Rr.multiply=sa,Rr.nth=function(n,t){return n&&n.length?ze(n,ef(t)):void 0},Rr.noConflict=function(){return Vn._===this&&(Vn._=Sn),this},Rr.noop=Hf,Rr.now=po,Rr.pad=function(n,t,r){n=af(n);var e=(t=ef(t))?Jt(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Cu(nr(u),r)+n+Cu(Qt(u),r)},Rr.padEnd=function(n,t,r){n=af(n);var e=(t=ef(t))?Jt(n):0;return t&&et){var e=n;n=t,t=e}if(r||n%1||t%1){var u=lr();return fr(n+u*(t-n+Zn("1e-"+((u+"").length-1))),t)}return Be(n,t)},Rr.reduce=function(n,t,r){var e=Lo(n)?_t:Rt,u=arguments.length<3;return e(n,Yu(t,4),r,u,ne)},Rr.reduceRight=function(n,t,r){var e=Lo(n)?gt:Rt,u=arguments.length<3;return e(n,Yu(t,4),r,u,te)},Rr.repeat=function(n,t,r){return t=(r?fi(n,t,r):void 0===t)?1:ef(t),Te(af(n),t)},Rr.replace=function(){var n=arguments,t=af(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Rr.result=function(n,t,r){var e=-1,u=(t=fu(t,n)).length;for(u||(u=1,n=void 0);++e9007199254740991)return[];var r=4294967295,e=fr(n,4294967295);n-=4294967295;for(var u=St(e,t=Yu(t));++r=i)return n;var f=r-Jt(e);if(f<1)return e;var a=o?cu(o,0,f).join(""):n.slice(0,f);if(void 0===u)return a+e;if(o&&(f+=a.length-f),Vo(u)){if(n.slice(f).search(u)){var c,l=a;for(u.global||(u=gn(u.source,af(en.exec(u))+"g")),u.lastIndex=0;c=u.exec(l);)var v=c.index;a=a.slice(0,void 0===v?f:v)}}else if(n.indexOf(Xe(u),f)!=f){var s=a.lastIndexOf(u);s>-1&&(a=a.slice(0,s))}return a+e},Rr.unescape=function(n){return(n=af(n))&&D.test(n)?n.replace(B,Vt):n},Rr.uniqueId=function(n){var t=++En;return af(n)+t},Rr.upperCase=$f,Rr.upperFirst=Nf,Rr.each=oo,Rr.eachRight=fo,Rr.first=Wi,Xf(Rr,(va={},ae(Rr,(function(n,t){kn.call(Rr.prototype,t)||(va[t]=n)})),va),{chain:!1}),Rr.VERSION="4.17.20",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){Rr[n].placeholder=Rr})),at(["drop","take"],(function(n,t){Cr.prototype[n]=function(r){r=void 0===r?1:or(ef(r),0);var e=this.__filtered__&&!t?new Cr(this):this.clone();return e.__filtered__?e.__takeCount__=fr(r,e.__takeCount__):e.__views__.push({size:fr(r,4294967295),type:n+(e.__dir__<0?"Right":"")}),e},Cr.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),at(["filter","map","takeWhile"],(function(n,t){var r=t+1,e=1==r||3==r;Cr.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Yu(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}})),at(["head","last"],(function(n,t){var r="take"+(t?"Right":"");Cr.prototype[n]=function(){return this[r](1).value()[0]}})),at(["initial","tail"],(function(n,t){var r="drop"+(t?"":"Right");Cr.prototype[n]=function(){return this.__filtered__?new Cr(this):this[r](1)}})),Cr.prototype.compact=function(){return this.filter(Gf)},Cr.prototype.find=function(n){return this.filter(n).head()},Cr.prototype.findLast=function(n){return this.reverse().find(n)},Cr.prototype.invokeMap=De((function(n,t){return"function"==typeof n?new Cr(this):this.map((function(r){return ye(r,n,t)}))})),Cr.prototype.reject=function(n){return this.filter(Ao(Yu(n)))},Cr.prototype.slice=function(n,t){n=ef(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Cr(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),void 0!==t&&(r=(t=ef(t))<0?r.dropRight(-t):r.take(t-n)),r)},Cr.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Cr.prototype.toArray=function(){return this.take(4294967295)},ae(Cr.prototype,(function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Rr[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(Rr.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Cr,a=o[0],c=f||Lo(t),l=function(n){var t=u.apply(Rr,dt([n],o));return e&&v?t[0]:t};c&&r&&"function"==typeof a&&1!=a.length&&(f=c=!1);var v=this.__chain__,s=!!this.__actions__.length,h=i&&!v,p=f&&!s;if(!i&&c){t=p?t:new Cr(this);var d=n.apply(t,o);return d.__actions__.push({func:to,args:[l],thisArg:void 0}),new zr(d,v)}return h&&p?n.apply(this,o):(d=this.thru(l),h?e?d.value()[0]:d.value():d)})})),at(["pop","push","shift","sort","splice","unshift"],(function(n){var t=bn[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Rr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Lo(u)?u:[],n)}return this[r]((function(r){return t.apply(Lo(r)?r:[],n)}))}})),ae(Cr.prototype,(function(n,t){var r=Rr[t];if(r){var e=r.name+"";kn.call(wr,e)||(wr[e]=[]),wr[e].push({name:t,func:r})}})),wr[Ru(void 0,2).name]=[{name:"wrapper",func:void 0}],Cr.prototype.clone=function(){var n=new Cr(this.__wrapped__);return n.__actions__=gu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=gu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=gu(this.__views__),n},Cr.prototype.reverse=function(){if(this.__filtered__){var n=new Cr(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Cr.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=Lo(n),e=t<0,u=r?n.length:0,i=function(n,t,r){var e=-1,u=r.length;for(;++e=this.__values__.length;return{done:n,value:n?void 0:this.__values__[this.__index__++]}},Rr.prototype.plant=function(n){for(var t,r=this;r instanceof Sr;){var e=Oi(r);e.__index__=0,e.__values__=void 0,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t},Rr.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Cr){var t=n;return this.__actions__.length&&(t=new Cr(this)),(t=t.reverse()).__actions__.push({func:to,args:[Pi],thisArg:void 0}),new zr(t,this.__chain__)}return this.thru(Pi)},Rr.prototype.toJSON=Rr.prototype.valueOf=Rr.prototype.value=function(){return ru(this.__wrapped__,this.__actions__)},Rr.prototype.first=Rr.prototype.head,Qn&&(Rr.prototype[Qn]=function(){return this}),Rr}();Vn._=Kt,void 0===(u=function(){return Kt}.call(t,r,t,e))||(e.exports=u)}).call(this)}).call(this,r("qv/MW"),r("8EmIR")(n))}}]); -//# sourceMappingURL=kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map \ No newline at end of file diff --git a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map b/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map deleted file mode 100644 index 03b9b05..0000000 --- a/runtime/dist/widget/kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///../node_modules/lodash/lodash.js"],"names":["FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","source","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","join","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","freeExports","exports","nodeType","freeModule","module","moduleExports","freeProcess","process","nodeUtil","types","require","binding","e","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","apply","func","thisArg","args","length","call","arrayAggregator","array","setter","iteratee","accumulator","index","value","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","Array","arrayPush","values","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","key","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","undefined","basePropertyOf","baseReduce","current","baseTimes","n","baseUnary","baseValues","props","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","string","test","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","split","asciiToArray","unescapeHtmlChar","_","runInContext","context","uid","defaults","pick","Date","Error","Math","String","TypeError","arrayProto","prototype","funcProto","objectProto","coreJsData","funcToString","toString","hasOwnProperty","idCounter","maskSrcKey","exec","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","replace","Buffer","Symbol","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","create","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","toStringTag","defineProperty","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","this","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","data","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","push","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","get","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","constructor","input","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","name","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","sort","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","slice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","arguments","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","fn","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","type","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","resolve","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bind","bindKey","WRAP_BIND_FLAG","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","next","done","iteratorToArray","remainder","toLength","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","concat","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","target","position","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON"],"mappings":"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ER,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IA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","file":"kpi-overview-runtime-widget-vendors~376ea35c.c7bdcf7c9a5c9b818c5c.js","sourcesContent":["/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.20';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '