New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@polymer/app-layout

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@polymer/app-layout - npm Package Compare versions

Comparing version 3.0.0-pre.4 to 3.0.0-pre.6

app-layout.html

13

app-box/app-box.js

@@ -1,6 +0,5 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-flex-layout/iron-flex-layout.js';
import { IronResizableBehavior } from '../../iron-resizable-behavior/iron-resizable-behavior.js';
import { AppScrollEffectsBehavior } from '../app-scroll-effects/app-scroll-effects-behavior.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
import '../../iron-resizable-behavior/iron-resizable-behavior.js';
import '../app-scroll-effects/app-scroll-effects-behavior.js';
/**

@@ -90,3 +89,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -136,4 +135,4 @@ :host {

behaviors: [
AppScrollEffectsBehavior,
IronResizableBehavior
Polymer.AppScrollEffectsBehavior,
Polymer.IronResizableBehavior
],

@@ -140,0 +139,0 @@

@@ -1,7 +0,4 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-media-query/iron-media-query.js';
import { AppLayoutBehavior } from '../app-layout-behavior/app-layout-behavior.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
import { dom } from '../../polymer/lib/legacy/polymer.dom.js';
import { afterNextRender } from '../../polymer/lib/utils/render-status.js';
import '../app-layout-behavior/app-layout-behavior.js';
/**

@@ -135,3 +132,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -185,3 +182,3 @@ :host {

behaviors: [
AppLayoutBehavior
Polymer.AppLayoutBehavior
],

@@ -245,3 +242,3 @@

get drawer() {
return dom(this.$.drawerSlot).getDistributedNodes()[0];
return Polymer.dom(this.$.drawerSlot).getDistributedNodes()[0];
},

@@ -258,3 +255,3 @@

_clickHandler: function(e) {
var target = dom(e).localTarget;
var target = Polymer.dom(e).localTarget;
if (target && target.hasAttribute('drawer-toggle')) {

@@ -284,3 +281,3 @@ var drawer = this.drawer;

// Enable drawer transitions after app-drawer-layout sets the initial opened state.
afterNextRender(this, function() {
Polymer.RenderStatus.afterNextRender(this, function() {
drawer.removeAttribute('no-transition');

@@ -287,0 +284,0 @@ });

@@ -1,6 +0,3 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-flex-layout/iron-flex-layout.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
import { afterNextRender } from '../../polymer/lib/utils/render-status.js';
import { dom } from '../../polymer/lib/legacy/polymer.dom.js';

@@ -67,3 +64,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -275,3 +272,3 @@ :host {

attached: function() {
afterNextRender(this, function() {
Polymer.RenderStatus.afterNextRender(this, function() {
this._boundEscKeydownHandler = this._escKeydownHandler.bind(this);

@@ -600,3 +597,3 @@ this.addEventListener('keydown', this._tabKeydownHandler.bind(this))

].join(',');
var focusableElements = dom(this).querySelectorAll(focusableElementsSelector);
var focusableElements = Polymer.dom(this).querySelectorAll(focusableElementsSelector);

@@ -631,3 +628,3 @@ if (focusableElements.length > 0) {

if (event.shiftKey) {
if (this._firstTabStop && dom(event).localTarget === this._firstTabStop) {
if (this._firstTabStop && Polymer.dom(event).localTarget === this._firstTabStop) {
event.preventDefault();

@@ -637,3 +634,3 @@ this._lastTabStop.focus();

} else {
if (this._lastTabStop && dom(event).localTarget === this._lastTabStop) {
if (this._lastTabStop && Polymer.dom(event).localTarget === this._lastTabStop) {
event.preventDefault();

@@ -640,0 +637,0 @@ this._firstTabStop.focus();

@@ -144,3 +144,3 @@ import '../../polymer/polymer.js';

/* Only the first item should expand */
/* Only the first item should expand *\/
.item:first-child {

@@ -147,0 +147,0 @@ &#64;apply --app-grid-expandible-item;

@@ -1,6 +0,4 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-flex-layout/iron-flex-layout.js';
import { AppLayoutBehavior } from '../app-layout-behavior/app-layout-behavior.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
import { dom } from '../../polymer/lib/legacy/polymer.dom.js';
import '../app-layout-behavior/app-layout-behavior.js';
/**

@@ -65,3 +63,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -148,3 +146,3 @@ :host {

behaviors: [
AppLayoutBehavior
Polymer.AppLayoutBehavior
],

@@ -174,3 +172,3 @@

get header() {
return dom(this.$.headerSlot).getDistributedNodes()[0];
return Polymer.dom(this.$.headerSlot).getDistributedNodes()[0];
},

@@ -177,0 +175,0 @@

@@ -1,7 +0,5 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-flex-layout/iron-flex-layout.js';
import { AppScrollEffectsBehavior } from '../app-scroll-effects/app-scroll-effects-behavior.js';
import { AppLayoutBehavior } from '../app-layout-behavior/app-layout-behavior.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
import { dom } from '../../polymer/lib/legacy/polymer.dom.js';
import '../app-scroll-effects/app-scroll-effects-behavior.js';
import '../app-layout-behavior/app-layout-behavior.js';
/**

@@ -121,3 +119,3 @@ @license

--app-header-background-rear-layer: {
/* The header is blue when condensed */
/* The header is blue when condensed *\/
background-color: blue;

@@ -229,3 +227,3 @@ };

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -317,4 +315,4 @@ :host {

behaviors: [
AppScrollEffectsBehavior,
AppLayoutBehavior
Polymer.AppScrollEffectsBehavior,
Polymer.AppLayoutBehavior
],

@@ -453,3 +451,3 @@

}
var nodes = dom(this.$.slot).getDistributedNodes();
var nodes = Polymer.dom(this.$.slot).getDistributedNodes();
// Get the element with the sticky attribute on it or the first element in the light DOM.

@@ -639,3 +637,3 @@ for (var i = 0, node; node = /** @type {!HTMLElement} */ (nodes[i]); i++) {

this._bgContainer.appendChild(this._bgFront);
dom(this.root).insertBefore(this._bgContainer, this.$.contentContainer);
Polymer.dom(this.root).insertBefore(this._bgContainer, this.$.contentContainer);
}

@@ -656,5 +654,5 @@ },

case 'mainTitle':
return dom(this).querySelector('[main-title]');
return Polymer.dom(this).querySelector('[main-title]');
case 'condensedTitle':
return dom(this).querySelector('[condensed-title]');
return Polymer.dom(this).querySelector('[condensed-title]');
}

@@ -661,0 +659,0 @@ return null;

import '../../polymer/polymer.js';
import { IronResizableBehavior } from '../../iron-resizable-behavior/iron-resizable-behavior.js';
import { dom } from '../../polymer/lib/legacy/polymer.dom.js';
import * as async from '../../polymer/lib/utils/async.js';
import { animationFrame } from '../../polymer/lib/utils/async.js';
import { Debouncer } from '../../polymer/lib/utils/debounce.js';
import { enqueueDebouncer } from '../../polymer/lib/utils/flush.js';
import '../../iron-resizable-behavior/iron-resizable-behavior.js';
export const AppLayoutBehavior = [
IronResizableBehavior, {
/**
* @polymerBehavior Polymer.AppLayoutBehavior
**/
/**
@license
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
Polymer.AppLayoutBehavior = [
Polymer.IronResizableBehavior, {

@@ -22,3 +29,3 @@ listeners: {

_appResetLayoutHandler: function(e) {
if (dom(e).path[0] === this) {
if (Polymer.dom(e).path[0] === this) {
return;

@@ -45,8 +52,8 @@ }

var cb = this._updateLayoutStates.bind(this);
if (async && animationFrame) {
this._layoutDebouncer = Debouncer.debounce(
if (Polymer.Async && Polymer.Async.animationFrame) {
this._layoutDebouncer = Polymer.Debouncer.debounce(
this._layoutDebouncer,
animationFrame,
Polymer.Async.animationFrame,
cb);
enqueueDebouncer(this._layoutDebouncer);
Polymer.enqueueDebouncer(this._layoutDebouncer);
}

@@ -53,0 +60,0 @@ // Polymer v1.x

import '../../polymer/polymer.js';
import { IronScrollTargetBehavior } from '../../iron-scroll-target-behavior/iron-scroll-target-behavior.js';
import '../../iron-scroll-target-behavior/iron-scroll-target-behavior.js';
import { _scrollEffects } from '../helpers/helpers.js';
export const AppScrollEffectsBehavior = [
IronScrollTargetBehavior,
/**
* `Polymer.AppScrollEffectsBehavior` provides an interface that allows an element to use scrolls effects.
*
* ### Importing the app-layout effects
*
* app-layout provides a set of scroll effects that can be used by explicitly importing
* `app-scroll-effects.html`:
*
* ```html
* <link rel="import" href="/bower_components/app-layout/app-scroll-effects/app-scroll-effects.html">
* ```
*
* The scroll effects can also be used by individually importing
* `app-layout/app-scroll-effects/effects/[effectName].html`. For example:
*
* ```html
* <link rel="import" href="/bower_components/app-layout/app-scroll-effects/effects/waterfall.html">
* ```
*
* ### Consuming effects
*
* Effects can be consumed via the `effects` property. For example:
*
* ```html
* <app-header effects="waterfall"></app-header>
* ```
*
* ### Creating scroll effects
*
* You may want to create a custom scroll effect if you need to modify the CSS of an element
* based on the scroll position.
*
* A scroll effect definition is an object with `setUp()`, `tearDown()` and `run()` functions.
*
* To register the effect, you can use `Polymer.AppLayout.registerEffect(effectName, effectDef)`
* For example, let's define an effect that resizes the header's logo:
*
* ```js
* Polymer.AppLayout.registerEffect('resizable-logo', {
* setUp: function(config) {
* // the effect's config is passed to the setUp.
* this._fxResizeLogo = { logo: Polymer.dom(this).querySelector('[logo]') };
* },
*
* run: function(progress) {
* // the progress of the effect
* this.transform('scale3d(' + progress + ', '+ progress +', 1)', this._fxResizeLogo.logo);
* },
*
* tearDown: function() {
* // clean up and reset of states
* delete this._fxResizeLogo;
* }
* });
* ```
* Now, you can consume the effect:
*
* ```html
* <app-header id="appHeader" effects="resizable-logo">
* <img logo src="logo.svg">
* </app-header>
* ```
*
* ### Imperative API
*
* ```js
* var logoEffect = appHeader.createEffect('resizable-logo', effectConfig);
* // run the effect: logoEffect.run(progress);
* // tear down the effect: logoEffect.tearDown();
* ```
*
* ### Configuring effects
*
* For effects installed via the `effects` property, their configuration can be set
* via the `effectsConfig` property. For example:
*
* ```html
* <app-header effects="waterfall"
* effects-config='{"waterfall": {"startsAt": 0, "endsAt": 0.5}}'>
* </app-header>
* ```
*
* All effects have a `startsAt` and `endsAt` config property. They specify at what
* point the effect should start and end. This value goes from 0 to 1 inclusive.
*
* @polymerBehavior
*/
/**
@license
Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
Polymer.AppScrollEffectsBehavior = [
Polymer.IronScrollTargetBehavior,
{

@@ -8,0 +103,0 @@

@@ -1,4 +0,3 @@

import { html } from '../../../polymer/polymer.js';
import { AppScrollEffectsBehavior } from '../app-scroll-effects-behavior.js';
import { Polymer } from '../../../polymer/lib/legacy/polymer-fn.js';
import '../../../polymer/polymer.js';
import '../app-scroll-effects-behavior.js';

@@ -15,3 +14,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -69,3 +68,3 @@ :host {

behaviors: [
AppScrollEffectsBehavior
Polymer.AppScrollEffectsBehavior
],

@@ -72,0 +71,0 @@

@@ -1,4 +0,3 @@

import { html } from '../../polymer/polymer.js';
import '../../polymer/polymer.js';
import '../../iron-flex-layout/iron-flex-layout.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';
/**

@@ -61,3 +60,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -64,0 +63,0 @@

import '../../polymer/polymer.js';
import { Polymer } from '../../polymer/lib/legacy/polymer-fn.js';

@@ -4,0 +3,0 @@ /**

{
"name": "@polymer/app-layout",
"flat": true,
"version": "3.0.0-pre.4",
"version": "3.0.0-pre.6",
"description": "A set of layout elements for your app",

@@ -17,26 +17,26 @@ "contributors": [

"dependencies": {
"@polymer/iron-flex-layout": "^3.0.0-pre.4",
"@polymer/iron-media-query": "^3.0.0-pre.4",
"@polymer/iron-resizable-behavior": "^3.0.0-pre.4",
"@polymer/iron-scroll-target-behavior": "^3.0.0-pre.4",
"@polymer/polymer": "^3.0.0-pre.4"
"@polymer/iron-flex-layout": "^3.0.0-pre.6",
"@polymer/iron-media-query": "^3.0.0-pre.6",
"@polymer/iron-resizable-behavior": "^3.0.0-pre.6",
"@polymer/iron-scroll-target-behavior": "^3.0.0-pre.6",
"@polymer/polymer": "^3.0.0-pre.6"
},
"devDependencies": {
"@polymer/font-roboto": "^3.0.0-pre.4",
"@polymer/iron-component-page": "^3.0.0-pre.4",
"@polymer/iron-icon": "^3.0.0-pre.4",
"@polymer/iron-icons": "^3.0.0-pre.4",
"@polymer/iron-list": "^3.0.0-pre.4",
"@polymer/iron-pages": "^3.0.0-pre.4",
"@polymer/iron-scroll-threshold": "^3.0.0-pre.4",
"@polymer/paper-fab": "^3.0.0-pre.4",
"@polymer/paper-icon-button": "^3.0.0-pre.4",
"@polymer/paper-item": "^3.0.0-pre.4",
"@polymer/paper-listbox": "^3.0.0-pre.4",
"@polymer/paper-progress": "^3.0.0-pre.4",
"@polymer/paper-spinner": "^3.0.0-pre.4",
"@polymer/paper-styles": "^3.0.0-pre.4",
"@polymer/paper-tabs": "^3.0.0-pre.4",
"@polymer/test-fixture": "^3.0.0-pre.4",
"wct-browser-legacy": "0.0.1-pre.10",
"@polymer/font-roboto": "^3.0.0-pre.6",
"@polymer/iron-component-page": "^3.0.0-pre.6",
"@polymer/iron-icon": "^3.0.0-pre.6",
"@polymer/iron-icons": "^3.0.0-pre.6",
"@polymer/iron-list": "^3.0.0-pre.6",
"@polymer/iron-pages": "^3.0.0-pre.6",
"@polymer/iron-scroll-threshold": "^3.0.0-pre.6",
"@polymer/paper-fab": "^3.0.0-pre.6",
"@polymer/paper-icon-button": "^3.0.0-pre.6",
"@polymer/paper-item": "^3.0.0-pre.6",
"@polymer/paper-listbox": "^3.0.0-pre.6",
"@polymer/paper-progress": "^3.0.0-pre.6",
"@polymer/paper-spinner": "^3.0.0-pre.6",
"@polymer/paper-styles": "^3.0.0-pre.6",
"@polymer/paper-tabs": "^3.0.0-pre.6",
"@polymer/test-fixture": "^3.0.0-pre.6",
"wct-browser-legacy": "0.0.1-pre.11",
"@webcomponents/webcomponentsjs": "^1.0.0"

@@ -43,0 +43,0 @@ },

@@ -13,4 +13,2 @@ import '../../app-drawer-layout/app-drawer-layout.js';

import '../../../paper-tabs/paper-tabs.js';
import { Polymer } from '../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../polymer/polymer.js';

@@ -27,3 +25,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -30,0 +28,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

import './recipe-detail.js';
import './recipe-list.js';
import './app-icons.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
import { scroll } from '../../../helpers/helpers.js';

@@ -18,3 +16,3 @@

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -21,0 +19,0 @@ :host {

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

import './app-icons.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';

@@ -15,3 +13,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -18,0 +16,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

@@ -5,4 +5,2 @@ import './app-icons.js';

import './two-columns-grid.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
import { scroll } from '../../../helpers/helpers.js';

@@ -20,3 +18,3 @@

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -23,0 +21,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -28,3 +25,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -31,0 +28,0 @@

import './shrine-list.js';
import './shrine-detail.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
import { scroll } from '../../../helpers/helpers.js';

@@ -17,3 +15,3 @@

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -20,0 +18,0 @@

import './shrine-simple-item.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';

@@ -15,3 +13,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -18,0 +16,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

import './shrine-item.js';
import './shrine-featured-item.js';
import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';

@@ -16,3 +14,3 @@ /**

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -19,0 +17,0 @@

@@ -1,4 +0,1 @@

import { Polymer } from '../../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../../polymer/polymer.js';
/**

@@ -14,3 +11,3 @@ @license

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -17,0 +14,0 @@

@@ -1,3 +0,1 @@

import { Polymer } from '../../../polymer/lib/legacy/polymer-fn.js';
import { html } from '../../../polymer/polymer.js';
const $_documentContainer = document.createElement('div');

@@ -24,3 +22,3 @@ $_documentContainer.setAttribute('style', 'display: none;');

Polymer({
_template: html`
_template: Polymer.html`
<style>

@@ -27,0 +25,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc