Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/implement improved graceful degradation ripple #282

Merged

Conversation

cristobalchao
Copy link
Contributor

Resolves #189

@Garbee
Copy link
Contributor

Garbee commented Feb 9, 2017

How exactly should the "enhanced" states look when tabbing through a document? Currently there is no indication of what button has focus which is extremely inaccessible.

@traviskaufman
Copy link
Contributor

@cristobalchao not sure that this branch was cleanly rebased from master since it looks like there's a bunch of extemporaneous commits prior to 64b9db3. You may want to try and git pull --rebase origin master on this branch, checkout a fresh branch and cherry-pick 64b9db3 and 7a4df35 over, or use some other strategy.

@@ -75,6 +75,42 @@
</div>
</fieldset>
<fieldset>
<legend>Graceful degraded buttons</legend>
<button class="mdc-button" no-js>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we make those attributes data-demo-no-js instead of no-js so that they are valid HTML attrs? I also think having the demo in there is useful since it signals to users that the data attribute is not part of the component's API and exists for demo purposes only

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

</div>
</div>
<div>
<h2>Bounded - Graceful degraded</h2>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: How about "CSS Only" instead of "Gracefully degraded"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

@@ -75,6 +75,42 @@
</div>
</fieldset>
<fieldset>
<legend>Graceful degraded buttons</legend>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about "CSS Only" instead of "Gracefully degraded"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM


section > div {
margin: 48px 0;
width: 400px;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we add a media query here that sets it to 100% width if the viewport is smaller than 400px? I'm thinking of how this would appear on v. small screens

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or just max-width: 400px; so on small screens it just gets smaller as-needed. But doesn't grow above that.

</div>
<div>
<h2>Bounded - Graceful degraded</h2>
<div class="mdc-ripple-surface demo-surface mdc-elevation--z2" no-js tabindex="0">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment regarding no-js --> data-demo-no-js

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM


overflow: hidden;

@include mdc-theme-dark(".mdc-button", true) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this can just be @include mdc-theme-dark { here. We use the first argument in the case where we need to style an BEM element class to adhere to a dark theme treatment

.mdc-component__element {
  @include mdc-theme-dark(".mdc-component") {
    // ...
  } 
}

And we usually use the second argument when we're styling a modifier class for dark theme treatment, e.g.

.mdc-component--mod {
  @include mdc-theme-dark(".mdc-component", true) {
    // ...
  }
}

The mdc-theme README has more info on this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

.mdc-button--raised {
@each $theme-style in (primary, accent) {
&.mdc-button--#{$theme-style} {
@include mdc-ripple-base;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we put a TODO here and in other components containing elevation that we want to disable ink wash on hover and alter elevation instead as part of #194?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

@@ -30,6 +30,9 @@ to provide components (or any element at all) with a
material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable
without adding any extra DOM to your elements.

and includes a gracefully degraded version that can be used
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This paragraph looks a bit broken...

Maybe we should say:

MDC Ripple also works without javascript, where it gracefully degrades to a simpler CSS-Only implementation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better!

```

#### Adding the ripple Sass

When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. Therefore, to add a ripple to our surface, first we include the proper Sass mixins within our surface's styles when it contains this class. We also add a few additional properties that ensure the ripple's UX is correct.
To add a ripple to our surface, first we include the proper Sass mixins within our surface's styles when it contains this class. We also add a few additional properties that ensure the ripple's UX is correct.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can remove the portion of text that says "when it contains this class", since I'm pretty sure "this class" refers to mdc-ripple-upgraded, which we now take care of automatically.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

@@ -121,6 +98,8 @@ When a ripple is successfully initialized on an element, it dynamically adds a `

This code sets up `.surface` with the correct css variables as well as `will-change` properties to support the ripple. It then dynamically generates the correct selectors such that the surface's `::before` element functions as a background ripple, and the surface's `::after` element functions as a foreground ripple.

When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. If ripple is not initialized but Sass misins are included within our surface, the ripple would be on a graceful degraded state.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change "the ripple would be on a graceful degraded state" to "the ripple will still work, but it would use a simpler, CSS-Only implementation which relies on :hover, :active, and :focus".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGTM

@cristobalchao cristobalchao force-pushed the feat/implement-improved-graceful-degradation-ripple branch 2 times, most recently from dfde1bc to fd06f07 Compare February 10, 2017 01:12

overflow: hidden;

@include mdc-theme-dark(".mdc-button") {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should just be @include mdc-theme-dark { with no argument

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup!

}
}

/* TODO(cristobalchao): Disable ink wash on hover and alter elevation instead for raised surfaces. */
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we switch this to a // Sass style comment? This way it's not output in the built CSS

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sgtm

@@ -121,6 +95,8 @@ When a ripple is successfully initialized on an element, it dynamically adds a `

This code sets up `.surface` with the correct css variables as well as `will-change` properties to support the ripple. It then dynamically generates the correct selectors such that the surface's `::before` element functions as a background ripple, and the surface's `::after` element functions as a foreground ripple.

When a ripple is successfully initialized on an element, it dynamically adds a `mdc-ripple-upgraded` class to that element. If ripple is not initialized but Sass misins are included within our surface, the ripple will still work, but it would use a simpler, CSS-Only implementation which relies on `::hover`, `::active`, and `::focus`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: :hover, :active, and :focus, not double-colon. Double-colons are for pseudo-elements, whereas single-colons are for pseudo-classes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ups, my bad!

@@ -101,6 +109,26 @@
}
// stylelint-enable at-rule-empty-line-before, block-closing-brace-newline-after

&.mdc-ripple-upgraded {
&#{$pseudo} {
transition-duration: 0ms;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this just be transition: none; instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better!

@traviskaufman
Copy link
Contributor

Don't we have to remove the manual graceful degredation styles components that have ripples as well?

λ for f in $(grep -l '@material/ripple' $(find packages -name "package.json")); do echo $(dirname $f); done;
packages/material-components-web
packages/mdc-button
packages/mdc-checkbox
packages/mdc-fab
packages/mdc-icon-toggle
packages/mdc-list
packages/mdc-radio
packages/mdc-ripple

@@ -42,6 +42,13 @@

will-change: transition, opacity;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eek! This should be transform, not transition 😝 by bad! Mind fixing this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lol! I totally missed that too. Fixed!

Copy link
Contributor

@sgomes sgomes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally LGTM, left a few comments.

</div>
</div>
<div>
<h2>Unbounded - CSS Only</h2>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fallback ripple seems larger than the JS-enabled one. Is this intentional?

material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable
without adding any extra DOM to your elements.
MDC Ripple provides the Javascript and CSS required to provide components (or any element at all) with a
material "ink ripple" interaction effect. It is designed to be efficient, un-invasive, and usable without adding any extra DOM to your elements.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: no need for hyphen in "un-invasive".

left: calc(50% - #{$radius});
width: $radius * 2;
height: $radius * 2;
transform: scale(var(--mdc-ripple-fg-scale));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In order to make var() as bulletproof as possible, consider following the pattern:

transform: scale(0);
transform: scale(var(--mdc-ripple-fg-scale, 0));

(replace 0 with whatever default value you deem fit)

The first line gives you a fallback for browsers that don't understand custom properties, whereas the second value in the var() function gives you a fallback in case --mdc-ripple-fg-scale isn't defined.

Another option is to stick a big a big @supports around everything (which to be fair, you may already be doing in JavaScript), but you should at least keep the second parameter to var().

&#{$pseudo} {
top: 0;
left: 0;
width: var(--mdc-ripple-fg-size);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above, and everywhere else var() is used in the file.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to use the dual-property method for .mdc-ripple-upgraded? I think we left that off initially b/c we don't even upgrade the ripple if Custom Vars aren't supported by the browser. Or, should we just do it for consistency?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, if we're checking in JS, there's no need for the first fallback. Still might be useful to do var(--mdc-ripple-fg-size, 16px) (or whatever sensible default), in case --mdc-ripple-fg-size isn't defined.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, the second arg fallback is always a good call

@cristobalchao
Copy link
Contributor Author

All issues addressed PTAL

@@ -22,6 +22,40 @@
@import "@material/typography/mixins";

// postcss-bem-linter: define button

.mdc-button {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These style rules should be put within the .mdc-button declaration below, which is the top-level declaration for mdc-button. Having an extra one seems redundant, no?

@@ -58,8 +62,8 @@ $mdc-radio-transition-duration: 120ms;
left: 0;
width: 100%;
height: 100%;
transform: scale(0, 0);
transition: mdc-radio-exit(opacity), mdc-radio-exit(transform);
// transform: scale(0, 0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

forgot to remove?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ups...my bad!

left: var(--mdc-ripple-left);
width: var(--mdc-ripple-fg-size);
height: var(--mdc-ripple-fg-size);
top: calc(50% - #{$radius / 2}); // fallback for browsers that don't support custom properties
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need the fallback here, since this gets styled by using mdc-ripple-upgraded--unbounded. Since the JS checks for CSS Var support before attaching any of the mdc-ripple-upgraded classes, we can guarantee here that CSS variables are supported and thus you can remove this.

left: calc(50% - #{$radius});
width: $radius * 2;
height: $radius * 2;
transform: scale(0); // fallback for browsers that don't support custom properties
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can remove the inline comment; this is a convention in our codebase which we talk about in our mdc-theme package.

&#{$pseudo} {
top: 0;
left: 0;
width: $radius; // fallback for browsers that don't support custom properties
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment here regarding not needing fallback for mdc-ripple-upgraded

@@ -272,7 +273,8 @@ export default class MDCRippleFoundation extends MDCFoundation {
let approxCurScale = 0;
if (msElapsed > FG_TRANSFORM_DELAY_MS) {
const percentComplete = Math.min((msElapsed - FG_TRANSFORM_DELAY_MS) / this.xfDuration_, 1);
approxCurScale = percentComplete * this.fgScale_;
// approxCurScale = percentComplete * this.fgScale_;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

forgot to remove?

Copy link
Contributor Author

@cristobalchao cristobalchao Feb 15, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My bad again!

@cristobalchao
Copy link
Contributor Author

All issues addressed PTAL

@@ -115,7 +115,7 @@
left: calc(50% - #{$radius});
width: $radius * 2;
height: $radius * 2;
transform: scale(0); // fallback for browsers that don't support custom properties
transform: scale(0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this fallback is not needed, since the property is under .mdc-ripple-upgraded

@traviskaufman
Copy link
Contributor

Couple of issues I noticed in the demo:

  • JS Checkboxes and JS Radios no longer seem to use the correct ripple functionality
  • I think for upgraded ripples, there's a jump-cut when hovering over the elements. I think we need to remove the hover styles attached by the graceful degredation fallback when the ripple is upgraded. This is especially apparent for unbounded ripples.

@cristobalchao
Copy link
Contributor Author

All issues addressed PTAL

@traviskaufman traviskaufman force-pushed the feat/implement-improved-graceful-degradation-ripple branch from 409aef4 to bc73a22 Compare February 22, 2017 20:56
@traviskaufman
Copy link
Contributor

Excellent work @cristobalchao!

@traviskaufman traviskaufman merged commit bfac404 into master Feb 22, 2017
@traviskaufman traviskaufman deleted the feat/implement-improved-graceful-degradation-ripple branch February 22, 2017 21:03
@omtinez
Copy link

omtinez commented Feb 28, 2017

Does this address elements retaining the "ripple" on focus? E.g. the radio buttons keep a "halo" after clicking them: http://i.imgur.com/NoP7SsU.png

I though I would verify since this seemed like it addresses that before opening a new issue. Also, related: are there any plans to allow users from disabling the ripple effects altogether?

@Garbee
Copy link
Contributor

Garbee commented Feb 28, 2017

@omtinez That seems like intended functionality. That is focus state for accessibility purposes and is highly required.

Ripple effects are added via JavaScript instantiation. Otherwise there should be a CSS-only effect for these states that looks like a ripple but doesn't function like the actual ripples. If you use the JS though for these form controls, Ripples are basically bundled-in since they are a specification detail.

@cristobalchao
Copy link
Contributor Author

@omtinez That's the intended behavior. As @Garbee mentioned, the focus state is required for all components for accessibility reasons. About disabling the ripple effects altogether, there are no plans in the short term future.

@omtinez
Copy link

omtinez commented Feb 28, 2017

I commend your focus on accessibility, but I think that the current look is a bit over the top (in my opinion, hideous) by making a radio button appear twice as big. Specially considering that the Javascript-enabled behavior is a ripple for a fraction of a second; I'm not sure that the Javascript-enabled behavior is much more accessible e.g. to someone visually impaired. I'm happy to open a separate issue if you are willing to discuss the idea there (or want it just for tracking purposes, even if it's going to be immediately closed).

For the sake of documenting, even though it breaks the accessibility argument, this is the CSS workaround that I'm using and disables the enormous halo around radio buttons:

.mdc-radio__background::before {
    display: none;
}

@Garbee
Copy link
Contributor

Garbee commented Mar 1, 2017

These states are explicitly defined in the spec. So it adheres to MD guidance as-is and is accessible. Disabling this is discouraged unless you replace it with some other focus indicator for people who need this. However unless the MD team provides us with alternative measures to implement for a11y in this case it shouldn't be changed.

I believe the focus state is shown initially then removed with JS since that is a part of the ripple effect specification somewhere else. IMO it isn't as useful for a11y but that is purely subjective conjecture and I have no data to back it up to influence any changes.

acdvorak pushed a commit that referenced this pull request Jan 18, 2019
## The devDependency [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore) was updated from `2.0.0` to `3.0.1`.
This version is **not covered** by your **current version range**.

If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.

---

<details>
<summary>Release Notes for v3.0.1</summary>

<p>01-15-2019 13:20 PST</p>
<h3>Bug fixes</h3>
<ul>
<li>fix: ship the build directory (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/300" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/300/hovercard">#300</a>)</li>
</ul>
<h3>Internal / Testing Changes</h3>
<ul>
<li>build: check broken links in generated docs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/292" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/292/hovercard">#292</a>)</li>
</ul>
</details>

<details>
<summary>Commits</summary>
<p>The new version differs by 3 commits.</p>
<ul>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/401b2e1c03c1cb1340d1c7249a1f435dc17d74cb"><code>401b2e1</code></a> <code>Release v3.0.1 (#301)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/177b11b3819b98debcf157b040d282c2b9b8d9ca"><code>177b11b</code></a> <code>fix: ship the build directory (#300)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/70ea500726d7a48a768433703c94e9fbb7c53f9d"><code>70ea500</code></a> <code>build: check broken links in generated docs (#292)</code></li>
</ul>
<p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/f839e581b0396b830cc3bae31d107f57414394d4...401b2e1c03c1cb1340d1c7249a1f435dc17d74cb">full diff</a></p>
</details>

---

<details>
<summary>Release Notes for v3.0.0</summary>

<p>01-14-2019 20:31 PST</p>
<p><strong>This release has breaking changes!</strong> The import style of this library has changed to be consistent with <a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/" rel="nofollow">es modules</a>.</p>
<h4>Old busted code</h4>
<div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>)();
<span class="pl-c"><span class="pl-c">//</span> or...</span>
<span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>);
<span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div>
<h4>New hot code</h4>
<div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> {<span class="pl-c1">Datastore</span>} <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>);
<span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div>
<p>Please take care to update your imports accordingly!</p>
<h3>Dependencies</h3>
<ul>
<li>fix(deps): update dependency google-gax to ^0.23.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/296" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/296/hovercard">#296</a>)</li>
<li>fix(deps): update dependency google-gax to ^0.22.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/248" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/248/hovercard">#248</a>)</li>
<li>fix(deps): update dependency concat-stream to v2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/290" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/290/hovercard">#290</a>)</li>
<li>refactor: remove async module usage (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/272" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/272/hovercard">#272</a>)</li>
<li>fix(deps): update dependency through2 to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/237" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/237/hovercard">#237</a>)</li>
<li>chore: remove unused dependencies (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/226" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/226/hovercard">#226</a>)</li>
<li>fix(deps): update dependency google-proto-files to ^0.17.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/210" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/210/hovercard">#210</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>fix(docs): fix namespace causing 404s (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/294" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/294/hovercard">#294</a>)</li>
<li>fix(docs): remove unused long running operations types</li>
<li>docs: Update doc comment showing structure of entity (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/276" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/276/hovercard">#276</a>)</li>
<li>docs: update readme badges (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/269" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/269/hovercard">#269</a>)</li>
<li>refactor(samples): Samples to use async/await</li>
<li>docs: update auto-generated jsdoc comments (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/245" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/245/hovercard">#245</a>)</li>
</ul>
<h3>Internal / Testing Changes</h3>
<ul>
<li>refactor: sprinkle some types about (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/291" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/291/hovercard">#291</a>)</li>
<li>chore(deps): update dependency @types/sinon to v7.0.2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/289" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/289/hovercard">#289</a>)</li>
<li>chore(deps): update dependency @types/sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/286" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/286/hovercard">#286</a>)</li>
<li>refactor(ts): enable lint and fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/287" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/287/hovercard">#287</a>)</li>
<li>chore(build): inject yoshi automation key (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/285" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/285/hovercard">#285</a>)</li>
<li>chore: update nyc and eslint configs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/284" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/284/hovercard">#284</a>)</li>
<li>chore: fix publish.sh permission +x (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/282" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/282/hovercard">#282</a>)</li>
<li>fix(build): fix Kokoro release script (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/281" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/281/hovercard">#281</a>)</li>
<li>build: add Kokoro configs for autorelease (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/280" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/280/hovercard">#280</a>)</li>
<li>chore: always nyc report before calling codecov (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/275" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/275/hovercard">#275</a>)</li>
<li>chore: nyc ignore build/test by default (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/274" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/274/hovercard">#274</a>)</li>
<li>chore: update license file (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/271" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/271/hovercard">#271</a>)</li>
<li>refactor: run gts fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/265" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/265/hovercard">#265</a>)</li>
<li>chore(deps): update dependency typescript to ~3.2.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/264" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/264/hovercard">#264</a>)</li>
<li>fix(build): fix system key decryption (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/266" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/266/hovercard">#266</a>)</li>
<li>refactor(samples): convert sample tests from ava to mocha (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/259" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/259/hovercard">#259</a>)</li>
<li>fix: Pin @types/sinon to last compatible version (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/256" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/256/hovercard">#256</a>)</li>
<li>chore: add synth.metadata (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/254" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/254/hovercard">#254</a>)</li>
<li>refactor(ts): enable noImplicitThis (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/250" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/250/hovercard">#250</a>)</li>
<li>chore(deps): update dependency gts to ^0.9.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/247" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/247/hovercard">#247</a>)</li>
<li>chore: update eslintignore config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/246" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/246/hovercard">#246</a>)</li>
<li>refactor(ts): use es module imports (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/244" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/244/hovercard">#244</a>)</li>
<li>chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/243" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/243/hovercard">#243</a>)</li>
<li>chore: drop contributors from multiple places (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/241" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/241/hovercard">#241</a>)</li>
<li>chore(deps): update dependency @types/is to v0.0.21 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/240" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/240/hovercard">#240</a>)</li>
<li>chore: use latest npm on Windows (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/239" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/239/hovercard">#239</a>)</li>
<li>refactor(ts): convert to typescript (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/236" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/236/hovercard">#236</a>)</li>
<li>chore: update CircleCI config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/235" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/235/hovercard">#235</a>)</li>
<li>chore: include build in eslintignore (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/232" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/232/hovercard">#232</a>)</li>
<li>chore(deps): update dependency eslint-plugin-node to v8 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/227" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/227/hovercard">#227</a>)</li>
<li>chore: update issue templates (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/225" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/225/hovercard">#225</a>)</li>
<li>chore: remove old issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/223" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/223/hovercard">#223</a>)</li>
<li>build: run tests on node11 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/222" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/222/hovercard">#222</a>)</li>
<li>chores(build): do not collect sponge.xml from windows builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/221" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/221/hovercard">#221</a>)</li>
<li>chores(build): run codecov on continuous builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/220" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/220/hovercard">#220</a>)</li>
<li>chore: update new issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/219" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/219/hovercard">#219</a>)</li>
<li>build: fix codecov uploading on Kokoro (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/213" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/213/hovercard">#213</a>)</li>
<li>fix(deps): update dependency sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/212" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/212/hovercard">#212</a>)</li>
<li>Update kokoro config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/207" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/207/hovercard">#207</a>)</li>
<li>chore(deps): update dependency eslint-plugin-prettier to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/206" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/206/hovercard">#206</a>)</li>
</ul>
</details>

<details>
<summary>Commits</summary>
<p>The new version differs by 54 commits.</p>
<ul>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f839e581b0396b830cc3bae31d107f57414394d4"><code>f839e58</code></a> <code>Release v3.0.0 (#298)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f0b665c0c2c8c2241af2c321212574fb78d63f4a"><code>f0b665c</code></a> <code>fix(deps): update dependency google-gax to ^0.23.0 (#296)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f4e4410fa1f930ce196ee809d150c07c1e86875d"><code>f4e4410</code></a> <code>fix(docs): fix namespace causing 404s (#294)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/8608c7ee73b80a6e55f05cb3d687a9b32b1b2bd9"><code>8608c7e</code></a> <code>fix(docs): remove unused long running operations types</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4bbe64ff09e28ffac063714def174860388f136c"><code>4bbe64f</code></a> <code>refactor: sprinkle some types about (#291)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/78d776f68cef67471a318a37dba08e6ad2e535a7"><code>78d776f</code></a> <code>fix(deps): update dependency concat-stream to v2 (#290)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b3db31e4ca17684012efe47e0745d6927a587d5e"><code>b3db31e</code></a> <code>chore(deps): update dependency @types/sinon to v7.0.2 (#289)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/42d6f705b3ed39d25574c820dc92efc935fd92b1"><code>42d6f70</code></a> <code>refactor: remove async module usage (#272)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/97d847df17ff45947e495bc5e54f466106003186"><code>97d847d</code></a> <code>chore(deps): update dependency @types/sinon to v7 (#286)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/717b818e25f1b7bb014b614d0be234102804ed37"><code>717b818</code></a> <code>refactor(ts): enable lint and fix (#287)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/dcb7f651a4d9d3298f44eeb45f735b1713c073ff"><code>dcb7f65</code></a> <code>chore(build): inject yoshi automation key (#285)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/35a081d6e8bd146d05d04a1ea47ca7fd2dfc1c4b"><code>35a081d</code></a> <code>chore: update nyc and eslint configs (#284)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4f91d8f7c91cc1d0360c84a5d4d7a0ede978addb"><code>4f91d8f</code></a> <code>chore: fix publish.sh permission +x (#282)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/1072247740128ae04380d2ca3cc57895a52e5208"><code>1072247</code></a> <code>fix(build): fix Kokoro release script (#281)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b5579c28ab0c938f65e61be667ea65a8cacf4cf2"><code>b5579c2</code></a> <code>build: add Kokoro configs for autorelease (#280)</code></li>
</ul>
<p>There are 54 commits in total.</p>
<p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/a0406f2e897e59944d9f82d9997955aa32f7df13...f839e581b0396b830cc3bae31d107f57414394d4">full diff</a></p>
</details>

<details>
  <summary>FAQ and help</summary>

  There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those don’t help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new).
</details>

---


Your [Greenkeeper](https://greenkeeper.io) bot 🌴
adrianschmidt pushed a commit to Lundalogik/material-components-web that referenced this pull request Jan 23, 2019
…onents#4251)

## The devDependency [@google-cloud/datastore](https://github.com/googleapis/nodejs-datastore) was updated from `2.0.0` to `3.0.1`.
This version is **not covered** by your **current version range**.

If you don’t accept this pull request, your project will work just like it did before. However, you might be missing out on a bunch of new features, fixes and/or performance improvements from the dependency update.

---

<details>
<summary>Release Notes for v3.0.1</summary>

<p>01-15-2019 13:20 PST</p>
<h3>Bug fixes</h3>
<ul>
<li>fix: ship the build directory (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/300" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/300/hovercard">material-components#300</a>)</li>
</ul>
<h3>Internal / Testing Changes</h3>
<ul>
<li>build: check broken links in generated docs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/292" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/292/hovercard">material-components#292</a>)</li>
</ul>
</details>

<details>
<summary>Commits</summary>
<p>The new version differs by 3 commits.</p>
<ul>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/401b2e1c03c1cb1340d1c7249a1f435dc17d74cb"><code>401b2e1</code></a> <code>Release v3.0.1 (material-components#301)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/177b11b3819b98debcf157b040d282c2b9b8d9ca"><code>177b11b</code></a> <code>fix: ship the build directory (material-components#300)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/70ea500726d7a48a768433703c94e9fbb7c53f9d"><code>70ea500</code></a> <code>build: check broken links in generated docs (material-components#292)</code></li>
</ul>
<p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/f839e581b0396b830cc3bae31d107f57414394d4...401b2e1c03c1cb1340d1c7249a1f435dc17d74cb">full diff</a></p>
</details>

---

<details>
<summary>Release Notes for v3.0.0</summary>

<p>01-14-2019 20:31 PST</p>
<p><strong>This release has breaking changes!</strong> The import style of this library has changed to be consistent with <a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/" rel="nofollow">es modules</a>.</p>
<h4>Old busted code</h4>
<div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>)();
<span class="pl-c"><span class="pl-c">//</span> or...</span>
<span class="pl-k">const</span> <span class="pl-c1">Datastore</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>);
<span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div>
<h4>New hot code</h4>
<div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> {<span class="pl-c1">Datastore</span>} <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>@google-cloud/datastore<span class="pl-pds">'</span></span>);
<span class="pl-k">const</span> <span class="pl-c1">ds</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">Datastore</span>();</pre></div>
<p>Please take care to update your imports accordingly!</p>
<h3>Dependencies</h3>
<ul>
<li>fix(deps): update dependency google-gax to ^0.23.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/296" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/296/hovercard">material-components#296</a>)</li>
<li>fix(deps): update dependency google-gax to ^0.22.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/248" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/248/hovercard">material-components#248</a>)</li>
<li>fix(deps): update dependency concat-stream to v2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/290" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/290/hovercard">material-components#290</a>)</li>
<li>refactor: remove async module usage (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/272" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/272/hovercard">material-components#272</a>)</li>
<li>fix(deps): update dependency through2 to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/237" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/237/hovercard">material-components#237</a>)</li>
<li>chore: remove unused dependencies (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/226" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/226/hovercard">material-components#226</a>)</li>
<li>fix(deps): update dependency google-proto-files to ^0.17.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/210" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/210/hovercard">material-components#210</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>fix(docs): fix namespace causing 404s (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/294" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/294/hovercard">material-components#294</a>)</li>
<li>fix(docs): remove unused long running operations types</li>
<li>docs: Update doc comment showing structure of entity (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/276" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/276/hovercard">material-components#276</a>)</li>
<li>docs: update readme badges (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/269" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/269/hovercard">material-components#269</a>)</li>
<li>refactor(samples): Samples to use async/await</li>
<li>docs: update auto-generated jsdoc comments (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/245" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/245/hovercard">material-components#245</a>)</li>
</ul>
<h3>Internal / Testing Changes</h3>
<ul>
<li>refactor: sprinkle some types about (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/291" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/291/hovercard">material-components#291</a>)</li>
<li>chore(deps): update dependency @types/sinon to v7.0.2 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/289" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/289/hovercard">material-components#289</a>)</li>
<li>chore(deps): update dependency @types/sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/286" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/286/hovercard">material-components#286</a>)</li>
<li>refactor(ts): enable lint and fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/287" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/287/hovercard">material-components#287</a>)</li>
<li>chore(build): inject yoshi automation key (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/285" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/285/hovercard">material-components#285</a>)</li>
<li>chore: update nyc and eslint configs (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/284" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/284/hovercard">material-components#284</a>)</li>
<li>chore: fix publish.sh permission +x (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/282" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/282/hovercard">material-components#282</a>)</li>
<li>fix(build): fix Kokoro release script (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/281" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/281/hovercard">material-components#281</a>)</li>
<li>build: add Kokoro configs for autorelease (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/280" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/280/hovercard">material-components#280</a>)</li>
<li>chore: always nyc report before calling codecov (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/275" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/275/hovercard">material-components#275</a>)</li>
<li>chore: nyc ignore build/test by default (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/274" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/274/hovercard">material-components#274</a>)</li>
<li>chore: update license file (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/271" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/271/hovercard">material-components#271</a>)</li>
<li>refactor: run gts fix (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/265" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/265/hovercard">material-components#265</a>)</li>
<li>chore(deps): update dependency typescript to ~3.2.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/264" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/264/hovercard">material-components#264</a>)</li>
<li>fix(build): fix system key decryption (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/266" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/266/hovercard">material-components#266</a>)</li>
<li>refactor(samples): convert sample tests from ava to mocha (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/259" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/259/hovercard">material-components#259</a>)</li>
<li>fix: Pin @types/sinon to last compatible version (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/256" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/256/hovercard">material-components#256</a>)</li>
<li>chore: add synth.metadata (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/254" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/254/hovercard">material-components#254</a>)</li>
<li>refactor(ts): enable noImplicitThis (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/250" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/250/hovercard">material-components#250</a>)</li>
<li>chore(deps): update dependency gts to ^0.9.0 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/247" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/247/hovercard">material-components#247</a>)</li>
<li>chore: update eslintignore config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/246" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/246/hovercard">material-components#246</a>)</li>
<li>refactor(ts): use es module imports (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/244" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/244/hovercard">material-components#244</a>)</li>
<li>chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/243" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/243/hovercard">material-components#243</a>)</li>
<li>chore: drop contributors from multiple places (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/241" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/241/hovercard">material-components#241</a>)</li>
<li>chore(deps): update dependency @types/is to v0.0.21 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/240" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/240/hovercard">material-components#240</a>)</li>
<li>chore: use latest npm on Windows (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/239" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/239/hovercard">material-components#239</a>)</li>
<li>refactor(ts): convert to typescript (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/236" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/236/hovercard">material-components#236</a>)</li>
<li>chore: update CircleCI config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/235" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/235/hovercard">material-components#235</a>)</li>
<li>chore: include build in eslintignore (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/232" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/232/hovercard">material-components#232</a>)</li>
<li>chore(deps): update dependency eslint-plugin-node to v8 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/227" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/227/hovercard">material-components#227</a>)</li>
<li>chore: update issue templates (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/225" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/225/hovercard">material-components#225</a>)</li>
<li>chore: remove old issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/223" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/223/hovercard">material-components#223</a>)</li>
<li>build: run tests on node11 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/222" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/222/hovercard">material-components#222</a>)</li>
<li>chores(build): do not collect sponge.xml from windows builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/221" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/221/hovercard">material-components#221</a>)</li>
<li>chores(build): run codecov on continuous builds (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/220" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/220/hovercard">material-components#220</a>)</li>
<li>chore: update new issue template (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/219" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/219/hovercard">material-components#219</a>)</li>
<li>build: fix codecov uploading on Kokoro (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/213" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/213/hovercard">material-components#213</a>)</li>
<li>fix(deps): update dependency sinon to v7 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/212" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/212/hovercard">material-components#212</a>)</li>
<li>Update kokoro config (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/207" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/207/hovercard">material-components#207</a>)</li>
<li>chore(deps): update dependency eslint-plugin-prettier to v3 (<a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/pull/206" data-hovercard-type="pull_request" data-hovercard-url="/googleapis/nodejs-datastore/pull/206/hovercard">material-components#206</a>)</li>
</ul>
</details>

<details>
<summary>Commits</summary>
<p>The new version differs by 54 commits.</p>
<ul>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f839e581b0396b830cc3bae31d107f57414394d4"><code>f839e58</code></a> <code>Release v3.0.0 (material-components#298)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f0b665c0c2c8c2241af2c321212574fb78d63f4a"><code>f0b665c</code></a> <code>fix(deps): update dependency google-gax to ^0.23.0 (material-components#296)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/f4e4410fa1f930ce196ee809d150c07c1e86875d"><code>f4e4410</code></a> <code>fix(docs): fix namespace causing 404s (material-components#294)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/8608c7ee73b80a6e55f05cb3d687a9b32b1b2bd9"><code>8608c7e</code></a> <code>fix(docs): remove unused long running operations types</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4bbe64ff09e28ffac063714def174860388f136c"><code>4bbe64f</code></a> <code>refactor: sprinkle some types about (material-components#291)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/78d776f68cef67471a318a37dba08e6ad2e535a7"><code>78d776f</code></a> <code>fix(deps): update dependency concat-stream to v2 (material-components#290)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b3db31e4ca17684012efe47e0745d6927a587d5e"><code>b3db31e</code></a> <code>chore(deps): update dependency @types/sinon to v7.0.2 (material-components#289)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/42d6f705b3ed39d25574c820dc92efc935fd92b1"><code>42d6f70</code></a> <code>refactor: remove async module usage (material-components#272)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/97d847df17ff45947e495bc5e54f466106003186"><code>97d847d</code></a> <code>chore(deps): update dependency @types/sinon to v7 (material-components#286)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/717b818e25f1b7bb014b614d0be234102804ed37"><code>717b818</code></a> <code>refactor(ts): enable lint and fix (material-components#287)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/dcb7f651a4d9d3298f44eeb45f735b1713c073ff"><code>dcb7f65</code></a> <code>chore(build): inject yoshi automation key (material-components#285)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/35a081d6e8bd146d05d04a1ea47ca7fd2dfc1c4b"><code>35a081d</code></a> <code>chore: update nyc and eslint configs (material-components#284)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/4f91d8f7c91cc1d0360c84a5d4d7a0ede978addb"><code>4f91d8f</code></a> <code>chore: fix publish.sh permission +x (material-components#282)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/1072247740128ae04380d2ca3cc57895a52e5208"><code>1072247</code></a> <code>fix(build): fix Kokoro release script (material-components#281)</code></li>
<li><a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/commit/b5579c28ab0c938f65e61be667ea65a8cacf4cf2"><code>b5579c2</code></a> <code>build: add Kokoro configs for autorelease (material-components#280)</code></li>
</ul>
<p>There are 54 commits in total.</p>
<p>See the <a href="https://urls.greenkeeper.io/googleapis/nodejs-datastore/compare/a0406f2e897e59944d9f82d9997955aa32f7df13...f839e581b0396b830cc3bae31d107f57414394d4">full diff</a></p>
</details>

<details>
  <summary>FAQ and help</summary>

  There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html). If those don’t help, you can always [ask the humans behind Greenkeeper](https://github.com/greenkeeperio/greenkeeper/issues/new).
</details>

---


Your [Greenkeeper](https://greenkeeper.io) bot 🌴


(cherry picked from commit 9d46c20)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants