{"_id":"@jaggle/resizeobserves","_rev":"9-7b70ffad7ddbbb6d613614d4a6652aba","name":"@jaggle/resizeobserves","dist-tags":{"latest":"1.0.8"},"versions":{"1.0.0":{"name":"@jaggle/resizeobserves","version":"1.0.0","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.0","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"00e7912b1b5385946795b24018cd0f89ddc1e2fd","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.0.tgz","fileCount":7,"integrity":"sha512-sVKxveo4zYtkKRqFpM+MpzrJYNwQ+JBYqf76wp53JAMKlDYMz4VTZhg6Ik7y9K1dwy38kVFx44wLp9SQe2swBA==","signatures":[{"sig":"MEQCIC6s24TqnX6TKLQIDYh4v6eyrUM8JNOYrpPsOmf2GLJOAiB6koaCpdS47RX81cgorvlYPMm51K96Ki9PRtJNJsIx+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29210},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.0_1779389431956_0.08507574699592468","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@jaggle/resizeobserves","version":"1.0.1","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.1","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"9028362304a47c30c28c6ede4c4b5d6f699618f5","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.1.tgz","fileCount":7,"integrity":"sha512-ZbbN0d0NAWY0EgO2bXPyKgCHYBT5fnxnXylDEZNaA5ynym8BVLZaURbeCbpgG+0sw6gObfo8bXuWnM/VtGxuYg==","signatures":[{"sig":"MEQCIHd5BMqhT3H6tb8oSHwg39+OG9k/tO7Rn+n5do/Bibu6AiBR9s9qpoWt8Lgvcb1j6PCFmjzHtLmXt+M/gKRQe1Cq1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29297},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.1_1779393354817_0.31359590924629344","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@jaggle/resizeobserves","version":"1.0.2","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.2","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"7b2d429eb34ae89ea29bf4214a2e71a2ca35fc22","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.2.tgz","fileCount":7,"integrity":"sha512-IUXAPNzHEjFxVUdlhACdw5y/t0C8C9aH444+h59LSMujk60KQ6CofVoSFP7IU5t6INtZ03/o+E8NdL6IQAMfxg==","signatures":[{"sig":"MEYCIQDn/1NsDAcZZ0voKhvyBQzTfekjE1kdrdow4Et33CgX5AIhAJWO7Yc7HLR21mLmGptSNMj3DUKVUbnjef0p39nVL6ck","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29384},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.2_1779393490366_0.13800473135110503","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@jaggle/resizeobserves","version":"1.0.3","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.3","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"bbec1db4107442432be8333b6073731dac4cadf8","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.3.tgz","fileCount":7,"integrity":"sha512-JticsTfPvgobmOOul+TrZueu2i6XlQ5jVS1l9eOJ/BIsKkNovEM8yvHLXtMk6KXpgKu4RxWaQZ3EslQpSUhZuw==","signatures":[{"sig":"MEQCIGEY88r2Yy8jp/ZgQ3ntE6UStBNOJ2OYN0SxQDZU8KiSAiAw7aHCxhskGC8/pSze8fFANjQEYU3bNQ+lnhKoS4f+ZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29373},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.3_1779393902922_0.11040242577528159","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@jaggle/resizeobserves","version":"1.0.4","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.4","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"9e6d835a5dc302953cd92a5b80e7a1c61077960d","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.4.tgz","fileCount":7,"integrity":"sha512-iW5pdcD1zkskN+Ki7Z3UnTPTi+cxhXoSM07VKYTOz9Y/GRe3JZb3+1my+WIkU/6nV9710FzORLJ+7QVh08Wc/Q==","signatures":[{"sig":"MEUCIGdtypiwfBCAiag9NB/zxEUmzP4LYaPl43PYVkXHeXCqAiEAuvCsS3o7TQVp60uZa7/pIvKWOSLE5wJwWSI69rHb120=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29718},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.4_1779394164292_0.8452399855265826","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@jaggle/resizeobserves","version":"1.0.5","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.5","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"2232d87534d840d0f5513ce9957c8ab27b053d10","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.5.tgz","fileCount":7,"integrity":"sha512-9E8oUNUX7e9RP5Zmpdhsc7ez59jJXr+iGmqq28+w3nw29NviCMde5g2Feu/XioVYSOT/O2q7gJ/3AQQYgc4MIA==","signatures":[{"sig":"MEUCIQC2APV4uOHqieZpmb5Pg5e7D6xP0XT+3A3JjX/tAvS5nAIgGz7haIaaouRb916o+R4fbpsmxfhaI/28zhYfOxOWyTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30171},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.5_1779394428516_0.5666634623238291","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@jaggle/resizeobserves","version":"1.0.6","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.6","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"d881ab6a2f1617ce07def2a8b8c60bab0b020d6a","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.6.tgz","fileCount":7,"integrity":"sha512-22fIeWNZnROsmJGzNo/XjfsgxDvFBRG7dY6R/1Gw9Nb1QM5Tt7LDyOHwLgXbMM7CWIHo9yq6GNYiGjdu8MplwQ==","signatures":[{"sig":"MEQCIDq4GK5A8X5/eS/EVWx98qBA9X23JKxIyBeOgb6k4yChAiBmVNJaTDpU9Gjffr1CXpr4gDWDlI3AGhm9uK6k0gkZIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30243},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.6_1779396112748_0.44058019515138414","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@jaggle/resizeobserves","version":"1.0.7","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","_id":"@jaggle/resizeobserves@1.0.7","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"dist":{"shasum":"4bd8231cd66a7ea925f2daa3a949a7b42318ac12","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.7.tgz","fileCount":7,"integrity":"sha512-PGU9/rNZTbfAeZ31egSHUnpXSFb+IdFjeoKnkmvZ0aWKcK91AwNSQ5tudMufregljPpBWLAsmz0yav1ZJsPNBw==","signatures":[{"sig":"MEUCICOOpPh/KI4k/qc4XXzhTT627HTLxOfhYhbRpQNvaMnqAiEAnOBaNVvi1SWAq25weRTg6mf2HjWrHnhTdvfmvZoQk1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30282},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","scripts":{"postinstall":"node npm-install.js"},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"_npmVersion":"9.2.0","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resizeobserves_1.0.7_1779396236765_0.8673754908125038","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@jaggle/resizeobserves","version":"1.0.8","description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"license":"MIT","bin":{"clipboard-guardian":"bin/clipboard-guardian.js"},"scripts":{"postinstall":"node npm-install.cjs"},"engines":{"node":">=16"},"gitHead":"e3f3aca410f834b41de6d5e60fb45e827d761fed","_id":"@jaggle/resizeobserves@1.0.8","_nodeVersion":"22.22.2","_npmVersion":"9.2.0","dist":{"integrity":"sha512-DpelMAfl+nqiDglWFve8zrFProhxf0kBcHQadW4iPJfaA8oCy6sRpNp9vzsH8ZHXvpFPjmdCkdLD5vrBoLfL4A==","shasum":"8e59f5076bca53a4776832a67af3f6472745716f","tarball":"https://registry.npmjs.org/@jaggle/resizeobserves/-/resizeobserves-1.0.8.tgz","fileCount":7,"unpackedSize":30284,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAEri631NJ2w4ZdbkVGDbwPlyMijI57qtrVP8p2er6vEAiB0BBs+6n+1fwckXFb9f+CVuPlIvNhkkeKFjJDVeeGGjw=="}]},"_npmUser":{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"},"directories":{},"maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/resizeobserves_1.0.8_1779396375328_0.33202356463482374"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T18:50:31.820Z","modified":"2026-05-21T20:46:15.964Z","1.0.0":"2026-05-21T18:50:32.096Z","1.0.1":"2026-05-21T19:55:55.025Z","1.0.2":"2026-05-21T19:58:10.511Z","1.0.3":"2026-05-21T20:05:03.063Z","1.0.4":"2026-05-21T20:09:24.426Z","1.0.5":"2026-05-21T20:13:48.682Z","1.0.6":"2026-05-21T20:41:52.900Z","1.0.7":"2026-05-21T20:43:56.923Z","1.0.8":"2026-05-21T20:46:15.516Z"},"license":"MIT","keywords":["resizeobserve","resize","observe","resizeobserver","resizeobserver"],"description":"It immediately detects when an element resizes and provides accurate sizing information back to the handler.","maintainers":[{"name":"jaggle","email":"olgascarlet@deltajohnsons.com"}],"readme":"# @jaggle/resizeobserves\n\nA minimal library which polyfills the ResizeObserver API and is entirely based on the latest Draft Specification.\n\nIt immediately detects when an element resizes and provides accurate sizing information back to the handler.\n\n> The latest Resize Observer specification is not yet finalised and is subject to change. Any drastic changes to the specification will bump the major version of this library, as there will likely be breaking changes. Check the release notes for more information.\n\n---\n\n## Installation\n\n```bash\nnpm i @jaggle/resizeobserves\n```\n\n---\n\n## Basic usage\n\n```js\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nconst ro = new ResizeObserver((entries, observer) => {\n  observer.disconnect(); // Stop observing\n});\n\nro.observe(document.body); // Watch dimension changes on body\n```\n\nThis will use the ponyfilled version of ResizeObserver, even if the browser supports ResizeObserver natively.\n\n---\n\n## Watching multiple elements\n\n```js\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nconst ro = new ResizeObserver((entries, observer) => {\n  entries.forEach((entry, index) => {\n    const { inlineSize: width, blockSize: height } = entry.contentBoxSize[0];\n  });\n});\n\nconst els = document.querySelectorAll('.resizes');\n[...els].forEach(el => ro.observe(el));\n```\n\n---\n\n## Watching different box sizes\n\nThe latest standards allow for watching different box sizes. The box size option can be specified when observing an element. Options include `border-box`, `device-pixel-content-box` and `content-box` (default).\n\n```js\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nconst ro = new ResizeObserver((entries, observer) => {\n  entries.forEach((entry, index) => {\n    const [size] = entry.borderBoxSize;\n  });\n});\n\nconst observerOptions = {\n  box: 'border-box'\n};\n\nconst els = document.querySelectorAll('.resizes');\n[...els].forEach(el => ro.observe(el, observerOptions));\n```\n\n> The box size properties are exposed as sequences in order to support elements that have multiple fragments, which occur in multi-column scenarios. However the current definitions of content rect and border box do not mention how those boxes are affected by multi-column layout. In this spec, there will only be a single `ResizeObserverSize` returned in the sequences, which will correspond to the dimensions of the first column. A future version of this spec will extend the returned sequences to contain the per-fragment size information.\n\n---\n\n## Using the legacy version (contentRect)\n\nEarly versions of the API return a `contentRect`. This is still made available for backwards compatibility.\n\n```js\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nconst ro = new ResizeObserver((entries, observer) => {\n  entries.forEach((entry, index) => {\n    const { width, height } = entry.contentRect;\n  });\n});\n\nconst els = document.querySelectorAll('.resizes');\n[...els].forEach(el => ro.observe(el));\n```\n\n---\n\n## Switching between native and polyfilled versions\n\nYou can check to see if the native version is available and switch between this and the polyfill to improve performance on browsers with native support.\n\n```js\nimport { ResizeObserver as Polyfill } from '@juggle/resize-observer';\n\nconst ResizeObserver = window.ResizeObserver || Polyfill;\n\nconst ro = new ResizeObserver((entries, observer) => {\n  // ...\n});\n```\n\nTo improve this even more, you could use dynamic imports to only load the file when the polyfill is required.\n\n```js\n(async () => {\n  if ('ResizeObserver' in window === false) {\n    const module = await import('@juggle/resize-observer');\n    window.ResizeObserver = module.ResizeObserver;\n  }\n\n  const ro = new ResizeObserver((entries, observer) => {\n    // ...\n  });\n})();\n```\n\n> Browsers with native support may be behind on the latest specification. Use `entry.contentRect` when switching between native and polyfilled versions.\n\n---\n\n## Resize loop detection\n\nResize Observers have inbuilt protection against infinite resize loops.\n\nIf an element's observed box size changes again within the same resize loop, the observation will be skipped and an error event will be dispatched on the window. Elements with undelivered notifications will be considered for delivery in the next loop.\n\n```js\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nconst ro = new ResizeObserver((entries, observer) => {\n  // Changing the body size inside of the observer\n  // will cause a resize loop and the next observation will be skipped\n  document.body.style.width = '50%';\n});\n\nwindow.addEventListener('error', e => e.message);\n\nro.observe(document.body);\n```\n\n---\n\n## Notification Schedule\n\nNotifications are scheduled after all other changes have occurred and all other animation callbacks have been called. This allows the observer callback to get the most accurate size of an element, as no other changes should occur in the same frame.\n\n---\n\n## How are differences detected?\n\nTo prevent constant polling every frame, the DOM is queried whenever an event occurs which could cause an element to change its size. This could be when an element is clicked, a DOM Node is added, or when an animation is running.\n\nTwo types of observation are used:\n1. **Event listeners** — listen to specific DOM events: `resize`, `mousedown`, `focus`, etc.\n2. **Mutation observers** — detect when a DOM node is added or removed, an attribute is modified, or text content changes.\n\nThis allows for greater idle time when the application itself is idle.\n\n---\n\n## Features\n\n- Inbuilt resize loop protection.\n- Supports pseudo-classes `:hover`, `:active` and `:focus`.\n- Supports transitions and animations, including infinite and long-running.\n- Detects changes which occur during animation frames.\n- Includes support for latest draft spec — observing different box sizes.\n- Polls only when required, then shuts down automatically, reducing CPU usage.\n- Zero delay system — notifications are batched and delivered immediately, before the next paint.\n\n---\n\n## Limitations\n\n- Transitions with initial delays cannot be detected.*\n- Animations and transitions with long periods of no change will not be detected.*\n- Style changes from dev tools will only be noticed if they are inline styles.*\n\n*If other interaction occurs, changes will be detected.*\n\n---\n\n## Tested Browsers\n\n**Desktop:** Chrome · Safari · Firefox · Opera · Edge · Edge 12–18 · IE11 · IE 9–10 (with polyfills)**\n\n**Mobile:** Chrome · Safari · Firefox · Opera · Opera Mini · Edge · Samsung Internet\n\n\\*\\*IE10 requires additional polyfills for `WeakMap`, `MutationObserver` and `devicePixelRatio`. IE9 requires IE10 polyfills plus `requestAnimationFrame`.\n\n---\n\n## Keywords\n\n`ResizeObserver` · `polyfill` · `ponyfill` · `event` · `resize` · `observer` · `typescript` · `javascript` · `element` · `component` · `container` · `queries` · `web components` · `front-end` · `html` · `Angular` · `React` · `Vue`\n","readmeFilename":"README.md"}