Compare commits

..

120 Commits

Author SHA1 Message Date
Nikita Maximilian Grimm 1301dc03e7 Fix layer group expansion state after deletion (#2146)
Deleting a layer changes the starting indices of later groups, so their
stored expansion state no longer matches. Preserve that state through
surviving layer IDs when rebuilding the group keys.

This keeps expanded groups open after deleting an earlier layer or the
first layer of a group. Separate groups with the same prefix retain
their own states; if deletion joins two groups, the merged group stays
expanded when either was expanded.

- Fixes #1781.

Adds five deletion regression tests, a small style fixture, and a
changelog entry.

Validation:

- All 33 layer-list E2E tests and 50 unit tests pass.
- Lint and the production build, including TypeScript checking, pass.
- Manually checked OSM Liberty: all 15 groups remain expanded after
deleting the background layer.
- The full E2E suite reports 160 passing tests and one failure in
`modals > open > upload` (`Could not get styleItem from localStorage`).
The same failure reproduces with the original production code restored.

---------

Co-authored-by: Harel M <harel.mazor@gmail.com>
2026-09-08 18:33:00 +00:00
dependabot[bot] 0a4c1710e2 chore(deps-dev): Bump @playwright/test from 1.62.1 to 1.63.0 (#2150)
Bumps [@playwright/test](https://github.com/microsoft/playwright) from
1.62.1 to 1.63.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases">@​playwright/test's
releases</a>.</em></p>
<blockquote>
<h2>v1.63.0</h2>
<h2>🔒 Test locks</h2>
<p>Tests that access a shared resource — an external service, a global
account setting — can now declare a named <code>lock</code>.
Tests that share a lock name never run concurrently, across files,
workers and <a
href="https://playwright.dev/docs/test-projects">projects</a>, while
everything else keeps running in parallel:</p>
<pre lang="js"><code>test('update user settings', { lock:
'user-settings' }, async ({ page }) =&gt; {
  // never runs at the same time as other tests holding 'user-settings'
});
</code></pre>
<p>A test can hold multiple locks, and <a
href="https://playwright.dev/docs/api/class-test#test-describe">test.describe()</a>
accepts a <code>lock</code> for the whole group.
Learn more about <a
href="https://playwright.dev/docs/test-parallel#test-locks">test
locks</a>.</p>
<h2>🪟 Locate across frames</h2>
<p><a
href="https://playwright.dev/docs/api/class-page#page-frame-locator">page.frameLocator()</a>
and <a
href="https://playwright.dev/docs/api/class-frame#frame-frame-locator">frame.frameLocator()</a>
called without a selector search in any frame of the
subtree, so you no longer need to locate the iframe first:</p>
<pre lang="js"><code>// Finds the button in any frame on the page.
await page.frameLocator().getByRole('button').click();
</code></pre>
<p>The rest of the locator resolves inside a single frame, just like a
regular locator, and an error is thrown when it
matches elements in several frames.</p>
<h2>👁️ Visible-only locators</h2>
<p>New <a
href="https://playwright.dev/docs/api/class-locator#locator-visible">locator.visible()</a>
returns a locator that matches only visible elements. It is the
recommended
replacement for the <code>:visible</code> CSS pseudo-class:</p>
<pre lang="js"><code>await page.locator('button').visible().click();
</code></pre>
<h2>🧾 Step params and subtitles</h2>
<p>Steps now carry structured data for reporters. Playwright API steps
report the target locator and call arguments,
and <a
href="https://playwright.dev/docs/api/class-test#test-step">test.step()</a>
accepts <code>subtitle</code> and <code>params</code> options for your
own steps:</p>
<pre lang="js"><code>await test.step('Login', async () =&gt; {
  // ...
}, { subtitle: 'as admin', params: { user: 'admin' } });
</code></pre>
<p>Reporters receive them via <a
href="https://playwright.dev/docs/api/class-teststep#test-step-subtitle">testStep.subtitle</a>
and <a
href="https://playwright.dev/docs/api/class-teststep#test-step-params">testStep.params</a>.
For Playwright API</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/microsoft/playwright/commit/1b025d7e20a026371cd5f98ba0cdce48892737c8"><code>1b025d7</code></a>
chore: mark v1.63.0 (<a
href="https://redirect.github.com/microsoft/playwright/issues/42569">#42569</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/0b9956d2247ce88399c3c46a22c1cc0526acb340"><code>0b9956d</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42568">#42568</a>):
docs(test): mark test.step subtitle option as since v1.63</li>
<li><a
href="https://github.com/microsoft/playwright/commit/13dbf102b88305ed96b7791a7843246cd75d4dae"><code>13dbf10</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42552">#42552</a>):
docs: release notes for v1.63</li>
<li><a
href="https://github.com/microsoft/playwright/commit/e93b64ed6f9cf6ac2cc8cb13ad01514b406a7142"><code>e93b64e</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42566">#42566</a>):
feat(test): add subtitle option to test.step (<a
href="https://redirect.github.com/microsoft/playwright/issues/42567">#42567</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/2b7a5f2ea1cea04b549c5378498c1b16b6bc6a6f"><code>2b7a5f2</code></a>
test: response.body() for content-encoding:identity (<a
href="https://redirect.github.com/microsoft/playwright/issues/42537">#42537</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/648a67c7c1261eefe4113cba2d586417d5e3f2f2"><code>648a67c</code></a>
fix(mcp): create parent directories for explicitly named files (<a
href="https://redirect.github.com/microsoft/playwright/issues/42540">#42540</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/7894f5653e7f253c17aa1638c19f63e0d54d5e0e"><code>7894f56</code></a>
docs(mcp): clarify how tool file names are resolved (<a
href="https://redirect.github.com/microsoft/playwright/issues/42538">#42538</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/52900a1b99ca51011526afcaf8981970cc1a521a"><code>52900a1</code></a>
devops: restore npm publishing from GitHub Actions (<a
href="https://redirect.github.com/microsoft/playwright/issues/42550">#42550</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/8c47f596edebd2460895a5953f2ea67f8b884001"><code>8c47f59</code></a>
docs(csharp): fix nonexistent method names in guide examples (<a
href="https://redirect.github.com/microsoft/playwright/issues/42507">#42507</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/bd6e552a63f8cf9b0da0216f392b8e63a08bf1d2"><code>bd6e552</code></a>
chore(video): emit frames with real timestamps, drop frame number
quantizatio...</li>
<li>Additional commits viewable in <a
href="https://github.com/microsoft/playwright/compare/v1.62.1...v1.63.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@playwright/test&package-manager=npm_and_yarn&previous-version=1.62.1&new-version=1.63.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 15:00:09 +00:00
dependabot[bot] 1dc80b1313 chore(deps): Bump @codemirror/state from 6.7.3 to 6.7.4 (#2151)
Bumps [@codemirror/state](https://github.com/codemirror/state) from
6.7.3 to 6.7.4.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/state/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/state&package-manager=npm_and_yarn&previous-version=6.7.3&new-version=6.7.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 14:58:44 +00:00
dependabot[bot] 139cf07991 chore(deps-dev): Bump stylelint from 17.14.1 to 17.15.0 (#2149)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [stylelint](https://github.com/stylelint/stylelint) from 17.14.1
to 17.15.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/stylelint/stylelint/releases">stylelint's
releases</a>.</em></p>
<blockquote>
<h2>17.15.0</h2>
<p>It adds 1 new rule and 2 new rule options, and fixes 4 bugs.</p>
<ul>
<li>Added: <code>selector-no-unmatchable</code> rule (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9451">#9451</a>)
(<a href="https://github.com/jeddy3"><code>@​jeddy3</code></a>).</li>
<li>Added: <code>ignoreFunctions: []</code> to <code>color-named</code>
and <code>color-no-hex</code> (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9463">#9463</a>)
(<a
href="https://github.com/jsmitty12"><code>@​jsmitty12</code></a>).</li>
<li>Fixed: <code>custom-property-no-missing-var-function</code> false
positives for anchor positioning (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9466">#9466</a>)
(<a
href="https://github.com/giaBaoJS"><code>@​giaBaoJS</code></a>).</li>
<li>Fixed:
<code>declaration-block-no-redundant-longhand-properties</code> autofix
for <code>font</code> shorthand (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9402">#9402</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed: <code>declaration-property-max-values</code> false positives
for interpolated inline expressions (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9437">#9437</a>)
(<a
href="https://github.com/alexchen-sys"><code>@​alexchen-sys</code></a>).</li>
<li>Fixed: <code>selector-no-invalid</code> false negatives for
pseudo-elements, combinators and nested <code>:has()</code> (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9452">#9452</a>)
(<a href="https://github.com/jeddy3"><code>@​jeddy3</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md">stylelint's
changelog</a>.</em></p>
<blockquote>
<h2>17.15.0 - 2026-09-04</h2>
<p>It adds 1 new rule and 2 new rule options, and fixes 4 bugs.</p>
<ul>
<li>Added: <code>selector-no-unmatchable</code> rule (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9451">#9451</a>)
(<a href="https://github.com/jeddy3"><code>@​jeddy3</code></a>).</li>
<li>Added: <code>ignoreFunctions: []</code> to <code>color-named</code>
and <code>color-no-hex</code> (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9463">#9463</a>)
(<a
href="https://github.com/jsmitty12"><code>@​jsmitty12</code></a>).</li>
<li>Fixed: <code>custom-property-no-missing-var-function</code> false
positives for anchor positioning (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9466">#9466</a>)
(<a
href="https://github.com/giaBaoJS"><code>@​giaBaoJS</code></a>).</li>
<li>Fixed:
<code>declaration-block-no-redundant-longhand-properties</code> autofix
for <code>font</code> shorthand (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9402">#9402</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed: <code>declaration-property-max-values</code> false positives
for interpolated inline expressions (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9437">#9437</a>)
(<a
href="https://github.com/alexchen-sys"><code>@​alexchen-sys</code></a>).</li>
<li>Fixed: <code>selector-no-invalid</code> false negatives for
pseudo-elements, combinators and nested <code>:has()</code> (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9452">#9452</a>)
(<a href="https://github.com/jeddy3"><code>@​jeddy3</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/stylelint/stylelint/commit/0547bff875de8d2525a3eca4d6a22847aa6ded60"><code>0547bff</code></a>
Release 17.15.0 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9484">#9484</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/ac19a3c04ca20ab57d637f81b57365539c1be84b"><code>ac19a3c</code></a>
Fix <code>custom-property-no-missing-var-function</code> false positives
for anchor posi...</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/23947ae80a7229ccf1b13a3907b92b9eeebb9e2d"><code>23947ae</code></a>
Bump <code>@​humanfs/node</code> from 0.16.6 to 0.16.8 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9480">#9480</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/53c74f78543ea3a317d37378c034532d3d3d6d24"><code>53c74f7</code></a>
Bump fast-uri from 3.1.5 to 3.1.7 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9481">#9481</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/26856e6dbd37e474e20bd46c7059be9844b006fe"><code>26856e6</code></a>
Bump the jest group across 1 directory with 2 updates (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9476">#9476</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/b90ecd83e7cda4606451a09687c1f004488f3a80"><code>b90ecd8</code></a>
Bump browserslist from 4.28.4 to 4.28.8 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9479">#9479</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/70072c00e5db6debb3874981892fe25b4bae659a"><code>70072c0</code></a>
Add <code>ignoreFunctions: []</code> to <code>color-named</code> and
<code>color-no-hex</code> (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9463">#9463</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/f0ac6428795e6b6c3bfb8abc272aa989aa877849"><code>f0ac642</code></a>
Bump postcss-import from 16.1.1 to 16.2.0 in the postcss group (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9477">#9477</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/fc8db574628d51c8bc12dc7f1e4d2e02bc150457"><code>fc8db57</code></a>
Bump globby from 16.2.3 to 16.2.4 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9478">#9478</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/aec96b0b2815e8a4de21a0a1b0560954714f568f"><code>aec96b0</code></a>
Bump <code>@​csstools/css-syntax-patches-for-csstree</code> from 1.1.8
to 1.1.9 in the csst...</li>
<li>Additional commits viewable in <a
href="https://github.com/stylelint/stylelint/compare/17.14.1...17.15.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=stylelint&package-manager=npm_and_yarn&previous-version=17.14.1&new-version=17.15.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 14:46:16 +00:00
dependabot[bot] 8d400b73e3 chore(deps-dev): Bump the vitest group with 2 updates (#2147)
Bumps the vitest group with 2 updates:
[@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)
and
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).

Updates `@vitest/coverage-v8` from 4.1.11 to 5.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitest-dev/vitest/releases">@​vitest/coverage-v8's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<p>Vitest 5 is officially out! This release focuses on performance and
brings a lot of new features while fixing long-standing bugs. See our <a
href="https://vitest.dev/blog/vitest-5.html">blog post</a> for the
official announcement.</p>
<h3>   🚨 Breaking Changes</h3>
<ul>
<li>Replace <code>loupe.inspect</code> with pretty-format  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Claude Opus 5 (1M context)</strong> and <strong>OpenAI
Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9609">vitest-dev/vitest#9609</a>
<a href="https://github.com/vitest-dev/vitest/commit/3f802da4b"><!-- raw
HTML omitted -->(3f802)<!-- raw HTML omitted --></a></li>
<li>Remove quotes from string values in <code>test.for/each</code> title
<code>$</code> variable (take 2)  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10170">vitest-dev/vitest#10170</a>
<a href="https://github.com/vitest-dev/vitest/commit/04d37e9d7"><!-- raw
HTML omitted -->(04d37)<!-- raw HTML omitted --></a></li>
<li>Default <code>attachmentsDir</code> from
<code>.vitest-attachements/</code> to <code>.vitest/attachments/</code>
 -  by <a
href="https://github.com/MdSadiqMd"><code>@​MdSadiqMd</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10186">vitest-dev/vitest#10186</a>
<a href="https://github.com/vitest-dev/vitest/commit/1ba7338c3"><!-- raw
HTML omitted -->(1ba73)<!-- raw HTML omitted --></a></li>
<li>Remove <code>sequential</code> test/suite options in favor of
<code>concurrent</code>  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> and
<strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10198">vitest-dev/vitest#10198</a>
<a href="https://github.com/vitest-dev/vitest/commit/9229f2edc"><!-- raw
HTML omitted -->(9229f)<!-- raw HTML omitted --></a></li>
<li>Represent locator as an object instead of a string  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10212">vitest-dev/vitest#10212</a>
<a href="https://github.com/vitest-dev/vitest/commit/80f07edf6"><!-- raw
HTML omitted -->(80f07)<!-- raw HTML omitted --></a></li>
<li>Inline <code>expect</code> package  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10221">vitest-dev/vitest#10221</a>
<a href="https://github.com/vitest-dev/vitest/commit/ad16223e7"><!-- raw
HTML omitted -->(ad162)<!-- raw HTML omitted --></a></li>
<li>Remove deprecated entry points  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10222">vitest-dev/vitest#10222</a>
<a href="https://github.com/vitest-dev/vitest/commit/994c6ddb9"><!-- raw
HTML omitted -->(994c6)<!-- raw HTML omitted --></a></li>
<li>Require Node.js 22 and Vite 6.4  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10178">vitest-dev/vitest#10178</a>
<a href="https://github.com/vitest-dev/vitest/commit/3876283e8"><!-- raw
HTML omitted -->(38762)<!-- raw HTML omitted --></a></li>
<li>Fail <code>expect.poll</code> when function didn't resolve in time
 -  by <a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>
and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10233">vitest-dev/vitest#10233</a>
<a href="https://github.com/vitest-dev/vitest/commit/4df048c11"><!-- raw
HTML omitted -->(4df04)<!-- raw HTML omitted --></a></li>
<li>Throw an error if hoistable methods are outside the top level scope
 -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10460">vitest-dev/vitest#10460</a>
<a href="https://github.com/vitest-dev/vitest/commit/d0b4fddcb"><!-- raw
HTML omitted -->(d0b4f)<!-- raw HTML omitted --></a></li>
<li><code>toHaveTextContent</code> is strict, add
<code>toMatchTextContent</code> as alternative  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10473">vitest-dev/vitest#10473</a>
<a href="https://github.com/vitest-dev/vitest/commit/18f303079"><!-- raw
HTML omitted -->(18f30)<!-- raw HTML omitted --></a></li>
<li>Don't lookup config file from ancestor directories  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>OpenAI Codex</strong> and <strong>Hiroshi Ogawa</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10428">vitest-dev/vitest#10428</a>
<a href="https://github.com/vitest-dev/vitest/commit/945d9090e"><!-- raw
HTML omitted -->(945d9)<!-- raw HTML omitted --></a></li>
<li>Inline <code>@vitest/runner</code> package, do not publish it
anymore  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10511">vitest-dev/vitest#10511</a>
<a href="https://github.com/vitest-dev/vitest/commit/6d6e46b1e"><!-- raw
HTML omitted -->(6d6e4)<!-- raw HTML omitted --></a></li>
<li>Allow mutating happy-dom/jsdom window object  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10373">vitest-dev/vitest#10373</a>
<a href="https://github.com/vitest-dev/vitest/commit/206e8cff8"><!-- raw
HTML omitted -->(206e8)<!-- raw HTML omitted --></a></li>
<li>Expose <code>concurrencyId</code>/<code>workerId</code> on
TestModule's diagnostics, make id 1-based  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10516">vitest-dev/vitest#10516</a>
<a href="https://github.com/vitest-dev/vitest/commit/bdd985433"><!-- raw
HTML omitted -->(bdd98)<!-- raw HTML omitted --></a></li>
<li>Add <code>screenshotDirectory</code> config to
<code>browser.expect.toMatchScreenshot</code>  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10592">vitest-dev/vitest#10592</a>
<a href="https://github.com/vitest-dev/vitest/commit/a60ded0fb"><!-- raw
HTML omitted -->(a60de)<!-- raw HTML omitted --></a></li>
<li>Update <code>@sinonjs/fake-timers</code> and support mocking
<code>Temporal</code>  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenCode
(gpt-5.6-sol)</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10654">vitest-dev/vitest#10654</a>
<a href="https://github.com/vitest-dev/vitest/commit/f8b1532fe"><!-- raw
HTML omitted -->(f8b15)<!-- raw HTML omitted --></a></li>
<li>Remove webdriverio package  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10675">vitest-dev/vitest#10675</a>
<a href="https://github.com/vitest-dev/vitest/commit/5fed68f72"><!-- raw
HTML omitted -->(5fed6)<!-- raw HTML omitted --></a></li>
<li>Clear mocks by default before each test  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10613">vitest-dev/vitest#10613</a>
<a href="https://github.com/vitest-dev/vitest/commit/0f6463bf2"><!-- raw
HTML omitted -->(0f646)<!-- raw HTML omitted --></a></li>
<li>Don't emit localStorage warnings on Node 26, fail gracefully when
worker fails to start  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10293">vitest-dev/vitest#10293</a>
<a href="https://github.com/vitest-dev/vitest/commit/334edef92"><!-- raw
HTML omitted -->(334ed)<!-- raw HTML omitted --></a></li>
<li>Separate config resolution from the server creation  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10554">vitest-dev/vitest#10554</a>
<a href="https://github.com/vitest-dev/vitest/commit/1c0ec3444"><!-- raw
HTML omitted -->(1c0ec)<!-- raw HTML omitted --></a></li>
<li>Inline projects extend the root config by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10750">vitest-dev/vitest#10750</a>
<a href="https://github.com/vitest-dev/vitest/commit/fec001ad3"><!-- raw
HTML omitted -->(fec00)<!-- raw HTML omitted --></a></li>
<li>Enable mocking Temporal without fake timers  -  by <a
href="https://github.com/fabon-f"><code>@​fabon-f</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenCode
(gpt-5.6-sol)</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10757">vitest-dev/vitest#10757</a>
<a href="https://github.com/vitest-dev/vitest/commit/ac2d46b42"><!-- raw
HTML omitted -->(ac2d4)<!-- raw HTML omitted --></a></li>
<li>Support nested projects  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10846">vitest-dev/vitest#10846</a>
<a href="https://github.com/vitest-dev/vitest/commit/ec367cf2a"><!-- raw
HTML omitted -->(ec367)<!-- raw HTML omitted --></a></li>
<li>Use <code>&gt;</code> as separator in <code>-t</code>, calculate
<code>only</code> once  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10686">vitest-dev/vitest#10686</a>
<a href="https://github.com/vitest-dev/vitest/commit/a0b20bc86"><!-- raw
HTML omitted -->(a0b20)<!-- raw HTML omitted --></a></li>
<li>Fail the test when an asynchronous assertion is not awaited  -  by
<a href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a>
in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10868">vitest-dev/vitest#10868</a>
<a href="https://github.com/vitest-dev/vitest/commit/86d4a9da9"><!-- raw
HTML omitted -->(86d4a)<!-- raw HTML omitted --></a></li>
<li>Share the Vite server between inline projects  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10848">vitest-dev/vitest#10848</a>
<a href="https://github.com/vitest-dev/vitest/commit/d87c96ee4"><!-- raw
HTML omitted -->(d87c9)<!-- raw HTML omitted --></a></li>
<li>Parse files statically in vitest list by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/11088">vitest-dev/vitest#11088</a>
<a href="https://github.com/vitest-dev/vitest/commit/51e949416"><!-- raw
HTML omitted -->(51e94)<!-- raw HTML omitted --></a></li>
<li><strong>benchmark</strong>:
<ul>
<li>Rewrite the public API  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10113">vitest-dev/vitest#10113</a>
<a href="https://github.com/vitest-dev/vitest/commit/19f6e8947"><!-- raw
HTML omitted -->(19f6e)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>browser</strong>:
<ul>
<li>Iframe scale  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9745">vitest-dev/vitest#9745</a>
<a href="https://github.com/vitest-dev/vitest/commit/b639852cc"><!-- raw
HTML omitted -->(b6398)<!-- raw HTML omitted --></a></li>
<li>Enable <code>locators.exact</code> by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10430">vitest-dev/vitest#10430</a>
<a href="https://github.com/vitest-dev/vitest/commit/e203202f9"><!-- raw
HTML omitted -->(e2032)<!-- raw HTML omitted --></a></li>
<li>Require <code>sessionId</code> for orchestrator html request  -  by
<a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10522">vitest-dev/vitest#10522</a>
<a href="https://github.com/vitest-dev/vitest/commit/79b7d8fcc"><!-- raw
HTML omitted -->(79b7d)<!-- raw HTML omitted --></a></li>
<li>Save failure screenshots in <code>attachmentsDir</code>  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10917">vitest-dev/vitest#10917</a>
<a href="https://github.com/vitest-dev/vitest/commit/3b5bbd8b4"><!-- raw
HTML omitted -->(3b5bb)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>coverage</strong>:
<ul>
<li><code>include/exclude</code> globs too eager  -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9818">vitest-dev/vitest#9818</a>
<a href="https://github.com/vitest-dev/vitest/commit/edacb0fd4"><!-- raw
HTML omitted -->(edacb)<!-- raw HTML omitted --></a></li>
<li>Allow <code>thresholds.perFile</code> to accept an object  -  by <a
href="https://github.com/vladlenskiy"><code>@​vladlenskiy</code></a> and
<a href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10190">vitest-dev/vitest#10190</a>
<a href="https://github.com/vitest-dev/vitest/commit/13b78d98b"><!-- raw
HTML omitted -->(13b78)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>expect</strong>:
<ul>
<li>Fix <code>toThrow(&quot;&quot;)</code> behavior by reverting <a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/6710">#6710</a>
 -  by <a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>
in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9643">vitest-dev/vitest#9643</a>
and <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6710">vitest-dev/vitest#6710</a>
<a href="https://github.com/vitest-dev/vitest/commit/6c3e4bdbf"><!-- raw
HTML omitted -->(6c3e4)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>mocker</strong>:
<ul>
<li>Deserialize automock as automock  -  by <a
href="https://github.com/nami8824"><code>@​nami8824</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10192">vitest-dev/vitest#10192</a>
<a href="https://github.com/vitest-dev/vitest/commit/2f892712d"><!-- raw
HTML omitted -->(2f892)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>reporters</strong>:
<ul>
<li><code>blob</code> reporter and <code>--merge-reports</code> default
to <code>.vitest/blob/</code>  -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10232">vitest-dev/vitest#10232</a>
<a href="https://github.com/vitest-dev/vitest/commit/d22b029ae"><!-- raw
HTML omitted -->(d22b0)<!-- raw HTML omitted --></a></li>
<li>Write json and junit reporter output files to <code>.vitest</code>
by default  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong>, <strong>OpenCode (gpt-5.6-sol)</strong>
and <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10621">vitest-dev/vitest#10621</a>
<a href="https://github.com/vitest-dev/vitest/commit/58577290a"><!-- raw
HTML omitted -->(58577)<!-- raw HTML omitted --></a></li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitest-dev/vitest/commit/f441c6fab25e579c5b7dd3dd50538416f415fbae"><code>f441c6f</code></a>
chore: release v5.0.0 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11130">#11130</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/c4473e48ee046938a9ab6784fe2735257c2c0f72"><code>c4473e4</code></a>
fix(coverage): prevent crash on <code>/@fs/</code> prepended virtual
files (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11119">#11119</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/897f51fd2493046c52ec9539b7d02fe3763bd63e"><code>897f51f</code></a>
chore: release v5.0.0-rc.4 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11107">#11107</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/7db80dc27e5948010c00160ed0b86570baad6ce8"><code>7db80dc</code></a>
chore: release v5.0.0-rc.3 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11089">#11089</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/5f6a5e84a5e8cef301e15ac2e8f8e9837b002ec6"><code>5f6a5e8</code></a>
feat(coverage): switch to <code>@vitest/istanbuljs</code> packages (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11053">#11053</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/c6174a6cf2847b23075ee35ba5151c2184a70594"><code>c6174a6</code></a>
fix(coverage): v8 to ignore Vite SSR's generated import bindings (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/11023">#11023</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/af83d1b1933b5d74c421d30849717369b828de0b"><code>af83d1b</code></a>
chore: release v5.0.0-rc.2 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/10976">#10976</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/a7fa111fef94bdc80ca9614c4e20b56f3393c920"><code>a7fa111</code></a>
chore: release v5.0.0-rc.1 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/10920">#10920</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/0553851f9f299233fbd2e797a76152e98f593ac7"><code>0553851</code></a>
chore: add Knip checks (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/10847">#10847</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/b7be731900e913c5aae905af03a50fb55f23eac0"><code>b7be731</code></a>
chore: release v5.0.0-beta.7 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8/issues/10825">#10825</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitest-dev/vitest/commits/v5.0.0/packages/coverage-v8">compare
view</a></li>
</ul>
</details>
<br />

Updates `vitest` from 4.1.11 to 5.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitest-dev/vitest/releases">vitest's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<p>Vitest 5 is officially out! This release focuses on performance and
brings a lot of new features while fixing long-standing bugs. See our <a
href="https://vitest.dev/blog/vitest-5.html">blog post</a> for the
official announcement.</p>
<h3>   🚨 Breaking Changes</h3>
<ul>
<li>Replace <code>loupe.inspect</code> with pretty-format  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Claude Opus 5 (1M context)</strong> and <strong>OpenAI
Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9609">vitest-dev/vitest#9609</a>
<a href="https://github.com/vitest-dev/vitest/commit/3f802da4b"><!-- raw
HTML omitted -->(3f802)<!-- raw HTML omitted --></a></li>
<li>Remove quotes from string values in <code>test.for/each</code> title
<code>$</code> variable (take 2)  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10170">vitest-dev/vitest#10170</a>
<a href="https://github.com/vitest-dev/vitest/commit/04d37e9d7"><!-- raw
HTML omitted -->(04d37)<!-- raw HTML omitted --></a></li>
<li>Default <code>attachmentsDir</code> from
<code>.vitest-attachements/</code> to <code>.vitest/attachments/</code>
 -  by <a
href="https://github.com/MdSadiqMd"><code>@​MdSadiqMd</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10186">vitest-dev/vitest#10186</a>
<a href="https://github.com/vitest-dev/vitest/commit/1ba7338c3"><!-- raw
HTML omitted -->(1ba73)<!-- raw HTML omitted --></a></li>
<li>Remove <code>sequential</code> test/suite options in favor of
<code>concurrent</code>  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> and
<strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10198">vitest-dev/vitest#10198</a>
<a href="https://github.com/vitest-dev/vitest/commit/9229f2edc"><!-- raw
HTML omitted -->(9229f)<!-- raw HTML omitted --></a></li>
<li>Represent locator as an object instead of a string  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10212">vitest-dev/vitest#10212</a>
<a href="https://github.com/vitest-dev/vitest/commit/80f07edf6"><!-- raw
HTML omitted -->(80f07)<!-- raw HTML omitted --></a></li>
<li>Inline <code>expect</code> package  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10221">vitest-dev/vitest#10221</a>
<a href="https://github.com/vitest-dev/vitest/commit/ad16223e7"><!-- raw
HTML omitted -->(ad162)<!-- raw HTML omitted --></a></li>
<li>Remove deprecated entry points  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10222">vitest-dev/vitest#10222</a>
<a href="https://github.com/vitest-dev/vitest/commit/994c6ddb9"><!-- raw
HTML omitted -->(994c6)<!-- raw HTML omitted --></a></li>
<li>Require Node.js 22 and Vite 6.4  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10178">vitest-dev/vitest#10178</a>
<a href="https://github.com/vitest-dev/vitest/commit/3876283e8"><!-- raw
HTML omitted -->(38762)<!-- raw HTML omitted --></a></li>
<li>Fail <code>expect.poll</code> when function didn't resolve in time
 -  by <a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>
and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10233">vitest-dev/vitest#10233</a>
<a href="https://github.com/vitest-dev/vitest/commit/4df048c11"><!-- raw
HTML omitted -->(4df04)<!-- raw HTML omitted --></a></li>
<li>Throw an error if hoistable methods are outside the top level scope
 -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10460">vitest-dev/vitest#10460</a>
<a href="https://github.com/vitest-dev/vitest/commit/d0b4fddcb"><!-- raw
HTML omitted -->(d0b4f)<!-- raw HTML omitted --></a></li>
<li><code>toHaveTextContent</code> is strict, add
<code>toMatchTextContent</code> as alternative  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10473">vitest-dev/vitest#10473</a>
<a href="https://github.com/vitest-dev/vitest/commit/18f303079"><!-- raw
HTML omitted -->(18f30)<!-- raw HTML omitted --></a></li>
<li>Don't lookup config file from ancestor directories  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>OpenAI Codex</strong> and <strong>Hiroshi Ogawa</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10428">vitest-dev/vitest#10428</a>
<a href="https://github.com/vitest-dev/vitest/commit/945d9090e"><!-- raw
HTML omitted -->(945d9)<!-- raw HTML omitted --></a></li>
<li>Inline <code>@vitest/runner</code> package, do not publish it
anymore  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10511">vitest-dev/vitest#10511</a>
<a href="https://github.com/vitest-dev/vitest/commit/6d6e46b1e"><!-- raw
HTML omitted -->(6d6e4)<!-- raw HTML omitted --></a></li>
<li>Allow mutating happy-dom/jsdom window object  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10373">vitest-dev/vitest#10373</a>
<a href="https://github.com/vitest-dev/vitest/commit/206e8cff8"><!-- raw
HTML omitted -->(206e8)<!-- raw HTML omitted --></a></li>
<li>Expose <code>concurrencyId</code>/<code>workerId</code> on
TestModule's diagnostics, make id 1-based  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10516">vitest-dev/vitest#10516</a>
<a href="https://github.com/vitest-dev/vitest/commit/bdd985433"><!-- raw
HTML omitted -->(bdd98)<!-- raw HTML omitted --></a></li>
<li>Add <code>screenshotDirectory</code> config to
<code>browser.expect.toMatchScreenshot</code>  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10592">vitest-dev/vitest#10592</a>
<a href="https://github.com/vitest-dev/vitest/commit/a60ded0fb"><!-- raw
HTML omitted -->(a60de)<!-- raw HTML omitted --></a></li>
<li>Update <code>@sinonjs/fake-timers</code> and support mocking
<code>Temporal</code>  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenCode
(gpt-5.6-sol)</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10654">vitest-dev/vitest#10654</a>
<a href="https://github.com/vitest-dev/vitest/commit/f8b1532fe"><!-- raw
HTML omitted -->(f8b15)<!-- raw HTML omitted --></a></li>
<li>Remove webdriverio package  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10675">vitest-dev/vitest#10675</a>
<a href="https://github.com/vitest-dev/vitest/commit/5fed68f72"><!-- raw
HTML omitted -->(5fed6)<!-- raw HTML omitted --></a></li>
<li>Clear mocks by default before each test  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10613">vitest-dev/vitest#10613</a>
<a href="https://github.com/vitest-dev/vitest/commit/0f6463bf2"><!-- raw
HTML omitted -->(0f646)<!-- raw HTML omitted --></a></li>
<li>Don't emit localStorage warnings on Node 26, fail gracefully when
worker fails to start  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10293">vitest-dev/vitest#10293</a>
<a href="https://github.com/vitest-dev/vitest/commit/334edef92"><!-- raw
HTML omitted -->(334ed)<!-- raw HTML omitted --></a></li>
<li>Separate config resolution from the server creation  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10554">vitest-dev/vitest#10554</a>
<a href="https://github.com/vitest-dev/vitest/commit/1c0ec3444"><!-- raw
HTML omitted -->(1c0ec)<!-- raw HTML omitted --></a></li>
<li>Inline projects extend the root config by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10750">vitest-dev/vitest#10750</a>
<a href="https://github.com/vitest-dev/vitest/commit/fec001ad3"><!-- raw
HTML omitted -->(fec00)<!-- raw HTML omitted --></a></li>
<li>Enable mocking Temporal without fake timers  -  by <a
href="https://github.com/fabon-f"><code>@​fabon-f</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenCode
(gpt-5.6-sol)</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10757">vitest-dev/vitest#10757</a>
<a href="https://github.com/vitest-dev/vitest/commit/ac2d46b42"><!-- raw
HTML omitted -->(ac2d4)<!-- raw HTML omitted --></a></li>
<li>Support nested projects  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10846">vitest-dev/vitest#10846</a>
<a href="https://github.com/vitest-dev/vitest/commit/ec367cf2a"><!-- raw
HTML omitted -->(ec367)<!-- raw HTML omitted --></a></li>
<li>Use <code>&gt;</code> as separator in <code>-t</code>, calculate
<code>only</code> once  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10686">vitest-dev/vitest#10686</a>
<a href="https://github.com/vitest-dev/vitest/commit/a0b20bc86"><!-- raw
HTML omitted -->(a0b20)<!-- raw HTML omitted --></a></li>
<li>Fail the test when an asynchronous assertion is not awaited  -  by
<a href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a>
in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10868">vitest-dev/vitest#10868</a>
<a href="https://github.com/vitest-dev/vitest/commit/86d4a9da9"><!-- raw
HTML omitted -->(86d4a)<!-- raw HTML omitted --></a></li>
<li>Share the Vite server between inline projects  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10848">vitest-dev/vitest#10848</a>
<a href="https://github.com/vitest-dev/vitest/commit/d87c96ee4"><!-- raw
HTML omitted -->(d87c9)<!-- raw HTML omitted --></a></li>
<li>Parse files statically in vitest list by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/11088">vitest-dev/vitest#11088</a>
<a href="https://github.com/vitest-dev/vitest/commit/51e949416"><!-- raw
HTML omitted -->(51e94)<!-- raw HTML omitted --></a></li>
<li><strong>benchmark</strong>:
<ul>
<li>Rewrite the public API  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10113">vitest-dev/vitest#10113</a>
<a href="https://github.com/vitest-dev/vitest/commit/19f6e8947"><!-- raw
HTML omitted -->(19f6e)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>browser</strong>:
<ul>
<li>Iframe scale  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9745">vitest-dev/vitest#9745</a>
<a href="https://github.com/vitest-dev/vitest/commit/b639852cc"><!-- raw
HTML omitted -->(b6398)<!-- raw HTML omitted --></a></li>
<li>Enable <code>locators.exact</code> by default  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10430">vitest-dev/vitest#10430</a>
<a href="https://github.com/vitest-dev/vitest/commit/e203202f9"><!-- raw
HTML omitted -->(e2032)<!-- raw HTML omitted --></a></li>
<li>Require <code>sessionId</code> for orchestrator html request  -  by
<a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong> and <strong>OpenAI Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10522">vitest-dev/vitest#10522</a>
<a href="https://github.com/vitest-dev/vitest/commit/79b7d8fcc"><!-- raw
HTML omitted -->(79b7d)<!-- raw HTML omitted --></a></li>
<li>Save failure screenshots in <code>attachmentsDir</code>  -  by <a
href="https://github.com/macarie"><code>@​macarie</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10917">vitest-dev/vitest#10917</a>
<a href="https://github.com/vitest-dev/vitest/commit/3b5bbd8b4"><!-- raw
HTML omitted -->(3b5bb)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>coverage</strong>:
<ul>
<li><code>include/exclude</code> globs too eager  -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9818">vitest-dev/vitest#9818</a>
<a href="https://github.com/vitest-dev/vitest/commit/edacb0fd4"><!-- raw
HTML omitted -->(edacb)<!-- raw HTML omitted --></a></li>
<li>Allow <code>thresholds.perFile</code> to accept an object  -  by <a
href="https://github.com/vladlenskiy"><code>@​vladlenskiy</code></a> and
<a href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/10190">vitest-dev/vitest#10190</a>
<a href="https://github.com/vitest-dev/vitest/commit/13b78d98b"><!-- raw
HTML omitted -->(13b78)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>expect</strong>:
<ul>
<li>Fix <code>toThrow(&quot;&quot;)</code> behavior by reverting <a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/6710">#6710</a>
 -  by <a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>
in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/9643">vitest-dev/vitest#9643</a>
and <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6710">vitest-dev/vitest#6710</a>
<a href="https://github.com/vitest-dev/vitest/commit/6c3e4bdbf"><!-- raw
HTML omitted -->(6c3e4)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>mocker</strong>:
<ul>
<li>Deserialize automock as automock  -  by <a
href="https://github.com/nami8824"><code>@​nami8824</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10192">vitest-dev/vitest#10192</a>
<a href="https://github.com/vitest-dev/vitest/commit/2f892712d"><!-- raw
HTML omitted -->(2f892)<!-- raw HTML omitted --></a></li>
</ul>
</li>
<li><strong>reporters</strong>:
<ul>
<li><code>blob</code> reporter and <code>--merge-reports</code> default
to <code>.vitest/blob/</code>  -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10232">vitest-dev/vitest#10232</a>
<a href="https://github.com/vitest-dev/vitest/commit/d22b029ae"><!-- raw
HTML omitted -->(d22b0)<!-- raw HTML omitted --></a></li>
<li>Write json and junit reporter output files to <code>.vitest</code>
by default  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a>,
<strong>Hiroshi Ogawa</strong>, <strong>OpenCode (gpt-5.6-sol)</strong>
and <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10621">vitest-dev/vitest#10621</a>
<a href="https://github.com/vitest-dev/vitest/commit/58577290a"><!-- raw
HTML omitted -->(58577)<!-- raw HTML omitted --></a></li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitest-dev/vitest/commit/f441c6fab25e579c5b7dd3dd50538416f415fbae"><code>f441c6f</code></a>
chore: release v5.0.0 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11130">#11130</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/d46a7472266d5bb43595ea51dcdd64ab0f560f12"><code>d46a747</code></a>
fix: treat test.describe as a suite during static collection (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11128">#11128</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/584cf308437069385b0fb905fa3ff7d7b7f65a90"><code>584cf30</code></a>
fix: add a warning if inline project has duplicate plugins due to
unexpected ...</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/f08ce4b7144542af128dcb884150c42074223653"><code>f08ce4b</code></a>
fix: apply queued mocks from doMock() in queue order (fixes <a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10706">#10706</a>)
(<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11127">#11127</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/897f51fd2493046c52ec9539b7d02fe3763bd63e"><code>897f51f</code></a>
chore: release v5.0.0-rc.4 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11107">#11107</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/1339b0655dc4679aeb8f905bacee83b6f76f6b23"><code>1339b06</code></a>
chore(deps): update all non-major dependencies (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11104">#11104</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/51e9494166d8d0108a621fce80c41b6dba760bae"><code>51e9494</code></a>
feat!: parse files statically in vitest list by default (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11088">#11088</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/2122ffdfb42d86c9a2f1238100d6a031312cae32"><code>2122ffd</code></a>
fix: propagate --maxWorkers to projects (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11102">#11102</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/dc10f5f8fb69b026afcf56f8a7a9dd36bd964d73"><code>dc10f5f</code></a>
fix(browser): report the action error when a task times out (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11101">#11101</a>)</li>
<li><a
href="https://github.com/vitest-dev/vitest/commit/d4fe1986fe334d22940039e815ccdbcc907baa6a"><code>d4fe198</code></a>
feat: promote clearCache out of experimental (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/11086">#11086</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitest-dev/vitest/commits/v5.0.0/packages/vitest">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 14:33:49 +00:00
dependabot[bot] 6e1a0c19c3 chore(deps-dev): Bump eslint from 10.9.1 to 10.10.0 (#2152)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [eslint](https://github.com/eslint/eslint) from 10.9.1 to 10.10.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.10.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/264b4346d1963701df0c398b4aeb2f6e8b2af93e"><code>264b434</code></a>
feat: add <code>d</code> and <code>v</code> flags to
<code>no-unexpected-multiline</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21305">#21305</a>)
(Gihyeon Jeong / 정기현)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c6cc6c592f30901345d94ef75e0d42c1894fae6c"><code>c6cc6c5</code></a>
feat: check <code>Object.prototype</code> property names in
<code>new-cap</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21269">#21269</a>)
(crimsonjay0)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5661fa65fde9fd4c14f0b730e3cee6a42fc657c1"><code>5661fa6</code></a>
feat: no-extra-bind false negatives with class fields and static blocks
(<a
href="https://redirect.github.com/eslint/eslint/issues/21260">#21260</a>)
(synthex-byte)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/bb47dc6da2399a8f76c0c0c3273e6bc314c480e5"><code>bb47dc6</code></a>
fix: update dependency file-entry-cache to v11 (<a
href="https://redirect.github.com/eslint/eslint/issues/20801">#20801</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/427ac0a014066c36aa57fa8fa9af20fd9fb591e1"><code>427ac0a</code></a>
fix: use format strings in debug calls (<a
href="https://redirect.github.com/eslint/eslint/issues/21247">#21247</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9d8153223dbf47b9aecdc1474202aaee4845f146"><code>9d81532</code></a>
fix: support <code>__proto__</code> in <code>/* exported */</code>
comments (<a
href="https://redirect.github.com/eslint/eslint/issues/21261">#21261</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/87e0a082438264ad90b87fd74165ab4fd90f63ef"><code>87e0a08</code></a>
fix: prefer-object-has-own autofix breaks when Object is shadowed (<a
href="https://redirect.github.com/eslint/eslint/issues/21282">#21282</a>)
(김채영)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8e2cb142217f2efee1d10dcc02bfb75145ae775d"><code>8e2cb14</code></a>
fix: <code>new-cap</code> false positive for <code>UTC</code> calls with
<code>properties: false</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21275">#21275</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9f4a364ab0ade048dfce1f37792b1d461d866e55"><code>9f4a364</code></a>
fix: Ignore static imports in no-unreachable (<a
href="https://redirect.github.com/eslint/eslint/issues/21276">#21276</a>)
(Taha Kotil)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/2417cad57d7d1bc4cf3ecf0f0575cfb10ff2011c"><code>2417cad</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9cecb8a0a2348070abf72321965d41919c7cc626"><code>9cecb8a</code></a>
docs: document <code>\c</code> control letter escapes in
no-control-regex (<a
href="https://redirect.github.com/eslint/eslint/issues/21286">#21286</a>)
(한국)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8724829f69f8ed80c876e3a5a017da199ce78739"><code>8724829</code></a>
docs: update compat table links (<a
href="https://redirect.github.com/eslint/eslint/issues/21263">#21263</a>)
(fnx)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5634542be580750ffb1a5766470f9e9c72719696"><code>5634542</code></a>
docs: Clarify eqeqeq suggestion behavior (<a
href="https://redirect.github.com/eslint/eslint/issues/21256">#21256</a>)
(Müslüm Yılmaz)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/b3d876b46083d67899eb1d9613118c1c583632a2"><code>b3d876b</code></a>
chore: disable npm audit in ecosystem tests (<a
href="https://redirect.github.com/eslint/eslint/issues/21306">#21306</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1696682791661c13167eb905da2f38d1b8f4a3bf"><code>1696682</code></a>
ci: restore EMFILE test on Node.js 26 (<a
href="https://redirect.github.com/eslint/eslint/issues/21297">#21297</a>)
(Marry (Subin Yang))</li>
<li><a
href="https://github.com/eslint/eslint/commit/2c7f5d6f47a92e8c0847af103e40fdb2f4dc61ef"><code>2c7f5d6</code></a>
chore: update github/codeql-action action to v4.37.9 (<a
href="https://redirect.github.com/eslint/eslint/issues/21296">#21296</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/3c753f18b461bfbf36d41a79a7863c093ef48489"><code>3c753f1</code></a>
chore: update eslint (<a
href="https://redirect.github.com/eslint/eslint/issues/21289">#21289</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/1c734690bf6f4f9c542bec428d5a1a5c6cc4a19b"><code>1c73469</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21280">#21280</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/08a02be429e21fc93d86c8dd16cec6dc945ea2c1"><code>08a02be</code></a>
test: add error locations to <code>no-extra-boolean-cast</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21266">#21266</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/77bb1db8e730b7da2347c647d60f215706aa349a"><code>77bb1db</code></a>
chore: update github/codeql-action action to v4.37.8 (<a
href="https://redirect.github.com/eslint/eslint/issues/21270">#21270</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/007e81ac0ad66bd0be4887d88a276df292ae0bed"><code>007e81a</code></a>
ci: skip EMFILE test on Node.js 26 (<a
href="https://redirect.github.com/eslint/eslint/issues/21265">#21265</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0430280e7cca9dc0fdbf0bc50464e98e84285c49"><code>0430280</code></a>
chore: improve ecosystem tests compatibility on Windows (<a
href="https://redirect.github.com/eslint/eslint/issues/21178">#21178</a>)
(crimsonjay0)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/3f20a57c6293371b6193d3fb6746c2b7b2ac2689"><code>3f20a57</code></a>
10.10.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/f4e5284803854423c4c2536696888c28ce4a151f"><code>f4e5284</code></a>
Build: changelog update for 10.10.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/bb47dc6da2399a8f76c0c0c3273e6bc314c480e5"><code>bb47dc6</code></a>
fix: update dependency file-entry-cache to v11 (<a
href="https://redirect.github.com/eslint/eslint/issues/20801">#20801</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/427ac0a014066c36aa57fa8fa9af20fd9fb591e1"><code>427ac0a</code></a>
fix: use format strings in debug calls (<a
href="https://redirect.github.com/eslint/eslint/issues/21247">#21247</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b3d876b46083d67899eb1d9613118c1c583632a2"><code>b3d876b</code></a>
chore: disable npm audit in ecosystem tests (<a
href="https://redirect.github.com/eslint/eslint/issues/21306">#21306</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9d8153223dbf47b9aecdc1474202aaee4845f146"><code>9d81532</code></a>
fix: support <code>__proto__</code> in <code>/* exported */</code>
comments (<a
href="https://redirect.github.com/eslint/eslint/issues/21261">#21261</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/264b4346d1963701df0c398b4aeb2f6e8b2af93e"><code>264b434</code></a>
feat: add <code>d</code> and <code>v</code> flags to
<code>no-unexpected-multiline</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21305">#21305</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1696682791661c13167eb905da2f38d1b8f4a3bf"><code>1696682</code></a>
ci: restore EMFILE test on Node.js 26 (<a
href="https://redirect.github.com/eslint/eslint/issues/21297">#21297</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2c7f5d6f47a92e8c0847af103e40fdb2f4dc61ef"><code>2c7f5d6</code></a>
chore: update github/codeql-action action to v4.37.9 (<a
href="https://redirect.github.com/eslint/eslint/issues/21296">#21296</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/87e0a082438264ad90b87fd74165ab4fd90f63ef"><code>87e0a08</code></a>
fix: prefer-object-has-own autofix breaks when Object is shadowed (<a
href="https://redirect.github.com/eslint/eslint/issues/21282">#21282</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.9.1...v10.10.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.9.1&new-version=10.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 14:33:02 +00:00
dependabot[bot] 4cf63c1573 chore(deps-dev): Bump i18next-cli from 1.73.0 to 1.73.1 (#2148)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.73.0
to 1.73.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.73.1</h2>
<ul>
<li>fix(extract): the <code>&lt;Trans&gt;</code> child error added for
<a
href="https://redirect.github.com/i18next/i18next-cli/issues/246">#246</a>
now also fires for <code>{table.name}</code>,
<code>{fn()}</code>, <code>{`a ${b}`}</code> and any other child
expression the extractor cannot serialise, not
only for bare identifiers like <code>{name}</code>. react-i18next
inlines the value at runtime, while
extraction silently produced an empty <code>&lt;1&gt;&lt;/1&gt;</code>
placeholder, so the key never matched. The
message suggests the <code>{{name: table.name}}</code> object form. It
also no longer asks for a <code>values</code>
prop: react-i18next reads the value from the <code>{{name}}</code>
object child itself, so
<code>&lt;Trans&gt;See table {{name}}&lt;/Trans&gt;</code> works on its
own. Extraction output is unchanged.
Fixes <a
href="https://redirect.github.com/i18next/i18next-cli/issues/290">#290</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/938cfa0b39b72c144ba6300f7533f9ff41b7d37b"><code>938cfa0</code></a>
1.73.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/bc99139723bdb47d2e01c527f108db237e3665d7"><code>bc99139</code></a>
fix(extract): error on &lt;Trans&gt; children like {table.name} that
won't match at...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/83988c9ff0aa2cb5446f0b1f29db1a040003c073"><code>83988c9</code></a>
fix github actions</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.73.0...v1.73.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.73.0&new-version=1.73.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-08 14:23:11 +00:00
dependabot[bot] a16d38abba chore(deps-dev): Bump i18next-cli from 1.72.1 to 1.73.0 (#2139)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.72.1
to 1.73.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.73.0</h2>
<ul>
<li>feat: <code>init</code> runs without the wizard. <code>--yes</code>
takes the detected defaults for every question
not answered by <code>--locales</code>, <code>--input</code>,
<code>--output</code>, <code>--backend &lt;local|locize|other&gt;</code>
or
<code>--file-type &lt;ts|js&gt;</code>; <code>--project-id
&lt;id&gt;</code> (or <code>LOCIZE_PROJECTID</code>) supplies the Locize
project id
and skips the signup page and the credential prompts. Made for scripts
and AI coding agents,
which cannot drive the prompts.</li>
<li>feat: <code>init --agent-note</code> (also the last wizard question,
default No) appends a short
<code>## Internationalization</code> section to <code>AGENTS.md</code>
(and <code>CLAUDE.md</code> when present; when neither
exists, <code>AGENTS.md</code> is created, plus a <code>CLAUDE.md</code>
importing it if the project has a <code>.claude/</code>
folder) so the next agent session knows where the locale files are and
how translations are
managed. The exact text is in the README; <code>--no-agent-note</code>
skips the question. Nothing is
written unless you say yes.</li>
<li>change: the <code>localize</code> agent prompt
(<code>--print-agent-prompt</code>) and the
<code>i18next-localization</code>
skill no longer presume Locize. The agent asks the developer once,
before creating the config,
whether to manage the translations with Locize or keep the files in the
repository, and never
creates a project or asks for an API key unless they chose Locize. The
prompt now creates the
config with <code>init --yes ...</code> instead of the interactive
wizard.</li>
</ul>
<h2>1.72.4</h2>
<ul>
<li>docs: the README shows the skills.sh install badge for the
<code>i18next-localization</code> Agent Skill, and
<code>i18next-cli --help</code> now ends with a one-line hint on
installing it
(<code>npx skills add i18next/i18next-cli</code>). No other command
prints anything new.</li>
</ul>
<h2>1.72.3</h2>
<ul>
<li>feat(funnel): the Locize hint after <code>status</code>,
<code>extract</code> and <code>sync</code> is now a single line that
names the untranslated-key gap and the one command that fills it
(<code>npx i18next-cli localize</code>),
each with its own <code>?from=</code> tagged register link. It only
appears when secondary locales
actually have untranslated keys; the 24h cooldown and the CI/non-TTY
suppression are unchanged.</li>
</ul>
<h2>1.72.2</h2>
<ul>
<li>fix: extract dynamic keys built from <code>for...of</code> loop
variables. <code>for (const unit of UNITS)</code> over
an <code>as const</code> string array now binds <code>unit</code> while
the loop body is walked, just like <code>.map()</code> /
<code>.forEach()</code> callback parameters already did.</li>
<li>fix: capture <code>as const</code> arrays of object literals (e.g.
<code>[{ unit: 'day' }, { unit: 'hour' }]</code>),
so both <code>for (const { unit } of UNITS)</code> and
<code>UNITS.forEach(({ unit }) =&gt; ...)</code> resolve the
destructured properties.</li>
<li>fix: resolve object destructuring of a known <code>as const</code>
object, e.g. <code>const { unit } = rate;</code>
followed by <code>t(`msg ${unit}`)</code>
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/289">#289</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/bf7f167b61e8578bf78022578088b18a28f6381a"><code>bf7f167</code></a>
1.73.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/8a38aa0606e318556bf12c6e0101d0dd0d8244de"><code>8a38aa0</code></a>
feat(init): non-interactive options, --project-id and an opt-in agent
note; t...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/7fb1095445516f7aa745ce5fe1682a2fe6e3ad3f"><code>7fb1095</code></a>
docs(skill): single-line description in the SKILL.md frontmatter</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/9224c6eff8b98e32c7fffcb136ffd0be916e8c6c"><code>9224c6e</code></a>
1.72.4</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/dcd02988c4da0bc746be0902e71f58f45db9f13e"><code>dcd0298</code></a>
docs: skills.sh badge and a --help hint for the i18next-localization
skill</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/285716dc3e6f4328866f7ae568ee8ace76dc8e11"><code>285716d</code></a>
1.72.3</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/ce1c77dc350d605540304e34fed5361de7bcab04"><code>ce1c77d</code></a>
feat(funnel): one-line Locize hint after status, extract and sync</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/87103c7ea6f3fecd01376b28fe6127ee341de7bd"><code>87103c7</code></a>
1.72.2</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/bb1c07e2589900c44c0ee7a7f598afefc57a2b77"><code>bb1c07e</code></a>
fix: extract dynamic keys from for-of loops and destructured as-const
objects</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.72.1...v1.73.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 14:05:08 +00:00
dependabot[bot] ce171f1ce2 chore(deps-dev): Bump sass from 1.103.1 to 1.104.0 (#2141)
Bumps [sass](https://github.com/sass/dart-sass) from 1.103.1 to 1.104.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/releases">sass's
releases</a>.</em></p>
<blockquote>
<h2>Dart Sass 1.104.0</h2>
<p>To install Sass 1.104.0, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>
<p><strong>Potentially breaking compatibility fix:</strong> Colors now
convert the special values NaN and negative zero, as well as infinity
and negative infinity for polar-hue channels, to 0 as per the CSS
spec.</p>
</li>
<li>
<p>The special value negative zero is now serialized as <code>-0</code>
instead of <code>0</code> for greater compatibility when using it in CSS
calculations.</p>
</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11040">full
changelog</a> for changes in earlier releases.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's
changelog</a>.</em></p>
<blockquote>
<h2>1.104.0</h2>
<ul>
<li>
<p><strong>Potentially breaking compatibility fix:</strong> Colors now
convert the special
values NaN and negative zero, as well as infinity and negative infinity
for
polar-hue channels, to 0 as per the CSS spec.</p>
</li>
<li>
<p>The special value negative zero is now serialized as <code>-0</code>
instead of <code>0</code> for
greater compatibility when using it in CSS calculations.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sass/dart-sass/commit/e01e268c6f6826ae309bf3105765d4c93024ebbc"><code>e01e268</code></a>
Merge pull request <a
href="https://redirect.github.com/sass/dart-sass/issues/2845">#2845</a>
from sass/dependabot/pub/pub_api_client-4.0.0</li>
<li><a
href="https://github.com/sass/dart-sass/commit/b7b3ce3cf3d3676d2f2d4de3ac82237cd96e29b6"><code>b7b3ce3</code></a>
Drop unnecessary import</li>
<li><a
href="https://github.com/sass/dart-sass/commit/0ea3ef0c8ff9240673fe421be5a1993a4b6136c5"><code>0ea3ef0</code></a>
Implement degenerate colors (<a
href="https://redirect.github.com/sass/dart-sass/issues/2840">#2840</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/ea6a8e25a67b994985ca46b94e9b45be098fa4ff"><code>ea6a8e2</code></a>
Use TypeScript 7 without breaking Eslint (<a
href="https://redirect.github.com/sass/dart-sass/issues/2844">#2844</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/c8928c417637d5fcd41a1f1eba7d93d522fe453e"><code>c8928c4</code></a>
Automatically merge dependabot PRs (<a
href="https://redirect.github.com/sass/dart-sass/issues/2843">#2843</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/dfefe285b5ba0750ebfdee1dfbfca13c6a49a5dd"><code>dfefe28</code></a>
Bump pub_api_client from 3.2.0 to 4.0.0</li>
<li><a
href="https://github.com/sass/dart-sass/commit/3c6bf54a51f507e7a194179a76f4241a35781826"><code>3c6bf54</code></a>
Bump browser-actions/setup-chrome from 2.1.2 to 2.2.0 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2841">#2841</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/9f6876ce1fb2ce710e32f88b9848ad1bf0a8a706"><code>9f6876c</code></a>
Bump postcss from 8.5.25 to 8.5.26 in /pkg/sass-parser (<a
href="https://redirect.github.com/sass/dart-sass/issues/2836">#2836</a>)</li>
<li>See full diff in <a
href="https://github.com/sass/dart-sass/compare/1.103.1...1.104.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 14:04:18 +00:00
dependabot[bot] fa5a88c658 chore(deps): Bump js-yaml (#2145)
Bumps and [js-yaml](https://github.com/nodeca/js-yaml). These
dependencies needed to be updated together.
Updates `js-yaml` from 3.14.2 to 3.15.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodeca/js-yaml/blob/3.15.2/CHANGELOG.md">js-yaml's
changelog</a>.</em></p>
<blockquote>
<h2>3.15.2 - 2026-08-26</h2>
<h3>Changed</h3>
<ul>
<li>[backport] Hard-limit merge sequence size to 100.</li>
</ul>
<h3>Security</h3>
<ul>
<li>[backport] Count empty mappings in merge sequences toward
<code>maxTotalMergeKeys</code>
to limit CPU usage, <a
href="https://redirect.github.com/nodeca/js-yaml/issues/797">#797</a>.</li>
</ul>
<h2>3.15.1 - 2026-07-31</h2>
<h3>Security</h3>
<ul>
<li>[backport] Remove quadratic complexity from <code>!!omap</code>
duplicate key detection.</li>
</ul>
<h2>3.15.0 - 2026-06-27</h2>
<h3>Added</h3>
<ul>
<li>Added <code>maxTotalMergeKeys</code> (10000) loader option to limit
the total number of
keys processed by YAML merge (<code>&lt;&lt;</code>) across one
<code>safeLoad()</code> / <code>safeLoadAll()</code>
call.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nodeca/js-yaml/commit/5c45bd6e960603c13644f5cc8b572ca257723b36"><code>5c45bd6</code></a>
3.15.2 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/5a708f9f4f22e78b87ebe363848cfa4fa4818c0d"><code>5a708f9</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/3485bc06ff8a0251505f44a00414d90df2466639"><code>3485bc0</code></a>
Backport merge limits from v5.4.1</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/f34812f1cea794f8c21e0a4e1f3a2584b720f305"><code>f34812f</code></a>
Update .gitignore</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/ab85ae2c622bc6d8cdbceccafe9f9b7df80463ed"><code>ab85ae2</code></a>
3.15.1 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/30a5e7647a4454f7bac969bfbbe7eac9921a4279"><code>30a5e76</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/22a8071ef032117bc6249c330b240ac3aa2d3ded"><code>22a8071</code></a>
Backport quadratic complexity fix for !!omap</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/c34b6c40027a769eb0d67958ae615268a1d55f54"><code>c34b6c4</code></a>
3.15.0 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/21e13d363f33501c7ee6ca988b88c29084999f72"><code>21e13d3</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/4165c62630d64fe4f25fb0d03139c7e137b24b1c"><code>4165c62</code></a>
Add v3-legacy tag for publish</li>
<li>Additional commits viewable in <a
href="https://github.com/nodeca/js-yaml/compare/3.14.2...3.15.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `js-yaml` from 4.1.1 to 4.3.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodeca/js-yaml/blob/3.15.2/CHANGELOG.md">js-yaml's
changelog</a>.</em></p>
<blockquote>
<h2>3.15.2 - 2026-08-26</h2>
<h3>Changed</h3>
<ul>
<li>[backport] Hard-limit merge sequence size to 100.</li>
</ul>
<h3>Security</h3>
<ul>
<li>[backport] Count empty mappings in merge sequences toward
<code>maxTotalMergeKeys</code>
to limit CPU usage, <a
href="https://redirect.github.com/nodeca/js-yaml/issues/797">#797</a>.</li>
</ul>
<h2>3.15.1 - 2026-07-31</h2>
<h3>Security</h3>
<ul>
<li>[backport] Remove quadratic complexity from <code>!!omap</code>
duplicate key detection.</li>
</ul>
<h2>3.15.0 - 2026-06-27</h2>
<h3>Added</h3>
<ul>
<li>Added <code>maxTotalMergeKeys</code> (10000) loader option to limit
the total number of
keys processed by YAML merge (<code>&lt;&lt;</code>) across one
<code>safeLoad()</code> / <code>safeLoadAll()</code>
call.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nodeca/js-yaml/commit/5c45bd6e960603c13644f5cc8b572ca257723b36"><code>5c45bd6</code></a>
3.15.2 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/5a708f9f4f22e78b87ebe363848cfa4fa4818c0d"><code>5a708f9</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/3485bc06ff8a0251505f44a00414d90df2466639"><code>3485bc0</code></a>
Backport merge limits from v5.4.1</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/f34812f1cea794f8c21e0a4e1f3a2584b720f305"><code>f34812f</code></a>
Update .gitignore</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/ab85ae2c622bc6d8cdbceccafe9f9b7df80463ed"><code>ab85ae2</code></a>
3.15.1 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/30a5e7647a4454f7bac969bfbbe7eac9921a4279"><code>30a5e76</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/22a8071ef032117bc6249c330b240ac3aa2d3ded"><code>22a8071</code></a>
Backport quadratic complexity fix for !!omap</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/c34b6c40027a769eb0d67958ae615268a1d55f54"><code>c34b6c4</code></a>
3.15.0 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/21e13d363f33501c7ee6ca988b88c29084999f72"><code>21e13d3</code></a>
dist rebuild</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/4165c62630d64fe4f25fb0d03139c7e137b24b1c"><code>4165c62</code></a>
Add v3-legacy tag for publish</li>
<li>Additional commits viewable in <a
href="https://github.com/nodeca/js-yaml/compare/3.14.2...3.15.2">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 14:00:42 +00:00
dependabot[bot] 636cdc6cc5 chore(deps): Bump i18next from 26.4.1 to 26.4.2 (#2143)
Bumps [i18next](https://github.com/i18next/i18next) from 26.4.1 to
26.4.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/releases">i18next's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.2</h2>
<ul>
<li>fix: <code>$&amp;</code>, <code>$`</code>, <code>$'</code> and
<code>$$</code> inside a nested value (<code>$t(key)</code>) now stay
literal. <code>nest()</code> handed the resolved value straight to
<code>String.replace</code> as the replacement argument, so those
sequences were read as replacement patterns: <code>$&amp;</code>
re-inserted the <code>$t(...)</code> match, <code>$`</code> /
<code>$'</code> inserted the text before / after it, and <code>$$</code>
collapsed to <code>$</code>. Through <code>t()</code> the
<code>$&amp;</code> case was worse than a wrong string: the nested
lookup resets the shared nesting regexp, so the re-inserted
<code>$t(...)</code> was matched again on every pass and
<code>t()</code> never returned — also under the default
<code>escapeValue: true</code> when the value arrives via a variable
forwarded through nesting options (<code>$t(key, { &quot;name&quot;:
&quot;{{name}}&quot; })</code> with a name containing
<code>$&amp;</code>). The value is now <code>$</code>-escaped at the
<code>String.replace</code> call, the same guard
<code>interpolate()</code> already has, and a non-string value returned
by a formatter in the nesting chain (<code>$t(key, myFormat)</code>) is
stringified before that. Nested values are still not HTML-escaped (<a
href="https://redirect.github.com/i18next/i18next/issues/854">#854</a>).
Thanks <a href="https://github.com/mahirhir"><code>@​mahirhir</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2447">#2447</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/blob/master/CHANGELOG.md">i18next's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.2</h2>
<ul>
<li>fix: <code>$&amp;</code>, <code>$`</code>, <code>$'</code> and
<code>$$</code> inside a nested value (<code>$t(key)</code>) now stay
literal. <code>nest()</code> handed the resolved value straight to
<code>String.replace</code> as the replacement argument, so those
sequences were read as replacement patterns: <code>$&amp;</code>
re-inserted the <code>$t(...)</code> match, <code>$`</code> /
<code>$'</code> inserted the text before / after it, and <code>$$</code>
collapsed to <code>$</code>. Through <code>t()</code> the
<code>$&amp;</code> case was worse than a wrong string: the nested
lookup resets the shared nesting regexp, so the re-inserted
<code>$t(...)</code> was matched again on every pass and
<code>t()</code> never returned — also under the default
<code>escapeValue: true</code> when the value arrives via a variable
forwarded through nesting options (<code>$t(key, { &quot;name&quot;:
&quot;{{name}}&quot; })</code> with a name containing
<code>$&amp;</code>). The value is now <code>$</code>-escaped at the
<code>String.replace</code> call, the same guard
<code>interpolate()</code> already has, and a non-string value returned
by a formatter in the nesting chain (<code>$t(key, myFormat)</code>) is
stringified before that. Nested values are still not HTML-escaped (<a
href="https://redirect.github.com/i18next/i18next/issues/854">#854</a>).
Thanks <a href="https://github.com/mahirhir"><code>@​mahirhir</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2447">#2447</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next/commit/4dba50f20669c3678db0812255716eb7693ad2da"><code>4dba50f</code></a>
26.4.2</li>
<li><a
href="https://github.com/i18next/i18next/commit/e436b625a648e1a48ea27ecf5f2fba8020d67009"><code>e436b62</code></a>
build</li>
<li><a
href="https://github.com/i18next/i18next/commit/d955fb086e9f4ded1200f51ecbb21034dbad1d92"><code>d955fb0</code></a>
fix: stringify formatter results in nested values, changelog
v26.4.2</li>
<li><a
href="https://github.com/i18next/i18next/commit/dfafa3ca725e1415ef20e7fb5b1b3e4468f3c425"><code>dfafa3c</code></a>
fix: keep replacement patterns literal in nested values (<a
href="https://redirect.github.com/i18next/i18next/issues/2447">#2447</a>)</li>
<li><a
href="https://github.com/i18next/i18next/commit/3c9981e22dd471b6bca224aa1f60e04ba3f6153a"><code>3c9981e</code></a>
chore: keep dev-only and local files out of the npm package</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next/compare/v26.4.1...v26.4.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next&package-manager=npm_and_yarn&previous-version=26.4.1&new-version=26.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:54:47 +00:00
dependabot[bot] 31cda1dbe7 chore(deps): Bump @codemirror/view from 6.43.10 to 6.43.11 (#2138)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [@codemirror/view](https://github.com/codemirror/view) from
6.43.10 to 6.43.11.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/view/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/view&package-manager=npm_and_yarn&previous-version=6.43.10&new-version=6.43.11)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:54:37 +00:00
dependabot[bot] 7f83abf773 chore(deps): Bump maplibre-gl from 6.6.0 to 6.7.0 (#2142)
Bumps [maplibre-gl](https://github.com/maplibre/maplibre-gl-js) from
6.6.0 to 6.7.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/releases">maplibre-gl's
releases</a>.</em></p>
<blockquote>
<h2>v6.7.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Support the style specification's <code>font-faces</code> property,
with <code>map.setFontFaces</code> and <code>map.getFontFaces</code> and
improve complex script languages such as Devanagari, Khmer, Burmese and
Hebrew (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8237">#8237</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Wrap Thai, Khmer, Burmese, Lao, Tibetan, Javanese and Balinese
labels at word boundaries instead of running them on in one line, which
applies to every style whether or not it declares
<code>font-faces</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8237">#8237</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Throw <code>GPUInitializationError</code> from the <code>Map</code>
constructor when the WebGL2 context cannot be created, instead of firing
an <code>error</code> event no listener can catch and returning a
partially constructed map (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8066">#8066</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Allow adding an image source without a <code>url</code>. The source
starts empty and makes no network request; call
<code>updateImage({image})</code> or <code>updateImage({url})</code>
later to show an image (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8167">#8167</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Skip symbol re-placement when its inputs are unchanged, so repaints
from animated style images or custom layers cost a single frame (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8208">#8208</a>)
(by <a
href="https://github.com/lucaswoj"><code>@​lucaswoj</code></a>)</li>
<li>Add <code>Style#triggerSymbolPlacement</code>, which re-places
symbols when something the map cannot see for itself has moved them (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8208">#8208</a>)
(by <a
href="https://github.com/lucaswoj"><code>@​lucaswoj</code></a>)</li>
<li>Make <code>{validate: false}</code> skip the style snapshot the
style setters only build as error context, so adding layers one at a
time no longer serializes the whole style on every call (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8259">#8259</a>)
(by <a href="https://github.com/lazerg"><code>@​lazerg</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Disable the navigation control's zoom-out button when viewport
constraints prevent zooming out further (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5316">#5316</a>)
(by <a href="https://github.com/miakh"><code>@​miakh</code></a>)</li>
<li>Keep a vector tile's etag when the tile is reloaded after a style
change, so the next expiry refresh can still skip unchanged tiles (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3309">#3309</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Fix <code>project()</code> and <code>queryTerrainElevation</code>
disagreeing with the rendered terrain surface when the elevation lookup
sampled a different DEM zoom than the drawn mesh (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8212">#8212</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Draw numbers (e.g. “21” in “반포대로21길”) and short uppercase codes
(e.g. “A1”) upright in vertical line labels instead of rotating them
along the line (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5404">#5404</a>)
(by <a
href="https://github.com/NEKOYASAN"><code>@​NEKOYASAN</code></a>)</li>
<li>Fix the camera jumping at the end of a pan or zoom gesture on
terrain by sampling the center elevation from the rendered terrain
surface (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/7989">#7989</a>,
<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3982">#3982</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Ensure style state defaults are serialized (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8263">#8263</a>)
(by <a
href="https://github.com/hiddewie"><code>@​hiddewie</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/blob/main/CHANGELOG.md">maplibre-gl's
changelog</a>.</em></p>
<blockquote>
<h2>6.7.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Support the style specification's <code>font-faces</code> property,
with <code>map.setFontFaces</code> and <code>map.getFontFaces</code> and
improve complex script languages such as Devanagari, Khmer, Burmese and
Hebrew (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8237">#8237</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Wrap Thai, Khmer, Burmese, Lao, Tibetan, Javanese and Balinese
labels at word boundaries instead of running them on in one line, which
applies to every style whether or not it declares
<code>font-faces</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8237">#8237</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Throw <code>GPUInitializationError</code> from the <code>Map</code>
constructor when the WebGL2 context cannot be created, instead of firing
an <code>error</code> event no listener can catch and returning a
partially constructed map (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8066">#8066</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Allow adding an image source without a <code>url</code>. The source
starts empty and makes no network request; call
<code>updateImage({image})</code> or <code>updateImage({url})</code>
later to show an image (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8167">#8167</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Skip symbol re-placement when its inputs are unchanged, so repaints
from animated style images or custom layers cost a single frame (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8208">#8208</a>)
(by <a
href="https://github.com/lucaswoj"><code>@​lucaswoj</code></a>)</li>
<li>Add <code>Style#triggerSymbolPlacement</code>, which re-places
symbols when something the map cannot see for itself has moved them (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8208">#8208</a>)
(by <a
href="https://github.com/lucaswoj"><code>@​lucaswoj</code></a>)</li>
<li>Make <code>{validate: false}</code> skip the style snapshot the
style setters only build as error context, so adding layers one at a
time no longer serializes the whole style on every call (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8259">#8259</a>)
(by <a href="https://github.com/lazerg"><code>@​lazerg</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Disable the navigation control's zoom-out button when viewport
constraints prevent zooming out further (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5316">#5316</a>)
(by <a href="https://github.com/miakh"><code>@​miakh</code></a>)</li>
<li>Keep a vector tile's etag when the tile is reloaded after a style
change, so the next expiry refresh can still skip unchanged tiles (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3309">#3309</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Fix <code>project()</code> and <code>queryTerrainElevation</code>
disagreeing with the rendered terrain surface when the elevation lookup
sampled a different DEM zoom than the drawn mesh (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8212">#8212</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Draw numbers (e.g. “21” in “반포대로21길”) and short uppercase codes
(e.g. “A1”) upright in vertical line labels instead of rotating them
along the line (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5404">#5404</a>)
(by <a
href="https://github.com/NEKOYASAN"><code>@​NEKOYASAN</code></a>)</li>
<li>Fix the camera jumping at the end of a pan or zoom gesture on
terrain by sampling the center elevation from the rendered terrain
surface (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/7989">#7989</a>,
<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3982">#3982</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
<li>Ensure style state defaults are serialized (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8263">#8263</a>)
(by <a
href="https://github.com/hiddewie"><code>@​hiddewie</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/e1736fd29fdb26a359640ca61a88343bc2604aac"><code>e1736fd</code></a>
Bump js version to 6.7.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8291">#8291</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/2da49917e11ea90e35de3f679f0e5e1bf39d1703"><code>2da4991</code></a>
feat: support <code>font-faces</code> style property (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8237">#8237</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/a71cfb08c1d7eccff2a0349aa2f78aa11e12c410"><code>a71cfb0</code></a>
chore(deps-dev): bump cssnano from 8.0.10 to 9.0.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8289">#8289</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/f9a40a5c4462abafd6823d9b6fc623246f31e787"><code>f9a40a5</code></a>
Fix navigation control at the effective minimum zoom (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8261">#8261</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/1e9194fdbef0331fe3d5651e8f938a872c78dbfd"><code>1e9194f</code></a>
fix: keep a vector tile's etag across reloads (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8276">#8276</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/69562dd01a77910231bd817af06be446f85bdb87"><code>69562dd</code></a>
chore(deps-dev): bump <code>@​types/node</code> from 26.3.0 to 26.4.0
(<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8271">#8271</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/afd30b41ea4ac0f0095ee462d72362e755e6a01e"><code>afd30b4</code></a>
chore(deps-dev): bump sharp from 0.35.3 to 0.35.4 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8269">#8269</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/aff418d178536ab9460bf325d1763fd2a358705a"><code>aff418d</code></a>
chore(deps-dev): bump <code>@​unicode/unicode-17</code>.0.0 from 1.6.17
to 2.0.2 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8284">#8284</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/4013312109ff4c57642a5e0a9f6be96f922c1df1"><code>4013312</code></a>
chore(deps-dev): bump pretty-bytes from 7.1.1 to 7.1.2 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8283">#8283</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/87bd3bac1f0beec8bdd8e2a097e55d1ff6d6e857"><code>87bd3ba</code></a>
chore(deps-dev): bump st from 4.0.4 to 4.0.10 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8281">#8281</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-gl-js/compare/v6.6.0...v6.7.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=maplibre-gl&package-manager=npm_and_yarn&previous-version=6.6.0&new-version=6.7.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:54:30 +00:00
dependabot[bot] 07d02058e8 chore(deps-dev): Bump the react group with 2 updates (#2137)
Bumps the react group with 2 updates:
[@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)
and
[eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh).

Updates `@types/react-dom` from 19.2.5 to 19.2.7
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint-plugin-react-refresh` from 0.5.5 to 0.5.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases">eslint-plugin-react-refresh's
releases</a>.</em></p>
<blockquote>
<h2>v0.5.6</h2>
<ul>
<li>Support re-exporting namespace components (fixes <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/116">#116</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md">eslint-plugin-react-refresh's
changelog</a>.</em></p>
<blockquote>
<h2>0.5.6</h2>
<ul>
<li>Support re-exporting namespace components (fixes <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/116">#116</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/commit/620568ae42267444dfeedba1e325f6d57952df05"><code>620568a</code></a>
Support re-exporting namespace components (fixes <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/116">#116</a>)
[publish]</li>
<li>See full diff in <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.5...v0.5.6">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:53:23 +00:00
dependabot[bot] 858b0b5ac2 chore(deps): Bump @codemirror/state from 6.7.2 to 6.7.3 (#2144)
Bumps [@codemirror/state](https://github.com/codemirror/state) from
6.7.2 to 6.7.3.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/state/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/state&package-manager=npm_and_yarn&previous-version=6.7.2&new-version=6.7.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:53:08 +00:00
dependabot[bot] 35585bbeef chore(deps-dev): Bump postcss from 8.5.26 to 8.5.28 (#2140)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.26 to
8.5.28.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.28</h2>
<ul>
<li>Fixes types regression.</li>
</ul>
<h2>8.5.27</h2>
<ul>
<li>Fixed removing any comments starting with <code>/*#</code> (by <a
href="https://github.com/dylanpulver"><code>@​dylanpulver</code></a>).</li>
<li>Fixed <code>*</code> hack before a comment in Custom Properties (by
<a href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>).</li>
<li>Fixed empty values in the middle of <code>list.comma()</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
<li>Fixed whitespace-only values in <code>list.space()</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
<li>Fixed rule’s end position on space before semicolon (by <a
href="https://github.com/maximilliangrand"><code>@​maximilliangrand</code></a>).</li>
<li>Fixed types (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed Chinese text in deprecation warning (by <a
href="https://github.com/Jesse205"><code>@​Jesse205</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.28</h2>
<ul>
<li>Fixes types regression.</li>
</ul>
<h2>8.5.27</h2>
<ul>
<li>Fixed removing any comments starting with <code>/*#</code> (by <a
href="https://github.com/dylanpulver"><code>@​dylanpulver</code></a>).</li>
<li>Fixed <code>*</code> hack before a comment in Custom Properties (by
<a href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>).</li>
<li>Fixed empty values in the middle of <code>list.comma()</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
<li>Fixed whitespace-only values in <code>list.space()</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
<li>Fixed rule’s end position on space before semicolon (by <a
href="https://github.com/maximilliangrand"><code>@​maximilliangrand</code></a>).</li>
<li>Fixed types (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed Chinese text in deprecation warning (by <a
href="https://github.com/Jesse205"><code>@​Jesse205</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/e544bffc4f4b3966d8ec69c41744b3ed65afc64a"><code>e544bff</code></a>
Release 8.5.28 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/f8fc2525717a6a7216659f7be43c525f60c6a15a"><code>f8fc252</code></a>
Typo</li>
<li><a
href="https://github.com/postcss/postcss/commit/5039fd78962d285abea5d7b3aebef32f053781ce"><code>5039fd7</code></a>
Add missed release notes</li>
<li><a
href="https://github.com/postcss/postcss/commit/ae40ca499cf6a9afdbb264c0ec09e71fe934e2af"><code>ae40ca4</code></a>
Release 8.5.27 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/62b1626bb7fbb28eda616d002cbd525d239b18ba"><code>62b1626</code></a>
Fix linter</li>
<li><a
href="https://github.com/postcss/postcss/commit/1dba9384515a2dbc64517697c2f738b6d5c3f9a4"><code>1dba938</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/3e82edc9f037faa41647342dceceba9b841f9881"><code>3e82edc</code></a>
Keep non-annotation comments when the processor has no plugins (<a
href="https://redirect.github.com/postcss/postcss/issues/2150">#2150</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/6d23bc362203118478bc8051b81f2910907ebe6e"><code>6d23bc3</code></a>
Fix link</li>
<li><a
href="https://github.com/postcss/postcss/commit/508e9976be81536292e7666741e1c35e876b9a6a"><code>508e997</code></a>
Add GitHub Sponsors link</li>
<li><a
href="https://github.com/postcss/postcss/commit/e993739dc49b6055f7dfc59b161d75702f0b2b8b"><code>e993739</code></a>
Add CodeRabbit sponsor (<a
href="https://redirect.github.com/postcss/postcss/issues/2145">#2145</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/postcss/postcss/compare/8.5.26...8.5.28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.26&new-version=8.5.28)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 13:51:22 +00:00
Jamal Ali c0f76dfff8 fix(layer-list): title visibility button with the action it performs (#2135)
- Fixes #1675

## Problem

In the layer list, the show/hide button's `title` tooltip named the
layer's
current visibility instead of what a click does. A visible layer's
button read
`show` while clicking it hides the layer, and a hidden layer's button
read
`hide` while clicking it shows the layer — exactly reversed.

`LayerListItem.tsx` derived a single value from the layer state:

```ts
const visibilityAction = visibility === "visible" ? "show" : "hide";
```

and passed it to `IconAction` as `action`, which `IconAction` used for
three
different things: choosing the icon, building the `--show`/`--hide` CSS
modifier, and rendering `title={this.props.action}`. The first two are
correct
as a state indicator; only the tooltip needs the opposite verb.

## Change

- `IconAction` gets an optional `title` prop and falls back to `action`
when it
  is not given, so the delete and duplicate buttons are unchanged.
- `LayerListItem` keeps `visibilityAction` (icon +
`maputnik-layer-list-icon-action__visibility--hide`
CSS modifier, which `_layer.scss` relies on to keep the button visible
for
  hidden layers) and adds `visibilityTitle` for the inverted tooltip.

No icon, class name or click behaviour changes.

## Test

New regression test in `e2e/layers-list.spec.ts`: it asserts the button
is
titled `hide` while the layer is visible, clicks it, and asserts it is
titled
`show` once the layer is hidden. Against the unpatched component the
first
assertion fails with `Expected: "hide"` / `Received: "show"`,
reproducing the
reported behaviour.

`npm run lint`, `npx tsc --noEmit`, `npx vitest run` (50 tests) and
`npx playwright test e2e/layers-list.spec.ts` (28 tests) all pass.

## Note

The tooltips in this component (`delete`, `duplicate`, `show`, `hide`)
are
plain English literals and are not run through `t()` today, so this
change
keeps them as-is rather than introducing translation keys for one
button. Also
worth flagging separately: these buttons carry `aria-hidden="true"`, so
the
`title` never reaches assistive technology at all — out of scope here,
but it
means the label is a mouse-hover tooltip only.
2026-09-06 00:12:24 +03:00
Jamal Ali 64b4e5a67c feat(i18n): add Azerbaijani language support and translations (#2134)
## Launch Checklist

- [x] Adds Azerbaijani (`az`) as a supported UI language, following the
same pattern as the existing Turkish (`tr`) locale.
- [x] `src/locales/az/translation.json` — full translation, 202 keys
(matches `tr`/`de` key set exactly).
- [x] Registered `az` in `i18next.config.ts` (`locales` array) and
`src/i18n.ts` (`supportedLanguages`), alphabetically ordered.
- [x] Added `az` row to the `src/locales/README.md` contributors table.
- [ ] Link to related issues.
- [ ] Include before/after visuals or gifs if this PR includes visual
changes. (N/A — translation-only change, no UI layout changes.)
- [ ] Write tests for all new functionality. (N/A — no new
functionality, translation strings only.)
- [ ] Add an entry to `CHANGELOG.md` under the `## main` section. (Not
done — the prior Turkish locale PR (#1886) did not add a CHANGELOG entry
either, so following existing precedent.)

Terminology used consistently throughout: Layer → Qat, Style → Üslub,
Source → Mənbə, Zoom → Yaxınlaşma, Filter → Süzgəc.
2026-09-05 19:23:39 +03:00
John Carmack fce879bfaa ci: cancel superseded pull request runs (#2132) 2026-09-04 23:19:04 +02:00
John Carmack 01bd751d5f ci: keep the CodeQL actions on one version (#2133)
CodeQL has been failing on main since #2105: `init` is on v4.37.9 while
`autobuild` and `analyze` are on v4.37.8, and the action rejects a
config written by a newer version ("Loaded a configuration file for
version '4.37.9', but running version '4.37.8'"). Dependabot bumps the
three steps in separate pull requests, so #2119 and #2120 each still
fail on their own and main has gone red at every partial bump (08-19,
08-28, today).

This moves the two steps to v4.37.9, the same commit dependabot picked
in #2119 and #2120, and groups `github/codeql-action*` in dependabot so
the three bump together from now on. Supersedes #2119 and #2120.

## Launch Checklist

 - [x] Briefly describe the changes in this PR.
- [ ] Add an entry to `CHANGELOG.md` under the `## main` section (not
applicable, CI only).
2026-09-04 23:55:48 +03:00
Robert Orthofer d1ddd91172 fix openlayers naming (#2115)
## Launch Checklist

Small naming change from "Open Layers" to "OpenLayers". Because of the
unwanted space, the translations, while quite amusing, have been
incorrect and misleading.

<!-- Thanks for the PR! Feel free to add or remove items from the
checklist. -->


 - [x] Briefly describe the changes in this PR.
 - [ ] Link to related issues.
- [ ] Include before/after visuals or gifs if this PR includes visual
changes.
 - [ ] Write tests for all new functionality.
 - [ ] Add an entry to `CHANGELOG.md` under the `## main` section.

Co-authored-by: Harel M <harel.mazor@gmail.com>
2026-09-04 19:08:13 +00:00
dependabot[bot] 18e2d00bdc chore(deps-dev): Bump i18next-cli from 1.71.3 to 1.72.1 (#2129)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.71.3
to 1.72.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.72.1</h2>
<ul>
<li>fix: the interactive <code>instrument</code> prompt crashed because
it still used inquirer's <code>list</code> prompt
type, which was removed in inquirer 13; switched to <code>select</code>
(<a
href="https://redirect.github.com/i18next/i18next-cli/pull/288">#288</a>).</li>
</ul>
<h2>1.72.0</h2>
<ul>
<li>feat: <code>locize-sync --changed-only [--base &lt;ref&gt;]</code>
syncs and AI-auto-translates only the keys
that changed on the current git branch vs. the base branch — ideal for
translating just a pull
request's diff instead of the whole project. The source-language files
are diffed against the
merge-base with the base branch (auto-detected via
<code>origin/HEAD</code>, <code>main</code>, <code>master</code>, or set
with
<code>--base</code>); key creation, value updates and auto-translation
are restricted to those keys, and
deletions are skipped. Changed keys are scoped per namespace file, and
when any plural variant
of a key changed, all its plural forms are included (target languages
often need more CLDR
plural forms than the source). Also configurable via
<code>locize.changedOnly</code> /
<code>locize.changedOnlyBase</code>. Requires git and locize-cli &gt;=
12.7.</li>
<li>feat: <code>sync --changed-only [--base &lt;ref&gt;]</code> applies
the same branch-diff scoping to the local
synchronizer: only primary-language keys added or modified on the branch
are propagated to the
secondary language files, and obsolete keys are left in place. Works
with JSON, JSON5 and YAML
translation files (JS/TS resource modules cannot be parsed from git
history and fail with a
clear message). Unusable git setups (git missing, not a repository,
unresolvable base ref) fail
the command with actionable errors that mention
<code>actions/checkout</code> <code>fetch-depth: 0</code> for shallow
CI clones.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/83c5cd365ec87f0750e9347f1bb6d3fb47c3cd7c"><code>83c5cd3</code></a>
1.72.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/13a73a9a7ea374688fa2225f51a0d54fa3f1debd"><code>13a73a9</code></a>
docs: changelog for 1.72.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/c5811e55c4865bf7e89cdbf829d5ea5620743e21"><code>c5811e5</code></a>
fix: change prompt type from 'list' to 'select' in runInstrumenter
function (...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/4d5853a1728c6a226cb298b591e32505787e4a6d"><code>4d5853a</code></a>
1.72.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/9d9ee5313a75727d889c17d2e93b8aa99e539381"><code>9d9ee53</code></a>
feat: --changed-only on sync and locize-sync scopes syncing to the git
branch...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/d89dfd1462a255d833577a632eef9e6194b53e57"><code>d89dfd1</code></a>
Pre-approve npx i18next-cli in the skill's allowed-tools</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.71.3...v1.72.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.71.3&new-version=1.72.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:36:36 +00:00
dependabot[bot] d4a090722d chore(deps-dev): Bump typescript-eslint from 8.68.0 to 8.69.0 (#2131)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.68.0 to 8.69.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.69.0</h2>
<h2>8.69.0 (2026-08-31)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] add flagUnions
option for checkConditionals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12603">#12603</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-mixed-enums] use scope analysis
instead of type checking for merged namespaces (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12731">#12731</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] compare type
parameters by constraint instead of name (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12741">#12741</a>)</li>
<li><strong>eslint-plugin:</strong> [no-meaningless-void-operator]
report void on non-call expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12727">#12727</a>)</li>
<li><strong>website:</strong> respect allowJs playground config (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12744">#12744</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abdu Alim Arlikhozhaev <a
href="https://github.com/Arlikhozhaev"><code>@​Arlikhozhaev</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg </li>
<li>wonbeanie <a
href="https://github.com/wonbeanie"><code>@​wonbeanie</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.69.0 (2026-08-31)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/9a6e546823e5d8f2dc015df2aa66c0230615e209"><code>9a6e546</code></a>
chore(release): publish 8.69.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.68.0&new-version=8.69.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:35:07 +00:00
dependabot[bot] 36967426d8 chore(deps): Bump i18next from 26.4.0 to 26.4.1 (#2127)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [i18next](https://github.com/i18next/i18next) from 26.4.0 to
26.4.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/releases">i18next's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.1</h2>
<ul>
<li>fix(types): the selector-form <code>keyPrefix</code> overload of
<code>getFixedT()</code> is now available under <code>enableSelector:
'strict'</code>. Its constraint was gated on <code>true |
'optimize'</code> only, so under <code>'strict'</code> it collapsed to
<code>never</code>, the overload dropped out, and the returned
<code>t</code> silently lost its <code>keyPrefix</code> scope
(<code>t(($) =&gt; $.deep)</code> failed with <code>Property 'deep' does
not exist on type '{}'</code>). The same call already typechecked under
<code>true</code> and <code>'optimize'</code>. Thanks <a
href="https://github.com/hovelopin"><code>@​hovelopin</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2446">#2446</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/blob/master/CHANGELOG.md">i18next's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.1</h2>
<ul>
<li>fix(types): the selector-form <code>keyPrefix</code> overload of
<code>getFixedT()</code> is now available under <code>enableSelector:
'strict'</code>. Its constraint was gated on <code>true |
'optimize'</code> only, so under <code>'strict'</code> it collapsed to
<code>never</code>, the overload dropped out, and the returned
<code>t</code> silently lost its <code>keyPrefix</code> scope
(<code>t(($) =&gt; $.deep)</code> failed with <code>Property 'deep' does
not exist on type '{}'</code>). The same call already typechecked under
<code>true</code> and <code>'optimize'</code>. Thanks <a
href="https://github.com/hovelopin"><code>@​hovelopin</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2446">#2446</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next/commit/c057ee048c55a61c095acc017365e997e4f723f8"><code>c057ee0</code></a>
26.4.1</li>
<li><a
href="https://github.com/i18next/i18next/commit/02e3e1659b7cc9fedaaf53797597483ef8003df2"><code>02e3e16</code></a>
changelog v26.4.1</li>
<li><a
href="https://github.com/i18next/i18next/commit/6f198f2508ba8986d1bbf25a8b922d01afcf0751"><code>6f198f2</code></a>
fix(types): allow selector keyPrefix in getFixedT under enableSelector
'stric...</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next/compare/v26.4.0...v26.4.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next&package-manager=npm_and_yarn&previous-version=26.4.0&new-version=26.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:34:38 +00:00
dependabot[bot] 57e5a446a0 chore(deps): Bump @codemirror/view from 6.43.9 to 6.43.10 (#2130)
Bumps [@codemirror/view](https://github.com/codemirror/view) from 6.43.9
to 6.43.10.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/view/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/view&package-manager=npm_and_yarn&previous-version=6.43.9&new-version=6.43.10)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:33:44 +00:00
dependabot[bot] 9ac26b6fc9 chore(deps): Bump react-i18next from 17.0.12 to 17.0.13 in the react group (#2126)
Bumps the react group with 1 update:
[react-i18next](https://github.com/i18next/react-i18next).

Updates `react-i18next` from 17.0.12 to 17.0.13
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md">react-i18next's
changelog</a>.</em></p>
<blockquote>
<h2>17.0.13</h2>
<ul>
<li>fix(types): the selector-form <code>keyPrefix</code> overload of
<code>useTranslation()</code> is now available under
<code>enableSelector: 'strict'</code>. <code>useTranslation</code> was
gated on <code>true | 'optimize'</code> only, so under
<code>'strict'</code> it resolved to the legacy signature and the
selector overload disappeared entirely (<code>keyPrefix: ($) =&gt;
$.ns.foo</code> failed with <code>Type '($: any) =&gt; any' is not
assignable to type 'undefined'</code>). <code>Trans</code> already
handled all three modes. Companion to the same fix for
<code>getFixedT</code> in <a
href="https://redirect.github.com/i18next/i18next/pull/2446">i18next#2446</a>.
Thanks <a
href="https://github.com/hovelopin"><code>@​hovelopin</code></a> (<a
href="https://redirect.github.com/i18next/react-i18next/pull/1930">#1930</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/react-i18next/commit/addf646a37f5980af08814b5a2568def28e7e428"><code>addf646</code></a>
17.0.13</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/7c634ee3f396af22ec7b5c3c647b8d5ab198b5ae"><code>7c634ee</code></a>
changelog v17.0.13</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/5ceefb0eff8bb430c658b21e5a08b457e78d87df"><code>5ceefb0</code></a>
fix(types): allow selector keyPrefix in useTranslation under
enableSelector '...</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/aa7ba520255753c50d7fff9ab33ce0c7a60a45a2"><code>aa7ba52</code></a>
chore(examples): require activesupport &gt;= 7.2.3.1 in the RN
Gemfiles</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/ec0bb4e0a09eba34b40c7b81ac8c04b1a2a2807a"><code>ec0bb4e</code></a>
chore(examples): drop react_native_windows and the RN Gemfile.locks</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/aa5fc43ad7964adb13404d15824d97253517a388"><code>aa5fc43</code></a>
build</li>
<li>See full diff in <a
href="https://github.com/i18next/react-i18next/compare/v17.0.12...v17.0.13">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=react-i18next&package-manager=npm_and_yarn&previous-version=17.0.12&new-version=17.0.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:33:27 +00:00
dependabot[bot] f8022d9b95 chore(deps): Bump @codemirror/state from 6.7.1 to 6.7.2 (#2128)
Bumps [@codemirror/state](https://github.com/codemirror/state) from
6.7.1 to 6.7.2.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/state/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/state&package-manager=npm_and_yarn&previous-version=6.7.1&new-version=6.7.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-04 15:33:00 +00:00
dependabot[bot] 981e075e7c chore(deps): Bump fflate from 0.8.2 to 0.8.3 (#2125)
Bumps [fflate](https://github.com/101arrowz/fflate) from 0.8.2 to 0.8.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/101arrowz/fflate/releases">fflate's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.3</h2>
<ul>
<li>Fix buffer over-read for Zip64 extra fields</li>
<li>Support sync flushes (<code>Z_SYNC_FLUSH</code> in zlib)
<ul>
<li>Allows for immediate decompression of all pushed bytes</li>
<li>Enables DEFLATE stream concatenation</li>
</ul>
</li>
<li>Fix <code>zip</code>/<code>zipSync</code> when using cross-realm
<code>Uint8Array</code></li>
<li>Improve Zip64 support for streamed or undersized archives</li>
<li>Update performance estimates in README</li>
<li>Fix typings for TypeScript v5.7+</li>
<li>Reduce memory consumption after compression stream completion</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/101arrowz/fflate/blob/master/CHANGELOG.md">fflate's
changelog</a>.</em></p>
<blockquote>
<h2>0.8.3</h2>
<ul>
<li>Fix buffer over-read for Zip64 extra fields</li>
<li>Support sync flushes (<code>Z_SYNC_FLUSH</code> in zlib)
<ul>
<li>Allows for immediate decompression of all pushed bytes</li>
<li>Enables DEFLATE stream concatenation</li>
</ul>
</li>
<li>Fix <code>zip</code>/<code>zipSync</code> when using cross-realm
<code>Uint8Array</code></li>
<li>Improve Zip64 support for streamed or undersized archives</li>
<li>Update performance estimates in README</li>
<li>Fix typings for TypeScript v5.7+</li>
<li>Reduce memory consumption after compression stream completion</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/101arrowz/fflate/commit/dcb3714a6c25db3a2748641019c5277413d09714"><code>dcb3714</code></a>
0.8.3</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/31acfb8d282ae3a8bf5b81841aaf5f547c2c455c"><code>31acfb8</code></a>
prepare for v0.8.3</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/7b71e3ce08f856dc3ce2b40884ffc4c0bb210f8a"><code>7b71e3c</code></a>
update dependencies</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/44ff62dd96f7dca9afa8a0b02ef4868d5ac3eae4"><code>44ff62d</code></a>
fix zip64 header parsing</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/7235df5d89a02ae0a6d32c86785427ff41108b34"><code>7235df5</code></a>
Fix TypeScript issues (<a
href="https://redirect.github.com/101arrowz/fflate/issues/242">#242</a>)</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/a44eda041adf490cd060129f96bc9a7bcbfcc602"><code>a44eda0</code></a>
release compression buffers after stream end (<a
href="https://redirect.github.com/101arrowz/fflate/issues/213">#213</a>)</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/d94deb6b8a8718b3a337f8eee9f95d575822b014"><code>d94deb6</code></a>
allow cross-realm Uint8Array for zip/zipSync (<a
href="https://redirect.github.com/101arrowz/fflate/issues/234">#234</a>)</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/2e1fb75b19f8555a33c8f1ab636a2de42e22a0ff"><code>2e1fb75</code></a>
export package.json (<a
href="https://redirect.github.com/101arrowz/fflate/issues/244">#244</a>)</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/0f430b492b57703128d50353e798f5033014cc80"><code>0f430b4</code></a>
support sync flushes for compression streams (<a
href="https://redirect.github.com/101arrowz/fflate/issues/222">#222</a>)</li>
<li><a
href="https://github.com/101arrowz/fflate/commit/4b7a6cbf7658271f0554521f53c0aad771cc7d14"><code>4b7a6cb</code></a>
skip transferring pooled Node buffers (<a
href="https://redirect.github.com/101arrowz/fflate/issues/227">#227</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/101arrowz/fflate/compare/v0.8.2...v0.8.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fflate&package-manager=npm_and_yarn&previous-version=0.8.2&new-version=0.8.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-03 19:51:26 +00:00
dependabot[bot] e5cf62f3b5 chore(deps): Bump fast-uri from 3.1.5 to 3.1.7 (#2124)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to
3.1.7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastify/fast-uri/releases">fast-uri's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.7</h2>
<h2>⚠️ Security Warning</h2>
<p>This is a security release that fixes the following high-severity
security advisories:</p>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-qw65-cvwx-89v3">GHSA-qw65-cvwx-89v3</a>
— authority injection via an unvalidated port in
<code>serialize()</code></li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-58mr-gqgx-xq4g">GHSA-58mr-gqgx-xq4g</a>
— host confusion via unbalanced or misplaced IP-literal brackets</li>
</ul>
<p>Users of the v3.x release line should upgrade to v3.1.7.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7">https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7</a></p>
<h2>v3.1.6</h2>
<h2>⚠️ Security Warning</h2>
<p>This release addresses the following high-severity security
advisories:</p>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-5jgf-p345-68v8">GHSA-5jgf-p345-68v8</a>
— host confusion via skipped IDN canonicalization on scheme-relative
references</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-fph4-wmhf-6fwf">GHSA-fph4-wmhf-6fwf</a>
— server-side request forgery via repeated hostname
percent-decoding</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-f65p-4m7j-42xc">GHSA-f65p-4m7j-42xc</a>
— server-side request forgery via malformed IPv6 normalization</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-jqff-g426-hqxp">GHSA-jqff-g426-hqxp</a>
— host confusion via percent-encoded scheme normalization</li>
</ul>
<p>Users of the v3.x release line should upgrade to v3.1.6.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6">https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/commit/412e40abd4eb8beabfb952d80abf949a2baf27a3"><code>412e40a</code></a>
Bumped v3.1.7</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/9f4c943e4d2133e8d78e0941203879216255bb01"><code>9f4c943</code></a>
fix: backport port and IP-literal validation to v3.x (<a
href="https://redirect.github.com/fastify/fast-uri/issues/216">#216</a>)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/1eb3ce436fe050807caba79f886ab894f485a588"><code>1eb3ce4</code></a>
fix: treat unterminated bracket hosts as reg-names again (<a
href="https://redirect.github.com/fastify/fast-uri/issues/214">#214</a>)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/6f970b2951fd896aa0f3a7ff28eeb6640c137d33"><code>6f970b2</code></a>
Bumped v3.1.6</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/d941579a84273ec7e96bde596b1f7a8be447df2a"><code>d941579</code></a>
fix: never run IDN canonicalization on bracketed IP literals</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/c0f0279cf370cb89ee56b04bbcde2a7afbe81aba"><code>c0f0279</code></a>
test: adapt decoded-scheme handler assertion to 3.x (no mailto
scheme)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/37f3417c82994279656854f83ce938acd81c3862"><code>37f3417</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/607bfbe953f28a14c2e06ae64aff38c81ca2937f"><code>607bfbe</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/ae92a4c5d8c4b6c9e447f048d5fcbde7eebd5514"><code>ae92a4c</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/444ecdad447db2cc23c4d422acc6f0daa6fa8eef"><code>444ecda</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fast-uri&package-manager=npm_and_yarn&previous-version=3.1.5&new-version=3.1.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-02 23:48:10 +00:00
dependabot[bot] 380251c170 chore(deps-dev): Bump @humanfs/node from 0.16.7 to 0.16.8 (#2123)
Bumps
[@humanfs/node](https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node)
from 0.16.7 to 0.16.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/humanwhocodes/humanfs/releases">@​humanfs/node's
releases</a>.</em></p>
<blockquote>
<h2>node: v0.16.8</h2>
<h2><a
href="https://github.com/humanwhocodes/humanfs/compare/node-v0.16.7...node-v0.16.8">0.16.8</a>
(2026-04-17)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Include type dependencies at runtime (<a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138">956ce7a</a>),
closes <a
href="https://redirect.github.com/humanwhocodes/humanfs/issues/145">#145</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​humanfs/core</code> bumped from ^0.19.1 to ^0.19.2</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/humanwhocodes/humanfs/blob/main/packages/node/CHANGELOG.md">@​humanfs/node's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/humanwhocodes/humanfs/compare/node-v0.16.7...node-v0.16.8">0.16.8</a>
(2026-04-17)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Ensure symlinks are copied as symlinks in <code>copy()</code> and
<code>copyAll()</code> (<a
href="https://github.com/humanwhocodes/humanfs/commit/22bbaa4487a3e6c1197ca619840de4615d0c3404">22bbaa44</a>)</li>
<li>Include type dependencies at runtime (<a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138">956ce7a</a>),
closes <a
href="https://redirect.github.com/humanwhocodes/humanfs/issues/145">#145</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​humanfs/core</code> bumped from ^0.19.1 to ^0.19.2</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/e96070e897f017ae8abd2b0676d98d14e49665cc"><code>e96070e</code></a>
chore: release main (<a
href="https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node/issues/146">#146</a>)</li>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/22bbaa4487a3e6c1197ca619840de4615d0c3404"><code>22bbaa4</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138"><code>956ce7a</code></a>
fix: Include type dependencies at runtime</li>
<li>See full diff in <a
href="https://github.com/humanwhocodes/humanfs/commits/node-v0.16.8/packages/node">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@humanfs/node&package-manager=npm_and_yarn&previous-version=0.16.7&new-version=0.16.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-02 15:46:49 +00:00
dependabot[bot] 97e6c8cfff chore(deps-dev): Bump browserslist from 4.28.1 to 4.28.8 (#2122)
Bumps [browserslist](https://github.com/browserslist/browserslist) from
4.28.1 to 4.28.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/browserslist/browserslist/releases">browserslist's
releases</a>.</em></p>
<blockquote>
<h2>4.28.8</h2>
<ul>
<li>Fixed <code>including kaios</code> in baseline queries (by <a
href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>).</li>
</ul>
<h2>4.28.7</h2>
<ul>
<li>Improved parsing performance.</li>
<li>Fixed unbounded memory growth (by <a
href="https://github.com/alanturing881"><code>@​alanturing881</code></a>).</li>
<li>Fixed prototype write issue (by <a
href="https://github.com/alanturing881"><code>@​alanturing881</code></a>).</li>
</ul>
<h2>4.28.6</h2>
<ul>
<li>Fixed Electron version queries (by <a
href="https://github.com/spokodev"><code>@​spokodev</code></a>).</li>
</ul>
<h2>4.28.5</h2>
<ul>
<li>Fixed <code>&gt;</code> and <code>&gt;=</code> queries (by <a
href="https://github.com/spokodev"><code>@​spokodev</code></a>).</li>
</ul>
<h2>4.28.4</h2>
<ul>
<li>Fixed <code>SyntaxError</code> regression of 4.28.3.</li>
</ul>
<h2>4.28.3</h2>
<ul>
<li>Fixed baseline query case-insensitivity (by <a
href="https://github.com/swwind"><code>@​swwind</code></a>).</li>
</ul>
<h2>4.28.2</h2>
<ul>
<li>Fix prototype pollution (by <a
href="https://github.com/chluo1997"><code>@​chluo1997</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md">browserslist's
changelog</a>.</em></p>
<blockquote>
<h2>4.28.8</h2>
<ul>
<li>Fixed <code>including kaios</code> in baseline queries (by <a
href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>).</li>
</ul>
<h2>4.28.7</h2>
<ul>
<li>Improved parsing performance.</li>
<li>Fixed unbounded memory growth (by <a
href="https://github.com/alanturing881"><code>@​alanturing881</code></a>).</li>
<li>Fixed prototype write issue (by <a
href="https://github.com/alanturing881"><code>@​alanturing881</code></a>).</li>
</ul>
<h2>4.28.6</h2>
<ul>
<li>Fixed Electron version queries (by <a
href="https://github.com/spokodev"><code>@​spokodev</code></a>).</li>
</ul>
<h2>4.28.5</h2>
<ul>
<li>Fixed <code>&gt;</code> and <code>&gt;=</code> queries (by <a
href="https://github.com/spokodev"><code>@​spokodev</code></a>).</li>
</ul>
<h2>4.28.4</h2>
<ul>
<li>Fixed <code>SyntaxError</code> regression of 4.28.3.</li>
</ul>
<h2>4.28.3</h2>
<ul>
<li>Fixed baseline query case-insensitivity (by <a
href="https://github.com/swwind"><code>@​swwind</code></a>).</li>
</ul>
<h2>4.28.2</h2>
<ul>
<li>Fix prototype pollution (by <a
href="https://github.com/chluo1997"><code>@​chluo1997</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/browserslist/browserslist/commit/f2f2e6cfb01bb4942941d328737546f4e2ae41ad"><code>f2f2e6c</code></a>
Release 4.28.8 version</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/d0787c88fa29ba895fea51cfe921232c7b5d1377"><code>d0787c8</code></a>
Update dependencies</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/fcf8fa9857b30ccdf801a548f5d09d3c4ff0d43f"><code>fcf8fa9</code></a>
Merge pull request <a
href="https://redirect.github.com/browserslist/browserslist/issues/939">#939</a>
from Jaybhade/fix/baseline-kaios-without-downstream</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/57ecd64454e9252afdd6a7e76926e13dda48a38c"><code>57ecd64</code></a>
fix: support &quot;including kaios&quot; without downstream</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/093a0f67bb0becda55235d767b134df3197c54a1"><code>093a0f6</code></a>
Update EM banner</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/b637868045806d2fba4c24eb0060e4cc8b1db276"><code>b637868</code></a>
Release 4.28.7 version</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/313f4659b9f985ade89d1d6a54a860371c41cc46"><code>313f465</code></a>
Update dependencies</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/c935c5a206f8b13db8846818bc03643e147dcbdf"><code>c935c5a</code></a>
Fix regexp performance</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/d7e9e653cb53399065943f59f0b3063987b0a008"><code>d7e9e65</code></a>
Rewrite structure parsing to make it always fast</li>
<li><a
href="https://github.com/browserslist/browserslist/commit/ec4a55efd76bdfa506ec7ce4fea1691559e9ca8f"><code>ec4a55e</code></a>
Fix import order</li>
<li>Additional commits viewable in <a
href="https://github.com/browserslist/browserslist/compare/4.28.1...4.28.8">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new
releaser for browserslist since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=browserslist&package-manager=npm_and_yarn&previous-version=4.28.1&new-version=4.28.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-02 15:42:50 +00:00
dependabot[bot] 3543f0e372 chore(deps): Bump qs from 6.14.2 to 6.16.0 (#2121)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.2 to 6.16.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/qs/blob/main/CHANGELOG.md">qs's
changelog</a>.</em></p>
<blockquote>
<h2><strong>6.16.0</strong></h2>
<ul>
<li>[New] <code>stringify</code>: add a <code>depth</code> option to
bound recursion depth (default <code>Infinity</code>)</li>
<li>[Fix] stringify: serialize Date values when a filter is
provided</li>
<li>[Fix] <code>parse</code>: enforce <code>arrayLimit</code> on comma
groups under <code>[]=</code> when <code>throwOnLimitExceeded</code> is
set</li>
<li>[Fix] <code>parse</code>: flatten a collection appended to an
overflowed array (<a
href="https://redirect.github.com/ljharb/qs/issues/571">#571</a>)</li>
<li>[Fix] <code>utils</code>: <code>isBuffer</code>: do not invoke a
non-callable <code>constructor.isBuffer</code></li>
<li>[Fix] <code>stringify</code>: do not let
<code>allowEmptyArrays</code> skip cycle detection (or drop own keys) on
an empty array with own properties</li>
<li>[Fix] <code>stringify</code>: encode dots in a top-level key with a
primitive value when encodeDotInKeys is set (<a
href="https://redirect.github.com/ljharb/qs/issues/562">#562</a>)</li>
<li>[Docs] threat model: clarify <code>stringify</code> deep-nesting DoS
is caller-bounded</li>
<li>[Docs] clarify <code>arrayLimit</code> is a representation
threshold, not an element-count cap</li>
<li>[Tests] <code>parse</code>: remove a test that pinned
<code>[]=</code> comma groups escaping <code>arrayLimit</code></li>
<li>[Tests] <code>stringify</code>: pin current
<code>encodeDotInKeys</code> separator-dot behavior</li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>eslint</code></li>
<li>[Dev Deps] update <code>eslint</code>, <code>evalmd</code></li>
</ul>
<h2><strong>6.15.3</strong></h2>
<ul>
<li>[Fix] <code>parse</code>: enforce <code>throwOnLimitExceeded</code>
for cumulative array growth via
<code>combine</code>/<code>merge</code></li>
<li>[Fix] <code>utils</code>: respect encoding of surrogate pairs across
chunks (<a
href="https://redirect.github.com/ljharb/qs/issues/559">#559</a>)</li>
<li>[Robustness] <code>parse</code>: throw the <code>arrayLimit</code>
error before splitting oversized comma values</li>
<li>[Robustness] <code>utils.merge</code> / <code>utils.assign</code>:
avoid invoking <code>__proto__</code> setter when copying own
properties</li>
<li>[Robustness] <code>utils</code>: enforce <code>arrayLimit</code>
consistently across <code>merge</code>'s array paths</li>
<li>[Perf] <code>utils</code>: make <code>compact</code> O(n) via a
side-channel visited-set instead of <code>Array.indexOf</code></li>
<li>[Deps] update <code>side-channel</code></li>
<li>[Dev Deps] update <code>eslint</code>, <code>mock-property</code>,
<code>tape</code></li>
<li>[Tests] <code>parse</code>: characterize current lenient handling of
unbalanced bracket keys (<a
href="https://redirect.github.com/ljharb/qs/issues/558">#558</a>)</li>
</ul>
<h2><strong>6.15.2</strong></h2>
<ul>
<li>[Fix] <code>stringify</code>: skip null/undefined entries in
<code>arrayFormat: 'comma'</code> + <code>encodeValuesOnly</code>
instead of crashing in <code>encoder</code></li>
<li>[Fix] <code>stringify</code>: use configured <code>delimiter</code>
after <code>charsetSentinel</code> (<a
href="https://redirect.github.com/ljharb/qs/issues/555">#555</a>)</li>
<li>[Fix] <code>stringify</code>: apply <code>formatter</code> to
encoded key under <code>strictNullHandling</code> (<a
href="https://redirect.github.com/ljharb/qs/issues/554">#554</a>)</li>
<li>[Fix] <code>stringify</code>: skip null/undefined filter-array
entries instead of crashing in <code>encoder</code> (<a
href="https://redirect.github.com/ljharb/qs/issues/551">#551</a>)</li>
<li>[Fix] <code>parse</code>: handle nested bracket groups and add
regression tests (<a
href="https://redirect.github.com/ljharb/qs/issues/530">#530</a>);
changes output for some unbalanced bracket keys (see <a
href="https://redirect.github.com/ljharb/qs/issues/558">#558</a>)</li>
<li>[readme] fix grammar (<a
href="https://redirect.github.com/ljharb/qs/issues/550">#550</a>)</li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code></li>
<li>[Tests] add regression tests for keys containing percent-encoded
bracket text</li>
</ul>
<h2><strong>6.15.1</strong></h2>
<ul>
<li>[Fix] <code>parse</code>: <code>parameterLimit: Infinity</code> with
<code>throwOnLimitExceeded: true</code> silently drops all
parameters</li>
<li>[Deps] update <code>@ljharb/eslint-config</code></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>iconv-lite</code></li>
<li>[Tests] increase coverage</li>
</ul>
<h2><strong>6.15.0</strong></h2>
<ul>
<li>[New] <code>parse</code>: add <code>strictMerge</code> option to
wrap object/primitive conflicts in an array (<a
href="https://redirect.github.com/ljharb/qs/issues/425">#425</a>, <a
href="https://redirect.github.com/ljharb/qs/issues/122">#122</a>)</li>
<li>[Fix] <code>duplicates</code> option should not apply to bracket
notation keys (<a
href="https://redirect.github.com/ljharb/qs/issues/514">#514</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ljharb/qs/commit/bb9379e01fad04c601478acd6152143cb20c984b"><code>bb9379e</code></a>
v6.16.0</li>
<li><a
href="https://github.com/ljharb/qs/commit/62fd25480b0b0d9c0a667ee67e13608a363f5d0e"><code>62fd254</code></a>
[Fix] stringify: serialize Date values when a filter is provided</li>
<li><a
href="https://github.com/ljharb/qs/commit/8859c37470e11b42b547b275e4e9bd0bc8cc5464"><code>8859c37</code></a>
[Fix] <code>parse</code>: enforce <code>arrayLimit</code> on comma
groups under <code>[]=</code> when `throwOn...</li>
<li><a
href="https://github.com/ljharb/qs/commit/8079adc7e7cf84b8289898d1b18877160de67d40"><code>8079adc</code></a>
[Tests] <code>parse</code>: remove a test that pinned <code>[]=</code>
comma groups escaping `array...</li>
<li><a
href="https://github.com/ljharb/qs/commit/d56f48ca137b1bf6385da749b1044246ae142f19"><code>d56f48c</code></a>
[Fix] <code>parse</code>: flatten a collection appended to an overflowed
array</li>
<li><a
href="https://github.com/ljharb/qs/commit/e83d321ffafb38cf210683ac31714fce6ce1c6c6"><code>e83d321</code></a>
[Fix] <code>utils</code>: <code>isBuffer</code>: do not invoke a
non-callable <code>constructor.isBuffer</code></li>
<li><a
href="https://github.com/ljharb/qs/commit/7e87a07c2c62301dd8fc2e099ac38227bc96c74c"><code>7e87a07</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>eslint</code></li>
<li><a
href="https://github.com/ljharb/qs/commit/9a76af21604a4ece315e58ba251b93cf0fd944f2"><code>9a76af2</code></a>
[Dev Deps] update <code>eslint</code>, <code>evalmd</code></li>
<li><a
href="https://github.com/ljharb/qs/commit/3a890d4ecd3deb72a45d90be36f4f8c5970467c7"><code>3a890d4</code></a>
[Dev Deps] update <code>eslint</code>, <code>evalmd</code></li>
<li><a
href="https://github.com/ljharb/qs/commit/b433a9b1633e1c3348aa53c513589a5bfe47f113"><code>b433a9b</code></a>
[Fix] <code>stringify</code>: do not let <code>allowEmptyArrays</code>
skip cycle detection (or dro...</li>
<li>Additional commits viewable in <a
href="https://github.com/ljharb/qs/compare/v6.14.2...v6.16.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=qs&package-manager=npm_and_yarn&previous-version=6.14.2&new-version=6.16.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-02 15:30:49 +00:00
dependabot[bot] e76d948d3e chore(deps-dev): Bump i18next-cli from 1.71.2 to 1.71.3 (#2117)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.71.2
to 1.71.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.71.3</h2>
<ul>
<li>fix: <code>fallbackNS</code> accounting now works when the fallback
namespace lives in its own file
outside a merged output (<code>mergeNamespaces: true</code>), e.g. split
out and hidden via
<code>ignoreNamespaces</code>: <code>status</code> and
<code>extract</code> look up a fallback namespace missing from the
merged file at its per-namespace path, and a function
<code>output</code> resolves the merged file
without a namespace (matching what <code>extract</code> writes), so
hybrid layouts are expressible via
an <code>output</code> function. When a <code>fallbackNS</code> is
listed in <code>ignoreNamespaces</code> but its
translations cannot be found, <code>status</code> now warns instead of
silently reporting the keys as
absent (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/287">#287</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/507f361f988cebbb6ba2e40a0a31425700b492ab"><code>507f361</code></a>
1.71.3</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/53291922a28f870fd0bd6f8391349fc6c1d43131"><code>5329192</code></a>
fix: resolve fallbackNS from a split-out namespace file when hidden via
ignor...</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.71.2...v1.71.3">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-31 14:08:20 +00:00
dependabot[bot] ceb2bb54cd chore(deps): Bump github/codeql-action/init from 4.37.8 to 4.37.9 (#2118)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.8 to 4.37.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.9</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.9 - 26 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li>
</ul>
<h2>4.37.8 - 21 Aug 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/cdf488f595d80d6e07e03d4674febd5ab45fa938"><code>cdf488f</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4107">#4107</a>
from github/update-v4.37.9-920ba7cd1</li>
<li><a
href="https://github.com/github/codeql-action/commit/7243f38558d187dde99730d224bb47aa26a95306"><code>7243f38</code></a>
Update changelog for v4.37.9</li>
<li><a
href="https://github.com/github/codeql-action/commit/920ba7cd1596037e042122c00381eb16b397d68e"><code>920ba7c</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4106">#4106</a>
from github/update-bundle/codeql-bundle-v2.26.4</li>
<li><a
href="https://github.com/github/codeql-action/commit/ecfa6e16817b8f490bc9a59baa391baf4fa3e3c2"><code>ecfa6e1</code></a>
Add changelog note</li>
<li><a
href="https://github.com/github/codeql-action/commit/adcdf4a70d247343cf9c29e0f7a6658b51c3a2b1"><code>adcdf4a</code></a>
Update default bundle to codeql-bundle-v2.26.4</li>
<li><a
href="https://github.com/github/codeql-action/commit/486fec2a3ea2626afcd8c7e9208b4f515078dd7e"><code>486fec2</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4099">#4099</a>
from github/update-supported-enterprise-server-versions</li>
<li><a
href="https://github.com/github/codeql-action/commit/134624c67b20869c2aaa36dafa726375b78a5d76"><code>134624c</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4101">#4101</a>
from github/dependabot/npm_and_yarn/npm-minor-457d82...</li>
<li><a
href="https://github.com/github/codeql-action/commit/ff43db8f982a368288f117354fb8d046e937124c"><code>ff43db8</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4103">#4103</a>
from github/mergeback/v4.37.8-to-main-db488dde</li>
<li><a
href="https://github.com/github/codeql-action/commit/4605e03a74cf891614c4d76f82384a16c1c11816"><code>4605e03</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/099c869cad6bf3b88657154d4ae47ffed27e632d"><code>099c869</code></a>
Update changelog and version after v4.37.8</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.8&new-version=4.37.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-31 13:55:13 +00:00
dependabot[bot] 32ed92b7ec chore(deps-dev): Bump the react group with 2 updates (#2116)
Bumps the react group with 2 updates:
[@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)
and
[eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh).

Updates `@vitejs/plugin-react` from 6.1.0 to 6.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases">@​vitejs/plugin-react's
releases</a>.</em></p>
<blockquote>
<h2>plugin-react@6.1.1</h2>
<h3>Add <code>compiler.logDiagnostics</code> option</h3>
<p>Recoverable React Compiler diagnostics are no longer logged by
default. Set <code>compiler.logDiagnostics</code> to <code>true</code>
to log them through Vite. Fatal diagnostics are always logged and fail
the transform.</p>
<h3>Respect environment sourcemap option for React Compiler transform
when <code>builder.sharedPlugins</code> is enabled (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1439">#1439</a>)</h3>
<p>The React Compiler transform was using the top-level sourcemap option
instead of the environment sourcemap option. This caused a problem when
the experimental <code>builder.sharedPlugins</code> was enabled.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md">@​vitejs/plugin-react's
changelog</a>.</em></p>
<blockquote>
<h2>6.1.1 (2026-08-28)</h2>
<h3>Add <code>compiler.logDiagnostics</code> option</h3>
<p>Recoverable React Compiler diagnostics are no longer logged by
default. Set <code>compiler.logDiagnostics</code> to <code>true</code>
to log them through Vite. Fatal diagnostics are always logged and fail
the transform.</p>
<h3>Respect environment sourcemap option for React Compiler transform
when <code>builder.sharedPlugins</code> is enabled (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1439">#1439</a>)</h3>
<p>The React Compiler transform was using the top-level sourcemap option
instead of the environment sourcemap option. This caused a problem when
the experimental <code>builder.sharedPlugins</code> was enabled.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/04cac5020e349f452d76c5a4f6d788ad4b38930a"><code>04cac50</code></a>
release: plugin-react@6.1.1 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1440">#1440</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/82d35abe4946eddd4e6456802bf2b53444e264f2"><code>82d35ab</code></a>
fix(react): respect environment sourcemap option when
<code>builder.sharedPlugins</code>...</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/397e8471a559f18a16dd21bd797ac01a369dabdc"><code>397e847</code></a>
fix(react): make logging diagnostics an opt-in for React Compiler (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1431">#1431</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/61006e6f52124821c24121a78712f7162ae36f5b"><code>61006e6</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1433">#1433</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/e2a649cbaa7334d6991f843563683975667e1be1"><code>e2a649c</code></a>
chore: use <code>deps.neverBundle</code> instead of
<code>external</code> in tsdown config (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1430">#1430</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/fb2d6f3635acbb0f3acbd0e9a914f6c620460957"><code>fb2d6f3</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1427">#1427</a>)</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.1/packages/plugin-react">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint-plugin-react-refresh` from 0.5.4 to 0.5.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases">eslint-plugin-react-refresh's
releases</a>.</em></p>
<blockquote>
<h2>v0.5.5</h2>
<ul>
<li>Fix SCREAMING_SNAKE_CASE constant exported via <code>export { Name
}</code> incorrectly treated as React component <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/pull/114">#114</a>
(fixes <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/113">#113</a>)</li>
<li>Add <code>contentType</code> and <code>size</code> to
<code>allowExportNames</code> in Next config <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/pull/115">#115</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md">eslint-plugin-react-refresh's
changelog</a>.</em></p>
<blockquote>
<h2>0.5.5</h2>
<ul>
<li>Fix SCREAMING_SNAKE_CASE constant exported via <code>export { Name
}</code> incorrectly treated as React component <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/pull/114">#114</a>
(fixes <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/113">#113</a>)</li>
<li>Add <code>contentType</code> and <code>size</code> to
<code>allowExportNames</code> in Next config <a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/pull/115">#115</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/commit/65c31725fa31cbcf4a037b8f06f4f72783d17006"><code>65c3172</code></a>
[publish] v0.5.5</li>
<li><a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/commit/84110202c8a8277335d43fa08ddc96047db6d04a"><code>8411020</code></a>
Bump deps</li>
<li><a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/commit/c28fa155e8371286ae347164425a513d55938349"><code>c28fa15</code></a>
Fix SCREAMING_SNAKE_CASE constant exported via <code>export { Name
}</code> incorrectly ...</li>
<li><a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/commit/554c764374d9a8875370a0cc2e46bfa8abf9a087"><code>554c764</code></a>
[publish] add <code>contentType</code> and <code>size</code> to
allowExportNames in Next config (<a
href="https://redirect.github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/115">#115</a>)</li>
<li>See full diff in <a
href="https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.4...v0.5.5">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-31 13:54:01 +00:00
dependabot[bot] 5e2d322c5a chore(deps): Bump github/codeql-action/analyze from 4.37.7 to 4.37.8 (#2104)
Bumps
[github/codeql-action/analyze](https://github.com/github/codeql-action)
from 4.37.7 to 4.37.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/analyze's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.8</h2>
<p>No user facing changes.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.8 - 21 Aug 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28"><code>db488dd</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4102">#4102</a>
from github/update-v4.37.8-9ee088e13</li>
<li><a
href="https://github.com/github/codeql-action/commit/1845f5ba8b4057590f49ee8e246c95ef2ba4b53f"><code>1845f5b</code></a>
Update changelog for v4.37.8</li>
<li><a
href="https://github.com/github/codeql-action/commit/9ee088e13615f8d1eaef4766f9dde95d3356a8f6"><code>9ee088e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4080">#4080</a>
from github/henrymercer/studious-giggle</li>
<li><a
href="https://github.com/github/codeql-action/commit/1aef003397c876c0ab5bd118e1b1f34c175622e9"><code>1aef003</code></a>
Address review feedback on overlay disk flags</li>
<li><a
href="https://github.com/github/codeql-action/commit/508b83bc415e8df76ce8ea08c0cf42c2529ebc63"><code>508b83b</code></a>
Merge main into overlay minimum disk feature branch</li>
<li><a
href="https://github.com/github/codeql-action/commit/d97b3428e8eebbb1810cf454d6397886d136b4ba"><code>d97b342</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4098">#4098</a>
from github/mbg/permission-error-as-configuration-error</li>
<li><a
href="https://github.com/github/codeql-action/commit/47fa6222231b12097f83215dd7a6b4a0915841fd"><code>47fa622</code></a>
Make <code>EACCES</code> a <code>ConfigurationError</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/45693cc6882bb175b58a06818c91876e201037c7"><code>45693cc</code></a>
Refactor <code>ENOSPC</code> check into
<code>isDiskConfigurationError</code> function</li>
<li><a
href="https://github.com/github/codeql-action/commit/c2fd8f54d19fa46c94ed79cb92e6dd6606d61762"><code>c2fd8f5</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4081">#4081</a>
from github/mario-campos/version-cache-to-disk</li>
<li><a
href="https://github.com/github/codeql-action/commit/c56f48e9bd458a387eb68a68534459e503e56b17"><code>c56f48e</code></a>
Log unexpected conditions during caching CLI output</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/analyze&package-manager=github_actions&previous-version=4.37.7&new-version=4.37.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 17:43:03 +03:00
dependabot[bot] 936b801000 chore(deps): Bump github/codeql-action/init from 4.37.7 to 4.37.8 (#2105)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.7 to 4.37.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.8</h2>
<p>No user facing changes.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.8 - 21 Aug 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28"><code>db488dd</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4102">#4102</a>
from github/update-v4.37.8-9ee088e13</li>
<li><a
href="https://github.com/github/codeql-action/commit/1845f5ba8b4057590f49ee8e246c95ef2ba4b53f"><code>1845f5b</code></a>
Update changelog for v4.37.8</li>
<li><a
href="https://github.com/github/codeql-action/commit/9ee088e13615f8d1eaef4766f9dde95d3356a8f6"><code>9ee088e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4080">#4080</a>
from github/henrymercer/studious-giggle</li>
<li><a
href="https://github.com/github/codeql-action/commit/1aef003397c876c0ab5bd118e1b1f34c175622e9"><code>1aef003</code></a>
Address review feedback on overlay disk flags</li>
<li><a
href="https://github.com/github/codeql-action/commit/508b83bc415e8df76ce8ea08c0cf42c2529ebc63"><code>508b83b</code></a>
Merge main into overlay minimum disk feature branch</li>
<li><a
href="https://github.com/github/codeql-action/commit/d97b3428e8eebbb1810cf454d6397886d136b4ba"><code>d97b342</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4098">#4098</a>
from github/mbg/permission-error-as-configuration-error</li>
<li><a
href="https://github.com/github/codeql-action/commit/47fa6222231b12097f83215dd7a6b4a0915841fd"><code>47fa622</code></a>
Make <code>EACCES</code> a <code>ConfigurationError</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/45693cc6882bb175b58a06818c91876e201037c7"><code>45693cc</code></a>
Refactor <code>ENOSPC</code> check into
<code>isDiskConfigurationError</code> function</li>
<li><a
href="https://github.com/github/codeql-action/commit/c2fd8f54d19fa46c94ed79cb92e6dd6606d61762"><code>c2fd8f5</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4081">#4081</a>
from github/mario-campos/version-cache-to-disk</li>
<li><a
href="https://github.com/github/codeql-action/commit/c56f48e9bd458a387eb68a68534459e503e56b17"><code>c56f48e</code></a>
Log unexpected conditions during caching CLI output</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.7&new-version=4.37.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 17:42:34 +03:00
dependabot[bot] a4146f6394 chore(deps): Bump ol-mapbox-style from 13.4.2 to 13.4.3 (#2114)
Bumps [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style)
from 13.4.2 to 13.4.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/openlayers/ol-mapbox-style/releases">ol-mapbox-style's
releases</a>.</em></p>
<blockquote>
<h2>v13.4.3</h2>
<h2>Summary</h2>
<ul>
<li>Fixed <code>icon-rotate</code> along lines</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Updates for v14.3.2 by <a
href="https://github.com/ahocevar"><code>@​ahocevar</code></a> in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1494">openlayers/ol-mapbox-style#1494</a></li>
<li>Fix icon-rotate along lines by <a
href="https://github.com/ahocevar"><code>@​ahocevar</code></a> in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1503">openlayers/ol-mapbox-style#1503</a></li>
<li>Upgrades for the latest style spec by <a
href="https://github.com/ahocevar"><code>@​ahocevar</code></a> in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1507">openlayers/ol-mapbox-style#1507</a></li>
<li>Bump globals from 17.6.0 to 17.8.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1495">openlayers/ol-mapbox-style#1495</a></li>
<li>Bump proj4 from 2.20.8 to 2.20.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1496">openlayers/ol-mapbox-style#1496</a></li>
<li>Bump webpack from 5.106.2 to 5.109.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1497">openlayers/ol-mapbox-style#1497</a></li>
<li>Bump sinon from 22.0.0 to 22.1.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1498">openlayers/ol-mapbox-style#1498</a></li>
<li>Bump socket.io-parser from 4.2.6 to 4.2.7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1501">openlayers/ol-mapbox-style#1501</a></li>
<li>Bump fast-uri from 3.1.4 to 3.1.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1502">openlayers/ol-mapbox-style#1502</a></li>
<li>Bump js-yaml from 4.3.0 to 4.3.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1504">openlayers/ol-mapbox-style#1504</a></li>
<li>Bump brace-expansion by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/pull/1506">openlayers/ol-mapbox-style#1506</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/openlayers/ol-mapbox-style/compare/v13.4.2...v13.4.3">https://github.com/openlayers/ol-mapbox-style/compare/v13.4.2...v13.4.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/openlayers/ol-mapbox-style/blob/main/CHANGELOG.md">ol-mapbox-style's
changelog</a>.</em></p>
<blockquote>
<h2>13.4.3</h2>
<ul>
<li>Fixed icon-rotate along lines</li>
</ul>
<h2>13.4.1</h2>
<ul>
<li>Invalidate function/filter cache on remove/addMapboxLayer</li>
</ul>
<h2>13.4.0</h2>
<ul>
<li>New hillshading options</li>
<li>Support for the <code>line-offset</code> paint property</li>
</ul>
<h2>13.3.0</h2>
<ul>
<li>Better match MapLibre's hillshade rendering</li>
<li>Improved support for latest Mapbox style spec additions: data-driven
<code>visibility</code>, data-driven<code>text-font</code> array
entries, <code>config</code> to retrieve defaults from style's
<code>schema</code> root properties, <code>hsl</code>, <code>hsla</code>
and <code>to-hsla</code> expressions</li>
<li>Darkened outlines depending on <code>fill-extrusion-height</code>
for <code>fill-extrusion</code> layers</li>
<li>More robustness against failures due to unsupported features</li>
</ul>
<h2>13.2.1</h2>
<ul>
<li>Prevent redundant font loading requests</li>
<li>Ignore source on background layer</li>
<li>Encourage the use of <code>ol/layer/Group</code> with
<code>apply()</code></li>
</ul>
<h2>13.2.0</h2>
<ul>
<li>Add support for raster-hue-rotate, raster-saturation,
raster-opacity</li>
<li>Fix hillshade colors</li>
</ul>
<h2>13.1.1</h2>
<ul>
<li>Add support for running ol-mapbox-style in web workers</li>
</ul>
<h2>13.1.0</h2>
<ul>
<li>Respect the <code>layerName</code> property of the source format,
instead of using <code>mvt:layer</code></li>
<li><code>updateMapboxLayer</code> now also works with raster
layers</li>
</ul>
<h2>13.0.1</h2>
<ul>
<li>Clear text width measurement cache when new fonts are loaded</li>
</ul>
<h2>13.0.0</h2>
<h3>Backwards incompatible changes</h3>
<ul>
<li>The MVT format parser now assigns the tile's
<code>source-layer</code>s to the <code>mvt:layer</code> property of
each feature. Previously the <code>layer</code> property was used, which
was not ideal because it is frequently used in OpenStreetMap based
tiles. This change may require application code changes where OpenLayers
feature info (<code>Map.getFeaturesAtPixel()</code>,
<code>Map.forEachFeatureAtPixel()</code>,
<code>Layer.getFeatures()</code>) or style function customizations are
used.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/5fc995e4754862f10f55eaf5c133464bdeefab8e"><code>5fc995e</code></a>
Changes for 13.4.3</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/a3c9e12c2c8a69932afb3031f50385493d4369f2"><code>a3c9e12</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1506">#1506</a>
from openlayers/dependabot/npm_and_yarn/multi-e855e3...</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/a8d3f6411bf11fe7dfb1cdba6b0df5597c8be151"><code>a8d3f64</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1504">#1504</a>
from openlayers/dependabot/npm_and_yarn/js-yaml-4.3.1</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/14438003c5b83cd1ddf8d4f34e8d02d99959bba9"><code>1443800</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1502">#1502</a>
from openlayers/dependabot/npm_and_yarn/fast-uri-3.1.5</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/238e9711d64ad9a72d0060d86743bb5640dce396"><code>238e971</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1501">#1501</a>
from openlayers/dependabot/npm_and_yarn/socket.io-pa...</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/9a7f4b6420b05e1cf70eaf2688b5e3fe0dd9b359"><code>9a7f4b6</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1498">#1498</a>
from openlayers/dependabot/npm_and_yarn/sinon-22.1.0</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/23e1458010f74890c1bc87eae517cae145e1a064"><code>23e1458</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1497">#1497</a>
from openlayers/dependabot/npm_and_yarn/webpack-5.109.0</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/f930545bc47c622ebbdf439e540cdd819a92edc9"><code>f930545</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1496">#1496</a>
from openlayers/dependabot/npm_and_yarn/proj4-2.20.9</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/143b7a41b57e751ff1ee64ea977c252cc32409f8"><code>143b7a4</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1495">#1495</a>
from openlayers/dependabot/npm_and_yarn/globals-17.8.0</li>
<li><a
href="https://github.com/openlayers/ol-mapbox-style/commit/562b69f4ff007672db12aa481bc2389db07e8499"><code>562b69f</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/ol-mapbox-style/issues/1507">#1507</a>
from openlayers/style-spec-update</li>
<li>Additional commits viewable in <a
href="https://github.com/openlayers/ol-mapbox-style/compare/v13.4.2...v13.4.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ol-mapbox-style&package-manager=npm_and_yarn&previous-version=13.4.2&new-version=13.4.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 13:54:43 +00:00
dependabot[bot] 6c270c2914 chore(deps-dev): Bump i18next-cli from 1.71.0 to 1.71.2 (#2111)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.71.0
to 1.71.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.71.2</h2>
<ul>
<li>fix: <code>extract</code> no longer scales quadratically with the
number of keys: selector-API /
<code>returnObjects</code> keys are matched via an O(key depth) Set
lookup instead of one regex per
object key, and the per-key leaf check uses a precomputed
ancestor-prefix Set instead of
scanning all keys. A 4-minute run on a ~11,500-key monorepo drops to
seconds; written
output is byte-identical (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/286">#286</a>).</li>
</ul>
<h2>1.71.1</h2>
<ul>
<li>feat: <code>.reduce()</code>/<code>.reduceRight()</code> over an
<code>as const</code> array now bind the element callback
parameter (the second one, <code>(acc, el) =&gt; …</code>) like
<code>.map()</code>/<code>.forEach()</code> already did, so
<code>ERRORS.reduce((acc, n) =&gt; { acc[n] = t(`errors.${n}.title`) },
{})</code> extracts every element
without the <code>(typeof ERRORS)[number]</code> cast workaround
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/285">#285</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/dacfb22a466638fd79dfdda0b2622cb2de01362d"><code>dacfb22</code></a>
1.71.2</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/bfa79b1121b64feab292f268f667003418954fea"><code>bfa79b1</code></a>
fix: make extract scale linearly with key count (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/286">#286</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/a4970f86b7d5425b4a85c19f245d9000bacf86b7"><code>a4970f8</code></a>
1.71.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/e3c5676bd4162ef39a44e4f71075e0e63450dbc4"><code>e3c5676</code></a>
feat: bind the element callback param of .reduce()/.reduceRight() over
as-con...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/e8abf5b02bd9ef740667d0e4f1dd89cdb155530e"><code>e8abf5b</code></a>
chore: update dependencies and bump CI actions to v7</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.71.0...v1.71.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.71.0&new-version=1.71.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 13:54:08 +00:00
dependabot[bot] d57df9c2d8 chore(deps-dev): Bump typescript-eslint from 8.67.0 to 8.68.0 (#2110)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.67.0 to 8.68.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.68.0</h2>
<h2>8.68.0 (2026-08-24)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] add fix
suggestions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12086">#12086</a>)</li>
<li><strong>utils:</strong> support ESLint rule meta.languages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12663">#12663</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [unified-signatures] deduplicate
types in report (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12656">#12656</a>)</li>
<li><strong>eslint-plugin:</strong> [return-await] prevent autofix from
breaking code in arrow-functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12707">#12707</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] report
identical signatures (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12678">#12678</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
prevent stack overflow in recursive types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12711">#12711</a>)</li>
<li><strong>eslint-plugin:</strong> [no-floating-promises] setting
<code>ignoreVoid: false</code> results in false negative in
ArrowFunctionExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12646">#12646</a>)</li>
<li><strong>eslint-plugin:</strong> [no-empty-object-type] ignore
suggestions that result in invalid interfaces and export defaults (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12739">#12739</a>)</li>
<li><strong>website:</strong> playground crashes on <code>extends</code>
configs (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12608">#12608</a>)</li>
<li><strong>website:</strong> account for thanks.dev and out-of-band
donors in sponsors list (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12735">#12735</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Hugo <a
href="https://github.com/hugop95"><code>@​hugop95</code></a></li>
<li>Josh Goldberg </li>
<li>Niki <a
href="https://github.com/phaux"><code>@​phaux</code></a></li>
<li>Thiago Barbosa</li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.68.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.68.0 (2026-08-24)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.68.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/8f4e00a4e8f3bdf93a5e5e8bc568ba1c15a4f896"><code>8f4e00a</code></a>
chore(release): publish 8.68.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/55f6d5d4ca39d2fab93db97ced497b956017878d"><code>55f6d5d</code></a>
chore: enable source maps (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12677">#12677</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.68.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.67.0&new-version=8.68.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 13:54:01 +00:00
dependabot[bot] 0c2b0380b4 chore(deps): Bump maplibre-gl from 6.5.0 to 6.6.0 (#2112)
Bumps [maplibre-gl](https://github.com/maplibre/maplibre-gl-js) from
6.5.0 to 6.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/releases">maplibre-gl's
releases</a>.</em></p>
<blockquote>
<h2>v6.6.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add support for <code>symbol-height-offset</code> and
<code>symbol-height-anchor</code> layout properties, which raise icons
and text above the map. <code>symbol-height-anchor</code> selects
whether the offset is measured from the terrain surface
(<code>ground</code>, the default) or from the zero elevation datum
(<code>absolute</code>) (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/7827">#7827</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Pick terrain coordinates with a CPU raycast against the DEM instead
of a coords framebuffer readback: full DEM resolution, no GPU stall on
pointer events, and about 4MB less GPU memory (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/7640">#7640</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix labels briefly appearing too large when zooming out several
levels at once (e.g. a scroll-wheel or pinch fling) with a
zoom-dependent <code>text-size</code>/<code>icon-size</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8175">#8175</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Fix globe tile selection measuring distances from the ground point
below the camera instead of the camera itself, refining some views past
the requested zoom and leaving others coarser (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8187">#8187</a>)
(by <a href="https://github.com/Alchez"><code>@​Alchez</code></a>)</li>
<li>Fix the style's <code>center</code>, <code>zoom</code>,
<code>bearing</code>, <code>pitch</code> and <code>roll</code> being
ignored when the map was created with a <code>minZoom</code> or
<code>minPitch</code> option, since applying those limits marked the
transform as modified (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5932">#5932</a>)</li>
<li>Upload the <code>color-relief</code> DEM texture once per tile
instead of on every frame (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8209">#8209</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/blob/main/CHANGELOG.md">maplibre-gl's
changelog</a>.</em></p>
<blockquote>
<h2>6.6.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add support for <code>symbol-height-offset</code> and
<code>symbol-height-anchor</code> layout properties, which raise icons
and text above the map. <code>symbol-height-anchor</code> selects
whether the offset is measured from the terrain surface
(<code>ground</code>, the default) or from the zero elevation datum
(<code>absolute</code>) (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/7827">#7827</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Pick terrain coordinates with a CPU raycast against the DEM instead
of a coords framebuffer readback: full DEM resolution, no GPU stall on
pointer events, and about 4MB less GPU memory (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/7640">#7640</a>)
(by <a
href="https://github.com/johncarmack1984"><code>@​johncarmack1984</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix labels briefly appearing too large when zooming out several
levels at once (e.g. a scroll-wheel or pinch fling) with a
zoom-dependent <code>text-size</code>/<code>icon-size</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8175">#8175</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Fix globe tile selection measuring distances from the ground point
below the camera instead of the camera itself, refining some views past
the requested zoom and leaving others coarser (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8187">#8187</a>)
(by <a href="https://github.com/Alchez"><code>@​Alchez</code></a>)</li>
<li>Fix the style's <code>center</code>, <code>zoom</code>,
<code>bearing</code>, <code>pitch</code> and <code>roll</code> being
ignored when the map was created with a <code>minZoom</code> or
<code>minPitch</code> option, since applying those limits marked the
transform as modified (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5932">#5932</a>)</li>
<li>Upload the <code>color-relief</code> DEM texture once per tile
instead of on every frame (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8209">#8209</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/407a8ce9e379c16066b13c3a6729e404b69743c6"><code>407a8ce</code></a>
Bump js version to 6.6.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8226">#8226</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/7446d5a35bbed0f735d2fff876314b40ef3ced85"><code>7446d5a</code></a>
feat: add support for symbol elevation (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/7827">#7827</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/038265c88825096d241c77489123085fa24718e8"><code>038265c</code></a>
chore(deps-dev): bump rolldown from 1.2.4 to 1.2.5 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8221">#8221</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/ff9ec8e8e1e5af149ef09ec4f2289515ba2f4b1b"><code>ff9ec8e</code></a>
chore(deps): bump the codeql-action group with 3 updates (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8224">#8224</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/84bb7582dd73b7cd8ba5fbc884e74ff990bc5f10"><code>84bb758</code></a>
chore(deps-dev): bump devtools-protocol from 0.0.1681094 to 0.0.1683682
(<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8223">#8223</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/c00194d2b8d076f375fa9d755373053e2ae9db4a"><code>c00194d</code></a>
chore(deps-dev): bump vite from 8.2.1 to 8.2.2 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8220">#8220</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/335df7eed808c44004bbef0f34f6840a1239600d"><code>335df7e</code></a>
chore(deps-dev): bump the vitest group with 3 updates (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8219">#8219</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/3a2dc761839d2fda1cd0f533fa477757826a8c97"><code>3a2dc76</code></a>
chore(deps-dev): bump cssnano from 8.0.6 to 8.0.7 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8222">#8222</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/87ac8eaee8a61d1dcbea6084ad73bd4ca80c6382"><code>87ac8ea</code></a>
chore(deps): bump zensical/zensical from 0.0.55 to 0.0.56 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8218">#8218</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/d0f1d66777b7b616503f967718a1f1db7360408c"><code>d0f1d66</code></a>
bug: ReferenceError: assignment to undeclared variable image (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8216">#8216</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-gl-js/compare/v6.5.0...v6.6.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=maplibre-gl&package-manager=npm_and_yarn&previous-version=6.5.0&new-version=6.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 13:53:41 +00:00
dependabot[bot] b4241cf43d chore(deps-dev): Bump eslint from 10.9.0 to 10.9.1 (#2113)
Bumps [eslint](https://github.com/eslint/eslint) from 10.9.0 to 10.9.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.9.1</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/1e641c919fc1421493bf913feb607896982451a3"><code>1e641c9</code></a>
fix: no-loss-of-precision false positive with trailing decimal point (<a
href="https://redirect.github.com/eslint/eslint/issues/21251">#21251</a>)
(Aleksandr Shoronov)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b"><code>ad74a8d</code></a>
docs: add deprecation steps for EOL package versions (<a
href="https://redirect.github.com/eslint/eslint/issues/21248">#21248</a>)
(Francesco Trotta)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/3c3ae53a43721162f0db76c69665ebd9d752ea52"><code>3c3ae53</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21249">#21249</a>)
(ESLint Bot)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/5c8c2417b9ff462f2dc4e54a062c59135b45b845"><code>5c8c241</code></a>
10.9.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/a7f3b7ddca7de8464995707d1bbac3ca91090015"><code>a7f3b7d</code></a>
Build: changelog update for 10.9.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/1e641c919fc1421493bf913feb607896982451a3"><code>1e641c9</code></a>
fix: no-loss-of-precision false positive with trailing decimal point (<a
href="https://redirect.github.com/eslint/eslint/issues/21251">#21251</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b"><code>ad74a8d</code></a>
docs: add deprecation steps for EOL package versions (<a
href="https://redirect.github.com/eslint/eslint/issues/21248">#21248</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/3c3ae53a43721162f0db76c69665ebd9d752ea52"><code>3c3ae53</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21249">#21249</a>)</li>
<li>See full diff in <a
href="https://github.com/eslint/eslint/compare/v10.9.0...v10.9.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.9.0&new-version=10.9.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-28 13:53:25 +00:00
dependabot[bot] d802049d02 chore(deps-dev): Bump @types/react-dom from 19.2.4 to 19.2.5 in the react group (#2109)
Bumps the react group with 1 update:
[@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom).

Updates `@types/react-dom` from 19.2.4 to 19.2.5
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/react-dom&package-manager=npm_and_yarn&previous-version=19.2.4&new-version=19.2.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-27 13:55:00 +00:00
dependabot[bot] 4f451fbfa4 chore(deps): Bump @maplibre/maplibre-gl-style-spec from 26.4.0 to 26.4.1 (#2108)
Bumps
[@maplibre/maplibre-gl-style-spec](https://github.com/maplibre/maplibre-style-spec)
from 26.4.0 to 26.4.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/releases">@​maplibre/maplibre-gl-style-spec's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.1</h2>
<h3> Features and improvements</h3>
<ul>
<li>Publish the ESM build (<code>dist/index.mjs</code>, referenced by
<code>package.json#module</code>) as one module per source file instead
of a single bundle, so that bundlers which eliminate dead code at module
granularity can drop unused parts of the package (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1829">#1829</a>)
(by <a
href="https://github.com/ahocevar"><code>@​ahocevar</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix validation and typescript types for font-faces (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1840">#1840</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/blob/main/CHANGELOG.md">@​maplibre/maplibre-gl-style-spec's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.1</h2>
<h3> Features and improvements</h3>
<ul>
<li>Publish the ESM build (<code>dist/index.mjs</code>, referenced by
<code>package.json#module</code>) as one module per source file instead
of a single bundle, so that bundlers which eliminate dead code at module
granularity can drop unused parts of the package (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1829">#1829</a>)
(by <a
href="https://github.com/ahocevar"><code>@​ahocevar</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix validation and typescript types for font-faces (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1840">#1840</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/84babd59128eca29be2e6ae27dbe168d8f955e99"><code>84babd5</code></a>
Bump js version to 26.4.1 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1841">#1841</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/8b943c0d006918b0de7b792cee8b5369d4808af0"><code>8b943c0</code></a>
Publish a module-per-file ESM build so bundlers can tree-shake (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1829">#1829</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/06c21c55a6a414052ba565297408d33fe418a9c5"><code>06c21c5</code></a>
Update font-face validator and types (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1840">#1840</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/e60ee6f71a76074415ae4da1e50d89b5194407eb"><code>e60ee6f</code></a>
Update SDK support version for JavaScript (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1839">#1839</a>)</li>
<li>See full diff in <a
href="https://github.com/maplibre/maplibre-style-spec/compare/v26.4.0...v26.4.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@maplibre/maplibre-gl-style-spec&package-manager=npm_and_yarn&previous-version=26.4.0&new-version=26.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-26 13:54:16 +00:00
dependabot[bot] 5ffa887e0f chore(deps): Bump @maplibre/maplibre-gl-style-spec from 26.3.0 to 26.4.0 (#2107)
Bumps
[@maplibre/maplibre-gl-style-spec](https://github.com/maplibre/maplibre-style-spec)
from 26.3.0 to 26.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/releases">@​maplibre/maplibre-gl-style-spec's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Enable data-driven <code>icon-rotation-alignment</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1836">#1836</a>)
(by <a
href="https://github.com/Turbo87"><code>@​Turbo87</code></a>)</li>
<li>Make <code>url</code> optional for image sources. An image source
can now be defined with only <code>type</code> and
<code>coordinates</code>; it renders nothing until an image is set at
runtime (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1817">#1817</a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix missing <code>setFontFaces</code> operation when style changes
(<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1837">#1837</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/blob/main/CHANGELOG.md">@​maplibre/maplibre-gl-style-spec's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Enable data-driven <code>icon-rotation-alignment</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1836">#1836</a>)
(by <a
href="https://github.com/Turbo87"><code>@​Turbo87</code></a>)</li>
<li>Make <code>url</code> optional for image sources. An image source
can now be defined with only <code>type</code> and
<code>coordinates</code>; it renders nothing until an image is set at
runtime (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1817">#1817</a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix missing <code>setFontFaces</code> operation when style changes
(<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1837">#1837</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/31c646ed627d460a24ce82f657879ee6c9194c1c"><code>31c646e</code></a>
Bump js version to 26.4.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1838">#1838</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/c7c634ccb4966232ffd80addb4ed92b54fe2f8ec"><code>c7c634c</code></a>
Update <code>sdk-support</code> for MapLibre Android and MapLibre iOS
(<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1816">#1816</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/bfc687800896262800d3415a686f222c7911a764"><code>bfc6878</code></a>
Enable data-driven <code>icon-rotation-alignment</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1836">#1836</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/d36eabf24f7ded2cb7d4b33c4355500b1e3f4ae8"><code>d36eabf</code></a>
feat: make url optional for image sources (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1817">#1817</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/a37799956830b1c4b624d5ac97e685915359e314"><code>a377999</code></a>
fix: add missing font-faces change operation (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1837">#1837</a>)</li>
<li>See full diff in <a
href="https://github.com/maplibre/maplibre-style-spec/compare/v26.3.0...v26.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@maplibre/maplibre-gl-style-spec&package-manager=npm_and_yarn&previous-version=26.3.0&new-version=26.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-25 13:53:34 +00:00
dependabot[bot] c08269de33 chore(deps): Bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 in /desktop (#2106)
Bumps
[github.com/gorilla/websocket](https://github.com/gorilla/websocket)
from 1.5.0 to 1.5.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gorilla/websocket/releases">github.com/gorilla/websocket's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.3</h2>
<h2>Important change</h2>
<p>This reverts the websockets package back to <a
href="https://github.com/gorilla/websocket/commit/931041c5ee6de24fe9cba1aa16f1a0b910284d6d">https://github.com/gorilla/websocket/commit/931041c5ee6de24fe9cba1aa16f1a0b910284d6d</a></p>
<h2>What's Changed</h2>
<ul>
<li>Fixes subprotocol selection (aling with rfc6455) by <a
href="https://github.com/KSDaemon"><code>@​KSDaemon</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/823">gorilla/websocket#823</a></li>
<li>Update README.md, replace master to main by <a
href="https://github.com/mstmdev"><code>@​mstmdev</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/862">gorilla/websocket#862</a></li>
<li>Use status code constant by <a
href="https://github.com/mstmdev"><code>@​mstmdev</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/864">gorilla/websocket#864</a></li>
<li>conn.go: default close handler should not return ErrCloseSent. by <a
href="https://github.com/pnx"><code>@​pnx</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/865">gorilla/websocket#865</a></li>
<li>fix: replace ioutil.readfile with os.readfile by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/868">gorilla/websocket#868</a></li>
<li>fix: add comment for the readBufferSize and writeBufferSize by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/869">gorilla/websocket#869</a></li>
<li>Remove noisy printf in NextReader() and beginMessage() by <a
href="https://github.com/bcreane"><code>@​bcreane</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/878">gorilla/websocket#878</a></li>
<li>docs(echoreadall): fix function echoReadAll comment by <a
href="https://github.com/XdpCs"><code>@​XdpCs</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/881">gorilla/websocket#881</a></li>
<li>make tests parallel by <a
href="https://github.com/ninedraft"><code>@​ninedraft</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/872">gorilla/websocket#872</a></li>
<li>Upgrader.Upgrade: use http.ResposnseController by <a
href="https://github.com/ninedraft"><code>@​ninedraft</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/871">gorilla/websocket#871</a></li>
<li>Do not handle network error in <code>SetCloseHandler()</code> by <a
href="https://github.com/nak3"><code>@​nak3</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/863">gorilla/websocket#863</a></li>
<li>perf: reduce timer in write_control by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/879">gorilla/websocket#879</a></li>
<li>fix: lint example code by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/890">gorilla/websocket#890</a></li>
<li>feat: format message type by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/889">gorilla/websocket#889</a></li>
<li>Remove hideTempErr to allow downstream users to check for errors
like net.ErrClosed by <a
href="https://github.com/UnAfraid"><code>@​UnAfraid</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/894">gorilla/websocket#894</a></li>
<li>Do not timeout when WriteControl deadline is zero in <a
href="https://redirect.github.com/gorilla/websocket/pull/898">gorilla/websocket#898</a></li>
<li>Excludes errchecks linter by <a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
in <a
href="https://redirect.github.com/gorilla/websocket/pull/904">gorilla/websocket#904</a></li>
<li>Return errors instead of printing to logs by <a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
in <a
href="https://redirect.github.com/gorilla/websocket/pull/897">gorilla/websocket#897</a></li>
<li>Revert &quot; Update go version &amp; add verification/testing tools
(<a
href="https://redirect.github.com/gorilla/websocket/issues/840">#840</a>)&quot;
by <a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
in <a
href="https://redirect.github.com/gorilla/websocket/pull/908">gorilla/websocket#908</a></li>
<li>Fixes broken random value generation by <a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
in <a
href="https://redirect.github.com/gorilla/websocket/pull/926">gorilla/websocket#926</a></li>
<li>Reverts back to v1.5.0 by <a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
in <a
href="https://redirect.github.com/gorilla/websocket/pull/929">gorilla/websocket#929</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/KSDaemon"><code>@​KSDaemon</code></a>
made their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/823">gorilla/websocket#823</a></li>
<li><a href="https://github.com/mstmdev"><code>@​mstmdev</code></a> made
their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/862">gorilla/websocket#862</a></li>
<li><a href="https://github.com/pnx"><code>@​pnx</code></a> made their
first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/865">gorilla/websocket#865</a></li>
<li><a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> made
their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/868">gorilla/websocket#868</a></li>
<li><a href="https://github.com/bcreane"><code>@​bcreane</code></a> made
their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/878">gorilla/websocket#878</a></li>
<li><a href="https://github.com/XdpCs"><code>@​XdpCs</code></a> made
their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/881">gorilla/websocket#881</a></li>
<li><a href="https://github.com/ninedraft"><code>@​ninedraft</code></a>
made their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/872">gorilla/websocket#872</a></li>
<li><a href="https://github.com/nak3"><code>@​nak3</code></a> made their
first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/863">gorilla/websocket#863</a></li>
<li><a href="https://github.com/UnAfraid"><code>@​UnAfraid</code></a>
made their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/894">gorilla/websocket#894</a></li>
<li><a
href="https://github.com/apoorvajagtap"><code>@​apoorvajagtap</code></a>
made their first contribution in <a
href="https://redirect.github.com/gorilla/websocket/pull/904">gorilla/websocket#904</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/gorilla/websocket/compare/v1.5.1...v1.5.3">https://github.com/gorilla/websocket/compare/v1.5.1...v1.5.3</a></p>
<h2>v1.5.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Fixes subprotocol selection (aling with rfc6455) by <a
href="https://github.com/KSDaemon"><code>@​KSDaemon</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/823">gorilla/websocket#823</a></li>
<li>Update README.md, replace master to main by <a
href="https://github.com/mstmdev"><code>@​mstmdev</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/862">gorilla/websocket#862</a></li>
<li>Use status code constant by <a
href="https://github.com/mstmdev"><code>@​mstmdev</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/864">gorilla/websocket#864</a></li>
<li>conn.go: default close handler should not return ErrCloseSent. by <a
href="https://github.com/pnx"><code>@​pnx</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/865">gorilla/websocket#865</a></li>
<li>fix: replace ioutil.readfile with os.readfile by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/868">gorilla/websocket#868</a></li>
<li>fix: add comment for the readBufferSize and writeBufferSize by <a
href="https://github.com/rfyiamcool"><code>@​rfyiamcool</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/869">gorilla/websocket#869</a></li>
<li>Remove noisy printf in NextReader() and beginMessage() by <a
href="https://github.com/bcreane"><code>@​bcreane</code></a> in <a
href="https://redirect.github.com/gorilla/websocket/pull/878">gorilla/websocket#878</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gorilla/websocket/commit/ce903f6d1d961af3a8602f2842c8b1c3fca58c4d"><code>ce903f6</code></a>
Reverts to v1.5.0</li>
<li><a
href="https://github.com/gorilla/websocket/commit/9ec25ca502ec881a7e873d3cdf35da60eab22037"><code>9ec25ca</code></a>
fixes broken random value generation</li>
<li><a
href="https://github.com/gorilla/websocket/commit/1bddf2e0dba6f35492b0f5614905b291cd0ab88d"><code>1bddf2e</code></a>
bumps go version &amp; removes deprecated module usage</li>
<li><a
href="https://github.com/gorilla/websocket/commit/750bf92096b4cd4d75082948a4e143f303a65390"><code>750bf92</code></a>
adds GHA &amp; Makefile configs</li>
<li><a
href="https://github.com/gorilla/websocket/commit/b2c246b2ec6f86b53889c79022fec8dabe0a20bb"><code>b2c246b</code></a>
Revert &quot; Update go version &amp; add verification/testing tools (<a
href="https://redirect.github.com/gorilla/websocket/issues/840">#840</a>)&quot;</li>
<li><a
href="https://github.com/gorilla/websocket/commit/09a6bab4667fc302c7f23ad770ce48be6fc2d15f"><code>09a6bab</code></a>
removing error handling while closing connections</li>
<li><a
href="https://github.com/gorilla/websocket/commit/58af150309a40ad57463b8087fe33d59d5a490d3"><code>58af150</code></a>
return errors instead of printing to logs</li>
<li><a
href="https://github.com/gorilla/websocket/commit/e5f1a0aad0accdff7dc9131fdcce912e28d8f4d5"><code>e5f1a0a</code></a>
excludes errchecks linter</li>
<li><a
href="https://github.com/gorilla/websocket/commit/b2a86a174473e870c9fcc3eaba8957689090d2cc"><code>b2a86a1</code></a>
Do not timeout when WriteControl deadline is zero</li>
<li><a
href="https://github.com/gorilla/websocket/commit/695e9095ce8736ac99c83939ca6b0fe93768f680"><code>695e909</code></a>
Remove hideTempErr to allow downstream users to check for errors like
net.Err...</li>
<li>Additional commits viewable in <a
href="https://github.com/gorilla/websocket/compare/v1.5.0...v1.5.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/gorilla/websocket&package-manager=go_modules&previous-version=1.5.0&new-version=1.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 21:54:11 +00:00
dependabot[bot] 520a1aab20 chore(deps): Bump @maplibre/maplibre-gl-style-spec from 26.2.1 to 26.3.0 (#2101)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps
[@maplibre/maplibre-gl-style-spec](https://github.com/maplibre/maplibre-style-spec)
from 26.2.1 to 26.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/releases">@​maplibre/maplibre-gl-style-spec's
releases</a>.</em></p>
<blockquote>
<h2>v26.3.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add <code>semiliteral</code> operator for expressions inside arrays
and objects (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/951">#951</a>)
(by <a
href="https://github.com/sargunv"><code>@​sargunv</code></a>)</li>
<li>Add <code>symbol-height-offset</code> and
<code>symbol-height-anchor</code> properties to <code>symbol</code>
layers to allow icons and text to be elevated above the ground (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1508">#1508</a>)
(by <a
href="https://github.com/HatulaPro"><code>@​HatulaPro</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/blob/main/CHANGELOG.md">@​maplibre/maplibre-gl-style-spec's
changelog</a>.</em></p>
<blockquote>
<h2>26.3.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add <code>semiliteral</code> operator for expressions inside arrays
and objects (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/951">#951</a>)
(by <a
href="https://github.com/sargunv"><code>@​sargunv</code></a>)</li>
<li>Add <code>symbol-height-offset</code> and
<code>symbol-height-anchor</code> properties to <code>symbol</code>
layers to allow icons and text to be elevated above the ground (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1508">#1508</a>)
(by <a
href="https://github.com/HatulaPro"><code>@​HatulaPro</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/2d22724143971ae9ff247cc97f4af363fd6a68a2"><code>2d22724</code></a>
Bump js version to 26.3.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1835">#1835</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/55a91fe95640ce5decf20b27934a18ef4900982e"><code>55a91fe</code></a>
Add symbol-elevation property to symbol layers (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1508">#1508</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/6855b3ee8bd5c806402bcdcb52e4c649f25ba967"><code>6855b3e</code></a>
build(deps-dev): bump rolldown from 1.2.4 to 1.2.5 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1834">#1834</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/dbdd5b09d21acb493e067c7bc24607a59417eb13"><code>dbdd5b0</code></a>
build(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1833">#1833</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/7920d03db4f6889e9ad1535484140d420853515f"><code>7920d03</code></a>
build(deps-dev): bump the vitest group with 3 updates (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1831">#1831</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/4f227cd9309db3e9c8bb9243aea10db40fbd683f"><code>4f227cd</code></a>
build(deps-dev): bump <code>@​typescript-eslint/eslint-plugin</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1827">#1827</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/b53cb1b2a1bd3cf4a5729b74962f1558a39e5469"><code>b53cb1b</code></a>
build(deps-dev): bump globals from 17.9.0 to 17.11.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1824">#1824</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/693849f3c38090ca66a43a4a9c7558ade97d05ef"><code>693849f</code></a>
build(deps-dev): bump rolldown from 1.2.3 to 1.2.4 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1823">#1823</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/fa7eca155c7689d9ecbdc30c504441d99e73a2b6"><code>fa7eca1</code></a>
build(deps-dev): bump <code>@​types/node</code> from 26.1.2 to 26.2.0
(<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1826">#1826</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/ba3a733cce24e182294d3aee0f024fe573169dba"><code>ba3a733</code></a>
build(deps-dev): bump eslint from 10.8.0 to 10.8.1 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1822">#1822</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-style-spec/compare/v26.2.1...v26.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@maplibre/maplibre-gl-style-spec&package-manager=npm_and_yarn&previous-version=26.2.1&new-version=26.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:55:10 +00:00
dependabot[bot] 817b9abea8 chore(deps): Bump i18next from 26.3.6 to 26.4.0 (#2102)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [i18next](https://github.com/i18next/i18next) from 26.3.6 to
26.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/releases">i18next's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.0</h2>
<ul>
<li>perf: cache <code>toResolveHierarchy</code> results per <code>(code,
fallbackCode)</code> pair. The hierarchy resolver runs on every
<code>t()</code> call and calls <code>Intl.getCanonicalLocales</code>
multiple times, which showed up prominently when profiling render-heavy
UIs (e.g. virtualized data grids); with the cache the per-call cost
drops from ~886 ns to ~41 ns. The cache is invalidated automatically
when <code>options.fallbackLng</code> changes (reassignment or in-place
array mutation); if you mutate other resolution-relevant options at
runtime (<code>load</code>, <code>lowerCaseLng</code>,
<code>cleanCode</code>, <code>nonExplicitSupportedLngs</code>), call
<code>i18next.services.languageUtils.clearCache()</code> afterwards.
Function-valued <code>fallbackLng</code> and per-call array/object
<code>fallbackLng</code> options are never cached, so dynamic fallbacks
keep working as before. Thanks <a
href="https://github.com/equaterina"><code>@​equaterina</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2444">#2444</a>).</li>
<li>chore: update all devDependencies (Babel stays on 7.x until
<code>@rollup/plugin-babel</code> supports 8, eslint on 9.x for
neostandard). Removed the unused <code>coveralls</code> package (CI uses
the Coveralls GitHub Action) and replaced <code>sinon</code> with
<code>nise</code> + <code>vitest.spyOn</code> in the v1 compatibility
tests, which resolves all open <code>npm audit</code> findings (0
vulnerabilities) and should close the dependabot alerts on the
lockfile.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/blob/master/CHANGELOG.md">i18next's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.0</h2>
<ul>
<li>perf: cache <code>toResolveHierarchy</code> results per <code>(code,
fallbackCode)</code> pair. The hierarchy resolver runs on every
<code>t()</code> call and calls <code>Intl.getCanonicalLocales</code>
multiple times, which showed up prominently when profiling render-heavy
UIs (e.g. virtualized data grids); with the cache the per-call cost
drops from ~886 ns to ~41 ns. The cache is invalidated automatically
when <code>options.fallbackLng</code> changes (reassignment or in-place
array mutation); if you mutate other resolution-relevant options at
runtime (<code>load</code>, <code>lowerCaseLng</code>,
<code>cleanCode</code>, <code>nonExplicitSupportedLngs</code>), call
<code>i18next.services.languageUtils.clearCache()</code> afterwards.
Function-valued <code>fallbackLng</code> and per-call array/object
<code>fallbackLng</code> options are never cached, so dynamic fallbacks
keep working as before. Thanks <a
href="https://github.com/equaterina"><code>@​equaterina</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2444">#2444</a>).</li>
<li>chore: update all devDependencies (Babel stays on 7.x until
<code>@rollup/plugin-babel</code> supports 8, eslint on 9.x for
neostandard). Removed the unused <code>coveralls</code> package (CI uses
the Coveralls GitHub Action) and replaced <code>sinon</code> with
<code>nise</code> + <code>vitest.spyOn</code> in the v1 compatibility
tests, which resolves all open <code>npm audit</code> findings (0
vulnerabilities) and should close the dependabot alerts on the
lockfile.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next/commit/652847e70fd68344d00456f20ef0584da51e59f7"><code>652847e</code></a>
26.4.0</li>
<li><a
href="https://github.com/i18next/i18next/commit/6c6025f87e89f0b5e8ef3f0bf23fd61158bd64d3"><code>6c6025f</code></a>
prettier fix</li>
<li><a
href="https://github.com/i18next/i18next/commit/742b9a95dd240891368bd296b6dbb09844bd365a"><code>742b9a9</code></a>
chore: update dependencies and clean up dev tooling</li>
<li><a
href="https://github.com/i18next/i18next/commit/06924d961c64bd01a1f3d707b425b6c392a72a9a"><code>06924d9</code></a>
fix: invalidate toResolveHierarchy cache on in-place fallbackLng
mutation</li>
<li><a
href="https://github.com/i18next/i18next/commit/bb80369e1453cb9621011d51feaf7e0b8ba002f3"><code>bb80369</code></a>
perf: cache toResolveHierarchy (<a
href="https://redirect.github.com/i18next/i18next/issues/2444">#2444</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next/compare/v26.3.6...v26.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next&package-manager=npm_and_yarn&previous-version=26.3.6&new-version=26.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:55:00 +00:00
dependabot[bot] d90686f850 chore(deps): Bump github/codeql-action/autobuild from 4.37.7 to 4.37.8 (#2103)
Bumps
[github/codeql-action/autobuild](https://github.com/github/codeql-action)
from 4.37.7 to 4.37.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/autobuild's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.8</h2>
<p>No user facing changes.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/autobuild's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.8 - 21 Aug 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28"><code>db488dd</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4102">#4102</a>
from github/update-v4.37.8-9ee088e13</li>
<li><a
href="https://github.com/github/codeql-action/commit/1845f5ba8b4057590f49ee8e246c95ef2ba4b53f"><code>1845f5b</code></a>
Update changelog for v4.37.8</li>
<li><a
href="https://github.com/github/codeql-action/commit/9ee088e13615f8d1eaef4766f9dde95d3356a8f6"><code>9ee088e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4080">#4080</a>
from github/henrymercer/studious-giggle</li>
<li><a
href="https://github.com/github/codeql-action/commit/1aef003397c876c0ab5bd118e1b1f34c175622e9"><code>1aef003</code></a>
Address review feedback on overlay disk flags</li>
<li><a
href="https://github.com/github/codeql-action/commit/508b83bc415e8df76ce8ea08c0cf42c2529ebc63"><code>508b83b</code></a>
Merge main into overlay minimum disk feature branch</li>
<li><a
href="https://github.com/github/codeql-action/commit/d97b3428e8eebbb1810cf454d6397886d136b4ba"><code>d97b342</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4098">#4098</a>
from github/mbg/permission-error-as-configuration-error</li>
<li><a
href="https://github.com/github/codeql-action/commit/47fa6222231b12097f83215dd7a6b4a0915841fd"><code>47fa622</code></a>
Make <code>EACCES</code> a <code>ConfigurationError</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/45693cc6882bb175b58a06818c91876e201037c7"><code>45693cc</code></a>
Refactor <code>ENOSPC</code> check into
<code>isDiskConfigurationError</code> function</li>
<li><a
href="https://github.com/github/codeql-action/commit/c2fd8f54d19fa46c94ed79cb92e6dd6606d61762"><code>c2fd8f5</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4081">#4081</a>
from github/mario-campos/version-cache-to-disk</li>
<li><a
href="https://github.com/github/codeql-action/commit/c56f48e9bd458a387eb68a68534459e503e56b17"><code>c56f48e</code></a>
Log unexpected conditions during caching CLI output</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/autobuild&package-manager=github_actions&previous-version=4.37.7&new-version=4.37.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:54:50 +00:00
dependabot[bot] b28583db74 chore(deps-dev): Bump vite from 8.2.1 to 8.2.2 (#2100)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 8.2.1 to 8.2.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>plugin-legacy@8.2.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.2.2/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.2.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.2.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.2.1...v8.2.2">8.2.2</a>
(2026-08-20)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li><strong>deps:</strong> widen <code>@vitejs/devtools</code> peer
range to v0.5.0 (<a
href="https://redirect.github.com/vitejs/vite/issues/23302">#23302</a>)
(<a
href="https://github.com/vitejs/vite/commit/495d9ff5a7d843ca876a9e49799947a5deb704c7">495d9ff</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>bundled-dev:</strong> handle lazy request error (<a
href="https://redirect.github.com/vitejs/vite/issues/23291">#23291</a>)
(<a
href="https://github.com/vitejs/vite/commit/3ba026dade4af56df08815310d3458fa110f5c5c">3ba026d</a>)</li>
<li><strong>bundled-dev:</strong> hot update through circular imports
instead of reloading (<a
href="https://redirect.github.com/vitejs/vite/issues/23259">#23259</a>)
(<a
href="https://github.com/vitejs/vite/commit/3dbddefaafc091a879b06f9279296f776691e455">3dbddef</a>)</li>
<li><strong>config:</strong> resolve sourcemap paths against sourcemap
location (<a
href="https://redirect.github.com/vitejs/vite/issues/23239">#23239</a>)
(<a
href="https://github.com/vitejs/vite/commit/05a003e6a17a84d75f907ea0f1598bc39b8dce6c">05a003e</a>)</li>
<li><strong>css:</strong> don't pass empty targets to lightningcss (<a
href="https://redirect.github.com/vitejs/vite/issues/23295">#23295</a>)
(<a
href="https://github.com/vitejs/vite/commit/2804636ff608d105928009d274ffba7cfbe55340">2804636</a>)</li>
<li><strong>define:</strong> fix match escaped dots to support
$-prefixed define keys (<a
href="https://redirect.github.com/vitejs/vite/issues/23249">#23249</a>)
(<a
href="https://github.com/vitejs/vite/commit/dcf88bd2ad2b1a8845f9029587cc8c825e382d42">dcf88bd</a>)</li>
<li><strong>deps:</strong> update all non-major dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/23217">#23217</a>)
(<a
href="https://github.com/vitejs/vite/commit/ba958bddfc9cabe302c6b34269dcf5c9634531e0">ba958bd</a>)</li>
<li><strong>deps:</strong> update rolldown-related dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/23218">#23218</a>)
(<a
href="https://github.com/vitejs/vite/commit/83ecb2c8059e8ce946a7cc835d4c14ef78aef4fd">83ecb2c</a>)</li>
<li><strong>module-runner:</strong> exclude completed modules from
in-flight cycle detection (fix <a
href="https://redirect.github.com/vitejs/vite/issues/22999">#22999</a>)
(<a
href="https://redirect.github.com/vitejs/vite/issues/23009">#23009</a>)
(<a
href="https://github.com/vitejs/vite/commit/d9b10a98db1c293ee64300bd75d568b44c8ae931">d9b10a9</a>)</li>
<li><strong>optimizer:</strong> close custom extension analysis bundles
(<a
href="https://redirect.github.com/vitejs/vite/issues/23207">#23207</a>)
(<a
href="https://github.com/vitejs/vite/commit/8fb76752836f61224d3095b502fa237b478a06b2">8fb7675</a>)</li>
<li>reduce Windows 8.3-short-name detection false-positives (<a
href="https://redirect.github.com/vitejs/vite/issues/23066">#23066</a>)
(<a
href="https://github.com/vitejs/vite/commit/02cffa9e2d38d5d8f12e4043ee9d0f7abb1471e2">02cffa9</a>)</li>
<li>respect <code>resolve.preserveSymlinks</code> when resolving root
(fix <a
href="https://redirect.github.com/vitejs/vite/issues/23197">#23197</a>)
(<a
href="https://redirect.github.com/vitejs/vite/issues/23198">#23198</a>)
(<a
href="https://github.com/vitejs/vite/commit/8413052731836d4aaf3eb94a0f25788dd35d2888">8413052</a>)</li>
<li><strong>ssr:</strong> rewrite computed key of destructing parameter
(<a
href="https://redirect.github.com/vitejs/vite/issues/23307">#23307</a>)
(<a
href="https://github.com/vitejs/vite/commit/9db0b61d4c9c7caad7ea1d9670b637faf2bb6c93">9db0b61</a>)</li>
<li><strong>vite:</strong> update outdated upstream file links in
license comments (<a
href="https://redirect.github.com/vitejs/vite/issues/23285">#23285</a>)
(<a
href="https://github.com/vitejs/vite/commit/c0f2fc607ee97ee4499337b04826420c00654065">c0f2fc6</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><strong>build:</strong> note cssTarget precedence (<a
href="https://redirect.github.com/vitejs/vite/issues/23200">#23200</a>)
(<a
href="https://github.com/vitejs/vite/commit/a20a35ec0685e374519864d0f41dd5f6e9ba0271">a20a35e</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li>fix ts errors in build test cases (<a
href="https://redirect.github.com/vitejs/vite/issues/23209">#23209</a>)
(<a
href="https://github.com/vitejs/vite/commit/a0cfcf72f8ef8bf0f2f11d553333b9bb31f1d316">a0cfcf7</a>)</li>
</ul>
<h3>Code Refactoring</h3>
<ul>
<li>use JSON import attributes instead of readFileSync in constants (<a
href="https://redirect.github.com/vitejs/vite/issues/23258">#23258</a>)
(<a
href="https://github.com/vitejs/vite/commit/1d9fa392a43229241f80630236f8552ce8f7cd0f">1d9fa39</a>)</li>
<li>use named regex constants over inline literals (<a
href="https://redirect.github.com/vitejs/vite/issues/22964">#22964</a>)
(<a
href="https://github.com/vitejs/vite/commit/5c1c6c609718303202832f706884192e1f1e9223">5c1c6c6</a>)</li>
</ul>
<h3>Tests</h3>
<ul>
<li><strong>define:</strong> close rolldown bundler after generate (<a
href="https://redirect.github.com/vitejs/vite/issues/23231">#23231</a>)
(<a
href="https://github.com/vitejs/vite/commit/b4d66fee14d970f45b8a6f3d7d6aee73ca9b88ab">b4d66fe</a>)</li>
<li><strong>module-runner:</strong> add TLA circular import case (<a
href="https://redirect.github.com/vitejs/vite/issues/23299">#23299</a>)
(<a
href="https://github.com/vitejs/vite/commit/4a261f242831bef92afd2f1aacfb81eab9dec371">4a261f2</a>)</li>
<li><strong>module-runner:</strong> simplify server-hmr tests (<a
href="https://redirect.github.com/vitejs/vite/issues/23300">#23300</a>)
(<a
href="https://github.com/vitejs/vite/commit/599b44b6600ec426e10cd556908d53b027b0c4fb">599b44b</a>)</li>
<li><strong>ssr:</strong> add destructing assignment case for
moduleRunnerTransform (<a
href="https://redirect.github.com/vitejs/vite/issues/23308">#23308</a>)
(<a
href="https://github.com/vitejs/vite/commit/cb77e2a93bad2a8ece00b4aa0ef507c092582c45">cb77e2a</a>)</li>
</ul>
<h3>Build System</h3>
<ul>
<li>use JSON import attributes instead of readFIleSync in rolldown
configs (<a
href="https://redirect.github.com/vitejs/vite/issues/23251">#23251</a>)
(<a
href="https://github.com/vitejs/vite/commit/d615bcdb23d96c1ca5ce1ee45e21d8d87381106f">d615bcd</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/de1111ab0be00879b404e7ed3b2a80e264edddc1"><code>de1111a</code></a>
release: v8.2.2</li>
<li><a
href="https://github.com/vitejs/vite/commit/cb77e2a93bad2a8ece00b4aa0ef507c092582c45"><code>cb77e2a</code></a>
test(ssr): add destructing assignment case for moduleRunnerTransform (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23308">#23308</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/9db0b61d4c9c7caad7ea1d9670b637faf2bb6c93"><code>9db0b61</code></a>
fix(ssr): rewrite computed key of destructing parameter (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23307">#23307</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/8413052731836d4aaf3eb94a0f25788dd35d2888"><code>8413052</code></a>
fix: respect <code>resolve.preserveSymlinks</code> when resolving root
(fix <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23197">#23197</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23">#23</a>...</li>
<li><a
href="https://github.com/vitejs/vite/commit/05a003e6a17a84d75f907ea0f1598bc39b8dce6c"><code>05a003e</code></a>
fix(config): resolve sourcemap paths against sourcemap location (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23239">#23239</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/495d9ff5a7d843ca876a9e49799947a5deb704c7"><code>495d9ff</code></a>
feat(deps): widen <code>@vitejs/devtools</code> peer range to v0.5.0 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23302">#23302</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/1d9fa392a43229241f80630236f8552ce8f7cd0f"><code>1d9fa39</code></a>
refactor: use JSON import attributes instead of readFileSync in
constants (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/2">#2</a>...</li>
<li><a
href="https://github.com/vitejs/vite/commit/2804636ff608d105928009d274ffba7cfbe55340"><code>2804636</code></a>
fix(css): don't pass empty targets to lightningcss (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23295">#23295</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/599b44b6600ec426e10cd556908d53b027b0c4fb"><code>599b44b</code></a>
test(module-runner): simplify server-hmr tests (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23300">#23300</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/4a261f242831bef92afd2f1aacfb81eab9dec371"><code>4a261f2</code></a>
test(module-runner): add TLA circular import case (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23299">#23299</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v8.2.2/packages/vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vite&package-manager=npm_and_yarn&previous-version=8.2.1&new-version=8.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:54:46 +00:00
dependabot[bot] f099edf0ed chore(deps): Bump maplibre-gl from 6.4.1 to 6.5.0 (#2099)
Bumps [maplibre-gl](https://github.com/maplibre/maplibre-gl-js) from
6.4.1 to 6.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/releases">maplibre-gl's
releases</a>.</em></p>
<blockquote>
<h2>v6.5.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add experimental <code>ImageSource.setWarp</code> and
<code>ImageSource.getWarp</code>, choosing between a <code>auto</code>,
<code>perspective</code> and a <code>flat</code> warp of the image (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8172">#8172</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fixed incorrect image source on projection on globe view (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8172">#8172</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Fix the globe zooming itself in when panned away from a pole at the
minimum zoom, where the latitude zoom compensation was applied on top of
the constrain's own clamp (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8182">#8182</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Fix dragging the globe from the empty space around it, which barely
moved the map and often in the wrong direction (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8174">#8174</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-js/blob/main/CHANGELOG.md">maplibre-gl's
changelog</a>.</em></p>
<blockquote>
<h2>6.5.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add experimental <code>ImageSource.setWarp</code> and
<code>ImageSource.getWarp</code>, choosing between a <code>auto</code>,
<code>perspective</code> and a <code>flat</code> warp of the image (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8172">#8172</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fixed incorrect image source on projection on globe view (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8172">#8172</a>)
(by <a href="https://github.com/HarelM"><code>@​HarelM</code></a>)</li>
<li>Fix the globe zooming itself in when panned away from a pole at the
minimum zoom, where the latitude zoom compensation was applied on top of
the constrain's own clamp (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8182">#8182</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
<li>Fix dragging the globe from the empty space around it, which barely
moved the map and often in the wrong direction (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/8174">#8174</a>)
(by <a
href="https://github.com/mondsichtung"><code>@​mondsichtung</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/3a0a4f795fef5b2a29034d71833475589c344eaf"><code>3a0a4f7</code></a>
Bump js version to 6.5.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8203">#8203</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/60b9c6825e5be629ace639a7c6ce4bcae018576a"><code>60b9c68</code></a>
chore(deps): bump <code>@​maplibre/mlt</code> from 1.1.12 to 1.2.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8196">#8196</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/e347d1f929eb34754b3370668e127b3c3e945a97"><code>e347d1f</code></a>
feat: add image warp option to ImageSource (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8172">#8172</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/a17c989c81a8c63046e1d9d135060c3918fa1703"><code>a17c989</code></a>
chore(deps-dev): bump devtools-protocol from 0.0.1680125 to 0.0.1681094
(<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8202">#8202</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/8e91a9c5efcbed30b37d0318243d62420b5aa62d"><code>8e91a9c</code></a>
chore(deps-dev): bump puppeteer from 25.5.0 to 25.8.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8201">#8201</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/fa757b9765dbe619b33eb1f5116c0dec08e6857f"><code>fa757b9</code></a>
chore(deps-dev): bump cssnano from 8.0.5 to 8.0.6 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8199">#8199</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/58f4540952ebeae6c232315f5db5c7e49c3c41e4"><code>58f4540</code></a>
chore(deps): bump zensical/zensical from 0.0.54 to 0.0.55 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8198">#8198</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/d26101746c2f50f8b6374f41f34ddcd2a0625058"><code>d261017</code></a>
chore(deps-dev): bump devtools-protocol from 0.0.1679354 to 0.0.1680125
(<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8197">#8197</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/1275d68a557f6c9f81a169707a2ce219bcc6dc90"><code>1275d68</code></a>
fix: pan the globe from the center when the grab is off the sphere (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8174">#8174</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-js/commit/bf32decf357dd8cc46fc615a58f974eaee788ca2"><code>bf32dec</code></a>
fix: do not zoom in when panning the globe off a pole at min zoom (<a
href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/8182">#8182</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-gl-js/compare/v6.4.1...v6.5.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=maplibre-gl&package-manager=npm_and_yarn&previous-version=6.4.1&new-version=6.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:54:31 +00:00
dependabot[bot] 05fc9881a5 chore(deps): Bump the react group with 2 updates (#2096)
Bumps the react group with 2 updates:
[react-i18next](https://github.com/i18next/react-i18next) and
[@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react).

Updates `react-i18next` from 17.0.11 to 17.0.12
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md">react-i18next's
changelog</a>.</em></p>
<blockquote>
<h2>17.0.12</h2>
<ul>
<li>fix(IcuTrans): key-less <code>icu.macro</code> nodes
(<code>&lt;Trans&gt;Welcome, {name}!&lt;/Trans&gt;</code>,
<code>&lt;Select&gt;</code>, <code>&lt;Plural&gt;</code> without
<code>i18nKey</code>) rendered an empty string since 17.0.0. The macro
now emits <code>&lt;IcuTrans defaultTranslation=&quot;…&quot;&gt;</code>
without a key and <code>IcuTrans</code> passed <code>undefined</code> to
<code>t()</code>, which returns <code>''</code>. Like
<code>Trans</code>, <code>IcuTrans</code> now uses
<code>defaultTranslation</code> as the key when <code>i18nKey</code> is
not provided.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/react-i18next/commit/ea721fb58dccf1c569015969e5689c374ae20e4b"><code>ea721fb</code></a>
17.0.12</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/6c2a71e1c0a67b4265a89d177dfc5ebf87e62b8d"><code>6c2a71e</code></a>
fix(IcuTrans): use defaultTranslation as key when no i18nKey is
given</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/258c96daab2c332da0904469d2d7b53ae6da202b"><code>258c96d</code></a>
chore(examples): upgrade all example apps off unmaintained
toolchains</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/b8677c805cd6634902bae49b99143a8fa60a02fe"><code>b8677c8</code></a>
chore: update dependencies to close dependabot alerts</li>
<li><a
href="https://github.com/i18next/react-i18next/commit/aa9c92bd7fdbe638d970ef34c35eb1712fa0912d"><code>aa9c92b</code></a>
docs: point Trans component links at the current docs (<a
href="https://redirect.github.com/i18next/react-i18next/issues/1929">#1929</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/react-i18next/compare/v17.0.11...v17.0.12">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases">@​vitejs/plugin-react's
releases</a>.</em></p>
<blockquote>
<h2>plugin-react@6.1.0</h2>
<h3>Add experimental native React Compiler support (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1419">#1419</a>)</h3>
<p>Add experimental native React Compiler support.</p>
<p>You can use it by installing <code>oxc-transform-react</code> and
enabling it via the <code>compiler</code> option:</p>
<pre lang="sh"><code>npm install -D oxc-transform-react
</code></pre>
<pre lang="js"><code>import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
<p>export default defineConfig({<br />
plugins: [<br />
react({ compiler: true })<br />
]<br />
})<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md">@​vitejs/plugin-react's
changelog</a>.</em></p>
<blockquote>
<h2>6.1.0 (2026-08-19)</h2>
<h3>Add experimental native React Compiler support (<a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1419">#1419</a>)</h3>
<p>Add experimental native React Compiler support.</p>
<p>You can use it by installing <code>oxc-transform-react</code> and
enabling it via the <code>compiler</code> option:</p>
<pre lang="sh"><code>npm install -D oxc-transform-react
</code></pre>
<pre lang="js"><code>import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
<p>export default defineConfig({<br />
plugins: [<br />
react({ compiler: true })<br />
]<br />
})<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/39b31735bf79c2dd380eedaba7ed849256f92a29"><code>39b3173</code></a>
release: plugin-react@6.1.0 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1428">#1428</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/f1340b0c760b1c16e1b780eeba46fd933ddd52eb"><code>f1340b0</code></a>
feat(react): add native React Compiler support (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1419">#1419</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/9ab698eafc38ffa14861db450291ed2f6f557557"><code>9ab698e</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/1375">#1375</a>)</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:54:11 +00:00
dependabot[bot] c9bee2428d chore(deps-dev): Bump sass from 1.102.0 to 1.103.1 (#2097)
Bumps [sass](https://github.com/sass/dart-sass) from 1.102.0 to 1.103.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/releases">sass's
releases</a>.</em></p>
<blockquote>
<h2>Dart Sass 1.103.1</h2>
<p>To install Sass 1.103.1, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>No user-visible changes.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11031">full
changelog</a> for changes in earlier releases.</p>
<h2>Dart Sass 1.103.0</h2>
<p>To install Sass 1.103.0, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li><strong>Potentially breaking compatibility fix:</strong> Colors now
preserve &quot;analogous sets&quot; of missing channels during
conversions, per the CSS spec. For example, <code>color.to-space(lch(50%
none none), lab)</code> now returns <code>lab(50% none none)</code>
instead of <code>lab(50% 0 0)</code>.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11030">full
changelog</a> for changes in earlier releases.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's
changelog</a>.</em></p>
<blockquote>
<h2>1.103.1</h2>
<ul>
<li>No user-visible changes.</li>
</ul>
<h2>1.103.0</h2>
<ul>
<li><strong>Potentially breaking compatibility fix:</strong> Colors now
preserve &quot;analogous
sets&quot; of missing channels during conversions, per the CSS spec. For
example,
<code>color.to-space(lch(50% none none), lab)</code> now returns
<code>lab(50% none none)</code>
instead of <code>lab(50% 0 0)</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sass/dart-sass/commit/62243d455aa1d2ac7462e4c0ddda964ffbc82363"><code>62243d4</code></a>
Set committer metadata when creating a tag (<a
href="https://redirect.github.com/sass/dart-sass/issues/2838">#2838</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/ed4dcc728e99003c4b697faab688b5e268370b1b"><code>ed4dcc7</code></a>
Use more dot shorthands (<a
href="https://redirect.github.com/sass/dart-sass/issues/2837">#2837</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/ac3d92844559cf0d2fcc8de24362071550b1217e"><code>ac3d928</code></a>
Support analogous sets of missing channels (<a
href="https://redirect.github.com/sass/dart-sass/issues/2810">#2810</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/1e0cf2831d4cbba67cdbdd8518facc04858e2cc8"><code>1e0cf28</code></a>
Merge pull request <a
href="https://redirect.github.com/sass/dart-sass/issues/2834">#2834</a>
from ntkme/fix-release</li>
<li><a
href="https://github.com/sass/dart-sass/commit/f3bd86afe8f164180b46702bd8af53ffd6e43d5b"><code>f3bd86a</code></a>
Merge pull request <a
href="https://redirect.github.com/sass/dart-sass/issues/2835">#2835</a>
from sass/dart-sdk-version</li>
<li><a
href="https://github.com/sass/dart-sass/commit/287f9ba2cdb7c34d987b2ac1140d88f5fc98d2e1"><code>287f9ba</code></a>
Code review</li>
<li><a
href="https://github.com/sass/dart-sass/commit/91831b839bd785c97f51445e9ae0a560bc010d74"><code>91831b8</code></a>
Fix dartdoc error</li>
<li><a
href="https://github.com/sass/dart-sass/commit/0971ea94e95141303681edc2e9e0f0f6e829bdc7"><code>0971ea9</code></a>
Bump bufbuild/buf-action from 1.4.0 to 1.5.0 in /.github/util/initialize
(<a
href="https://redirect.github.com/sass/dart-sass/issues/2826">#2826</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/c45223b7ed302ae5d95ec610e35e093f3b2f7cf3"><code>c45223b</code></a>
Bump zizmorcore/zizmor-action from 0.6.0 to 0.6.2 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2828">#2828</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/cbb1db13e206c217f0bff9d8584b42ddddf146ab"><code>cbb1db1</code></a>
Bump dart-lang/setup-dart from 1.7.2 to 1.8.0 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2829">#2829</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/sass/dart-sass/compare/1.102.0...1.103.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sass&package-manager=npm_and_yarn&previous-version=1.102.0&new-version=1.103.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:53:49 +00:00
dependabot[bot] 61dd517dae chore(deps-dev): Bump eslint from 10.8.1 to 10.9.0 (#2098)
Bumps [eslint](https://github.com/eslint/eslint) from 10.8.1 to 10.9.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.9.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/08de88e50294c4e01f6cae97eceeb578da55792b"><code>08de88e</code></a>
feat: handle underflow in no-loss-of-precision (<a
href="https://redirect.github.com/eslint/eslint/issues/21218">#21218</a>)
(Rithish S)</li>
<li><a
href="https://github.com/eslint/eslint/commit/55db4791120ae591d88089c43127b7b0e16866d4"><code>55db479</code></a>
feat: add checkConditionalExpressions to
<code>no-unmodified-loop-condition</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21175">#21175</a>)
(sethamus)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/2ba302554e7a24e9909bbdd026fd0c2d1d0d8638"><code>2ba3025</code></a>
fix: prevent unsafe <code>no-var</code> autofix with hoisted functions
(<a
href="https://redirect.github.com/eslint/eslint/issues/21213">#21213</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8e6962219a605c5f5add10953aa31027da839194"><code>8e69622</code></a>
fix: Prevent no-var autofix when var is shadowed by catch parameter (<a
href="https://redirect.github.com/eslint/eslint/issues/21204">#21204</a>)
(Yang Hyeonjong)</li>
<li><a
href="https://github.com/eslint/eslint/commit/684b57972e1ddf25e076fb36189c60bbcacee635"><code>684b579</code></a>
fix: prefer-template invalid autofix creates a tagged template call (<a
href="https://redirect.github.com/eslint/eslint/issues/21207">#21207</a>)
(김채영)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/9ef407a3b051e74f50dc7fb8914e2bd89b3e5e53"><code>9ef407a</code></a>
docs: use eslint.config.* wherever config file names are listed (<a
href="https://redirect.github.com/eslint/eslint/issues/21216">#21216</a>)
(Marry (Subin Yang))</li>
<li><a
href="https://github.com/eslint/eslint/commit/87f66f4435c4df7f4f6815c939d153196ec03e3c"><code>87f66f4</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/585ef37516c0dc29ddb91ce2a2cdcc46fdbbd610"><code>585ef37</code></a>
docs: update architecture documentation (<a
href="https://redirect.github.com/eslint/eslint/issues/21112">#21112</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f3993b0547bace7370e9728ee7408af49d367d76"><code>f3993b0</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ffc87d6234b2aa4335eec069e5c4d6ac04832b9e"><code>ffc87d6</code></a>
docs: fix broken links in Further Reading sections (<a
href="https://redirect.github.com/eslint/eslint/issues/21203">#21203</a>)
(Minsu)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1a761e1d11b011fcb6bee181231a51010c500e4d"><code>1a761e1</code></a>
docs: update moved JSX specification links (<a
href="https://redirect.github.com/eslint/eslint/issues/21198">#21198</a>)
(Imran Mustafa)</li>
<li><a
href="https://github.com/eslint/eslint/commit/4d00ca4064ae0d1a75b604a16c68ab9f386ad388"><code>4d00ca4</code></a>
docs: update ESLint peer dependency to <code>^10.0.0</code> in shareable
configs (<a
href="https://redirect.github.com/eslint/eslint/issues/21202">#21202</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/510d1a2e87bc197219f42e195ddb638d2b183a5a"><code>510d1a2</code></a>
docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/899dbf131ce12a194b394bb8d67307df23509d17"><code>899dbf1</code></a>
chore: update github/codeql-action action to v4.37.7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21243">#21243</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/9aa38732177935bd1d7f1493732c0b67666be28a"><code>9aa3873</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21235">#21235</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/dc1e7a8416937edefe04cf836ee202a6fc03bedd"><code>dc1e7a8</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21208">#21208</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f878d212e9622da9513bcd60d2aedb2e8bb4fc8b"><code>f878d21</code></a>
ci: bump pnpm/action-setup from 6.0.9 to 6.0.10 (<a
href="https://redirect.github.com/eslint/eslint/issues/21200">#21200</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/4891e50aceadb0e886ad7d8ab5ae2beab563de85"><code>4891e50</code></a>
ci: bump github/codeql-action from 4.37.4 to 4.37.6 (<a
href="https://redirect.github.com/eslint/eslint/issues/21199">#21199</a>)
(dependabot[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/c27bc926e496985eb7911c09eb60914b2e4b5d0f"><code>c27bc92</code></a>
10.9.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/fa831d95b326e6d23671d9b2df1ea5dbc64f6f34"><code>fa831d9</code></a>
Build: changelog update for 10.9.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/899dbf131ce12a194b394bb8d67307df23509d17"><code>899dbf1</code></a>
chore: update github/codeql-action action to v4.37.7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21243">#21243</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/08de88e50294c4e01f6cae97eceeb578da55792b"><code>08de88e</code></a>
feat: handle underflow in no-loss-of-precision (<a
href="https://redirect.github.com/eslint/eslint/issues/21218">#21218</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9ef407a3b051e74f50dc7fb8914e2bd89b3e5e53"><code>9ef407a</code></a>
docs: use eslint.config.* wherever config file names are listed (<a
href="https://redirect.github.com/eslint/eslint/issues/21216">#21216</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9aa38732177935bd1d7f1493732c0b67666be28a"><code>9aa3873</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21235">#21235</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2ba302554e7a24e9909bbdd026fd0c2d1d0d8638"><code>2ba3025</code></a>
fix: prevent unsafe <code>no-var</code> autofix with hoisted functions
(<a
href="https://redirect.github.com/eslint/eslint/issues/21213">#21213</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/dc1e7a8416937edefe04cf836ee202a6fc03bedd"><code>dc1e7a8</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21208">#21208</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/87f66f4435c4df7f4f6815c939d153196ec03e3c"><code>87f66f4</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/8e6962219a605c5f5add10953aa31027da839194"><code>8e69622</code></a>
fix: Prevent no-var autofix when var is shadowed by catch parameter (<a
href="https://redirect.github.com/eslint/eslint/issues/21204">#21204</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.8.1...v10.9.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.8.1&new-version=10.9.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 13:53:24 +00:00
Nitish Reddy M 29cf3f1a97 fix(desktop): open default browser on startup (#2095)
Fixes #934

## Summary

The Go desktop binary started its local server and printed the URL,
but never opened a browser automatically.

This PR:

- opens the default browser after the listener successfully binds
- uses the actual runtime URL
- uses a stdlib-only cross-platform launcher
- keeps browser-open failures non-fatal
- adds `--no-browser` for headless/Docker use
- leaves the normal Vite/web development flow unchanged

The listener is created before launching the browser so the browser
cannot race the server startup path.

## Platform behavior

- Windows: `rundll32 url.dll,FileProtocolHandler`
- macOS: `open`
- Linux: `xdg-open`

No shell command strings are used; arguments are passed directly through
`exec.Command`.

## Testing

- `go test ./...`
- `go vet ./...`
- `go build ./...`
- `git diff --check`
- repeated manual Windows startup verification (3 clean runs, confirmed
the
  browser opened and hit the server, no duplicate launches)
- `--no-browser` verification (confirmed no launch attempt occurs)
- non-fatal launcher failure covered by a unit test that injects a
  nonexistent opener binary

macOS/Linux launch paths were not runtime-tested on this Windows machine
—
they follow the standard `open`/`xdg-open` convention used across other
Go
CLIs but are unverified here. The full packaged release flow (`gox`,
`go.rice`, `go-winres`) was not exercised locally.
2026-08-24 07:28:40 +03:00
dependabot[bot] 5c1c3fd8cb chore(deps): Bump brace-expansion (#2093)
Bumps and
[brace-expansion](https://github.com/juliangruber/brace-expansion).
These dependencies needed to be updated together.
Updates `brace-expansion` from 5.0.5 to 5.0.9
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/fbcf8ec75b88c79374b4aac06559b1a5288a1223"><code>fbcf8ec</code></a>
5.0.9</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/f6f3939e531052d536c9066b100ad19d4175d3cc"><code>f6f3939</code></a>
test: cover dropping empties when only some prefixes are empty</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/688a99eeaab02627c2b89ba8ba4821fecfa659cf"><code>688a99e</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/c66e5f9bce61a1c2b232cdfcc5178cd26322a979"><code>c66e5f9</code></a>
docs: make the maxLength example produce a non-empty result (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/137">#137</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/473d3e95e9614c783a6033f9c8577c0ba9cb6881"><code>473d3e9</code></a>
Bump linkify-it from 5.0.1 to 5.0.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/128">#128</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/96a63c0011c0288846ad41773c73e3fbd0906b59"><code>96a63c0</code></a>
5.0.8</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/a1bd33999ea75262c4749fff3bbb0d1372bd07b5"><code>a1bd339</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/592a36fd18455c37f81e0848a642d84c63147fa7"><code>592a36f</code></a>
Bump tar from 7.5.16 to 7.5.20 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/127">#127</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/bd146909cd6c7bedde61a5d6428ba252860a0159"><code>bd14690</code></a>
Bump brace-expansion from 2.0.2 to 2.1.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/126">#126</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/e729ba647887042f16b531fdb3d8ac3d7762ccad"><code>e729ba6</code></a>
Bump ws from 8.19.0 to 8.21.1 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/124">#124</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.9">compare
view</a></li>
</ul>
</details>
<br />

Updates `brace-expansion` from 5.0.8 to 5.0.9
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/fbcf8ec75b88c79374b4aac06559b1a5288a1223"><code>fbcf8ec</code></a>
5.0.9</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/f6f3939e531052d536c9066b100ad19d4175d3cc"><code>f6f3939</code></a>
test: cover dropping empties when only some prefixes are empty</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/688a99eeaab02627c2b89ba8ba4821fecfa659cf"><code>688a99e</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/c66e5f9bce61a1c2b232cdfcc5178cd26322a979"><code>c66e5f9</code></a>
docs: make the maxLength example produce a non-empty result (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/137">#137</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/473d3e95e9614c783a6033f9c8577c0ba9cb6881"><code>473d3e9</code></a>
Bump linkify-it from 5.0.1 to 5.0.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/128">#128</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/96a63c0011c0288846ad41773c73e3fbd0906b59"><code>96a63c0</code></a>
5.0.8</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/a1bd33999ea75262c4749fff3bbb0d1372bd07b5"><code>a1bd339</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/592a36fd18455c37f81e0848a642d84c63147fa7"><code>592a36f</code></a>
Bump tar from 7.5.16 to 7.5.20 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/127">#127</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/bd146909cd6c7bedde61a5d6428ba252860a0159"><code>bd14690</code></a>
Bump brace-expansion from 2.0.2 to 2.1.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/126">#126</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/e729ba647887042f16b531fdb3d8ac3d7762ccad"><code>e729ba6</code></a>
Bump ws from 8.19.0 to 8.21.1 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/124">#124</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.9">compare
view</a></li>
</ul>
</details>
<br />

Updates `brace-expansion` from 1.1.12 to 1.1.18
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/fbcf8ec75b88c79374b4aac06559b1a5288a1223"><code>fbcf8ec</code></a>
5.0.9</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/f6f3939e531052d536c9066b100ad19d4175d3cc"><code>f6f3939</code></a>
test: cover dropping empties when only some prefixes are empty</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/688a99eeaab02627c2b89ba8ba4821fecfa659cf"><code>688a99e</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/c66e5f9bce61a1c2b232cdfcc5178cd26322a979"><code>c66e5f9</code></a>
docs: make the maxLength example produce a non-empty result (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/137">#137</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/473d3e95e9614c783a6033f9c8577c0ba9cb6881"><code>473d3e9</code></a>
Bump linkify-it from 5.0.1 to 5.0.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/128">#128</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/96a63c0011c0288846ad41773c73e3fbd0906b59"><code>96a63c0</code></a>
5.0.8</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/a1bd33999ea75262c4749fff3bbb0d1372bd07b5"><code>a1bd339</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/592a36fd18455c37f81e0848a642d84c63147fa7"><code>592a36f</code></a>
Bump tar from 7.5.16 to 7.5.20 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/127">#127</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/bd146909cd6c7bedde61a5d6428ba252860a0159"><code>bd14690</code></a>
Bump brace-expansion from 2.0.2 to 2.1.2 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/126">#126</a>)</li>
<li><a
href="https://github.com/juliangruber/brace-expansion/commit/e729ba647887042f16b531fdb3d8ac3d7762ccad"><code>e729ba6</code></a>
Bump ws from 8.19.0 to 8.21.1 (<a
href="https://redirect.github.com/juliangruber/brace-expansion/issues/124">#124</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.9">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-19 22:20:21 +00:00
dependabot[bot] 4424276073 chore(deps-dev): Bump vite from 7.3.2 to 8.2.1 (#2081)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 7.3.2 to 8.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>plugin-legacy@8.2.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.2.1/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.2.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.2.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.2.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.2.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>plugin-legacy@8.2.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.2.0/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.2.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.2.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.2.0-beta.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.2.0-beta.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.5</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.4</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.4/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.3</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.3/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.1.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.1.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>plugin-legacy@8.1.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.1.0/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>plugin-legacy@8.1.0-beta.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.1.0-beta.0/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.1.0-beta.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.1.0-beta.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.16</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.16/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.2.0...v8.2.1">8.2.1</a>
(2026-08-06)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>build:</strong> make client chunkImportMap work with
<code>sharedPlugins: true</code> (<a
href="https://redirect.github.com/vitejs/vite/issues/23184">#23184</a>)
(<a
href="https://github.com/vitejs/vite/commit/15f03073c915d6ffb9a1fda447ef66b02bf5cde8">15f0307</a>)</li>
<li><strong>bundled-dev:</strong> inject client script tag before chunk
scripts (<a
href="https://redirect.github.com/vitejs/vite/issues/23161">#23161</a>)
(<a
href="https://github.com/vitejs/vite/commit/eac0cc84aa2472a85a19ee84561c1ba71e381a55">eac0cc8</a>)</li>
<li><strong>css:</strong> don't re-run lightningcss visitor during
minify (fix <a
href="https://redirect.github.com/vitejs/vite/issues/23146">#23146</a>)
(<a
href="https://redirect.github.com/vitejs/vite/issues/23147">#23147</a>)
(<a
href="https://github.com/vitejs/vite/commit/de041a79b05a0be965c874592fe2c1505bcd48df">de041a7</a>)</li>
<li><strong>deps:</strong> update all non-major dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/23136">#23136</a>)
(<a
href="https://github.com/vitejs/vite/commit/14454fd8c9a399bc3fdc193e28465b6fcf001e4d">14454fd</a>)</li>
<li><strong>deps:</strong> update rolldown-related dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/23070">#23070</a>)
(<a
href="https://github.com/vitejs/vite/commit/7ac6f7f590747bbdab9958e2c016e3dd04f10542">7ac6f7f</a>)</li>
<li>don't mutate the user config when resolving the lib entry from the
top-level <code>input</code> (<a
href="https://redirect.github.com/vitejs/vite/issues/23135">#23135</a>)
(<a
href="https://github.com/vitejs/vite/commit/b4bf59686a7ac238929e91a6e1708c739b843a2f">b4bf596</a>)</li>
<li>handle shebang ending with uncommon line terminators (<a
href="https://redirect.github.com/vitejs/vite/issues/23038">#23038</a>)
(<a
href="https://github.com/vitejs/vite/commit/17f7b2f193a110d0b47742ad296d182cb4666ce7">17f7b2f</a>)</li>
<li><strong>server:</strong> use a random port when port is 0 (<a
href="https://redirect.github.com/vitejs/vite/issues/23158">#23158</a>)
(<a
href="https://github.com/vitejs/vite/commit/fddf4ea41de5f7889037a2f957438857ac12a260">fddf4ea</a>)</li>
</ul>
<h3>Performance Improvements</h3>
<ul>
<li><strong>css:</strong> look up pure CSS chunks through a Set (<a
href="https://redirect.github.com/vitejs/vite/issues/23114">#23114</a>)
(<a
href="https://github.com/vitejs/vite/commit/1331b0b438b1e7193effb7d2341660bccb9c3155">1331b0b</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><strong>build:</strong> fix incomplete <code>@default</code> for
build.minify (<a
href="https://redirect.github.com/vitejs/vite/issues/23177">#23177</a>)
(<a
href="https://github.com/vitejs/vite/commit/ef02435114c57d0422028f0e6987f3df8db72969">ef02435</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li><strong>deps:</strong> update dependency rolldown-plugin-dts to
^0.28.0 (<a
href="https://redirect.github.com/vitejs/vite/issues/23137">#23137</a>)
(<a
href="https://github.com/vitejs/vite/commit/4adc1e7931d4beceb4e236d9a271d057c858a06f">4adc1e7</a>)</li>
<li><strong>deps:</strong> update dependency strip-literal to v4 (<a
href="https://redirect.github.com/vitejs/vite/issues/23140">#23140</a>)
(<a
href="https://github.com/vitejs/vite/commit/9db65ce63488ea8f08a3c98dcdc4282b17bd33ff">9db65ce</a>)</li>
</ul>
<h3>Code Refactoring</h3>
<ul>
<li><strong>bundled-dev:</strong> avoid injecting server values in the
bundle (<a
href="https://redirect.github.com/vitejs/vite/issues/22967">#22967</a>)
(<a
href="https://github.com/vitejs/vite/commit/23b8a088dec9dcc3f1c1353f2074f8644b3cc21f">23b8a08</a>)</li>
<li><strong>bundled-dev:</strong> remove rolldown lazy stub module
workaround (<a
href="https://redirect.github.com/vitejs/vite/issues/23129">#23129</a>)
(<a
href="https://github.com/vitejs/vite/commit/e72036eed2e28936ed824971b18aeaa3900857f6">e72036e</a>)</li>
</ul>
<h3>Tests</h3>
<ul>
<li><strong>bundled-dev:</strong> enable sourcemap playgrounds (<a
href="https://redirect.github.com/vitejs/vite/issues/23080">#23080</a>)
(<a
href="https://github.com/vitejs/vite/commit/c2155fe4d5c8d25fba3a7366d367e3296ae669fa">c2155fe</a>)</li>
<li>reduce logs (<a
href="https://redirect.github.com/vitejs/vite/issues/23138">#23138</a>)
(<a
href="https://github.com/vitejs/vite/commit/7673c02e53343ae9356c1f496c1c1da2eb732ac1">7673c02</a>)</li>
</ul>
<h2><a
href="https://github.com/vitejs/vite/compare/v8.2.0-beta.0...v8.2.0">8.2.0</a>
(2026-07-30)</h2>
<h3>Features</h3>
<ul>
<li>add <code>input</code> to <code>server.fs.allow</code> (<a
href="https://redirect.github.com/vitejs/vite/issues/23035">#23035</a>)
(<a
href="https://github.com/vitejs/vite/commit/95a3cdab83e1125b03d2e8dd942fb6b64209e5fa">95a3cda</a>)</li>
<li><strong>bundled-dev:</strong> reload once after rebuild instead of
via the fallback page (<a
href="https://redirect.github.com/vitejs/vite/issues/23106">#23106</a>)
(<a
href="https://github.com/vitejs/vite/commit/b24381d741941b9ce2b1c07db62cc5f4d7bad981">b24381d</a>)</li>
<li><strong>bundled-dev:</strong> support worker file update accepted by
HMR (<a
href="https://redirect.github.com/vitejs/vite/issues/23068">#23068</a>)
(<a
href="https://github.com/vitejs/vite/commit/0d04351fdc12258c75b9f1cda5780fdb836ed0ef">0d04351</a>)</li>
<li><strong>config:</strong> include column in config incompatibility
location (<a
href="https://redirect.github.com/vitejs/vite/issues/23064">#23064</a>)
(<a
href="https://github.com/vitejs/vite/commit/8a245726944ed29225920d49be77c33c6e03afc8">8a24572</a>)</li>
<li><strong>dev:</strong> resolve interface name for explicit host in
network URLs (<a
href="https://redirect.github.com/vitejs/vite/issues/22965">#22965</a>)
(<a
href="https://github.com/vitejs/vite/commit/3ac77d9dd742968961af38a5a91ed6b061ceda7d">3ac77d9</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>bundledDev:</strong> print build errors to the terminal when
an HMR update fails (<a
href="https://redirect.github.com/vitejs/vite/issues/23024">#23024</a>)
(<a
href="https://github.com/vitejs/vite/commit/41c465896e8b11b1eb9c5fbdafbdcc528e189a2c">41c4658</a>)</li>
<li><strong>deps:</strong> update all non-major dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/23069">#23069</a>)
(<a
href="https://github.com/vitejs/vite/commit/4c07b74416f859d7e8bdace13409ef2d080edf76">4c07b74</a>)</li>
<li><strong>hmr:</strong> preserve environment snapshot during server
restart (<a
href="https://redirect.github.com/vitejs/vite/issues/22992">#22992</a>)
(<a
href="https://github.com/vitejs/vite/commit/b1186c36d06bb94941c58e8272fc4acb8512c93b">b1186c3</a>)</li>
<li><strong>importAnalysis:</strong> interop imports injected into
optimized dep files by plugins (<a
href="https://redirect.github.com/vitejs/vite/issues/23029">#23029</a>)
(<a
href="https://github.com/vitejs/vite/commit/8c2a87d41fb24536e59643351758084cde4d0dd7">8c2a87d</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/421615865dad3ed39137d17281814fc78a41246c"><code>4216158</code></a>
release: v8.2.1</li>
<li><a
href="https://github.com/vitejs/vite/commit/fddf4ea41de5f7889037a2f957438857ac12a260"><code>fddf4ea</code></a>
fix(server): use a random port when port is 0 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23158">#23158</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/de041a79b05a0be965c874592fe2c1505bcd48df"><code>de041a7</code></a>
fix(css): don't re-run lightningcss visitor during minify (fix <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23146">#23146</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23147">#23147</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/15f03073c915d6ffb9a1fda447ef66b02bf5cde8"><code>15f0307</code></a>
fix(build): make client chunkImportMap work with <code>sharedPlugins:
true</code> (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23184">#23184</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/c2155fe4d5c8d25fba3a7366d367e3296ae669fa"><code>c2155fe</code></a>
test(bundled-dev): enable sourcemap playgrounds (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23080">#23080</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/ef02435114c57d0422028f0e6987f3df8db72969"><code>ef02435</code></a>
docs(build): fix incomplete <code>@default</code> for build.minify (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23177">#23177</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/eac0cc84aa2472a85a19ee84561c1ba71e381a55"><code>eac0cc8</code></a>
fix(bundled-dev): inject client script tag before chunk scripts (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23161">#23161</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/23b8a088dec9dcc3f1c1353f2074f8644b3cc21f"><code>23b8a08</code></a>
refactor(bundled-dev): avoid injecting server values in the bundle (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22967">#22967</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/e72036eed2e28936ed824971b18aeaa3900857f6"><code>e72036e</code></a>
refactor(bundled-dev): remove rolldown lazy stub module workaround (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23129">#23129</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/14454fd8c9a399bc3fdc193e28465b6fcf001e4d"><code>14454fd</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/23136">#23136</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v8.2.1/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: HarelM <harel.mazor@gmail.com>
2026-08-19 22:09:14 +00:00
dependabot[bot] f59e481280 chore(deps): Bump @maplibre/maplibre-gl-inspect from 1.8.2 to 1.9.0 (#2086)
Bumps
[@maplibre/maplibre-gl-inspect](https://github.com/maplibre/maplibre-gl-inspect)
from 1.8.2 to 1.9.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-inspect/releases">@​maplibre/maplibre-gl-inspect's
releases</a>.</em></p>
<blockquote>
<h2>v1.9.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add backwards-compatible support for MapLibre GL JS v6 and its ESM
distribution (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/pull/441">#441</a>)
(by <a
href="https://github.com/birkskyum"><code>@​birkskyum</code></a>)</li>
<li>Use maplibre's <code>Popup</code> class and avoid using
<code>window.maplibergl</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/pull/441">#441</a>)
(by <a
href="https://github.com/birkskyum"><code>@​birkskyum</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Render nested GeoJSON feature properties as JSON in inspection
popups.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-gl-inspect/blob/main/CHANGELOG.md">@​maplibre/maplibre-gl-inspect's
changelog</a>.</em></p>
<blockquote>
<h2>1.9.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add backwards-compatible support for MapLibre GL JS v6 and its ESM
distribution (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/pull/441">#441</a>)
(by <a
href="https://github.com/birkskyum"><code>@​birkskyum</code></a>)</li>
<li>Use maplibre's <code>Popup</code> class and avoid using
<code>window.maplibergl</code> (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/pull/441">#441</a>)
(by <a
href="https://github.com/birkskyum"><code>@​birkskyum</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Render nested GeoJSON feature properties as JSON in inspection
popups.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/2dd99486a5af013444ac3a0e8a4eba41059ecafd"><code>2dd9948</code></a>
Bump js version to 1.9.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/442">#442</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/b00c29f8e845bb1fb330d44395b8b9e11f6248c6"><code>b00c29f</code></a>
feat: MapLibre GL JS 6 Support (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/441">#441</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/066659175eabbca69867e78a83a4a4d69d9d337f"><code>0666591</code></a>
Bump rollup from 4.62.3 to 4.62.4 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/440">#440</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/98422cbfb333876e52ad3e30cf141f73bacc5ff5"><code>98422cb</code></a>
Bump typescript-eslint from 8.65.0 to 8.66.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/439">#439</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/c4aeac2b8930ede182e7d60fac9163706313111d"><code>c4aeac2</code></a>
Bump typescript-eslint from 8.64.0 to 8.65.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/436">#436</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/022b1bc2b60dc2064b6bc00089c4eea53328f776"><code>022b1bc</code></a>
Bump rollup from 4.62.2 to 4.62.3 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/435">#435</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/40787916975a58f35b512047b166457839c30e33"><code>4078791</code></a>
Bump typescript-eslint from 8.63.0 to 8.64.0 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/432">#432</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/89f45a051dfb169894f98f8cf2ccf9459c0a2f13"><code>89f45a0</code></a>
Bump st from 4.0.3 to 4.0.4 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/431">#431</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/e0790c6eb59264bbc6ac8d14adaa89409991c65f"><code>e0790c6</code></a>
Bump actions/setup-node from 6 to 7 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/430">#430</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-gl-inspect/commit/bcb63208a97c46792c8c66f1b1976c4bebf75f1a"><code>bcb6320</code></a>
Bump st from 3.0.3 to 4.0.3 (<a
href="https://redirect.github.com/maplibre/maplibre-gl-inspect/issues/429">#429</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-gl-inspect/compare/v1.8.2...v1.9.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-19 12:44:32 +00:00
dependabot[bot] 4c993403f5 chore(deps): Bump github/codeql-action/autobuild from 4.37.4 to 4.37.7 (#2089)
Bumps
[github/codeql-action/autobuild](https://github.com/github/codeql-action)
from 4.37.4 to 4.37.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/autobuild's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd"><code>ff2f1c6</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4093">#4093</a>
from github/update-v4.37.7-be7a3dbb8</li>
<li><a
href="https://github.com/github/codeql-action/commit/951a133f96aa2114dd747e9e437305335d0bde16"><code>951a133</code></a>
Update changelog for v4.37.7</li>
<li><a
href="https://github.com/github/codeql-action/commit/be7a3dbb8147b82cd6d27e0707105b36aa190fc1"><code>be7a3db</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4087">#4087</a>
from github/dependabot/npm_and_yarn/npm-minor-0aa561...</li>
<li><a
href="https://github.com/github/codeql-action/commit/9310334b11405b305d9444edfa56cd86e2f1e4fe"><code>9310334</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4086">#4086</a>
from github/mbg/thread-action-state-to-codeql</li>
<li><a
href="https://github.com/github/codeql-action/commit/b4d8a54218a8792de9af2f6f32e33af899ca5212"><code>b4d8a54</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/ab5db2519c3344f2fa61c711fa2d6ad135829200"><code>ab5db25</code></a>
Bump the npm-minor group across 1 directory with 8 updates</li>
<li><a
href="https://github.com/github/codeql-action/commit/38055a3c3cf3979323eaf70fc6c73a8690250bde"><code>38055a3</code></a>
Drop <code>logger</code> from <code>databaseInitCluster</code> in
interface</li>
<li><a
href="https://github.com/github/codeql-action/commit/1f87aed5e66849f0c43ae147377cc77f2d98ac99"><code>1f87aed</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4085">#4085</a>
from github/update-bundle/codeql-bundle-v2.26.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/dc1b98ad1c2f13ccf9fc33fb82f32fc76f944253"><code>dc1b98a</code></a>
Make <code>logger</code> available to <code>getCodeQLForCmd</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/6f0220ee37121218af472efbde25f06907a4da4f"><code>6f0220e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4084">#4084</a>
from github/navntoft/bump-undici</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/f205ea1c3313d32999d8d6a48b4f6530d4437b38...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/autobuild&package-manager=github_actions&previous-version=4.37.4&new-version=4.37.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-19 15:33:18 +03:00
dependabot[bot] a2a13b5fcc chore(deps): Bump github/codeql-action/analyze from 4.37.6 to 4.37.7 (#2088)
Bumps
[github/codeql-action/analyze](https://github.com/github/codeql-action)
from 4.37.6 to 4.37.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd"><code>ff2f1c6</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4093">#4093</a>
from github/update-v4.37.7-be7a3dbb8</li>
<li><a
href="https://github.com/github/codeql-action/commit/951a133f96aa2114dd747e9e437305335d0bde16"><code>951a133</code></a>
Update changelog for v4.37.7</li>
<li><a
href="https://github.com/github/codeql-action/commit/be7a3dbb8147b82cd6d27e0707105b36aa190fc1"><code>be7a3db</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4087">#4087</a>
from github/dependabot/npm_and_yarn/npm-minor-0aa561...</li>
<li><a
href="https://github.com/github/codeql-action/commit/9310334b11405b305d9444edfa56cd86e2f1e4fe"><code>9310334</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4086">#4086</a>
from github/mbg/thread-action-state-to-codeql</li>
<li><a
href="https://github.com/github/codeql-action/commit/b4d8a54218a8792de9af2f6f32e33af899ca5212"><code>b4d8a54</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/ab5db2519c3344f2fa61c711fa2d6ad135829200"><code>ab5db25</code></a>
Bump the npm-minor group across 1 directory with 8 updates</li>
<li><a
href="https://github.com/github/codeql-action/commit/38055a3c3cf3979323eaf70fc6c73a8690250bde"><code>38055a3</code></a>
Drop <code>logger</code> from <code>databaseInitCluster</code> in
interface</li>
<li><a
href="https://github.com/github/codeql-action/commit/1f87aed5e66849f0c43ae147377cc77f2d98ac99"><code>1f87aed</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4085">#4085</a>
from github/update-bundle/codeql-bundle-v2.26.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/dc1b98ad1c2f13ccf9fc33fb82f32fc76f944253"><code>dc1b98a</code></a>
Make <code>logger</code> available to <code>getCodeQLForCmd</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/6f0220ee37121218af472efbde25f06907a4da4f"><code>6f0220e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4084">#4084</a>
from github/navntoft/bump-undici</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/5595ccaf912efad79be6eef63a5619ff05969be3...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/analyze&package-manager=github_actions&previous-version=4.37.6&new-version=4.37.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-19 15:33:03 +03:00
dependabot[bot] 290bd75e11 chore(deps): Bump github/codeql-action/init from 4.37.5 to 4.37.7 (#2090)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.5 to 4.37.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.7 - 13 Aug 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li>
</ul>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd"><code>ff2f1c6</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4093">#4093</a>
from github/update-v4.37.7-be7a3dbb8</li>
<li><a
href="https://github.com/github/codeql-action/commit/951a133f96aa2114dd747e9e437305335d0bde16"><code>951a133</code></a>
Update changelog for v4.37.7</li>
<li><a
href="https://github.com/github/codeql-action/commit/be7a3dbb8147b82cd6d27e0707105b36aa190fc1"><code>be7a3db</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4087">#4087</a>
from github/dependabot/npm_and_yarn/npm-minor-0aa561...</li>
<li><a
href="https://github.com/github/codeql-action/commit/9310334b11405b305d9444edfa56cd86e2f1e4fe"><code>9310334</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4086">#4086</a>
from github/mbg/thread-action-state-to-codeql</li>
<li><a
href="https://github.com/github/codeql-action/commit/b4d8a54218a8792de9af2f6f32e33af899ca5212"><code>b4d8a54</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/ab5db2519c3344f2fa61c711fa2d6ad135829200"><code>ab5db25</code></a>
Bump the npm-minor group across 1 directory with 8 updates</li>
<li><a
href="https://github.com/github/codeql-action/commit/38055a3c3cf3979323eaf70fc6c73a8690250bde"><code>38055a3</code></a>
Drop <code>logger</code> from <code>databaseInitCluster</code> in
interface</li>
<li><a
href="https://github.com/github/codeql-action/commit/1f87aed5e66849f0c43ae147377cc77f2d98ac99"><code>1f87aed</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4085">#4085</a>
from github/update-bundle/codeql-bundle-v2.26.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/dc1b98ad1c2f13ccf9fc33fb82f32fc76f944253"><code>dc1b98a</code></a>
Make <code>logger</code> available to <code>getCodeQLForCmd</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/6f0220ee37121218af472efbde25f06907a4da4f"><code>6f0220e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4084">#4084</a>
from github/navntoft/bump-undici</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/d1ba80a13dd99fba24a470575428917156a28b43...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.5&new-version=4.37.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:07:48 +00:00
dependabot[bot] 9f094b0dfa chore(deps-dev): Bump typescript-eslint from 8.66.0 to 8.67.0 (#2083)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.66.0 to 8.67.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.67.0</h2>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg </li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Claude Sonnet 5</li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg</li>
<li>Josh Goldberg </li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/20a261fb8e62351e88176b075090dc9276d26072"><code>20a261f</code></a>
chore(release): publish 8.67.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/c245fbb611d8cff3199ffa3a169df156d0e35928"><code>c245fbb</code></a>
feat(typescript-eslint): export basic globs for using tseslint (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12105">#12105</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/3b155bb1344fd7ce83086cf2f864a7e8f3b4a217"><code>3b155bb</code></a>
chore: use typescript 7 for typechecking (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12601">#12601</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.66.0&new-version=8.67.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-14 14:01:43 +00:00
dependabot[bot] a807f07e5e chore(deps-dev): Bump i18next-cli from 1.67.9 to 1.69.0 (#2085)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.9
to 1.69.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.69.0</h2>
<ul>
<li>feat(lint): support <code>acceptedTags: 'all'</code> to lint every
JSX tag, including custom
components, instead of the recommended built-in tag list. Useful
together with
<code>acceptedAttributes</code> in codebases with many custom JSX
elements where maintaining an
explicit tag accept-list is impractical. <code>ignoredTags</code> and
<code>transComponents</code> still take
precedence, and the default behavior when <code>acceptedTags</code> is
unset is unchanged
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/282">#282</a>).</li>
</ul>
<h2>1.68.0</h2>
<ul>
<li>feat(status): add <code>--unused</code> to report only unused
translation keys — keys present in the
translation files but no longer used in the source code.
&quot;Unused&quot; is defined as what
<code>extract</code> with <code>removeUnusedKeys</code> would delete:
the report runs the extractor in dry-run
mode (with <code>removeUnusedKeys</code> forced on, regardless of the
config) and diffs the existing
key set against the pruned result, so it inherits all of extract's
edge-case handling
(plural variants, context variants, <code>preservePatterns</code>,
<code>ignoreNamespaces</code>). The command
never modifies any files and exits with a non-zero status code when
unused keys are found
(or when source files failed to parse, since that could cause false
positives), making it
a dedicated CI check alongside the missing-translations check
<code>status &lt;locale&gt;</code>. Combines
with the locale argument and <code>--namespace</code>, e.g.
<code>i18next-cli status en --unused</code>. Note
that static analysis cannot detect dynamically constructed keys; to find
keys that are
truly unused at runtime, see <a
href="https://www.locize.com/docs/guides/find-unused-translations">https://www.locize.com/docs/guides/find-unused-translations</a>
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/281">#281</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/eacc2be20d2ba991de910d0598566fcf2ef042de"><code>eacc2be</code></a>
1.69.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/28caa1b2a4e15558d4562bfc5955d592606cef8c"><code>28caa1b</code></a>
feat(lint): support acceptedTags: 'all' to lint every tag including
custom co...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/4c61b53b10f8b84d51889e7e1fd358115abb4a43"><code>4c61b53</code></a>
fix(test): make the status --unused read-only assertion pass on
Windows</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/0962adb39f52f5d87bfb0b10ca2afe496ffd194c"><code>0962adb</code></a>
1.68.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/7295a4179011801bf5c482aceca259ac98a6cdb2"><code>7295a41</code></a>
feat(status): add --unused to report only unused translation keys (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/281">#281</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.9...v1.69.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.9&new-version=1.69.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-14 13:54:23 +00:00
dependabot[bot] 21a08ef62e chore(deps): Bump pmtiles from 4.4.1 to 4.5.0 (#2084)
Bumps [pmtiles](https://github.com/protomaps/pmtiles) from 4.4.1 to
4.5.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/protomaps/pmtiles/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pmtiles&package-manager=npm_and_yarn&previous-version=4.4.1&new-version=4.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-14 13:52:28 +00:00
dependabot[bot] 0cde67c33c chore(deps-dev): Bump i18next-cli from 1.67.8 to 1.67.9 (#2080)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.8
to 1.67.9.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.9</h2>
<ul>
<li>fix(types): derive <code>defaultNS</code> from the generated
resources when <code>extract.defaultNS</code> is
<code>false</code>. i18next's type system cannot express
<code>defaultNS: false</code> — <code>DefaultNamespace =
TypeOptions['defaultNS']</code> feeds <code>Ns extends Namespace</code>,
so emitting <code>false</code> made every
<code>t()</code> call silently accept any string and the generated
definitions checked nothing. The
namespace is now taken from the keys of the generated
<code>Resources</code> interface (deduplicated
and sorted, preferring <code>'translation'</code>, and preferring a
namespace inside <code>types.basePath</code>
over one resolved outside of it), with a warning naming the pick.
<code>false</code> is still emitted
when the resource files are named after locales (<code>en.json</code> +
<code>de.json</code>), where deriving
would turn sibling languages into namespaces. Only affects
<code>i18next.d.ts</code> on first
creation; <code>resources.d.ts</code> and <code>--ci</code> behavior are
unchanged
(<a
href="https://redirect.github.com/i18next/i18next-cli/pull/280">#280</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/00708034b762476c5038a16a21f5b700a35f04e0"><code>0070803</code></a>
1.67.9</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/454065065630ade85c46f315ddf7b6c07249e74f"><code>4540650</code></a>
fix(types): harden defaultNS derivation when extract.defaultNS is
false</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/e42bdaf3976e5d453953298f67dd0b2451dd8c64"><code>e42bdaf</code></a>
fix(types): derive defaultNS from generated resources when
extract.defaultNS ...</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.8...v1.67.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.8&new-version=1.67.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 13:51:29 +00:00
dependabot[bot] ca7e54a4ed chore(deps-dev): Bump eslint from 10.8.0 to 10.8.1 (#2079)
Bumps [eslint](https://github.com/eslint/eslint) from 10.8.0 to 10.8.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.8.1</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4"><code>18eb0a7</code></a>
fix: prevent ASI hazard in <code>no-unused-labels</code> autofix (<a
href="https://redirect.github.com/eslint/eslint/issues/21173">#21173</a>)
(dongkyu lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/151ba3f5834a0909e8b9b1736f4889ac694c0104"><code>151ba3f</code></a>
fix: false positives in <code>getter-return</code> and
<code>accessor-pairs</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21163">#21163</a>)
(Grit)</li>
<li><a
href="https://github.com/eslint/eslint/commit/6898df9364639ee64b9448a4cb6b08a30c16bd37"><code>6898df9</code></a>
fix: ignore meta-property names in <code>id-denylist</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21166">#21166</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/4d7db6628e2badf0857cb88734fe641c3874bce9"><code>4d7db66</code></a>
fix: ignore meta-property names in <code>id-match</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21167">#21167</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/677214e7eea83d8bc6e4b79eea871577e1369d5f"><code>677214e</code></a>
fix: handle ASI hazards in no-unused-vars removeVar suggestion (<a
href="https://redirect.github.com/eslint/eslint/issues/20935">#20935</a>)
(kuldeep kumar)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560"><code>7d0cbf8</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0a05812adb12598b32e85297b98df5ad14501d60"><code>0a05812</code></a>
docs: add missing backticks to <code>no-duplicate-imports.js</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21183">#21183</a>)
(Lee Daeun)</li>
<li><a
href="https://github.com/eslint/eslint/commit/678c90b55da2889d4400cbf6e2584ab683faf202"><code>678c90b</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8a104242e8e1c5614940fab7324346974cff7d26"><code>8a10424</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/69bb948061105426dbe6e3c931fcda783286e020"><code>69bb948</code></a>
docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/0a148005051fded2ef1d14cc228ae505251b4b10"><code>0a14800</code></a>
chore: update github/codeql-action action to v4.37.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/21196">#21196</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93"><code>05adcb1</code></a>
test: fix failing ecosystem test for <code>eslint-plugin-unicorn</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21191">#21191</a>)
(Lazizbek Ergashev)</li>
<li><a
href="https://github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f"><code>5611035</code></a>
test: add error locations info to <code>no-void</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21185">#21185</a>)
(Lee Daeun)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a"><code>ee47333</code></a>
ci: bump github/codeql-action from 4 to 4.37.3 (<a
href="https://redirect.github.com/eslint/eslint/issues/21176">#21176</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46"><code>f131c03</code></a>
chore: improve ecosystem test failure reporting (<a
href="https://redirect.github.com/eslint/eslint/issues/20937">#20937</a>)
(crimsonjay0)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1f6eddee609b369b50993eab08d437dda4700991"><code>1f6edde</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21182">#21182</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/d3266fb26c719c6b90a6cbe54bb120c9335ad19c"><code>d3266fb</code></a>
chore: unpin <code>webpack</code> dependency (<a
href="https://redirect.github.com/eslint/eslint/issues/21172">#21172</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/65a6519cc8733b4688558a8611397cf9d01dd55d"><code>65a6519</code></a>
chore: add allowScripts field to package.json (<a
href="https://redirect.github.com/eslint/eslint/issues/21092">#21092</a>)
(GiHoon Noh)</li>
<li><a
href="https://github.com/eslint/eslint/commit/22e52568536e0009d4493dc888736bc163220c4b"><code>22e5256</code></a>
ci: add <code>triage:no</code> label to Dependabot PRs (<a
href="https://redirect.github.com/eslint/eslint/issues/21141">#21141</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/55c9038836c91b6bd5617f0c97bea2274c9cc0bf"><code>55c9038</code></a>
ci: bump actions/labeler from 6 to 7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21159">#21159</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/7280e78183d4711a49916b6a49ba5efaa651a991"><code>7280e78</code></a>
chore: update dependency prettier to v3.9.6 (<a
href="https://redirect.github.com/eslint/eslint/issues/21162">#21162</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/eddbad60158d8cda86830fbe934a9d2282273b32"><code>eddbad6</code></a>
test: fix failing ecosystem test for <code>eslint-plugin-unicorn</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21156">#21156</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/60a178d5ef1b0c471be0831031ed7347f8f81dc2"><code>60a178d</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21150">#21150</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f9f61dc6112836f46a58a410c38b8c2faf10973f"><code>f9f61dc</code></a>
test: add error locations to <code>no-unreachable</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21151">#21151</a>)
(JIYEON)</li>
<li><a
href="https://github.com/eslint/eslint/commit/d08629382b0a6aaa042823b796e5100e60053b54"><code>d086293</code></a>
test: add error locations to <code>no-undef</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21147">#21147</a>)
(JIYEON)</li>
<li><a
href="https://github.com/eslint/eslint/commit/cc01b67061bbf558aa25746883ea1cad847f7cf2"><code>cc01b67</code></a>
test: add error locations to <code>no-useless-catch</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21144">#21144</a>)
(devoil)</li>
<li><a
href="https://github.com/eslint/eslint/commit/688e75ede01b295d51f2f86c9d82da020a4c887e"><code>688e75e</code></a>
chore: add missing backticks in JSDoc (<a
href="https://redirect.github.com/eslint/eslint/issues/21143">#21143</a>)
(Bo Hyun Kim)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7c1e17543ad396f50f65b003cf9142d43d3c63b0"><code>7c1e175</code></a>
test: add error locations to <code>require-await</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21145">#21145</a>)
(Grit)</li>
<li><a
href="https://github.com/eslint/eslint/commit/588a26ddce3c5a20f5b3f3d51ba1353cce7b4b0c"><code>588a26d</code></a>
test: add error locations to <code>no-extra-label</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21139">#21139</a>)
(dongkyu lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/059aa895743639e3ab53d14f9d944ff4be042233"><code>059aa89</code></a>
test: add error locations to <code>no-useless-concat</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21140">#21140</a>)
(dongkyu lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5a452a8ba53917d65c9d83c3959ed35c2f890613"><code>5a452a8</code></a>
test: add error locations to <code>no-const-assign</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21138">#21138</a>)
(dongkyu lee)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/c049dc3c4294da7afe3d920a1a5fdeba388f4983"><code>c049dc3</code></a>
10.8.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/a3f78269412f033ec018be06296390a582afd132"><code>a3f7826</code></a>
Build: changelog update for 10.8.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4"><code>18eb0a7</code></a>
fix: prevent ASI hazard in <code>no-unused-labels</code> autofix (<a
href="https://redirect.github.com/eslint/eslint/issues/21173">#21173</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0a148005051fded2ef1d14cc228ae505251b4b10"><code>0a14800</code></a>
chore: update github/codeql-action action to v4.37.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/21196">#21196</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560"><code>7d0cbf8</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93"><code>05adcb1</code></a>
test: fix failing ecosystem test for <code>eslint-plugin-unicorn</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21191">#21191</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f"><code>5611035</code></a>
test: add error locations info to <code>no-void</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21185">#21185</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a"><code>ee47333</code></a>
ci: bump github/codeql-action from 4 to 4.37.3 (<a
href="https://redirect.github.com/eslint/eslint/issues/21176">#21176</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46"><code>f131c03</code></a>
chore: improve ecosystem test failure reporting (<a
href="https://redirect.github.com/eslint/eslint/issues/20937">#20937</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0a05812adb12598b32e85297b98df5ad14501d60"><code>0a05812</code></a>
docs: add missing backticks to <code>no-duplicate-imports.js</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21183">#21183</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.8.0...v10.8.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.8.0&new-version=10.8.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 13:52:12 +00:00
dependabot[bot] 1bb19434ad chore(deps-dev): Bump i18next-cli from 1.67.7 to 1.67.8 (#2077)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.7
to 1.67.8.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.8</h2>
<ul>
<li>fix(extract): make the key sort order transitive, so
<code>extract</code> is idempotent. The
comparator compared base keys for plural/plural pairs but full keys for
every other
pair, which produced a cycle (<code>foo_solved &lt; foo_zero &lt;
foo_one &lt; foo_other &lt; foo_solved</code>)
for a key that has both plural forms and a context variant in a locale
with a <code>zero</code>
plural (lv, ru, pl, lt, uk, …). The resulting order then depended on the
input order, so
the same file flipped key order back and forth on every extract/download
cycle. Keys are
now always compared by base key first, then by variant rank (plain key,
cardinal plurals,
ordinal plurals) (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/279">#279</a>).</li>
<li>feat(extract): resolve finite string-literal unions through the
element type of an
iterated array. <code>function f(items: IProps[])</code> with
<code>items.map(({ size }) =&gt; t(`some_${size}`))</code> now expands
to one key per union member,
as does member access on the callback element (<code>items.forEach(item
=&gt; t(`some_${item.size}`))</code>) and a typed array variable
(<code>const items: IProps[] = …</code>).
Covers <code>T[]</code>, <code>Array&lt;T&gt;</code> and
<code>ReadonlyArray&lt;T&gt;</code> for
<code>map</code>/<code>forEach</code>/<code>flatMap</code>/<code>filter</code>/
<code>find</code>/<code>some</code>/<code>every</code> (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/210">#210</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/773147b173929d71e1f58c78757df5a32c7e52f8"><code>773147b</code></a>
1.67.8</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/f3bff583910ecafe23979f05bc721754484f09fa"><code>f3bff58</code></a>
fix(extract): transitive key sort (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/279">#279</a>);
resolve array element unions (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/210">#210</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.7...v1.67.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.7&new-version=1.67.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 13:51:34 +00:00
dependabot[bot] 0dabdb484d chore(deps-dev): Bump i18next-cli from 1.67.4 to 1.67.7 (#2076)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.4
to 1.67.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.7</h2>
<ul>
<li>fix(instrument): skip module-scope strings instead of wrapping them
in a <code>t()</code> call. A
top-level config/registry literal (<code>export const SECTIONS = [{
label: 'Appearance' }]</code>)
used to be rewritten to <code>i18next.t(...)</code> — evaluated once
when the module is first
imported, so it may run before i18next is initialized and never updates
on language
change. Such candidates are now left untouched and reported with a
warning pointing at
the hook alternative. Strings inside plain (non-component) functions are
still
instrumented with <code>i18next.t()</code> as before
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/278">#278</a>).</li>
<li>fix(instrument): a generated <code>import i18next from
'i18next'</code> is no longer appended to the
same line as a semicolon-terminated import
(<code>import { X } from &quot;./x&quot;;import i18next from
'i18next'</code>). The insertion point now moves
past the end of the line, and a leading newline is added when the last
import ends at
EOF without one (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/278">#278</a>).</li>
</ul>
<h2>1.67.6</h2>
<ul>
<li>fix(lint): a directory whose name matches the input globs (e.g. a
folder called
<code>abc.tsx</code>) no longer aborts the run with <code>EISDIR:
illegal operation on a directory, read</code>. Source-file globs now
pass <code>nodir: true</code>, which also covers the extractor and
the instrumenter (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/277">#277</a>).</li>
</ul>
<h2>1.67.5</h2>
<ul>
<li>fix(extract): correct <code>line</code>/<code>column</code> in
plugin location metadata for files containing
multi-byte characters (em dashes, accented letters, CJK, emoji). SWC
reports AST spans
as UTF-8 byte offsets, but the extractor treated them as JavaScript
string indices, so
every multi-byte character shifted all following locations. The span
base was also
computed by mixing a byte offset with a character index, which
additionally skewed
locations in files whose leading comments contain multi-byte characters
— that part
affected the linter and instrumenter too
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/276">#276</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/43fa53bbdda8b503ea3866458409ad9b9e663fdb"><code>43fa53b</code></a>
1.67.7</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/ecf5fec1634c725fda2c307fa18837816c963b20"><code>ecf5fec</code></a>
fix(instrument): skip module-scope strings, fix import line break (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/278">#278</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/b9da5555de1e10963744e99c2f6ae9963a971700"><code>b9da555</code></a>
1.67.6</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/275e5dac6b2ae5de8034c5779dd94497c20bfe4a"><code>275e5da</code></a>
fix(lint): skip directories matching the input globs (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/277">#277</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/9bbc144f28dda73f8805c526170aeeabe3fdf937"><code>9bbc144</code></a>
1.67.5</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/6ca8e30597985636b26344bf2886614d6042ddc4"><code>6ca8e30</code></a>
fix(extract): correct locations in files with multi-byte characters (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/276">#276</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.4...v1.67.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.4&new-version=1.67.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 13:52:19 +00:00
dependabot[bot] cd3a818dcd chore(deps): Bump @codemirror/view from 6.43.7 to 6.43.8 (#2074)
Bumps [@codemirror/view](https://github.com/codemirror/view) from 6.43.7
to 6.43.8.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/view/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/view&package-manager=npm_and_yarn&previous-version=6.43.7&new-version=6.43.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 13:51:44 +00:00
dependabot[bot] 64e8c92748 chore(deps-dev): Bump postcss from 8.5.25 to 8.5.26 (#2075)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.25 to
8.5.26.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.26</h2>
<ul>
<li>Fixed <code>list.split()</code> regression (by <a
href="https://github.com/lazerg"><code>@​lazerg</code></a>).</li>
<li>Track symlinks in path protection in source map loading (by <a
href="https://github.com/drengir1"><code>@​drengir1</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.26</h2>
<ul>
<li>Fixed <code>list.split()</code> regression (by <a
href="https://github.com/lazerg"><code>@​lazerg</code></a>).</li>
<li>Track symlinks in path protection in source map loading (by <a
href="https://github.com/drengir1"><code>@​drengir1</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/07b25773f38f77919f2af02ae3e8896b0deb5988"><code>07b2577</code></a>
Release 8.5.26 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/47de6b9d7c55674cb326c5de7a734a740916defc"><code>47de6b9</code></a>
Update CI</li>
<li><a
href="https://github.com/postcss/postcss/commit/1493a83db7830912316512f55ab6064e7b7dd68e"><code>1493a83</code></a>
Fix Rule#selectors losing the empty selector (<a
href="https://redirect.github.com/postcss/postcss/issues/2129">#2129</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/180db166e250d20e6761b224ae8d8134c9ba3e40"><code>180db16</code></a>
Typo</li>
<li><a
href="https://github.com/postcss/postcss/commit/29e9e00f132c96e46e1de295b816fe88a05354e7"><code>29e9e00</code></a>
Resolve symlinks before the previous-source-map containment check (<a
href="https://redirect.github.com/postcss/postcss/issues/2125">#2125</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/3ba8f84703a884329b58abea579c3615684e0b7e"><code>3ba8f84</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/87e72f671fd0d401c52822b5226c656632d92ec0"><code>87e72f6</code></a>
Update lock file</li>
<li><a
href="https://github.com/postcss/postcss/commit/caaeeb907e4a816c44a23b00b151882bd02325a1"><code>caaeeb9</code></a>
Upgrade nanoid to fix infinite loop on zero size (<a
href="https://redirect.github.com/postcss/postcss/issues/2124">#2124</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/3609b6f4296952d0b5b9ddae42c8d73ee460c041"><code>3609b6f</code></a>
Explain how to type plugin options</li>
<li><a
href="https://github.com/postcss/postcss/commit/fbad419cbd01cd7a9a1a46413447f2cd9b3fce4a"><code>fbad419</code></a>
docs: show ESM and TypeScript plugin declaration (<a
href="https://redirect.github.com/postcss/postcss/issues/2118">#2118</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.25...8.5.26">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.25&new-version=8.5.26)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 13:50:22 +00:00
dependabot[bot] 7da6599686 chore(deps): Bump github/codeql-action/analyze from 4.37.3 to 4.37.6 (#2071)
Bumps
[github/codeql-action/analyze](https://github.com/github/codeql-action)
from 4.37.3 to 4.37.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/analyze's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.6</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>v4.37.5</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>v4.37.4</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/5595ccaf912efad79be6eef63a5619ff05969be3"><code>5595cca</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4071">#4071</a>
from github/update-v4.37.6-6a9359a1b</li>
<li><a
href="https://github.com/github/codeql-action/commit/ec9c75796a7f2cee5af0c5ffa0b81dc3bb58754b"><code>ec9c757</code></a>
Add change note for PR 4070</li>
<li><a
href="https://github.com/github/codeql-action/commit/45c8742e17cbd668814137f95e605d925b8722a2"><code>45c8742</code></a>
Update changelog for v4.37.6</li>
<li><a
href="https://github.com/github/codeql-action/commit/6a9359a1bd054c53cae7bb737bd8d796cfbf3014"><code>6a9359a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4070">#4070</a>
from github/mbg/remote-address/change-file-default</li>
<li><a
href="https://github.com/github/codeql-action/commit/065cdc0394d424981db720df63ebc570e41b775f"><code>065cdc0</code></a>
Change <code>DEFAULT_CONFIG_FILE_NAME</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/f99dd5aeee9cf92e92d0c700cb0aa7afd7bbf431"><code>f99dd5a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4066">#4066</a>
from github/dependabot/npm_and_yarn/js-yaml-5.2.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/1804b211a343d69a6584d26fb3a68a8fe6ca39d4"><code>1804b21</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4068">#4068</a>
from github/mergeback/v4.37.5-to-main-d1ba80a1</li>
<li><a
href="https://github.com/github/codeql-action/commit/3020a2f46286abb1704269b22ada83bd0e81c64f"><code>3020a2f</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/93c3a5a40b7affbf8ea6a480767ed0db8e8d3c5c"><code>93c3a5a</code></a>
Update changelog and version after v4.37.5</li>
<li><a
href="https://github.com/github/codeql-action/commit/d1ba80a13dd99fba24a470575428917156a28b43"><code>d1ba80a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4067">#4067</a>
from github/update-v4.37.5-1cd4d01d5</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81...5595ccaf912efad79be6eef63a5619ff05969be3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/analyze&package-manager=github_actions&previous-version=4.37.3&new-version=4.37.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-07 13:52:34 +00:00
dependabot[bot] b3654a468a chore(deps-dev): Bump typescript-eslint from 8.65.0 to 8.66.0 (#2070)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.65.0 to 8.66.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.66.0</h2>
<h2>8.66.0 (2026-08-03)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-estree:</strong> handle import.defer() as
ImportExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12609">#12609</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-conversion]
ignore shadowed built-ins (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12590">#12590</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-nullish-coalescing] handle
shadowed Boolean calls (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12591">#12591</a>)</li>
<li><strong>eslint-plugin:</strong> [no-useless-default-assignment]
don't report defaults used by other overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12607">#12607</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-parameters]
check MappedType key remapping (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12588">#12588</a>)</li>
<li><strong>eslint-plugin:</strong> [class-literal-property-style]
preserve type annotations and don't drop decorators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12617">#12617</a>)</li>
<li><strong>website:</strong> list
<code>onUnsupportedTypeScriptVersion</code> in parser options (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12585">#12585</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Steffen Schroeder</li>
<li>송재욱</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.66.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.66.0 (2026-08-03)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.66.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/e51b11ba3ab31837762c675f62f0d4dcb1abc4fb"><code>e51b11b</code></a>
chore(release): publish 8.66.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.66.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.65.0&new-version=8.66.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-07 13:50:46 +00:00
dependabot[bot] d33322e973 chore(deps): Bump github/codeql-action/init from 4.37.3 to 4.37.5 (#2067)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.3 to 4.37.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.5</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>v4.37.4</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.6 - 04 Aug 2026</h2>
<ul>
<li>Changed the default filepath for the new remote file address format
that was introduced in CodeQL Action 4.37.0 / 3.37.0 to
<code>.github/codeql-config.yml</code> to align it with the suggested
path that is used elsewhere. <a
href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li>
</ul>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/d1ba80a13dd99fba24a470575428917156a28b43"><code>d1ba80a</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4067">#4067</a>
from github/update-v4.37.5-1cd4d01d5</li>
<li><a
href="https://github.com/github/codeql-action/commit/e74600b0d945db9734eb044f95cd43f34b773451"><code>e74600b</code></a>
Update changelog for v4.37.5</li>
<li><a
href="https://github.com/github/codeql-action/commit/1cd4d01d58f636bbdbffbfd3c121b3446d07e9f3"><code>1cd4d01</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4061">#4061</a>
from github/henrymercer/turbo-system</li>
<li><a
href="https://github.com/github/codeql-action/commit/d2bfc30bc3373a3ec945dc3f93bc8b8f07fa16b9"><code>d2bfc30</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4050">#4050</a>
from github/mbg/status/registries</li>
<li><a
href="https://github.com/github/codeql-action/commit/68028fcb1605f3cdd37e4e1845c3f78af017a3ea"><code>68028fc</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4062">#4062</a>
from github/sam-robson/migrate-enterprise-release-pat</li>
<li><a
href="https://github.com/github/codeql-action/commit/c29563eeaafbc75499c7bb0d74bf77b3506c1cbd"><code>c29563e</code></a>
ci: use federated enterprise release PAT</li>
<li><a
href="https://github.com/github/codeql-action/commit/155e5229973b426bd1ae2f83bb1bf42417fa2a8f"><code>155e522</code></a>
Link the PR from the changelog entry</li>
<li><a
href="https://github.com/github/codeql-action/commit/2d3b351ea6452a9b21346f8d64567e5b833924de"><code>2d3b351</code></a>
Handle network errors when streaming the CodeQL bundle download</li>
<li><a
href="https://github.com/github/codeql-action/commit/5d3eb98e4a780bfe1a53f57fbdc278ea5da1274b"><code>5d3eb98</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4055">#4055</a>
from github/dependabot/npm_and_yarn/npm-minor-203262...</li>
<li><a
href="https://github.com/github/codeql-action/commit/c5f739bd6460e096aaf40962517e46a846b8b6b1"><code>c5f739b</code></a>
Merge branch 'main' into
dependabot/npm_and_yarn/npm-minor-2032624187</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81...d1ba80a13dd99fba24a470575428917156a28b43">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.3&new-version=4.37.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 13:52:42 +00:00
dependabot[bot] 349aac5b27 chore(deps-dev): Bump i18next-cli from 1.67.3 to 1.67.4 (#2066)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.3
to 1.67.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.4</h2>
<ul>
<li>fix(extract): resolve finite string-literal unions that reach a key
through an
interface- or object-typed function parameter. <code>interface IProps {
size: ChangeType }</code>
with <code>function f({ size }: IProps) { return t(`some_${size}`)
}</code> now expands to one key
per union member. Covers destructured props (including renamed and
defaulted ones),
member access on the parameter itself
(<code>t(`some_${props.size}`)</code>), object type aliases
(<code>type Props = { size: 'x' | 'y' }</code>) and inline type
literals. Bindings are scoped to the
function, so nothing leaks to same-named identifiers elsewhere
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/210">#210</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/d2da696fb550ab7d36eafbb9a6e0328783c16dda"><code>d2da696</code></a>
1.67.4</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/04de8b74ac2d0db4429ed5b20bb54af430a989ec"><code>04de8b7</code></a>
fix(extract): resolve unions via interface-typed params (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/210">#210</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.3...v1.67.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.3&new-version=1.67.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-06 13:51:38 +00:00
dependabot[bot] 6d494f5b11 chore(deps): Bump fast-uri from 3.1.4 to 3.1.5 (#2064)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.4 to
3.1.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastify/fast-uri/releases">fast-uri's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.5</h2>
<h2>⚠️ Security Warning</h2>
<p>Fix for <a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-7p8r-x3mc-p8w7">https://github.com/fastify/fast-uri/security/advisories/GHSA-7p8r-x3mc-p8w7</a></p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.4...v3.1.5">https://github.com/fastify/fast-uri/compare/v3.1.4...v3.1.5</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/commit/5e179cbb4636d5f773ed21126e5bd3068e87e94e"><code>5e179cb</code></a>
Bumped v3.1.5</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/2cad02d6ed428a720499bb7a3c3d6c3d41f10f5a"><code>2cad02d</code></a>
Merge commit from fork</li>
<li>See full diff in <a
href="https://github.com/fastify/fast-uri/compare/v3.1.4...v3.1.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fast-uri&package-manager=npm_and_yarn&previous-version=3.1.4&new-version=3.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 13:58:47 +00:00
dependabot[bot] 7373742600 chore(deps): Bump i18next-resources-to-backend from 1.2.2 to 1.2.3 (#2062)
Bumps
[i18next-resources-to-backend](https://github.com/i18next/i18next-resources-to-backend)
from 1.2.2 to 1.2.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-resources-to-backend/blob/main/CHANGELOG.md">i18next-resources-to-backend's
changelog</a>.</em></p>
<blockquote>
<h3>1.2.3</h3>
<ul>
<li>fix: allow empty <code>language</code>/<code>namespace</code>
strings again (e.g. <code>defaultNS: ''</code>), rejected since 1.2.2 <a
href="https://redirect.github.com/i18next/i18next-resources-to-backend/issues/16">#16</a>.
An empty string cannot traverse the filesystem or reach
<code>Object.prototype</code>, so it was never part of the attack
surface.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/b8bef55fb513da1f4504ea28916a2d839e891fc0"><code>b8bef55</code></a>
1.2.3</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/7eece7d4d8b46b5c3b139bbfd2f805b3e6c72888"><code>7eece7d</code></a>
fix: allow empty language/namespace again (<a
href="https://redirect.github.com/i18next/i18next-resources-to-backend/issues/16">#16</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-resources-to-backend/compare/v1.2.2...v1.2.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-resources-to-backend&package-manager=npm_and_yarn&previous-version=1.2.2&new-version=1.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 13:51:21 +00:00
dependabot[bot] 505a3701ce chore(deps-dev): Bump @types/codemirror from 5.60.17 to 5.60.18 (#2061)
Bumps
[@types/codemirror](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/codemirror)
from 5.60.17 to 5.60.18.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/codemirror">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/codemirror&package-manager=npm_and_yarn&previous-version=5.60.17&new-version=5.60.18)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 13:49:29 +00:00
dependabot[bot] 14f040bfe0 chore(deps): Bump github/codeql-action/autobuild from 4.37.3 to 4.37.4 (#2058)
Bumps
[github/codeql-action/autobuild](https://github.com/github/codeql-action)
from 4.37.3 to 4.37.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/autobuild's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.4</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/autobuild's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.5 - 03 Aug 2026</h2>
<ul>
<li>Fixed a bug where a network error while streaming the download of
the CodeQL bundle could terminate the <code>init</code> Action instead
of falling back to downloading the bundle before extracting it. <a
href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li>
</ul>
<h2>4.37.4 - 29 Jul 2026</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/f205ea1c3313d32999d8d6a48b4f6530d4437b38"><code>f205ea1</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4053">#4053</a>
from github/update-v4.37.4-9130ce0f7</li>
<li><a
href="https://github.com/github/codeql-action/commit/e40d079dd9dd4a5c74f625cecd83867c8208aa71"><code>e40d079</code></a>
Update changelog for v4.37.4</li>
<li><a
href="https://github.com/github/codeql-action/commit/9130ce0f733a0d17b9e1b9692c2af19be6c69dda"><code>9130ce0</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4051">#4051</a>
from github/update-bundle/codeql-bundle-v2.26.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/c62d82468641dca0f8df108ab73e2a8407ac9cf7"><code>c62d824</code></a>
Add changelog note</li>
<li><a
href="https://github.com/github/codeql-action/commit/da0c1901011e62af9c02aae8bf5b8885b11f7741"><code>da0c190</code></a>
Update default bundle to codeql-bundle-v2.26.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/18420e3271f74589575af831a523c833acda327f"><code>18420e3</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4043">#4043</a>
from github/mbg/ts/changelog</li>
<li><a
href="https://github.com/github/codeql-action/commit/7e8d8970f03ec5a78ab372fc0778e8e4194111a5"><code>7e8d897</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4046">#4046</a>
from github/mbg/repo-prop/code-quality</li>
<li><a
href="https://github.com/github/codeql-action/commit/2d4c474c2ca5ea2965b9e53fabb7b67b0100016c"><code>2d4c474</code></a>
Log <code>!analysisKindSupported</code> case</li>
<li><a
href="https://github.com/github/codeql-action/commit/98c05a17d327d7c4055fca83114434ab56baacf6"><code>98c05a1</code></a>
Fix argument validation in <code>rollback-changelog.ts</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/8289a49271cbb335d374e7e2e7a50c1576be0afe"><code>8289a49</code></a>
Ignore repository property for unsupported analysis kinds</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81...f205ea1c3313d32999d8d6a48b4f6530d4437b38">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/autobuild&package-manager=github_actions&previous-version=4.37.3&new-version=4.37.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 13:53:12 +00:00
dependabot[bot] b64a3a3b46 chore(deps-dev): Bump @playwright/test from 1.62.0 to 1.62.1 (#2057)
Bumps [@playwright/test](https://github.com/microsoft/playwright) from
1.62.0 to 1.62.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases">@​playwright/test's
releases</a>.</em></p>
<blockquote>
<h2>v1.62.1</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="https://redirect.github.com/microsoft/playwright/issues/41989">#41989</a>
[Regression]: tsconfig &quot;extends&quot; bare specifier isn't resolved
via node_modules walk-up like tsc (fatal since 1.62)</li>
<li><a
href="https://redirect.github.com/microsoft/playwright/issues/41998">#41998</a>
[Regression]: directory-form tsconfig project references
(&quot;path&quot;: &quot;../pkg&quot;) fail to resolve (fatal since
1.62)</li>
<li><a
href="https://redirect.github.com/microsoft/playwright/issues/41985">#41985</a>
Accessibility snapshot drops button name when text is nested inside
spans with aria-hidden SVG</li>
<li><a
href="https://redirect.github.com/microsoft/playwright/issues/42000">#42000</a>
[Regression]: page.evaluate() arg of a branded primitive type (string
&amp; { brand }) no longer type-checks since 1.62</li>
<li><a
href="https://redirect.github.com/microsoft/playwright/issues/42013">#42013</a>
[BUG]Image-type actionable elements are not presented in the
snapshot.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/microsoft/playwright/commit/26a9e470a7b3c7822084b09fb7f13902c5f37b51"><code>26a9e47</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42043">#42043</a>):
docs: release notes for v1.62 Python, Java, and .NET (<a
href="https://redirect.github.com/microsoft/playwright/issues/4">#4</a>...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/0a81d5d09b10eeefe228fe745c3f80c7368a239b"><code>0a81d5d</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42040">#42040</a>):
docs(release-notes): mention the isolated headless clipb...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/83768264e64a821bcef9e634b8e5c33897f2b032"><code>8376826</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42034">#42034</a>):
fix(aria): keep icon-only clickable elements in ai snaps...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/66c5cc92a60ce20ab3abe779339e1f90d2e2e888"><code>66c5cc9</code></a>
chore: mark v1.62.1 (<a
href="https://redirect.github.com/microsoft/playwright/issues/42020">#42020</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/9672bc3f2a7098cb6a9791ca97222187363a3037"><code>9672bc3</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42009">#42009</a>):
fix(types): support branded primitives in evaluate argum...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/4325804427a214aa0c8c39bb1352f4ac4f712fd1"><code>4325804</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/41988">#41988</a>):
fix(aria): preserve names from collapsed text contributors</li>
<li><a
href="https://github.com/microsoft/playwright/commit/9632f8ecbc2accba140ea342f1070ccfdd5f5d41"><code>9632f8e</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/42005">#42005</a>):
fix(tsconfig): do not throw when
&quot;extends&quot;/&quot;references&quot; ...</li>
<li>See full diff in <a
href="https://github.com/microsoft/playwright/compare/v1.62.0...v1.62.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@playwright/test&package-manager=npm_and_yarn&previous-version=1.62.0&new-version=1.62.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 13:52:30 +00:00
dependabot[bot] 10d0c2cb10 chore(deps): Bump docker/login-action from 4.5.2 to 4.6.0 (#2054)
Bumps [docker/login-action](https://github.com/docker/login-action) from
4.5.2 to 4.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/login-action/releases">docker/login-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.6.0</h2>
<ul>
<li>Harden buildx scoped config path handling by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1059">docker/login-action#1059</a></li>
<li>Bump <code>@​aws-sdk/client-ecr</code> and
<code>@​aws-sdk/client-ecr-public</code> to 3.1095.0 in <a
href="https://redirect.github.com/docker/login-action/pull/1051">docker/login-action#1051</a></li>
<li>Bump js-yaml from 5.2.1 to 5.2.2 in <a
href="https://redirect.github.com/docker/login-action/pull/1057">docker/login-action#1057</a></li>
<li>Bump postcss from 8.5.10 to 8.5.22 in <a
href="https://redirect.github.com/docker/login-action/pull/1056">docker/login-action#1056</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.2...v4.6.0">https://github.com/docker/login-action/compare/v4.5.2...v4.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/login-action/commit/dbcb813823bdd20940b903addbd779551569679f"><code>dbcb813</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1051">#1051</a>
from docker/dependabot/npm_and_yarn/aws-sdk-dependen...</li>
<li><a
href="https://github.com/docker/login-action/commit/5bcb015ee6ec720ecdeaef2dc1164122e9b209fc"><code>5bcb015</code></a>
[dependabot skip] chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/b30b2f2d3196c1714318ba0c3c3bec211d949752"><code>b30b2f2</code></a>
build(deps): bump the aws-sdk-dependencies group across 1 directory with
2 up...</li>
<li><a
href="https://github.com/docker/login-action/commit/9087f1e6d666fe0292409e3c819680c18526e108"><code>9087f1e</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1057">#1057</a>
from docker/dependabot/npm_and_yarn/js-yaml-5.2.2</li>
<li><a
href="https://github.com/docker/login-action/commit/0009830ea169ca16c24c0ea4cac1c325bfa3aee4"><code>0009830</code></a>
[dependabot skip] chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/23255232d3e43c8f0052d9a0dba82a515a88ce92"><code>2325523</code></a>
build(deps): bump js-yaml from 5.2.1 to 5.2.2</li>
<li><a
href="https://github.com/docker/login-action/commit/4ec1d4a769e8b05a89a7396551dc38b329211688"><code>4ec1d4a</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1056">#1056</a>
from docker/dependabot/npm_and_yarn/postcss-8.5.22</li>
<li><a
href="https://github.com/docker/login-action/commit/5fc99ba47bca274c5a499688f71c7ea79c0ea1b3"><code>5fc99ba</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1053">#1053</a>
from docker/dependabot/github_actions/aws-actions/co...</li>
<li><a
href="https://github.com/docker/login-action/commit/e512bd59d16c53d79ea5c0f0e345fe554453c4bb"><code>e512bd5</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1052">#1052</a>
from docker/dependabot/github_actions/codeql-actions...</li>
<li><a
href="https://github.com/docker/login-action/commit/a146c91b8f371700d323bae808af7cbdc2766ed5"><code>a146c91</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1059">#1059</a>
from crazy-max/harden-buildx-scope-paths</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/login-action/compare/371161bbe7024a29a25c5e19bfcbc0804fe9ad2c...dbcb813823bdd20940b903addbd779551569679f">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/login-action&package-manager=github_actions&previous-version=4.5.2&new-version=4.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 13:52:06 +00:00
dependabot[bot] 03f2b1ce36 chore(deps-dev): Bump postcss from 8.5.24 to 8.5.25 (#2055)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.24 to
8.5.25.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.25</h2>
<ul>
<li>Fixed 8.5.17 visitor regression.</li>
<li>Fixed <code>list.split()</code> for non-string values (by <a
href="https://github.com/amir-rezaei"><code>@​amir-rezaei</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.25</h2>
<ul>
<li>Fixed 8.5.17 visitor regression.</li>
<li>Fixed <code>list.split()</code> for non-string values (by <a
href="https://github.com/amir-rezaei"><code>@​amir-rezaei</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/08c989c43cc87edb1ed71408c2f5164c54fc21df"><code>08c989c</code></a>
Release 8.5.25 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/24f681471645cd960ee760ab7f9e348fbabfd42c"><code>24f6814</code></a>
Fix 8.5.17 visitor regression</li>
<li><a
href="https://github.com/postcss/postcss/commit/f2fa53f11daab3a16c7eb8bcaf5a945142341df3"><code>f2fa53f</code></a>
Add supply chain security requirement to PostCSS plugin guide</li>
<li><a
href="https://github.com/postcss/postcss/commit/10edf0b0606f97b1510e040c27bfd078c48d6ea7"><code>10edf0b</code></a>
fix: return empty array for empty string in list.split (<a
href="https://redirect.github.com/postcss/postcss/issues/2121">#2121</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.24...8.5.25">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.24&new-version=8.5.25)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 13:51:17 +00:00
dependabot[bot] c2af4536a7 chore(deps): Bump i18next-resources-to-backend from 1.2.1 to 1.2.2 (#2053)
Bumps
[i18next-resources-to-backend](https://github.com/i18next/i18next-resources-to-backend)
from 1.2.1 to 1.2.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-resources-to-backend/blob/main/CHANGELOG.md">i18next-resources-to-backend's
changelog</a>.</em></p>
<blockquote>
<h3>1.2.2</h3>
<ul>
<li>security: validate <code>language</code> and <code>namespace</code>
in <code>read()</code> before they are passed to the loader. i18next
resolves any string as a language unless <code>supportedLngs</code> is
set, so these values can carry whatever a language detector picked up
from the querystring, path or a cookie. The documented usage pattern is
<code>import(</code>./locales/${language}/${namespace}.json<code>)</code>,
and while a bundler compiles that template to a fixed context map, an
unbundled ESM runtime (Node SSR) resolves the specifier against the
filesystem, where a crafted value escapes the locales directory. Values
containing <code>..</code>, <code>\</code>, control characters,
<code>__proto__</code> / <code>constructor</code> /
<code>prototype</code>, or longer than 128 characters are now rejected
with an error and the loader is never called; <code>/</code> is rejected
for <code>language</code> but allowed for <code>namespace</code>, where
nested layouts such as <code>a/b</code> are legitimate. The same check
keeps the static-resources lookup off
<code>Object.prototype</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/79926015633ef99a62c3e5b2ab98590bc127aa58"><code>7992601</code></a>
1.2.2</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/8b7240c588ca8b6f3ba711f73066310fa878c183"><code>8b7240c</code></a>
cosmetics</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/1d45d0b9d59c0d93c571904332ff5a2a83694fae"><code>1d45d0b</code></a>
security: validate language/namespace before calling the loader</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/75a31f87a670f78df15da963f3472131e0262863"><code>75a31f8</code></a>
README: mention npx i18next-cli localize as the zero-to-localized
path</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/12858c721895b1f1346c3e164f667e0d7e3d13e9"><code>12858c7</code></a>
Add Locize advice section near the top of README</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/e3f24cd694fe822ae909f901701bf961217b9f5d"><code>e3f24cd</code></a>
Modernize locize.com URLs and refresh UTM tags</li>
<li><a
href="https://github.com/i18next/i18next-resources-to-backend/commit/33a1f29ebac9dae1e2c1535f7dfa1c2972ee9cc1"><code>33a1f29</code></a>
chore: ignore .env*, *.pem, *.key in .gitignore</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-resources-to-backend/compare/v1.2.1...v1.2.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-resources-to-backend&package-manager=npm_and_yarn&previous-version=1.2.1&new-version=1.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 13:50:45 +00:00
dependabot[bot] 714296ebdd chore(deps): Bump @codemirror/view from 6.43.6 to 6.43.7 (#2051)
Bumps [@codemirror/view](https://github.com/codemirror/view) from 6.43.6
to 6.43.7.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/codemirror/view/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@codemirror/view&package-manager=npm_and_yarn&previous-version=6.43.6&new-version=6.43.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-31 13:52:13 +00:00
dependabot[bot] 0747b6ca37 chore(deps): Bump ol from 10.9.0 to 10.10.0 (#2052)
Bumps [ol](https://github.com/openlayers/openlayers) from 10.9.0 to
10.10.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/openlayers/openlayers/releases">ol's
releases</a>.</em></p>
<blockquote>
<h2>v10.10.0</h2>
<h1>10.10.0</h1>
<p>The 10.10 release brings improvements throughout the library — from
tile and vector rendering to sources, formats and interactions. The
highlights are</p>
<ul>
<li>Text support in the WebGL vector renderers, plus stale tile handling
for WebGL tile layers</li>
<li>Smoother tile rendering: instead of clipping and redrawing full
tiles, only the remainders of lower zoom levels are drawn</li>
<li>WMTS and OGC tile grids now honor the advertised tile matrix set
limits, so no tiles are requested outside a layer's data extent</li>
<li>GeoZarr gains selection of non-spatial dimensions, e.g. for time
series</li>
<li>Text along lines honors <code>offsetX</code> and is split into
graphemes, so ligatures are no longer cut apart</li>
<li>Fixes for the Modify interaction's tracing, vector tile resolutions,
decluttering z-index order, and text rendering of long lines</li>
</ul>
<h2>Upgrade notes</h2>
<h3>Usage of Intl.Segmenter</h3>
<p>TextPath now relies on <a
href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter">Intl.Segmenter</a>.
For support of very old browsers (e.g. Firefox before version 125),
a polyfill is available: <a
href="https://formatjs.github.io/docs/polyfills/intl-segmenter/">https://formatjs.github.io/docs/polyfills/intl-segmenter/</a>.</p>
<h3>Deprecation of <code>ol/source/BingMaps</code></h3>
<p>Bing Maps for Enterprise is being retired on June 30th, 2028. The
<code>BingMaps</code> source
has been deprecated. Use <code>ol/source/ImageTile</code> with the Azure
Maps tile API instead.
See the <a
href="https://openlayers.org/en/latest/examples/azure-maps.html">azure-maps
example</a> for guidance.</p>
<pre lang="js"><code>// Before
new BingMaps({
  key: 'YOUR_BING_MAPS_KEY',
  imagerySet: 'RoadOnDemand',
})
<p>// After<br />
new ImageTile({<br />
url:
<code>https://atlas.microsoft.com/map/tile?subscription-key=YOUR_AZURE_MAPS_KEY&amp;amp;api-version=2.0&amp;amp;tilesetId=microsoft.base.road&amp;amp;zoom={z}&amp;amp;x={x}&amp;amp;y={y}&amp;amp;tileSize=256</code>,<br
/>
attributions: <code>© ${new Date().getFullYear()} TomTom,
Microsoft</code>,<br />
})<br />
</code></pre></p>
<h3><code>createFromCapabilitiesMatrixSet</code> now respects
<code>TileMatrixSetLimits</code></h3>
<p>When a <code>matrixLimits</code> array is passed to
<code>createFromCapabilitiesMatrixSet</code>, the returned
tile grid will now restrict tile requests to the
<code>MinTileRow</code>/<code>MaxTileRow</code>/<code>MinTileCol</code>/<code>MaxTileCol</code>
bounds advertised for each zoom level. Previously those bounds were
ignored and the full
matrix extent was used, causing tile requests outside the layer's data
extent.</p>
<p>If you were passing <code>matrixLimits</code> only to filter zoom
levels and relied on the full matrix
range being loaded at each level, you can omit the
<code>matrixLimits</code> argument or pass an empty
array to restore the previous behavior.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openlayers/openlayers/commit/a23f25832d9d24ded41a33881d9983ee7df4a94f"><code>a23f258</code></a>
Updates for the 10.10.0 release</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/11d1aad09576d609ce2a6d1cb7bbdc739054b3b1"><code>11d1aad</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/openlayers/issues/17572">#17572</a>
from hyeonjun-L/reset-loader-in-setparams</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/3f7bb9e08cad3ec5dbc872506dfd3a0d82f08b5f"><code>3f7bb9e</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/openlayers/issues/17579">#17579</a>
from ahocevar/vite-examples-base-path</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/ded0e3bb4a32866fd24d52a9a2a0e56eeb8089fb"><code>ded0e3b</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/openlayers/issues/17577">#17577</a>
from ahocevar/node-tests-vitest</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/2218549fc5b3d8b489289a6e4e430a3c201d336f"><code>2218549</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/openlayers/issues/17576">#17576</a>
from sobol-sudo/support-offsetx-for-text-along-line</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/ac0d1e50f4ff42eaa1d8af9671e54e7ddd6cc578"><code>ac0d1e5</code></a>
Merge pull request <a
href="https://redirect.github.com/openlayers/openlayers/issues/17575">#17575</a>
from umap-project/fix-textpath-emoji</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/0e37c0b9fcfab324c2260232be0a5d2d19b7e831"><code>0e37c0b</code></a>
Reduce pixel tolerance to prevent future regressions</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/b186a0c9521066faeda402967f3a75c455692a77"><code>b186a0c</code></a>
Update reference images</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/62a916a0ad887997aa00834b272ad955b0faafdc"><code>62a916a</code></a>
fixup: fix lint issue</li>
<li><a
href="https://github.com/openlayers/openlayers/commit/9021c86981b170e00c3f084615c90f0fe75774f1"><code>9021c86</code></a>
Add rendering test for offsetX along a line</li>
<li>Additional commits viewable in <a
href="https://github.com/openlayers/openlayers/compare/v10.9.0...v10.10.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ol&package-manager=npm_and_yarn&previous-version=10.9.0&new-version=10.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-31 13:51:49 +00:00
dependabot[bot] 77adb3bfa4 chore(deps-dev): Bump postcss from 8.5.23 to 8.5.24 (#2050)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.23 to
8.5.24.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.24</h2>
<ul>
<li>Preserve the BOM after the processing (by <a
href="https://github.com/hdimer"><code>@​hdimer</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.24</h2>
<ul>
<li>Preserve the BOM after the processing (by <a
href="https://github.com/hdimer"><code>@​hdimer</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/0ebe8ad591621ab4e48311da47a76974617571f9"><code>0ebe8ad</code></a>
Release 8.5.24 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/73218c64245be53e25d58150e0cc7e984f1d162d"><code>73218c6</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/9a114f62b0deb37be859102f93b414b49385805a"><code>9a114f6</code></a>
Preserve the BOM when stringifying (<a
href="https://redirect.github.com/postcss/postcss/issues/2119">#2119</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/90692619125cb9424f5eafd8c64bc76b2da23db1"><code>9069261</code></a>
Fix types check</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.23...8.5.24">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.23&new-version=8.5.24)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-31 13:51:23 +00:00
dependabot[bot] e5749510b6 chore(deps): Bump docker/login-action from 4.5.1 to 4.5.2 (#2049)
Bumps [docker/login-action](https://github.com/docker/login-action) from
4.5.1 to 4.5.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/login-action/releases">docker/login-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.2</h2>
<ul>
<li>Surface Docker Hub OIDC error responses by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1058">docker/login-action#1058</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.1...v4.5.2">https://github.com/docker/login-action/compare/v4.5.1...v4.5.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/login-action/commit/371161bbe7024a29a25c5e19bfcbc0804fe9ad2c"><code>371161b</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1058">#1058</a>
from crazy-max/fix-dockerhub-oidc-error-handling</li>
<li><a
href="https://github.com/docker/login-action/commit/5dc73df38ebcfa6f96479901e253d172c3e35849"><code>5dc73df</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/2aa1edee0b06c23880529064a4f7d7d3d2f9bc87"><code>2aa1ede</code></a>
surface Docker Hub OIDC error responses</li>
<li>See full diff in <a
href="https://github.com/docker/login-action/compare/abd2ef45e78c5afb21d64d4ca52ee8550d9572c7...371161bbe7024a29a25c5e19bfcbc0804fe9ad2c">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/login-action&package-manager=github_actions&previous-version=4.5.1&new-version=4.5.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 13:51:03 +00:00
dependabot[bot] 457fe1cb72 chore(deps): Bump github/codeql-action/autobuild from 4.36.3 to 4.37.3 (#2039)
Bumps
[github/codeql-action/autobuild](https://github.com/github/codeql-action)
from 4.36.3 to 4.37.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/autobuild's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.3</h2>
<p>No user facing changes.</p>
<h2>v4.37.2</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>v4.37.1</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>v4.37.0</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/autobuild's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81"><code>e4fba86</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4031">#4031</a>
from github/update-v4.37.3-72f6a9da0</li>
<li><a
href="https://github.com/github/codeql-action/commit/fb50ab5d62a274adf3ef3e22cfe750ae87a0ede7"><code>fb50ab5</code></a>
Update changelog for v4.37.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/72f6a9da0def52d9193d6a758f0378b65091f8d1"><code>72f6a9d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4030">#4030</a>
from github/mbg/fix/no-proxy</li>
<li><a
href="https://github.com/github/codeql-action/commit/3b5ee58597653d9cc6785f3f1277f796d81f3646"><code>3b5ee58</code></a>
Use default <code>request</code> options instead of
<code>undefined</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/bfb6be4b5ecd3650f02f530571453e8c64ef0778"><code>bfb6be4</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4028">#4028</a>
from github/mergeback/v4.37.2-to-main-e0647621</li>
<li><a
href="https://github.com/github/codeql-action/commit/526ab84f9858816d9cf5f7b9df4dd5e2235f0eba"><code>526ab84</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/d6217b9b8c14166e4851db94c11155d03bd13c07"><code>d6217b9</code></a>
Update changelog and version after v4.37.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/e0647621c2984b5ed2f768cb892365bf2a616ad1"><code>e064762</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4027">#4027</a>
from github/update-v4.37.2-385bcdc5a</li>
<li><a
href="https://github.com/github/codeql-action/commit/e0faed839190caa67a5cd42f1cc16246028ca3df"><code>e0faed8</code></a>
Add a couple of change notes</li>
<li><a
href="https://github.com/github/codeql-action/commit/73aad0eaa9df172668665a150d17b8bc5a650c20"><code>73aad0e</code></a>
Update changelog for v4.37.2</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a...e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/autobuild&package-manager=github_actions&previous-version=4.36.3&new-version=4.37.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 08:17:12 +03:00
dependabot[bot] f075bf6661 chore(deps): Bump github/codeql-action/analyze from 4.37.2 to 4.37.3 (#2038)
Bumps
[github/codeql-action/analyze](https://github.com/github/codeql-action)
from 4.37.2 to 4.37.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/analyze's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.3</h2>
<p>No user facing changes.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81"><code>e4fba86</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4031">#4031</a>
from github/update-v4.37.3-72f6a9da0</li>
<li><a
href="https://github.com/github/codeql-action/commit/fb50ab5d62a274adf3ef3e22cfe750ae87a0ede7"><code>fb50ab5</code></a>
Update changelog for v4.37.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/72f6a9da0def52d9193d6a758f0378b65091f8d1"><code>72f6a9d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4030">#4030</a>
from github/mbg/fix/no-proxy</li>
<li><a
href="https://github.com/github/codeql-action/commit/3b5ee58597653d9cc6785f3f1277f796d81f3646"><code>3b5ee58</code></a>
Use default <code>request</code> options instead of
<code>undefined</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/bfb6be4b5ecd3650f02f530571453e8c64ef0778"><code>bfb6be4</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4028">#4028</a>
from github/mergeback/v4.37.2-to-main-e0647621</li>
<li><a
href="https://github.com/github/codeql-action/commit/526ab84f9858816d9cf5f7b9df4dd5e2235f0eba"><code>526ab84</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/d6217b9b8c14166e4851db94c11155d03bd13c07"><code>d6217b9</code></a>
Update changelog and version after v4.37.2</li>
<li>See full diff in <a
href="https://github.com/github/codeql-action/compare/e0647621c2984b5ed2f768cb892365bf2a616ad1...e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/analyze&package-manager=github_actions&previous-version=4.37.2&new-version=4.37.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 08:16:44 +03:00
dependabot[bot] fbfc11f6d9 chore(deps): Bump ol-mapbox-style from 13.4.1 to 13.4.2 (#2046)
Bumps [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style)
from 13.4.1 to 13.4.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/openlayers/ol-mapbox-style/blob/main/CHANGELOG.md">ol-mapbox-style's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/openlayers/ol-mapbox-style/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ol-mapbox-style&package-manager=npm_and_yarn&previous-version=13.4.1&new-version=13.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-29 13:51:09 +00:00
dependabot[bot] 30239f81de chore(deps-dev): Bump eslint from 10.7.0 to 10.8.0 (#2040)
Bumps [eslint](https://github.com/eslint/eslint) from 10.7.0 to 10.8.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.8.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/2fee9bb7416116cbed4d8c8100b1ae713b6356a1"><code>2fee9bb</code></a>
feat: export <code>ConfigObject</code> from <code>eslint/config</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21082">#21082</a>)
(sethamus)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/6b8d2f7589b8a7c8b91b8ca2a2ef6d46178760d8"><code>6b8d2f7</code></a>
fix: escape reserved characters in rule id in <code>html</code>
formatter (<a
href="https://redirect.github.com/eslint/eslint/issues/21129">#21129</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/90910715011211a20d011d807d398a7005127f35"><code>9091071</code></a>
fix: prevent <code>no-unreachable-loop</code> crash when all loop types
are ignored (<a
href="https://redirect.github.com/eslint/eslint/issues/21116">#21116</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e23fafe8d4b15355adef6cdebef414c3a2019454"><code>e23fafe</code></a>
fix: prefer-object-spread add semicolon when adding parenthesis (<a
href="https://redirect.github.com/eslint/eslint/issues/21081">#21081</a>)
(synthex-byte)</li>
<li><a
href="https://github.com/eslint/eslint/commit/20b5ad052360a443786a202e94624a3f81846511"><code>20b5ad0</code></a>
fix: quadratic-time regex in <code>prefer-template</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21096">#21096</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8b6f6c0b33411f34485512456d94f221daf7321f"><code>8b6f6c0</code></a>
fix: apply ignore configs to computed methods in class-methods-use-this
(<a
href="https://redirect.github.com/eslint/eslint/issues/21094">#21094</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b2c608c014a396800a24a89343265d0616bee2d8"><code>b2c608c</code></a>
fix: NewExpression with parenthesized callee in
<code>preserve-caught-error</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21083">#21083</a>)
(Francesco Trotta)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/6ddf8587e5cfeeb7328332601bb76d98b8a198ea"><code>6ddf858</code></a>
docs: fix broken Specify Parser Options anchor link (<a
href="https://redirect.github.com/eslint/eslint/issues/21106">#21106</a>)
(Minsu)</li>
<li><a
href="https://github.com/eslint/eslint/commit/784dfbe98f0222426fd200153a5ce2e5624151f0"><code>784dfbe</code></a>
docs: Clarify <code>no-eq-null</code> description (<a
href="https://redirect.github.com/eslint/eslint/issues/21120">#21120</a>)
(Park Harin)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7ec733a3ba5acb053a73ac656030a3879aa48fda"><code>7ec733a</code></a>
docs: Fix typos and grammar in glossary (<a
href="https://redirect.github.com/eslint/eslint/issues/21095">#21095</a>)
(Marry (Subin Yang))</li>
<li><a
href="https://github.com/eslint/eslint/commit/92bb13f13065db72d62454b9830d3ae52db15c76"><code>92bb13f</code></a>
docs: replace quake link (<a
href="https://redirect.github.com/eslint/eslint/issues/21108">#21108</a>)
(Jung Hyeon Jun)</li>
<li><a
href="https://github.com/eslint/eslint/commit/68eb4a57572409dbdcfeb3bc5c92ddbba46bc770"><code>68eb4a5</code></a>
docs: fix broken Specify Globals anchor links in rule pages (<a
href="https://redirect.github.com/eslint/eslint/issues/21103">#21103</a>)
(Minsu)</li>
<li><a
href="https://github.com/eslint/eslint/commit/d28f697e0d32d7446c825fd89c362db028450134"><code>d28f697</code></a>
docs: replace Code Climate CLI links with Qlty CLI links (<a
href="https://redirect.github.com/eslint/eslint/issues/21099">#21099</a>)
(Jung Hyeon Jun)</li>
<li><a
href="https://github.com/eslint/eslint/commit/eccc68d42564e46bc9020d19ec52d2988f3b7bfa"><code>eccc68d</code></a>
docs: correct --suppressions-location option description (<a
href="https://redirect.github.com/eslint/eslint/issues/21093">#21093</a>)
(Ga eun Lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c5963f74bfa82a5b7ccc0607dcdcc695b8c97a31"><code>c5963f7</code></a>
docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/4fbf46d140120ae838db08cbe49544c985956490"><code>4fbf46d</code></a>
test: pin <code>webpack</code> version to 5.108.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/21137">#21137</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2d063e224e9bb0ccb0a28c120f7e380a8d62f320"><code>2d063e2</code></a>
chore: update HTTP URLs to HTTPS in JSDoc and comments (<a
href="https://redirect.github.com/eslint/eslint/issues/21101">#21101</a>)
(Bo Hyun Kim)</li>
<li><a
href="https://github.com/eslint/eslint/commit/eccbe7bc9257a6c99880468e452c8dfafbf47f74"><code>eccbe7b</code></a>
test: add error locations to <code>no-class-assign</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21123">#21123</a>)
(devoil)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e7d1e4373bf626f8da76d62ce024c28928bc99bc"><code>e7d1e43</code></a>
ci: bump actions/setup-go from 6 to 7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21118">#21118</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/e9d66d0cde1a7752c29dee53ab7b62632835a87a"><code>e9d66d0</code></a>
ci: bump actions/setup-node from 6 to 7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21119">#21119</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/ee225b60c26f0cc5f4d71641888a5bd2ec5626d6"><code>ee225b6</code></a>
test: Add error location details to <code>no-eq-null</code> rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21117">#21117</a>)
(Park Harin)</li>
<li><a
href="https://github.com/eslint/eslint/commit/044a627fa3e28ee1410d515acc5378eb4b49f8ba"><code>044a627</code></a>
chore: update minimatch to ^10.2.5 (<a
href="https://redirect.github.com/eslint/eslint/issues/21107">#21107</a>)
(김채영)</li>
<li><a
href="https://github.com/eslint/eslint/commit/fb09aa8ff09730d3ccf68859e065f99666b52466"><code>fb09aa8</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21115">#21115</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5abd878740fe417fd8a910cac3741f2a0317b365"><code>5abd878</code></a>
test: add error locations to <code>no-proto</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21114">#21114</a>)
(Gihyeon Jeong / 정기현)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9715887ec94a5ff936447d7b680d039fbe2f0541"><code>9715887</code></a>
test: Add error location details to <code>no-div-regex</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21110">#21110</a>)
(Park Harin)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a746ec6ea4a2249b1eb3f512264da5f4d5f7c886"><code>a746ec6</code></a>
test: add error locations to <code>no-new-wrappers</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21109">#21109</a>)
(Gihyeon Jeong / 정기현)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8dde64570e240f3ef8af873d59a752db6d8519aa"><code>8dde645</code></a>
test: add error locations to <code>no-ex-assign</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21102">#21102</a>)
(devoil)</li>
<li><a
href="https://github.com/eslint/eslint/commit/13ab0ec447650c079d8a5e5d67222f79e69c741e"><code>13ab0ec</code></a>
test: add error locations to <code>no-label-var</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21098">#21098</a>)
(Gihyeon Jeong / 정기현)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a99906ffb8342dde03336b5c6372b5658f21d5f2"><code>a99906f</code></a>
test: Add error location details to <code>no-delete-var</code> rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21105">#21105</a>)
(Park Harin)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c47e8dc9bbfba797430db45ae08cb6f7392cfc9d"><code>c47e8dc</code></a>
chore: add missing backticks to <code>languages/js/index.js</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21104">#21104</a>)
(beeen)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0174428dd7543d118cf67a823b98dd97032fe68c"><code>0174428</code></a>
chore: add missing backticks to <code>translate-cli-options.js</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21097">#21097</a>)
(dongkyu lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/3d36589a4917326500f0707bb41745160f387d00"><code>3d36589</code></a>
chore: add missing backticks to <code>serialization.js</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21091">#21091</a>)
(이규환)</li>
<li><a
href="https://github.com/eslint/eslint/commit/dcc9312c1081931de0fe1b555fbb6aa82fe696b9"><code>dcc9312</code></a>
test: add error locations to <code>eqeqeq</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21090">#21090</a>)
(Ga eun Lee)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2710b182472cd1a95e4aff6186cb2c4fbadb4ee0"><code>2710b18</code></a>
ci: Add explicit permissions to rebuild-docs-sites workflow (<a
href="https://redirect.github.com/eslint/eslint/issues/21089">#21089</a>)
(Marry (Subin Yang))</li>
<li><a
href="https://github.com/eslint/eslint/commit/5d2f8663ee60701e9036b0b0933a12efd9d93269"><code>5d2f866</code></a>
chore: update dependency prettier to v3.9.5 (<a
href="https://redirect.github.com/eslint/eslint/issues/21086">#21086</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/d584e31098f262563b97dc5d5f23a63a187879a0"><code>d584e31</code></a>
chore: fix failing ecosystem test for <code>eslint-plugin-unicorn</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21084">#21084</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/bf3eda049bd690f1e9a5a0c4520a6329b3e4ec85"><code>bf3eda0</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21079">#21079</a>)
(ESLint Bot)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/749dfed106f44d77bf3af2402ebfae20cdbf59ee"><code>749dfed</code></a>
10.8.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/4bd0d75b22ffd44809a92659f113c972c5be0770"><code>4bd0d75</code></a>
Build: changelog update for 10.8.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/4fbf46d140120ae838db08cbe49544c985956490"><code>4fbf46d</code></a>
test: pin <code>webpack</code> version to 5.108.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/21137">#21137</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/6ddf8587e5cfeeb7328332601bb76d98b8a198ea"><code>6ddf858</code></a>
docs: fix broken Specify Parser Options anchor link (<a
href="https://redirect.github.com/eslint/eslint/issues/21106">#21106</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/784dfbe98f0222426fd200153a5ce2e5624151f0"><code>784dfbe</code></a>
docs: Clarify <code>no-eq-null</code> description (<a
href="https://redirect.github.com/eslint/eslint/issues/21120">#21120</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/6b8d2f7589b8a7c8b91b8ca2a2ef6d46178760d8"><code>6b8d2f7</code></a>
fix: escape reserved characters in rule id in <code>html</code>
formatter (<a
href="https://redirect.github.com/eslint/eslint/issues/21129">#21129</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2d063e224e9bb0ccb0a28c120f7e380a8d62f320"><code>2d063e2</code></a>
chore: update HTTP URLs to HTTPS in JSDoc and comments (<a
href="https://redirect.github.com/eslint/eslint/issues/21101">#21101</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/eccbe7bc9257a6c99880468e452c8dfafbf47f74"><code>eccbe7b</code></a>
test: add error locations to <code>no-class-assign</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/21123">#21123</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2fee9bb7416116cbed4d8c8100b1ae713b6356a1"><code>2fee9bb</code></a>
feat: export <code>ConfigObject</code> from <code>eslint/config</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21082">#21082</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e7d1e4373bf626f8da76d62ce024c28928bc99bc"><code>e7d1e43</code></a>
ci: bump actions/setup-go from 6 to 7 (<a
href="https://redirect.github.com/eslint/eslint/issues/21118">#21118</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.7.0...v10.8.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 14:28:58 +00:00
dependabot[bot] 52e4e0dda9 chore(deps-dev): Bump @playwright/test from 1.61.1 to 1.62.0 (#2042)
Bumps [@playwright/test](https://github.com/microsoft/playwright) from
1.61.1 to 1.62.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases">@​playwright/test's
releases</a>.</em></p>
<blockquote>
<h2>v1.62.0</h2>
<h2>🧱 New component testing model</h2>
<p><a href="https://playwright.dev/docs/test-components">Component
testing</a> moves to a <strong>stories and galleries</strong> model.
A <strong>story</strong> wraps your component in one specific scenario —
hard-coded props, mock data, providers — and a <strong>gallery</strong>
page that you serve renders stories on demand.
The new <a
href="https://playwright.dev/docs/api/class-fixtures#fixtures-mount">fixtures.mount()</a>
fixture navigates to the gallery, mounts a story by id, and returns a <a
href="https://playwright.dev/docs/api/class-locator">Locator</a> scoped
to the story's root element:</p>
<pre lang="js"><code>test('click should expand', async ({ mount }) =&gt;
{
  const component = await mount('components/Expandable/Stateful');
  await component.getByRole('button').click();
  await expect(component.getByTestId('expanded')).toHaveValue('true');
});
</code></pre>
<p>Pass a story type as a template argument to type-check its props, and
use <code>update(props)</code> / <code>unmount()</code> on the returned
locator to re-render or tear down within a test.</p>
<h2>🛑 Cancel operations with AbortSignal</h2>
<p>Most operations and web-first assertions now accept a
<code>signal</code> option that takes an <a
href="https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal"><code>AbortSignal</code></a>,
letting you cancel long-running actions, navigations, waits, and
assertions:</p>
<pre lang="js"><code>const controller = new AbortController();
setTimeout(() =&gt; controller.abort(), 1000);
<p>await page.getByRole('button', { name: 'Submit' }).click({ signal:
controller.signal });<br />
await expect(page.getByText('Done')).toBeVisible({ signal:
controller.signal });<br />
</code></pre></p>
<p>Providing a signal does not disable the default timeout; pass
<code>timeout: 0</code> to disable it.</p>
<h2>🖼️ WebP screenshots</h2>
<p><a
href="https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1">expect(page).toHaveScreenshot()</a>
and <a
href="https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1">expect(locator).toHaveScreenshot()</a>
can now store snapshots in the WebP format — just give the snapshot a
<code>.webp</code> name:</p>
<pre lang="js"><code>// Visual comparisons store the golden snapshot as
lossless WebP.
await expect(page).toHaveScreenshot('homepage.webp');
<p>// Standalone screenshots can trade quality for size with lossy
WebP.<br />
await page.screenshot({ path: 'homepage.webp', quality: 50 });<br />
</code></pre></p>
<p><a
href="https://playwright.dev/docs/api/class-page#page-screenshot">page.screenshot()</a>
and [locator.screenshot()
(https://playwright.dev/docs/api/class-locator#locator-screenshot) also
accept <code>webp</code> as a <code>type</code>, where quality
<code>100</code> (the default) is lossless and lower values use lossy
compression.</p>
<h2>🧩 Custom test filtering with Reporter.preprocess()</h2>
<p>New <a
href="https://playwright.dev/docs/api/class-reporter#reporter-preprocess">reporter.preprocess()</a>
hook runs after the configuration is resolved and before <a
href="https://playwright.dev/docs/api/class-reporter#reporter-on-begin">reporter.onBegin()</a>,
letting a reporter mark individual tests as skipped, excluded, fixed, or
failing through a <a
href="https://playwright.dev/docs/api/class-testrun">TestRun</a>
object:</p>
<pre lang="js"><code>&lt;/tr&gt;&lt;/table&gt; 
</code></pre>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/microsoft/playwright/commit/e3950d9c140d007bd52853b45813c6274b24e36f"><code>e3950d9</code></a>
chore: mark v1.62.0 (<a
href="https://redirect.github.com/microsoft/playwright/issues/41981">#41981</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/f07e0f720fbe6691cc3d3d66ff9f3e58139e804c"><code>f07e0f7</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/41940">#41940</a>):
docs: release notes for v1.62 (<a
href="https://redirect.github.com/microsoft/playwright/issues/41967">#41967</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/05a306c78f11767535fd986eebab5d4c4dad4614"><code>05a306c</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/41964">#41964</a>):
Revert &quot;feat(routeFromHar): add interceptAPIRequests opt...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/2934858481d267df729eecb206ce45d497958015"><code>2934858</code></a>
fix: correct pending navigation log spacing (<a
href="https://redirect.github.com/microsoft/playwright/issues/41949">#41949</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/4b0cc996cc7b9d5b087214e8514d6b85abb03f91"><code>4b0cc99</code></a>
fix(test): unflake screencast backpressure test on slow macOS runner (<a
href="https://redirect.github.com/microsoft/playwright/issues/41951">#41951</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/bbbae6dce735d9751ff7b879555b7a0a64078266"><code>bbbae6d</code></a>
test: fixme WebSocket locale test in Chromium 150 (<a
href="https://redirect.github.com/microsoft/playwright/issues/41944">#41944</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/15c4f55879e49159e766fe1aa3dd9f9d87ba5fc1"><code>15c4f55</code></a>
fix(mcp): identify downloads explicitly (<a
href="https://redirect.github.com/microsoft/playwright/issues/41933">#41933</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/f5fa967ff581f4263e2b1eec60d887b8c412fd52"><code>f5fa967</code></a>
fix(network): request.postData() returns null for empty string body
override ...</li>
<li><a
href="https://github.com/microsoft/playwright/commit/0edafe4baab7fd20122939d3cfe1acabd8ed84a9"><code>0edafe4</code></a>
fix(mcp): launch the Chrome profile that has the extension installed (<a
href="https://redirect.github.com/microsoft/playwright/issues/41939">#41939</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/244a1ffdd8746b1418b4eedb95ff72687115ddb4"><code>244a1ff</code></a>
feat(firefox): roll to r1538 (<a
href="https://redirect.github.com/microsoft/playwright/issues/41938">#41938</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/microsoft/playwright/compare/v1.61.1...v1.62.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@playwright/test&package-manager=npm_and_yarn&previous-version=1.61.1&new-version=1.62.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 14:15:37 +00:00
dependabot[bot] bf873c430f chore(deps-dev): Bump sass from 1.101.7 to 1.102.0 (#2045)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [sass](https://github.com/sass/dart-sass) from 1.101.7 to 1.102.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/releases">sass's
releases</a>.</em></p>
<blockquote>
<h2>Dart Sass 1.102.0</h2>
<p>To install Sass 1.102.0, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>Use the 2.4 gamma transfer function for rec2020, as specified by the
latest draft of CSS Color 4.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11020">full
changelog</a> for changes in earlier releases.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's
changelog</a>.</em></p>
<blockquote>
<h2>1.102.0</h2>
<ul>
<li>Use the 2.4 gamma transfer function for rec2020, as specified by the
latest
draft of CSS Color 4.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sass/dart-sass/commit/45d1efe6517319ecd7b1409f1fa8355f969b0547"><code>45d1efe</code></a>
Use gamma 2.40 for display-referred rec2020 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2729">#2729</a>)</li>
<li>See full diff in <a
href="https://github.com/sass/dart-sass/compare/1.101.7...1.102.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sass&package-manager=npm_and_yarn&previous-version=1.101.7&new-version=1.102.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 14:14:23 +00:00
dependabot[bot] 4953e05af3 chore(deps-dev): Bump i18next-cli from 1.67.1 to 1.67.3 (#2041)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.67.1
to 1.67.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.3</h2>
<ul>
<li>feat(lint): new opt-in
<code>lint.checkPunctuationConcatenation</code> flags punctuation glued
onto a translation, e.g.
<code>&lt;label&gt;&lt;Trans&gt;Email&lt;/Trans&gt;:&lt;/label&gt;</code>
or
<code>&lt;div&gt;- &lt;Trans&gt;item&lt;/Trans&gt;&lt;/div&gt;</code>.
Punctuation spacing and form differ across
languages (French needs a narrow no-break space before <code>:</code>,
CJK uses fullwidth <code>:</code>,
RTL reorders), so it belongs inside the translation or in semantic
markup. Accepts
the same values as <code>checkConcatenation</code> (<code>'warn'</code>
/ <code>'error'</code> / <code>'off'</code> / boolean)
and defaults to <code>'off'</code>, since keeping punctuation out of a
translation is often
deliberate. Individual occurrences can be suppressed with the
<code>i18next-instrument-ignore</code> directive
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>).</li>
</ul>
<h2>1.67.2</h2>
<ul>
<li>fix(lint): broaden the <code>checkConcatenation</code> JSX detection
to flag any ≥2 adjacent
translation units rendered as direct siblings — a
<code>&lt;Trans&gt;</code> component or a
<code>{t(...)}</code> expression. This now catches
<code>&lt;Trans&gt;…&lt;/Trans&gt;{t('…')}</code>,
<code>{t('a')}{t('b')}</code> and two <code>&lt;Trans&gt;</code>
separated only by whitespace, in addition to
the previous &quot;<code>&lt;Trans&gt;</code> … text …
<code>&lt;Trans&gt;</code>&quot; case. Single translations next to
plain literal text or punctuation are still not flagged
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/303394154a9a861c960a019b55df866908c65768"><code>3033941</code></a>
1.67.3</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/8c115944392ab024b7414ef0027f081ffc69c135"><code>8c11594</code></a>
feat(lint): opt-in checkPunctuationConcatenation (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/aea509c4581a532cb32c5ad8e06b4120916594b5"><code>aea509c</code></a>
1.67.2</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/d86cb6f468ed64f1784afebe5f66f60ed638804b"><code>d86cb6f</code></a>
fix(lint): flag &gt;=2 adjacent translation units in JSX concatenation
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.67.1...v1.67.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.67.1&new-version=1.67.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 14:12:57 +00:00
dependabot[bot] 3107f8a09c chore(deps-dev): Bump postcss from 8.5.22 to 8.5.23 (#2043)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.22 to
8.5.23.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.23</h2>
<ul>
<li>Do not load source map without <code>opts.from</code> for security
reasons.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.23</h2>
<ul>
<li>Do not load source map without <code>opts.from</code> for security
reasons.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/eb9e1fe793740bb3280bdf5bf98147f857f011bd"><code>eb9e1fe</code></a>
Release 8.5.23 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/9d19c78ac91108b3f7d7130e55c6fa806c0efb84"><code>9d19c78</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/7beca139e70f9075c6b19700fcb00dd8033e5da8"><code>7beca13</code></a>
Does no load source map file without opts.from</li>
<li><a
href="https://github.com/postcss/postcss/commit/decea51421682341401575b3740709fda0e12930"><code>decea51</code></a>
Typo</li>
<li><a
href="https://github.com/postcss/postcss/commit/c18e30d126395d42a0726aa00e03a8f1088985ae"><code>c18e30d</code></a>
Update EM banner</li>
<li><a
href="https://github.com/postcss/postcss/commit/98a39ad73d163a90be924d5126c771262110f1fc"><code>98a39ad</code></a>
Update EM banner</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.22...8.5.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.22&new-version=8.5.23)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 14:12:26 +00:00
dependabot[bot] d990d55f1b chore(deps): Bump github/codeql-action/init from 4.37.1 to 4.37.3 (#2037)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.1 to 4.37.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.3</h2>
<p>No user facing changes.</p>
<h2>v4.37.2</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<ul>
<li>This version of the CodeQL Action adds support for the
<code>tools</code> input for the <code>codeql-action/init</code> step to
be specified using a <code>github-codeql-tools</code> <a
href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository
property</a>. This feature will gradually be rolled out following the
release of this version. Once rolled out, this allows for the CodeQL CLI
version that is used in GitHub-managed workflows, such as Default Setup,
to be set to a custom value. For example, customers who run into issues
with rate limits when a new CodeQL CLI version is released can set the
value to <code>toolcache</code> to always use the CodeQL CLI version
that is available in the runner toolcache. For Advanced Setup workflows,
the value provided for <code>tools</code> in the workflow definition
always takes precedence unless the value of the repository property
starts with <code>!</code>. <a
href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li>
</ul>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81"><code>e4fba86</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4031">#4031</a>
from github/update-v4.37.3-72f6a9da0</li>
<li><a
href="https://github.com/github/codeql-action/commit/fb50ab5d62a274adf3ef3e22cfe750ae87a0ede7"><code>fb50ab5</code></a>
Update changelog for v4.37.3</li>
<li><a
href="https://github.com/github/codeql-action/commit/72f6a9da0def52d9193d6a758f0378b65091f8d1"><code>72f6a9d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4030">#4030</a>
from github/mbg/fix/no-proxy</li>
<li><a
href="https://github.com/github/codeql-action/commit/3b5ee58597653d9cc6785f3f1277f796d81f3646"><code>3b5ee58</code></a>
Use default <code>request</code> options instead of
<code>undefined</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/bfb6be4b5ecd3650f02f530571453e8c64ef0778"><code>bfb6be4</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4028">#4028</a>
from github/mergeback/v4.37.2-to-main-e0647621</li>
<li><a
href="https://github.com/github/codeql-action/commit/526ab84f9858816d9cf5f7b9df4dd5e2235f0eba"><code>526ab84</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/d6217b9b8c14166e4851db94c11155d03bd13c07"><code>d6217b9</code></a>
Update changelog and version after v4.37.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/e0647621c2984b5ed2f768cb892365bf2a616ad1"><code>e064762</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4027">#4027</a>
from github/update-v4.37.2-385bcdc5a</li>
<li><a
href="https://github.com/github/codeql-action/commit/e0faed839190caa67a5cd42f1cc16246028ca3df"><code>e0faed8</code></a>
Add a couple of change notes</li>
<li><a
href="https://github.com/github/codeql-action/commit/73aad0eaa9df172668665a150d17b8bc5a650c20"><code>73aad0e</code></a>
Update changelog for v4.37.2</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/7188fc363630916deb702c7fdcf4e481b751f97a...e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.1&new-version=4.37.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 13:53:19 +00:00
dependabot[bot] c2f3bf30da chore(deps-dev): Bump sass from 1.101.3 to 1.101.7 (#2035)
Bumps [sass](https://github.com/sass/dart-sass) from 1.101.3 to 1.101.7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/releases">sass's
releases</a>.</em></p>
<blockquote>
<h2>Dart Sass 1.101.7</h2>
<p>To install Sass 1.101.7, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>No user-visible changes.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11017">full
changelog</a> for changes in earlier releases.</p>
<h2>Dart Sass 1.101.6</h2>
<p>To install Sass 1.101.6, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>No user-visible changes.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11016">full
changelog</a> for changes in earlier releases.</p>
<h2>Dart Sass 1.101.5</h2>
<p>To install Sass 1.101.5, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>No user-visible changes.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11015">full
changelog</a> for changes in earlier releases.</p>
<h2>Dart Sass 1.101.4</h2>
<p>To install Sass 1.101.4, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>
<p>Avoid emitting <code>rgb()</code> or <code>rgba()</code> functions
with non-percent decimal channels. Older browsers only support integer
values or (potentially decimal) percentages for these functions, so in
order to preserve backwards-compatibility while retaining full precision
for modern browsers, legacy colors that contain at least one non-integer
channel will now use percentages for their channels (for example,
<code>rgb(0%, 100%, 50%)</code> rather than <code>rgb(0, 255,
127.5)</code>).</p>
</li>
<li>
<p>Fix a bug where the values of plain-CSS <code>if()</code> expressions
were emitted using their <code>meta.inspect()</code> format rather than
their CSS serialization format.</p>
</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11014">full
changelog</a> for changes in earlier releases.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's
changelog</a>.</em></p>
<blockquote>
<h2>1.101.7</h2>
<ul>
<li>No user-visible changes.</li>
</ul>
<h2>1.101.6</h2>
<ul>
<li>No user-visible changes.</li>
</ul>
<h2>1.101.5</h2>
<ul>
<li>No user-visible changes.</li>
</ul>
<h2>1.101.4</h2>
<ul>
<li>
<p>Avoid emitting <code>rgb()</code> or <code>rgba()</code> functions
with non-percent decimal
channels. Older browsers only support integer values or (potentially
decimal)
percentages for these functions, so in order to preserve
backwards-compatibility while retaining full precision for modern
browsers,
legacy colors that contain at least one non-integer channel will now use
percentages for their channels (for example, <code>rgb(0%, 100%,
50%)</code> rather than
<code>rgb(0, 255, 127.5)</code>).</p>
</li>
<li>
<p>Fix a bug where the values of plain-CSS <code>if()</code> expressions
were emitted using
their <code>meta.inspect()</code> format rather than their CSS
serialization format.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sass/dart-sass/commit/96aa29183fc3d484929c1b461352b2c7562be81e"><code>96aa291</code></a>
Persist credentials on all repos we push to (<a
href="https://redirect.github.com/sass/dart-sass/issues/2812">#2812</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/5af0b897d54050a8b7e303f8d616e64b2f4d1ef1"><code>5af0b89</code></a>
Set the Git committer for release tasks (<a
href="https://redirect.github.com/sass/dart-sass/issues/2811">#2811</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/2cecbbb46ba375ff3e1835f1df73d58d09a67604"><code>2cecbbb</code></a>
Fix more issues downstream from Zizmor (<a
href="https://redirect.github.com/sass/dart-sass/issues/2809">#2809</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/a16f014e9f346fe3fb627395fa8b57155970a17e"><code>a16f014</code></a>
Emit floating-point <code>rgb()</code> values as percentages (<a
href="https://redirect.github.com/sass/dart-sass/issues/2800">#2800</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/4ed2c883a6233d2d8b8d63901940639c912025ef"><code>4ed2c88</code></a>
Serialize <code>if()</code> values as CSS, not as inspected values (<a
href="https://redirect.github.com/sass/dart-sass/issues/2808">#2808</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/9dfde3db6b608c8ea1744e9c3b0f9622ab96c6f3"><code>9dfde3d</code></a>
Fix more post-Zizmor failures (<a
href="https://redirect.github.com/sass/dart-sass/issues/2806">#2806</a>)</li>
<li>See full diff in <a
href="https://github.com/sass/dart-sass/compare/1.101.3...1.101.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sass&package-manager=npm_and_yarn&previous-version=1.101.3&new-version=1.101.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 13:52:25 +00:00
dependabot[bot] 10dc48f3ca chore(deps-dev): Bump i18next-cli from 1.66.2 to 1.67.1 (#2033)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.66.2
to 1.67.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.67.1</h2>
<ul>
<li>feat(lint): <code>lint.checkConcatenation</code> now accepts a
severity level in addition to
a boolean: <code>'error'</code> reports concatenation issues as errors
so the <code>lint</code> command
exits non-zero (fails CI), <code>'warn'</code> (or <code>true</code>,
the default) reports them as
non-failing warnings, and <code>'off'</code> (or <code>false</code>)
disables the check. Previously the
concatenation check could only warn; making it fail the build required a
custom
plugin (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>).</li>
</ul>
<h2>1.67.0</h2>
<ul>
<li>feat(lint): detect string concatenation involving translated
strings, an i18n
anti-pattern that breaks in languages which reorder or inflect the
pieces. The
linter now flags JavaScript concatenation where an operand is a
<code>t()</code> call
(e.g. <code>t('greeting') + ', ' + name</code>) and sentences split
across multiple
<code>&lt;Trans&gt;</code> components joined by literal text
(e.g. <code>&lt;p&gt;&lt;Trans&gt;…&lt;/Trans&gt; and
&lt;Trans&gt;…&lt;/Trans&gt;&lt;/p&gt;</code>). It deliberately does not
flag <code>t()</code> used only as a nested call argument (e.g.
<code>arr.indexOf(t('x')) + 1</code>)
or concatenation inside <code>t()</code> arguments (e.g.
<code>t('prefix.' + suffix)</code>). Enabled
by default; disable with <code>lint.checkConcatenation: false</code>
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>).</li>
<li>feat(lint): lint issues now carry an optional <code>severity</code>
(<code>'error'</code> | <code>'warning'</code>).
Concatenation issues are reported as <strong>warnings</strong> — they
are printed but do not
fail the run (the <code>lint</code> command exits non-zero only when
there are errors), so
adding this check does not break existing CI pipelines. Hardcoded-string
and
interpolation issues remain errors. Plugins may set
<code>severity</code> on the issues
they emit (defaults to <code>'error'</code> when omitted).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/15a7577a5695e6f6e52c4cc5d189c9173841b705"><code>15a7577</code></a>
1.67.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/ca015bbd3901343e0cbd88920fe363c14386efd1"><code>ca015bb</code></a>
feat(lint): allow lint.checkConcatenation to set severity
(error/warn/off) (#...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/c5a699dd92860c8b5f8ff6f23d3de89d68a1faba"><code>c5a699d</code></a>
1.67.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/7a63d39d2eb289872953ef96b05ce202a9ec38c8"><code>7a63d39</code></a>
feat(lint): warn on string concatenation in translations (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/275">#275</a>)</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.66.2...v1.67.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.66.2&new-version=1.67.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 13:52:13 +00:00
dependabot[bot] cf836a1969 chore(deps): Bump docker/login-action from 4.4.0 to 4.5.1 (#2034)
Bumps [docker/login-action](https://github.com/docker/login-action) from
4.4.0 to 4.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/login-action/releases">docker/login-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.1</h2>
<ul>
<li>Support <code>dhi.io</code> as Docker Hub OIDC registry by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1054">docker/login-action#1054</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.5.0...v4.5.1">https://github.com/docker/login-action/compare/v4.5.0...v4.5.1</a></p>
<h2>v4.5.0</h2>
<ul>
<li><a href="https://github.com/docker/login-action#docker-hub">Docker
Hub OIDC</a> login support by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/login-action/pull/1048">docker/login-action#1048</a></li>
<li>Bump <code>@​aws-sdk/client-ecr</code> and
<code>@​aws-sdk/client-ecr-public</code> to 3.1091.0 in <a
href="https://redirect.github.com/docker/login-action/pull/1037">docker/login-action#1037</a></li>
<li>Bump <code>@​docker/actions-toolkit</code> from 0.92.0 to 0.94.0 in
<a
href="https://redirect.github.com/docker/login-action/pull/1044">docker/login-action#1044</a>
<a
href="https://redirect.github.com/docker/login-action/pull/1050">docker/login-action#1050</a></li>
<li>Bump brace-expansion from 1.1.13 to 1.1.16 in <a
href="https://redirect.github.com/docker/login-action/pull/1046">docker/login-action#1046</a></li>
<li>Bump js-yaml from 5.2.0 to 5.2.1 in <a
href="https://redirect.github.com/docker/login-action/pull/1038">docker/login-action#1038</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/login-action/compare/v4.4.0...v4.5.0">https://github.com/docker/login-action/compare/v4.4.0...v4.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/login-action/commit/abd2ef45e78c5afb21d64d4ca52ee8550d9572c7"><code>abd2ef4</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1055">#1055</a>
from crazy-max/test-registry-auth-oidc</li>
<li><a
href="https://github.com/docker/login-action/commit/d49d3a9839fef51322fa44989a44fdc43fccfc22"><code>d49d3a9</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1054">#1054</a>
from crazy-max/oidc-missing-dhi</li>
<li><a
href="https://github.com/docker/login-action/commit/b58b17c30b4db92a4ed049b213cae512b12e460b"><code>b58b17c</code></a>
test: cover Docker Hub OIDC with registry-auth</li>
<li><a
href="https://github.com/docker/login-action/commit/be646c21cec26cea303e29290d5f6ba6fde8e606"><code>be646c2</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/d77c059cb9956cedaa427dc022d89f39acba678f"><code>d77c059</code></a>
support dhi.io as Docker Hub OIDC registry</li>
<li><a
href="https://github.com/docker/login-action/commit/06fb636fac595d6fb4b28a5dfcb21a6f5091859c"><code>06fb636</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1037">#1037</a>
from docker/dependabot/npm_and_yarn/aws-sdk-dependen...</li>
<li><a
href="https://github.com/docker/login-action/commit/a8bc9539118a762b0e5788b53a50907977cc1b8d"><code>a8bc953</code></a>
[dependabot skip] chore: update generated content</li>
<li><a
href="https://github.com/docker/login-action/commit/f54b9019bf5074f6e3480a3ac4b834f5f4b90aab"><code>f54b901</code></a>
build(deps): bump the aws-sdk-dependencies group across 1 directory with
2 up...</li>
<li><a
href="https://github.com/docker/login-action/commit/77f18f6713512f90ac35aaf21db0d3710f1b85a6"><code>77f18f6</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1049">#1049</a>
from docker/dependabot/github_actions/codeql-actions...</li>
<li><a
href="https://github.com/docker/login-action/commit/ec0bf287fb1e2e051c56b2f6e6a3eed487b9fe52"><code>ec0bf28</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/login-action/issues/1050">#1050</a>
from docker/dependabot/npm_and_yarn/docker/actions-t...</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/login-action/compare/af1e73f918a031802d376d3c8bbc3fe56130a9b0...abd2ef45e78c5afb21d64d4ca52ee8550d9572c7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/login-action&package-manager=github_actions&previous-version=4.4.0&new-version=4.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 13:52:06 +00:00
dependabot[bot] cbccff7d92 chore(deps-dev): Bump postcss from 8.5.21 to 8.5.22 (#2032)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.21 to
8.5.22.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.22</h2>
<ul>
<li>Fixed custom property losing semicolon before a comment (by <a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.22</h2>
<ul>
<li>Fixed custom property losing semicolon before a comment (by <a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/a3e48c492ddec0e4879d513b8b995fee887af352"><code>a3e48c4</code></a>
Release 8.5.22 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/f49d6911795f53b2cfe023bb686bf1144ec30618"><code>f49d691</code></a>
Fix custom property losing its semicolon before a comment (<a
href="https://redirect.github.com/postcss/postcss/issues/2117">#2117</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.21...8.5.22">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.21&new-version=8.5.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 13:51:08 +00:00
dependabot[bot] 2b5f03f3c2 chore(deps): Bump github/codeql-action/analyze from 4.36.3 to 4.37.2 (#2029)
Bumps
[github/codeql-action/analyze](https://github.com/github/codeql-action)
from 4.36.3 to 4.37.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/analyze's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.2</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>v4.37.1</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>v4.37.0</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.3 - 22 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.37.2 - 21 Jul 2026</h2>
<ul>
<li>The new address format for the <code>config-file</code> input that
was introduced in CodeQL Action 4.37.0 is now enabled by default. In
addition to the format described there, the <code>remote=</code> prefix
can now be used to explicitly indicate that the input refers to a remote
file. All previous input formats continue to be accepted as well. <a
href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li>
<li>The CodeQL Action can now make use of <a
href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured
private registries</a> in Default Setup to retrieve CodeQL configuration
files from remote repositories that require authentication. This will
allow customers to store their CodeQL configuration in a single
repository that can then be referenced by Default Setup workflows in
other repositories. We expect to roll this and other, related changes
out to everyone in July. <a
href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li>
</ul>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/e0647621c2984b5ed2f768cb892365bf2a616ad1"><code>e064762</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4027">#4027</a>
from github/update-v4.37.2-385bcdc5a</li>
<li><a
href="https://github.com/github/codeql-action/commit/e0faed839190caa67a5cd42f1cc16246028ca3df"><code>e0faed8</code></a>
Add a couple of change notes</li>
<li><a
href="https://github.com/github/codeql-action/commit/73aad0eaa9df172668665a150d17b8bc5a650c20"><code>73aad0e</code></a>
Update changelog for v4.37.2</li>
<li><a
href="https://github.com/github/codeql-action/commit/385bcdc5afb0b5a06bd1dae7809fda5453c7664b"><code>385bcdc</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4026">#4026</a>
from github/dependabot/npm_and_yarn/tar-7.5.20</li>
<li><a
href="https://github.com/github/codeql-action/commit/de0229cea17fd9b594946f05dccc18e9c33a15d1"><code>de0229c</code></a>
Merge branch 'main' into dependabot/npm_and_yarn/tar-7.5.20</li>
<li><a
href="https://github.com/github/codeql-action/commit/115e8cbbe9419ab1ea002e5c0c6d4797d7820bf8"><code>115e8cb</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4010">#4010</a>
from github/mbg/ts/update-release-branch</li>
<li><a
href="https://github.com/github/codeql-action/commit/dbdf0b0c7d63778e4b807cb4cef00f090e7dcd4b"><code>dbdf0b0</code></a>
Bump tar from 7.5.16 to 7.5.20</li>
<li><a
href="https://github.com/github/codeql-action/commit/830c23121c8d6124ad817115f9d68da98f44eba0"><code>830c231</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4023">#4023</a>
from github/mbg/ff/remove-new-remote-file-addresses-ff</li>
<li><a
href="https://github.com/github/codeql-action/commit/69fd9e97ba2f4e95024e587c495eec0f1c9186ea"><code>69fd9e9</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4024">#4024</a>
from github/mbg/private-registry/make-docker-available</li>
<li><a
href="https://github.com/github/codeql-action/commit/b85568788a5dbb01732f9d4e0d0882e5429bb804"><code>b855687</code></a>
Always make <code>docker_registry</code> registries available</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a...e0647621c2984b5ed2f768cb892365bf2a616ad1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/analyze&package-manager=github_actions&previous-version=4.36.3&new-version=4.37.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 13:52:38 +00:00
dependabot[bot] ccfb9a3111 chore(deps-dev): Bump typescript-eslint from 8.64.0 to 8.65.0 (#2028)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.64.0 to 8.65.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.65.0</h2>
<h2>8.65.0 (2026-07-20)</h2>
<h3>🚀 Features</h3>
<ul>
<li>add warning when TS 7 is detected (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12529">#12529</a>)</li>
<li><strong>eslint-plugin:</strong> [no-restricted-imports] deprecate
extension rule (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12527">#12527</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/19562">#19562</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/11889">#11889</a>)</li>
<li><strong>eslint-plugin:</strong> [no-shadow] specialized error on
enum declaration and member shadowing (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12578">#12578</a>)</li>
<li><strong>parser:</strong> add onUnsupportedTypeScriptVersion option
to error on unsupported TypeScript versions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12465">#12465</a>)</li>
<li><strong>typescript-estree:</strong> throw for invalid import defer
syntax (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12552">#12552</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [prefer-string-starts-ends-with]
handle escaped $ ending regex literals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12515">#12515</a>)</li>
<li><strong>eslint-plugin:</strong> [unbound-method] report unbound
methods accessed via member expression on union types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12448">#12448</a>)</li>
<li><strong>eslint-plugin:</strong>
[no-unnecessary-parameter-property-assignment] don't flag computed
assignments with a variable key (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12568">#12568</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg </li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Serhii Leniv <a
href="https://github.com/Serhii-Leniv"><code>@​Serhii-Leniv</code></a></li>
<li>송재욱</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.65.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.65.0 (2026-07-20)</h2>
<h3>🚀 Features</h3>
<ul>
<li>add warning when TS 7 is detected (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12529">#12529</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Josh Goldberg </li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.65.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/63ba81b6acfa0d663c29aa0013d4672bf3b0426c"><code>63ba81b</code></a>
chore(release): publish 8.65.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/eaf457631ac381aadfee747c2d098c8ac4df9d63"><code>eaf4576</code></a>
feat: add warning when TS 7 is detected (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12529">#12529</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/0d06406f3181f063041dbd1621d71984127ddae1"><code>0d06406</code></a>
chore: add attw validation to repo (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12437">#12437</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/c2386e49ec6347aa92d53a1f32143ca45984cc13"><code>c2386e4</code></a>
chore(deps): update dependency prettier to v3.9.5 (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12486">#12486</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.65.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.64.0&new-version=8.65.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 13:52:21 +00:00
dependabot[bot] 23ce685a91 chore(deps-dev): Bump postcss from 8.5.20 to 8.5.21 (#2027)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [postcss](https://github.com/postcss/postcss) from 8.5.20 to
8.5.21.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.21</h2>
<ul>
<li>Fixed childless at-rule losing semicolon before comment (by <a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/isker"><code>@​isker</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.21</h2>
<ul>
<li>Fixed childless at-rule losing semicolon before comment (by <a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/isker"><code>@​isker</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/28e0daf8f2fe5ba9e19ea3f8c27c8fe176f9419e"><code>28e0daf</code></a>
Release 8.5.21 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/3d2b4e43e38274f233b5609d09687cadad8215d9"><code>3d2b4e4</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/d197327e82e1a7d6dd9272effa3e4bfa91fdd20e"><code>d197327</code></a>
Fix childless at-rule losing its semicolon before a comment (<a
href="https://redirect.github.com/postcss/postcss/issues/2115">#2115</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/0e360b749aa17a5a89baccf9c8e5db3c2978c21e"><code>0e360b7</code></a>
Fix mismatched JSDoc comments on Position (<a
href="https://redirect.github.com/postcss/postcss/issues/2114">#2114</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.20...8.5.21">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.20&new-version=8.5.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 13:52:06 +00:00
dependabot[bot] ea67387e65 chore(deps): Bump @maplibre/maplibre-gl-style-spec from 26.1.0 to 26.2.1 (#2026)
Bumps
[@maplibre/maplibre-gl-style-spec](https://github.com/maplibre/maplibre-style-spec)
from 26.1.0 to 26.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/releases">@​maplibre/maplibre-gl-style-spec's
releases</a>.</em></p>
<blockquote>
<h2>v26.2.1</h2>
<h3> Features and improvements</h3>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix <code>fill-extrusion-rounded-corner-distance</code> being
documented as an <code>paint</code> instead of an <code>layout</code>
property as implemnented (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1784">#1784</a>)
(by <a
href="https://github.com/CommanderStorm"><code>@​CommanderStorm</code></a>)</li>
</ul>
<h2>v26.2.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add fill-extrusion-rounded-corner-distance (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1781">#1781</a>,
<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1782">#1782</a>)
(by <a
href="https://github.com/louwers"><code>@​louwers</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Support <code>global-state</code> (and other
<code>value</code>-typed) expressions in
<code>projectionDefinition</code> properties such as
<code>projection.type</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1772">#1772</a>)
(by <a
href="https://github.com/CommanderStorm"><code>@​CommanderStorm</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/maplibre/maplibre-style-spec/blob/main/CHANGELOG.md">@​maplibre/maplibre-gl-style-spec's
changelog</a>.</em></p>
<blockquote>
<h2>26.2.1</h2>
<h3> Features and improvements</h3>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Fix <code>fill-extrusion-rounded-corner-distance</code> being
documented as an <code>paint</code> instead of an <code>layout</code>
property as implemnented (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1784">#1784</a>)
(by <a
href="https://github.com/CommanderStorm"><code>@​CommanderStorm</code></a>)</li>
</ul>
<h2>26.2.0</h2>
<h3> Features and improvements</h3>
<ul>
<li>Add fill-extrusion-rounded-corner-distance (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1781">#1781</a>,
<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1782">#1782</a>)
(by <a
href="https://github.com/louwers"><code>@​louwers</code></a>)</li>
</ul>
<h3>🐞 Bug fixes</h3>
<ul>
<li>Support <code>global-state</code> (and other
<code>value</code>-typed) expressions in
<code>projectionDefinition</code> properties such as
<code>projection.type</code> (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/pull/1772">#1772</a>)
(by <a
href="https://github.com/CommanderStorm"><code>@​CommanderStorm</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/7a2420b0a076a1a013149720a511d63fc9502340"><code>7a2420b</code></a>
Bump js version to 26.2.1 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1785">#1785</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/688a88cd1903cd8039a48ce8efc63b3f46f4008b"><code>688a88c</code></a>
fix: move fill-extrusion-rounded-corner-distance to layout properties
(<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1784">#1784</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/08a02a3b9a5d9cdda9cfda1de309b812f712cdf8"><code>08a02a3</code></a>
docs: document global state support for paint and layout (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1770">#1770</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/dda297b6e3578068209e996ab716afc144759735"><code>dda297b</code></a>
Bump js version to 26.2.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1783">#1783</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/add55f47717c9dcc7e8442be98c08f0cc356d243"><code>add55f4</code></a>
docs: document sky.* and light.* global state and rendering support (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1771">#1771</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/dc8a92b68d0818ce0848a16bc2cf6006e38a80f6"><code>dc8a92b</code></a>
implement global-state and projection interop (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1772">#1772</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/faaa9fe3b4f543decacb4015a88c8ef125348490"><code>faaa9fe</code></a>
Fix Android/iOS version
<code>fill-extrusion-rounded-corner-distance</code> property (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1">#1</a>...</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/28fe948d47b325ae0c2688257840b9881f87fa8a"><code>28fe948</code></a>
build(deps-dev): bump oxfmt from 0.58.0 to 0.59.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1777">#1777</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/f20786eb870a9520a68ab39629bc45cb19211e9b"><code>f20786e</code></a>
build(deps-dev): bump <code>@​typescript-eslint/parser</code> from
8.64.0 to 8.65.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1779">#1779</a>)</li>
<li><a
href="https://github.com/maplibre/maplibre-style-spec/commit/d885670d68e21e4e4921b77984e45d02743a4624"><code>d885670</code></a>
build(deps-dev): bump rolldown from 1.1.5 to 1.2.0 (<a
href="https://redirect.github.com/maplibre/maplibre-style-spec/issues/1775">#1775</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/maplibre/maplibre-style-spec/compare/v26.1.0...v26.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@maplibre/maplibre-gl-style-spec&package-manager=npm_and_yarn&previous-version=26.1.0&new-version=26.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 13:51:47 +00:00
dependabot[bot] 30bcfc2265 chore(deps-dev): Bump sass from 1.101.0 to 1.101.3 (#2025)
Bumps [sass](https://github.com/sass/dart-sass) from 1.101.0 to 1.101.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/releases">sass's
releases</a>.</em></p>
<blockquote>
<h2>Dart Sass 1.101.3</h2>
<p>To install Sass 1.101.3, download one of the packages below and <a
href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or
see <a href="https://sass-lang.com/install">the Sass website</a> for
full installation instructions.</p>
<h1>Changes</h1>
<ul>
<li>No user-visible changes.</li>
</ul>
<p>See the <a
href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#11013">full
changelog</a> for changes in earlier releases.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's
changelog</a>.</em></p>
<blockquote>
<h2>1.101.3</h2>
<ul>
<li>No user-visible changes.</li>
</ul>
<h2>1.101.2</h2>
<ul>
<li>Fix a bug where the deprecation warning for vendor-prefixed
<code>expression()</code>
functions would incorrectly indicate whether or not the function would
be
invalid Sass in Dart Sass 2.0.0.</li>
</ul>
<h2>1.101.1</h2>
<ul>
<li>Sass stack trace entries are now always either absolute URLs,
absolute paths,
or paths relative to the current working directory. Previously, if a
stylesheet was loaded using a relative URL (as from a load path), that
relative URL was listed even if it couldn't be resolved relative to the
current working directory. However, this created potential ambiguities,
so
this behavior has been removed.</li>
</ul>
<h3>Command Line Interface</h3>
<ul>
<li><code>--watch</code> mode now handles atomically-written files more
gracefully.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sass/dart-sass/commit/e8c12331ea5304a1d641d6a6bd4cb526cb3800b9"><code>e8c1233</code></a>
Fix some GitHub actions issues introduced by the Zizmor refactor (<a
href="https://redirect.github.com/sass/dart-sass/issues/2798">#2798</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/d676118ace4b6b196383f26cf5ffda4f9c61b239"><code>d676118</code></a>
Merge pull request <a
href="https://redirect.github.com/sass/dart-sass/issues/2797">#2797</a>
from sass/lints</li>
<li><a
href="https://github.com/sass/dart-sass/commit/548e6604c5eed5137b148a839513c7444582eb3c"><code>548e660</code></a>
Prefer interpolation to compose strings</li>
<li><a
href="https://github.com/sass/dart-sass/commit/b443ffe759f7235170b1fd6e540dcb8e459f3dca"><code>b443ffe</code></a>
Use function type syntax</li>
<li><a
href="https://github.com/sass/dart-sass/commit/3d28f6a83ff8c16e7b1980f6a4e46d62f1505fce"><code>3d28f6a</code></a>
Add <code>@override</code></li>
<li><a
href="https://github.com/sass/dart-sass/commit/e182ba21e1459c5efad0247e9bc5ba212a870db3"><code>e182ba2</code></a>
Expand dependency constraints (<a
href="https://redirect.github.com/sass/dart-sass/issues/2796">#2796</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/66f9d41f79231eebb4380a126bbc662c13f2d7d0"><code>66f9d41</code></a>
Bump analyzer from 10.2.0 to 13.3.0 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2795">#2795</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/ab4026df5efe9eef1d7accc2653bdf050c3c1c14"><code>ab4026d</code></a>
Use the latest lints package (<a
href="https://redirect.github.com/sass/dart-sass/issues/2789">#2789</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/fbb1fe0533cc78c14b848c709b30d599c5bf86e1"><code>fbb1fe0</code></a>
Bump zizmorcore/zizmor-action from 0.5.6 to 0.5.7 (<a
href="https://redirect.github.com/sass/dart-sass/issues/2793">#2793</a>)</li>
<li><a
href="https://github.com/sass/dart-sass/commit/8abfa4d23d447bcada1efe415066458a08a0a155"><code>8abfa4d</code></a>
Fix <code>--watch</code> not recompiling files modified via atomic save
(<a
href="https://redirect.github.com/sass/dart-sass/issues/2791">#2791</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/sass/dart-sass/compare/1.101.0...1.101.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sass&package-manager=npm_and_yarn&previous-version=1.101.0&new-version=1.101.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 13:50:21 +00:00
dependabot[bot] a408437cf8 chore(deps-dev): Bump stylelint from 17.14.0 to 17.14.1 (#2024)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 17.14.0
to 17.14.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/stylelint/stylelint/releases">stylelint's
releases</a>.</em></p>
<blockquote>
<h2>17.14.1</h2>
<p>It fixes 4 bugs.</p>
<ul>
<li>Fixed: <code>quiet</code> option suppresses <code>report*</code>
warning reports (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9387">#9387</a>)
(<a
href="https://github.com/ychampion"><code>@​ychampion</code></a>).</li>
<li>Fixed: reported range of unknown rules (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9385">#9385</a>)
(<a
href="https://github.com/ybiquitous"><code>@​ybiquitous</code></a>).</li>
<li>Fixed:
<code>declaration-block-no-redundant-longhand-properties</code> autofix
producing invalid <code>background</code> shorthand when
<code>background-size</code> is present (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9364">#9364</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed: <code>rule-empty-line-before</code> false positives for
shared-line comments with <code>except:
[&quot;after-single-line-comment&quot;]</code> (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9394">#9394</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md">stylelint's
changelog</a>.</em></p>
<blockquote>
<h2>17.14.1 - 2026-07-20</h2>
<p>It fixes 4 bugs.</p>
<ul>
<li>Fixed: <code>quiet</code> option suppresses <code>report*</code>
warning reports (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9387">#9387</a>)
(<a
href="https://github.com/ychampion"><code>@​ychampion</code></a>).</li>
<li>Fixed: reported range of unknown rules (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9385">#9385</a>)
(<a
href="https://github.com/ybiquitous"><code>@​ybiquitous</code></a>).</li>
<li>Fixed:
<code>declaration-block-no-redundant-longhand-properties</code> autofix
producing invalid <code>background</code> shorthand when
<code>background-size</code> is present (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9364">#9364</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed: <code>rule-empty-line-before</code> false positives for
shared-line comments with <code>except:
[&quot;after-single-line-comment&quot;]</code> (<a
href="https://redirect.github.com/stylelint/stylelint/pull/9394">#9394</a>)
(<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/stylelint/stylelint/commit/cd66b035087270dd62d33542154463266cc5e81a"><code>cd66b03</code></a>
Release 17.14.1 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9397">#9397</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/7c30fc5987c18c7c017416299d84ad162a53e725"><code>7c30fc5</code></a>
Refactor to replace <code>void</code> with <code>undefined</code> in
union types (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9395">#9395</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/57c8d0e3c54d83342d23895991d0400ae47e2c14"><code>57c8d0e</code></a>
Fix <code>rule-empty-line-before</code> false positives for shared-line
comments with `e...</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/226f10a68f8fe420f4f32060a23920723c0943ba"><code>226f10a</code></a>
Bump <code>@​vscode/windows-process-tree</code> from 0.7.0 to 0.8.0 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9392">#9392</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/13c3c5c7e95853d58247f77e84f342e60d9f88ca"><code>13c3c5c</code></a>
Bump globby from 16.2.0 to 16.2.1 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9393">#9393</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/6dafcf5cfd7bbd8c62e19601cca3be7235ce75d4"><code>6dafcf5</code></a>
Document unknown-effort contributions (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9391">#9391</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/54c2bc8ac9e1008419ea5fd8f3ee4fddb8ff4a96"><code>54c2bc8</code></a>
Fix test for Yarn PnP with npm v12 (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9390">#9390</a>)</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/3e7eb56f721a28cc60070cec25d3776715bfb1a5"><code>3e7eb56</code></a>
Fix <code>declaration-block-no-redundant-longhand-properties</code>
invalid <code>background</code>...</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/438196ede78f9a8be3413b0dedecc25f10dd8ab0"><code>438196e</code></a>
Bump postcss from 8.5.15 to 8.5.16 in the postcss group across 1
directory (#...</li>
<li><a
href="https://github.com/stylelint/stylelint/commit/c1e1489dee8d214f9df51945bc9bac0e66b666a6"><code>c1e1489</code></a>
Fix <code>quiet</code> option to suppress <code>report*</code> warning
reports (<a
href="https://redirect.github.com/stylelint/stylelint/issues/9387">#9387</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/stylelint/stylelint/compare/17.14.0...17.14.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=stylelint&package-manager=npm_and_yarn&previous-version=17.14.0&new-version=17.14.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-23 13:51:28 +00:00
dependabot[bot] 01e58e0895 chore(deps): Bump fast-uri from 3.1.2 to 3.1.4 (#2023)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to
3.1.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastify/fast-uri/releases">fast-uri's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.4</h2>
<h2>⚠️ Security Release</h2>
<p>Fix for <a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-v2hh-gcrm-f6hx">https://github.com/fastify/fast-uri/security/advisories/GHSA-v2hh-gcrm-f6hx</a></p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.3...v3.1.4">https://github.com/fastify/fast-uri/compare/v3.1.3...v3.1.4</a></p>
<h2>v3.1.3</h2>
<h2>⚠️ Security Release</h2>
<ul>
<li>Fixes: <a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-4c8g-83qw-93j6">https://github.com/fastify/fast-uri/security/advisories/GHSA-4c8g-83qw-93j6</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.3">https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/commit/6aeece669e4166b2446a89f17c07a3b15dfb7ed4"><code>6aeece6</code></a>
Bumped v3.1.4</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/2d50fbabc80e4d0884fe0f6a98fe118ce6faa353"><code>2d50fba</code></a>
fix: reject literal backslash in URI authority</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/0549fe35b0d482233f3be2816439f3ec803603fa"><code>0549fe3</code></a>
Bumped v3.1.3</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/2a6d357a18a68e6d812824379fd3388a1ae50d05"><code>2a6d357</code></a>
Merge commit from fork</li>
<li>See full diff in <a
href="https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fast-uri&package-manager=npm_and_yarn&previous-version=3.1.2&new-version=3.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 14:01:04 +00:00
dependabot[bot] 8128fef161 chore(deps-dev): Bump immutable from 5.1.5 to 5.1.9 (#2022)
Bumps [immutable](https://github.com/immutable-js/immutable-js) from
5.1.5 to 5.1.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/releases">immutable's
releases</a>.</em></p>
<blockquote>
<h2>v5.1.9</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(List): preserve undefined values when grown past 32 elements by
<a href="https://github.com/spokodev"><code>@​spokodev</code></a> / <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2235">immutable-js/immutable-js#2235</a>
(originated from <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2230">immutable-js/immutable-js#2230</a>
)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.8...v5.1.9">https://github.com/immutable-js/immutable-js/compare/v5.1.8...v5.1.9</a></p>
<h2>v5.1.8</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.7...v5.1.8">https://github.com/immutable-js/immutable-js/compare/v5.1.7...v5.1.8</a></p>
<h2>v5.1.7</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(Repeat): lastIndexOf returned size instead of size - 1 by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a></li>
</ul>
<h2>internal</h2>
<ul>
<li>Backport tests from 6.x branch by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2199">immutable-js/immutable-js#2199</a></li>
<li>fix(IndexedCollection): <code>has(index)</code> on a lazy
<code>Seq</code> of unknown size now checks index existence instead of
searching for a value equal to the index by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2203">immutable-js/immutable-js#2203</a></li>
<li>Better type for reduce if not ininitial value is given by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2205">immutable-js/immutable-js#2205</a></li>
<li>Backport test from <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2193">#2193</a>
by <a href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2207">immutable-js/immutable-js#2207</a></li>
<li>backport tests from 6.x by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2213">immutable-js/immutable-js#2213</a></li>
<li>Firefox link to non-French page by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2219">immutable-js/immutable-js#2219</a></li>
<li>Bump esbuild and <code>@​size-limit/preset-small-lib</code> by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2217">immutable-js/immutable-js#2217</a></li>
<li>backport tests from <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2210">#2210</a>
by <a href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2214">immutable-js/immutable-js#2214</a></li>
<li>Bump shell-quote from 1.8.2 to 1.8.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2211">immutable-js/immutable-js#2211</a></li>
<li>Bump <code>@​tootallnate/once</code> from 2.0.0 to 2.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2190">immutable-js/immutable-js#2190</a></li>
<li>Bump minimatch from 9.0.5 to 9.0.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2189">immutable-js/immutable-js#2189</a></li>
<li>Bump <code>@​codemirror/theme-one-dark</code> from 6.1.2 to 6.1.3 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2168">immutable-js/immutable-js#2168</a></li>
<li>Bump form-data from 4.0.5 to 4.0.6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2220">immutable-js/immutable-js#2220</a></li>
<li>Bump typescript-eslint from 8.33.0 to 8.61.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2222">immutable-js/immutable-js#2222</a></li>
<li>Bump <code>@​rollup/plugin-commonjs</code> from 28.0.2 to 29.0.3 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2224">immutable-js/immutable-js#2224</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
made their first contribution in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.6...v5.1.7">https://github.com/immutable-js/immutable-js/compare/v5.1.6...v5.1.7</a></p>
<h2>v5.1.6</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(reverseFactory): read reversedSequence.size in __iterator
instead of this by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2196">immutable-js/immutable-js#2196</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md">immutable's
changelog</a>.</em></p>
<blockquote>
<h2>5.1.9</h2>
<ul>
<li>fix(List): a <code>List</code> grown past 32 elements while all its
values are <code>undefined</code> no longer reads those values back as
<code>null</code> (affected <code>get</code>, iteration,
<code>toArray</code>, <code>equals</code> and
<code>hashCode</code>)</li>
</ul>
<h2>5.1.8</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<h2>4.3.9</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<h2>5.1.7</h2>
<ul>
<li>fix(Repeat): lastIndexOf returned size instead of size - 1 by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a>.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-wf6x-7x77-mvgw">CVE-2026-29063
</a></li>
<li>fix(IndexedCollection): <code>has(index)</code> on a lazy
<code>Seq</code> of unknown size now checks index existence instead of
searching for a value equal to the index <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2203">#2203</a></li>
<li>[TypeScript]: <code>reduce</code>/<code>reduceRight</code> without
an initial value now infer the result type from the collection's values
when the reducer returns a value (e.g. <code>list.reduce((a, b) =&gt; a
+ b)</code> infers <code>number</code>), matching
<code>Array#reduce</code>. Previously an explicit type argument was
required. <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2205">#2205</a></li>
</ul>
<h2>5.1.6</h2>
<ul>
<li>fix(reverseFactory): read <code>reversedSequence.size</code> in
<code>__iterator</code> instead of this <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2196">#2196</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/329f7a680efa262c310b938a343295880eefe4fc"><code>329f7a6</code></a>
5.1.9</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/21fabd92bc6cd6771918fc966004034fc10a06e0"><code>21fabd9</code></a>
changelog</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/009164facb3c69870c6ad4c6472b1baeb02fcdf7"><code>009164f</code></a>
Merge pull request <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2235">#2235</a>
from immutable-js/fix/avoid-null-when-setsize33</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/5b65bfbd583472eaa9686137a61db2a29d63cd36"><code>5b65bfb</code></a>
fix(List): preserve undefined values when grown past 32 elements</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/50bf39e94105f83f1132cce02b9ee6c45cc7d9ca"><code>50bf39e</code></a>
Update CHANGELOG.md for versions 5.1.8 and 4.3.9</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/6496539bd1e9dfa75ce11b053e7d70d79e9ac6f7"><code>6496539</code></a>
5.1.8</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/808a83a071c9e22b8199ac256dc7e6e764198aac"><code>808a83a</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/e51d49fc612ded5ec4dfb94ff294d22074269b0f"><code>e51d49f</code></a>
perf(Map): index large hash-collision buckets for faster lookups</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/25c58b094f112dc32e9b0bca79c84f448d0d2a38"><code>25c58b0</code></a>
fix typescript in tests</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/a1a1ee412dcaa380ab325196283d06594ffe4b84"><code>a1a1ee4</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.5...v5.1.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=immutable&package-manager=npm_and_yarn&previous-version=5.1.5&new-version=5.1.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/maplibre/maputnik/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 14:00:36 +00:00
dependabot[bot] 283ef008a6 chore(deps-dev): Bump postcss from 8.5.19 to 8.5.20 (#2021)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.19 to
8.5.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.20</h2>
<ul>
<li>Fixed missing space if <code>AtRule#params</code> is set after (by
<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed mixing AST error on warnings (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.20</h2>
<ul>
<li>Fixed missing space if <code>AtRule#params</code> is set after (by
<a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>).</li>
<li>Fixed mixing AST error on warnings (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/c4ac725d5920916d35be44002b49b7f66f8b1dc8"><code>c4ac725</code></a>
Release 8.5.20 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/c30586d7863d0563e2f2707bd89461636e37f6f6"><code>c30586d</code></a>
Fix missing space when AtRule#params is set after parsing (<a
href="https://redirect.github.com/postcss/postcss/issues/2113">#2113</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/5bfc3b9e7463936fdd4898f92dd43c358bfdef62"><code>5bfc3b9</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/24733fdbfe9abe4a949eb0a10e53db8c87fc9277"><code>24733fd</code></a>
Move back to latest 11 pnpm</li>
<li><a
href="https://github.com/postcss/postcss/commit/728127c427e076ae15f4b4107cae29f9e60d2db4"><code>728127c</code></a>
Update pnpm to check that CI is fixed</li>
<li><a
href="https://github.com/postcss/postcss/commit/806fe21198e210cc85fd87d4afd0c949b04e0c1f"><code>806fe21</code></a>
Rebuild nodes from another PostCSS copy in Warning (<a
href="https://redirect.github.com/postcss/postcss/issues/2112">#2112</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/337cb7ef092da6066ec845973af243ed8e378550"><code>337cb7e</code></a>
Improve CI security</li>
<li><a
href="https://github.com/postcss/postcss/commit/7a8ca2d0e5044fbde3df33e2b9730c14528270e3"><code>7a8ca2d</code></a>
Remove patch after updating dependency</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.19...8.5.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.19&new-version=8.5.20)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 13:51:15 +00:00
dependabot[bot] d021155991 chore(deps): Bump actions/checkout from 7.0.0 to 7.0.1 (#2020)
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0
to 7.0.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v7...v7.0.1">https://github.com/actions/checkout/compare/v7...v7.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v7.0.1</h2>
<ul>
<li>Skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>Trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>Escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v7.0.0</h2>
<ul>
<li>Block checking out fork PR for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/3d3c42e5aac5ba805825da76410c181273ba90b1"><code>3d3c42e</code></a>
prep v7.0.1 release (<a
href="https://redirect.github.com/actions/checkout/issues/2531">#2531</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/28802689a136bfcdb721715abd713740beecbe07"><code>2880268</code></a>
escape values passed to --unset (<a
href="https://redirect.github.com/actions/checkout/issues/2530">#2530</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/12cd2235efa0937479335606d7c3ac9f6c0973b1"><code>12cd223</code></a>
trim only ascii whitespace for branch (<a
href="https://redirect.github.com/actions/checkout/issues/2521">#2521</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/62661c4e71a304b2823ed026347b8d34c3eac541"><code>62661c4</code></a>
skip running unsafe pr check if input is default (<a
href="https://redirect.github.com/actions/checkout/issues/2518">#2518</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8d4307400f9427dba7cb98e488d6ab85f1cec5f"><code>e8d4307</code></a>
Bump the minor-actions-dependencies group with 2 updates (<a
href="https://redirect.github.com/actions/checkout/issues/2499">#2499</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/631c942040754b6e095e929c1677c07e10ed4f87"><code>631c942</code></a>
eslint 9 (<a
href="https://redirect.github.com/actions/checkout/issues/2474">#2474</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/4f1f4aec02e41874fa0262ea8ff5172d7978ad1e"><code>4f1f4ae</code></a>
Bump actions/upload-artifact from 4 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2476">#2476</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ba097532fb203f7e88c9c3c0b899b49469908a92"><code>ba09753</code></a>
Bump actions/checkout from 6 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2488">#2488</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/b9e0990d219a03df7633c93f6f005a8fecbcab22"><code>b9e0990</code></a>
Bump docker/login-action from 3.3.0 to 4.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2479">#2479</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8cb398be4a550817e382abf69e4c12c76fce1f2"><code>e8cb398</code></a>
Bump docker/build-push-action from 6.5.0 to 7.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2478">#2478</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=7.0.0&new-version=7.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 13:53:31 +00:00
dependabot[bot] d06a3e7e1e chore(deps): Bump actions/setup-go from 6.5.0 to 7.0.0 (#2016)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.5.0
to 7.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-go/releases">actions/setup-go's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-go/pull/763">actions/setup-go#763</a></li>
<li>chore(deps): bump <code>@​actions/cache</code> to 6.2.0 by <a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> in <a
href="https://redirect.github.com/actions/setup-go/pull/771">actions/setup-go#771</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-go/pull/771">actions/setup-go#771</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-go/compare/v6...v7.0.0">https://github.com/actions/setup-go/compare/v6...v7.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-go/commit/b7ad1dad31e06c5925ef5d2fc7ad053ef454303e"><code>b7ad1da</code></a>
chore(deps): bump <code>@​actions/cache</code> to 6.2.0 (<a
href="https://redirect.github.com/actions/setup-go/issues/771">#771</a>)</li>
<li><a
href="https://github.com/actions/setup-go/commit/0778a10ce47b5d450cf60fb94fafad4330008a35"><code>0778a10</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-go/issues/763">#763</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-go/compare/924ae3a1cded613372ab5595356fb5720e22ba16...b7ad1dad31e06c5925ef5d2fc7ad053ef454303e">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-go&package-manager=github_actions&previous-version=6.5.0&new-version=7.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 13:53:46 +00:00
dependabot[bot] e0f27214b7 chore(deps): Bump github/codeql-action/init from 4.37.0 to 4.37.1 (#2015)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.37.0 to 4.37.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.1</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.37.1 - 16 Jul 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
<li>For performance and accuracy reasons, <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> will now only be enabled on a pull request when
diff-informed analysis is also enabled for that run. If diff-informed
analysis is unavailable (for example, because the PR diff ranges could
not be computed), the action will fall back to a full analysis. <a
href="https://redirect.github.com/github/codeql-action/pull/3791">#3791</a></li>
<li>If multiple inputs are provided for the GitHub-internal
<code>analysis-kinds</code> input, only <code>code-scanning</code> will
be enabled. The <code>analysis-kinds</code> input is experimental, for
GitHub-internal use only, and may change without notice at any time. <a
href="https://redirect.github.com/github/codeql-action/pull/3892">#3892</a></li>
<li>Added an experimental change which, when running a Code Scanning
analysis for a PR with <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> enabled, prefers CodeQL CLI versions that have
a cached overlay-base database for the configured languages. This speeds
up analysis for a repository when there is not yet a cached overlay-base
database for the latest CLI version. We expect to roll this change out
to everyone in May. <a
href="https://redirect.github.com/github/codeql-action/pull/3880">#3880</a></li>
</ul>
<h2>4.35.4 - 07 May 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4">2.25.4</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3881">#3881</a></li>
</ul>
<h2>4.35.3 - 01 May 2026</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/7188fc363630916deb702c7fdcf4e481b751f97a"><code>7188fc3</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4020">#4020</a>
from github/update-v4.37.1-9e7c07009</li>
<li><a
href="https://github.com/github/codeql-action/commit/c8b5f69be686908c3dfd844428137d56fe80c936"><code>c8b5f69</code></a>
Update changelog for v4.37.1</li>
<li><a
href="https://github.com/github/codeql-action/commit/9e7c070092090e89e8b3d62f977d4456e0732cd7"><code>9e7c070</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4014">#4014</a>
from github/mbg/explicit-remote-prefix</li>
<li><a
href="https://github.com/github/codeql-action/commit/3492b7e9ab96e28b1d8b971345d30e929c6f8fee"><code>3492b7e</code></a>
Change <code>REMOTE_PATH_PREFIX</code> to <code>remote=</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/3654baa924bc6456db54002581cb7c1c877548c4"><code>3654baa</code></a>
Merge remote-tracking branch 'origin/main' into
mbg/explicit-remote-prefix</li>
<li><a
href="https://github.com/github/codeql-action/commit/2d682ac05f1b3588aaff3814826bede39b9ba6bb"><code>2d682ac</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4017">#4017</a>
from github/dependabot/github_actions/dot-github/wor...</li>
<li><a
href="https://github.com/github/codeql-action/commit/23f6a50753a88efd9b7ae8687b29f6bdb65f6250"><code>23f6a50</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4009">#4009</a>
from github/mbg/action-state/additions</li>
<li><a
href="https://github.com/github/codeql-action/commit/1ee3c75d1988ab8621f01ebb165115c38d56df91"><code>1ee3c75</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4018">#4018</a>
from github/dependabot/github_actions/dot-github/wor...</li>
<li><a
href="https://github.com/github/codeql-action/commit/e053684dc500899b0b5520edc8549ac0f1ed730b"><code>e053684</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4015">#4015</a>
from github/dependabot/npm_and_yarn/npm-minor-fd2e83...</li>
<li><a
href="https://github.com/github/codeql-action/commit/6803c5671d2f87a83ed96e151c441b1cb3bdc66a"><code>6803c56</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/4019">#4019</a>
from github/update-bundle/codeql-bundle-v2.26.1</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/99df26d4f13ea111d4ec1a7dddef6063f76b97e9...7188fc363630916deb702c7fdcf4e481b751f97a">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.37.0&new-version=4.37.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 13:53:09 +00:00
dependabot[bot] 167f83abe9 chore(deps-dev): Bump i18next-cli from 1.65.0 to 1.66.2 (#2014)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.65.0
to 1.66.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's
changelog</a>.</em></p>
<blockquote>
<h2>1.66.2</h2>
<ul>
<li>fix(extract): ignore <code>&lt;Trans&gt;</code> components that have
neither an <code>i18nKey</code>
expression nor non-whitespace children, preventing <code>&lt;Trans
/&gt;</code> and
spread-only variants from creating an empty-string translation key
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/274">#274</a>).</li>
</ul>
<h2>1.66.1</h2>
<ul>
<li>fix(logger): <code>ConsoleLogger.warn</code>/<code>error</code> no
longer swallow their optional
second argument — plugin-hook failures (e.g.
<code>Plugin my-plugin onVisitNode failed:</code>) now print the caught
error instead
of a bare message
(<a
href="https://redirect.github.com/i18next/i18next-cli/pull/273">#273</a>,
thanks
<a
href="https://github.com/pjrobertson"><code>@​pjrobertson</code></a>).</li>
</ul>
<h2>1.66.0</h2>
<ul>
<li>fix(funnel): never print locize funnel/tip messages in
non-interactive
contexts — they are now suppressed when <code>CI=true</code> or stdout
is not a TTY,
and the once-per-24h cooldown applies unconditionally (newly created
translation files no longer bypass it). CI pipelines and first
extractions
no longer get promotional output
(follow-up to <a
href="https://redirect.github.com/i18next/i18next-cli/issues/20">#20</a>
/
<a
href="https://redirect.github.com/i18next/i18next-cli/issues/222">#222</a>).</li>
<li>feat(extract): new <code>sort: 'locize'</code> preset that mirrors
the key order of
locize-published files (plain UTF-16 code-unit sort, case-sensitive, no
canonical plural-form reordering), making <code>extract</code> followed
by
<code>locize-sync</code>/<code>locize-download</code> round-trip without
spurious reorder diffs
(follow-up to <a
href="https://redirect.github.com/i18next/i18next-cli/issues/106">#106</a>).</li>
<li>test(locize): assert <code>--cdn-type</code> is forwarded to
<code>download</code> and <code>migrate</code>,
guarding against the <a
href="https://redirect.github.com/i18next/i18next-cli/issues/156">#156</a>
class of regression.</li>
<li>docs(readme): new &quot;Dynamic Keys&quot; section documenting the
built-in TS
type-aware resolution of finite dynamic keys shipped in v1.49
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/210">#210</a>)
with
<code>preservePatterns</code> reserved for truly runtime-dynamic keys;
note in
<code>migrate-config</code> that i18next-cli requires Node.js &gt;= 22
(i18next-parser
still supported Node 18/20).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next-cli/commit/34f2b96dca5502c536b3e181ddfea80b43a66dcb"><code>34f2b96</code></a>
1.66.2</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/6761334ce2f4a4a105be3163c8b2acaa1e8b7796"><code>6761334</code></a>
fix(extract): skip empty Trans component keys (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/274">#274</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/66acdcb18094054c8703fb73d7e82fbf6db9ddb1"><code>66acdcb</code></a>
1.66.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/8a5a136a0902063ef573156ccb9227c32527a3af"><code>8a5a136</code></a>
fix(logger): simplify error signature to unknown; changelog for 1.66.1
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/273">#273</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/cada9ca78fe0c52f0172f6e90a25842ccaaaa36a"><code>cada9ca</code></a>
Allow passing extra args (e.g. exceptions to the logger warn/error) (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/273">#273</a>)</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/6555ff065e0de0aa42e9f350008e6d0de98e9833"><code>6555ff0</code></a>
docs: Code-Splitting Translations section (one namespace per route, lazy
chun...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/69bb99618527ddfd91f5003dfc128f177b05dbe0"><code>69bb996</code></a>
1.66.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/d94a1468fac9a83cffa6c8c1241b3b9ec0cd1258"><code>d94a146</code></a>
feat(extract): sort: 'locize' preset for locize round-trip key order (<a
href="https://redirect.github.com/i18next/i18next-cli/issues/106">#106</a>);
...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/3a278ee443805ea1468e7e377004d7ede968381a"><code>3a278ee</code></a>
fix(funnel): suppress promotional output in CI/non-TTY and always
respect the...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/8c69ab921ba394a5f09fcac878a3feaf345f5d97"><code>8c69ab9</code></a>
docs: surface localize --print-agent-prompt in the top callout</li>
<li>See full diff in <a
href="https://github.com/i18next/i18next-cli/compare/v1.65.0...v1.66.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next-cli&package-manager=npm_and_yarn&previous-version=1.65.0&new-version=1.66.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 13:51:49 +00:00
dependabot[bot] 0936afc2f9 chore(deps-dev): Bump typescript-eslint from 8.62.1 to 8.64.0 (#2013)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.62.1 to 8.64.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.64.0</h2>
<h2>8.64.0 (2026-07-13)</h2>
<h3>🚀 Features</h3>
<ul>
<li>support parsing <code>import defer</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12513">#12513</a>)</li>
<li><strong>eslint-plugin:</strong> [no-loop-func] support
<code>using</code> / <code>await using</code> declarations and deprecate
the rule (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12500">#12500</a>)</li>
<li><strong>typescript-estree:</strong> throw for invalid definite
assignment in class properties (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12543">#12543</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [require-array-sort-compare] handle
constrained arrays (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12512">#12512</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>송재욱</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
<h2>v8.63.0</h2>
<h2>8.63.0 (2026-07-06)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] detect async
usage of a sync dispose usage (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12426">#12426</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [method-signature-style] suggest
converting readonly function properties instead of emitting invalid
syntax (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12447">#12447</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12446">#12446</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
handle optional-chained calls to overloaded functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12491">#12491</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12485">#12485</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] don't flag a
shadowed String() call (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12492">#12492</a>)</li>
<li><strong>scope-manager:</strong> export ClassStaticBlockScope (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12460">#12460</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Kristjan <a
href="https://github.com/KristjanTammekivi"><code>@​KristjanTammekivi</code></a></li>
<li>Michael Naumov <a
href="https://github.com/mnaoumov"><code>@​mnaoumov</code></a></li>
<li>Serhii Leniv <a
href="https://github.com/Serhii-Leniv"><code>@​Serhii-Leniv</code></a></li>
<li>송재욱</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.64.0 (2026-07-13)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
<h2>8.63.0 (2026-07-06)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/414d9abbf66f77796ab12ec7e75b07722e592832"><code>414d9ab</code></a>
chore(release): publish 8.64.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/290cf6cdcc5ffb00c5b8f3e1e0e9f2fd8cc96374"><code>290cf6c</code></a>
chore(release): publish 8.63.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.64.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.62.1&new-version=8.64.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 13:51:37 +00:00
dependabot[bot] b664caa13e chore(deps-dev): Bump postcss from 8.5.17 to 8.5.19 (#2011)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.17 to
8.5.19.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.19</h2>
<ul>
<li>Fixed cleaning <code>before</code> for new nodes inserted to
<code>Root</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
</ul>
<h2>8.5.18</h2>
<ul>
<li>Restricted loading previous source maps file to the
<code>opts.from</code> folder for security reasons (use <code>unsafeMap:
true</code> to disable the check).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.19</h2>
<ul>
<li>Fixed cleaning <code>before</code> for new nodes inserted to
<code>Root</code> (by <a
href="https://github.com/MahinAnowar"><code>@​MahinAnowar</code></a>).</li>
</ul>
<h2>8.5.18</h2>
<ul>
<li>Restricted loading previous source maps file to the
<code>opts.from</code> folder for security reasons (use <code>unsafeMap:
true</code> to disable the check).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/9543b22769bef5bcd47600fbca752204c106cda8"><code>9543b22</code></a>
Release 8.5.19 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/3d13bf9360652922de0535f6257e1648187363f0"><code>3d13bf9</code></a>
Fix CI on Windows too</li>
<li><a
href="https://github.com/postcss/postcss/commit/00d0dd2322162f6083d507ea6954685e1c92f165"><code>00d0dd2</code></a>
Keep explicitly set raws.before when inserting nodes into root (<a
href="https://redirect.github.com/postcss/postcss/issues/2111">#2111</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/7a05b33e7a15d6f80d90098784170ad3dca39180"><code>7a05b33</code></a>
Temporary fix CI</li>
<li><a
href="https://github.com/postcss/postcss/commit/4c0d194c136fd374495d0993c890d794cab65b81"><code>4c0d194</code></a>
Release 8.5.18 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/92b4e7891ec7b811821d01acc8aa0f010caf41e2"><code>92b4e78</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/95663d3eb7ba26f4854dd19d3b4f4425760cf56c"><code>95663d3</code></a>
Limit where source map can be loaded for security reasons</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.17...8.5.19">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.17&new-version=8.5.19)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-16 13:51:58 +00:00
dependabot[bot] d90d7b743b chore(deps): Bump actions/setup-node from 6.4.0 to 7.0.0 (#2012)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from
6.4.0 to 7.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements:</h3>
<ul>
<li>Add cache-primary-key and cache-matched-key as outputs by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1577">actions/setup-node#1577</a></li>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1574">actions/setup-node#1574</a></li>
</ul>
<h3>Bug fixes:</h3>
<ul>
<li>Remove dummy NODE_AUTH_TOKEN export by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1558">actions/setup-node#1558</a></li>
<li>Only use <code>mirrorToken</code> in <code>getManifest</code> if
it's provided by <a
href="https://github.com/deiga"><code>@​deiga</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1548">actions/setup-node#1548</a></li>
</ul>
<h3>Documentation updates:</h3>
<ul>
<li>Add documentation for publishing to npm with Trusted Publisher
(OIDC) by <a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1536">actions/setup-node#1536</a></li>
<li>docs: Update restore-only cache documentation by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1550">actions/setup-node#1550</a></li>
<li>docs: Update caching recommendations to mitigate cache poisoning
risks by <a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1567">actions/setup-node#1567</a></li>
</ul>
<h3>Dependency update:</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1569">actions/setup-node#1569</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chiranjib-swain"><code>@​chiranjib-swain</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1536">actions/setup-node#1536</a></li>
<li><a href="https://github.com/deiga"><code>@​deiga</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1548">actions/setup-node#1548</a></li>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1569">actions/setup-node#1569</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v7.0.0">https://github.com/actions/setup-node/compare/v6...v7.0.0</a></p>
<h2>v6.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update <code>@​actions/cache</code> to 5.1.0 and add security
overrides for undici and fast-xml-parser by <a
href="https://github.com/HarithaVattikuti"><code>@​HarithaVattikuti</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1579">actions/setup-node#1579</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6.4.0...v6.5.0">https://github.com/actions/setup-node/compare/v6.4.0...v6.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-node/commit/820762786026740c76f36085b0efc47a31fe5020"><code>8207627</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-node/issues/1574">#1574</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/04be95cf3511ea51ebf9f224ddfb99cc7ab87cd4"><code>04be95c</code></a>
Add cache-primary-key and cache-matched-key as outputs (<a
href="https://redirect.github.com/actions/setup-node/issues/1577">#1577</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/7c2c68d20d402ed6a201ada70a81341941093140"><code>7c2c68d</code></a>
docs: Update caching recommendations to mitigate cache poisoning risks
(<a
href="https://redirect.github.com/actions/setup-node/issues/1567">#1567</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/6a61c0375d66246de94630495909f12cf8dac84d"><code>6a61c03</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/setup-node/issues/1569">#1569</a>
from jasongin/update-actions-cache-5.1.0</li>
<li><a
href="https://github.com/actions/setup-node/commit/30eb73b41ded577900c1ebf968ef95cdf8f7434f"><code>30eb73b</code></a>
Resolve high-severity audit issues</li>
<li><a
href="https://github.com/actions/setup-node/commit/4e1a87a501d0302f99e30e2748568adcb388d09f"><code>4e1a87a</code></a>
Update dist</li>
<li><a
href="https://github.com/actions/setup-node/commit/360237f0c01778d0c17291f75c56d6feae4f7574"><code>360237f</code></a>
Strict equality</li>
<li><a
href="https://github.com/actions/setup-node/commit/4f8aac5beb2f0854bc79651567a18c67eb0b9de3"><code>4f8aac5</code></a>
Bump <code>@​actions/cache</code> to 5.1.0, log cache write denied</li>
<li><a
href="https://github.com/actions/setup-node/commit/f4a67bbeca970f103397d3d2b9462cf787cd2980"><code>f4a67bb</code></a>
Only use <code>mirrorToken</code> in <code>getManifest</code> if it's
provided (<a
href="https://redirect.github.com/actions/setup-node/issues/1548">#1548</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/0355742c943ddb13ca8a6b700f824231caa91e75"><code>0355742</code></a>
Remove dummy NODE_AUTH_TOKEN export (<a
href="https://redirect.github.com/actions/setup-node/issues/1558">#1558</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-node/compare/48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e...820762786026740c76f36085b0efc47a31fe5020">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=6.4.0&new-version=7.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-16 13:51:07 +00:00
dependabot[bot] 0152a02858 chore(deps-dev): Bump postcss from 8.5.16 to 8.5.17 (#2009)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.16 to
8.5.17.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.5.17</h2>
<ul>
<li>Fixed <code>Maximum call stack size exceeded</code> error.</li>
<li>Fixed Prototype hijacking for <code>postcss.fromJSON()</code>.</li>
<li>Fixed <code>Input#origin()</code> for unmapped end position (by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.5.17</h2>
<ul>
<li>Fixed <code>Maximum call stack size exceeded</code> error.</li>
<li>Fixed Prototype hijacking for <code>postcss.fromJSON()</code>.</li>
<li>Fixed <code>Input#origin()</code> for unmapped end position (by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/postcss/commit/74e25ae9f4efaa56a41a449064a655d7da78072c"><code>74e25ae</code></a>
Release 8.5.17 version</li>
<li><a
href="https://github.com/postcss/postcss/commit/d1518afd5a88f42728b30b87f8917210f363f9f1"><code>d1518af</code></a>
Fix Maximum call stack size exceeded error</li>
<li><a
href="https://github.com/postcss/postcss/commit/2421312ffea96ba77b35ce24a1b2d9c2e22b5e83"><code>2421312</code></a>
Fix linter</li>
<li><a
href="https://github.com/postcss/postcss/commit/a50352c583df991710f92ccac25b36304695161a"><code>a50352c</code></a>
Fix CI</li>
<li><a
href="https://github.com/postcss/postcss/commit/33948f0969bb858acdd52c9692e3a785a3ed0a73"><code>33948f0</code></a>
Prevent prototype hijacking in fromJSON</li>
<li><a
href="https://github.com/postcss/postcss/commit/2131909351161cd2c5fc2be58b14919a873ea824"><code>2131909</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/postcss/commit/93440abcca92793b31c5d1fdf5f2da7b58b27599"><code>93440ab</code></a>
Fix non-closed <code>\&lt;div align=&quot;center&quot;&gt;</code> in
README (<a
href="https://redirect.github.com/postcss/postcss/issues/2110">#2110</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/1bf9076867e70f5a01776aebebee5aacbf9771ce"><code>1bf9076</code></a>
Remove old sponsors</li>
<li><a
href="https://github.com/postcss/postcss/commit/2d44be0923873ea6af2c3a1a191148e2ce9d733f"><code>2d44be0</code></a>
docs: fix invalid JS in writing-a-plugin examples (<a
href="https://redirect.github.com/postcss/postcss/issues/2107">#2107</a>)</li>
<li><a
href="https://github.com/postcss/postcss/commit/3298727755a676beced3cbe67015d42e70396e4f"><code>3298727</code></a>
Fix <code>Input#origin()</code> mixing null and undefined for unmapped
end position (<a
href="https://redirect.github.com/postcss/postcss/issues/2106">#2106</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/postcss/compare/8.5.16...8.5.17">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=postcss&package-manager=npm_and_yarn&previous-version=8.5.16&new-version=8.5.17)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 13:50:43 +00:00
dependabot[bot] 0b076e3896 chore(deps-dev): Bump eslint from 10.6.0 to 10.7.0 (#2007)
Bumps [eslint](https://github.com/eslint/eslint) from 10.6.0 to 10.7.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.7.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/cf2a9bf2d982642f760370c15f1196f4658f4e27"><code>cf2a9bf</code></a>
feat: add errorClassNames option to preserve-caught-error rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21032">#21032</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f8b873aae53610b80b5c1005606716e05ed3b91f"><code>f8b873a</code></a>
feat: max-nested-callbacks option for constructor callbacks (<a
href="https://redirect.github.com/eslint/eslint/issues/21063">#21063</a>)
(fnx)</li>
<li><a
href="https://github.com/eslint/eslint/commit/557fde8bc633d26ea4fe287d4483f287e8e6080f"><code>557fde8</code></a>
feat: support computed <code>Number.parseInt</code> member access in
<code>radix</code> rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21041">#21041</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0b4a73b65808f5a8fd192f15db2bf5e47002b9f7"><code>0b4a73b</code></a>
feat: add suggestions to no-compare-neg-zero (<a
href="https://redirect.github.com/eslint/eslint/issues/21034">#21034</a>)
(den$)</li>
<li><a
href="https://github.com/eslint/eslint/commit/96cdd427db5f26c6403fba92b0f7ae4556c595ec"><code>96cdd42</code></a>
feat: report invalid signed numeric radix values in <code>radix</code>
rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21030">#21030</a>)
(Pixel)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/3e7bf15e69e6d3a2c8832356bcc2e9903cc4eede"><code>3e7bf15</code></a>
fix: apply <code>ignoreClassesWithImplements</code> to class expressions
(<a
href="https://redirect.github.com/eslint/eslint/issues/21069">#21069</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0d7d70cf013ec5bf1e4f5a0fcf7128bdf059b2d4"><code>0d7d70c</code></a>
fix: insert cause outside wrapping parens in preserve-caught-error (<a
href="https://redirect.github.com/eslint/eslint/issues/21062">#21062</a>)
(Mahin Anowar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/75ec753226010867270787b412f3dae412e421e6"><code>75ec753</code></a>
fix: handle static template literals in <code>eqeqeq</code> rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21058">#21058</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b717a22e2408389a2ad40af66543e46390669eb6"><code>b717a22</code></a>
fix: prevent <code>eqeqeq</code> null option from reporting non-equality
operators (<a
href="https://redirect.github.com/eslint/eslint/issues/21057">#21057</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e35b05f1961dcd691611bd68b6ff8a87072d6f76"><code>e35b05f</code></a>
fix: avoid <code>no-invalid-regexp</code> false positive for shadowed
RegExp (<a
href="https://redirect.github.com/eslint/eslint/issues/21051">#21051</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a3172b69c7db63ea0321355543e3f527c7d8b76a"><code>a3172b6</code></a>
fix: avoid <code>no-control-regex</code> false positive for shadowed
RegExp (<a
href="https://redirect.github.com/eslint/eslint/issues/21050">#21050</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/d1f637eca27e523d613991c6bea5b8726b810e4c"><code>d1f637e</code></a>
fix: parenthesize sequence expression operands in no-implicit-coercion
(<a
href="https://redirect.github.com/eslint/eslint/issues/21045">#21045</a>)
(spokodev)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8859bafb018e2b23b5110d52e491b69b94ad890a"><code>8859baf</code></a>
fix: avoid prefer-numeric-literals false positive for shadowed globals
(<a
href="https://redirect.github.com/eslint/eslint/issues/21047">#21047</a>)
(한국)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a9e5961050676ef29dba9649dfcd7233d21760c7"><code>a9e5961</code></a>
fix: use-isnan false positive on shadowed NaN/Number (<a
href="https://redirect.github.com/eslint/eslint/issues/20958">#20958</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8a240a76108f30f2476e61a925e4d32d378cce5e"><code>8a240a7</code></a>
fix: avoid false positives in <code>radix</code> rule for spread
arguments (<a
href="https://redirect.github.com/eslint/eslint/issues/21044">#21044</a>)
(Pixel)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/c30d80801ca561bdf65c6c3eba4ee57dced278cf"><code>c30d808</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5139800b23e77fdd1a76664e1b36f478942eae55"><code>5139800</code></a>
docs: document ESLint migration codemods in v9 and v10 guides (<a
href="https://redirect.github.com/eslint/eslint/issues/20980">#20980</a>)
(Alex Bit)</li>
<li><a
href="https://github.com/eslint/eslint/commit/04174cbfaac1f9555400b5332d69056e6aab9cc6"><code>04174cb</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/026e1304080512bcddfd2af3557fff86474ff949"><code>026e130</code></a>
docs: update semver policy for bug fixes (<a
href="https://redirect.github.com/eslint/eslint/issues/21048">#21048</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9d42fefb0e05ecd0b256c2ebed479fc868862f0c"><code>9d42fef</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b23015955c8d6e6516076190730f538c86927f26"><code>b230159</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/0129972ba122e95bece6040fda44d20f6799246a"><code>0129972</code></a>
docs: correct <code>**/.js</code> glob to <code>**/*.js</code> in config
files guide (<a
href="https://redirect.github.com/eslint/eslint/issues/21036">#21036</a>)
(EduardF1)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/948937986f2aa3cccb27a4c80694a85e5b0a5f64"><code>9489379</code></a>
chore: update dependency <code>@​eslint/eslintrc</code> to ^3.3.6 (<a
href="https://redirect.github.com/eslint/eslint/issues/21076">#21076</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/81a4774a928211bd0c01a06a1517736ece594522"><code>81a4774</code></a>
chore: updates for v9.39.5 release (Jenkins)</li>
<li><a
href="https://github.com/eslint/eslint/commit/983541491393323d17717683f6a2e6dbef4bc3f4"><code>9835414</code></a>
chore: enable <code>$ExpectType</code> annotations in all TypeScript
files (<a
href="https://redirect.github.com/eslint/eslint/issues/21071">#21071</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/72adf6bd214c142b38aabb4b8f6f908079c5301a"><code>72adf6b</code></a>
chore: restrict <code>markdownlint-cli2</code> updates in renovate (<a
href="https://redirect.github.com/eslint/eslint/issues/21067">#21067</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/833ec10fd702644e94334edd3cd2aa313174a958"><code>833ec10</code></a>
chore: update dependency prettier to v3.9.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/21061">#21061</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/7ea106ddcb6af7db8f36d62a28dbaba94d33598e"><code>7ea106d</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21059">#21059</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8fb550e7c257fbdc4108fc8e63db43c1d914d472"><code>8fb550e</code></a>
chore: add prettier update commit to <code>.git-blame-ignore-revs</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21056">#21056</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e4e11668ead6b950328c71e894563a13ef72bf84"><code>e4e1166</code></a>
chore: update dependency prettier to v3.9.1 (<a
href="https://redirect.github.com/eslint/eslint/issues/21055">#21055</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/0493f53f3fcec4ed69a1808dffa153dcff1380d3"><code>0493f53</code></a>
chore: update prettier to v3.9.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/21054">#21054</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1056a996c657b377dc16a58c28890d2940394408"><code>1056a99</code></a>
chore: update dependency prettier to v3.8.5 (<a
href="https://redirect.github.com/eslint/eslint/issues/21049">#21049</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/4d4155df4a21d711e8dd21a467de085e770bad35"><code>4d4155d</code></a>
ci: run ecosystem tests on pull requests (<a
href="https://redirect.github.com/eslint/eslint/issues/21027">#21027</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/993539fd45d3d01aad3fbc13963e2245fdf7ee0d"><code>993539f</code></a>
chore: update dependency <code>@​eslint/json</code> to ^2.0.1 (<a
href="https://redirect.github.com/eslint/eslint/issues/21042">#21042</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/53f8b69c15af7398c989071ee4788b88edd48bdd"><code>53f8b69</code></a>
test: add error locations to <code>no-constant-binary-expression</code>
(<a
href="https://redirect.github.com/eslint/eslint/issues/21039">#21039</a>)
(lumir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5ab71d52f9d860df04e626fcd819a36257f21f9e"><code>5ab71d5</code></a>
refactor: clean up radix rule internals (<a
href="https://redirect.github.com/eslint/eslint/issues/21015">#21015</a>)
(Pixel)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a80a9a461478838930c5545f840473840b26b0e6"><code>a80a9a4</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21035">#21035</a>)
(ESLint Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7c9a02933cf1c231237babb8a7a32150ab72e263"><code>7c9a029</code></a>
ci: add Node.js 26 to CI (<a
href="https://redirect.github.com/eslint/eslint/issues/20847">#20847</a>)
(lumir)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/fabd99bb74eedcb950df51ec3280414ff1d68d38"><code>fabd99b</code></a>
10.7.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/37c5e75949ff2ae1f0085f547e35ce2bdf9d524d"><code>37c5e75</code></a>
Build: changelog update for 10.7.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/948937986f2aa3cccb27a4c80694a85e5b0a5f64"><code>9489379</code></a>
chore: update dependency <code>@​eslint/eslintrc</code> to ^3.3.6 (<a
href="https://redirect.github.com/eslint/eslint/issues/21076">#21076</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/81a4774a928211bd0c01a06a1517736ece594522"><code>81a4774</code></a>
chore: updates for v9.39.5 release</li>
<li><a
href="https://github.com/eslint/eslint/commit/3e7bf15e69e6d3a2c8832356bcc2e9903cc4eede"><code>3e7bf15</code></a>
fix: apply <code>ignoreClassesWithImplements</code> to class expressions
(<a
href="https://redirect.github.com/eslint/eslint/issues/21069">#21069</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/983541491393323d17717683f6a2e6dbef4bc3f4"><code>9835414</code></a>
chore: enable <code>$ExpectType</code> annotations in all TypeScript
files (<a
href="https://redirect.github.com/eslint/eslint/issues/21071">#21071</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/cf2a9bf2d982642f760370c15f1196f4658f4e27"><code>cf2a9bf</code></a>
feat: add errorClassNames option to preserve-caught-error rule (<a
href="https://redirect.github.com/eslint/eslint/issues/21032">#21032</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c30d80801ca561bdf65c6c3eba4ee57dced278cf"><code>c30d808</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/f8b873aae53610b80b5c1005606716e05ed3b91f"><code>f8b873a</code></a>
feat: max-nested-callbacks option for constructor callbacks (<a
href="https://redirect.github.com/eslint/eslint/issues/21063">#21063</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/72adf6bd214c142b38aabb4b8f6f908079c5301a"><code>72adf6b</code></a>
chore: restrict <code>markdownlint-cli2</code> updates in renovate (<a
href="https://redirect.github.com/eslint/eslint/issues/21067">#21067</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.6.0&new-version=10.7.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 13:52:48 +00:00
Harel M cf54b6fdeb Update style-spec package to 26.1 (#2005)
## Launch Checklist

Update style-spec package to version 26.1
This should solve a problem related to expression validation.

 - [x] Briefly describe the changes in this PR.
 - [x] Link to related issues.
2026-07-14 14:14:28 +03:00
dependabot[bot] e5e09e846a chore(deps): Bump github/codeql-action/init from 4.36.3 to 4.37.0 (#2002)
Bumps
[github/codeql-action/init](https://github.com/github/codeql-action)
from 4.36.3 to 4.37.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action/init's
releases</a>.</em></p>
<blockquote>
<h2>v4.37.0</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.20.6 and earlier. These versions of
CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise
Server 3.16, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li>
</ul>
<h2>4.37.0 - 08 Jul 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li>
<li>In addition to the existing input format, the
<code>config-file</code> input for the <code>codeql-action/init</code>
step will soon support a new <code>[owner/]repo[@ref][:path]</code>
format. All components except the repository name are optional. If
omitted, <code>owner</code> defaults to the same owner as the repository
the analysis is running for, <code>ref</code> to <code>main</code>, and
<code>path</code> to <code>.github/codeql-action.yaml</code>. Support
for this format ships in this version of the CodeQL Action, but will
only be enabled over the coming weeks. <a
href="https://redirect.github.com/github/codeql-action/pull/3973">#3973</a></li>
</ul>
<h2>4.36.3 - 01 Jul 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.2 - 04 Jun 2026</h2>
<ul>
<li>Cache CodeQL CLI version information across Actions steps. <a
href="https://redirect.github.com/github/codeql-action/pull/3943">#3943</a></li>
<li>Reduce requests while waiting for analysis processing by using
exponential backoff when polling SARIF processing status. <a
href="https://redirect.github.com/github/codeql-action/pull/3937">#3937</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6">2.25.6</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3948">#3948</a></li>
</ul>
<h2>4.36.1 - 02 Jun 2026</h2>
<p>No user facing changes.</p>
<h2>4.36.0 - 22 May 2026</h2>
<ul>
<li><em>Breaking change</em>: Bump the minimum required CodeQL bundle
version to 2.19.4. <a
href="https://redirect.github.com/github/codeql-action/pull/3894">#3894</a></li>
<li>Add support for SHA-256 Git object IDs. <a
href="https://redirect.github.com/github/codeql-action/pull/3893">#3893</a></li>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.5">2.25.5</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3926">#3926</a></li>
</ul>
<h2>4.35.5 - 15 May 2026</h2>
<ul>
<li>We have improved how the JavaScript bundles for the CodeQL Action
are generated to avoid duplication across bundles and reduce the size of
the repository by around 70%. This should have no effect on the runtime
behaviour of the CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3899">#3899</a></li>
<li>For performance and accuracy reasons, <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> will now only be enabled on a pull request when
diff-informed analysis is also enabled for that run. If diff-informed
analysis is unavailable (for example, because the PR diff ranges could
not be computed), the action will fall back to a full analysis. <a
href="https://redirect.github.com/github/codeql-action/pull/3791">#3791</a></li>
<li>If multiple inputs are provided for the GitHub-internal
<code>analysis-kinds</code> input, only <code>code-scanning</code> will
be enabled. The <code>analysis-kinds</code> input is experimental, for
GitHub-internal use only, and may change without notice at any time. <a
href="https://redirect.github.com/github/codeql-action/pull/3892">#3892</a></li>
<li>Added an experimental change which, when running a Code Scanning
analysis for a PR with <a
href="https://redirect.github.com/github/roadmap/issues/1158">improved
incremental analysis</a> enabled, prefers CodeQL CLI versions that have
a cached overlay-base database for the configured languages. This speeds
up analysis for a repository when there is not yet a cached overlay-base
database for the latest CLI version. We expect to roll this change out
to everyone in May. <a
href="https://redirect.github.com/github/codeql-action/pull/3880">#3880</a></li>
</ul>
<h2>4.35.4 - 07 May 2026</h2>
<ul>
<li>Update default CodeQL bundle version to <a
href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4">2.25.4</a>.
<a
href="https://redirect.github.com/github/codeql-action/pull/3881">#3881</a></li>
</ul>
<h2>4.35.3 - 01 May 2026</h2>
<ul>
<li><em>Upcoming breaking change</em>: Add a deprecation warning for
customers using CodeQL version 2.19.3 and earlier. These versions of
CodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise
Server 3.15, and will be unsupported by the next minor release of the
CodeQL Action. <a
href="https://redirect.github.com/github/codeql-action/pull/3837">#3837</a></li>
<li>Configurations for private registries that use Cloudsmith or GCP
OIDC are now accepted. <a
href="https://redirect.github.com/github/codeql-action/pull/3850">#3850</a></li>
<li>Best-effort connection tests for private registries now use
<code>GET</code> requests instead of <code>HEAD</code> for better
compatibility with various registry implementations. For NuGet feeds,
the test is now always performed against the service index. <a
href="https://redirect.github.com/github/codeql-action/pull/3853">#3853</a></li>
<li>Fixed a bug where two diagnostics produced within the same
millisecond could overwrite each other on disk, causing one of them to
be lost. <a
href="https://redirect.github.com/github/codeql-action/pull/3852">#3852</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/99df26d4f13ea111d4ec1a7dddef6063f76b97e9"><code>99df26d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3996">#3996</a>
from github/update-v4.37.0-c7c896d71</li>
<li><a
href="https://github.com/github/codeql-action/commit/31c27074fda95256cda077009907f8a6022dd7c0"><code>31c2707</code></a>
Add changenote for <a
href="https://redirect.github.com/github/codeql-action/issues/3973">#3973</a></li>
<li><a
href="https://github.com/github/codeql-action/commit/72df2181aac054d1f4b44264399d2aac12cf11c6"><code>72df218</code></a>
Update changelog for v4.37.0</li>
<li><a
href="https://github.com/github/codeql-action/commit/c7c896d71b3055d36f2aff93b16bcc6c69923b91"><code>c7c896d</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3995">#3995</a>
from github/update-bundle/codeql-bundle-v2.26.0</li>
<li><a
href="https://github.com/github/codeql-action/commit/3f34ff0ea3f5153c96071437b7cbf71ea3757146"><code>3f34ff0</code></a>
Add changelog note</li>
<li><a
href="https://github.com/github/codeql-action/commit/43bec09f1dc368b430cab4b5d69799bc904079d1"><code>43bec09</code></a>
Update default bundle to codeql-bundle-v2.26.0</li>
<li><a
href="https://github.com/github/codeql-action/commit/f58f0d11ebf5dedd870fab2f999275f7602cfa46"><code>f58f0d1</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3973">#3973</a>
from github/mbg/repo-props/config-file-shorthands</li>
<li><a
href="https://github.com/github/codeql-action/commit/7dc37cbb5b3e37f0e1cd1f18b61e0ea849898fb8"><code>7dc37cb</code></a>
Merge remote-tracking branch 'origin/main' into
mbg/repo-props/config-file-sh...</li>
<li><a
href="https://github.com/github/codeql-action/commit/8e22350a7e28c34c82a5a499fc241923301c2c4f"><code>8e22350</code></a>
Thread <code>ActionState</code> to <code>initConfig</code></li>
<li><a
href="https://github.com/github/codeql-action/commit/69c9e8c7d918cf2fee13b8b72fdde15883ff155b"><code>69c9e8c</code></a>
Mark some <code>status-report</code> imports as <code>type</code>-only
to avoid circular dependencies</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a...99df26d4f13ea111d4ec1a7dddef6063f76b97e9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action/init&package-manager=github_actions&previous-version=4.36.3&new-version=4.37.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 13:53:39 +00:00
dependabot[bot] 43bb23801c chore(deps): Bump i18next from 26.3.4 to 26.3.6 (#2001)
Bumps [i18next](https://github.com/i18next/i18next) from 26.3.4 to
26.3.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/releases">i18next's
releases</a>.</em></p>
<blockquote>
<h2>v26.3.6</h2>
<ul>
<li>fix: allow TypeScript 7 in the optional <code>typescript</code> peer
dependency range (<code>^5 || ^6 || ^7</code>). With
<code>typescript@7.0.2</code> in a project, <code>npm install</code>
failed with an <code>ERESOLVE</code> peer conflict. The published types
are TS7-compatible as-is: every <code>test/typescript</code> suite
produces identical results under 6.0 and 7.0.2. Reported in <a
href="https://redirect.github.com/i18next/react-i18next/issues/1927">react-i18next#1927</a>,
thanks <a
href="https://github.com/andikapradanaarif"><code>@​andikapradanaarif</code></a>.</li>
</ul>
<h2>v26.3.5</h2>
<ul>
<li>fix: <code>$t()</code> nesting options blocks that span multiple
lines are now parsed. <code>nest()</code> decided where the nested key
ends by testing <code>match[1]</code> with <code>/{.*}/</code>, whose
dot does not cross line breaks — so a <code>$t(key, { ... })</code>
options object containing a newline was treated as having no options,
mis-split as formatters, and the nested lookup ran without its options
(placeholders stayed unresolved). The nesting regexp itself already
matches newlines inside <code>$t(...)</code>; adding the <code>s</code>
(dotAll) flag makes multiline options behave like the single-line form.
Thanks <a href="https://github.com/spokodev"><code>@​spokodev</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2440">#2440</a>).</li>
<li>fix: <code>getUsedParamsDetails</code> (the <code>returnDetails:
true</code> path) no longer mutates the passed <code>replace</code>
object. It wrote <code>count</code> straight onto
<code>options.replace</code> so the returned <code>usedParams</code>
would include it — a caller reusing one <code>replace</code> object
across <code>t()</code> calls then carried a stale <code>count</code>
into later interpolations (e.g. a previous call's <code>count: 5</code>
rendered instead of the current call's value). The details are now built
from a copy; <code>usedParams</code> still includes <code>count</code>.
Thanks <a href="https://github.com/spokodev"><code>@​spokodev</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2441">#2441</a>).</li>
<li>fix: with the default <code>skipOnVariables: true</code> +
<code>escapeValue: true</code>, a <code>{{placeholder}}</code> carried
inside an interpolated value now stays literal even when the value
contains escapable characters. The skip logic advanced the regex
<code>lastIndex</code> by the raw value length, but the escaped text
written into the string is longer, so <code>lastIndex</code> landed
inside the inserted value and a trailing <code>{{placeholder}}</code> in
it got interpolated — leaking another in-scope variable that should have
stayed literal (values without escapable characters were already skipped
correctly). The advance now uses the escaped length that is actually
written, and the regex-safe <code>$</code>-doubling is applied only at
the <code>String.replace</code> call so it can't distort the length
arithmetic. Thanks <a
href="https://github.com/spokodev"><code>@​spokodev</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2442">#2442</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/blob/master/CHANGELOG.md">i18next's
changelog</a>.</em></p>
<blockquote>
<h2>26.3.6</h2>
<ul>
<li>fix: allow TypeScript 7 in the optional <code>typescript</code> peer
dependency range (<code>^5 || ^6 || ^7</code>). With
<code>typescript@7.0.2</code> in a project, <code>npm install</code>
failed with an <code>ERESOLVE</code> peer conflict. The published types
are TS7-compatible as-is: every <code>test/typescript</code> suite
produces identical results under 6.0 and 7.0.2. Reported in <a
href="https://redirect.github.com/i18next/react-i18next/issues/1927">react-i18next#1927</a>,
thanks <a
href="https://github.com/andikapradanaarif"><code>@​andikapradanaarif</code></a>.</li>
</ul>
<h2>26.3.5</h2>
<ul>
<li>fix: <code>$t()</code> nesting options blocks that span multiple
lines are now parsed. <code>nest()</code> decided where the nested key
ends by testing <code>match[1]</code> with <code>/{.*}/</code>, whose
dot does not cross line breaks — so a <code>$t(key, { ... })</code>
options object containing a newline was treated as having no options,
mis-split as formatters, and the nested lookup ran without its options
(placeholders stayed unresolved). The nesting regexp itself already
matches newlines inside <code>$t(...)</code>; adding the <code>s</code>
(dotAll) flag makes multiline options behave like the single-line form.
Thanks <a href="https://github.com/spokodev"><code>@​spokodev</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2440">#2440</a>).</li>
<li>fix: <code>getUsedParamsDetails</code> (the <code>returnDetails:
true</code> path) no longer mutates the passed <code>replace</code>
object. It wrote <code>count</code> straight onto
<code>options.replace</code> so the returned <code>usedParams</code>
would include it — a caller reusing one <code>replace</code> object
across <code>t()</code> calls then carried a stale <code>count</code>
into later interpolations (e.g. a previous call's <code>count: 5</code>
rendered instead of the current call's value). The details are now built
from a copy; <code>usedParams</code> still includes <code>count</code>.
Thanks <a href="https://github.com/spokodev"><code>@​spokodev</code></a>
(<a
href="https://redirect.github.com/i18next/i18next/pull/2441">#2441</a>).</li>
<li>fix: with the default <code>skipOnVariables: true</code> +
<code>escapeValue: true</code>, a <code>{{placeholder}}</code> carried
inside an interpolated value now stays literal even when the value
contains escapable characters. The skip logic advanced the regex
<code>lastIndex</code> by the raw value length, but the escaped text
written into the string is longer, so <code>lastIndex</code> landed
inside the inserted value and a trailing <code>{{placeholder}}</code> in
it got interpolated — leaking another in-scope variable that should have
stayed literal (values without escapable characters were already skipped
correctly). The advance now uses the escaped length that is actually
written, and the regex-safe <code>$</code>-doubling is applied only at
the <code>String.replace</code> call so it can't distort the length
arithmetic. Thanks <a
href="https://github.com/spokodev"><code>@​spokodev</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2442">#2442</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next/commit/e1c60d4dd28a16f91be7f55b3685ffcf9760619b"><code>e1c60d4</code></a>
26.3.6</li>
<li><a
href="https://github.com/i18next/i18next/commit/04da43e08cb799f2e6f9a5578f3674fe2ef49595"><code>04da43e</code></a>
fix: allow typescript 7 in optional peerDependencies range
(react-i18next#1927)</li>
<li><a
href="https://github.com/i18next/i18next/commit/8eed4accc6c69398e9e25f79b617249fd3f7b1ec"><code>8eed4ac</code></a>
build</li>
<li><a
href="https://github.com/i18next/i18next/commit/573ae735682a082ad5a581dea3f2d5f517c53772"><code>573ae73</code></a>
26.3.5</li>
<li><a
href="https://github.com/i18next/i18next/commit/cc54b05b5cab9bf76cf66557c222c978bbb3c082"><code>cc54b05</code></a>
docs(changelog): 26.3.5 — multiline $t() options, replace mutation,
escaped-l...</li>
<li><a
href="https://github.com/i18next/i18next/commit/3180d67291a8fff10950f79660420c106c047f94"><code>3180d67</code></a>
fix: skip interpolation of placeholders inside escaped values (<a
href="https://redirect.github.com/i18next/i18next/issues/2442">#2442</a>)</li>
<li><a
href="https://github.com/i18next/i18next/commit/d16f5a2da748082155007ba0677d32b877b1102e"><code>d16f5a2</code></a>
fix: stop mutating the passed replace object when returning details (<a
href="https://redirect.github.com/i18next/i18next/issues/2441">#2441</a>)</li>
<li><a
href="https://github.com/i18next/i18next/commit/bed56c115979de52bd85c46d9b7a7b13361bf736"><code>bed56c1</code></a>
fix: parse $t() nesting options block that spans multiple lines (<a
href="https://redirect.github.com/i18next/i18next/issues/2440">#2440</a>)</li>
<li><a
href="https://github.com/i18next/i18next/commit/c19e45864f3abbbe90e30be44cc131f2248394bf"><code>c19e458</code></a>
docs(changelog): link GHSA advisory for deepExtend fix</li>
<li><a
href="https://github.com/i18next/i18next/commit/7bb87d09f907b4395ed0825638d7d2c4356f7a89"><code>7bb87d0</code></a>
docs(changelog): reference security advisory for deepExtend fix</li>
<li>Additional commits viewable in <a
href="https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next&package-manager=npm_and_yarn&previous-version=26.3.4&new-version=26.3.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 13:52:30 +00:00
94 changed files with 6898 additions and 6803 deletions
+4
View File
@@ -31,6 +31,10 @@ updates:
directory: "/" directory: "/"
schedule: schedule:
interval: "daily" interval: "daily"
groups:
codeql-action:
patterns:
- "github/codeql-action*"
cooldown: cooldown:
default-days: 3 default-days: 3
# no semver support for github-actions # no semver support for github-actions
+15 -11
View File
@@ -6,6 +6,10 @@ on:
push: push:
branches: [ main ] branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs: jobs:
build-node: build-node:
@@ -21,9 +25,9 @@ jobs:
os: [ ubuntu-latest, windows-latest, macos-latest ] os: [ ubuntu-latest, windows-latest, macos-latest ]
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
- run: npm ci - run: npm ci
@@ -41,9 +45,9 @@ jobs:
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
- run: npm ci - run: npm ci
@@ -56,7 +60,7 @@ jobs:
# Build and upload desktop CLI artifacts # Build and upload desktop CLI artifacts
- name: Set up Go - name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with: with:
go-version: ^1.23.x go-version: ^1.23.x
cache-dependency-path: desktop/go.sum cache-dependency-path: desktop/go.sum
@@ -90,9 +94,9 @@ jobs:
contents: read contents: read
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
- run: npm ci - run: npm ci
@@ -111,9 +115,9 @@ jobs:
contents: read contents: read
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
- run: npm ci - run: npm ci
@@ -139,9 +143,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
- run: npm ci - run: npm ci
+8 -4
View File
@@ -20,6 +20,10 @@ on:
schedule: schedule:
- cron: '17 0 * * 6' - cron: '17 0 * * 6'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs: jobs:
analyze: analyze:
name: Analyze name: Analyze
@@ -38,11 +42,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3 uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -53,7 +57,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3 uses: github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
# ️ Command-line programs to run using the OS shell. # ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@@ -67,4 +71,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3 uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
+2 -2
View File
@@ -16,13 +16,13 @@ jobs:
run: run:
shell: bash shell: bash
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
fetch-depth: 0 fetch-depth: 0
ref: main ref: main
- name: Use Node.js from nvmrc - name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: ".nvmrc" node-version-file: ".nvmrc"
+4 -4
View File
@@ -12,11 +12,11 @@ jobs:
contents: write contents: write
if: ${{ github.event_name == 'push' }} if: ${{ github.event_name == 'push' }}
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { persist-credentials: false } with: { persist-credentials: false }
- name: Use Node.js from nvmrc - name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
@@ -45,11 +45,11 @@ jobs:
steps: steps:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- run: docker build -t ghcr.io/maplibre/maputnik:main . - run: docker build -t ghcr.io/maplibre/maputnik:main .
- run: docker push ghcr.io/maplibre/maputnik:main - run: docker push ghcr.io/maplibre/maputnik:main
+5 -5
View File
@@ -15,14 +15,14 @@ jobs:
permissions: permissions:
contents: read contents: read
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
fetch-depth: 0 fetch-depth: 0
ref: main ref: main
persist-credentials: false persist-credentials: false
- name: Use Node.js from nvmrc - name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: ".nvmrc" node-version-file: ".nvmrc"
@@ -42,19 +42,19 @@ jobs:
run: run:
shell: bash shell: bash
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
fetch-depth: 0 fetch-depth: 0
ref: main ref: main
- name: Use Node.js from nvmrc - name: Use Node.js from nvmrc
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: with:
node-version-file: ".nvmrc" node-version-file: ".nvmrc"
registry-url: "https://registry.npmjs.org" registry-url: "https://registry.npmjs.org"
- name: Set up Go for desktop build - name: Set up Go for desktop build
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with: with:
go-version: ^1.23.x go-version: ^1.23.x
cache-dependency-path: desktop/go.sum cache-dependency-path: desktop/go.sum
+6
View File
@@ -2,9 +2,15 @@
### ✨ Features and improvements ### ✨ Features and improvements
- Replace Cypress with Playwright for end-to-end tests and Vitest browser mode (Playwright provider) for component tests; drop the `@shellygo/cypress-test-utils` helper in favour of a `MaputnikDriver` page object - Replace Cypress with Playwright for end-to-end tests and Vitest browser mode (Playwright provider) for component tests; drop the `@shellygo/cypress-test-utils` helper in favour of a `MaputnikDriver` page object
- Upgrade to MapLibre GL JS 6 and Vite 8, and update the remaining dependencies
- Serve the RTL text plugin from `@mapbox/mapbox-gl-rtl-text` instead of a pinned CDN URL, so its version is tracked in `package.json`
- Exported HTML now loads MapLibre GL JS as an ES module, since v6 no longer ships a UMD bundle
- _...Add new stuff here..._ - _...Add new stuff here..._
### 🐞 Bug fixes ### 🐞 Bug fixes
- Preserve expanded layer groups when deleting layers, including the first layer of a group
- The map's data listener now fires on tile loads again, so source and vector layer field autocompletion is populated
- The `maputnik` desktop binary now opens the default browser automatically on startup (opt out with `--no-browser`)
- _...Add new stuff here..._ - _...Add new stuff here..._
## 3.1.0 ## 3.1.0
+3 -8
View File
@@ -7,21 +7,16 @@ require (
github.com/fsnotify/fsnotify v1.6.0 github.com/fsnotify/fsnotify v1.6.0
github.com/gorilla/handlers v1.5.1 github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0 github.com/gorilla/mux v1.8.0
github.com/gorilla/websocket v1.5.0 github.com/gorilla/websocket v1.5.3
github.com/maputnik/desktop v1.0.7 github.com/maputnik/desktop v1.0.7
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
github.com/urfave/cli v1.22.12 github.com/urfave/cli v1.22.12
) )
require ( require (
github.com/GeertJohan/go.incremental v1.0.0 // indirect
github.com/akavel/rsrc v0.8.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/daaku/go.zipexe v1.0.2 // indirect github.com/daaku/go.zipexe v1.0.2 // indirect
github.com/felixge/httpsnoop v1.0.1 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect
github.com/jessevdk/go-flags v1.4.0 // indirect
github.com/nkovacs/streamquote v1.0.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect golang.org/x/sys v0.1.0 // indirect
github.com/valyala/fasttemplate v1.0.1 // indirect
golang.org/x/sys v0.0.0-20220908164124-27713097b956 // indirect
) )
+6 -9
View File
@@ -1,9 +1,7 @@
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/GeertJohan/go.incremental v1.0.0 h1:7AH+pY1XUgQE4Y1HcXYaMqAI0m9yrFqo/jt0CW30vsg=
github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0=
github.com/GeertJohan/go.rice v1.0.3 h1:k5viR+xGtIhF61125vCE1cmJ5957RQGXG6dmbaWZSmI= github.com/GeertJohan/go.rice v1.0.3 h1:k5viR+xGtIhF61125vCE1cmJ5957RQGXG6dmbaWZSmI=
github.com/GeertJohan/go.rice v1.0.3/go.mod h1:XVdrU4pW00M4ikZed5q56tPf1v2KwnIKeIdc9CBYNt4= github.com/GeertJohan/go.rice v1.0.3/go.mod h1:XVdrU4pW00M4ikZed5q56tPf1v2KwnIKeIdc9CBYNt4=
github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw=
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -20,14 +18,14 @@ github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/maputnik/desktop v1.0.7 h1:rdFg7emIJOT3YsZpwqSChmWtMOvu+T4h6WwVQAZP9n4= github.com/maputnik/desktop v1.0.7 h1:rdFg7emIJOT3YsZpwqSChmWtMOvu+T4h6WwVQAZP9n4=
github.com/maputnik/desktop v1.0.7/go.mod h1:wmDjHUztx9jOBz0I22589yWguAGdV/sEM57YANpN8oQ= github.com/maputnik/desktop v1.0.7/go.mod h1:wmDjHUztx9jOBz0I22589yWguAGdV/sEM57YANpN8oQ=
github.com/nkovacs/streamquote v1.0.0 h1:PmVIV08Zlx2lZK5fFZlMZ04eHcDTIFJCv/5/0twVUow=
github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOWpxbJYzzgUsc= github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOWpxbJYzzgUsc=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -41,12 +39,11 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8=
github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
golang.org/x/sys v0.0.0-20220908164124-27713097b956 h1:XeJjHH1KiLpKGb6lvMiksZ9l0fVUh+AmGcm0nOMEBOY=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+26 -2
View File
@@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"net"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
@@ -9,6 +10,7 @@ import (
"github.com/gorilla/handlers" "github.com/gorilla/handlers"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/maputnik/desktop/filewatch" "github.com/maputnik/desktop/filewatch"
"github.com/pkg/browser"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@@ -36,6 +38,10 @@ func main() {
Name: "static", Name: "static",
Usage: "Serve directory under /static/", Usage: "Serve directory under /static/",
}, },
&cli.BoolFlag{
Name: "no-browser",
Usage: "Do not automatically open the default browser",
},
} }
app.Action = func(c *cli.Context) error { app.Action = func(c *cli.Context) error {
@@ -71,8 +77,26 @@ func main() {
loggedRouter := handlers.LoggingHandler(os.Stdout, router) loggedRouter := handlers.LoggingHandler(os.Stdout, router)
corsRouter := handlers.CORS(handlers.AllowedHeaders([]string{"Content-Type"}), handlers.AllowedMethods([]string{"GET", "PUT"}), handlers.AllowedOrigins([]string{"*"}), handlers.AllowCredentials())(loggedRouter) corsRouter := handlers.CORS(handlers.AllowedHeaders([]string{"Content-Type"}), handlers.AllowedMethods([]string{"GET", "PUT"}), handlers.AllowedOrigins([]string{"*"}), handlers.AllowCredentials())(loggedRouter)
fmt.Printf("Exposing Maputnik on http://localhost:%d\n", c.Int("port")) listener, err := net.Listen("tcp", fmt.Sprintf(":%d", c.Int("port")))
return http.ListenAndServe(fmt.Sprintf(":%d", c.Int("port")), corsRouter) if err != nil {
return err
}
url := fmt.Sprintf("http://localhost:%d", c.Int("port"))
fmt.Printf("Exposing Maputnik on %s\n", url)
// Listener is already accepting connections, so this can't race http.Serve below.
// xdg-open is known to hang on some headless Linux setups, so this runs in its own
// goroutine to keep a stuck opener from stalling server startup.
if !c.Bool("no-browser") {
go func() {
if err := browser.OpenURL(url); err != nil {
fmt.Printf("Could not open browser automatically: %s\nPlease open %s manually.\n", err, url)
}
}()
}
return http.Serve(listener, corsRouter)
} }
app.Run(os.Args) app.Run(os.Args)
+16
View File
@@ -0,0 +1,16 @@
{
"version": 8,
"name": "Grouped layers",
"sources": {},
"layers": [
{ "id": "background", "type": "background" },
{ "id": "park-a", "type": "background" },
{ "id": "park-b", "type": "background" },
{ "id": "park-c", "type": "background" },
{ "id": "road", "type": "background" },
{ "id": "park-d", "type": "background" },
{ "id": "park-e", "type": "background" },
{ "id": "water-a", "type": "background" },
{ "id": "water-b", "type": "background" }
]
}
+78 -1
View File
@@ -1,4 +1,4 @@
import { beforeEach, describe, test } from "./utils/fixtures"; import { beforeEach, describe, expect, test } from "./utils/fixtures";
import { MaputnikDriver } from "./maputnik-driver"; import { MaputnikDriver } from "./maputnik-driver";
describe("layers list", () => { describe("layers list", () => {
@@ -47,6 +47,14 @@ describe("layers list", () => {
}); });
}); });
test("should title the visibility button with the action it performs", async () => {
const key = "layer-list-item:" + id + ":toggle-visibility";
// A visible layer is about to be hidden, and a hidden one to be shown.
await expect(get.elementByTestId(key)).toHaveAttribute("title", "hide");
await when.click(key);
await expect(get.elementByTestId(key)).toHaveAttribute("title", "show");
});
describe("when clicking hide", () => { describe("when clicking hide", () => {
beforeEach(async () => { beforeEach(async () => {
await when.click("layer-list-item:" + id + ":toggle-visibility"); await when.click("layer-list-item:" + id + ":toggle-visibility");
@@ -298,6 +306,75 @@ describe("layers list", () => {
}); });
describe("groups", () => { describe("groups", () => {
for (const control of ["menu", "trash"] as const) {
describe(`after deletion using ${control}`, () => {
beforeEach(async () => {
await when.setStyle("grouped_layers");
});
test("keeps all groups expanded when an earlier layer is deleted", async () => {
await when.click("skip-target-layer-list");
await then(get.elementByTestId("layer-list-item:park-b")).shouldBeVisible();
await when.deleteLayer("background", control);
await then(get.elementByTestId("layer-list-item:background")).shouldNotExist();
await then(get.elementByTestId("layer-list-group:park-0")).shouldExist();
await expect(get.elementByTestId("layer-list-group:water-6").getByRole("button")).toHaveAttribute("aria-expanded", "true");
await then(get.elementByTestId("layer-list-item:park-b")).shouldBeVisible();
await then(get.elementByTestId("layer-list-item:park-e")).shouldBeVisible();
await then(get.elementByTestId("layer-list-item:water-b")).shouldBeVisible();
});
test("preserves separate states for groups with the same prefix", async () => {
await when.click("layer-list-group:park-1");
await when.deleteLayer("background", control);
await then(get.elementByTestId("layer-list-group:park-0")).shouldExist();
await when.click("layer-list-item:road");
await expect(get.elementByTestId("layer-list-group:park-0").getByRole("button")).toHaveAttribute("aria-expanded", "true");
await expect(get.elementByTestId("layer-list-group:park-4").getByRole("button")).toHaveAttribute("aria-expanded", "false");
await then(get.elementByTestId("layer-list-item:park-b")).shouldBeVisible();
await then(get.elementByTestId("layer-list-item:park-e")).shouldNotBeVisible();
});
test("keeps a group expanded when its first layer is deleted", async () => {
await when.click("layer-list-group:park-1");
await when.deleteLayer("park-a", control);
await then(get.elementByTestId("layer-list-item:park-a")).shouldNotExist();
await when.click("layer-list-item:road");
await expect(get.elementByTestId("layer-list-group:park-1").getByRole("button")).toHaveAttribute("aria-expanded", "true");
await then(get.elementByTestId("layer-list-item:park-c")).shouldBeVisible();
});
for (const expandedGroup of ["park-1", "park-5"]) {
test(`keeps a merged group expanded when ${expandedGroup} was expanded`, async () => {
await when.click("layer-list-group:" + expandedGroup);
await when.deleteLayer("road", control);
await then(get.elementByTestId("layer-list-item:road")).shouldNotExist();
await expect(get.elementByTestId("layer-list-group:park-1").getByRole("button")).toHaveAttribute("aria-expanded", "true");
await then(get.elementByTestId("layer-list-item:park-b")).shouldBeVisible();
await then(get.elementByTestId("layer-list-item:park-e")).shouldBeVisible();
});
}
test("keeps a merged group collapsed when both groups were collapsed", async () => {
await when.deleteLayer("road", control);
await then(get.elementByTestId("layer-list-item:road")).shouldNotExist();
await when.click("layer-list-item:background");
await expect(get.elementByTestId("layer-list-group:park-1").getByRole("button")).toHaveAttribute("aria-expanded", "false");
await then(get.elementByTestId("layer-list-item:park-b")).shouldNotBeVisible();
await then(get.elementByTestId("layer-list-item:park-e")).shouldNotBeVisible();
});
test("preserves later groups after deleting an entire group", async () => {
await when.click("skip-target-layer-list");
await when.deleteLayer("park-a", control);
await when.deleteLayer("park-b", control);
await when.deleteLayer("park-c", control);
await expect(get.elementByTestId("layer-list-group:water-4").getByRole("button")).toHaveAttribute("aria-expanded", "true");
await then(get.elementByTestId("layer-list-item:water-b")).shouldBeVisible();
});
});
}
test("simple", async () => { test("simple", async () => {
await when.setStyle("geojson"); await when.setStyle("geojson");
+15
View File
@@ -39,6 +39,7 @@ export class MaputnikDriver {
"example-style-with-zoom-7-and-center-0-51.json", "example-style-with-zoom-7-and-center-0-51.json",
"example-style-with-zoom-5-and-center-50-50.json", "example-style-with-zoom-5-and-center-50-50.json",
"access-token-style.json", "access-token-style.json",
"grouped-layers-style.json",
]; ];
for (const fixture of styleFixtures) { for (const fixture of styleFixtures) {
await this.helper.given.interceptAndMockResponse({ await this.helper.given.interceptAndMockResponse({
@@ -63,6 +64,18 @@ export class MaputnikDriver {
modal: this.modalDriver.when, modal: this.modalDriver.when,
deleteLayer: async (id: string, control: "menu" | "trash" = "menu") => {
if (control === "trash") {
await this.helper.when.hover("layer-list-item:" + id);
await this.helper.when.click("layer-list-item:" + id + ":delete");
return;
}
await this.helper.when.click("layer-list-item:" + id);
await this.helper.when.click("skip-target-layer-editor");
await this.helper.when.click("menu-delete-layer");
},
setStyle: async ( setStyle: async (
styleProperties: styleProperties:
| "geojson" | "geojson"
@@ -73,6 +86,7 @@ export class MaputnikDriver {
| "font" | "font"
| "zoom_7_center_0_51" | "zoom_7_center_0_51"
| "access_tokens" | "access_tokens"
| "grouped_layers"
| "", | "",
zoom?: number zoom?: number
) => { ) => {
@@ -85,6 +99,7 @@ export class MaputnikDriver {
font: "example-style-with-fonts.json", font: "example-style-with-fonts.json",
zoom_7_center_0_51: "example-style-with-zoom-7-and-center-0-51.json", zoom_7_center_0_51: "example-style-with-zoom-7-and-center-0-51.json",
access_tokens: "access-token-style.json", access_tokens: "access-token-style.json",
grouped_layers: "grouped-layers-style.json",
}; };
const url = new URL(baseUrl); const url = new URL(baseUrl);
+3 -2
View File
@@ -14,6 +14,7 @@ export default defineConfig({
files: ["**/*.{js,jsx,ts,tsx}"], files: ["**/*.{js,jsx,ts,tsx}"],
ignores: [ ignores: [
"dist/**/*", "dist/**/*",
"public/**/*",
], ],
languageOptions: { languageOptions: {
ecmaVersion: 2024, ecmaVersion: 2024,
@@ -32,10 +33,10 @@ export default defineConfig({
"@stylistic": stylisticTs "@stylistic": stylisticTs
}, },
rules: { rules: {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"react-refresh/only-export-components": [ "react-refresh/only-export-components": [
"warn", "warn",
// Many components are exported as withTranslation()(Component); without
// this the rule cannot tell the HOC's result is still a component.
{ allowConstantExport: true, extraHOCs: ["withTranslation"] } { allowConstantExport: true, extraHOCs: ["withTranslation"] }
], ],
"@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-explicit-any": "off",
+1 -1
View File
@@ -1,7 +1,7 @@
import { defineConfig } from "i18next-cli"; import { defineConfig } from "i18next-cli";
export default defineConfig({ export default defineConfig({
locales: ["de", "fr", "he", "it", "ja", "ko", "tr", "zh"], locales: ["az", "de", "fr", "he", "it", "ja", "ko", "tr", "zh"],
extract: { extract: {
input: ["src/**/*.{js,jsx,ts,tsx}"], input: ["src/**/*.{js,jsx,ts,tsx}"],
output: "src/locales/{{language}}/{{namespace}}.json", output: "src/locales/{{language}}/{{namespace}}.json",
+1414 -2025
View File
File diff suppressed because it is too large Load Diff
+34 -33
View File
@@ -5,10 +5,11 @@
"type": "module", "type": "module",
"main": "''", "main": "''",
"scripts": { "scripts": {
"start": "vite", "copy-rtl-text-plugin": "mkdir -p public && cp -p node_modules/@mapbox/mapbox-gl-rtl-text/dist/mapbox-gl-rtl-text.js public/",
"build": "tsc && vite build --mode=production", "start": "npm run copy-rtl-text-plugin && vite",
"build-desktop": "tsc && vite build --mode=desktop && cd desktop && make", "build": "npm run copy-rtl-text-plugin && tsc && vite build --mode=production",
"build-linux": "tsc && vite build --mode=desktop && cd desktop && make bin/linux/maputnik", "build-desktop": "npm run copy-rtl-text-plugin && tsc && vite build --mode=desktop && cd desktop && make",
"build-linux": "npm run copy-rtl-text-plugin && tsc && vite build --mode=desktop && cd desktop && make bin/linux/maputnik",
"i18n:extract": "npx i18next-cli extract", "i18n:extract": "npx i18next-cli extract",
"lint": "eslint", "lint": "eslint",
"test": "playwright test", "test": "playwright test",
@@ -28,16 +29,16 @@
"dependencies": { "dependencies": {
"@codemirror/lang-json": "^6.0.2", "@codemirror/lang-json": "^6.0.2",
"@codemirror/lint": "^6.9.7", "@codemirror/lint": "^6.9.7",
"@codemirror/state": "^6.7.1", "@codemirror/state": "^6.7.4",
"@codemirror/theme-one-dark": "^6.1.3", "@codemirror/theme-one-dark": "^6.1.3",
"@codemirror/view": "^6.43.6", "@codemirror/view": "^6.43.11",
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0", "@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2", "@dnd-kit/utilities": "^3.2.2",
"@mapbox/mapbox-gl-rtl-text": "^0.4.0", "@mapbox/mapbox-gl-rtl-text": "^0.4.0",
"@maplibre/maplibre-gl-geocoder": "^1.9.4", "@maplibre/maplibre-gl-geocoder": "^1.9.4",
"@maplibre/maplibre-gl-inspect": "^1.8.2", "@maplibre/maplibre-gl-inspect": "^1.9.0",
"@maplibre/maplibre-gl-style-spec": "^25.0.2", "@maplibre/maplibre-gl-style-spec": "^26.4.1",
"array-move": "^4.0.0", "array-move": "^4.0.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"classnames": "^2.5.1", "classnames": "^2.5.1",
@@ -47,9 +48,9 @@
"downshift": "^9.4.0", "downshift": "^9.4.0",
"events": "^3.3.0", "events": "^3.3.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"i18next": "^26.3.4", "i18next": "^26.4.2",
"i18next-browser-languagedetector": "^8.2.1", "i18next-browser-languagedetector": "^8.2.1",
"i18next-resources-to-backend": "^1.2.1", "i18next-resources-to-backend": "^1.2.3",
"json-stringify-pretty-compact": "^4.0.0", "json-stringify-pretty-compact": "^4.0.0",
"json-to-ast": "^2.1.0", "json-to-ast": "^2.1.0",
"lodash": "^4.18.1", "lodash": "^4.18.1",
@@ -59,20 +60,20 @@
"lodash.get": "^4.4.2", "lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0", "lodash.isequal": "^4.5.0",
"lodash.throttle": "^4.1.1", "lodash.throttle": "^4.1.1",
"maplibre-gl": "^5.24.0", "maplibre-gl": "^6.7.0",
"maputnik-design": "github:maputnik/design#172b06c", "maputnik-design": "github:maputnik/design#172b06c",
"ol": "^10.9.0", "ol": "^10.10.0",
"ol-mapbox-style": "^13.4.1", "ol-mapbox-style": "^13.4.3",
"pmtiles": "^4.4.1", "pmtiles": "^4.5.0",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"react": "^19.2.7", "react": "^19.2.8",
"react-accessible-accordion": "^5.0.1", "react-accessible-accordion": "^5.0.1",
"react-aria-menubutton": "^8.0.0", "react-aria-menubutton": "^8.0.0",
"react-aria-modal": "^5.0.2", "react-aria-modal": "^5.0.2",
"react-collapse": "^5.1.1", "react-collapse": "^5.1.1",
"react-color": "^2.19.3", "react-color": "^2.19.3",
"react-dom": "^19.2.7", "react-dom": "^19.2.8",
"react-i18next": "^17.0.8", "react-i18next": "^17.0.13",
"react-icons": "^5.7.0", "react-icons": "^5.7.0",
"react-markdown": "^10.1.0", "react-markdown": "^10.1.0",
"reconnecting-websocket": "^4.4.0", "reconnecting-websocket": "^4.4.0",
@@ -100,9 +101,9 @@
"devDependencies": { "devDependencies": {
"@eslint/js": "^10.0.1", "@eslint/js": "^10.0.1",
"@istanbuljs/nyc-config-typescript": "^1.0.2", "@istanbuljs/nyc-config-typescript": "^1.0.2",
"@playwright/test": "^1.61.1", "@playwright/test": "^1.63.0",
"@stylistic/eslint-plugin": "^5.10.0", "@stylistic/eslint-plugin": "^5.10.0",
"@types/codemirror": "^5.60.17", "@types/codemirror": "^5.60.18",
"@types/color": "^4.2.1", "@types/color": "^4.2.1",
"@types/cors": "^2.8.19", "@types/cors": "^2.8.19",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
@@ -115,36 +116,36 @@
"@types/lodash.isequal": "^4.5.8", "@types/lodash.isequal": "^4.5.8",
"@types/lodash.throttle": "^4.1.9", "@types/lodash.throttle": "^4.1.9",
"@types/randomcolor": "^0.5.9", "@types/randomcolor": "^0.5.9",
"@types/react": "^19.2.17", "@types/react": "^19.2.18",
"@types/react-aria-menubutton": "^6.2.14", "@types/react-aria-menubutton": "^6.2.14",
"@types/react-aria-modal": "^5.0.0", "@types/react-aria-modal": "^5.0.0",
"@types/react-collapse": "^5.0.4", "@types/react-collapse": "^5.0.4",
"@types/react-color": "^3.0.13", "@types/react-color": "^3.0.13",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.7",
"@types/string-hash": "^1.1.3", "@types/string-hash": "^1.1.3",
"@types/wicg-file-system-access": "^2023.10.7", "@types/wicg-file-system-access": "^2023.10.7",
"@vitejs/plugin-react": "5.2", "@vitejs/plugin-react": "^6.1.1",
"@vitest/coverage-v8": "^4.1.10", "@vitest/coverage-v8": "^5.0.0",
"cors": "^2.8.6", "cors": "^2.8.6",
"eslint": "^10.6.0", "eslint": "^10.10.0",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.3", "eslint-plugin-react-refresh": "^0.5.6",
"i18next-cli": "^1.65.0", "i18next-cli": "^1.73.1",
"istanbul": "^0.4.5", "istanbul": "^0.4.5",
"istanbul-lib-coverage": "^3.2.2", "istanbul-lib-coverage": "^3.2.2",
"nyc": "^18.0.0", "nyc": "^18.0.0",
"postcss": "^8.5.16", "postcss": "^8.5.28",
"react-hot-loader": "^4.13.1", "react-hot-loader": "^4.13.1",
"sass": "^1.101.0", "sass": "^1.104.0",
"stylelint": "^17.14.0", "stylelint": "^17.15.0",
"stylelint-config-recommended-scss": "^17.0.1", "stylelint-config-recommended-scss": "^17.0.1",
"stylelint-scss": "^7.2.0", "stylelint-scss": "^7.2.0",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"typescript-eslint": "^8.62.1", "typescript-eslint": "^8.69.0",
"uuid": "^14.0.1", "uuid": "^14.0.2",
"vite": "^7.3.2", "vite": "^8.2.2",
"vite-plugin-istanbul": "^9.0.1", "vite-plugin-istanbul": "^9.0.1",
"vitest": "^4.1.10" "vitest": "^5.0.0"
} }
} }
+507 -550
View File
File diff suppressed because it is too large Load Diff
+16 -13
View File
@@ -13,38 +13,41 @@ type AppLayoutInternalProps = {
modals?: React.ReactNode modals?: React.ReactNode
} & WithTranslation; } & WithTranslation;
const AppLayoutInternal: React.FC<AppLayoutInternalProps> = (props) => { class AppLayoutInternal extends React.Component<AppLayoutInternalProps> {
document.body.dir = props.i18n.dir();
render() {
document.body.dir = this.props.i18n.dir();
return <IconContext.Provider value={{size: "14px"}}> return <IconContext.Provider value={{size: "14px"}}>
<div className="maputnik-layout"> <div className="maputnik-layout">
{props.toolbar} {this.props.toolbar}
<div className="maputnik-layout-main"> <div className="maputnik-layout-main">
{props.codeEditor && <div className="maputnik-layout-code-editor"> {this.props.codeEditor && <div className="maputnik-layout-code-editor">
<ScrollContainer> <ScrollContainer>
{props.codeEditor} {this.props.codeEditor}
</ScrollContainer> </ScrollContainer>
</div> </div>
} }
{!props.codeEditor && <> {!this.props.codeEditor && <>
<div className="maputnik-layout-list"> <div className="maputnik-layout-list">
{props.layerList} {this.props.layerList}
</div> </div>
<div className="maputnik-layout-drawer"> <div className="maputnik-layout-drawer">
<ScrollContainer> <ScrollContainer>
{props.layerEditor} {this.props.layerEditor}
</ScrollContainer> </ScrollContainer>
</div> </div>
</>} </>}
{props.map} {this.props.map}
</div> </div>
{props.bottom && <div className="maputnik-layout-bottom"> {this.props.bottom && <div className="maputnik-layout-bottom">
{props.bottom} {this.props.bottom}
</div> </div>
} }
{props.modals} {this.props.modals}
</div> </div>
</IconContext.Provider>; </IconContext.Provider>;
}; }
}
export const AppLayout = withTranslation()(AppLayoutInternal); export const AppLayout = withTranslation()(AppLayoutInternal);
+13 -10
View File
@@ -13,16 +13,18 @@ type AppMessagePanelInternalProps = {
selectedLayerIndex?: number selectedLayerIndex?: number
} & WithTranslation; } & WithTranslation;
const AppMessagePanelInternal: React.FC<AppMessagePanelInternalProps> = ({ class AppMessagePanelInternal extends React.Component<AppMessagePanelInternalProps> {
onLayerSelect = () => { }, static defaultProps = {
...props onLayerSelect: () => { },
}) => { };
const { t, selectedLayerIndex } = props;
const errors = props.errors?.map((error, idx) => { render() {
const { t, selectedLayerIndex } = this.props;
const errors = this.props.errors?.map((error, idx) => {
let content; let content;
if (error.parsed && error.parsed.type === "layer") { if (error.parsed && error.parsed.type === "layer") {
const { parsed } = error; const { parsed } = error;
const layerId = props.mapStyle?.layers[parsed.data.index].id; const layerId = this.props.mapStyle?.layers[parsed.data.index].id;
content = ( content = (
<> <>
{t("Layer")} <span>{formatLayerId(layerId)}</span>: {parsed.data.message} {t("Layer")} <span>{formatLayerId(layerId)}</span>: {parsed.data.message}
@@ -31,7 +33,7 @@ const AppMessagePanelInternal: React.FC<AppMessagePanelInternalProps> = ({
&nbsp;&mdash;&nbsp; &nbsp;&mdash;&nbsp;
<button <button
className="maputnik-message-panel__switch-button" className="maputnik-message-panel__switch-button"
onClick={() => onLayerSelect!(parsed.data.index)} onClick={() => this.props.onLayerSelect!(parsed.data.index)}
> >
{t("switch to layer")} {t("switch to layer")}
</button> </button>
@@ -48,7 +50,7 @@ const AppMessagePanelInternal: React.FC<AppMessagePanelInternalProps> = ({
</p>; </p>;
}); });
const infos = props.infos?.map((m, i) => { const infos = this.props.infos?.map((m, i) => {
return <p key={"info-" + i}>{m}</p>; return <p key={"info-" + i}>{m}</p>;
}); });
@@ -56,6 +58,7 @@ const AppMessagePanelInternal: React.FC<AppMessagePanelInternalProps> = ({
{errors} {errors}
{infos} {infos}
</div>; </div>;
}; }
}
export const AppMessagePanel = withTranslation()(AppMessagePanelInternal); export const AppMessagePanel = withTranslation()(AppMessagePanelInternal);
+59 -39
View File
@@ -31,9 +31,11 @@ type IconTextProps = {
}; };
const IconText: React.FC<IconTextProps> = (props) => { class IconText extends React.Component<IconTextProps> {
return <span className="maputnik-icon-text">{props.children}</span>; render() {
}; return <span className="maputnik-icon-text">{this.props.children}</span>;
}
}
type ToolbarLinkProps = { type ToolbarLinkProps = {
className?: string className?: string
@@ -41,31 +43,35 @@ type ToolbarLinkProps = {
href?: string href?: string
}; };
const ToolbarLink: React.FC<ToolbarLinkProps> = (props) => { class ToolbarLink extends React.Component<ToolbarLinkProps> {
render() {
return <a return <a
className={classnames("maputnik-toolbar-link", props.className)} className={classnames("maputnik-toolbar-link", this.props.className)}
href={props.href} href={this.props.href}
rel="noopener noreferrer" rel="noopener noreferrer"
target="_blank" target="_blank"
data-wd-key="toolbar:link" data-wd-key="toolbar:link"
> >
{props.children} {this.props.children}
</a>; </a>;
}; }
}
type ToolbarSelectProps = { type ToolbarSelectProps = {
children?: React.ReactNode children?: React.ReactNode
wdKey?: string wdKey?: string
}; };
const ToolbarSelect: React.FC<ToolbarSelectProps> = (props) => { class ToolbarSelect extends React.Component<ToolbarSelectProps> {
render() {
return <div return <div
className='maputnik-toolbar-select' className='maputnik-toolbar-select'
data-wd-key={props.wdKey} data-wd-key={this.props.wdKey}
> >
{props.children} {this.props.children}
</div>; </div>;
}; }
}
type ToolbarActionProps = { type ToolbarActionProps = {
children?: React.ReactNode children?: React.ReactNode
@@ -73,15 +79,17 @@ type ToolbarActionProps = {
wdKey?: string wdKey?: string
}; };
const ToolbarAction: React.FC<ToolbarActionProps> = (props) => { class ToolbarAction extends React.Component<ToolbarActionProps> {
render() {
return <button return <button
className='maputnik-toolbar-action' className='maputnik-toolbar-action'
data-wd-key={props.wdKey} data-wd-key={this.props.wdKey}
onClick={props.onClick} onClick={this.props.onClick}
> >
{props.children} {this.props.children}
</button>; </button>;
}; }
}
export type MapState = "map" | "inspect" | "filter-achromatopsia" | "filter-deuteranopia" | "filter-protanopia" | "filter-tritanopia"; export type MapState = "map" | "inspect" | "filter-achromatopsia" | "filter-deuteranopia" | "filter-protanopia" | "filter-tritanopia";
@@ -100,16 +108,26 @@ type AppToolbarInternalProps = {
renderer?: string renderer?: string
} & WithTranslation; } & WithTranslation;
const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => { class AppToolbarInternal extends React.Component<AppToolbarInternalProps> {
function handleSelection(val: MapState) { state = {
props.onSetMapState(val); isOpen: {
settings: false,
sources: false,
open: false,
add: false,
export: false,
}
};
handleSelection(val: MapState) {
this.props.onSetMapState(val);
} }
function handleLanguageChange(val: string) { handleLanguageChange(val: string) {
props.i18n.changeLanguage(val); this.props.i18n.changeLanguage(val);
} }
const onSkip = (target: string) => { onSkip = (target: string) => {
if (target === "map") { if (target === "map") {
(document.querySelector(".maplibregl-canvas") as HTMLCanvasElement).focus(); (document.querySelector(".maplibregl-canvas") as HTMLCanvasElement).focus();
} }
@@ -119,7 +137,8 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
} }
}; };
const t = props.t; render() {
const t = this.props.t;
const views = [ const views = [
{ {
id: "map", id: "map",
@@ -130,7 +149,7 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
id: "inspect", id: "inspect",
group: "general", group: "general",
title: t("Inspect"), title: t("Inspect"),
disabled: props.renderer === "ol", disabled: this.props.renderer === "ol",
}, },
{ {
id: "filter-deuteranopia", id: "filter-deuteranopia",
@@ -159,7 +178,7 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
]; ];
const currentView = views.find((view) => { const currentView = views.find((view) => {
return view.id === props.mapState; return view.id === this.props.mapState;
}); });
return <nav className='maputnik-toolbar'> return <nav className='maputnik-toolbar'>
@@ -171,21 +190,21 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
<button <button
data-wd-key="root:skip:layer-list" data-wd-key="root:skip:layer-list"
className="maputnik-toolbar-skip" className="maputnik-toolbar-skip"
onClick={_e => onSkip("layer-list")} onClick={_e => this.onSkip("layer-list")}
> >
{t("Layers list")} {t("Layers list")}
</button> </button>
<button <button
data-wd-key="root:skip:layer-editor" data-wd-key="root:skip:layer-editor"
className="maputnik-toolbar-skip" className="maputnik-toolbar-skip"
onClick={_e => onSkip("layer-editor")} onClick={_e => this.onSkip("layer-editor")}
> >
{t("Layer editor")} {t("Layer editor")}
</button> </button>
<button <button
data-wd-key="root:skip:map-view" data-wd-key="root:skip:map-view"
className="maputnik-toolbar-skip" className="maputnik-toolbar-skip"
onClick={_e => onSkip("map")} onClick={_e => this.onSkip("map")}
> >
{t("Map view")} {t("Map view")}
</button> </button>
@@ -203,27 +222,27 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
</a> </a>
</div> </div>
<div className="maputnik-toolbar__actions" role="navigation" aria-label="Toolbar"> <div className="maputnik-toolbar__actions" role="navigation" aria-label="Toolbar">
<ToolbarAction wdKey="nav:open" onClick={() => props.onToggleModal("open")}> <ToolbarAction wdKey="nav:open" onClick={() => this.props.onToggleModal("open")}>
<MdOpenInBrowser /> <MdOpenInBrowser />
<IconText>{t("Open")}</IconText> <IconText>{t("Open")}</IconText>
</ToolbarAction> </ToolbarAction>
<ToolbarAction wdKey="nav:export" onClick={() => props.onToggleModal("export")}> <ToolbarAction wdKey="nav:export" onClick={() => this.props.onToggleModal("export")}>
<MdSave /> <MdSave />
<IconText>{t("Save")}</IconText> <IconText>{t("Save")}</IconText>
</ToolbarAction> </ToolbarAction>
<ToolbarAction wdKey="nav:code-editor" onClick={() => props.onToggleModal("codeEditor")}> <ToolbarAction wdKey="nav:code-editor" onClick={() => this.props.onToggleModal("codeEditor")}>
<MdCode /> <MdCode />
<IconText>{t("Code Editor")}</IconText> <IconText>{t("Code Editor")}</IconText>
</ToolbarAction> </ToolbarAction>
<ToolbarAction wdKey="nav:sources" onClick={() => props.onToggleModal("sources")}> <ToolbarAction wdKey="nav:sources" onClick={() => this.props.onToggleModal("sources")}>
<MdLayers /> <MdLayers />
<IconText>{t("Data Sources")}</IconText> <IconText>{t("Data Sources")}</IconText>
</ToolbarAction> </ToolbarAction>
<ToolbarAction wdKey="nav:settings" onClick={() => props.onToggleModal("settings")}> <ToolbarAction wdKey="nav:settings" onClick={() => this.props.onToggleModal("settings")}>
<MdSettings /> <MdSettings />
<IconText>{t("Style Settings")}</IconText> <IconText>{t("Style Settings")}</IconText>
</ToolbarAction> </ToolbarAction>
<ToolbarAction wdKey="nav:global-state" onClick={() => props.onToggleModal("globalState")}> <ToolbarAction wdKey="nav:global-state" onClick={() => this.props.onToggleModal("globalState")}>
<MdPublic /> <MdPublic />
<IconText>{t("Global State")}</IconText> <IconText>{t("Global State")}</IconText>
</ToolbarAction> </ToolbarAction>
@@ -234,7 +253,7 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
<select <select
className="maputnik-select" className="maputnik-select"
data-wd-key="maputnik-select" data-wd-key="maputnik-select"
onChange={(e) => handleSelection(e.target.value as MapState)} onChange={(e) => this.handleSelection(e.target.value as MapState)}
value={currentView?.id} value={currentView?.id}
> >
{views.filter(v => v.group === "general").map((item) => { {views.filter(v => v.group === "general").map((item) => {
@@ -263,8 +282,8 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
<select <select
className="maputnik-select" className="maputnik-select"
data-wd-key="maputnik-lang-select" data-wd-key="maputnik-lang-select"
onChange={(e) => handleLanguageChange(e.target.value)} onChange={(e) => this.handleLanguageChange(e.target.value)}
value={props.i18n.language} value={this.props.i18n.language}
> >
{Object.entries(supportedLanguages).map(([code, name]) => { {Object.entries(supportedLanguages).map(([code, name]) => {
return ( return (
@@ -284,6 +303,7 @@ const AppToolbarInternal: React.FC<AppToolbarInternalProps> = (props) => {
</div> </div>
</div> </div>
</nav>; </nav>;
}; }
}
export const AppToolbar = withTranslation()(AppToolbarInternal); export const AppToolbar = withTranslation()(AppToolbarInternal);
+49 -28
View File
@@ -1,4 +1,4 @@
import React, {type CSSProperties, type PropsWithChildren, type SyntheticEvent, useRef, useState} from "react"; import React, {type CSSProperties, type PropsWithChildren, type SyntheticEvent} from "react";
import classnames from "classnames"; import classnames from "classnames";
import { FieldDocLabel } from "./FieldDocLabel"; import { FieldDocLabel } from "./FieldDocLabel";
import { Doc } from "./Doc"; import { Doc } from "./Doc";
@@ -14,13 +14,32 @@ export type BlockProps = PropsWithChildren & {
error?: {message: string} error?: {message: string}
}; };
/** Wrap a component with a label */ type BlockState = {
export const Block: React.FC<BlockProps> = (props) => { showDoc: boolean
const [showDoc, setShowDoc] = useState(false); };
const blockEl = useRef<HTMLDivElement | null>(null);
const onToggleDoc = (val: boolean) => { /** Wrap a component with a label */
setShowDoc(val); export class Block extends React.Component<BlockProps, BlockState> {
_blockEl: HTMLDivElement | null = null;
constructor (props: BlockProps) {
super(props);
this.state = {
showDoc: false,
};
}
onChange(e: React.BaseSyntheticEvent<Event, HTMLInputElement, HTMLInputElement>) {
const value = e.target.value;
if (this.props.onChange) {
return this.props.onChange(value === "" ? undefined : value);
}
}
onToggleDoc = (val: boolean) => {
this.setState({
showDoc: val
});
}; };
/** /**
@@ -29,9 +48,9 @@ export const Block: React.FC<BlockProps> = (props) => {
* causing the picker to reopen. This causes a scenario where the picker can * causing the picker to reopen. This causes a scenario where the picker can
* never be closed once open. * never be closed once open.
*/ */
const onLabelClick = (event: SyntheticEvent<any, any>) => { onLabelClick = (event: SyntheticEvent<any, any>) => {
const el = event.nativeEvent.target; const el = event.nativeEvent.target;
const contains = blockEl.current?.contains(el); const contains = this._blockEl?.contains(el);
if (event.nativeEvent.target.nodeName !== "INPUT" && !contains) { if (event.nativeEvent.target.nodeName !== "INPUT" && !contains) {
event.stopPropagation(); event.stopPropagation();
@@ -41,43 +60,45 @@ export const Block: React.FC<BlockProps> = (props) => {
} }
}; };
return <label style={props.style} render() {
data-wd-key={props["data-wd-key"]} return <label style={this.props.style}
data-wd-key={this.props["data-wd-key"]}
className={classnames({ className={classnames({
"maputnik-input-block": true, "maputnik-input-block": true,
"maputnik-input-block--wide": props.wideMode, "maputnik-input-block--wide": this.props.wideMode,
"maputnik-action-block": props.action, "maputnik-action-block": this.props.action,
"maputnik-input-block--error": props.error "maputnik-input-block--error": this.props.error
})} })}
onClick={onLabelClick} onClick={this.onLabelClick}
> >
{props.fieldSpec && {this.props.fieldSpec &&
<div className="maputnik-input-block-label"> <div className="maputnik-input-block-label">
<FieldDocLabel <FieldDocLabel
label={props.label} label={this.props.label}
onToggleDoc={onToggleDoc} onToggleDoc={this.onToggleDoc}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
/> />
</div> </div>
} }
{!props.fieldSpec && {!this.props.fieldSpec &&
<div className="maputnik-input-block-label"> <div className="maputnik-input-block-label">
{props.label} {this.props.label}
</div> </div>
} }
<div className="maputnik-input-block-action"> <div className="maputnik-input-block-action">
{props.action} {this.props.action}
</div> </div>
<div className="maputnik-input-block-content" ref={blockEl}> <div className="maputnik-input-block-content" ref={el => {this._blockEl = el;}}>
{props.children} {this.props.children}
</div> </div>
{props.fieldSpec && {this.props.fieldSpec &&
<div <div
className="maputnik-doc-inline" className="maputnik-doc-inline"
style={{display: showDoc ? "" : "none"}} style={{display: this.state.showDoc ? "" : "none"}}
> >
<Doc fieldSpec={props.fieldSpec} /> <Doc fieldSpec={this.props.fieldSpec} />
</div> </div>
} }
</label>; </label>;
}; }
}
+12 -6
View File
@@ -9,19 +9,25 @@ type CollapseProps = {
}; };
export const Collapse: React.FC<CollapseProps> = ({isActive = true, children}) => { export class Collapse extends React.Component<CollapseProps> {
static defaultProps = {
isActive: true
};
render() {
if (reducedMotionEnabled()) { if (reducedMotionEnabled()) {
return ( return (
<div style={{display: isActive ? "block" : "none"}}> <div style={{display: this.props.isActive ? "block" : "none"}}>
{children} {this.props.children}
</div> </div>
); );
} }
else { else {
return ( return (
<ReactCollapse isOpened={isActive}> <ReactCollapse isOpened={this.props.isActive}>
{children} {this.props.children}
</ReactCollapse> </ReactCollapse>
); );
} }
}; }
}
+6 -4
View File
@@ -6,11 +6,13 @@ type CollapserProps = {
style?: object style?: object
}; };
export const Collapser: React.FC<CollapserProps> = (props) => { export class Collapser extends React.Component<CollapserProps> {
render() {
const iconStyle = { const iconStyle = {
width: 20, width: 20,
height: 20, height: 20,
...props.style, ...this.props.style,
}; };
return props.isCollapsed ? <MdArrowDropUp style={iconStyle}/> : <MdArrowDropDown style={iconStyle} />; return this.props.isCollapsed ? <MdArrowDropUp style={iconStyle}/> : <MdArrowDropDown style={iconStyle} />;
}; }
}
+83 -66
View File
@@ -1,4 +1,4 @@
import React, { useRef } from "react"; import React from "react";
import {PiListPlusBold} from "react-icons/pi"; import {PiListPlusBold} from "react-icons/pi";
import {TbMathFunction} from "react-icons/tb"; import {TbMathFunction} from "react-icons/tb";
import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json"; import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json";
@@ -68,19 +68,32 @@ export type Stop = [{
value: number value: number
}, number]; }, number];
const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => { class DataPropertyInternal extends React.Component<DataPropertyInternalProps, DataPropertyState> {
// Kept in a ref rather than state: the original recomputed these on every state = {
// render via getDerivedStateFromProps, which as state would mean setting refs: {} as {[key: number]: string}
// state during render on every pass. };
const refs = useRef<{[key: number]: string}>({});
// setStopRefs returns undefined when no new stop needs a ref; as in the componentDidMount() {
// original, only replace the map when it actually produced one. const newRefs = setStopRefs(this.props, this.state);
const newStopRefs = setStopRefs(props, { refs: refs.current });
if (newStopRefs) { if(newRefs) {
refs.current = newStopRefs; this.setState({
refs: newRefs
});
}
} }
function getFieldFunctionType(fieldSpec: any) { static getDerivedStateFromProps(props: Readonly<DataPropertyInternalProps>, state: DataPropertyState) {
const newRefs = setStopRefs(props, state);
if(newRefs) {
return {
refs: newRefs
};
}
return null;
}
getFieldFunctionType(fieldSpec: any) {
if (fieldSpec.expression.interpolated) { if (fieldSpec.expression.interpolated) {
return "exponential"; return "exponential";
} }
@@ -90,7 +103,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
return "categorical"; return "categorical";
} }
function getDataFunctionTypes(fieldSpec: any) { getDataFunctionTypes(fieldSpec: any) {
if (fieldSpec.expression.interpolated) { if (fieldSpec.expression.interpolated) {
return ["interpolate", "categorical", "interval", "exponential", "identity"]; return ["interpolate", "categorical", "interval", "exponential", "identity"];
} }
@@ -100,11 +113,11 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
} }
// Order the stops altering the refs to reflect their new position. // Order the stops altering the refs to reflect their new position.
function orderStopsByZoom(stops: Stop[]) { orderStopsByZoom(stops: Stop[]) {
const mappedWithRef = stops const mappedWithRef = stops
.map((stop, idx) => { .map((stop, idx) => {
return { return {
ref: refs.current[idx], ref: this.state.refs[idx],
data: stop data: stop
}; };
}) })
@@ -118,12 +131,14 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
newRefs[idx] = stop.ref; newRefs[idx] = stop.ref;
}); });
refs.current = newRefs; this.setState({
refs: newRefs
});
return mappedWithRef.map((item) => item.data); return mappedWithRef.map((item) => item.data);
} }
const onChange = (fieldName: string, value: any) => { onChange = (fieldName: string, value: any) => {
if (value.type === "identity") { if (value.type === "identity") {
value = { value = {
type: value.type, type: value.type,
@@ -137,17 +152,17 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
type: value.type, type: value.type,
// Default props if they don't already exist. // Default props if they don't already exist.
stops: [ stops: [
[{zoom: 6, value: stopValue}, findDefaultFromSpec(props.fieldSpec as any)], [{zoom: 6, value: stopValue}, findDefaultFromSpec(this.props.fieldSpec as any)],
[{zoom: 10, value: stopValue}, findDefaultFromSpec(props.fieldSpec as any)] [{zoom: 10, value: stopValue}, findDefaultFromSpec(this.props.fieldSpec as any)]
], ],
...value, ...value,
}; };
} }
props.onChange!(fieldName, value); this.props.onChange!(fieldName, value);
}; };
function changeStop(changeIdx: number, stopData: { zoom: number | undefined, value: number }, value: number) { changeStop(changeIdx: number, stopData: { zoom: number | undefined, value: number }, value: number) {
const stops = props.value?.stops.slice(0) || []; const stops = this.props.value?.stops.slice(0) || [];
// const changedStop = stopData.zoom === undefined ? stopData.value : stopData // const changedStop = stopData.zoom === undefined ? stopData.value : stopData
stops[changeIdx] = [ stops[changeIdx] = [
{ {
@@ -157,73 +172,74 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
value value
]; ];
const orderedStops = orderStopsByZoom(stops); const orderedStops = this.orderStopsByZoom(stops);
const changedValue = { const changedValue = {
...props.value, ...this.props.value,
stops: orderedStops, stops: orderedStops,
}; };
onChange(props.fieldName, changedValue); this.onChange(this.props.fieldName, changedValue);
} }
function changeBase(newValue: number | undefined) { changeBase(newValue: number | undefined) {
const changedValue = { const changedValue = {
...props.value, ...this.props.value,
base: newValue base: newValue
}; };
if (changedValue.base === undefined) { if (changedValue.base === undefined) {
delete changedValue["base"]; delete changedValue["base"];
} }
props.onChange!(props.fieldName, changedValue); this.props.onChange!(this.props.fieldName, changedValue);
} }
function changeDataType(propVal: string) { changeDataType(propVal: string) {
if (propVal === "interpolate" && props.onChangeToZoomFunction) { if (propVal === "interpolate" && this.props.onChangeToZoomFunction) {
props.onChangeToZoomFunction(); this.props.onChangeToZoomFunction();
} }
else { else {
onChange(props.fieldName, { this.onChange(this.props.fieldName, {
...props.value, ...this.props.value,
type: propVal, type: propVal,
}); });
} }
} }
function changeDataProperty(propName: "property" | "default", propVal: any) { changeDataProperty(propName: "property" | "default", propVal: any) {
if (propVal) { if (propVal) {
props.value![propName] = propVal; this.props.value![propName] = propVal;
} }
else { else {
delete props.value![propName]; delete this.props.value![propName];
} }
onChange(props.fieldName, props.value); this.onChange(this.props.fieldName, this.props.value);
} }
const t = props.t; render() {
const t = this.props.t;
if (typeof props.value?.type === "undefined") { if (typeof this.props.value?.type === "undefined") {
props.value!.type = getFieldFunctionType(props.fieldSpec); this.props.value!.type = this.getFieldFunctionType(this.props.fieldSpec);
} }
let dataFields; let dataFields;
if (props.value?.stops) { if (this.props.value?.stops) {
dataFields = props.value.stops.map((stop, idx) => { dataFields = this.props.value.stops.map((stop, idx) => {
const zoomLevel = typeof stop[0] === "object" ? stop[0].zoom : undefined; const zoomLevel = typeof stop[0] === "object" ? stop[0].zoom : undefined;
const key = refs.current[idx]; const key = this.state.refs[idx];
const dataLevel = typeof stop[0] === "object" ? stop[0].value : stop[0]; const dataLevel = typeof stop[0] === "object" ? stop[0].value : stop[0];
const value = stop[1]; const value = stop[1];
const deleteStopBtn = <DeleteStopButton onClick={props.onDeleteStop?.bind(null, idx)} />; const deleteStopBtn = <DeleteStopButton onClick={this.props.onDeleteStop?.bind(this, idx)} />;
const dataProps = { const dataProps = {
"aria-label": t("Input value"), "aria-label": t("Input value"),
label: t("Data value"), label: t("Data value"),
value: dataLevel as any, value: dataLevel as any,
onChange: (newData: string | number | undefined) => changeStop(idx, { zoom: zoomLevel, value: newData as number }, value) onChange: (newData: string | number | undefined) => this.changeStop(idx, { zoom: zoomLevel, value: newData as number }, value)
}; };
let dataInput; let dataInput;
if(props.value?.type === "categorical") { if(this.props.value?.type === "categorical") {
dataInput = <InputString {...dataProps} />; dataInput = <InputString {...dataProps} />;
} }
else { else {
@@ -236,7 +252,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
<InputNumber <InputNumber
aria-label="Zoom" aria-label="Zoom"
value={zoomLevel} value={zoomLevel}
onChange={newZoom => changeStop(idx, {zoom: newZoom, value: dataLevel}, value)} onChange={newZoom => this.changeStop(idx, {zoom: newZoom, value: dataLevel}, value)}
min={0} min={0}
max={22} max={22}
/> />
@@ -253,10 +269,10 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
<td> <td>
<InputSpec <InputSpec
aria-label={t("Output value")} aria-label={t("Output value")}
fieldName={props.fieldName} fieldName={this.props.fieldName}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
value={value} value={value}
onChange={(_, newValue) => changeStop(idx, {zoom: zoomLevel, value: dataLevel}, newValue as number)} onChange={(_, newValue) => this.changeStop(idx, {zoom: zoomLevel, value: dataLevel}, newValue as number)}
/> />
</td> </td>
<td> <td>
@@ -268,7 +284,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
return <div className="maputnik-data-spec-block"> return <div className="maputnik-data-spec-block">
<fieldset className="maputnik-data-spec-property"> <fieldset className="maputnik-data-spec-property">
<legend>{labelFromFieldName(props.fieldName)}</legend> <legend>{labelFromFieldName(this.props.fieldName)}</legend>
<div className="maputnik-data-fieldset-inner"> <div className="maputnik-data-fieldset-inner">
<Block <Block
label={t("Function")} label={t("Function")}
@@ -277,14 +293,14 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
> >
<div className="maputnik-data-spec-property-input"> <div className="maputnik-data-spec-property-input">
<InputSelect <InputSelect
value={props.value!.type} value={this.props.value!.type}
onChange={(propVal: string) => changeDataType(propVal)} onChange={(propVal: string) => this.changeDataType(propVal)}
title={t("Select a type of data scale (default is 'categorical').")} title={t("Select a type of data scale (default is 'categorical').")}
options={getDataFunctionTypes(props.fieldSpec)} options={this.getDataFunctionTypes(this.props.fieldSpec)}
/> />
</div> </div>
</Block> </Block>
{props.value?.type !== "identity" && {this.props.value?.type !== "identity" &&
<Block <Block
label={t("Base")} label={t("Base")}
key="base" key="base"
@@ -294,8 +310,8 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
<InputSpec <InputSpec
fieldName={"base"} fieldName={"base"}
fieldSpec={latest.function.base as typeof latest.function.base & { type: "number" }} fieldSpec={latest.function.base as typeof latest.function.base & { type: "number" }}
value={props.value?.base} value={this.props.value?.base}
onChange={(_, newValue) => changeBase(newValue as number)} onChange={(_, newValue) => this.changeBase(newValue as number)}
/> />
</div> </div>
</Block> </Block>
@@ -307,9 +323,9 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
> >
<div className="maputnik-data-spec-property-input"> <div className="maputnik-data-spec-property-input">
<InputString <InputString
value={props.value?.property} value={this.props.value?.property}
title={t("Input a data property to base styles off of.")} title={t("Input a data property to base styles off of.")}
onChange={propVal => changeDataProperty("property", propVal)} onChange={propVal => this.changeDataProperty("property", propVal)}
/> />
</div> </div>
</Block> </Block>
@@ -320,10 +336,10 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
data-wd-key="function-default" data-wd-key="function-default"
> >
<InputSpec <InputSpec
fieldName={props.fieldName} fieldName={this.props.fieldName}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
value={props.value?.default} value={this.props.value?.default}
onChange={(_, propVal) => changeDataProperty("default", propVal)} onChange={(_, propVal) => this.changeDataProperty("default", propVal)}
/> />
</Block> </Block>
} }
@@ -348,7 +364,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
{dataFields && {dataFields &&
<InputButton <InputButton
className="maputnik-add-stop" className="maputnik-add-stop"
onClick={props.onAddStop?.bind(null)} onClick={this.props.onAddStop?.bind(this)}
> >
<PiListPlusBold style={{ verticalAlign: "text-bottom" }} /> <PiListPlusBold style={{ verticalAlign: "text-bottom" }} />
{t("Add stop")} {t("Add stop")}
@@ -357,7 +373,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
<InputButton <InputButton
className="maputnik-add-stop" className="maputnik-add-stop"
data-wd-key="convert-to-expression" data-wd-key="convert-to-expression"
onClick={props.onExpressionClick?.bind(null)} onClick={this.props.onExpressionClick?.bind(this)}
> >
<TbMathFunction style={{ verticalAlign: "text-bottom" }} /> <TbMathFunction style={{ verticalAlign: "text-bottom" }} />
{t("Convert to expression")} {t("Convert to expression")}
@@ -366,6 +382,7 @@ const DataPropertyInternal: React.FC<DataPropertyInternalProps> = (props) => {
</div> </div>
</fieldset> </fieldset>
</div>; </div>;
}; }
}
export const DataProperty = withTranslation()(DataPropertyInternal); export const DataProperty = withTranslation()(DataPropertyInternal);
+6 -4
View File
@@ -10,15 +10,17 @@ type DeleteStopButtonInternalProps = {
} & WithTranslation; } & WithTranslation;
const DeleteStopButtonInternal: React.FC<DeleteStopButtonInternalProps> = (props) => { class DeleteStopButtonInternal extends React.Component<DeleteStopButtonInternalProps> {
const t = props.t; render() {
const t = this.props.t;
return <InputButton return <InputButton
className="maputnik-delete-stop" className="maputnik-delete-stop"
onClick={props.onClick} onClick={this.props.onClick}
title={t("Remove zoom level from stop")} title={t("Remove zoom level from stop")}
> >
<MdDelete /> <MdDelete />
</InputButton>; </InputButton>;
}; }
}
export const DeleteStopButton = withTranslation()(DeleteStopButtonInternal); export const DeleteStopButton = withTranslation()(DeleteStopButtonInternal);
+6 -2
View File
@@ -23,7 +23,10 @@ type DocProps = {
} }
}; };
export const Doc: React.FC<DocProps> = ({fieldSpec}) => { export class Doc extends React.Component<DocProps> {
render () {
const {fieldSpec} = this.props;
const {doc, values, docUrl, docUrlLinkText} = fieldSpec; const {doc, values, docUrl, docUrlLinkText} = fieldSpec;
const sdkSupport = fieldSpec["sdk-support"]; const sdkSupport = fieldSpec["sdk-support"];
@@ -103,4 +106,5 @@ export const Doc: React.FC<DocProps> = ({fieldSpec}) => {
} }
</> </>
); );
}; }
}
+30 -20
View File
@@ -24,21 +24,30 @@ type ExpressionPropertyInternalProps = {
onBlur?(...args: unknown[]): unknown onBlur?(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const ExpressionPropertyInternal: React.FC<ExpressionPropertyInternalProps> = ({ class ExpressionPropertyInternal extends React.Component<ExpressionPropertyInternalProps> {
errors = {}, static defaultProps = {
onFocus = () => {}, errors: {},
onBlur = () => {}, onFocus: () => {},
...props onBlur: () => {},
}) => { };
const {t, value, canUndo} = props;
constructor(props: ExpressionPropertyInternalProps) {
super(props);
this.state = {
jsonError: false,
};
}
render() {
const {t, value, canUndo} = this.props;
const undoDisabled = canUndo ? !canUndo() : true; const undoDisabled = canUndo ? !canUndo() : true;
const deleteStopBtn = ( const deleteStopBtn = (
<> <>
{props.onUndo && {this.props.onUndo &&
<InputButton <InputButton
key="undo_action" key="undo_action"
onClick={props.onUndo} onClick={this.props.onUndo}
disabled={undoDisabled} disabled={undoDisabled}
className="maputnik-delete-stop" className="maputnik-delete-stop"
data-wd-key="undo-expression" data-wd-key="undo-expression"
@@ -49,7 +58,7 @@ const ExpressionPropertyInternal: React.FC<ExpressionPropertyInternalProps> = ({
} }
<InputButton <InputButton
key="delete_action" key="delete_action"
onClick={props.onDelete} onClick={this.props.onDelete}
className="maputnik-delete-stop" className="maputnik-delete-stop"
data-wd-key="delete-expression" data-wd-key="delete-expression"
title={t("Delete expression")} title={t("Delete expression")}
@@ -59,27 +68,28 @@ const ExpressionPropertyInternal: React.FC<ExpressionPropertyInternalProps> = ({
</> </>
); );
let error = undefined; let error = undefined;
if (errors) { if (this.props.errors) {
const fieldKey = props.fieldType ? props.fieldType + "." + props.fieldName : props.fieldName; const fieldKey = this.props.fieldType ? this.props.fieldType + "." + this.props.fieldName : this.props.fieldName;
error = errors[fieldKey]; error = this.props.errors[fieldKey];
} }
return <Block return <Block
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
label={t(labelFromFieldName(props.fieldName))} label={t(labelFromFieldName(this.props.fieldName))}
action={deleteStopBtn} action={deleteStopBtn}
wideMode={true} wideMode={true}
error={error} error={error}
> >
<FieldJson <FieldJson
lintType="expression" lintType="expression"
spec={props.fieldSpec} spec={this.props.fieldSpec}
className="maputnik-expression-editor" className="maputnik-expression-editor"
onFocus={onFocus} onFocus={this.props.onFocus}
onBlur={onBlur} onBlur={this.props.onBlur}
value={value} value={value}
onChange={props.onChange} onChange={this.props.onChange}
/> />
</Block>; </Block>;
}; }
}
export const ExpressionProperty = withTranslation()(ExpressionPropertyInternal); export const ExpressionProperty = withTranslation()(ExpressionPropertyInternal);
+4 -1
View File
@@ -2,7 +2,10 @@ import { InputDynamicArray, type InputDynamicArrayProps } from "./InputDynamicAr
import { Fieldset } from "./Fieldset"; import { Fieldset } from "./Fieldset";
type FieldDynamicArrayProps = InputDynamicArrayProps & { type FieldDynamicArrayProps = InputDynamicArrayProps & {
name?: string name?: string;
fieldSpec?: {
value?: string;
}
}; };
export const FieldDynamicArray: React.FC<FieldDynamicArrayProps> = (props) => { export const FieldDynamicArray: React.FC<FieldDynamicArrayProps> = (props) => {
+83 -51
View File
@@ -1,4 +1,4 @@
import React, { useState } from "react"; import React from "react";
import { TbMathFunction } from "react-icons/tb"; import { TbMathFunction } from "react-icons/tb";
import { PiListPlusBold } from "react-icons/pi"; import { PiListPlusBold } from "react-icons/pi";
import {isEqual} from "lodash"; import {isEqual} from "lodash";
@@ -100,64 +100,95 @@ type FilterEditorInternalProps = {
onChange(value: LegacyFilterSpecification | ExpressionSpecification): void onChange(value: LegacyFilterSpecification | ExpressionSpecification): void
} & WithTranslation; } & WithTranslation;
const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["all"], ...rest }) => { type FilterEditorState = {
const props = { filter, ...rest } as FilterEditorInternalProps; showDoc: boolean
displaySimpleFilter: boolean
valueIsSimpleFilter?: boolean
};
// Nothing ever toggles this: the Block below renders its own documentation class FilterEditorInternal extends React.Component<FilterEditorInternalProps, FilterEditorState> {
// toggle, so this component's inline doc panel stays hidden (as it did before). static defaultProps = {
const [showDoc] = useState(false); filter: ["all"],
const [displaySimpleFilter, setDisplaySimpleFilter] = useState(() => };
checkIfSimpleFilter(combiningFilter(props))
);
// Replaces getDerivedStateFromProps. "Upgrade but never downgrade": once the constructor (props: FilterEditorInternalProps) {
// filter stops being expressible in the simple editor, switch to the super(props);
// expression editor and stay there. this.state = {
const isSimpleFilter = checkIfSimpleFilter(combiningFilter(props)); showDoc: false,
if (!isSimpleFilter && displaySimpleFilter) { displaySimpleFilter: checkIfSimpleFilter(combiningFilter(props)),
setDisplaySimpleFilter(false); };
} }
// In the original this was state, but every branch derived it from these two
// values alone.
const valueIsSimpleFilter = isSimpleFilter && !displaySimpleFilter;
// Convert filter to combining filter // Convert filter to combining filter
function onFilterPartChanged(filterIdx: number, newPart: any[]) { onFilterPartChanged(filterIdx: number, newPart: any[]) {
const newFilter = combiningFilter(props).slice(0) as LegacyFilterSpecification | ExpressionSpecification; const newFilter = combiningFilter(this.props).slice(0) as LegacyFilterSpecification | ExpressionSpecification;
newFilter[filterIdx] = newPart; newFilter[filterIdx] = newPart;
props.onChange(newFilter); this.props.onChange(newFilter);
} }
function deleteFilterItem(filterIdx: number) { deleteFilterItem(filterIdx: number) {
const newFilter = combiningFilter(props).slice(0) as LegacyFilterSpecification | ExpressionSpecification; const newFilter = combiningFilter(this.props).slice(0) as LegacyFilterSpecification | ExpressionSpecification;
newFilter.splice(filterIdx + 1, 1); newFilter.splice(filterIdx + 1, 1);
props.onChange(newFilter); this.props.onChange(newFilter);
} }
const addFilterItem = () => { addFilterItem = () => {
const newFilterItem = combiningFilter(props).slice(0) as LegacyFilterSpecification | ExpressionSpecification; const newFilterItem = combiningFilter(this.props).slice(0) as LegacyFilterSpecification | ExpressionSpecification;
(newFilterItem as any[]).push(["==", "name", ""]); (newFilterItem as any[]).push(["==", "name", ""]);
props.onChange(newFilterItem); this.props.onChange(newFilterItem);
}; };
const makeFilter = () => { onToggleDoc = (val: boolean) => {
setDisplaySimpleFilter(true); this.setState({
showDoc: val
});
}; };
const makeExpression = () => { makeFilter = () => {
const currentFilter = combiningFilter(props); this.setState({
props.onChange(migrateFilter(currentFilter)); displaySimpleFilter: true,
setDisplaySimpleFilter(false); });
}; };
makeExpression = () => {
const filter = combiningFilter(this.props);
this.props.onChange(migrateFilter(filter));
this.setState({
displaySimpleFilter: false,
});
};
const {errors, t} = props; static getDerivedStateFromProps(props: Readonly<FilterEditorInternalProps>, state: FilterEditorState) {
const displaySimpleFilter = checkIfSimpleFilter(combiningFilter(props));
// Upgrade but never downgrade
if (!displaySimpleFilter && state.displaySimpleFilter === true) {
return {
displaySimpleFilter: false,
valueIsSimpleFilter: false,
};
}
else if (displaySimpleFilter && state.displaySimpleFilter === false) {
return {
valueIsSimpleFilter: true,
};
}
else {
return {
valueIsSimpleFilter: false,
};
}
}
render() {
const {errors, t} = this.props;
const {displaySimpleFilter} = this.state;
const fieldSpec={ const fieldSpec={
doc: latest.layer.filter.doc + " Combine multiple filters together by using a compound filter." doc: latest.layer.filter.doc + " Combine multiple filters together by using a compound filter."
}; };
const defaultFilter = ["all"] as LegacyFilterSpecification | ExpressionSpecification; const defaultFilter = ["all"] as LegacyFilterSpecification | ExpressionSpecification;
const isNestedCombiningFilter = displaySimpleFilter && hasNestedCombiningFilter(combiningFilter(props)); const isNestedCombiningFilter = displaySimpleFilter && hasNestedCombiningFilter(combiningFilter(this.props));
if (isNestedCombiningFilter) { if (isNestedCombiningFilter) {
return <div className="maputnik-filter-editor-unsupported"> return <div className="maputnik-filter-editor-unsupported">
@@ -165,7 +196,7 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
{t("Nested filters are not supported.")} {t("Nested filters are not supported.")}
</p> </p>
<InputButton <InputButton
onClick={makeExpression} onClick={this.makeExpression}
title={t("Convert to expression")} title={t("Convert to expression")}
> >
<TbMathFunction /> <TbMathFunction />
@@ -174,14 +205,14 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
</div>; </div>;
} }
else if (displaySimpleFilter) { else if (displaySimpleFilter) {
const filter = combiningFilter(props); const filter = combiningFilter(this.props);
const combiningOp = filter[0]; const combiningOp = filter[0];
const filters = filter.slice(1) as (LegacyFilterSpecification | ExpressionSpecification)[]; const filters = filter.slice(1) as (LegacyFilterSpecification | ExpressionSpecification)[];
const actions = ( const actions = (
<div> <div>
<InputButton <InputButton
onClick={makeExpression} onClick={this.makeExpression}
title={t("Convert to expression")} title={t("Convert to expression")}
className="maputnik-make-zoom-function" className="maputnik-make-zoom-function"
data-wd-key="filter-convert-to-expression" data-wd-key="filter-convert-to-expression"
@@ -196,11 +227,11 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
return ( return (
<div key={`block-${idx}`}> <div key={`block-${idx}`}>
<FilterEditorBlock key={idx} onDelete={deleteFilterItem.bind(null, idx)}> <FilterEditorBlock key={idx} onDelete={this.deleteFilterItem.bind(this, idx)}>
<SingleFilterEditor <SingleFilterEditor
properties={props.properties} properties={this.props.properties}
filter={f} filter={f}
onChange={onFilterPartChanged.bind(null, idx + 1)} onChange={this.onFilterPartChanged.bind(this, idx + 1)}
/> />
</FilterEditorBlock> </FilterEditorBlock>
{error && {error &&
@@ -222,7 +253,7 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
> >
<InputSelect <InputSelect
value={combiningOp} value={combiningOp}
onChange={(v: [string, any]) => onFilterPartChanged(0, v)} onChange={(v: [string, any]) => this.onFilterPartChanged(0, v)}
options={[ options={[
["all", t("every filter matches")], ["all", t("every filter matches")],
["none", t("no filter matches")], ["none", t("no filter matches")],
@@ -238,7 +269,7 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
<InputButton <InputButton
data-wd-key="layer-filter-button" data-wd-key="layer-filter-button"
className="maputnik-add-filter" className="maputnik-add-filter"
onClick={addFilterItem} onClick={this.addFilterItem}
> >
<PiListPlusBold style={{ verticalAlign: "text-bottom" }} /> <PiListPlusBold style={{ verticalAlign: "text-bottom" }} />
{t("Add filter")} {t("Add filter")}
@@ -247,7 +278,7 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
<div <div
key="doc" key="doc"
className="maputnik-doc-inline" className="maputnik-doc-inline"
style={{display: showDoc ? "" : "none"}} style={{display: this.state.showDoc ? "" : "none"}}
> >
<Doc fieldSpec={fieldSpec} /> <Doc fieldSpec={fieldSpec} />
</div> </div>
@@ -255,26 +286,26 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
); );
} }
else { else {
const {filter} = props; const {filter} = this.props;
return ( return (
<> <>
<ExpressionProperty <ExpressionProperty
onDelete={() => { onDelete={() => {
setDisplaySimpleFilter(true); this.setState({displaySimpleFilter: true});
props.onChange(defaultFilter); this.props.onChange(defaultFilter);
}} }}
fieldName="filter" fieldName="filter"
value={filter} value={filter}
errors={errors} errors={errors}
onChange={props.onChange} onChange={this.props.onChange}
/> />
{valueIsSimpleFilter && {this.state.valueIsSimpleFilter &&
<div className="maputnik-expr-infobox"> <div className="maputnik-expr-infobox">
{t("You've entered an old style filter.")} {t("You've entered an old style filter.")}
{" "} {" "}
<button <button
onClick={makeFilter} onClick={this.makeFilter}
className="maputnik-expr-infobox__button" className="maputnik-expr-infobox__button"
> >
{t("Switch to filter editor.")} {t("Switch to filter editor.")}
@@ -284,6 +315,7 @@ const FilterEditorInternal: React.FC<FilterEditorInternalProps> = ({ filter = ["
</> </>
); );
} }
}; }
}
export const FilterEditor = withTranslation()(FilterEditorInternal); export const FilterEditor = withTranslation()(FilterEditorInternal);
+7 -5
View File
@@ -7,22 +7,24 @@ type FilterEditorBlockInternalProps = PropsWithChildren & {
onDelete(...args: unknown[]): unknown onDelete(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const FilterEditorBlockInternal: React.FC<FilterEditorBlockInternalProps> = (props) => { class FilterEditorBlockInternal extends React.Component<FilterEditorBlockInternalProps> {
const t = props.t; render() {
const t = this.props.t;
return <div className="maputnik-filter-editor-block"> return <div className="maputnik-filter-editor-block">
<div className="maputnik-filter-editor-block-content"> <div className="maputnik-filter-editor-block-content">
{props.children} {this.props.children}
</div> </div>
<div className="maputnik-filter-editor-block-action"> <div className="maputnik-filter-editor-block-action">
<InputButton <InputButton
className="maputnik-icon-button" className="maputnik-icon-button"
onClick={props.onDelete} onClick={this.props.onDelete}
title={t("Delete filter block")} title={t("Delete filter block")}
> >
<MdDelete /> <MdDelete />
</InputButton> </InputButton>
</div> </div>
</div>; </div>;
}; }
}
export const FilterEditorBlock = withTranslation()(FilterEditorBlockInternal); export const FilterEditorBlock = withTranslation()(FilterEditorBlockInternal);
+12 -10
View File
@@ -13,14 +13,15 @@ type FunctionInputButtonsInternalProps = {
onElevationClick?(): void onElevationClick?(): void
} & WithTranslation; } & WithTranslation;
const FunctionInputButtonsInternal: React.FC<FunctionInputButtonsInternalProps> = (props) => { class FunctionInputButtonsInternal extends React.Component<FunctionInputButtonsInternalProps> {
const t = props.t; render() {
const t = this.props.t;
if (props.fieldSpec.expression?.parameters.includes("zoom")) { if (this.props.fieldSpec.expression?.parameters.includes("zoom")) {
const expressionInputButton = ( const expressionInputButton = (
<InputButton <InputButton
className="maputnik-make-zoom-function" className="maputnik-make-zoom-function"
onClick={props.onExpressionClick} onClick={this.props.onExpressionClick}
title={t("Convert to expression")} title={t("Convert to expression")}
> >
<TbMathFunction /> <TbMathFunction />
@@ -29,17 +30,17 @@ const FunctionInputButtonsInternal: React.FC<FunctionInputButtonsInternalProps>
const makeZoomInputButton = <InputButton const makeZoomInputButton = <InputButton
className="maputnik-make-zoom-function" className="maputnik-make-zoom-function"
onClick={props.onZoomClick} onClick={this.props.onZoomClick}
title={t("Convert property into a zoom function")} title={t("Convert property into a zoom function")}
> >
<MdFunctions /> <MdFunctions />
</InputButton>; </InputButton>;
let makeDataInputButton; let makeDataInputButton;
if (props.fieldSpec["property-type"] === "data-driven") { if (this.props.fieldSpec["property-type"] === "data-driven") {
makeDataInputButton = <InputButton makeDataInputButton = <InputButton
className="maputnik-make-data-function" className="maputnik-make-data-function"
onClick={props.onDataClick} onClick={this.props.onDataClick}
title={t("Convert property to data function")} title={t("Convert property to data function")}
> >
<MdInsertChart /> <MdInsertChart />
@@ -50,10 +51,10 @@ const FunctionInputButtonsInternal: React.FC<FunctionInputButtonsInternalProps>
{makeDataInputButton} {makeDataInputButton}
{makeZoomInputButton} {makeZoomInputButton}
</div>; </div>;
} else if (props.fieldSpec.expression?.parameters.includes("elevation")) { } else if (this.props.fieldSpec.expression?.parameters.includes("elevation")) {
const inputElevationButton = <InputButton const inputElevationButton = <InputButton
className="maputnik-make-elevation-function" className="maputnik-make-elevation-function"
onClick={props.onElevationClick} onClick={this.props.onElevationClick}
title={t("Convert property into a elevation function")} title={t("Convert property into a elevation function")}
data-wd-key='make-elevation-function' data-wd-key='make-elevation-function'
> >
@@ -63,6 +64,7 @@ const FunctionInputButtonsInternal: React.FC<FunctionInputButtonsInternalProps>
} else { } else {
return <div></div>; return <div></div>;
} }
}; }
}
export const FunctionInputButtons = withTranslation()(FunctionInputButtonsInternal); export const FunctionInputButtons = withTranslation()(FunctionInputButtonsInternal);
+67 -33
View File
@@ -1,4 +1,4 @@
import React, { useState } from "react"; import React from "react";
import { InputString } from "./InputString"; import { InputString } from "./InputString";
import { InputNumber } from "./InputNumber"; import { InputNumber } from "./InputNumber";
@@ -12,40 +12,73 @@ export type InputArrayProps = {
label?: string label?: string
}; };
export const InputArray: React.FC<InputArrayProps> = ({ type InputArrayState = {
value: propsValue = [], value: (string | number | undefined)[]
default: propsDefault = [], initialPropsValue: unknown[]
...rest };
}) => {
const props = { value: propsValue, default: propsDefault, ...rest };
// The original seeded this from props and then never let props overwrite it export class InputArray extends React.Component<InputArrayProps, InputArrayState> {
// again (its getDerivedStateFromProps assigned the existing state back in static defaultProps = {
// both branches), so the value is owned by this component after mount. value: [],
const [value, setValue] = useState<(string | number | undefined)[]>(() => propsValue.slice(0)); default: [],
};
function isComplete(val: unknown[]) { constructor (props: InputArrayProps) {
return Array(props.length).fill(null).every((_, i) => { super(props);
const v = val[i]; this.state = {
return !(v === undefined || v === ""); value: this.props.value.slice(0),
// This is so we can compare changes in getDerivedStateFromProps
initialPropsValue: this.props.value.slice(0),
};
}
static getDerivedStateFromProps(props: Readonly<InputArrayProps>, state: InputArrayState) {
const value: any[] = [];
const initialPropsValue = state.initialPropsValue.slice(0);
Array(props.length).fill(null).map((_, i) => {
if (props.value[i] === state.initialPropsValue[i]) {
value[i] = state.value[i];
}
else {
value[i] = state.value[i];
initialPropsValue[i] = state.value[i];
}
});
return {
value,
initialPropsValue,
};
}
isComplete(value: unknown[]) {
return Array(this.props.length).fill(null).every((_, i) => {
const val = value[i];
return !(val === undefined || val === "");
}); });
} }
function changeValue(idx: number, newValue: string | number | undefined) { changeValue(idx: number, newValue: string | number | undefined) {
const nextValue = value.slice(0); const value = this.state.value.slice(0);
nextValue[idx] = newValue; value[idx] = newValue;
setValue(nextValue); this.setState({
value,
if (isComplete(nextValue) && props.onChange) { }, () => {
props.onChange(nextValue); if (this.isComplete(value) && this.props.onChange) {
this.props.onChange(value);
} }
else if (props.onChange) { else if (this.props.onChange){
// Unset until complete // Unset until complete
props.onChange(undefined); this.props.onChange(undefined);
} }
});
} }
render() {
const {value} = this.state;
const containsValues = ( const containsValues = (
value.length > 0 && value.length > 0 &&
!value.every(val => { !value.every(val => {
@@ -53,24 +86,24 @@ export const InputArray: React.FC<InputArrayProps> = ({
}) })
); );
const inputs = Array(props.length).fill(null).map((_, i) => { const inputs = Array(this.props.length).fill(null).map((_, i) => {
if(props.type === "number") { if(this.props.type === "number") {
return <InputNumber return <InputNumber
key={i} key={i}
default={containsValues || !props.default ? undefined : props.default[i] as number} default={containsValues || !this.props.default ? undefined : this.props.default[i] as number}
value={value[i] as number} value={value[i] as number}
required={containsValues ? true : false} required={containsValues ? true : false}
onChange={(v) => changeValue(i, v)} onChange={(v) => this.changeValue(i, v)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} else { } else {
return <InputString return <InputString
key={i} key={i}
default={containsValues || !props.default ? undefined : props.default[i] as string} default={containsValues || !this.props.default ? undefined : this.props.default[i] as string}
value={value[i] as string} value={value[i] as string}
required={containsValues ? true : false} required={containsValues ? true : false}
onChange={(v) => changeValue(i, v)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
}); });
@@ -80,4 +113,5 @@ export const InputArray: React.FC<InputArrayProps> = ({
{inputs} {inputs}
</div> </div>
); );
}; }
}
+14 -12
View File
@@ -14,18 +14,20 @@ type InputButtonProps = {
title?: string title?: string
}; };
export const InputButton: React.FC<InputButtonProps> = (props) => { export class InputButton extends React.Component<InputButtonProps> {
render() {
return <button return <button
id={props.id} id={this.props.id}
title={props.title} title={this.props.title}
type={props.type} type={this.props.type}
onClick={props.onClick} onClick={this.props.onClick}
disabled={props.disabled} disabled={this.props.disabled}
aria-label={props["aria-label"]} aria-label={this.props["aria-label"]}
className={classnames("maputnik-button", props.className)} className={classnames("maputnik-button", this.props.className)}
data-wd-key={props["data-wd-key"]} data-wd-key={this.props["data-wd-key"]}
style={props.style} style={this.props.style}
> >
{props.children} {this.props.children}
</button>; </button>;
}; }
}
+15 -9
View File
@@ -6,26 +6,32 @@ export type InputCheckboxProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
}; };
export const InputCheckbox: React.FC<InputCheckboxProps> = ({value = false, ...props}) => { export class InputCheckbox extends React.Component<InputCheckboxProps> {
const onChange = () => { static defaultProps = {
props.onChange(!value); value: false,
}; };
onChange = () => {
this.props.onChange(!this.props.value);
};
render() {
return <div className="maputnik-checkbox-wrapper"> return <div className="maputnik-checkbox-wrapper">
<input <input
className="maputnik-checkbox" className="maputnik-checkbox"
type="checkbox" type="checkbox"
style={props.style} style={this.props.style}
onChange={onChange} onChange={this.onChange}
onClick={onChange} onClick={this.onChange}
checked={value} checked={this.props.value}
/> />
<div className="maputnik-checkbox-box"> <div className="maputnik-checkbox-box">
<svg style={{ <svg style={{
display: value ? "inline" : "none" display: this.props.value ? "inline" : "none"
}} className="maputnik-checkbox-icon" viewBox='0 0 32 32'> }} className="maputnik-checkbox-icon" viewBox='0 0 32 32'>
<path d='M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z' /> <path d='M1 14 L5 10 L13 18 L27 4 L31 8 L13 26 z' />
</svg> </svg>
</div> </div>
</div>; </div>;
}; }
}
+41 -41
View File
@@ -1,7 +1,6 @@
import React, { useEffect, useMemo, useRef, useState } from "react"; import React from "react";
import Color from "color"; import Color from "color";
import ChromePicker from "react-color/lib/components/chrome/Chrome"; import {ChromePicker, type ColorResult} from "react-color";
import {type ColorResult} from "react-color";
import lodash from "lodash"; import lodash from "lodash";
function formatColor(color: ColorResult): string { function formatColor(color: ColorResult): string {
@@ -20,27 +19,26 @@ export type InputColorProps = {
}; };
/*** Number fields with support for min, max and units and documentation*/ /*** Number fields with support for min, max and units and documentation*/
export const InputColor: React.FC<InputColorProps> = (props) => { export class InputColor extends React.Component<InputColorProps> {
const [pickerOpened, setPickerOpened] = useState(false); state = {
const colorInput = useRef<HTMLInputElement | null>(null); pickerOpened: false
};
colorInput: HTMLInputElement | null = null;
// Keep the latest `onChange` available to the throttled callback, which is constructor (props: InputColorProps) {
// created only once so that throttling actually takes effect. super(props);
const onChangeProp = useRef(props.onChange); this.onChangeNoCheck = lodash.throttle(this.onChangeNoCheck, 1000/30);
useEffect(() => { }
onChangeProp.current = props.onChange;
});
const onChangeNoCheck = useMemo( onChangeNoCheck(v: string) {
() => lodash.throttle((v: string) => onChangeProp.current(v), 1000/30), this.props.onChange(v);
[] }
);
//TODO: I much rather would do this with absolute positioning //TODO: I much rather would do this with absolute positioning
//but I am too stupid to get it to work together with fixed position //but I am too stupid to get it to work together with fixed position
//and scrollbars so I have to fallback to JavaScript //and scrollbars so I have to fallback to JavaScript
const calcPickerOffset = () => { calcPickerOffset = () => {
const elem = colorInput.current; const elem = this.colorInput;
if(elem) { if(elem) {
const pos = elem.getBoundingClientRect(); const pos = elem.getBoundingClientRect();
return { return {
@@ -55,27 +53,28 @@ export const InputColor: React.FC<InputColorProps> = (props) => {
} }
}; };
const togglePicker = () => { togglePicker = () => {
setPickerOpened(opened => !opened); this.setState({ pickerOpened: !this.state.pickerOpened });
}; };
const getColor = () => { get color() {
// Catch invalid color. // Catch invalid color.
try { try {
return Color(props.value).rgb(); return Color(this.props.value).rgb();
} }
catch(err) { catch(err) {
console.warn("Error parsing color: ", err); console.warn("Error parsing color: ", err);
return Color("rgb(255,255,255)"); return Color("rgb(255,255,255)");
} }
}; }
const onChange = (v: string) => { onChange (v: string) {
props.onChange(v === "" ? undefined : v); this.props.onChange(v === "" ? undefined : v);
}; }
const offset = calcPickerOffset(); render() {
const currentColor = getColor().object(); const offset = this.calcPickerOffset();
const currentColor = this.color.object();
const currentChromeColor = { const currentChromeColor = {
r: currentColor.r, r: currentColor.r,
g: currentColor.g, g: currentColor.g,
@@ -94,11 +93,11 @@ export const InputColor: React.FC<InputColorProps> = (props) => {
}}> }}>
<ChromePicker <ChromePicker
color={currentChromeColor} color={currentChromeColor}
onChange={c => onChangeNoCheck(formatColor(c))} onChange={c => this.onChangeNoCheck(formatColor(c))}
/> />
<div <div
className="maputnik-color-picker-offset" className="maputnik-color-picker-offset"
onClick={togglePicker} onClick={this.togglePicker}
style={{ style={{
zIndex: -1, zIndex: -1,
position: "fixed", position: "fixed",
@@ -111,24 +110,25 @@ export const InputColor: React.FC<InputColorProps> = (props) => {
</div>; </div>;
const swatchStyle = { const swatchStyle = {
backgroundColor: props.value backgroundColor: this.props.value
}; };
return <div className="maputnik-color-wrapper"> return <div className="maputnik-color-wrapper">
{pickerOpened && picker} {this.state.pickerOpened && picker}
<div className="maputnik-color-swatch" style={swatchStyle}></div> <div className="maputnik-color-swatch" style={swatchStyle}></div>
<input <input
aria-label={props["aria-label"]} aria-label={this.props["aria-label"]}
spellCheck="false" spellCheck="false"
autoComplete="off" autoComplete="off"
className="maputnik-color" className="maputnik-color"
ref={colorInput} ref={(input) => {this.colorInput = input;}}
onClick={togglePicker} onClick={this.togglePicker}
style={props.style} style={this.props.style}
name={props.name} name={this.props.name}
placeholder={props.default} placeholder={this.props.default}
value={props.value ? props.value : ""} value={this.props.value ? this.props.value : ""}
onChange={(e) => onChange(e.target.value)} onChange={(e) => this.onChange(e.target.value)}
/> />
</div>; </div>;
}; }
}
+59 -53
View File
@@ -27,91 +27,94 @@ export type InputDynamicArrayProps = {
type InputDynamicArrayInternalProps = InputDynamicArrayProps & WithTranslation; type InputDynamicArrayInternalProps = InputDynamicArrayProps & WithTranslation;
const InputDynamicArrayInternal: React.FC<InputDynamicArrayInternalProps> = (props) => { class InputDynamicArrayInternal extends React.Component<InputDynamicArrayInternalProps> {
const values = props.value || props.default || []; changeValue(idx: number, newValue: string | number | undefined) {
const values = this.values.slice(0);
const changeValue = (idx: number, newValue: string | number | undefined) => { values[idx] = newValue;
const newValues = values.slice(0); if (this.props.onChange) this.props.onChange(values);
newValues[idx] = newValue;
if (props.onChange) props.onChange(newValues);
};
const addValue = () => {
const newValues = values.slice(0);
if (props.type === "number") {
newValues.push(0);
} }
else if (props.type === "url") {
newValues.push(""); get values() {
return this.props.value || this.props.default || [];
} }
else if (props.type === "enum") {
const {fieldSpec} = props; addValue = () => {
const values = this.values.slice(0);
if (this.props.type === "number") {
values.push(0);
}
else if (this.props.type === "url") {
values.push("");
}
else if (this.props.type === "enum") {
const {fieldSpec} = this.props;
const defaultValue = Object.keys(fieldSpec!.values)[0]; const defaultValue = Object.keys(fieldSpec!.values)[0];
newValues.push(defaultValue); values.push(defaultValue);
} else if (props.type === "color") { } else if (this.props.type === "color") {
newValues.push("#000000"); values.push("#000000");
} else { } else {
newValues.push(""); values.push("");
} }
if (props.onChange) props.onChange(newValues); if (this.props.onChange) this.props.onChange(values);
}; };
const deleteValue = (valueIdx: number) => { deleteValue(valueIdx: number) {
const newValues = values.slice(0); const values = this.values.slice(0);
newValues.splice(valueIdx, 1); values.splice(valueIdx, 1);
if (props.onChange) props.onChange(newValues.length > 0 ? newValues : undefined); if (this.props.onChange) this.props.onChange(values.length > 0 ? values : undefined);
}; }
const t = props.t; render() {
const i18nProps = { t, i18n: props.i18n, tReady: props.tReady }; const t = this.props.t;
const inputs = values.map((v, i) => { const i18nProps = { t, i18n: this.props.i18n, tReady: this.props.tReady };
const inputs = this.values.map((v, i) => {
const deleteValueBtn= <DeleteValueInputButton const deleteValueBtn= <DeleteValueInputButton
onClick={deleteValue.bind(null, i)} onClick={this.deleteValue.bind(this, i)}
{...i18nProps} {...i18nProps}
/>; />;
let input; let input;
if(props.type === "url") { if(this.props.type === "url") {
input = <InputUrl input = <InputUrl
value={v as string} value={v as string}
onChange={changeValue.bind(null, i)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
else if (props.type === "number") { else if (this.props.type === "number") {
input = <InputNumber input = <InputNumber
value={v as number} value={v as number}
onChange={changeValue.bind(null, i)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
else if (props.type === "enum") { else if (this.props.type === "enum") {
const options = Object.keys(props.fieldSpec?.values).map(v => [v, capitalize(v)]); const options = Object.keys(this.props.fieldSpec?.values).map(v => [v, capitalize(v)]);
input = <InputEnum input = <InputEnum
options={options} options={options}
value={v as string} value={v as string}
onChange={changeValue.bind(null, i)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
else if (props.type === "color") { else if (this.props.type === "color") {
input = <InputColor input = <InputColor
value={v as string} value={v as string}
onChange={changeValue.bind(null, i)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
else { else {
input = <InputString input = <InputString
value={v as string} value={v as string}
onChange={changeValue.bind(null, i)} onChange={this.changeValue.bind(this, i)}
aria-label={props["aria-label"] || props.label} aria-label={this.props["aria-label"] || this.props.label}
/>; />;
} }
return <div return <div
style={props.style} style={this.props.style}
key={i} key={i}
className="maputnik-array-block" className="maputnik-array-block"
> >
@@ -129,28 +132,31 @@ const InputDynamicArrayInternal: React.FC<InputDynamicArrayInternalProps> = (pro
{inputs} {inputs}
<InputButton <InputButton
className="maputnik-array-add-value" className="maputnik-array-add-value"
onClick={addValue} onClick={this.addValue}
> >
{t("Add value")} {t("Add value")}
</InputButton> </InputButton>
</div> </div>
); );
}; }
}
export const InputDynamicArray = withTranslation()(InputDynamicArrayInternal); export const InputDynamicArray = withTranslation()(InputDynamicArrayInternal);
type DeleteValueInputButtonProps = { type DeleteValueInputButtonProps = {
onClick?(...args: unknown[]): unknown onClick?(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const DeleteValueInputButton: React.FC<DeleteValueInputButtonProps> = (props) => { class DeleteValueInputButton extends React.Component<DeleteValueInputButtonProps> {
const t = props.t; render() {
const t = this.props.t;
return <InputButton return <InputButton
className="maputnik-delete-stop" className="maputnik-delete-stop"
onClick={props.onClick} onClick={this.props.onClick}
title={t("Remove array item")} title={t("Remove array item")}
> >
<FieldDocLabel <FieldDocLabel
label={<MdDelete />} label={<MdDelete />}
/> />
</InputButton>; </InputButton>;
}; }
}
+9 -7
View File
@@ -25,23 +25,25 @@ export type InputEnumProps = {
}; };
export const InputEnum: React.FC<InputEnumProps> = (props) => { export class InputEnum extends React.Component<InputEnumProps> {
const {options, value, onChange, name, label} = props; render() {
const {options, value, onChange, name, label} = this.props;
if(options.length <= 3 && optionsLabelLength(options) <= 20) { if(options.length <= 3 && optionsLabelLength(options) <= 20) {
return <InputMultiInput return <InputMultiInput
name={name} name={name}
options={options} options={options}
value={(value || props.default)!} value={(value || this.props.default)!}
onChange={onChange} onChange={onChange}
aria-label={props["aria-label"] || label} aria-label={this.props["aria-label"] || label}
/>; />;
} else { } else {
return <InputSelect return <InputSelect
options={options} options={options}
value={(value || props.default)!} value={(value || this.props.default)!}
onChange={onChange} onChange={onChange}
aria-label={props["aria-label"] || label} aria-label={this.props["aria-label"] || label}
/>; />;
} }
}; }
}
+19 -15
View File
@@ -11,9 +11,13 @@ export type InputFontProps = {
"aria-label"?: string "aria-label"?: string
}; };
export const InputFont: React.FC<InputFontProps> = ({fonts = [], ...props}) => { export class InputFont extends React.Component<InputFontProps> {
const getValues = () => { static defaultProps = {
const out = props.value || props.default || []; fonts: []
};
get values() {
const out = this.props.value || this.props.default || [];
// Always put a "" in the last field to you can keep adding entries // Always put a "" in the last field to you can keep adding entries
if (out[out.length-1] !== ""){ if (out[out.length-1] !== ""){
@@ -22,29 +26,28 @@ export const InputFont: React.FC<InputFontProps> = ({fonts = [], ...props}) => {
else { else {
return out; return out;
} }
}; }
const values = getValues(); changeFont(idx: number, newValue: string) {
const changedValues = this.values.slice(0);
const changeFont = (idx: number, newValue: string) => {
const changedValues = values.slice(0);
changedValues[idx] = newValue; changedValues[idx] = newValue;
const filteredValues = changedValues const filteredValues = changedValues
.filter(v => v !== undefined) .filter(v => v !== undefined)
.filter(v => v !== ""); .filter(v => v !== "");
props.onChange(filteredValues); this.props.onChange(filteredValues);
}; }
const inputs = values.map((value, i) => { render() {
const inputs = this.values.map((value, i) => {
return <li return <li
key={i} key={i}
> >
<InputAutocomplete <InputAutocomplete
aria-label={props["aria-label"] || props.name} aria-label={this.props["aria-label"] || this.props.name}
value={value} value={value}
options={fonts.map(f => [f, f])} options={this.props.fonts?.map(f => [f, f])}
onChange={changeFont.bind(null, i)} onChange={this.changeFont.bind(this, i)}
/> />
</li>; </li>;
}); });
@@ -54,4 +57,5 @@ export const InputFont: React.FC<InputFontProps> = ({fonts = [], ...props}) => {
{inputs} {inputs}
</ul> </ul>
); );
}; }
}
+82 -83
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useRef } from "react"; import React from "react";
import classnames from "classnames"; import classnames from "classnames";
import { type WithTranslation, withTranslation } from "react-i18next"; import { type WithTranslation, withTranslation } from "react-i18next";
@@ -25,49 +25,88 @@ export type InputJsonProps = {
}; };
type InputJsonInternalProps = InputJsonProps & WithTranslation; type InputJsonInternalProps = InputJsonProps & WithTranslation;
function getPrettyJson(data: any) { type InputJsonState = {
isEditing: boolean
prevValue: string
};
class InputJsonInternal extends React.Component<InputJsonInternalProps, InputJsonState> {
static defaultProps = {
onFocus: () => {},
onBlur: () => {},
withScroll: false
};
_view: EditorView | undefined;
_el: HTMLDivElement | null = null;
_cancelNextChange: boolean = false;
constructor(props: InputJsonInternalProps) {
super(props);
this.state = {
isEditing: false,
prevValue: this.getPrettyJson(this.props.value),
};
}
getPrettyJson(data: any) {
return stringifyPretty(data, {indent: 2, maxLength: 40}); return stringifyPretty(data, {indent: 2, maxLength: 40});
} }
const InputJsonInternal: React.FC<InputJsonInternalProps> = ({ componentDidMount () {
value, this._view = createEditor({
className, parent: this._el!,
onChange, value: this.getPrettyJson(this.props.value),
onFocus = () => {}, lintType: this.props.lintType || "layer",
onBlur = () => {}, onChange: (value:string) => this.onChange(value),
lintType, onFocus: () => this.onFocus(),
spec, onBlur: () => this.onBlur(),
withScroll = false, spec: this.props.spec
}) => { });
const el = useRef<HTMLDivElement | null>(null); }
const view = useRef<EditorView | undefined>(undefined);
const cancelNextChange = useRef<boolean>(false);
// `isEditing` and `prevValue` are never rendered, they are only read from the
// CodeMirror callbacks, so refs keep them up to date without re-rendering.
const isEditing = useRef<boolean>(false);
const prevValue = useRef<string>(getPrettyJson(value));
// Mirrors `prevProps.value` from the previous `componentDidUpdate`.
const prevValueProp = useRef<object>(value);
const handleFocus = () => { onFocus = () => {
if (onFocus) onFocus(); if (this.props.onFocus) this.props.onFocus();
isEditing.current = true; this.setState({
isEditing: true,
});
}; };
const handleBlur = () => { onBlur = () => {
if (onBlur) onBlur(); if (this.props.onBlur) this.props.onBlur();
isEditing.current = false; this.setState({
isEditing: false,
});
}; };
const handleChange = () => { componentDidUpdate(prevProps: InputJsonProps) {
if (cancelNextChange.current) { if (!this.state.isEditing && prevProps.value !== this.props.value) {
cancelNextChange.current = false; this._cancelNextChange = true;
prevValue.current = view.current!.state.doc.toString(); const transactionSpec: TransactionSpec = {
changes: {
from: 0,
to: this._view!.state.doc.length,
insert: this.getPrettyJson(this.props.value)
}
};
if (this.props.withScroll) {
transactionSpec.selection = this._view!.state.selection;
transactionSpec.scrollIntoView = true;
}
this._view!.dispatch(transactionSpec);
}
}
onChange = (_e: unknown) => {
if (this._cancelNextChange) {
this._cancelNextChange = false;
this.setState({
prevValue: this._view!.state.doc.toString(),
});
return; return;
} }
const newCode = view.current!.state.doc.toString(); const newCode = this._view!.state.doc.toString();
if (prevValue.current !== newCode) { if (this.state.prevValue !== newCode) {
let parsedLayer, err; let parsedLayer, err;
try { try {
parsedLayer = JSON.parse(newCode); parsedLayer = JSON.parse(newCode);
@@ -77,63 +116,23 @@ const InputJsonInternal: React.FC<InputJsonInternalProps> = ({
} }
if (!err) { if (!err) {
if (onChange) onChange(parsedLayer); if (this.props.onChange) this.props.onChange(parsedLayer);
} }
} }
prevValue.current = newCode; this.setState({
prevValue: newCode,
});
}; };
// The editor is created once on mount, so its callbacks have to go through a render() {
// ref to always see the latest props.
const handlers = useRef({handleChange, handleFocus, handleBlur});
useEffect(() => {
handlers.current = {handleChange, handleFocus, handleBlur};
});
useEffect(() => {
view.current = createEditor({
parent: el.current!,
value: getPrettyJson(value),
lintType: lintType || "layer",
onChange: () => handlers.current.handleChange(),
onFocus: () => handlers.current.handleFocus(),
onBlur: () => handlers.current.handleBlur(),
spec: spec
});
// Runs once on mount, mirroring the previous componentDidMount.
// eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only: adding deps would rebuild the editor on every change
}, []);
useEffect(() => {
// Only react to an actual change of the `value` prop, which also skips the
// initial mount (the editor is created with the value already).
if (prevValueProp.current === value) return;
prevValueProp.current = value;
if (isEditing.current) return;
cancelNextChange.current = true;
const transactionSpec: TransactionSpec = {
changes: {
from: 0,
to: view.current!.state.doc.length,
insert: getPrettyJson(value)
}
};
if (withScroll) {
transactionSpec.selection = view.current!.state.selection;
transactionSpec.scrollIntoView = true;
}
view.current!.dispatch(transactionSpec);
}, [value, withScroll]);
return <div className="json-editor" data-wd-key="json-editor" aria-hidden="true" style={{cursor: "text"}}> return <div className="json-editor" data-wd-key="json-editor" aria-hidden="true" style={{cursor: "text"}}>
<div <div
className={classnames("codemirror-container", className)} className={classnames("codemirror-container", this.props.className)}
ref={el} ref={(el) => {this._el = el;}}
/> />
</div>; </div>;
}; }
}
export const InputJson = withTranslation()(InputJsonInternal); export const InputJson = withTranslation()(InputJsonInternal);
+9 -7
View File
@@ -9,21 +9,22 @@ export type InputMultiInputProps = {
"aria-label"?: string "aria-label"?: string
}; };
export const InputMultiInput: React.FC<InputMultiInputProps> = (props) => { export class InputMultiInput extends React.Component<InputMultiInputProps> {
let options = props.options; render() {
let options = this.props.options;
if(options.length > 0 && !Array.isArray(options[0])) { if(options.length > 0 && !Array.isArray(options[0])) {
options = options.map(v => [v, v]); options = options.map(v => [v, v]);
} }
const selectedValue = props.value || options[0][0]; const selectedValue = this.props.value || options[0][0];
const radios = options.map(([val, label])=> { const radios = options.map(([val, label])=> {
return <label return <label
key={val} key={val}
className={classnames("maputnik-button", "maputnik-radio-as-button", {"maputnik-button-selected": val === selectedValue})} className={classnames("maputnik-button", "maputnik-radio-as-button", {"maputnik-button-selected": val === selectedValue})}
> >
<input type="radio" <input type="radio"
name={props.name} name={this.props.name}
onChange={_e => props.onChange(val)} onChange={_e => this.props.onChange(val)}
value={val} value={val}
checked={val === selectedValue} checked={val === selectedValue}
/> />
@@ -31,7 +32,8 @@ export const InputMultiInput: React.FC<InputMultiInputProps> = (props) => {
</label>; </label>;
}); });
return <fieldset className="maputnik-multibutton" aria-label={props["aria-label"]}> return <fieldset className="maputnik-multibutton" aria-label={this.props["aria-label"]}>
{radios} {radios}
</fieldset>; </fieldset>;
}; }
}
+127 -99
View File
@@ -1,4 +1,5 @@
import React, { type BaseSyntheticEvent, useRef, useState } from "react"; import React, { type BaseSyntheticEvent } from "react";
import { generateUniqueId } from "../libs/document-uid";
export type InputNumberProps = { export type InputNumberProps = {
value?: number value?: number
@@ -13,136 +14,162 @@ export type InputNumberProps = {
"aria-label"?: string "aria-label"?: string
}; };
export const InputNumber: React.FC<InputNumberProps> = (props) => { type InputNumberState = {
const { rangeStep = 1 } = props; uuid: number
editing: boolean
editingRange?: boolean
value?: number
/**
* This is the value that is currently being edited. It can be an invalid value.
*/
dirtyValue?: number | string | undefined
};
const [editing, setEditing] = useState(false); export class InputNumber extends React.Component<InputNumberProps, InputNumberState> {
const [editingRange, setEditingRange] = useState(false); static defaultProps = {
const [value, setValue] = useState<number | undefined>(props.value); rangeStep: 1
/** The value currently being edited. It can be an invalid value. */ };
const [dirtyValue, setDirtyValue] = useState<number | string | undefined>(props.value); _keyboardEvent: boolean = false;
const keyboardEvent = useRef(false); constructor(props: InputNumberProps) {
super(props);
// Replaces getDerivedStateFromProps: while not editing, track the prop. this.state = {
if (!editing && props.value !== value) { uuid: +generateUniqueId(),
setValue(props.value); editing: false,
setDirtyValue(props.value); value: props.value,
dirtyValue: props.value,
};
} }
function isValid(v: number | string | undefined) { static getDerivedStateFromProps(props: Readonly<InputNumberProps>, state: InputNumberState) {
if (!state.editing && props.value !== state.value) {
return {
value: props.value,
dirtyValue: props.value,
};
}
return null;
}
changeValue(newValue: number | string | undefined) {
const value = (newValue === "" || newValue === undefined) ?
undefined : +newValue;
const hasChanged = this.props.value !== value;
if(this.isValid(value) && hasChanged) {
if (this.props.onChange) this.props.onChange(value);
this.setState({
value: value,
});
}
else if (!this.isValid(value) && hasChanged) {
this.setState({
value: undefined,
});
}
this.setState({
dirtyValue: newValue === "" ? undefined : newValue,
});
}
isValid(v: number | string | undefined) {
if (v === undefined) { if (v === undefined) {
return true; return true;
} }
const val = +v; const value = +v;
if(isNaN(val)) { if(isNaN(value)) {
return false; return false;
} }
if(!isNaN(props.min!) && val < props.min!) { if(!isNaN(this.props.min!) && value < this.props.min!) {
return false; return false;
} }
if(!isNaN(props.max!) && val > props.max!) { if(!isNaN(this.props.max!) && value > this.props.max!) {
return false; return false;
} }
return true; return true;
} }
function changeValue(newValue: number | string | undefined) { resetValue = () => {
const val = (newValue === "" || newValue === undefined) ? this.setState({editing: false});
undefined : +newValue;
const hasChanged = props.value !== val;
if(isValid(val) && hasChanged) {
if (props.onChange) props.onChange(val);
setValue(val);
}
else if (!isValid(val) && hasChanged) {
setValue(undefined);
}
setDirtyValue(newValue === "" ? undefined : newValue);
}
const resetValue = () => {
setEditing(false);
// Reset explicitly to default value if value has been cleared // Reset explicitly to default value if value has been cleared
if(!value) { if(!this.state.value) {
return; return;
} }
// If set value is invalid fall back to the last valid value from props or at last resort the default value // If set value is invalid fall back to the last valid value from props or at last resort the default value
if (!isValid(value)) { if (!this.isValid(this.state.value)) {
if(isValid(props.value)) { if(this.isValid(this.props.value)) {
changeValue(props.value); this.changeValue(this.props.value);
setDirtyValue(props.value); this.setState({dirtyValue: this.props.value});
} else { } else {
changeValue(undefined); this.changeValue(undefined);
setDirtyValue(undefined); this.setState({dirtyValue: undefined});
} }
} }
}; };
const onChangeRange = (e: BaseSyntheticEvent<Event, HTMLInputElement, HTMLInputElement>) => { onChangeRange = (e: BaseSyntheticEvent<Event, HTMLInputElement, HTMLInputElement>) => {
let newValue = parseFloat(e.target.value); let value = parseFloat(e.target.value);
const step = rangeStep; const step = this.props.rangeStep;
let newDirtyValue = newValue; let dirtyValue = value;
if(step) { if(step) {
// Can't do this with the <input/> range step attribute else we won't be able to set a high precision value via the text input. // Can't do this with the <input/> range step attribute else we won't be able to set a high precision value via the text input.
const snap = newValue % step; const snap = value % step;
// Round up/down to step // Round up/down to step
if (keyboardEvent.current) { if (this._keyboardEvent) {
// If it's keyboard event we might get a low positive/negative value, // If it's keyboard event we might get a low positive/negative value,
// for example we might go from 13 to 13.23, however because we know // for example we might go from 13 to 13.23, however because we know
// that came from a keyboard event we always want to increase by a // that came from a keyboard event we always want to increase by a
// single step value. // single step value.
if (newValue < +dirtyValue!) { if (value < +this.state.dirtyValue!) {
newValue = value! - step; value = this.state.value! - step;
} }
else { else {
newValue = value! + step; value = this.state.value! + step;
} }
newDirtyValue = newValue; dirtyValue = value;
} }
else { else {
if (snap < step/2) { if (snap < step/2) {
newValue = newValue - snap; value = value - snap;
} }
else { else {
newValue = newValue + (step - snap); value = value + (step - snap);
} }
} }
} }
keyboardEvent.current = false; this._keyboardEvent = false;
// Clamp between min/max // Clamp between min/max
newValue = Math.max(props.min!, Math.min(props.max!, newValue)); value = Math.max(this.props.min!, Math.min(this.props.max!, value));
setValue(newValue); this.setState({value, dirtyValue});
setDirtyValue(newDirtyValue); if (this.props.onChange) this.props.onChange(value);
if (props.onChange) props.onChange(newValue);
}; };
render() {
if( if(
Object.prototype.hasOwnProperty.call(props, "min") && Object.prototype.hasOwnProperty.call(this.props, "min") &&
Object.prototype.hasOwnProperty.call(props, "max") && Object.prototype.hasOwnProperty.call(this.props, "max") &&
props.min !== undefined && props.max !== undefined && this.props.min !== undefined && this.props.max !== undefined &&
props.allowRange this.props.allowRange
) { ) {
const currentValue = editing ? dirtyValue : value; const value = this.state.editing ? this.state.dirtyValue : this.state.value;
const defaultValue = props.default === undefined ? "" : props.default; const defaultValue = this.props.default === undefined ? "" : this.props.default;
let inputValue; let inputValue;
if (editingRange) { if (this.state.editingRange) {
inputValue = value; inputValue = this.state.value;
} }
else { else {
inputValue = currentValue; inputValue = value;
} }
return <div className="maputnik-number-container"> return <div className="maputnik-number-container">
@@ -150,69 +177,70 @@ export const InputNumber: React.FC<InputNumberProps> = (props) => {
className="maputnik-number-range" className="maputnik-number-range"
key="range" key="range"
type="range" type="range"
max={props.max} max={this.props.max}
min={props.min} min={this.props.min}
step="any" step="any"
spellCheck="false" spellCheck="false"
value={currentValue === undefined ? defaultValue : currentValue} value={value === undefined ? defaultValue : value}
onChange={onChangeRange} onChange={this.onChangeRange}
onKeyDown={() => { onKeyDown={() => {
keyboardEvent.current = true; this._keyboardEvent = true;
}} }}
onPointerDown={() => { onPointerDown={() => {
setEditing(true); this.setState({editing: true, editingRange: true});
setEditingRange(true);
}} }}
onPointerUp={() => { onPointerUp={() => {
// Safari doesn't get onBlur event // Safari doesn't get onBlur event
setEditing(false); this.setState({editing: false, editingRange: false});
setEditingRange(false);
}} }}
onBlur={() => { onBlur={() => {
setEditing(false); this.setState({
setEditingRange(false); editing: false,
setDirtyValue(value); editingRange: false,
dirtyValue: this.state.value,
});
}} }}
data-wd-key={props["data-wd-key"] + "-range"} data-wd-key={this.props["data-wd-key"] + "-range"}
/> />
<input <input
key="text" key="text"
type="text" type="text"
spellCheck="false" spellCheck="false"
className="maputnik-number" className="maputnik-number"
placeholder={props.default?.toString()} placeholder={this.props.default?.toString()}
value={inputValue === undefined ? "" : inputValue} value={inputValue === undefined ? "" : inputValue}
onFocus={_e => { onFocus={_e => {
setEditing(true); this.setState({editing: true});
}} }}
onChange={e => { onChange={e => {
changeValue(e.target.value); this.changeValue(e.target.value);
}} }}
onBlur={_e => { onBlur={_e => {
setEditing(false); this.setState({editing: false});
resetValue(); this.resetValue();
}} }}
data-wd-key={props["data-wd-key"] + "-text"} data-wd-key={this.props["data-wd-key"] + "-text"}
/> />
</div>; </div>;
} }
else { else {
const currentValue = editing ? dirtyValue : value; const value = this.state.editing ? this.state.dirtyValue : this.state.value;
return <input return <input
aria-label={props["aria-label"]} aria-label={this.props["aria-label"]}
spellCheck="false" spellCheck="false"
className="maputnik-number" className="maputnik-number"
placeholder={props.default?.toString()} placeholder={this.props.default?.toString()}
value={currentValue === undefined ? "" : currentValue} value={value === undefined ? "" : value}
onChange={e => changeValue(e.target.value)} onChange={e => this.changeValue(e.target.value)}
onFocus={() => { onFocus={() => {
setEditing(true); this.setState({editing: true});
}} }}
onBlur={resetValue} onBlur={this.resetValue}
required={props.required} required={this.props.required}
data-wd-key={props["data-wd-key"]} data-wd-key={this.props["data-wd-key"]}
/>; />;
} }
}; }
}
+11 -9
View File
@@ -10,21 +10,23 @@ export type InputSelectProps = {
"aria-label"?: string "aria-label"?: string
}; };
export const InputSelect: React.FC<InputSelectProps> = (props) => { export class InputSelect extends React.Component<InputSelectProps> {
let options = props.options; render() {
let options = this.props.options;
if(options.length > 0 && !Array.isArray(options[0])) { if(options.length > 0 && !Array.isArray(options[0])) {
options = options.map((v) => [v, v]) as [string, any][]; options = options.map((v) => [v, v]) as [string, any][];
} }
return <select return <select
className="maputnik-select" className="maputnik-select"
data-wd-key={props["data-wd-key"]} data-wd-key={this.props["data-wd-key"]}
style={props.style} style={this.props.style}
title={props.title} title={this.props.title}
value={props.value} value={this.props.value}
onChange={e => props.onChange(e.target.value)} onChange={e => this.props.onChange(e.target.value)}
aria-label={props["aria-label"]} aria-label={this.props["aria-label"]}
> >
{ options.map(([val, label]) => <option key={val} value={val}>{label}</option>) } { options.map(([val, label]) => <option key={val} value={val}>{label}</option>) }
</select>; </select>;
}; }
}
+37 -35
View File
@@ -38,31 +38,31 @@ export type InputSpecProps = {
/** Display any field from the Maplibre GL style spec and /** Display any field from the Maplibre GL style spec and
* choose the correct field component based on the @{fieldSpec} * choose the correct field component based on the @{fieldSpec}
* to display @{value}. */ * to display @{value}. */
export const InputSpec: React.FC<InputSpecProps> = (props) => { export class InputSpec extends React.Component<InputSpecProps> {
const childNodes = () => { childNodes() {
const commonProps = { const commonProps = {
fieldSpec: props.fieldSpec, fieldSpec: this.props.fieldSpec,
label: props.label, label: this.props.label,
action: props.action, action: this.props.action,
style: props.style, style: this.props.style,
value: props.value, value: this.props.value,
default: props.fieldSpec?.default, default: this.props.fieldSpec?.default,
name: props.fieldName, name: this.props.fieldName,
"data-wd-key": "spec-field-input:" + props.fieldName, "data-wd-key": "spec-field-input:" + this.props.fieldName,
onChange: (newValue: number | undefined | (string | number | undefined)[]) => props.onChange!(props.fieldName, newValue), onChange: (newValue: number | undefined | (string | number | undefined)[]) => this.props.onChange!(this.props.fieldName, newValue),
"aria-label": props["aria-label"], "aria-label": this.props["aria-label"],
}; };
switch(props.fieldSpec?.type) { switch(this.props.fieldSpec?.type) {
case "number": return ( case "number": return (
<InputNumber <InputNumber
{...commonProps as InputNumberProps} {...commonProps as InputNumberProps}
min={props.fieldSpec.minimum} min={this.props.fieldSpec.minimum}
max={props.fieldSpec.maximum} max={this.props.fieldSpec.maximum}
/> />
); );
case "enum": { case "enum": {
const options = Object.keys(props.fieldSpec.values || []).map(v => [v, capitalize(v)]); const options = Object.keys(this.props.fieldSpec.values || []).map(v => [v, capitalize(v)]);
return <InputEnum return <InputEnum
{...commonProps as Omit<InputEnumProps, "options">} {...commonProps as Omit<InputEnumProps, "options">}
@@ -72,8 +72,8 @@ export const InputSpec: React.FC<InputSpecProps> = (props) => {
case "resolvedImage": case "resolvedImage":
case "formatted": case "formatted":
case "string": case "string":
if (iconProperties.indexOf(props.fieldName!) >= 0) { if (iconProperties.indexOf(this.props.fieldName!) >= 0) {
const options = props.fieldSpec.values || []; const options = this.props.fieldSpec.values || [];
return <InputAutocomplete return <InputAutocomplete
{...commonProps as Omit<InputAutocompleteProps, "options">} {...commonProps as Omit<InputAutocompleteProps, "options">}
options={options.map(f => [f, f])} options={options.map(f => [f, f])}
@@ -94,59 +94,61 @@ export const InputSpec: React.FC<InputSpecProps> = (props) => {
/> />
); );
case "array": case "array":
if(props.fieldName === "text-font") { if(this.props.fieldName === "text-font") {
return <InputFont return <InputFont
{...commonProps as InputFontProps} {...commonProps as InputFontProps}
fonts={props.fieldSpec.values} fonts={this.props.fieldSpec.values}
/>; />;
} else { } else {
if (props.fieldSpec.length) { if (this.props.fieldSpec.length) {
return <InputArray return <InputArray
{...commonProps as InputArrayProps} {...commonProps as InputArrayProps}
type={props.fieldSpec.value} type={this.props.fieldSpec.value}
length={props.fieldSpec.length} length={this.props.fieldSpec.length}
/>; />;
} else { } else {
return <InputDynamicArray return <InputDynamicArray
{...commonProps as InputDynamicArrayProps} {...commonProps as InputDynamicArrayProps}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
type={props.fieldSpec.value as InputDynamicArrayProps["type"]} type={this.props.fieldSpec.value as InputDynamicArrayProps["type"]}
/>; />;
} }
} }
case "numberArray": return ( case "numberArray": return (
<InputDynamicArray <InputDynamicArray
{...commonProps as InputDynamicArrayProps} {...commonProps as InputDynamicArrayProps}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
type="number" type="number"
value={(Array.isArray(props.value) ? props.value : [props.value]) as (string | number | undefined)[]} value={(Array.isArray(this.props.value) ? this.props.value : [this.props.value]) as (string | number | undefined)[]}
/> />
); );
case "colorArray": return ( case "colorArray": return (
<InputDynamicArray <InputDynamicArray
{...commonProps as InputDynamicArrayProps} {...commonProps as InputDynamicArrayProps}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
type="color" type="color"
value={(Array.isArray(props.value) ? props.value : [props.value]) as (string | number | undefined)[]} value={(Array.isArray(this.props.value) ? this.props.value : [this.props.value]) as (string | number | undefined)[]}
/> />
); );
case "padding": return ( case "padding": return (
<InputArray <InputArray
{...commonProps as InputArrayProps} {...commonProps as InputArrayProps}
type="number" type="number"
value={(Array.isArray(props.value) ? props.value : [props.value]) as (string | number | undefined)[]} value={(Array.isArray(this.props.value) ? this.props.value : [this.props.value]) as (string | number | undefined)[]}
length={4} length={4}
/> />
); );
default: default:
console.warn(`No proper field input for ${props.fieldName} type: ${props.fieldSpec?.type}`); console.warn(`No proper field input for ${this.props.fieldName} type: ${this.props.fieldSpec?.type}`);
return null; return null;
} }
}; }
render() {
return ( return (
<div data-wd-key={"spec-field:"+props.fieldName}> <div data-wd-key={"spec-field:"+this.props.fieldName}>
{childNodes()} {this.childNodes()}
</div> </div>
); );
}; }
}
+51 -32
View File
@@ -1,4 +1,4 @@
import React, { useState } from "react"; import React from "react";
export type InputStringProps = { export type InputStringProps = {
"data-wd-key"?: string "data-wd-key"?: string
@@ -15,21 +15,38 @@ export type InputStringProps = {
title?: string title?: string
}; };
export const InputString: React.FC<InputStringProps> = (props) => { type InputStringState = {
const { onInput = () => {} } = props; editing: boolean
const [editing, setEditing] = useState(false); value?: string
const [value, setValue] = useState<string | undefined>(props.value); };
// Replaces getDerivedStateFromProps: while the field is not being edited its export class InputString extends React.Component<InputStringProps, InputStringState> {
// value tracks the prop, so an external change to the style is picked up. static defaultProps = {
if (!editing && value !== props.value) { onInput: () => {},
setValue(props.value); };
constructor(props: InputStringProps) {
super(props);
this.state = {
editing: false,
value: props.value || ""
};
} }
static getDerivedStateFromProps(props: Readonly<InputStringProps>, state: InputStringState) {
if (!state.editing) {
return {
value: props.value
};
}
return {};
}
render() {
let tag; let tag;
let classes; let classes;
if(props.multi) { if(this.props.multi) {
tag = "textarea"; tag = "textarea";
classes = [ classes = [
"maputnik-string", "maputnik-string",
@@ -43,38 +60,40 @@ export const InputString: React.FC<InputStringProps> = (props) => {
]; ];
} }
if(props.disabled) { if(this.props.disabled) {
classes.push("maputnik-string--disabled"); classes.push("maputnik-string--disabled");
} }
return React.createElement(tag, { return React.createElement(tag, {
"aria-label": props["aria-label"], "aria-label": this.props["aria-label"],
"data-wd-key": props["data-wd-key"], "data-wd-key": this.props["data-wd-key"],
spellCheck: Object.prototype.hasOwnProperty.call(props, "spellCheck") ? props.spellCheck : !(tag === "input"), spellCheck: Object.prototype.hasOwnProperty.call(this.props, "spellCheck") ? this.props.spellCheck : !(tag === "input"),
disabled: props.disabled, disabled: this.props.disabled,
className: classes.join(" "), className: classes.join(" "),
style: props.style, style: this.props.style,
value: value === undefined ? "" : value, value: this.state.value === undefined ? "" : this.state.value,
placeholder: props.default, placeholder: this.props.default,
title: props.title, title: this.props.title,
onChange: (e: React.BaseSyntheticEvent<Event, HTMLInputElement, HTMLInputElement>) => { onChange: (e: React.BaseSyntheticEvent<Event, HTMLInputElement, HTMLInputElement>) => {
setEditing(true); this.setState({
setValue(e.target.value); editing: true,
onInput(e.target.value); value: e.target.value
}, () => {
if (this.props.onInput) this.props.onInput(this.state.value);
});
}, },
onBlur: () => { onBlur: () => {
// Note: editing is only cleared when the value actually changed; this if(this.state.value!==this.props.value) {
// mirrors the original and keeps a no-op blur from resyncing the value. this.setState({editing: false});
if(value !== props.value) { if (this.props.onChange) this.props.onChange(this.state.value);
setEditing(false);
if (props.onChange) props.onChange(value);
} }
}, },
onKeyDown: (e: React.KeyboardEvent) => { onKeyDown: (e) => {
if (e.keyCode === 13 && props.onChange) { if (e.keyCode === 13 && this.props.onChange) {
props.onChange(value); this.props.onChange(this.state.value);
} }
}, },
required: props.required, required: this.props.required,
}); });
}; }
}
+34 -15
View File
@@ -1,4 +1,4 @@
import React, { type JSX, useState } from "react"; import React, { type JSX } from "react";
import { InputString } from "./InputString"; import { InputString } from "./InputString";
import { SmallError } from "./SmallError"; import { SmallError } from "./SmallError";
import { Trans, type WithTranslation, withTranslation } from "react-i18next"; import { Trans, type WithTranslation, withTranslation } from "react-i18next";
@@ -46,30 +46,49 @@ export type FieldUrlProps = {
type InputUrlInternalProps = FieldUrlProps & WithTranslation; type InputUrlInternalProps = FieldUrlProps & WithTranslation;
const InputUrlInternal: React.FC<InputUrlInternalProps> = ({onInput = () => {}, ...props}) => { type InputUrlState = {
const [error, setError] = useState<ErrorType | undefined>(() => validate(props.value)); error?: ErrorType
};
const handleInput = (url: string) => { class InputUrlInternal extends React.Component<InputUrlInternalProps, InputUrlState> {
setError(validate(url)); static defaultProps = {
onInput(url); onInput: () => {},
}; };
const handleChange = (url: string) => { constructor (props: InputUrlInternalProps) {
setError(validate(url)); super(props);
props.onChange(url); this.state = {
error: validate(props.value),
};
}
onInput = (url: string) => {
this.setState({
error: validate(url),
});
if (this.props.onInput) this.props.onInput(url);
}; };
onChange = (url: string) => {
this.setState({
error: validate(url),
});
this.props.onChange(url);
};
render () {
return ( return (
<div> <div>
<InputString <InputString
{...props} {...this.props}
onInput={handleInput} onInput={this.onInput}
onChange={handleChange} onChange={this.onChange}
aria-label={props["aria-label"]} aria-label={this.props["aria-label"]}
/> />
{errorTypeToJsx(error, props.t)} {errorTypeToJsx(this.state.error, this.props.t)}
</div> </div>
); );
}; }
}
export const InputUrl = withTranslation()(InputUrlInternal); export const InputUrl = withTranslation()(InputUrlInternal);
+100 -89
View File
@@ -1,4 +1,4 @@
import React, { type JSX, useState } from "react"; import React, { type JSX } from "react";
import { Wrapper, Button, Menu, MenuItem } from "react-aria-menubutton"; import { Wrapper, Button, Menu, MenuItem } from "react-aria-menubutton";
import { Accordion } from "react-accessible-accordion"; import { Accordion } from "react-accessible-accordion";
import { MdMoreVert } from "react-icons/md"; import { MdMoreVert } from "react-icons/md";
@@ -17,9 +17,7 @@ import { FieldMaxZoom } from "./FieldMaxZoom";
import { FieldComment } from "./FieldComment"; import { FieldComment } from "./FieldComment";
import { FieldSource } from "./FieldSource"; import { FieldSource } from "./FieldSource";
import { FieldSourceLayer } from "./FieldSourceLayer"; import { FieldSourceLayer } from "./FieldSourceLayer";
// Aliased: the component defines its own changeProperty, which would otherwise import { changeType, changeProperty } from "../libs/layer";
// shadow this import (as a class method there was no collision).
import { changeType, changeProperty as changeLayerProperty } from "../libs/layer";
import { formatLayerId } from "../libs/format"; import { formatLayerId } from "../libs/format";
import { type WithTranslation, withTranslation } from "react-i18next"; import { type WithTranslation, withTranslation } from "react-i18next";
import { type TFunction } from "i18next"; import { type TFunction } from "i18next";
@@ -76,20 +74,20 @@ function getLayoutForType(type: LayerSpecification["type"], t: TFunction): Maput
return getLayoutForSymbolType(t); return getLayoutForSymbolType(t);
} }
const groups: MaputnikLayoutGroup[] = []; const groups: MaputnikLayoutGroup[] = [];
if (Object.keys(v8["paint_" + type]).length > 0) { if (Object.keys(v8["paint_" + type as keyof typeof v8]).length > 0) {
groups.push({ groups.push({
title: t("Paint properties"), title: t("Paint properties"),
id: "Paint_properties", id: "Paint_properties",
type: "properties", type: "properties",
fields: Object.keys(v8["paint_" + type]), fields: Object.keys(v8["paint_" + type as keyof typeof v8]),
}); });
} }
if (Object.keys(v8["layout_" + type]).length > 0) { if (Object.keys(v8["layout_" + type as keyof typeof v8]).length > 0) {
groups.push({ groups.push({
title: t("Layout properties"), title: t("Layout properties"),
id: "Layout_properties", id: "Layout_properties",
type: "properties", type: "properties",
fields: Object.keys(v8["layout_" + type]) fields: Object.keys(v8["layout_" + type as keyof typeof v8])
}); });
} }
return groups; return groups;
@@ -133,56 +131,67 @@ type LayerEditorInternalProps = {
errors?: MappedError[] errors?: MappedError[]
} & WithTranslation; } & WithTranslation;
type LayerEditorState = {
editorGroups: { [keys: string]: boolean }
};
/** Layer editor supporting multiple types of layers. */ /** Layer editor supporting multiple types of layers. */
const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({ class LayerEditorInternal extends React.Component<LayerEditorInternalProps, LayerEditorState> {
onLayerChanged = () => { }, static defaultProps = {
onLayerIdChange = () => { }, onLayerChanged: () => { },
...rest onLayerIdChange: () => { },
}) => { onLayerDestroyed: () => { },
const props = { onLayerChanged, onLayerIdChange, ...rest } as LayerEditorInternalProps; };
const [editorGroups, setEditorGroups] = useState<{ [keys: string]: boolean }>(() => { constructor(props: LayerEditorInternalProps) {
const groups: { [keys: string]: boolean } = {}; super(props);
for (const group of layoutGroups(props.layer.type, props.t)) {
groups[group.title] = true; const editorGroups: { [keys: string]: boolean } = {};
for (const group of layoutGroups(this.props.layer.type, props.t)) {
editorGroups[group.title] = true;
} }
return groups;
});
// Replaces getDerivedStateFromProps: groups that appear after mount (because this.state = { editorGroups };
// the layer type changed) start out expanded. Guarded so it only sets state }
// when a group is genuinely new, otherwise this would loop every render.
const newGroups = getLayoutForType(props.layer.type, props.t) static getDerivedStateFromProps(props: Readonly<LayerEditorInternalProps>, state: LayerEditorState) {
.filter(group => !(group.title in editorGroups)); const additionalGroups = { ...state.editorGroups };
if (newGroups.length > 0) {
const additionalGroups = { ...editorGroups }; for (const group of getLayoutForType(props.layer.type, props.t)) {
for (const group of newGroups) { if (!(group.title in additionalGroups)) {
additionalGroups[group.title] = true; additionalGroups[group.title] = true;
} }
setEditorGroups(additionalGroups);
} }
function changeProperty(group: keyof LayerSpecification | null, property: string, newValue: any) { return {
props.onLayerChanged( editorGroups: additionalGroups
props.layerIndex, };
changeLayerProperty(props.layer, group, property, newValue) }
changeProperty(group: keyof LayerSpecification | null, property: string, newValue: any) {
this.props.onLayerChanged(
this.props.layerIndex,
changeProperty(this.props.layer, group, property, newValue)
); );
} }
function onGroupToggle(groupTitle: string, active: boolean) { onGroupToggle(groupTitle: string, active: boolean) {
const changedActiveGroups = { const changedActiveGroups = {
...editorGroups, ...this.state.editorGroups,
[groupTitle]: active, [groupTitle]: active,
}; };
setEditorGroups(changedActiveGroups); this.setState({
editorGroups: changedActiveGroups
});
} }
function renderGroupType(type: string, fields?: string[]): JSX.Element { renderGroupType(type: string, fields?: string[]): JSX.Element {
let comment = ""; let comment = "";
if (props.layer.metadata) { if (this.props.layer.metadata) {
comment = (props.layer.metadata as any)["maputnik:comment"]; comment = (this.props.layer.metadata as any)["maputnik:comment"];
} }
const { errors, layerIndex } = props; const { errors, layerIndex } = this.props;
const errorData: MappedLayerErrors = {}; const errorData: MappedLayerErrors = {};
errors!.forEach(error => { errors!.forEach(error => {
@@ -198,85 +207,85 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
}); });
let sourceLayerIds; let sourceLayerIds;
const layer = props.layer as Exclude<LayerSpecification, BackgroundLayerSpecification>; const layer = this.props.layer as Exclude<LayerSpecification, BackgroundLayerSpecification>;
if (Object.prototype.hasOwnProperty.call(props.sources, layer.source)) { if (Object.prototype.hasOwnProperty.call(this.props.sources, layer.source)) {
sourceLayerIds = props.sources[layer.source].layers; sourceLayerIds = this.props.sources[layer.source].layers;
} }
switch (type) { switch (type) {
case "layer": return <div> case "layer": return <div>
<FieldId <FieldId
value={props.layer.id} value={this.props.layer.id}
wdKey="layer-editor.layer-id" wdKey="layer-editor.layer-id"
error={errorData.id} error={errorData.id}
onChange={newId => props.onLayerIdChange(props.layerIndex, props.layer.id, newId)} onChange={newId => this.props.onLayerIdChange(this.props.layerIndex, this.props.layer.id, newId)}
/> />
<FieldType <FieldType
disabled={true} disabled={true}
error={errorData.type} error={errorData.type}
value={props.layer.type} value={this.props.layer.type}
onChange={newType => props.onLayerChanged( onChange={newType => this.props.onLayerChanged(
props.layerIndex, this.props.layerIndex,
changeType(props.layer, newType) changeType(this.props.layer, newType)
)} )}
/> />
{props.layer.type !== "background" && <FieldSource {this.props.layer.type !== "background" && <FieldSource
wdKey="layer-editor.layer-source" wdKey="layer-editor.layer-source"
error={errorData.source} error={errorData.source}
sourceIds={Object.keys(props.sources!)} sourceIds={Object.keys(this.props.sources!)}
value={props.layer.source} value={this.props.layer.source}
onChange={v => changeProperty(null, "source", v)} onChange={v => this.changeProperty(null, "source", v)}
/> />
} }
{!NON_SOURCE_LAYERS.includes(props.layer.type) && {!NON_SOURCE_LAYERS.includes(this.props.layer.type) &&
<FieldSourceLayer <FieldSourceLayer
error={errorData["source-layer"]} error={errorData["source-layer"]}
sourceLayerIds={sourceLayerIds} sourceLayerIds={sourceLayerIds}
value={(props.layer as any)["source-layer"]} value={(this.props.layer as any)["source-layer"]}
onChange={v => changeProperty(null, "source-layer", v)} onChange={v => this.changeProperty(null, "source-layer", v)}
/> />
} }
<FieldMinZoom <FieldMinZoom
error={errorData.minzoom} error={errorData.minzoom}
value={props.layer.minzoom} value={this.props.layer.minzoom}
onChange={v => changeProperty(null, "minzoom", v)} onChange={v => this.changeProperty(null, "minzoom", v)}
/> />
<FieldMaxZoom <FieldMaxZoom
error={errorData.maxzoom} error={errorData.maxzoom}
value={props.layer.maxzoom} value={this.props.layer.maxzoom}
onChange={v => changeProperty(null, "maxzoom", v)} onChange={v => this.changeProperty(null, "maxzoom", v)}
/> />
<FieldComment <FieldComment
error={errorData.comment} error={errorData.comment}
value={comment} value={comment}
onChange={v => changeProperty("metadata", "maputnik:comment", v == "" ? undefined : v)} onChange={v => this.changeProperty("metadata", "maputnik:comment", v == "" ? undefined : v)}
/> />
</div>; </div>;
case "filter": return <div> case "filter": return <div>
<div className="maputnik-filter-editor-wrapper"> <div className="maputnik-filter-editor-wrapper">
<FilterEditor <FilterEditor
errors={errorData} errors={errorData}
filter={(props.layer as any).filter} filter={(this.props.layer as any).filter}
properties={props.vectorLayers[(props.layer as any)["source-layer"]]} properties={this.props.vectorLayers[(this.props.layer as any)["source-layer"]]}
onChange={f => changeProperty(null, "filter", f)} onChange={f => this.changeProperty(null, "filter", f)}
/> />
</div> </div>
</div>; </div>;
case "properties": case "properties":
return <PropertyGroup return <PropertyGroup
errors={errorData} errors={errorData}
layer={props.layer} layer={this.props.layer}
groupFields={fields!} groupFields={fields!}
spec={props.spec} spec={this.props.spec}
onChange={changeProperty.bind(null)} onChange={this.changeProperty.bind(this)}
/>; />;
case "jsoneditor": case "jsoneditor":
return <FieldJson return <FieldJson
lintType="layer" lintType="layer"
value={props.layer} value={this.props.layer}
onChange={(layer: LayerSpecification) => { onChange={(layer: LayerSpecification) => {
props.onLayerChanged( this.props.onLayerChanged(
props.layerIndex, this.props.layerIndex,
layer layer
); );
}} }}
@@ -285,17 +294,18 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
} }
} }
function moveLayer(offset: number) { moveLayer(offset: number) {
props.onMoveLayer({ this.props.onMoveLayer({
oldIndex: props.layerIndex, oldIndex: this.props.layerIndex,
newIndex: props.layerIndex + offset newIndex: this.props.layerIndex + offset
}); });
} }
const t = props.t; render() {
const t = this.props.t;
const groupIds: string[] = []; const groupIds: string[] = [];
const layerType = props.layer.type; const layerType = this.props.layer.type;
const groups = layoutGroups(layerType, t).filter(group => { const groups = layoutGroups(layerType, t).filter(group => {
return !(layerType === "background" && group.type === "source"); return !(layerType === "background" && group.type === "source");
}).map(group => { }).map(group => {
@@ -306,14 +316,14 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
id={groupId} id={groupId}
key={groupId} key={groupId}
title={group.title} title={group.title}
isActive={editorGroups[group.title]} isActive={this.state.editorGroups[group.title]}
onActiveToggle={onGroupToggle.bind(null, group.title)} onActiveToggle={this.onGroupToggle.bind(this, group.title)}
> >
{renderGroupType(group.type, group.fields)} {this.renderGroupType(group.type, group.fields)}
</LayerEditorGroup>; </LayerEditorGroup>;
}); });
const layout = props.layer.layout || {}; const layout = this.props.layer.layout || {};
const items: { const items: {
[key: string]: { [key: string]: {
@@ -325,29 +335,29 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
} = { } = {
delete: { delete: {
text: t("Delete"), text: t("Delete"),
handler: () => props.onLayerDestroy(props.layerIndex), handler: () => this.props.onLayerDestroy(this.props.layerIndex),
wdKey: "menu-delete-layer" wdKey: "menu-delete-layer"
}, },
duplicate: { duplicate: {
text: t("Duplicate"), text: t("Duplicate"),
handler: () => props.onLayerCopy(props.layerIndex), handler: () => this.props.onLayerCopy(this.props.layerIndex),
wdKey: "menu-duplicate-layer" wdKey: "menu-duplicate-layer"
}, },
hide: { hide: {
text: (layout.visibility === "none") ? t("Show") : t("Hide"), text: (layout.visibility === "none") ? t("Show") : t("Hide"),
handler: () => props.onLayerVisibilityToggle(props.layerIndex), handler: () => this.props.onLayerVisibilityToggle(this.props.layerIndex),
wdKey: "menu-hide-layer" wdKey: "menu-hide-layer"
}, },
moveLayerUp: { moveLayerUp: {
text: t("Move layer up"), text: t("Move layer up"),
disabled: props.isFirstLayer, disabled: this.props.isFirstLayer,
handler: () => moveLayer(-1), handler: () => this.moveLayer(-1),
wdKey: "menu-move-layer-up" wdKey: "menu-move-layer-up"
}, },
moveLayerDown: { moveLayerDown: {
text: t("Move layer down"), text: t("Move layer down"),
disabled: props.isLastLayer, disabled: this.props.isLastLayer,
handler: () => moveLayer(+1), handler: () => this.moveLayer(+1),
wdKey: "menu-move-layer-down" wdKey: "menu-move-layer-down"
} }
}; };
@@ -366,7 +376,7 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
<header data-wd-key="layer-editor.header"> <header data-wd-key="layer-editor.header">
<div className="layer-header"> <div className="layer-header">
<h2 className="layer-header__title"> <h2 className="layer-header__title">
{t("Layer")}: {formatLayerId(props.layer.id)} {t("Layer")}: {formatLayerId(this.props.layer.id)}
</h2> </h2>
<div className="layer-header__info"> <div className="layer-header__info">
<Wrapper <Wrapper
@@ -407,6 +417,7 @@ const LayerEditorInternal: React.FC<LayerEditorInternalProps> = ({
</Accordion> </Accordion>
</section> </section>
</IconContext.Provider>; </IconContext.Provider>;
}; }
}
export const LayerEditor = withTranslation()(LayerEditorInternal); export const LayerEditor = withTranslation()(LayerEditorInternal);
+9 -7
View File
@@ -18,20 +18,22 @@ type LayerEditorGroupProps = {
}; };
export const LayerEditorGroup: React.FC<LayerEditorGroupProps> = (props) => { export class LayerEditorGroup extends React.Component<LayerEditorGroupProps> {
return <AccordionItem uuid={props.id}> render() {
return <AccordionItem uuid={this.props.id}>
<AccordionItemHeading className="maputnik-layer-editor-group" <AccordionItemHeading className="maputnik-layer-editor-group"
data-wd-key={"layer-editor-group:"+props["data-wd-key"]} data-wd-key={"layer-editor-group:"+this.props["data-wd-key"]}
onClick={_e => props.onActiveToggle(!props.isActive)} onClick={_e => this.props.onActiveToggle(!this.props.isActive)}
> >
<AccordionItemButton className="maputnik-layer-editor-group__button"> <AccordionItemButton className="maputnik-layer-editor-group__button">
<span style={{flexGrow: 1, alignContent: "center"}}>{props.title}</span> <span style={{flexGrow: 1, alignContent: "center"}}>{this.props.title}</span>
<MdArrowDropUp size={"2em"} className="maputnik-layer-editor-group__button__icon maputnik-layer-editor-group__button__icon--up"></MdArrowDropUp> <MdArrowDropUp size={"2em"} className="maputnik-layer-editor-group__button__icon maputnik-layer-editor-group__button__icon--up"></MdArrowDropUp>
<MdArrowDropDown size={"2em"} className="maputnik-layer-editor-group__button__icon maputnik-layer-editor-group__button__icon--down"></MdArrowDropDown> <MdArrowDropDown size={"2em"} className="maputnik-layer-editor-group__button__icon maputnik-layer-editor-group__button__icon--down"></MdArrowDropDown>
</AccordionItemButton> </AccordionItemButton>
</AccordionItemHeading> </AccordionItemHeading>
<AccordionItemPanel> <AccordionItemPanel>
{props.children} {this.props.children}
</AccordionItemPanel> </AccordionItemPanel>
</AccordionItem>; </AccordionItem>;
}; }
}
+167 -124
View File
@@ -1,4 +1,4 @@
import React, {type JSX, useEffect, useRef, useState} from "react"; import React, {type JSX} from "react";
import classnames from "classnames"; import classnames from "classnames";
import lodash from "lodash"; import lodash from "lodash";
import { import {
@@ -37,98 +37,62 @@ type LayerListContainerProps = {
}; };
type LayerListContainerInternalProps = LayerListContainerProps & WithTranslation; type LayerListContainerInternalProps = LayerListContainerProps & WithTranslation;
const noopLayerSelect = () => {}; type LayerListContainerState = {
collapsedGroups: {[ket: string]: boolean}
// Replaces the previous `shouldComponentUpdate`. Note the inversion: this areAllGroupsExpanded: boolean
// returns true when the props are EQUAL (i.e. no re-render is needed), whereas keys: {[key: string]: number}
// `shouldComponentUpdate` returned true when a re-render WAS needed. isOpen: {[key: string]: boolean}
function arePropsEqual(prevProps: LayerListContainerInternalProps, nextProps: LayerListContainerInternalProps) { };
// This component tree only requires id and visibility from the layers
// objects
function getRequiredProps(layer: LayerSpecification) {
const out: {id: string, layout?: { visibility: any}} = {
id: layer.id,
};
if (layer.layout) {
out.layout = {
visibility: layer.layout.visibility
};
}
return out;
}
const layersEqual = lodash.isEqual(
nextProps.layers.map(getRequiredProps),
prevProps.layers.map(getRequiredProps),
);
function withoutLayers(props: LayerListContainerInternalProps) {
const out = {
...props
} as LayerListContainerInternalProps & { layers?: any };
delete out["layers"];
return out;
}
// Compare the props without layers because we've already compared them
// efficiently above.
const propsEqual = lodash.isEqual(
withoutLayers(prevProps),
withoutLayers(nextProps)
);
return layersEqual && propsEqual;
}
// List of collapsible layer editors // List of collapsible layer editors
function LayerListContainerInternal({ class LayerListContainerInternal extends React.Component<LayerListContainerInternalProps, LayerListContainerState> {
layers: propsLayers, static defaultProps = {
selectedLayerIndex, onLayerSelect: () => {},
onLayersChange, };
onLayerSelect = noopLayerSelect, selectedItemRef: React.RefObject<any>;
onLayerDestroy, scrollContainerRef: React.RefObject<HTMLElement | null>;
onLayerCopy,
onLayerVisibilityToggle,
sources,
errors,
t,
}: LayerListContainerInternalProps) {
const selectedItemRef = useRef<any>(null);
const scrollContainerRef = useRef<HTMLElement | null>(null);
const hasMountedRef = useRef(false);
const [collapsedGroups, setCollapsedGroups] = useState<{[key: string]: boolean}>({}); constructor(props: LayerListContainerInternalProps) {
const [areAllGroupsExpanded, setAreAllGroupsExpanded] = useState(false); super(props);
const [keys, setKeys] = useState<{[key: string]: number}>(() => ({ this.selectedItemRef = React.createRef();
this.scrollContainerRef = React.createRef();
this.state = {
collapsedGroups: {},
areAllGroupsExpanded: false,
keys: {
add: +generateUniqueId(), add: +generateUniqueId(),
})); },
const [isOpen, setIsOpen] = useState<{[key: string]: boolean}>({ isOpen: {
add: false, add: false,
}); }
};
function toggleModal(modalName: string) {
setKeys(prevKeys => ({
...prevKeys,
[modalName]: +generateUniqueId(),
}));
setIsOpen(prevIsOpen => ({
...prevIsOpen,
[modalName]: !prevIsOpen[modalName]
}));
} }
const toggleLayers = () => { toggleModal(modalName: string) {
this.setState({
keys: {
...this.state.keys,
[modalName]: +generateUniqueId(),
},
isOpen: {
...this.state.isOpen,
[modalName]: !this.state.isOpen[modalName]
}
});
}
toggleLayers = () => {
let idx = 0; let idx = 0;
const newGroups: {[key:string]: boolean} = {}; const newGroups: {[key:string]: boolean} = {};
groupedLayers().forEach(layers => { this.groupedLayers().forEach(layers => {
const groupPrefix = layerPrefix(layers[0].id); const groupPrefix = layerPrefix(layers[0].id);
const lookupKey = [groupPrefix, idx].join("-"); const lookupKey = [groupPrefix, idx].join("-");
if (layers.length > 1) { if (layers.length > 1) {
newGroups[lookupKey] = areAllGroupsExpanded; newGroups[lookupKey] = this.state.areAllGroupsExpanded;
} }
layers.forEach((_layer) => { layers.forEach((_layer) => {
@@ -136,17 +100,19 @@ function LayerListContainerInternal({
}); });
}); });
setCollapsedGroups(newGroups); this.setState({
setAreAllGroupsExpanded(!areAllGroupsExpanded); collapsedGroups: newGroups,
areAllGroupsExpanded: !this.state.areAllGroupsExpanded
});
}; };
function groupedLayers(): (LayerSpecification & {key: string})[][] { groupedLayers(layers = this.props.layers): (LayerSpecification & {key: string})[][] {
const groups = []; const groups = [];
const layerIdCount = new Map(); const layerIdCount = new Map();
for (let i = 0; i < propsLayers.length; i++) { for (let i = 0; i < layers.length; i++) {
const origLayer = propsLayers[i]; const origLayer = layers[i];
const previousLayer = propsLayers[i-1]; const previousLayer = layers[i-1];
layerIdCount.set(origLayer.id, layerIdCount.set(origLayer.id,
layerIdCount.has(origLayer.id) ? layerIdCount.get(origLayer.id) + 1 : 0 layerIdCount.has(origLayer.id) ? layerIdCount.get(origLayer.id) + 1 : 0
); );
@@ -164,35 +130,107 @@ function LayerListContainerInternal({
return groups; return groups;
} }
function toggleLayerGroup(groupPrefix: string, idx: number) { toggleLayerGroup(groupPrefix: string, idx: number) {
const lookupKey = [groupPrefix, idx].join("-"); const lookupKey = [groupPrefix, idx].join("-");
setCollapsedGroups(prevCollapsedGroups => { const newGroups = { ...this.state.collapsedGroups };
const newGroups = { ...prevCollapsedGroups }; if(lookupKey in this.state.collapsedGroups) {
if(lookupKey in prevCollapsedGroups) { newGroups[lookupKey] = !this.state.collapsedGroups[lookupKey];
newGroups[lookupKey] = !prevCollapsedGroups[lookupKey];
} else { } else {
newGroups[lookupKey] = false; newGroups[lookupKey] = false;
} }
return newGroups; this.setState({
collapsedGroups: newGroups
}); });
} }
function isCollapsed(groupPrefix: string, idx: number) { isCollapsed(groupPrefix: string, idx: number) {
const collapsed = collapsedGroups[[groupPrefix, idx].join("-")]; const collapsed = this.state.collapsedGroups[[groupPrefix, idx].join("-")];
return collapsed === undefined ? true : collapsed; return collapsed === undefined ? true : collapsed;
} }
useEffect(() => { shouldComponentUpdate (nextProps: LayerListContainerProps, nextState: LayerListContainerState) {
// `componentDidUpdate` did not run on mount, so skip the first run here too. // Always update on state change
if (!hasMountedRef.current) { if (this.state !== nextState) {
hasMountedRef.current = true; return true;
return;
} }
const selectedItemNode = selectedItemRef.current;
// This component tree only requires id and visibility from the layers
// objects
function getRequiredProps(layer: LayerSpecification) {
const out: {id: string, layout?: { visibility: any}} = {
id: layer.id,
};
if (layer.layout) {
out.layout = {
visibility: layer.layout.visibility
};
}
return out;
}
const layersEqual = lodash.isEqual(
nextProps.layers.map(getRequiredProps),
this.props.layers.map(getRequiredProps),
);
function withoutLayers(props: LayerListContainerProps) {
const out = {
...props
} as LayerListContainerProps & { layers?: any };
delete out["layers"];
return out;
}
// Compare the props without layers because we've already compared them
// efficiently above.
const propsEqual = lodash.isEqual(
withoutLayers(this.props),
withoutLayers(nextProps)
);
const propsChanged = !(layersEqual && propsEqual);
return propsChanged;
}
/**
* Preserves group state through surviving layer IDs when group indices change.
* If deletion joins groups, the result stays expanded when either group was.
*/
private preserveLayerGroupState(previousLayers: LayerSpecification[]) {
if (previousLayers === this.props.layers) return;
const collapsedByLayer = new Map<string, boolean>();
let idx = 0;
for (const layers of this.groupedLayers(previousLayers)) {
const collapsed = this.isCollapsed(layerPrefix(layers[0].id), idx);
for (const layer of layers) {
collapsedByLayer.set(layer.id, collapsed);
}
idx += layers.length;
}
const collapsedGroups: {[key: string]: boolean} = {};
idx = 0;
for (const layers of this.groupedLayers()) {
const lookupKey = [layerPrefix(layers[0].id), idx].join("-");
collapsedGroups[lookupKey] = layers.every(layer => collapsedByLayer.get(layer.id) !== false);
idx += layers.length;
}
if (!lodash.isEqual(collapsedGroups, this.state.collapsedGroups)) {
this.setState({ collapsedGroups });
}
}
componentDidUpdate (prevProps: LayerListContainerProps) {
this.preserveLayerGroupState(prevProps.layers);
if (prevProps.selectedLayerIndex !== this.props.selectedLayerIndex) {
const selectedItemNode = this.selectedItemRef.current;
if (selectedItemNode && selectedItemNode.node) { if (selectedItemNode && selectedItemNode.node) {
const target = selectedItemNode.node; const target = selectedItemNode.node;
const options = { const options = {
root: scrollContainerRef.current, root: this.scrollContainerRef.current,
threshold: 1.0 threshold: 1.0
}; };
const observer = new IntersectionObserver(entries => { const observer = new IntersectionObserver(entries => {
@@ -204,30 +242,32 @@ function LayerListContainerInternal({
observer.observe(target); observer.observe(target);
} }
}, [selectedLayerIndex]); }
}
render() {
const listItems: JSX.Element[] = []; const listItems: JSX.Element[] = [];
let idx = 0; let idx = 0;
const layersByGroup = groupedLayers(); const layersByGroup = this.groupedLayers();
layersByGroup.forEach(layers => { layersByGroup.forEach(layers => {
const groupPrefix = layerPrefix(layers[0].id); const groupPrefix = layerPrefix(layers[0].id);
if(layers.length > 1) { if(layers.length > 1) {
const currentIdx = idx;
const grp = <LayerListGroup const grp = <LayerListGroup
data-wd-key={[groupPrefix, idx].join("-")} data-wd-key={[groupPrefix, idx].join("-")}
aria-controls={layers.map(l => l.key).join(" ")} aria-controls={layers.map(l => l.key).join(" ")}
key={`group-${groupPrefix}-${idx}`} key={`group-${groupPrefix}-${idx}`}
title={groupPrefix} title={groupPrefix}
isActive={!isCollapsed(groupPrefix, idx) || idx === selectedLayerIndex} isActive={!this.isCollapsed(groupPrefix, idx) || idx === this.props.selectedLayerIndex}
onActiveToggle={() => toggleLayerGroup(groupPrefix, currentIdx)} onActiveToggle={this.toggleLayerGroup.bind(this, groupPrefix, idx)}
/>; />;
listItems.push(grp); listItems.push(grp);
} }
layers.forEach((layer, idxInGroup) => { layers.forEach((layer, idxInGroup) => {
const groupIdx = findClosestCommonPrefix(propsLayers, idx); const groupIdx = findClosestCommonPrefix(this.props.layers, idx);
const layerError = errors.find(error => { const layerError = this.props.errors.find(error => {
return ( return (
error.parsed && error.parsed &&
error.parsed.type === "layer" && error.parsed.type === "layer" &&
@@ -236,13 +276,13 @@ function LayerListContainerInternal({
}); });
const additionalProps: {ref?: React.RefObject<any>} = {}; const additionalProps: {ref?: React.RefObject<any>} = {};
if (idx === selectedLayerIndex) { if (idx === this.props.selectedLayerIndex) {
additionalProps.ref = selectedItemRef; additionalProps.ref = this.selectedItemRef;
} }
const listItem = <LayerListItem const listItem = <LayerListItem
className={classnames({ className={classnames({
"maputnik-layer-list-item-collapsed": layers.length > 1 && isCollapsed(groupPrefix, groupIdx) && idx !== selectedLayerIndex, "maputnik-layer-list-item-collapsed": layers.length > 1 && this.isCollapsed(groupPrefix, groupIdx) && idx !== this.props.selectedLayerIndex,
"maputnik-layer-list-item-group-last": idxInGroup == layers.length - 1 && layers.length > 1, "maputnik-layer-list-item-group-last": idxInGroup == layers.length - 1 && layers.length > 1,
"maputnik-layer-list-item--error": !!layerError "maputnik-layer-list-item--error": !!layerError
})} })}
@@ -252,11 +292,11 @@ function LayerListContainerInternal({
layerIndex={idx} layerIndex={idx}
layerType={layer.type} layerType={layer.type}
visibility={(layer.layout || {}).visibility} visibility={(layer.layout || {}).visibility}
isSelected={idx === selectedLayerIndex} isSelected={idx === this.props.selectedLayerIndex}
onLayerSelect={onLayerSelect} onLayerSelect={this.props.onLayerSelect}
onLayerDestroy={onLayerDestroy} onLayerDestroy={this.props.onLayerDestroy?.bind(this)}
onLayerCopy={onLayerCopy} onLayerCopy={this.props.onLayerCopy.bind(this)}
onLayerVisibilityToggle={onLayerVisibilityToggle} onLayerVisibilityToggle={this.props.onLayerVisibilityToggle.bind(this)}
{...additionalProps} {...additionalProps}
/>; />;
listItems.push(listItem); listItems.push(listItem);
@@ -264,20 +304,22 @@ function LayerListContainerInternal({
}); });
}); });
const t = this.props.t;
return <section return <section
className="maputnik-layer-list" className="maputnik-layer-list"
data-wd-key="layer-list" data-wd-key="layer-list"
role="complementary" role="complementary"
aria-label={t("Layers list")} aria-label={t("Layers list")}
ref={scrollContainerRef} ref={this.scrollContainerRef}
> >
<ModalAdd <ModalAdd
key={keys.add} key={this.state.keys.add}
layers={propsLayers} layers={this.props.layers}
sources={sources} sources={this.props.sources}
isOpen={isOpen.add} isOpen={this.state.isOpen.add}
onOpenToggle={() => toggleModal("add")} onOpenToggle={this.toggleModal.bind(this, "add")}
onLayersChange={onLayersChange} onLayersChange={this.props.onLayersChange}
/> />
<header className="maputnik-layer-list-header" data-wd-key="layer-list.header"> <header className="maputnik-layer-list-header" data-wd-key="layer-list.header">
<span className="maputnik-layer-list-header-title">{t("Layers")}</span> <span className="maputnik-layer-list-header-title">{t("Layers")}</span>
@@ -287,9 +329,9 @@ function LayerListContainerInternal({
<button <button
id="skip-target-layer-list" id="skip-target-layer-list"
data-wd-key="skip-target-layer-list" data-wd-key="skip-target-layer-list"
onClick={toggleLayers} onClick={this.toggleLayers}
className="maputnik-button"> className="maputnik-button">
{areAllGroupsExpanded === true ? {this.state.areAllGroupsExpanded === true ?
t("Collapse") t("Collapse")
: :
t("Expand") t("Expand")
@@ -300,7 +342,7 @@ function LayerListContainerInternal({
<div className="maputnik-default-property"> <div className="maputnik-default-property">
<div className="maputnik-multibutton"> <div className="maputnik-multibutton">
<button <button
onClick={() => toggleModal("add")} onClick={this.toggleModal.bind(this, "add")}
data-wd-key="layer-list:add-layer" data-wd-key="layer-list:add-layer"
className="maputnik-button maputnik-button-selected"> className="maputnik-button maputnik-button-selected">
{t("Add Layer")} {t("Add Layer")}
@@ -317,9 +359,10 @@ function LayerListContainerInternal({
</ul> </ul>
</div> </div>
</section>; </section>;
}
} }
const LayerListContainer = withTranslation()(React.memo(LayerListContainerInternal, arePropsEqual)); const LayerListContainer = withTranslation()(LayerListContainerInternal);
type LayerListProps = LayerListContainerProps & { type LayerListProps = LayerListContainerProps & {
onMoveLayer: OnMoveLayerCallback onMoveLayer: OnMoveLayerCallback
+10 -8
View File
@@ -9,24 +9,26 @@ type LayerListGroupProps = {
"aria-controls"?: string "aria-controls"?: string
}; };
export const LayerListGroup: React.FC<LayerListGroupProps> = (props) => { export class LayerListGroup extends React.Component<LayerListGroupProps> {
render() {
return <li className="maputnik-layer-list-group"> return <li className="maputnik-layer-list-group">
<div className="maputnik-layer-list-group-header" <div className="maputnik-layer-list-group-header"
data-wd-key={"layer-list-group:"+props["data-wd-key"]} data-wd-key={"layer-list-group:"+this.props["data-wd-key"]}
onClick={_e => props.onActiveToggle(!props.isActive)} onClick={_e => this.props.onActiveToggle(!this.props.isActive)}
> >
<button <button
className="maputnik-layer-list-group-title" className="maputnik-layer-list-group-title"
aria-controls={props["aria-controls"]} aria-controls={this.props["aria-controls"]}
aria-expanded={props.isActive} aria-expanded={this.props.isActive}
> >
{props.title} {this.props.title}
</button> </button>
<span className="maputnik-space" /> <span className="maputnik-space" />
<Collapser <Collapser
style={{ height: 14, width: 14 }} style={{ height: 14, width: 14 }}
isCollapsed={props.isActive} isCollapsed={this.props.isActive}
/> />
</div> </div>
</li>; </li>;
}; }
}
+20 -10
View File
@@ -32,15 +32,17 @@ const DraggableLabel: React.FC<DraggableLabelProps> = (props) => {
type IconActionProps = { type IconActionProps = {
action: string action: string
/** Tooltip text, for buttons whose action reads differently from their icon. */
title?: string
onClick(...args: unknown[]): unknown onClick(...args: unknown[]): unknown
wdKey?: string wdKey?: string
classBlockName?: string classBlockName?: string
classBlockModifier?: string classBlockModifier?: string
}; };
const IconAction: React.FC<IconActionProps> = (props) => { class IconAction extends React.Component<IconActionProps> {
function renderIcon() { renderIcon() {
switch (props.action) { switch (this.props.action) {
case "duplicate": return <MdContentCopy />; case "duplicate": return <MdContentCopy />;
case "show": return <MdVisibility />; case "show": return <MdVisibility />;
case "hide": return <MdVisibilityOff />; case "hide": return <MdVisibilityOff />;
@@ -48,7 +50,8 @@ const IconAction: React.FC<IconActionProps> = (props) => {
} }
} }
const { classBlockName, classBlockModifier } = props; render() {
const { classBlockName, classBlockModifier } = this.props;
let classAdditions = ""; let classAdditions = "";
if (classBlockName) { if (classBlockName) {
@@ -61,15 +64,16 @@ const IconAction: React.FC<IconActionProps> = (props) => {
return <button return <button
tabIndex={-1} tabIndex={-1}
title={props.action} title={this.props.title ?? this.props.action}
className={`maputnik-layer-list-icon-action ${classAdditions}`} className={`maputnik-layer-list-icon-action ${classAdditions}`}
data-wd-key={props.wdKey} data-wd-key={this.props.wdKey}
onClick={props.onClick} onClick={this.props.onClick}
aria-hidden="true" aria-hidden="true"
> >
{renderIcon()} {this.renderIcon()}
</button>; </button>;
}; }
}
type LayerListItemProps = { type LayerListItemProps = {
id?: string id?: string
@@ -109,7 +113,12 @@ export const LayerListItem = React.forwardRef<HTMLLIElement, LayerListItemProps>
opacity: isDragging ? 0.5 : 1, opacity: isDragging ? 0.5 : 1,
}; };
const visibilityAction = visibility === "visible" ? "show" : "hide"; // The icon and the CSS modifier describe the layer's current visibility,
// while the tooltip has to describe what clicking the button does, which is
// the opposite of it.
const isVisible = visibility === "visible";
const visibilityAction = isVisible ? "show" : "hide";
const visibilityTitle = isVisible ? "hide" : "show";
// Cast ref to MutableRefObject since we know from the codebase that's what's always passed // Cast ref to MutableRefObject since we know from the codebase that's what's always passed
const refObject = ref as React.MutableRefObject<HTMLLIElement | null> | null; const refObject = ref as React.MutableRefObject<HTMLLIElement | null> | null;
@@ -153,6 +162,7 @@ export const LayerListItem = React.forwardRef<HTMLLIElement, LayerListItemProps>
<IconAction <IconAction
wdKey={"layer-list-item:" + props.layerId + ":toggle-visibility"} wdKey={"layer-list-item:" + props.layerId + ":toggle-visibility"}
action={visibilityAction} action={visibilityAction}
title={visibilityTitle}
classBlockName="visibility" classBlockName="visibility"
classBlockModifier={visibilityAction} classBlockModifier={visibilityAction}
onClick={_e => onLayerVisibilityToggle!(props.layerIndex)} onClick={_e => onLayerVisibilityToggle!(props.layerIndex)}
+197 -226
View File
@@ -1,6 +1,7 @@
import React, {useCallback, useEffect, useReducer, useRef} from "react"; import React from "react";
import {createRoot} from "react-dom/client"; import {createRoot} from "react-dom/client";
import MapLibreGl, {type LayerSpecification, type LngLat, type Map, type MapOptions, type SourceSpecification, type StyleSpecification} from "maplibre-gl"; import * as MapLibreGl from "maplibre-gl";
import {type LayerSpecification, type LngLat, type Map, type MapOptions, type SourceSpecification, type StyleSpecification} from "maplibre-gl";
import MaplibreInspect from "@maplibre/maplibre-gl-inspect"; import MaplibreInspect from "@maplibre/maplibre-gl-inspect";
import colors from "@maplibre/maplibre-gl-inspect/lib/colors"; import colors from "@maplibre/maplibre-gl-inspect/lib/colors";
import { FeatureLayerPopup as MapMaplibreGlLayerPopup } from "./MapMaplibreGlLayerPopup"; import { FeatureLayerPopup as MapMaplibreGlLayerPopup } from "./MapMaplibreGlLayerPopup";
@@ -10,7 +11,7 @@ import { ZoomControl } from "../libs/zoomcontrol";
import { type HighlightedLayer, colorHighlightedLayer } from "../libs/highlight"; import { type HighlightedLayer, colorHighlightedLayer } from "../libs/highlight";
import "maplibre-gl/dist/maplibre-gl.css"; import "maplibre-gl/dist/maplibre-gl.css";
import "../maplibregl.css"; import "../maplibregl.css";
import "../libs/maplibre-rtl"; import "../libs/maplibre-init";
import MaplibreGeocoder, { type MaplibreGeocoderApi, type MaplibreGeocoderApiConfig } from "@maplibre/maplibre-gl-geocoder"; import MaplibreGeocoder, { type MaplibreGeocoderApi, type MaplibreGeocoderApiConfig } from "@maplibre/maplibre-gl-geocoder";
import "@maplibre/maplibre-gl-geocoder/dist/maplibre-gl-geocoder.css"; import "@maplibre/maplibre-gl-geocoder/dist/maplibre-gl-geocoder.css";
import { withTranslation, type WithTranslation } from "react-i18next"; import { withTranslation, type WithTranslation } from "react-i18next";
@@ -71,65 +72,199 @@ type MapMaplibreGlInternalProps = {
onChange(value: {center: LngLat, zoom: number, _from: "map" | "app"}): unknown onChange(value: {center: LngLat, zoom: number, _from: "map" | "app"}): unknown
} & WithTranslation; } & WithTranslation;
/** type MapMaplibreGlState = {
* Replacement for the previous `shouldComponentUpdate`. `React.memo` expects the map: Map | null;
* inverse: `true` means "props are equal, skip the render", whereas inspect: MaplibreInspect | null;
* `shouldComponentUpdate` returned `true` when it *should* re-render. geocoder: MaplibreGeocoder | null;
* As before, if the props cannot be serialized we treat them as equal and skip zoomControl: ZoomControl | null;
* the render ("no biggie, carry on"). zoom?: number;
*/ };
function arePropsEqual(prevProps: MapMaplibreGlInternalProps, nextProps: MapMaplibreGlInternalProps) {
class MapMaplibreGlInternal extends React.Component<MapMaplibreGlInternalProps, MapMaplibreGlState> {
static defaultProps = {
onMapLoaded: () => {},
onDataChange: () => {},
onLayerSelect: () => {},
onChange: () => {},
options: {} as MapOptions,
};
container: HTMLDivElement | null = null;
constructor(props: MapMaplibreGlInternalProps) {
super(props);
this.state = {
map: null,
inspect: null,
geocoder: null,
zoomControl: null,
};
i18next.on("languageChanged", () => {
this.forceUpdate();
});
}
shouldComponentUpdate(nextProps: MapMaplibreGlInternalProps, nextState: MapMaplibreGlState) {
let should = false; let should = false;
try { try {
should = JSON.stringify(prevProps) !== JSON.stringify(nextProps); should = JSON.stringify(this.props) !== JSON.stringify(nextProps) || JSON.stringify(this.state) !== JSON.stringify(nextState);
} catch(_e) { } catch(_e) {
// no biggie, carry on // no biggie, carry on
} }
return !should; return should;
} }
const MapMaplibreGlInternal = ({ componentDidUpdate() {
onDataChange = () => {}, const map = this.state.map;
onLayerSelect = () => {},
onChange = () => {},
options = {},
mapStyle,
mapView,
inspectModeEnabled,
highlightedLayer,
replaceAccessTokens,
t,
}: MapMaplibreGlInternalProps) => {
const container = useRef<HTMLDivElement | null>(null);
// These used to live in `this.state`, but were never able to trigger a const styleWithTokens = this.props.replaceAccessTokens(this.props.mapStyle);
// re-render: `shouldComponentUpdate` stringified the state, which throws for if (map) {
// the (circular) maplibre `Map`, so the comparison was swallowed and the // Maplibre GL now does diffing natively so we don't need to calculate
// component only ever re-rendered on prop changes. They are imperative // the necessary operations ourselves!
// handles, so they are refs here and mutating them does not re-render. // We also need to update the style for inspect to work properly
const map = useRef<Map | null>(null); map.setStyle(styleWithTokens, {diff: true});
const inspect = useRef<MaplibreInspect | null>(null); map.showTileBoundaries = this.props.options?.showTileBoundaries!;
const geocoder = useRef<MaplibreGeocoder | null>(null); map.showCollisionBoxes = this.props.options?.showCollisionBoxes!;
const zoomControl = useRef<ZoomControl | null>(null); map.showOverdrawInspector = this.props.options?.showOverdrawInspector!;
const zoom = useRef<number | undefined>(undefined);
// `componentDidUpdate` did not run on mount, so neither may the effect below. // set the map view when the prop was updated from outside
const hasMounted = useRef(false); if (this.props.mapView._from === "app") {
map.jumpTo(this.props.mapView);
}
}
const [, forceUpdate] = useReducer((tick: number) => tick + 1, 0); if(this.state.inspect && this.props.inspectModeEnabled !== this.state.inspect._showInspectMap) {
this.state.inspect.toggleInspector();
}
if (this.state.inspect && this.props.inspectModeEnabled) {
this.state.inspect.setOriginalStyle(styleWithTokens);
// In case the sources are the same, there's a need to refresh the style
setTimeout(() => {
this.state.inspect!.render();
}, 500);
}
// The maplibre event handlers/callbacks below are registered once (on mount) }
// but read `this.props` at call time in the class version, so they must not
// close over the props of the first render.
const latestProps = useRef({onDataChange, onLayerSelect, onChange, mapStyle, inspectModeEnabled, highlightedLayer, t});
latestProps.current = {onDataChange, onLayerSelect, onChange, mapStyle, inspectModeEnabled, highlightedLayer, t};
const onLayerSelectById = useCallback((id: string) => { componentDidMount() {
const index = latestProps.current.mapStyle.layers.findIndex(layer => layer.id === id); const mapOpts = {
latestProps.current.onLayerSelect(index); ...this.props.options,
}, []); container: this.container!,
style: this.props.mapStyle,
hash: true,
maxZoom: 24,
// make root relative urls in stylefiles work as maplibre gl js does
// not support this for everything:
// https://github.com/maplibre/maplibre-gl-js/issues/6818
transformRequest: (url) => {
if (url.startsWith("/")) {
url = `${window.location.origin}${url}`;
}
return { url };
},
// setting to always load glyphs of CJK fonts from server
// https://maplibre.org/maplibre-gl-js/docs/examples/local-ideographs/
localIdeographFontFamily: false
} satisfies MapOptions;
const initGeocoder = useCallback((mapInstance: Map) => { const protocol = new Protocol({metadata: true});
MapLibreGl.addProtocol("pmtiles",protocol.tile);
const map = new MapLibreGl.Map(mapOpts);
const mapViewChange = () => {
const center = map.getCenter();
const zoom = map.getZoom();
this.props.onChange({center, zoom, _from: "map"});
};
mapViewChange();
map.showTileBoundaries = mapOpts.showTileBoundaries!;
map.showCollisionBoxes = mapOpts.showCollisionBoxes!;
map.showOverdrawInspector = mapOpts.showOverdrawInspector!;
const geocoder = this.initGeocoder(map);
const zoomControl = new ZoomControl();
map.addControl(zoomControl, "top-right");
const nav = new MapLibreGl.NavigationControl({visualizePitch:true});
map.addControl(nav, "top-right");
const tmpNode = document.createElement("div");
const root = createRoot(tmpNode);
const inspectPopup = new MapLibreGl.Popup({
closeOnClick: false
});
const inspect = new MaplibreInspect({
popup: inspectPopup,
showMapPopup: true,
showMapPopupOnHover: false,
showInspectMapPopupOnHover: true,
showInspectButton: false,
blockHoverPopupOnClick: true,
assignLayerColor: (layerId: string, alpha: number) => {
return Color(colors.brightColor(layerId, alpha)).desaturate(0.5).string();
},
buildInspectStyle: (originalMapStyle: StyleSpecification, coloredLayers: HighlightedLayer[]) => buildInspectStyle(originalMapStyle, coloredLayers, this.props.highlightedLayer),
renderPopup: (features: InspectFeature[]) => {
if(this.props.inspectModeEnabled) {
inspectPopup.once("open", () => {
root.render(<MapMaplibreGlFeaturePropertyPopup features={features} />);
});
return tmpNode;
} else {
inspectPopup.once("open", () => {
root.render(<MapMaplibreGlLayerPopup
features={features}
onLayerSelect={this.onLayerSelectById}
zoom={this.state.zoom}
/>,);
});
return tmpNode;
}
}
});
map.addControl(inspect);
map.on("style.load", () => {
this.setState({
map,
inspect,
geocoder,
zoomControl,
zoom: map.getZoom()
});
});
map.on("data", e => {
if(e.dataType !== "source" || !e.tile) return;
this.props.onDataChange!({
map: this.state.map
});
});
map.on("error", e => {
console.log("ERROR", e);
});
map.on("zoom", _e => {
this.setState({
zoom: map.getZoom()
});
});
map.on("dragend", mapViewChange);
map.on("zoomend", mapViewChange);
}
onLayerSelectById = (id: string) => {
const index = this.props.mapStyle.layers.findIndex(layer => layer.id === id);
this.props.onLayerSelect(index);
};
initGeocoder(map: Map) {
const geocoderConfig = { const geocoderConfig = {
forwardGeocode: async (config: MaplibreGeocoderApiConfig) => { forwardGeocode: async (config: MaplibreGeocoderApiConfig) => {
const features = []; const features = [];
@@ -166,190 +301,26 @@ const MapMaplibreGlInternal = ({
}; };
}, },
} as unknown as MaplibreGeocoderApi; } as unknown as MaplibreGeocoderApi;
const geocoderInstance = new MaplibreGeocoder(geocoderConfig, { const geocoder = new MaplibreGeocoder(geocoderConfig, {
placeholder: latestProps.current.t("Search"), placeholder: this.props.t("Search"),
maplibregl: MapLibreGl, maplibregl: MapLibreGl,
}); });
mapInstance.addControl(geocoderInstance, "top-left"); map.addControl(geocoder, "top-left");
return geocoderInstance; return geocoder;
}, []);
// Was the `i18next.on("languageChanged", () => this.forceUpdate())` in the
// constructor. `forceUpdate` bypassed `shouldComponentUpdate`; a state update
// likewise bypasses `React.memo`.
useEffect(() => {
const onLanguageChanged = () => {
forceUpdate();
};
i18next.on("languageChanged", onLanguageChanged);
return () => {
i18next.off("languageChanged", onLanguageChanged);
};
}, []);
// componentDidMount
useEffect(() => {
const mapOpts = {
...options,
container: container.current!,
style: mapStyle,
hash: true,
maxZoom: 24,
// make root relative urls in stylefiles work as maplibre gl js does
// not support this for everything:
// https://github.com/maplibre/maplibre-gl-js/issues/6818
transformRequest: (url) => {
if (url.startsWith("/")) {
url = `${window.location.origin}${url}`;
}
return { url };
},
// setting to always load glyphs of CJK fonts from server
// https://maplibre.org/maplibre-gl-js/docs/examples/local-ideographs/
localIdeographFontFamily: false
} satisfies MapOptions;
const protocol = new Protocol({metadata: true});
MapLibreGl.addProtocol("pmtiles",protocol.tile);
const mapInstance = new MapLibreGl.Map(mapOpts);
const mapViewChange = () => {
const center = mapInstance.getCenter();
const currentZoom = mapInstance.getZoom();
latestProps.current.onChange({center, zoom: currentZoom, _from: "map"});
};
mapViewChange();
mapInstance.showTileBoundaries = mapOpts.showTileBoundaries!;
mapInstance.showCollisionBoxes = mapOpts.showCollisionBoxes!;
mapInstance.showOverdrawInspector = mapOpts.showOverdrawInspector!;
const geocoderInstance = initGeocoder(mapInstance);
const zoomControlInstance = new ZoomControl();
mapInstance.addControl(zoomControlInstance, "top-right");
const nav = new MapLibreGl.NavigationControl({visualizePitch:true});
mapInstance.addControl(nav, "top-right");
const tmpNode = document.createElement("div");
const root = createRoot(tmpNode);
const inspectPopup = new MapLibreGl.Popup({
closeOnClick: false
});
const inspectInstance = new MaplibreInspect({
popup: inspectPopup,
showMapPopup: true,
showMapPopupOnHover: false,
showInspectMapPopupOnHover: true,
showInspectButton: false,
blockHoverPopupOnClick: true,
assignLayerColor: (layerId: string, alpha: number) => {
return Color(colors.brightColor(layerId, alpha)).desaturate(0.5).string();
},
buildInspectStyle: (originalMapStyle: StyleSpecification, coloredLayers: HighlightedLayer[]) => buildInspectStyle(originalMapStyle, coloredLayers, latestProps.current.highlightedLayer),
renderPopup: (features: InspectFeature[]) => {
if(latestProps.current.inspectModeEnabled) {
inspectPopup.once("open", () => {
root.render(<MapMaplibreGlFeaturePropertyPopup features={features} />);
});
return tmpNode;
} else {
inspectPopup.once("open", () => {
root.render(<MapMaplibreGlLayerPopup
features={features}
onLayerSelect={onLayerSelectById}
zoom={zoom.current}
/>,);
});
return tmpNode;
}
}
});
mapInstance.addControl(inspectInstance);
mapInstance.on("style.load", () => {
map.current = mapInstance;
inspect.current = inspectInstance;
geocoder.current = geocoderInstance;
zoomControl.current = zoomControlInstance;
zoom.current = mapInstance.getZoom();
});
mapInstance.on("data", e => {
if(e.dataType !== "tile") return;
latestProps.current.onDataChange!({
map: map.current
});
});
mapInstance.on("error", e => {
console.log("ERROR", e);
});
mapInstance.on("zoom", _e => {
zoom.current = mapInstance.getZoom();
});
mapInstance.on("dragend", mapViewChange);
mapInstance.on("zoomend", mapViewChange);
// Mount only, exactly like componentDidMount: the map is created from the
// props of the first render and kept up to date imperatively below (the
// handlers read `latestProps`, so no prop belongs in the dependencies). The
// class had no componentWillUnmount, so there is no teardown here either.
// eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only: adding mapStyle/options would re-create the map
}, [initGeocoder, onLayerSelectById]);
// componentDidUpdate. It had no `prevProps` guards, so it ran after *every*
// re-render; the equivalent is an effect without a dependency array. Since the
// component only re-renders when `arePropsEqual` reports a prop change (or on
// a language change, as before), this runs exactly as often as it used to.
useEffect(() => {
if (!hasMounted.current) {
// componentDidUpdate does not run on mount.
hasMounted.current = true;
return;
} }
const styleWithTokens = replaceAccessTokens(mapStyle); render() {
if (map.current) { const t = this.props.t;
// Maplibre GL now does diffing natively so we don't need to calculate this.state.geocoder?.setPlaceholder(t("Search"));
// the necessary operations ourselves! this.state.zoomControl?.setLabel(t("Zoom:"));
// We also need to update the style for inspect to work properly
map.current.setStyle(styleWithTokens, {diff: true});
map.current.showTileBoundaries = options?.showTileBoundaries!;
map.current.showCollisionBoxes = options?.showCollisionBoxes!;
map.current.showOverdrawInspector = options?.showOverdrawInspector!;
// set the map view when the prop was updated from outside
if (mapView._from === "app") {
map.current.jumpTo(mapView);
}
}
if(inspect.current && inspectModeEnabled !== inspect.current._showInspectMap) {
inspect.current.toggleInspector();
}
if (inspect.current && inspectModeEnabled) {
inspect.current.setOriginalStyle(styleWithTokens);
// In case the sources are the same, there's a need to refresh the style
setTimeout(() => {
inspect.current!.render();
}, 500);
}
});
geocoder.current?.setPlaceholder(t("Search"));
zoomControl.current?.setLabel(t("Zoom:"));
return <div return <div
className="maputnik-map__map" className="maputnik-map__map"
role="region" role="region"
aria-label={t("Map view")} aria-label={t("Map view")}
ref={container} ref={x => {this.container = x;}}
data-wd-key="maplibre:map" data-wd-key="maplibre:map"
></div>; ></div>;
}; }
}
export const MapMaplibreGl = withTranslation()(React.memo(MapMaplibreGlInternal, arePropsEqual)); export const MapMaplibreGl = withTranslation()(MapMaplibreGlInternal);
@@ -63,8 +63,9 @@ type FeaturePropertyPopupProps = {
features: InspectFeature[] features: InspectFeature[]
}; };
export const FeaturePropertyPopup: React.FC<FeaturePropertyPopupProps> = (props) => { export class FeaturePropertyPopup extends React.Component<FeaturePropertyPopupProps> {
const features = removeDuplicatedFeatures(props.features); render() {
const features = removeDuplicatedFeatures(this.props.features);
return <div className="maputnik-feature-property-popup" dir="ltr" data-wd-key="feature-property-popup"> return <div className="maputnik-feature-property-popup" dir="ltr" data-wd-key="feature-property-popup">
<table className="maputnik-popup-table"> <table className="maputnik-popup-table">
<tbody> <tbody>
@@ -72,4 +73,5 @@ export const FeaturePropertyPopup: React.FC<FeaturePropertyPopupProps> = (props)
</tbody> </tbody>
</table> </table>
</div>; </div>;
}; }
}
+8 -6
View File
@@ -32,8 +32,8 @@ type FeatureLayerPopupProps = {
zoom?: number zoom?: number
}; };
export const FeatureLayerPopup: React.FC<FeatureLayerPopupProps> = (props) => { export class FeatureLayerPopup extends React.Component<FeatureLayerPopupProps> {
function _getFeatureColor(feature: InspectFeature, _zoom?: number) { _getFeatureColor(feature: InspectFeature, _zoom?: number) {
// Guard because openlayers won't have this // Guard because openlayers won't have this
if (!feature.layer.paint) { if (!feature.layer.paint) {
return; return;
@@ -65,11 +65,12 @@ export const FeatureLayerPopup: React.FC<FeatureLayerPopupProps> = (props) => {
} }
} }
const sources = groupFeaturesBySourceLayer(props.features); render() {
const sources = groupFeaturesBySourceLayer(this.props.features);
const items = Object.keys(sources).map(vectorLayerId => { const items = Object.keys(sources).map(vectorLayerId => {
const layers = sources[vectorLayerId].map((feature: InspectFeature, idx: number) => { const layers = sources[vectorLayerId].map((feature: InspectFeature, idx: number) => {
const featureColor = _getFeatureColor(feature, props.zoom); const featureColor = this._getFeatureColor(feature, this.props.zoom);
return <div return <div
key={idx} key={idx}
@@ -82,7 +83,7 @@ export const FeatureLayerPopup: React.FC<FeatureLayerPopupProps> = (props) => {
<label <label
className="maputnik-popup-layer__label" className="maputnik-popup-layer__label"
onClick={() => { onClick={() => {
props.onLayerSelect(feature.layer.id); this.props.onLayerSelect(feature.layer.id);
}} }}
> >
{feature.layer.type && {feature.layer.type &&
@@ -106,4 +107,5 @@ export const FeatureLayerPopup: React.FC<FeatureLayerPopupProps> = (props) => {
return <div className="maputnik-feature-layer-popup" data-wd-key="feature-layer-popup" dir="ltr"> return <div className="maputnik-feature-layer-popup" data-wd-key="feature-layer-popup" dir="ltr">
{items} {items}
</div>; </div>;
}; }
}
+91 -102
View File
@@ -1,4 +1,4 @@
import {useCallback, useEffect, useMemo, useRef, useState} from "react"; import React from "react";
import {throttle} from "lodash"; import {throttle} from "lodash";
import { type WithTranslation, withTranslation } from "react-i18next"; import { type WithTranslation, withTranslation } from "react-i18next";
@@ -35,52 +35,56 @@ type MapOpenLayersInternalProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const MapOpenLayersInternal = ({ type MapOpenLayersState = {
onLayerSelect = () => {}, zoom: string
mapStyle, rotation: string
style, cursor: string[]
debugToolbox, center: string[]
replaceAccessTokens, selectedFeatures?: any[]
onChange, };
t,
}: MapOpenLayersInternalProps) => {
const [zoom, setZoom] = useState("0");
const [rotation, setRotation] = useState("0");
const [cursor, setCursor] = useState<string[]>([]);
const [center, setCenter] = useState<string[]>([]);
// Never assigned in the class version either, kept for the popup below.
const [selectedFeatures] = useState<any[] | undefined>(undefined);
// Imperative handles: they were plain instance fields, so they are refs and class MapOpenLayersInternal extends React.Component<MapOpenLayersInternalProps, MapOpenLayersState> {
// mutating them must not re-render. static defaultProps = {
const map = useRef<Map | null>(null); onMapLoaded: () => {},
const container = useRef<HTMLDivElement | null>(null); onDataChange: () => {},
const overlay = useRef<Overlay | undefined>(undefined); onLayerSelect: () => {},
const popupContainer = useRef<HTMLDivElement | null>(null); };
updateStyle: any;
map: any;
container: HTMLDivElement | null = null;
overlay: Overlay | undefined;
popupContainer: HTMLElement | null = null;
// componentDidUpdate did not run on mount, and componentDidMount already constructor(props: MapOpenLayersInternalProps) {
// applies the initial style, so the style effect below must skip the mount. super(props);
const hasMounted = useRef(false); this.state = {
zoom: "0",
rotation: "0",
cursor: [] as string[],
center: [],
};
this.updateStyle = throttle(this._updateStyle.bind(this), 200);
}
// The openlayers event handlers are registered on mount but read `this.props` _updateStyle(newMapStyle: StyleSpecification) {
// at call time in the class version. if(!this.map) return;
const latestProps = useRef({mapStyle, replaceAccessTokens, onChange});
latestProps.current = {mapStyle, replaceAccessTokens, onChange};
// Was `this.updateStyle = throttle(this._updateStyle.bind(this), 200)` in the
// constructor: created once per instance, so it is memoized once here.
const updateStyle = useMemo(() => throttle((newMapStyle: StyleSpecification) => {
if(!map.current) return;
// See <https://github.com/openlayers/ol-mapbox-style/issues/215#issuecomment-493198815> // See <https://github.com/openlayers/ol-mapbox-style/issues/215#issuecomment-493198815>
map.current.getLayers().clear(); this.map.getLayers().clear();
apply(map.current, newMapStyle); apply(this.map, newMapStyle);
}, 200), []); }
// componentDidMount componentDidUpdate(prevProps: MapOpenLayersInternalProps) {
useEffect(() => { if (this.props.mapStyle !== prevProps.mapStyle) {
overlay.current = new Overlay({ this.updateStyle(
element: popupContainer.current!, this.props.replaceAccessTokens(this.props.mapStyle)
);
}
}
componentDidMount() {
this.overlay = new Overlay({
element: this.popupContainer!,
autoPan: { autoPan: {
animation: { animation: {
duration: 250 duration: 250
@@ -88,131 +92,116 @@ const MapOpenLayersInternal = ({
}, },
}); });
const mapInstance = new Map({ const map = new Map({
target: container.current!, target: this.container!,
overlays: [overlay.current], overlays: [this.overlay],
view: new View({ view: new View({
zoom: 1, zoom: 1,
center: [180, -90], center: [180, -90],
}) })
}); });
mapInstance.on("pointermove", (evt) => { map.on("pointermove", (evt) => {
const coords = toLonLat(evt.coordinate); const coords = toLonLat(evt.coordinate);
setCursor([ this.setState({
cursor: [
coords[0].toFixed(2), coords[0].toFixed(2),
coords[1].toFixed(2) coords[1].toFixed(2)
]); ]
});
}); });
const onMoveEnd = () => { const onMoveEnd = () => {
const currentZoom = mapInstance.getView().getZoom(); const zoom = map.getView().getZoom();
const currentCenter = toLonLat(mapInstance.getView().getCenter()!); const center = toLonLat(map.getView().getCenter()!);
latestProps.current.onChange({ this.props.onChange({
zoom: currentZoom, zoom,
center: { center: {
lng: currentCenter[0], lng: center[0],
lat: currentCenter[1], lat: center[1],
}, },
}); });
}; };
onMoveEnd(); onMoveEnd();
mapInstance.on("moveend", onMoveEnd); map.on("moveend", onMoveEnd);
mapInstance.on("postrender", (_e) => { map.on("postrender", (_e) => {
const currentCenter = toLonLat(mapInstance.getView().getCenter()!); const center = toLonLat(map.getView().getCenter()!);
setCenter([ this.setState({
currentCenter[0].toFixed(2), center: [
currentCenter[1].toFixed(2), center[0].toFixed(2),
]); center[1].toFixed(2),
setRotation(mapInstance.getView().getRotation().toFixed(2)); ],
setZoom(mapInstance.getView().getZoom()!.toFixed(2)); rotation: map.getView().getRotation().toFixed(2),
zoom: map.getView().getZoom()!.toFixed(2)
});
}); });
map.current = mapInstance; this.map = map;
updateStyle( this.updateStyle(
latestProps.current.replaceAccessTokens(latestProps.current.mapStyle) as StyleSpecification this.props.replaceAccessTokens(this.props.mapStyle)
); );
// Mount only, like componentDidMount. The class had no componentWillUnmount,
// so there is no teardown here either. The props read above are read from
// latestProps/the first render on purpose, so they are not dependencies.
}, [updateStyle]);
// componentDidUpdate: `if (this.props.mapStyle !== prevProps.mapStyle)`.
useEffect(() => {
if (!hasMounted.current) {
// componentDidUpdate does not run on mount; componentDidMount already
// applied the initial style, and applying it twice would push a second
// (throttled) clear + apply through ol-mapbox-style.
hasMounted.current = true;
return;
} }
updateStyle(
replaceAccessTokens(mapStyle) as StyleSpecification
);
// `replaceAccessTokens` is deliberately *not* a dependency: the parent
// re-creates it on every render, so depending on it would re-apply the style
// on every render instead of only when `mapStyle` changes, which is exactly
// what the `this.props.mapStyle !== prevProps.mapStyle` guard checked.
// eslint-disable-next-line react-hooks/exhaustive-deps -- see above: replaceAccessTokens is a new identity each render
}, [mapStyle, updateStyle]);
const closeOverlay = useCallback((e: any) => { closeOverlay = (e: any) => {
e.target.blur(); e.target.blur();
overlay.current!.setPosition(undefined); this.overlay!.setPosition(undefined);
}, []); };
render() {
const t = this.props.t;
return <div className="maputnik-ol-container"> return <div className="maputnik-ol-container">
<div <div
ref={popupContainer} ref={x => {this.popupContainer = x;}}
style={{background: "black"}} style={{background: "black"}}
className="maputnik-popup" className="maputnik-popup"
> >
<button <button
className="maplibregl-popup-close-button" className="maplibregl-popup-close-button"
onClick={closeOverlay} onClick={this.closeOverlay}
aria-label={t("Close popup")} aria-label={t("Close popup")}
> >
× ×
</button> </button>
<MapMaplibreGlLayerPopup <MapMaplibreGlLayerPopup
features={selectedFeatures || []} features={this.state.selectedFeatures || []}
onLayerSelect={onLayerSelect} onLayerSelect={this.props.onLayerSelect}
/> />
</div> </div>
<div className="maputnik-ol-zoom"> <div className="maputnik-ol-zoom">
{t("Zoom:")} {zoom} {t("Zoom:")} {this.state.zoom}
</div> </div>
{debugToolbox && {this.props.debugToolbox &&
<div className="maputnik-ol-debug"> <div className="maputnik-ol-debug">
<div> <div>
<label>{t("cursor:")} </label> <label>{t("cursor:")} </label>
<span>{renderCoords(cursor)}</span> <span>{renderCoords(this.state.cursor)}</span>
</div> </div>
<div> <div>
<label>{t("center:")} </label> <label>{t("center:")} </label>
<span>{renderCoords(center)}</span> <span>{renderCoords(this.state.center)}</span>
</div> </div>
<div> <div>
<label>{t("rotation:")} </label> <label>{t("rotation:")} </label>
<span>{rotation}</span> <span>{this.state.rotation}</span>
</div> </div>
</div> </div>
} }
<div <div
className="maputnik-ol" className="maputnik-ol"
ref={container} ref={x => {this.container = x;}}
role="region" role="region"
aria-label={t("Map view")} aria-label={t("Map view")}
style={{ style={{
...style, ...this.props.style,
}}> }}>
</div> </div>
</div>; </div>;
}; }
}
export const MapOpenLayers = withTranslation()(MapOpenLayersInternal); export const MapOpenLayers = withTranslation()(MapOpenLayersInternal);
+13 -11
View File
@@ -40,18 +40,19 @@ type PropertyGroupProps = {
errors?: MappedLayerErrors errors?: MappedLayerErrors
}; };
export const PropertyGroup: React.FC<PropertyGroupProps> = (props) => { export class PropertyGroup extends React.Component<PropertyGroupProps> {
const onPropertyChange = (property: string, newValue: any) => { onPropertyChange = (property: string, newValue: any) => {
const group = getGroupName(props.spec, props.layer.type, property); const group = getGroupName(this.props.spec, this.props.layer.type, property);
props.onChange(group ,property, newValue); this.props.onChange(group ,property, newValue);
}; };
const {errors} = props; render() {
const fields = props.groupFields.map(fieldName => { const {errors} = this.props;
const fieldSpec = getFieldSpec(props.spec, props.layer.type, fieldName); const fields = this.props.groupFields.map(fieldName => {
const fieldSpec = getFieldSpec(this.props.spec, this.props.layer.type, fieldName);
const paint = props.layer.paint || {}; const paint = this.props.layer.paint || {};
const layout = props.layer.layout || {}; const layout = this.props.layer.layout || {};
const fieldValue = fieldName in paint const fieldValue = fieldName in paint
? paint[fieldName as keyof typeof paint] ? paint[fieldName as keyof typeof paint]
: layout[fieldName as keyof typeof layout]; : layout[fieldName as keyof typeof layout];
@@ -59,7 +60,7 @@ export const PropertyGroup: React.FC<PropertyGroupProps> = (props) => {
return <FieldFunction return <FieldFunction
errors={errors} errors={errors}
onChange={onPropertyChange} onChange={this.onPropertyChange}
key={fieldName} key={fieldName}
fieldName={fieldName} fieldName={fieldName}
value={fieldValue} value={fieldValue}
@@ -71,4 +72,5 @@ export const PropertyGroup: React.FC<PropertyGroupProps> = (props) => {
return <div className="maputnik-property-group"> return <div className="maputnik-property-group">
{fields} {fields}
</div>; </div>;
}; }
}
+5 -3
View File
@@ -4,8 +4,10 @@ type ScrollContainerProps = {
children?: React.ReactNode children?: React.ReactNode
}; };
export const ScrollContainer: React.FC<ScrollContainerProps> = (props) => { export class ScrollContainer extends React.Component<ScrollContainerProps> {
render() {
return <div className="maputnik-scroll-container"> return <div className="maputnik-scroll-container">
{props.children} {this.props.children}
</div>; </div>;
}; }
}
+15 -12
View File
@@ -40,21 +40,23 @@ type SingleFilterEditorProps = {
properties?: {[key: string]: string} properties?: {[key: string]: string}
}; };
export const SingleFilterEditor: React.FC<SingleFilterEditorProps> = ({ export class SingleFilterEditor extends React.Component<SingleFilterEditorProps> {
properties = {}, static defaultProps = {
...props properties: {},
}) => { };
function onFilterPartChanged(filterOp: string, propertyName: string, filterArgs: string[]) {
onFilterPartChanged(filterOp: string, propertyName: string, filterArgs: string[]) {
let newFilter = [filterOp, propertyName, ...filterArgs.map(parseFilter)]; let newFilter = [filterOp, propertyName, ...filterArgs.map(parseFilter)];
if(filterOp === "has" || filterOp === "!has") { if(filterOp === "has" || filterOp === "!has") {
newFilter = [filterOp, propertyName]; newFilter = [filterOp, propertyName];
} else if(filterArgs.length === 0) { } else if(filterArgs.length === 0) {
newFilter = [filterOp, propertyName, ""]; newFilter = [filterOp, propertyName, ""];
} }
props.onChange(newFilter); this.props.onChange(newFilter);
} }
const f = props.filter; render() {
const f = this.props.filter;
const filterOp = f[0]; const filterOp = f[0];
const propertyName = f[1]; const propertyName = f[1];
const filterArgs = f.slice(2); const filterArgs = f.slice(2);
@@ -64,15 +66,15 @@ export const SingleFilterEditor: React.FC<SingleFilterEditorProps> = ({
<InputAutocomplete <InputAutocomplete
aria-label="key" aria-label="key"
value={propertyName} value={propertyName}
options={Object.keys(properties).map(propName => [propName, propName])} options={Object.keys(this.props.properties!).map(propName => [propName, propName])}
onChange={(newPropertyName: string) => onFilterPartChanged(filterOp, newPropertyName, filterArgs)} onChange={(newPropertyName: string) => this.onFilterPartChanged(filterOp, newPropertyName, filterArgs)}
/> />
</div> </div>
<div className="maputnik-filter-editor-operator"> <div className="maputnik-filter-editor-operator">
<InputSelect <InputSelect
aria-label="function" aria-label="function"
value={filterOp} value={filterOp}
onChange={(newFilterOp: string) => onFilterPartChanged(newFilterOp, propertyName, filterArgs)} onChange={(newFilterOp: string) => this.onFilterPartChanged(newFilterOp, propertyName, filterArgs)}
options={otherFilterOps} options={otherFilterOps}
/> />
</div> </div>
@@ -81,9 +83,10 @@ export const SingleFilterEditor: React.FC<SingleFilterEditorProps> = ({
<InputString <InputString
aria-label="value" aria-label="value"
value={filterArgs.join(",")} value={filterArgs.join(",")}
onChange={(v: string) => onFilterPartChanged(filterOp, propertyName, v.split(","))} onChange={(v: string) => this.onFilterPartChanged(filterOp, propertyName, v.split(","))}
/> />
</div> </div>
} }
</div>; </div>;
}; }
}
+6 -4
View File
@@ -7,13 +7,15 @@ type SmallErrorInternalProps = {
children?: React.ReactNode children?: React.ReactNode
} & WithTranslation; } & WithTranslation;
const SmallErrorInternal: React.FC<SmallErrorInternalProps> = (props) => { class SmallErrorInternal extends React.Component<SmallErrorInternalProps> {
const t = props.t; render () {
const t = this.props.t;
return ( return (
<div className="SmallError"> <div className="SmallError">
{t("Error:")} {props.children} {t("Error:")} {this.props.children}
</div> </div>
); );
}; }
}
export const SmallError = withTranslation()(SmallErrorInternal); export const SmallError = withTranslation()(SmallErrorInternal);
+18 -14
View File
@@ -19,26 +19,30 @@ type SpecPropertyProps = FieldSpecProps & {
}; };
export const SpecProperty: React.FC<SpecPropertyProps> = (props) => { export class SpecProperty extends React.Component<SpecPropertyProps> {
const {errors = {}, fieldName, fieldType} = props; static defaultProps = {
errors: {},
};
render() {
const {errors, fieldName, fieldType} = this.props;
const functionBtn = <FunctionButtons const functionBtn = <FunctionButtons
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
onZoomClick={props.onZoomClick} onZoomClick={this.props.onZoomClick}
onDataClick={props.onDataClick} onDataClick={this.props.onDataClick}
onExpressionClick={props.onExpressionClick} onExpressionClick={this.props.onExpressionClick}
onElevationClick={props.onElevationClick} onElevationClick={this.props.onElevationClick}
/>; />;
const error = errors[fieldType+"."+fieldName as any] as any; const error = errors![fieldType+"."+fieldName as any] as any;
const propsWithDefaults = {...props, errors};
return <FieldSpec return <FieldSpec
{...propsWithDefaults} {...this.props}
error={error} error={error}
fieldSpec={props.fieldSpec} fieldSpec={this.props.fieldSpec}
label={labelFromFieldName(props.fieldName || "")} label={labelFromFieldName(this.props.fieldName || "")}
action={functionBtn} action={functionBtn}
/>; />;
}; }
}
+73 -49
View File
@@ -1,4 +1,4 @@
import React, { useRef } from "react"; import React from "react";
import { PiListPlusBold } from "react-icons/pi"; import { PiListPlusBold } from "react-icons/pi";
import { TbMathFunction } from "react-icons/tb"; import { TbMathFunction } from "react-icons/tb";
import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json"; import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json";
@@ -68,21 +68,41 @@ type ZoomPropertyState = {
refs: {[key: number]: string} refs: {[key: number]: string}
}; };
const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}, ...rest }) => { class ZoomPropertyInternal extends React.Component<ZoomPropertyInternalProps, ZoomPropertyState> {
const props = { errors, ...rest } as ZoomPropertyInternalProps; static defaultProps = {
errors: {},
};
// The stop refs never reach the rendered output (the row key is derived from state = {
// the stop itself), so they live in a ref rather than state: keeping them in refs: {} as {[key: number]: string}
// state would mean setting state during render on every pass. };
const refs = useRef<{[key: number]: string}>({});
refs.current = setStopRefs(props, { refs: refs.current }); componentDidMount() {
const newRefs = setStopRefs(this.props, this.state);
if(newRefs) {
this.setState({
refs: newRefs
});
}
}
static getDerivedStateFromProps(props: Readonly<ZoomPropertyInternalProps>, state: ZoomPropertyState) {
const newRefs = setStopRefs(props, state);
if(newRefs) {
return {
refs: newRefs
};
}
return null;
}
// Order the stops altering the refs to reflect their new position. // Order the stops altering the refs to reflect their new position.
function orderStopsByZoom(stops: ZoomWithStops["stops"]) { orderStopsByZoom(stops: ZoomWithStops["stops"]) {
const mappedWithRef = stops const mappedWithRef = stops
.map((stop, idx) => { .map((stop, idx) => {
return { return {
ref: refs.current[idx], ref: this.state.refs[idx],
data: stop data: stop
}; };
}) })
@@ -96,59 +116,50 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
newRefs[idx] = stop.ref; newRefs[idx] = stop.ref;
}); });
refs.current = newRefs; this.setState({
refs: newRefs
});
return mappedWithRef.map((item) => item.data); return mappedWithRef.map((item) => item.data);
} }
function changeZoomStop(changeIdx: number, stopData: number | undefined, value: number) { changeZoomStop(changeIdx: number, stopData: number | undefined, value: number) {
const stops = (props.value as ZoomWithStops).stops.slice(0); const stops = (this.props.value as ZoomWithStops).stops.slice(0);
stops[changeIdx] = [stopData, value]; stops[changeIdx] = [stopData, value];
const orderedStops = orderStopsByZoom(stops); const orderedStops = this.orderStopsByZoom(stops);
const changedValue = { const changedValue = {
...props.value as ZoomWithStops, ...this.props.value as ZoomWithStops,
stops: orderedStops stops: orderedStops
}; };
props.onChange!(props.fieldName, changedValue); this.props.onChange!(this.props.fieldName, changedValue);
} }
function changeBase(newValue: number | undefined) { changeBase(newValue: number | undefined) {
const changedValue = { const changedValue = {
...props.value, ...this.props.value,
base: newValue base: newValue
}; };
if (changedValue.base === undefined) { if (changedValue.base === undefined) {
delete changedValue["base"]; delete changedValue["base"];
} }
props.onChange!(props.fieldName, changedValue); this.props.onChange!(this.props.fieldName, changedValue);
} }
const changeDataType = (type: string) => { changeDataType = (type: string) => {
if (type !== "interpolate" && props.onChangeToDataFunction) { if (type !== "interpolate" && this.props.onChangeToDataFunction) {
props.onChangeToDataFunction(type); this.props.onChangeToDataFunction(type);
} }
}; };
function getDataFunctionTypes(fieldSpec: { render() {
"property-type"?: string const t = this.props.t;
"function-type"?: string const zoomFields = this.props.value?.stops.map((stop, idx) => {
}) {
if (fieldSpec["property-type"] === "data-driven") {
return ["interpolate", "categorical", "interval", "exponential", "identity"];
}
else {
return ["interpolate"];
}
}
const t = props.t;
const zoomFields = props.value?.stops.map((stop, idx) => {
const zoomLevel = stop[0]; const zoomLevel = stop[0];
const value = stop[1]; const value = stop[1];
const deleteStopBtn = <DeleteStopButton onClick={props.onDeleteStop?.bind(null, idx)} />; const deleteStopBtn = <DeleteStopButton onClick={this.props.onDeleteStop?.bind(this, idx)} />;
return <tr return <tr
key={`${stop[0]}-${stop[1]}`} key={`${stop[0]}-${stop[1]}`}
> >
@@ -156,7 +167,7 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<InputNumber <InputNumber
aria-label={t("Zoom")} aria-label={t("Zoom")}
value={zoomLevel} value={zoomLevel}
onChange={changedStop => changeZoomStop(idx, changedStop, value)} onChange={changedStop => this.changeZoomStop(idx, changedStop, value)}
min={0} min={0}
max={22} max={22}
/> />
@@ -164,10 +175,10 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<td> <td>
<InputSpec <InputSpec
aria-label={t("Output value")} aria-label={t("Output value")}
fieldName={props.fieldName} fieldName={this.props.fieldName}
fieldSpec={props.fieldSpec as any} fieldSpec={this.props.fieldSpec as any}
value={value} value={value}
onChange={(_, newValue) => changeZoomStop(idx, zoomLevel, newValue as number)} onChange={(_, newValue) => this.changeZoomStop(idx, zoomLevel, newValue as number)}
/> />
</td> </td>
<td> <td>
@@ -179,7 +190,7 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
// return <div className="maputnik-zoom-spec-property"> // return <div className="maputnik-zoom-spec-property">
return <div className="maputnik-data-spec-block"> return <div className="maputnik-data-spec-block">
<fieldset className="maputnik-data-spec-property"> <fieldset className="maputnik-data-spec-property">
<legend>{labelFromFieldName(props.fieldName)}</legend> <legend>{labelFromFieldName(this.props.fieldName)}</legend>
<div className="maputnik-data-fieldset-inner"> <div className="maputnik-data-fieldset-inner">
<Block <Block
label={t("Function")} label={t("Function")}
@@ -188,9 +199,9 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<div className="maputnik-data-spec-property-input"> <div className="maputnik-data-spec-property-input">
<InputSelect <InputSelect
value={"interpolate"} value={"interpolate"}
onChange={(propVal: string) => changeDataType(propVal)} onChange={(propVal: string) => this.changeDataType(propVal)}
title={t("Select a type of data scale (default is 'categorical').")} title={t("Select a type of data scale (default is 'categorical').")}
options={getDataFunctionTypes(props.fieldSpec!)} options={this.getDataFunctionTypes(this.props.fieldSpec!)}
/> />
</div> </div>
</Block> </Block>
@@ -202,8 +213,8 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<InputSpec <InputSpec
fieldName={"base"} fieldName={"base"}
fieldSpec={latest.function.base as typeof latest.function.base & { type: "number" }} fieldSpec={latest.function.base as typeof latest.function.base & { type: "number" }}
value={props.value?.base} value={this.props.value?.base}
onChange={(_, newValue) => changeBase(newValue as number | undefined)} onChange={(_, newValue) => this.changeBase(newValue as number | undefined)}
/> />
</div> </div>
</Block> </Block>
@@ -224,7 +235,7 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<div className="maputnik-toolbox"> <div className="maputnik-toolbox">
<InputButton <InputButton
className="maputnik-add-stop" className="maputnik-add-stop"
onClick={props.onAddStop?.bind(null)} onClick={this.props.onAddStop?.bind(this)}
> >
<PiListPlusBold style={{ verticalAlign: "text-bottom" }} /> <PiListPlusBold style={{ verticalAlign: "text-bottom" }} />
{t("Add stop")} {t("Add stop")}
@@ -232,7 +243,7 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
<InputButton <InputButton
className="maputnik-add-stop" className="maputnik-add-stop"
data-wd-key="convert-to-expression" data-wd-key="convert-to-expression"
onClick={props.onExpressionClick?.bind(null)} onClick={this.props.onExpressionClick?.bind(this)}
> >
<TbMathFunction style={{ verticalAlign: "text-bottom" }} /> <TbMathFunction style={{ verticalAlign: "text-bottom" }} />
{t("Convert to expression")} {t("Convert to expression")}
@@ -241,6 +252,19 @@ const ZoomPropertyInternal: React.FC<ZoomPropertyInternalProps> = ({ errors = {}
</div> </div>
</fieldset> </fieldset>
</div>; </div>;
}; }
getDataFunctionTypes(fieldSpec: {
"property-type"?: string
"function-type"?: string
}) {
if (fieldSpec["property-type"] === "data-driven") {
return ["interpolate", "categorical", "interval", "exponential", "identity"];
}
else {
return ["interpolate"];
}
}
}
export const ZoomProperty = withTranslation()(ZoomPropertyInternal); export const ZoomProperty = withTranslation()(ZoomPropertyInternal);
+22 -16
View File
@@ -14,44 +14,49 @@ type ModalInternalProps = PropsWithChildren & {
} & WithTranslation; } & WithTranslation;
const ModalInternal: React.FC<ModalInternalProps> = ({underlayClickExits = true, ...props}) => { class ModalInternal extends React.Component<ModalInternalProps> {
static defaultProps = {
underlayClickExits: true
};
// See <https://github.com/maplibre/maputnik/issues/416> // See <https://github.com/maplibre/maputnik/issues/416>
const onClose = () => { onClose = () => {
if (document.activeElement) { if (document.activeElement) {
(document.activeElement as HTMLElement).blur(); (document.activeElement as HTMLElement).blur();
} }
setTimeout(() => { setTimeout(() => {
props.onOpenToggle(); this.props.onOpenToggle();
}, 0); }, 0);
}; };
const t = props.t; render() {
if(props.isOpen) { const t = this.props.t;
if(this.props.isOpen) {
return <AriaModal return <AriaModal
titleText={props.title} titleText={this.props.title}
underlayClickExits={underlayClickExits} underlayClickExits={this.props.underlayClickExits}
data-wd-key={props["data-wd-key"]} data-wd-key={this.props["data-wd-key"]}
verticallyCenter={true} verticallyCenter={true}
onExit={onClose} onExit={this.onClose}
dialogClass='maputnik-modal-container' dialogClass='maputnik-modal-container'
> >
<div className={classnames("maputnik-modal", props.className)} <div className={classnames("maputnik-modal", this.props.className)}
data-wd-key={props["data-wd-key"]} data-wd-key={this.props["data-wd-key"]}
> >
<header className="maputnik-modal-header"> <header className="maputnik-modal-header">
<h1 className="maputnik-modal-header-title">{props.title}</h1> <h1 className="maputnik-modal-header-title">{this.props.title}</h1>
<span className="maputnik-space"></span> <span className="maputnik-space"></span>
<button className="maputnik-modal-header-toggle" <button className="maputnik-modal-header-toggle"
title={t("Close modal")} title={t("Close modal")}
onClick={onClose} onClick={this.onClose}
data-wd-key={props["data-wd-key"]+".close-modal"} data-wd-key={this.props["data-wd-key"]+".close-modal"}
> >
<MdClose /> <MdClose />
</button> </button>
</header> </header>
<div className="maputnik-modal-scroller"> <div className="maputnik-modal-scroller">
<div className="maputnik-modal-content">{props.children}</div> <div className="maputnik-modal-content">{this.props.children}</div>
</div> </div>
</div> </div>
</AriaModal>; </AriaModal>;
@@ -59,6 +64,7 @@ const ModalInternal: React.FC<ModalInternalProps> = ({underlayClickExits = true,
else { else {
return false; return false;
} }
}; }
}
export const Modal = withTranslation()(ModalInternal); export const Modal = withTranslation()(ModalInternal);
+98 -95
View File
@@ -1,4 +1,4 @@
import React, { useEffect, useRef, useState } from "react"; import React from "react";
import { type WithTranslation, withTranslation } from "react-i18next"; import { type WithTranslation, withTranslation } from "react-i18next";
import type {LayerSpecification, SourceSpecification} from "maplibre-gl"; import type {LayerSpecification, SourceSpecification} from "maplibre-gl";
@@ -27,112 +27,115 @@ type ModalAddState = {
error?: string | null error?: string | null
}; };
type ModalAddSources = ModalAddInternalProps["sources"]; class ModalAddInternal extends React.Component<ModalAddInternalProps, ModalAddState> {
addLayer = () => {
if (this.props.layers.some(l => l.id === this.state.id)) {
this.setState({ error: this.props.t("Layer ID already exists") });
return;
}
function getLayersForSource(allSources: ModalAddSources, source: string) { const changedLayers = this.props.layers.slice(0);
const sourceObj = allSources[source] || {}; const layer: ModalAddState = {
id: this.state.id,
type: this.state.type,
};
if(this.state.type !== "background") {
layer.source = this.state.source;
if(!NON_SOURCE_LAYERS.includes(this.state.type) && this.state["source-layer"]) {
layer["source-layer"] = this.state["source-layer"];
}
}
changedLayers.push(layer as LayerSpecification);
this.setState({ error: null }, () => {
this.props.onLayersChange(changedLayers);
this.props.onOpenToggle();
});
};
constructor(props: ModalAddInternalProps) {
super(props);
const state: ModalAddState = {
type: "fill",
id: "",
error: null,
};
if(Object.keys(props.sources).length > 0) {
state.source = Object.keys(this.props.sources)[0];
const sourceLayers = this.props.sources[state.source].layers || [];
if (sourceLayers.length > 0) {
state["source-layer"] = sourceLayers[0];
}
}
this.state = state;
}
componentDidUpdate(_prevProps: ModalAddInternalProps, prevState: ModalAddState) {
// Check if source is valid for new type
const oldType = prevState.type;
const newType = this.state.type;
const availableSourcesOld = this.getSources(oldType);
const availableSourcesNew = this.getSources(newType);
if(
// Type has changed
oldType !== newType
&& prevState.source !== ""
// Was a valid source previously
&& availableSourcesOld.indexOf(prevState.source!) > -1
// And is not a valid source now
&& availableSourcesNew.indexOf(this.state.source!) < 0
) {
// Clear the source
this.setState({
source: ""
});
}
}
getLayersForSource(source: string) {
const sourceObj = this.props.sources[source] || {};
return sourceObj.layers || []; return sourceObj.layers || [];
} }
function getSources(allSources: ModalAddSources, type: LayerSpecification["type"]) { getSources(type: LayerSpecification["type"]) {
switch(type) { switch(type) {
case "background": case "background":
return []; return [];
case "hillshade": case "hillshade":
case "color-relief": case "color-relief":
return Object.entries(allSources).filter(([_, v]) => v.type === "raster-dem").map(([k, _]) => k); return Object.entries(this.props.sources).filter(([_, v]) => v.type === "raster-dem").map(([k, _]) => k);
case "raster": case "raster":
return Object.entries(allSources).filter(([_, v]) => v.type === "raster").map(([k, _]) => k); return Object.entries(this.props.sources).filter(([_, v]) => v.type === "raster").map(([k, _]) => k);
case "heatmap": case "heatmap":
case "circle": case "circle":
case "fill": case "fill":
case "fill-extrusion": case "fill-extrusion":
case "line": case "line":
case "symbol": case "symbol":
return Object.entries(allSources).filter(([_, v]) => v.type === "vector" || v.type === "geojson").map(([k, _]) => k); return Object.entries(this.props.sources).filter(([_, v]) => v.type === "vector" || v.type === "geojson").map(([k, _]) => k);
default: default:
return []; return [];
} }
}
const ModalAddInternal: React.FC<ModalAddInternalProps> = (props) => {
const [type, setType] = useState<LayerSpecification["type"]>("fill");
const [id, setId] = useState<string>("");
const [error, setError] = useState<string | null | undefined>(null);
const [source, setSource] = useState<string | undefined>(() => {
const sourceIds = Object.keys(props.sources);
return sourceIds.length > 0 ? sourceIds[0] : undefined;
});
const [sourceLayer, setSourceLayer] = useState<string | undefined>(() => {
const sourceIds = Object.keys(props.sources);
if (sourceIds.length === 0) return undefined;
const sourceLayers = props.sources[sourceIds[0]].layers || [];
return sourceLayers.length > 0 ? sourceLayers[0] : undefined;
});
// Mirrors `prevState.type` from the previous `componentDidUpdate`.
const prevType = useRef<LayerSpecification["type"]>(type);
useEffect(() => {
// Check if source is valid for new type
const oldType = prevType.current;
prevType.current = type;
// Only when the type has changed (also skips the initial mount)
if (oldType === type) return;
const availableSourcesOld = getSources(props.sources, oldType);
const availableSourcesNew = getSources(props.sources, type);
if(
source !== ""
// Was a valid source previously
&& availableSourcesOld.indexOf(source!) > -1
// And is not a valid source now
&& availableSourcesNew.indexOf(source!) < 0
) {
// Clear the source
setSource("");
}
}, [type, source, props.sources]);
const addLayer = () => {
if (props.layers.some(l => l.id === id)) {
setError(props.t("Layer ID already exists"));
return;
} }
const changedLayers = props.layers.slice(0);
const layer: ModalAddState = {
id: id,
type: type,
};
if(type !== "background") { render() {
layer.source = source; const t = this.props.t;
if(!NON_SOURCE_LAYERS.includes(type) && sourceLayer) { const sources = this.getSources(this.state.type);
layer["source-layer"] = sourceLayer; const layers = this.getLayersForSource(this.state.source!);
}
}
changedLayers.push(layer as LayerSpecification);
setError(null);
props.onLayersChange(changedLayers);
props.onOpenToggle();
};
const t = props.t;
const sources = getSources(props.sources, type);
const layers = getLayersForSource(props.sources, source!);
let errorElement; let errorElement;
if (error) { if (this.state.error) {
errorElement = ( errorElement = (
<div className="maputnik-modal-error"> <div className="maputnik-modal-error">
{error} {this.state.error}
<a <a
href="#" href="#"
onClick={() => setError(null)} onClick={() => this.setState({ error: null })}
className="maputnik-modal-error-close" className="maputnik-modal-error-close"
> >
× ×
@@ -142,8 +145,8 @@ const ModalAddInternal: React.FC<ModalAddInternalProps> = (props) => {
} }
return <Modal return <Modal
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Add Layer")} title={t("Add Layer")}
data-wd-key="modal:add-layer" data-wd-key="modal:add-layer"
className="maputnik-add-modal" className="maputnik-add-modal"
@@ -151,42 +154,42 @@ const ModalAddInternal: React.FC<ModalAddInternalProps> = (props) => {
{errorElement} {errorElement}
<div className="maputnik-add-layer"> <div className="maputnik-add-layer">
<FieldId <FieldId
value={id} value={this.state.id}
wdKey="add-layer.layer-id" wdKey="add-layer.layer-id"
onChange={(v: string) => { onChange={(v: string) => {
setId(v); this.setState({ id: v, error: null });
setError(null);
}} }}
/> />
<FieldType <FieldType
value={type} value={this.state.type}
wdKey="add-layer.layer-type" wdKey="add-layer.layer-type"
onChange={(v: LayerSpecification["type"]) => setType(v)} onChange={(v: LayerSpecification["type"]) => this.setState({ type: v })}
/> />
{type !== "background" && {this.state.type !== "background" &&
<FieldSource <FieldSource
sourceIds={sources} sourceIds={sources}
wdKey="add-layer.layer-source-block" wdKey="add-layer.layer-source-block"
value={source} value={this.state.source}
onChange={(v: string) => setSource(v)} onChange={(v: string) => this.setState({ source: v })}
/> />
} }
{!NON_SOURCE_LAYERS.includes(type) && {!NON_SOURCE_LAYERS.includes(this.state.type) &&
<FieldSourceLayer <FieldSourceLayer
sourceLayerIds={layers} sourceLayerIds={layers}
value={sourceLayer} value={this.state["source-layer"]}
onChange={(v: string) => setSourceLayer(v)} onChange={(v: string) => this.setState({ "source-layer": v })}
/> />
} }
<InputButton <InputButton
className="maputnik-add-layer-button" className="maputnik-add-layer-button"
onClick={addLayer} onClick={this.addLayer}
data-wd-key="add-layer" data-wd-key="add-layer"
> >
{t("Add Layer")} {t("Add Layer")}
</InputButton> </InputButton>
</div> </div>
</Modal>; </Modal>;
}; }
}
export const ModalAdd = withTranslation()(ModalAddInternal); export const ModalAdd = withTranslation()(ModalAddInternal);
+13 -11
View File
@@ -22,8 +22,9 @@ type ModalDebugInternalProps = {
} & WithTranslation; } & WithTranslation;
const ModalDebugInternal: React.FC<ModalDebugInternalProps> = (props) => { class ModalDebugInternal extends React.Component<ModalDebugInternalProps> {
const {t, mapView} = props; render() {
const {t, mapView} = this.props;
const osmZoom = Math.round(mapView.zoom)+1; const osmZoom = Math.round(mapView.zoom)+1;
const osmLon = +(mapView.center.lng).toFixed(5); const osmLon = +(mapView.center.lng).toFixed(5);
@@ -31,29 +32,29 @@ const ModalDebugInternal: React.FC<ModalDebugInternalProps> = (props) => {
return <Modal return <Modal
data-wd-key="modal:debug" data-wd-key="modal:debug"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Debug")} title={t("Debug")}
> >
<section className="maputnik-modal-section maputnik-modal-shortcuts"> <section className="maputnik-modal-section maputnik-modal-shortcuts">
<h1>{t("Options")}</h1> <h1>{t("Options")}</h1>
{props.renderer === "mlgljs" && {this.props.renderer === "mlgljs" &&
<ul> <ul>
{Object.entries(props.maplibreGlDebugOptions!).map(([key, val]) => { {Object.entries(this.props.maplibreGlDebugOptions!).map(([key, val]) => {
return <li key={key}> return <li key={key}>
<label> <label>
<input type="checkbox" checked={val} onChange={(e) => props.onChangeMaplibreGlDebug(key, e.target.checked)} /> {key} <input type="checkbox" checked={val} onChange={(e) => this.props.onChangeMaplibreGlDebug(key, e.target.checked)} /> {key}
</label> </label>
</li>; </li>;
})} })}
</ul> </ul>
} }
{props.renderer === "ol" && {this.props.renderer === "ol" &&
<ul> <ul>
{Object.entries(props.openlayersDebugOptions!).map(([key, val]) => { {Object.entries(this.props.openlayersDebugOptions!).map(([key, val]) => {
return <li key={key}> return <li key={key}>
<label> <label>
<input type="checkbox" checked={val} onChange={(e) => props.onChangeOpenlayersDebug(key, e.target.checked)} /> {key} <input type="checkbox" checked={val} onChange={(e) => this.props.onChangeOpenlayersDebug(key, e.target.checked)} /> {key}
</label> </label>
</li>; </li>;
})} })}
@@ -75,6 +76,7 @@ const ModalDebugInternal: React.FC<ModalDebugInternalProps> = (props) => {
</p> </p>
</section> </section>
</Modal>; </Modal>;
}; }
}
export const ModalDebug = withTranslation()(ModalDebugInternal); export const ModalDebug = withTranslation()(ModalDebugInternal);
+78 -75
View File
@@ -28,38 +28,37 @@ type ModalExportInternalProps = {
} & WithTranslation; } & WithTranslation;
const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => { class ModalExportInternal extends React.Component<ModalExportInternalProps> {
function tokenizedStyle() { tokenizedStyle() {
return format( return format(
stripAccessTokens( stripAccessTokens(
replaceAccessTokens(props.mapStyle) replaceAccessTokens(this.props.mapStyle)
) )
); );
} }
function exportName() { exportName() {
if (props.mapStyle.name) { if (this.props.mapStyle.name) {
return Slugify(props.mapStyle.name, { return Slugify(this.props.mapStyle.name, {
replacement: "_", replacement: "_",
remove: /[*\-+~.()'"!:]/g, remove: /[*\-+~.()'"!:]/g,
lower: true lower: true
}); });
} else { } else {
return props.mapStyle.id; return this.props.mapStyle.id;
} }
} }
function createHtml() { createHtml() {
const tokenStyle = tokenizedStyle(); const tokenStyle = this.tokenizedStyle();
const htmlTitle = props.mapStyle.name || props.t("Map"); const htmlTitle = this.props.mapStyle.name || this.props.t("Map");
const html = `<!DOCTYPE html> const html = `<!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>${htmlTitle}</title> <title>${htmlTitle}</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /> <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<script src="https://unpkg.com/maplibre-gl@${MAPLIBRE_GL_VERSION}/dist/maplibre-gl.js"></script>
<link href="https://unpkg.com/maplibre-gl@${MAPLIBRE_GL_VERSION}/dist/maplibre-gl.css" rel="stylesheet" /> <link href="https://unpkg.com/maplibre-gl@${MAPLIBRE_GL_VERSION}/dist/maplibre-gl.css" rel="stylesheet" />
<style> <style>
body { margin: 0; padding: 0; } body { margin: 0; padding: 0; }
@@ -68,8 +67,9 @@ const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => {
</head> </head>
<body> <body>
<div id="map"></div> <div id="map"></div>
<script> <script type="module">
const map = new maplibregl.Map({ import {Map} from 'https://unpkg.com/maplibre-gl@${MAPLIBRE_GL_VERSION}/dist/maplibre-gl.mjs';
const map = new Map({
container: 'map', container: 'map',
style: ${tokenStyle}, style: ${tokenStyle},
}); });
@@ -80,11 +80,49 @@ const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => {
`; `;
const blob = new Blob([html], {type: "text/html;charset=utf-8"}); const blob = new Blob([html], {type: "text/html;charset=utf-8"});
const name = exportName(); const exportName = this.exportName();
saveAs(blob, name + ".html"); saveAs(blob, exportName + ".html");
} }
async function createFileHandle(): Promise<FileSystemFileHandle | null> { async saveStyle() {
const tokenStyle = this.tokenizedStyle();
// it is not guaranteed that the File System Access API is available on all
// browsers. If the function is not available, a fallback behavior is used.
if (!showSaveFilePickerAvailable) {
const blob = new Blob([tokenStyle], {type: "application/json;charset=utf-8"});
const exportName = this.exportName();
saveAs(blob, exportName + ".json");
return;
}
let fileHandle = this.props.fileHandle;
if (fileHandle == null) {
fileHandle = await this.createFileHandle();
this.props.onSetFileHandle(fileHandle);
if (fileHandle == null) return;
}
const writable = await fileHandle.createWritable();
await writable.write(tokenStyle);
await writable.close();
this.props.onOpenToggle();
}
async saveStyleAs() {
const tokenStyle = this.tokenizedStyle();
const fileHandle = await this.createFileHandle();
this.props.onSetFileHandle(fileHandle);
if (fileHandle == null) return;
const writable = await fileHandle.createWritable();
await writable.write(tokenStyle);
await writable.close();
this.props.onOpenToggle();
}
async createFileHandle(): Promise<FileSystemFileHandle | null> {
const pickerOpts: SaveFilePickerOptions = { const pickerOpts: SaveFilePickerOptions = {
types: [ types: [
{ {
@@ -92,69 +130,33 @@ const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => {
accept: {"application/json": [".json"]}, accept: {"application/json": [".json"]},
}, },
], ],
suggestedName: exportName(), suggestedName: this.exportName(),
}; };
const fileHandle = await window.showSaveFilePicker(pickerOpts) as FileSystemFileHandle; const fileHandle = await window.showSaveFilePicker(pickerOpts) as FileSystemFileHandle;
props.onSetFileHandle(fileHandle); this.props.onSetFileHandle(fileHandle);
return fileHandle; return fileHandle;
} }
async function saveStyle() { changeMetadataProperty(property: string, value: any) {
const tokenStyle = tokenizedStyle();
// it is not guaranteed that the File System Access API is available on all
// browsers. If the function is not available, a fallback behavior is used.
if (!showSaveFilePickerAvailable) {
const blob = new Blob([tokenStyle], {type: "application/json;charset=utf-8"});
const name = exportName();
saveAs(blob, name + ".json");
return;
}
let fileHandle = props.fileHandle;
if (fileHandle == null) {
fileHandle = await createFileHandle();
props.onSetFileHandle(fileHandle);
if (fileHandle == null) return;
}
const writable = await fileHandle.createWritable();
await writable.write(tokenStyle);
await writable.close();
props.onOpenToggle();
}
async function saveStyleAs() {
const tokenStyle = tokenizedStyle();
const fileHandle = await createFileHandle();
props.onSetFileHandle(fileHandle);
if (fileHandle == null) return;
const writable = await fileHandle.createWritable();
await writable.write(tokenStyle);
await writable.close();
props.onOpenToggle();
}
function changeMetadataProperty(property: string, value: any) {
const changedStyle = { const changedStyle = {
...props.mapStyle, ...this.props.mapStyle,
metadata: { metadata: {
...props.mapStyle.metadata as any, ...this.props.mapStyle.metadata as any,
[property]: value [property]: value
} }
}; };
props.onStyleChanged(changedStyle); this.props.onStyleChanged(changedStyle);
} }
const t = props.t;
render() {
const t = this.props.t;
const fsa = fieldSpecAdditional(t); const fsa = fieldSpecAdditional(t);
return <Modal return <Modal
data-wd-key="modal:export" data-wd-key="modal:export"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Save Style")} title={t("Save Style")}
className="maputnik-export-modal" className="maputnik-export-modal"
> >
@@ -169,42 +171,42 @@ const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => {
<FieldString <FieldString
label={fsa.maputnik.maptiler_access_token.label} label={fsa.maputnik.maptiler_access_token.label}
fieldSpec={fsa.maputnik.maptiler_access_token} fieldSpec={fsa.maputnik.maptiler_access_token}
value={(props.mapStyle.metadata || {} as any)["maputnik:openmaptiles_access_token"]} value={(this.props.mapStyle.metadata || {} as any)["maputnik:openmaptiles_access_token"]}
onChange={changeMetadataProperty.bind(null, "maputnik:openmaptiles_access_token")} onChange={this.changeMetadataProperty.bind(this, "maputnik:openmaptiles_access_token")}
/> />
<FieldString <FieldString
label={fsa.maputnik.thunderforest_access_token.label} label={fsa.maputnik.thunderforest_access_token.label}
fieldSpec={fsa.maputnik.thunderforest_access_token} fieldSpec={fsa.maputnik.thunderforest_access_token}
value={(props.mapStyle.metadata || {} as any)["maputnik:thunderforest_access_token"]} value={(this.props.mapStyle.metadata || {} as any)["maputnik:thunderforest_access_token"]}
onChange={changeMetadataProperty.bind(null, "maputnik:thunderforest_access_token")} onChange={this.changeMetadataProperty.bind(this, "maputnik:thunderforest_access_token")}
/> />
<FieldString <FieldString
label={fsa.maputnik.stadia_access_token.label} label={fsa.maputnik.stadia_access_token.label}
fieldSpec={fsa.maputnik.stadia_access_token} fieldSpec={fsa.maputnik.stadia_access_token}
value={(props.mapStyle.metadata || {} as any)["maputnik:stadia_access_token"]} value={(this.props.mapStyle.metadata || {} as any)["maputnik:stadia_access_token"]}
onChange={changeMetadataProperty.bind(null, "maputnik:stadia_access_token")} onChange={this.changeMetadataProperty.bind(this, "maputnik:stadia_access_token")}
/> />
<FieldString <FieldString
label={fsa.maputnik.locationiq_access_token.label} label={fsa.maputnik.locationiq_access_token.label}
fieldSpec={fsa.maputnik.locationiq_access_token} fieldSpec={fsa.maputnik.locationiq_access_token}
value={(props.mapStyle.metadata || {} as any)["maputnik:locationiq_access_token"]} value={(this.props.mapStyle.metadata || {} as any)["maputnik:locationiq_access_token"]}
onChange={changeMetadataProperty.bind(null, "maputnik:locationiq_access_token")} onChange={this.changeMetadataProperty.bind(this, "maputnik:locationiq_access_token")}
/> />
</div> </div>
<div className="maputnik-modal-export-buttons"> <div className="maputnik-modal-export-buttons">
<InputButton onClick={saveStyle}> <InputButton onClick={this.saveStyle.bind(this)}>
<MdSave/> <MdSave/>
{t("Save")} {t("Save")}
</InputButton> </InputButton>
{showSaveFilePickerAvailable && ( {showSaveFilePickerAvailable && (
<InputButton onClick={saveStyleAs}> <InputButton onClick={this.saveStyleAs.bind(this)}>
<MdSave/> <MdSave/>
{t("Save as")} {t("Save as")}
</InputButton> </InputButton>
)} )}
<InputButton onClick={createHtml}> <InputButton onClick={this.createHtml.bind(this)}>
<MdMap/> <MdMap/>
{t("Create HTML")} {t("Create HTML")}
</InputButton> </InputButton>
@@ -212,6 +214,7 @@ const ModalExportInternal: React.FC<ModalExportInternalProps> = (props) => {
</section> </section>
</Modal>; </Modal>;
}; }
}
export const ModalExport = withTranslation()(ModalExportInternal); export const ModalExport = withTranslation()(ModalExportInternal);
+10 -8
View File
@@ -13,24 +13,26 @@ type ModalLoadingInternalProps = {
} & WithTranslation; } & WithTranslation;
const ModalLoadingInternal: React.FC<ModalLoadingInternalProps> = (props) => { class ModalLoadingInternal extends React.Component<ModalLoadingInternalProps> {
const t = props.t; render() {
const t = this.props.t;
return <Modal return <Modal
data-wd-key="modal:loading" data-wd-key="modal:loading"
isOpen={props.isOpen} isOpen={this.props.isOpen}
underlayClickExits={false} underlayClickExits={false}
title={props.title} title={this.props.title}
onOpenToggle={() => props.onCancel()} onOpenToggle={() => this.props.onCancel()}
> >
<p> <p>
{props.message} {this.props.message}
</p> </p>
<p className="maputnik-dialog__buttons"> <p className="maputnik-dialog__buttons">
<InputButton onClick={(e) => props.onCancel(e)}> <InputButton onClick={(e) => this.props.onCancel(e)}>
{t("Cancel")} {t("Cancel")}
</InputButton> </InputButton>
</p> </p>
</Modal>; </Modal>;
}; }
}
export const ModalLoading = withTranslation()(ModalLoadingInternal); export const ModalLoading = withTranslation()(ModalLoadingInternal);
+120 -88
View File
@@ -1,4 +1,4 @@
import React, { type DragEvent, type FormEvent, useRef, useState } from "react"; import React, { type DragEvent, type FormEvent } from "react";
import { MdFileUpload } from "react-icons/md"; import { MdFileUpload } from "react-icons/md";
import { MdAddCircleOutline } from "react-icons/md"; import { MdAddCircleOutline } from "react-icons/md";
import { Trans, type WithTranslation, withTranslation } from "react-i18next"; import { Trans, type WithTranslation, withTranslation } from "react-i18next";
@@ -18,27 +18,29 @@ type PublicStyleProps = {
onSelect(...args: unknown[]): unknown onSelect(...args: unknown[]): unknown
}; };
const PublicStyle: React.FC<PublicStyleProps> = (props) => { class PublicStyle extends React.Component<PublicStyleProps> {
render() {
return <div className="maputnik-public-style"> return <div className="maputnik-public-style">
<InputButton <InputButton
className="maputnik-public-style-button" className="maputnik-public-style-button"
aria-label={props.title} aria-label={this.props.title}
onClick={() => props.onSelect(props.url)} onClick={() => this.props.onSelect(this.props.url)}
> >
<div className="maputnik-public-style-header"> <div className="maputnik-public-style-header">
<div>{props.title}</div> <div>{this.props.title}</div>
<span className="maputnik-space" /> <span className="maputnik-space" />
<MdAddCircleOutline /> <MdAddCircleOutline />
</div> </div>
<div <div
className="maputnik-public-style-thumbnail" className="maputnik-public-style-thumbnail"
style={{ style={{
backgroundImage: `url(${props.thumbnailUrl})` backgroundImage: `url(${this.props.thumbnailUrl})`
}} }}
></div> ></div>
</InputButton> </InputButton>
</div>; </div>;
}; }
}
type ModalOpenInternalProps = { type ModalOpenInternalProps = {
isOpen: boolean isOpen: boolean
@@ -47,32 +49,46 @@ type ModalOpenInternalProps = {
fileHandle: FileSystemFileHandle | null fileHandle: FileSystemFileHandle | null
} & WithTranslation; } & WithTranslation;
const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => { type ModalOpenState = {
const fileInputRef = useRef<HTMLInputElement>(null); styleUrl: string
isDragOver: boolean
error?: string | null
activeRequest?: any
activeRequestUrl?: string | null
};
const [styleUrl, setStyleUrl] = useState<string>(""); class ModalOpenInternal extends React.Component<ModalOpenInternalProps, ModalOpenState> {
const [isDragOver, setIsDragOver] = useState<boolean>(false); private fileInputRef = React.createRef<HTMLInputElement>();
const [error, setError] = useState<string | null | undefined>(undefined);
const [activeRequest, setActiveRequest] = useState<any>(undefined);
const [activeRequestUrl, setActiveRequestUrl] = useState<string | null | undefined>(undefined);
const clearError = () => { constructor(props: ModalOpenInternalProps) {
setError(null); super(props);
this.state = {
styleUrl: "",
isDragOver: false,
}; };
}
const onCancelActiveRequest = (e: Event) => { clearError() {
this.setState({
error: null
});
}
onCancelActiveRequest(e: Event) {
// Else the click propagates to the underlying modal // Else the click propagates to the underlying modal
if (e) e.stopPropagation(); if (e) e.stopPropagation();
if (activeRequest) { if (this.state.activeRequest) {
activeRequest.abort(); this.state.activeRequest.abort();
setActiveRequest(null); this.setState({
setActiveRequestUrl(null); activeRequest: null,
activeRequestUrl: null
});
}
} }
};
const onStyleSelect = (styleUrl: string) => { onStyleSelect = (styleUrl: string) => {
clearError(); this.clearError();
let canceled: boolean = false; let canceled: boolean = false;
@@ -88,37 +104,43 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
return; return;
} }
setActiveRequest(null); this.setState({
setActiveRequestUrl(null); activeRequest: null,
activeRequestUrl: null
});
const mapStyle = ensureStyleValidity(body); const mapStyle = ensureStyleValidity(body);
console.log("Loaded style ", mapStyle.id); console.log("Loaded style ", mapStyle.id);
props.onStyleOpen(mapStyle); this.props.onStyleOpen(mapStyle);
onOpenToggle(); this.onOpenToggle();
}) })
.catch((err) => { .catch((err) => {
setError(`Failed to load: '${styleUrl}'`); this.setState({
setActiveRequest(null); error: `Failed to load: '${styleUrl}'`,
setActiveRequestUrl(null); activeRequest: null,
activeRequestUrl: null
});
console.error(err); console.error(err);
console.warn("Could not open the style URL", styleUrl); console.warn("Could not open the style URL", styleUrl);
}); });
setActiveRequest({ this.setState({
activeRequest: {
abort: function () { abort: function () {
canceled = true; canceled = true;
} }
},
activeRequestUrl: styleUrl
}); });
setActiveRequestUrl(styleUrl);
}; };
const onSubmitUrl = (e: FormEvent<HTMLFormElement>) => { onSubmitUrl = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
onStyleSelect(styleUrl); this.onStyleSelect(this.state.styleUrl);
}; };
const onOpenFile = async () => { onOpenFile = async () => {
clearError(); this.clearError();
const pickerOpts: OpenFilePickerOptions = { const pickerOpts: OpenFilePickerOptions = {
types: [ types: [
@@ -138,24 +160,26 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
try { try {
mapStyle = JSON.parse(content); mapStyle = JSON.parse(content);
} catch (err) { } catch (err) {
setError((err as Error).toString()); this.setState({
error: (err as Error).toString()
});
return; return;
} }
mapStyle = ensureStyleValidity(mapStyle); mapStyle = ensureStyleValidity(mapStyle);
props.onStyleOpen(mapStyle, fileHandle); this.props.onStyleOpen(mapStyle, fileHandle);
onOpenToggle(); this.onOpenToggle();
return file; return file;
}; };
// it is not guaranteed that the File System Access API is available on all // it is not guaranteed that the File System Access API is available on all
// browsers. If the function is not available, a fallback behavior is used. // browsers. If the function is not available, a fallback behavior is used.
const onFileChanged = (files: FileList | null) => { onFileChanged = (files: FileList | null) => {
if (!files) return; if (!files) return;
if (files.length === 0) return; if (files.length === 0) return;
const file = files[0]; const file = files[0];
const reader = new FileReader(); const reader = new FileReader();
clearError(); this.clearError();
reader.readAsText(file, "UTF-8"); reader.readAsText(file, "UTF-8");
reader.onload = e => { reader.onload = e => {
@@ -164,76 +188,83 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
mapStyle = JSON.parse(e.target?.result as string); mapStyle = JSON.parse(e.target?.result as string);
} }
catch (err) { catch (err) {
setError((err as Error).toString()); this.setState({
error: (err as Error).toString()
});
return; return;
} }
mapStyle = ensureStyleValidity(mapStyle); mapStyle = ensureStyleValidity(mapStyle);
props.onStyleOpen(mapStyle); this.props.onStyleOpen(mapStyle);
onOpenToggle(); this.onOpenToggle();
}; };
reader.onerror = e => console.log(e.target); reader.onerror = e => console.log(e.target);
}; };
const onOpenToggle = () => { onOpenToggle() {
setStyleUrl(""); this.setState({
setIsDragOver(false); styleUrl: "",
clearError(); isDragOver: false,
props.onOpenToggle(); });
}; this.clearError();
this.props.onOpenToggle();
}
const onBrowseClick = async () => { onBrowseClick = async () => {
if (typeof window.showOpenFilePicker === "function") { if (typeof window.showOpenFilePicker === "function") {
await onOpenFile(); await this.onOpenFile();
return; return;
} }
fileInputRef.current?.click(); this.fileInputRef.current?.click();
}; };
const onFileDragOver = (e: DragEvent<HTMLDivElement>) => { onFileDragOver = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
if (!isDragOver) { if (!this.state.isDragOver) {
setIsDragOver(true); this.setState({ isDragOver: true });
} }
}; };
const onFileDragLeave = (e: DragEvent<HTMLDivElement>) => { onFileDragLeave = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
setIsDragOver(false); this.setState({ isDragOver: false });
}; };
const onFileDrop = (e: DragEvent<HTMLDivElement>) => { onFileDrop = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
setIsDragOver(false); this.setState({ isDragOver: false });
onFileChanged(e.dataTransfer.files); this.onFileChanged(e.dataTransfer.files);
}; };
const onChangeUrl = (url: string) => { onChangeUrl = (url: string) => {
setStyleUrl(url); this.setState({
styleUrl: url,
});
}; };
const t = props.t; render() {
const t = this.props.t;
const styleOptions = publicStyles.map(style => { const styleOptions = publicStyles.map(style => {
return <PublicStyle return <PublicStyle
key={style.id} key={style.id}
url={style.url} url={style.url}
title={style.title} title={style.title}
thumbnailUrl={style.thumbnail} thumbnailUrl={style.thumbnail}
onSelect={onStyleSelect} onSelect={this.onStyleSelect}
/>; />;
}); });
let errorElement; let errorElement;
if (error) { if (this.state.error) {
errorElement = ( errorElement = (
<div className="maputnik-modal-error"> <div className="maputnik-modal-error">
{error} {this.state.error}
<a href="#" onClick={() => clearError()} className="maputnik-modal-error-close">×</a> <a href="#" onClick={() => this.clearError()} className="maputnik-modal-error-close">×</a>
</div> </div>
); );
} }
@@ -242,8 +273,8 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
<div> <div>
<Modal <Modal
data-wd-key="modal:open" data-wd-key="modal:open"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={() => onOpenToggle()} onOpenToggle={() => this.onOpenToggle()}
title={t("Open Style")} title={t("Open Style")}
> >
{errorElement} {errorElement}
@@ -252,17 +283,17 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
<p>{t("Open a local JSON style from your computer.")}</p> <p>{t("Open a local JSON style from your computer.")}</p>
<div <div
data-wd-key="modal:open.dropzone" data-wd-key="modal:open.dropzone"
className={`maputnik-upload-dropzone${isDragOver ? " maputnik-upload-dropzone--active" : ""}`} className={`maputnik-upload-dropzone${this.state.isDragOver ? " maputnik-upload-dropzone--active" : ""}`}
role="button" role="button"
tabIndex={0} tabIndex={0}
onDragOver={onFileDragOver} onDragOver={this.onFileDragOver}
onDragLeave={onFileDragLeave} onDragLeave={this.onFileDragLeave}
onDrop={onFileDrop} onDrop={this.onFileDrop}
onClick={() => void onBrowseClick()} onClick={() => void this.onBrowseClick()}
onKeyDown={(e) => { onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") { if (e.key === "Enter" || e.key === " ") {
e.preventDefault(); e.preventDefault();
void onBrowseClick(); void this.onBrowseClick();
} }
}} }}
> >
@@ -273,17 +304,17 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
</p> </p>
</div> </div>
<input <input
ref={fileInputRef} ref={this.fileInputRef}
data-wd-key="modal:open.file.input" data-wd-key="modal:open.file.input"
type="file" type="file"
style={{ display: "none" }} style={{ display: "none" }}
onChange={(e) => onFileChanged(e.target.files)} onChange={(e) => this.onFileChanged(e.target.files)}
/> />
</div> </div>
</section> </section>
<section className="maputnik-modal-section"> <section className="maputnik-modal-section">
<form onSubmit={onSubmitUrl}> <form onSubmit={this.onSubmitUrl}>
<h1>{t("Load from URL")}</h1> <h1>{t("Load from URL")}</h1>
<p> <p>
<Trans t={t}> <Trans t={t}>
@@ -296,16 +327,16 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
type="text" type="text"
className="maputnik-input" className="maputnik-input"
default={t("Enter URL...")} default={t("Enter URL...")}
value={styleUrl} value={this.state.styleUrl}
onInput={onChangeUrl} onInput={this.onChangeUrl}
onChange={onChangeUrl} onChange={this.onChangeUrl}
/> />
<div> <div>
<InputButton <InputButton
data-wd-key="modal:open.url.button" data-wd-key="modal:open.url.button"
type="submit" type="submit"
className="maputnik-big-button" className="maputnik-big-button"
disabled={styleUrl.length < 1} disabled={this.state.styleUrl.length < 1}
>Load from URL</InputButton> >Load from URL</InputButton>
</div> </div>
</form> </form>
@@ -323,13 +354,14 @@ const ModalOpenInternal: React.FC<ModalOpenInternalProps> = (props) => {
</Modal> </Modal>
<ModalLoading <ModalLoading
isOpen={!!activeRequest} isOpen={!!this.state.activeRequest}
title={t("Loading style")} title={t("Loading style")}
onCancel={(e: Event) => onCancelActiveRequest(e)} onCancel={(e: Event) => this.onCancelActiveRequest(e)}
message={t("Loading") + ": " + activeRequestUrl} message={t("Loading") + ": " + this.state.activeRequestUrl}
/> />
</div> </div>
); );
}; }
}
export const ModalOpen = withTranslation()(ModalOpenInternal); export const ModalOpen = withTranslation()(ModalOpenInternal);
+53 -51
View File
@@ -24,10 +24,10 @@ type ModalSettingsInternalProps = {
onOpenToggle(): void onOpenToggle(): void
} & WithTranslation; } & WithTranslation;
const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => { class ModalSettingsInternal extends React.Component<ModalSettingsInternalProps> {
function changeTransitionProperty(property: keyof TransitionSpecification, value: number | undefined) { changeTransitionProperty(property: keyof TransitionSpecification, value: number | undefined) {
const transition = { const transition = {
...props.mapStyle.transition, ...this.props.mapStyle.transition,
}; };
if (value === undefined) { if (value === undefined) {
@@ -37,15 +37,15 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
transition[property] = value; transition[property] = value;
} }
props.onStyleChanged({ this.props.onStyleChanged({
...props.mapStyle, ...this.props.mapStyle,
transition, transition,
}); });
} }
function changeLightProperty(property: keyof LightSpecification, value: any) { changeLightProperty(property: keyof LightSpecification, value: any) {
const light = { const light = {
...props.mapStyle.light, ...this.props.mapStyle.light,
}; };
if (value === undefined) { if (value === undefined) {
@@ -56,15 +56,15 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
light[property] = value; light[property] = value;
} }
props.onStyleChanged({ this.props.onStyleChanged({
...props.mapStyle, ...this.props.mapStyle,
light, light,
}); });
} }
function changeTerrainProperty(property: keyof TerrainSpecification, value: any) { changeTerrainProperty(property: keyof TerrainSpecification, value: any) {
const terrain = { const terrain = {
...props.mapStyle.terrain, ...this.props.mapStyle.terrain,
} as TerrainSpecification; } as TerrainSpecification;
if (value === undefined) { if (value === undefined) {
@@ -75,15 +75,15 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
terrain[property] = value; terrain[property] = value;
} }
props.onStyleChanged({ this.props.onStyleChanged({
...props.mapStyle, ...this.props.mapStyle,
terrain, terrain,
}); });
} }
function changeProjectionType(value: any) { changeProjectionType(value: any) {
const projection = { const projection = {
...props.mapStyle.projection, ...this.props.mapStyle.projection,
} as ProjectionSpecification; } as ProjectionSpecification;
if (value === undefined) { if (value === undefined) {
@@ -93,15 +93,15 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
projection.type = value; projection.type = value;
} }
props.onStyleChanged({ this.props.onStyleChanged({
...props.mapStyle, ...this.props.mapStyle,
projection, projection,
}); });
} }
function changeStyleProperty(property: keyof StyleSpecification | "owner", value: any) { changeStyleProperty(property: keyof StyleSpecification | "owner", value: any) {
const changedStyle = { const changedStyle = {
...props.mapStyle, ...this.props.mapStyle,
}; };
if (value === undefined) { if (value === undefined) {
@@ -112,22 +112,23 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
// @ts-ignore // @ts-ignore
changedStyle[property] = value; changedStyle[property] = value;
} }
props.onStyleChanged(changedStyle); this.props.onStyleChanged(changedStyle);
} }
const metadata = props.mapStyle.metadata || {} as any; render() {
const {t, onChangeMetadataProperty, mapStyle} = props; const metadata = this.props.mapStyle.metadata || {} as any;
const {t, onChangeMetadataProperty, mapStyle} = this.props;
const fsa = fieldSpecAdditional(t); const fsa = fieldSpecAdditional(t);
const light = props.mapStyle.light || {}; const light = this.props.mapStyle.light || {};
const transition = props.mapStyle.transition || {}; const transition = this.props.mapStyle.transition || {};
const terrain = props.mapStyle.terrain || {} as TerrainSpecification; const terrain = this.props.mapStyle.terrain || {} as TerrainSpecification;
const projection = props.mapStyle.projection || {} as ProjectionSpecification; const projection = this.props.mapStyle.projection || {} as ProjectionSpecification;
return <Modal return <Modal
data-wd-key="modal:settings" data-wd-key="modal:settings"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Style Settings")} title={t("Style Settings")}
> >
<div className="modal:settings"> <div className="modal:settings">
@@ -135,21 +136,21 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
label={t("Name")} label={t("Name")}
fieldSpec={latest.$root.name} fieldSpec={latest.$root.name}
data-wd-key="modal:settings.name" data-wd-key="modal:settings.name"
value={props.mapStyle.name} value={this.props.mapStyle.name}
onChange={(value) => changeStyleProperty("name", value)} onChange={(value) => this.changeStyleProperty("name", value)}
/> />
<FieldString <FieldString
label={t("Owner")} label={t("Owner")}
fieldSpec={{doc: t("Owner ID of the style. Used by Mapbox or future style APIs.")}} fieldSpec={{doc: t("Owner ID of the style. Used by Mapbox or future style APIs.")}}
data-wd-key="modal:settings.owner" data-wd-key="modal:settings.owner"
value={(props.mapStyle as any).owner} value={(this.props.mapStyle as any).owner}
onChange={(value) => changeStyleProperty("owner", value)} onChange={(value) => this.changeStyleProperty("owner", value)}
/> />
<Block label={t("Sprite URL")} fieldSpec={latest.$root.sprite} data-wd-key="modal:settings.sprite"> <Block label={t("Sprite URL")} fieldSpec={latest.$root.sprite} data-wd-key="modal:settings.sprite">
<FieldJson <FieldJson
lintType="json" lintType="json"
value={props.mapStyle.sprite as any} value={this.props.mapStyle.sprite as any}
onChange={(value) => changeStyleProperty("sprite", value)} onChange={(value) => this.changeStyleProperty("sprite", value)}
/> />
</Block> </Block>
@@ -157,8 +158,8 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
label={t("Glyphs URL")} label={t("Glyphs URL")}
fieldSpec={latest.$root.glyphs} fieldSpec={latest.$root.glyphs}
data-wd-key="modal:settings.glyphs" data-wd-key="modal:settings.glyphs"
value={props.mapStyle.glyphs as string} value={this.props.mapStyle.glyphs as string}
onChange={(value) => changeStyleProperty("glyphs", value)} onChange={(value) => this.changeStyleProperty("glyphs", value)}
/> />
<FieldString <FieldString
@@ -200,7 +201,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
type="number" type="number"
value={mapStyle.center || []} value={mapStyle.center || []}
default={[0, 0]} default={[0, 0]}
onChange={(value) => changeStyleProperty("center", value)} onChange={(value) => this.changeStyleProperty("center", value)}
/> />
<FieldNumber <FieldNumber
@@ -209,7 +210,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.$root.zoom} fieldSpec={latest.$root.zoom}
value={mapStyle.zoom} value={mapStyle.zoom}
default={0} default={0}
onChange={(value) => changeStyleProperty("zoom", value)} onChange={(value) => this.changeStyleProperty("zoom", value)}
/> />
<FieldNumber <FieldNumber
@@ -218,7 +219,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.$root.bearing} fieldSpec={latest.$root.bearing}
value={mapStyle.bearing} value={mapStyle.bearing}
default={latest.$root.bearing.default} default={latest.$root.bearing.default}
onChange={(value) => changeStyleProperty("bearing", value)} onChange={(value) => this.changeStyleProperty("bearing", value)}
/> />
<FieldNumber <FieldNumber
@@ -227,7 +228,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.$root.pitch} fieldSpec={latest.$root.pitch}
value={mapStyle.pitch} value={mapStyle.pitch}
default={latest.$root.pitch.default} default={latest.$root.pitch.default}
onChange={(value) => changeStyleProperty("pitch", value)} onChange={(value) => this.changeStyleProperty("pitch", value)}
/> />
<FieldEnum <FieldEnum
@@ -237,7 +238,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
value={light.anchor as string} value={light.anchor as string}
options={Object.keys(latest.light.anchor.values)} options={Object.keys(latest.light.anchor.values)}
default={latest.light.anchor.default} default={latest.light.anchor.default}
onChange={(value) => changeLightProperty("anchor", value)} onChange={(value) => this.changeLightProperty("anchor", value)}
/> />
<FieldColor <FieldColor
@@ -245,7 +246,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.light.color} fieldSpec={latest.light.color}
value={light.color as string} value={light.color as string}
default={latest.light.color.default} default={latest.light.color.default}
onChange={(value) => changeLightProperty("color", value)} onChange={(value) => this.changeLightProperty("color", value)}
/> />
<FieldNumber <FieldNumber
@@ -254,7 +255,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.light.intensity} fieldSpec={latest.light.intensity}
value={light.intensity as number} value={light.intensity as number}
default={latest.light.intensity.default} default={latest.light.intensity.default}
onChange={(value) => changeLightProperty("intensity", value)} onChange={(value) => this.changeLightProperty("intensity", value)}
/> />
<FieldArray <FieldArray
@@ -264,7 +265,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
length={latest.light.position.length} length={latest.light.position.length}
value={light.position as number[]} value={light.position as number[]}
default={latest.light.position.default} default={latest.light.position.default}
onChange={(value) => changeLightProperty("position", value)} onChange={(value) => this.changeLightProperty("position", value)}
/> />
<FieldString <FieldString
@@ -272,7 +273,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.terrain.source} fieldSpec={latest.terrain.source}
data-wd-key="modal:settings.maputnik:terrain_source" data-wd-key="modal:settings.maputnik:terrain_source"
value={terrain.source} value={terrain.source}
onChange={(value) => changeTerrainProperty("source", value)} onChange={(value) => this.changeTerrainProperty("source", value)}
/> />
<FieldNumber <FieldNumber
@@ -281,7 +282,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.terrain.exaggeration} fieldSpec={latest.terrain.exaggeration}
value={terrain.exaggeration} value={terrain.exaggeration}
default={latest.terrain.exaggeration.default} default={latest.terrain.exaggeration.default}
onChange={(value) => changeTerrainProperty("exaggeration", value)} onChange={(value) => this.changeTerrainProperty("exaggeration", value)}
/> />
<FieldNumber <FieldNumber
@@ -290,7 +291,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.transition.delay} fieldSpec={latest.transition.delay}
value={transition.delay} value={transition.delay}
default={latest.transition.delay.default} default={latest.transition.delay.default}
onChange={(value) => changeTransitionProperty("delay", value)} onChange={(value) => this.changeTransitionProperty("delay", value)}
/> />
<FieldNumber <FieldNumber
@@ -299,7 +300,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
fieldSpec={latest.transition.duration} fieldSpec={latest.transition.duration}
value={transition.duration} value={transition.duration}
default={latest.transition.duration.default} default={latest.transition.duration.default}
onChange={(value) => changeTransitionProperty("duration", value)} onChange={(value) => this.changeTransitionProperty("duration", value)}
/> />
<FieldSelect <FieldSelect
@@ -312,7 +313,7 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
["vertical-perspective", "Vertical Perspective"] ["vertical-perspective", "Vertical Perspective"]
]} ]}
value={projection?.type?.toString() || ""} value={projection?.type?.toString() || ""}
onChange={(value) => changeProjectionType(value)} onChange={(value) => this.changeProjectionType(value)}
/> />
<FieldSelect <FieldSelect
@@ -321,13 +322,14 @@ const ModalSettingsInternal: React.FC<ModalSettingsInternalProps> = (props) => {
data-wd-key="modal:settings.maputnik:renderer" data-wd-key="modal:settings.maputnik:renderer"
options={[ options={[
["mlgljs", "MapLibreGL JS"], ["mlgljs", "MapLibreGL JS"],
["ol", t("Open Layers (experimental)")], ["ol", t("OpenLayers (experimental)")],
]} ]}
value={metadata["maputnik:renderer"] || "mlgljs"} value={metadata["maputnik:renderer"] || "mlgljs"}
onChange={(value) => onChangeMetadataProperty("maputnik:renderer", value)} onChange={(value) => onChangeMetadataProperty("maputnik:renderer", value)}
/> />
</div> </div>
</Modal>; </Modal>;
}; }
}
export const ModalSettings = withTranslation()(ModalSettingsInternal); export const ModalSettings = withTranslation()(ModalSettingsInternal);
+7 -5
View File
@@ -10,8 +10,9 @@ type ModalShortcutsInternalProps = {
} & WithTranslation; } & WithTranslation;
const ModalShortcutsInternal: React.FC<ModalShortcutsInternalProps> = (props) => { class ModalShortcutsInternal extends React.Component<ModalShortcutsInternalProps> {
const t = props.t; render() {
const t = this.props.t;
const help = [ const help = [
{ {
key: <kbd>?</kbd>, key: <kbd>?</kbd>,
@@ -102,8 +103,8 @@ const ModalShortcutsInternal: React.FC<ModalShortcutsInternalProps> = (props) =>
return <Modal return <Modal
data-wd-key="modal:shortcuts" data-wd-key="modal:shortcuts"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Shortcuts")} title={t("Shortcuts")}
> >
<section className="maputnik-modal-section maputnik-modal-shortcuts"> <section className="maputnik-modal-section maputnik-modal-shortcuts">
@@ -130,6 +131,7 @@ const ModalShortcutsInternal: React.FC<ModalShortcutsInternalProps> = (props) =>
</ul> </ul>
</section> </section>
</Modal>; </Modal>;
}; }
}
export const ModalShortcuts = withTranslation()(ModalShortcutsInternal); export const ModalShortcuts = withTranslation()(ModalShortcutsInternal);
+69 -52
View File
@@ -1,4 +1,4 @@
import React, { useState } from "react"; import React from "react";
import {MdAddCircleOutline, MdDelete} from "react-icons/md"; import {MdAddCircleOutline, MdDelete} from "react-icons/md";
import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json"; import latest from "@maplibre/maplibre-gl-style-spec/dist/latest.json";
import type {GeoJSONSourceSpecification, RasterDEMSourceSpecification, RasterSourceSpecification, SourceSpecification, VectorSourceSpecification} from "maplibre-gl"; import type {GeoJSONSourceSpecification, RasterDEMSourceSpecification, RasterSourceSpecification, SourceSpecification, VectorSourceSpecification} from "maplibre-gl";
@@ -23,21 +23,23 @@ type PublicSourceProps = {
onSelect(...args: unknown[]): unknown onSelect(...args: unknown[]): unknown
}; };
const PublicSource: React.FC<PublicSourceProps> = (props) => { class PublicSource extends React.Component<PublicSourceProps> {
render() {
return <div className="maputnik-public-source"> return <div className="maputnik-public-source">
<InputButton <InputButton
className="maputnik-public-source-select" className="maputnik-public-source-select"
onClick={() => props.onSelect(props.id)} onClick={() => this.props.onSelect(this.props.id)}
> >
<div className="maputnik-public-source-info"> <div className="maputnik-public-source-info">
<p className="maputnik-public-source-name">{props.title}</p> <p className="maputnik-public-source-name">{this.props.title}</p>
<p className="maputnik-public-source-id">#{props.id}</p> <p className="maputnik-public-source-id">#{this.props.id}</p>
</div> </div>
<span className="maputnik-space" /> <span className="maputnik-space" />
<MdAddCircleOutline /> <MdAddCircleOutline />
</InputButton> </InputButton>
</div>; </div>;
}; }
}
function editorMode(source: SourceSpecification) { function editorMode(source: SourceSpecification) {
if(source.type === "raster") { if(source.type === "raster") {
@@ -77,16 +79,17 @@ type ActiveModalSourcesTypeEditorProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const ActiveModalSourcesTypeEditor: React.FC<ActiveModalSourcesTypeEditorProps> = (props) => { class ActiveModalSourcesTypeEditor extends React.Component<ActiveModalSourcesTypeEditorProps> {
const t = props.t; render() {
const t = this.props.t;
return <div className="maputnik-active-source-type-editor"> return <div className="maputnik-active-source-type-editor">
<div className="maputnik-active-source-type-editor-header"> <div className="maputnik-active-source-type-editor-header">
<span className="maputnik-active-source-type-editor-header-id">#{props.sourceId}</span> <span className="maputnik-active-source-type-editor-header-id">#{this.props.sourceId}</span>
<span className="maputnik-space" /> <span className="maputnik-space" />
<InputButton <InputButton
aria-label={t("Remove '{{sourceId}}' source", {sourceId: props.sourceId})} aria-label={t("Remove '{{sourceId}}' source", {sourceId: this.props.sourceId})}
className="maputnik-active-source-type-editor-header-delete" className="maputnik-active-source-type-editor-header-delete"
onClick={()=> props.onDelete(props.sourceId)} onClick={()=> this.props.onDelete(this.props.sourceId)}
style={{backgroundColor: "transparent"}} style={{backgroundColor: "transparent"}}
> >
<MdDelete /> <MdDelete />
@@ -94,20 +97,37 @@ const ActiveModalSourcesTypeEditor: React.FC<ActiveModalSourcesTypeEditorProps>
</div> </div>
<div className="maputnik-active-source-type-editor-content"> <div className="maputnik-active-source-type-editor-content">
<ModalSourcesTypeEditor <ModalSourcesTypeEditor
onChange={props.onChange} onChange={this.props.onChange}
mode={editorMode(props.source)} mode={editorMode(this.props.source)}
source={props.source} source={this.props.source}
/> />
</div> </div>
</div>; </div>;
}; }
}
type AddSourceProps = { type AddSourceProps = {
onAdd(...args: unknown[]): unknown onAdd(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
function defaultSource(mode: EditorMode, currentSource: SourceSpecification | undefined): SourceSpecification { type AddSourceState = {
const source = currentSource || {}; mode: EditorMode
sourceId: string
source: SourceSpecification
};
class AddSource extends React.Component<AddSourceProps, AddSourceState> {
constructor(props: AddSourceProps) {
super(props);
this.state = {
mode: "tilejson_vector",
sourceId: generateId(),
source: this.defaultSource("tilejson_vector"),
};
}
defaultSource(mode: EditorMode): SourceSpecification {
const source = (this.state || {}).source || {};
const {protocol} = window.location; const {protocol} = window.location;
switch(mode) { switch(mode) {
@@ -182,22 +202,19 @@ function defaultSource(mode: EditorMode, currentSource: SourceSpecification | un
}; };
default: return {} as any; default: return {} as any;
} }
} }
const AddSource: React.FC<AddSourceProps> = (props) => { onAdd = () => {
const [mode, setMode] = useState<EditorMode>("tilejson_vector"); const {source, sourceId} = this.state;
const [sourceId, setSourceId] = useState<string>(() => generateId()); this.props.onAdd(sourceId, source);
const [source, setSource] = useState<SourceSpecification>(() => defaultSource("tilejson_vector", undefined));
const onAdd = () => {
props.onAdd(sourceId, source);
}; };
const onChangeSource = (newSource: SourceSpecification) => { onChangeSource = (source: SourceSpecification) => {
setSource(newSource); this.setState({source});
}; };
const t = props.t; render() {
const t = this.props.t;
// Kind of a hack because the type changes, however maputnik has 1..n // Kind of a hack because the type changes, however maputnik has 1..n
// options per type, for example // options per type, for example
// //
@@ -213,8 +230,8 @@ const AddSource: React.FC<AddSourceProps> = (props) => {
<FieldString <FieldString
label={t("Source ID")} label={t("Source ID")}
fieldSpec={{doc: t("Unique ID that identifies the source and is used in the layer to reference the source.")}} fieldSpec={{doc: t("Unique ID that identifies the source and is used in the layer to reference the source.")}}
value={sourceId} value={this.state.sourceId}
onChange={(v: string) => setSourceId(v)} onChange={(v: string) => this.setState({ sourceId: v})}
data-wd-key="modal:sources.add.source_id" data-wd-key="modal:sources.add.source_id"
/> />
<FieldSelect <FieldSelect
@@ -233,27 +250,25 @@ const AddSource: React.FC<AddSourceProps> = (props) => {
["image", t("Image")], ["image", t("Image")],
["video", t("Video")], ["video", t("Video")],
]} ]}
onChange={newMode => { onChange={mode => this.setState({mode: mode as EditorMode, source: this.defaultSource(mode as EditorMode)})}
setMode(newMode as EditorMode); value={this.state.mode as string}
setSource(defaultSource(newMode as EditorMode, source));
}}
value={mode as string}
data-wd-key="modal:sources.add.source_type" data-wd-key="modal:sources.add.source_type"
/> />
<ModalSourcesTypeEditor <ModalSourcesTypeEditor
onChange={onChangeSource} onChange={this.onChangeSource}
mode={mode} mode={this.state.mode}
source={source} source={this.state.source}
/> />
<InputButton <InputButton
className="maputnik-add-source-button" className="maputnik-add-source-button"
onClick={onAdd} onClick={this.onAdd}
data-wd-key="modal:sources.add.add_source" data-wd-key="modal:sources.add.add_source"
> >
{t("Add Source")} {t("Add Source")}
</InputButton> </InputButton>
</div>; </div>;
}; }
}
type ModalSourcesInternalProps = { type ModalSourcesInternalProps = {
mapStyle: StyleSpecificationWithId mapStyle: StyleSpecificationWithId
@@ -262,23 +277,24 @@ type ModalSourcesInternalProps = {
onStyleChanged: OnStyleChangedCallback onStyleChanged: OnStyleChangedCallback
} & WithTranslation; } & WithTranslation;
function stripTitle(source: SourceSpecification & {title?: string}): SourceSpecification { class ModalSourcesInternal extends React.Component<ModalSourcesInternalProps> {
stripTitle(source: SourceSpecification & {title?: string}): SourceSpecification {
const strippedSource = {...source}; const strippedSource = {...source};
delete strippedSource["title"]; delete strippedSource["title"];
return strippedSource; return strippedSource;
} }
const ModalSourcesInternal: React.FC<ModalSourcesInternalProps> = (props) => { render() {
const {t, mapStyle} = props; const {t, mapStyle} = this.props;
const i18nProps = {t, i18n: props.i18n, tReady: props.tReady}; const i18nProps = {t, i18n: this.props.i18n, tReady: this.props.tReady};
const activeSources = Object.keys(mapStyle.sources).map(sourceId => { const activeSources = Object.keys(mapStyle.sources).map(sourceId => {
const source = mapStyle.sources[sourceId]; const source = mapStyle.sources[sourceId];
return <ActiveModalSourcesTypeEditor return <ActiveModalSourcesTypeEditor
key={sourceId} key={sourceId}
sourceId={sourceId} sourceId={sourceId}
source={source} source={source}
onChange={(src: SourceSpecification) => props.onStyleChanged(changeSource(mapStyle, sourceId, src))} onChange={(src: SourceSpecification) => this.props.onStyleChanged(changeSource(mapStyle, sourceId, src))}
onDelete={() => props.onStyleChanged(deleteSource(mapStyle, sourceId))} onDelete={() => this.props.onStyleChanged(deleteSource(mapStyle, sourceId))}
{...i18nProps} {...i18nProps}
/>; />;
}); });
@@ -290,14 +306,14 @@ const ModalSourcesInternal: React.FC<ModalSourcesInternalProps> = (props) => {
id={sourceId} id={sourceId}
type={source.type} type={source.type}
title={source.title} title={source.title}
onSelect={() => props.onStyleChanged(addSource(mapStyle, sourceId, stripTitle(source)))} onSelect={() => this.props.onStyleChanged(addSource(mapStyle, sourceId, this.stripTitle(source)))}
/>; />;
}); });
return <Modal return <Modal
data-wd-key="modal:sources" data-wd-key="modal:sources"
isOpen={props.isOpen} isOpen={this.props.isOpen}
onOpenToggle={props.onOpenToggle} onOpenToggle={this.props.onOpenToggle}
title={t("Sources")} title={t("Sources")}
> >
<section className="maputnik-modal-section"> <section className="maputnik-modal-section">
@@ -319,11 +335,12 @@ const ModalSourcesInternal: React.FC<ModalSourcesInternalProps> = (props) => {
<h1>{t("Add New Source")}</h1> <h1>{t("Add New Source")}</h1>
<p>{t("Add a new source to your style. You can only choose the source type and id at creation time!")}</p> <p>{t("Add a new source to your style. You can only choose the source type and id at creation time!")}</p>
<AddSource <AddSource
onAdd={(sourceId: string, source: SourceSpecification) => props.onStyleChanged(addSource(mapStyle, sourceId, source))} onAdd={(sourceId: string, source: SourceSpecification) => this.props.onStyleChanged(addSource(mapStyle, sourceId, source))}
{...i18nProps} {...i18nProps}
/> />
</section> </section>
</Modal>; </Modal>;
}; }
}
export const ModalSources = withTranslation()(ModalSourcesInternal); export const ModalSources = withTranslation()(ModalSourcesInternal);
+105 -88
View File
@@ -24,21 +24,23 @@ type TileJSONSourceEditorProps = {
} & WithTranslation; } & WithTranslation;
const TileJSONSourceEditor: React.FC<TileJSONSourceEditorProps> = (props) => { class TileJSONSourceEditor extends React.Component<TileJSONSourceEditorProps> {
const t = props.t; render() {
const t = this.props.t;
return <div> return <div>
<FieldUrl <FieldUrl
label={t("TileJSON URL")} label={t("TileJSON URL")}
fieldSpec={latest.source_vector.url} fieldSpec={latest.source_vector.url}
value={props.source.url} value={this.props.source.url}
onChange={url => props.onChange({ onChange={url => this.props.onChange({
...props.source, ...this.props.source,
url: url url: url
})} })}
/> />
{props.children} {this.props.children}
</div>; </div>;
}; }
}
type TileURLSourceEditorProps = { type TileURLSourceEditorProps = {
source: { source: {
@@ -51,28 +53,29 @@ type TileURLSourceEditorProps = {
children?: React.ReactNode children?: React.ReactNode
} & WithTranslation; } & WithTranslation;
const TileURLSourceEditor: React.FC<TileURLSourceEditorProps> = (props) => { class TileURLSourceEditor extends React.Component<TileURLSourceEditorProps> {
function changeTileUrls(tiles: string[]) { changeTileUrls(tiles: string[]) {
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
tiles, tiles,
}); });
} }
function renderTileUrls() { renderTileUrls() {
const tiles = props.source.tiles || []; const tiles = this.props.source.tiles || [];
return <FieldDynamicArray return <FieldDynamicArray
label={props.t("Tile URL")} label={this.props.t("Tile URL")}
fieldSpec={latest.source_vector.tiles} fieldSpec={latest.source_vector.tiles}
type="url" type="url"
value={tiles} value={tiles}
onChange={changeTileUrls} onChange={this.changeTileUrls.bind(this)}
/>; />;
} }
const t = props.t; render() {
const t = this.props.t;
return <div> return <div>
{renderTileUrls()} {this.renderTileUrls()}
<FieldSelect <FieldSelect
label={t("Scheme Type")} label={t("Scheme Type")}
fieldSpec={latest.source_vector.scheme} fieldSpec={latest.source_vector.scheme}
@@ -80,34 +83,36 @@ const TileURLSourceEditor: React.FC<TileURLSourceEditorProps> = (props) => {
["xyz", "xyz (Slippy map tilenames scheme)"], ["xyz", "xyz (Slippy map tilenames scheme)"],
["tms", "tms (OSGeo spec scheme)"], ["tms", "tms (OSGeo spec scheme)"],
]} ]}
onChange={scheme => props.onChange({ onChange={scheme => this.props.onChange({
...props.source, ...this.props.source,
scheme scheme
})} })}
value={props.source.scheme} value={this.props.source.scheme}
data-wd-key="modal:sources.add.scheme_type" data-wd-key="modal:sources.add.scheme_type"
/> />
<FieldNumber <FieldNumber
label={t("Min Zoom")} label={t("Min Zoom")}
fieldSpec={latest.source_vector.minzoom} fieldSpec={latest.source_vector.minzoom}
value={props.source.minzoom || 0} value={this.props.source.minzoom || 0}
onChange={minzoom => props.onChange({ onChange={minzoom => this.props.onChange({
...props.source, ...this.props.source,
minzoom: minzoom minzoom: minzoom
})} })}
/> />
<FieldNumber <FieldNumber
label={t("Max Zoom")} label={t("Max Zoom")}
fieldSpec={latest.source_vector.maxzoom} fieldSpec={latest.source_vector.maxzoom}
value={props.source.maxzoom || 22} value={this.props.source.maxzoom || 22}
onChange={maxzoom => props.onChange({ onChange={maxzoom => this.props.onChange({
...props.source, ...this.props.source,
maxzoom: maxzoom maxzoom: maxzoom
})} })}
/> />
{props.children} {this.props.children}
</div>; </div>;
};
}
}
const createCornerLabels: (t: TFunction) => { label: string, key: string }[] = (t) => ([ const createCornerLabels: (t: TFunction) => { label: string, key: string }[] = (t) => ([
{ label: t("Coord top left"), key: "top left" }, { label: t("Coord top left"), key: "top left" },
@@ -124,14 +129,15 @@ type ImageSourceEditorProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const ImageSourceEditor: React.FC<ImageSourceEditorProps> = (props) => { class ImageSourceEditor extends React.Component<ImageSourceEditorProps> {
const t = props.t; render() {
const t = this.props.t;
const changeCoord = (idx: number, val: [number, number]) => { const changeCoord = (idx: number, val: [number, number]) => {
const coordinates = props.source.coordinates.slice(0); const coordinates = this.props.source.coordinates.slice(0);
coordinates[idx] = val; coordinates[idx] = val;
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
coordinates, coordinates,
}); });
}; };
@@ -140,9 +146,9 @@ const ImageSourceEditor: React.FC<ImageSourceEditorProps> = (props) => {
<FieldUrl <FieldUrl
label={t("Image URL")} label={t("Image URL")}
fieldSpec={latest.source_image.url} fieldSpec={latest.source_image.url}
value={props.source.url} value={this.props.source.url}
onChange={url => props.onChange({ onChange={url => this.props.onChange({
...props.source, ...this.props.source,
url, url,
})} })}
/> />
@@ -153,14 +159,15 @@ const ImageSourceEditor: React.FC<ImageSourceEditorProps> = (props) => {
key={key} key={key}
length={2} length={2}
type="number" type="number"
value={props.source.coordinates[idx]} value={this.props.source.coordinates[idx]}
default={[0, 0]} default={[0, 0]}
onChange={(val: [number, number]) => changeCoord(idx, val)} onChange={(val: [number, number]) => changeCoord(idx, val)}
/> />
); );
})} })}
</div>; </div>;
}; }
}
type VideoSourceEditorProps = { type VideoSourceEditorProps = {
source: { source: {
@@ -170,21 +177,22 @@ type VideoSourceEditorProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const VideoSourceEditor: React.FC<VideoSourceEditorProps> = (props) => { class VideoSourceEditor extends React.Component<VideoSourceEditorProps> {
const t = props.t; render() {
const t = this.props.t;
const changeCoord = (idx: number, val: [number, number]) => { const changeCoord = (idx: number, val: [number, number]) => {
const coordinates = props.source.coordinates.slice(0); const coordinates = this.props.source.coordinates.slice(0);
coordinates[idx] = val; coordinates[idx] = val;
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
coordinates, coordinates,
}); });
}; };
const changeUrls = (urls: string[]) => { const changeUrls = (urls: string[]) => {
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
urls, urls,
}); });
}; };
@@ -194,7 +202,7 @@ const VideoSourceEditor: React.FC<VideoSourceEditorProps> = (props) => {
label={t("Video URL")} label={t("Video URL")}
fieldSpec={latest.source_video.urls} fieldSpec={latest.source_video.urls}
type="string" type="string"
value={props.source.urls} value={this.props.source.urls}
default={[]} default={[]}
onChange={changeUrls} onChange={changeUrls}
/> />
@@ -205,14 +213,15 @@ const VideoSourceEditor: React.FC<VideoSourceEditorProps> = (props) => {
key={key} key={key}
length={2} length={2}
type="number" type="number"
value={props.source.coordinates[idx]} value={this.props.source.coordinates[idx]}
default={[0, 0]} default={[0, 0]}
onChange={(val: [number, number]) => changeCoord(idx, val)} onChange={(val: [number, number]) => changeCoord(idx, val)}
/> />
); );
})} })}
</div>; </div>;
}; }
}
type GeoJSONSourceUrlEditorProps = { type GeoJSONSourceUrlEditorProps = {
source: { source: {
@@ -221,18 +230,20 @@ type GeoJSONSourceUrlEditorProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const GeoJSONSourceUrlEditor: React.FC<GeoJSONSourceUrlEditorProps> = (props) => { class GeoJSONSourceUrlEditor extends React.Component<GeoJSONSourceUrlEditorProps> {
const t = props.t; render() {
const t = this.props.t;
return <FieldUrl return <FieldUrl
label={t("GeoJSON URL")} label={t("GeoJSON URL")}
fieldSpec={latest.source_geojson.data} fieldSpec={latest.source_geojson.data}
value={props.source.data} value={this.props.source.data}
onChange={data => props.onChange({ onChange={data => this.props.onChange({
...props.source, ...this.props.source,
data: data data: data
})} })}
/>; />;
}; }
}
type GeoJSONSourceFieldJsonEditorProps = { type GeoJSONSourceFieldJsonEditorProps = {
source: { source: {
@@ -242,16 +253,17 @@ type GeoJSONSourceFieldJsonEditorProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const GeoJSONSourceFieldJsonEditor: React.FC<GeoJSONSourceFieldJsonEditorProps> = (props) => { class GeoJSONSourceFieldJsonEditor extends React.Component<GeoJSONSourceFieldJsonEditorProps> {
const t = props.t; render() {
const t = this.props.t;
return <div> return <div>
<Block label={t("GeoJSON")} fieldSpec={latest.source_geojson.data}> <Block label={t("GeoJSON")} fieldSpec={latest.source_geojson.data}>
<FieldJson <FieldJson
value={props.source.data} value={this.props.source.data}
lintType="json" lintType="json"
onChange={data => { onChange={data => {
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
data, data,
}); });
}} }}
@@ -259,16 +271,17 @@ const GeoJSONSourceFieldJsonEditor: React.FC<GeoJSONSourceFieldJsonEditorProps>
</Block> </Block>
<FieldCheckbox <FieldCheckbox
label={t("Cluster")} label={t("Cluster")}
value={props.source.cluster} value={this.props.source.cluster}
onChange={cluster => { onChange={cluster => {
props.onChange({ this.props.onChange({
...props.source, ...this.props.source,
cluster: cluster, cluster: cluster,
}); });
}} }}
/> />
</div>; </div>;
}; }
}
type PMTilesSourceEditorProps = { type PMTilesSourceEditorProps = {
source: { source: {
@@ -278,22 +291,24 @@ type PMTilesSourceEditorProps = {
children?: React.ReactNode children?: React.ReactNode
} & WithTranslation; } & WithTranslation;
const PMTilesSourceEditor: React.FC<PMTilesSourceEditorProps> = (props) => { class PMTilesSourceEditor extends React.Component<PMTilesSourceEditorProps> {
const t = props.t; render() {
const t = this.props.t;
return <div> return <div>
<FieldUrl <FieldUrl
label={t("PMTiles URL")} label={t("PMTiles URL")}
fieldSpec={latest.source_vector.url} fieldSpec={latest.source_vector.url}
value={props.source.url} value={this.props.source.url}
data-wd-key="modal:sources.add.source_url" data-wd-key="modal:sources.add.source_url"
onChange={(url: string) => props.onChange({ onChange={(url: string) => this.props.onChange({
...props.source, ...this.props.source,
url: url.startsWith("pmtiles://") ? url : `pmtiles://${url}` url: url.startsWith("pmtiles://") ? url : `pmtiles://${url}`
})} })}
/> />
{props.children} {this.props.children}
</div>; </div>;
}; }
}
type ModalSourcesTypeEditorInternalProps = { type ModalSourcesTypeEditorInternalProps = {
mode: EditorMode mode: EditorMode
@@ -301,16 +316,17 @@ type ModalSourcesTypeEditorInternalProps = {
onChange(...args: unknown[]): unknown onChange(...args: unknown[]): unknown
} & WithTranslation; } & WithTranslation;
const ModalSourcesTypeEditorInternal: React.FC<ModalSourcesTypeEditorInternalProps> = (props) => { class ModalSourcesTypeEditorInternal extends React.Component<ModalSourcesTypeEditorInternalProps> {
const t = props.t; render() {
const t = this.props.t;
const commonProps = { const commonProps = {
source: props.source, source: this.props.source,
onChange: props.onChange, onChange: this.props.onChange,
t: props.t, t: this.props.t,
i18n: props.i18n, i18n: this.props.i18n,
tReady: props.tReady, tReady: this.props.tReady,
}; };
switch(props.mode) { switch(this.props.mode) {
case "geojson_url": return <GeoJSONSourceUrlEditor {...commonProps} />; case "geojson_url": return <GeoJSONSourceUrlEditor {...commonProps} />;
case "geojson_json": return <GeoJSONSourceFieldJsonEditor {...commonProps} />; case "geojson_json": return <GeoJSONSourceFieldJsonEditor {...commonProps} />;
case "tilejson_vector": return <TileJSONSourceEditor {...commonProps} />; case "tilejson_vector": return <TileJSONSourceEditor {...commonProps} />;
@@ -320,11 +336,11 @@ const ModalSourcesTypeEditorInternal: React.FC<ModalSourcesTypeEditorInternalPro
<FieldNumber <FieldNumber
label={t("Tile Size")} label={t("Tile Size")}
fieldSpec={latest.source_raster.tileSize} fieldSpec={latest.source_raster.tileSize}
onChange={tileSize => props.onChange({ onChange={tileSize => this.props.onChange({
...props.source, ...this.props.source,
tileSize: tileSize tileSize: tileSize
})} })}
value={props.source.tileSize || latest.source_raster.tileSize.default} value={this.props.source.tileSize || latest.source_raster.tileSize.default}
data-wd-key="modal:sources.add.tile_size" data-wd-key="modal:sources.add.tile_size"
/> />
</TileURLSourceEditor>; </TileURLSourceEditor>;
@@ -333,22 +349,22 @@ const ModalSourcesTypeEditorInternal: React.FC<ModalSourcesTypeEditorInternalPro
<FieldNumber <FieldNumber
label={t("Tile Size")} label={t("Tile Size")}
fieldSpec={latest.source_raster_dem.tileSize} fieldSpec={latest.source_raster_dem.tileSize}
onChange={tileSize => props.onChange({ onChange={tileSize => this.props.onChange({
...props.source, ...this.props.source,
tileSize: tileSize tileSize: tileSize
})} })}
value={props.source.tileSize || latest.source_raster_dem.tileSize.default} value={this.props.source.tileSize || latest.source_raster_dem.tileSize.default}
data-wd-key="modal:sources.add.tile_size" data-wd-key="modal:sources.add.tile_size"
/> />
<FieldSelect <FieldSelect
label={t("Encoding")} label={t("Encoding")}
fieldSpec={latest.source_raster_dem.encoding} fieldSpec={latest.source_raster_dem.encoding}
options={Object.keys(latest.source_raster_dem.encoding.values)} options={Object.keys(latest.source_raster_dem.encoding.values)}
onChange={encoding => props.onChange({ onChange={encoding => this.props.onChange({
...props.source, ...this.props.source,
encoding: encoding encoding: encoding
})} })}
value={props.source.encoding || latest.source_raster_dem.encoding.default} value={this.props.source.encoding || latest.source_raster_dem.encoding.default}
/> />
</TileURLSourceEditor>; </TileURLSourceEditor>;
case "pmtiles_vector": return <PMTilesSourceEditor {...commonProps} />; case "pmtiles_vector": return <PMTilesSourceEditor {...commonProps} />;
@@ -356,6 +372,7 @@ const ModalSourcesTypeEditorInternal: React.FC<ModalSourcesTypeEditorInternalPro
case "video": return <VideoSourceEditor {...commonProps} />; case "video": return <VideoSourceEditor {...commonProps} />;
default: return null; default: return null;
} }
}; }
}
export const ModalSourcesTypeEditor = withTranslation()(ModalSourcesTypeEditorInternal); export const ModalSourcesTypeEditor = withTranslation()(ModalSourcesTypeEditorInternal);
+1
View File
@@ -4,6 +4,7 @@ import resourcesToBackend from "i18next-resources-to-backend";
import { initReactI18next } from "react-i18next"; import { initReactI18next } from "react-i18next";
export const supportedLanguages = { export const supportedLanguages = {
"az": "Azərbaycan",
"de": "Deutsch", "de": "Deutsch",
"en": "English", "en": "English",
"fr": "Français", "fr": "Français",
+1 -1
View File
@@ -119,7 +119,7 @@ function createMaplibreExpressionLinter(spec?: StylePropertySpecification) {
const text = view.state.doc.toString(); const text = view.state.doc.toString();
const parsedJson = JSON.parse(text); const parsedJson = JSON.parse(text);
const ast = jsonToAst(text); const ast = jsonToAst(text);
const out = expression.createExpression(parsedJson, spec); const out = expression.createExpression(parsedJson, "expression", spec);
if (out?.result !== "error") { if (out?.result !== "error") {
return []; return [];
} }
+2 -2
View File
@@ -5,14 +5,14 @@ import { type LayerSpecification } from "maplibre-gl";
export function changeType(layer: LayerSpecification, newType: string): LayerSpecification { export function changeType(layer: LayerSpecification, newType: string): LayerSpecification {
const changedPaintProps: LayerSpecification["paint"] = { ...layer.paint }; const changedPaintProps: LayerSpecification["paint"] = { ...layer.paint };
Object.keys(changedPaintProps).forEach(propertyName => { Object.keys(changedPaintProps).forEach(propertyName => {
if(!(propertyName in latest["paint_" + newType])) { if(!(propertyName in ((latest["paint_" + newType as keyof typeof latest]) as string[]))) {
delete changedPaintProps[propertyName as keyof LayerSpecification["paint"]]; delete changedPaintProps[propertyName as keyof LayerSpecification["paint"]];
} }
}); });
const changedLayoutProps: LayerSpecification["layout"] = { ...layer.layout }; const changedLayoutProps: LayerSpecification["layout"] = { ...layer.layout };
Object.keys(changedLayoutProps).forEach(propertyName => { Object.keys(changedLayoutProps).forEach(propertyName => {
if(!(propertyName in latest["layout_" + newType])) { if(!(propertyName in ((latest["layout_" + newType as keyof typeof latest]) as string[]))) {
delete changedLayoutProps[propertyName as keyof LayerSpecification["layout"]]; delete changedLayoutProps[propertyName as keyof LayerSpecification["layout"]];
} }
}); });
+5
View File
@@ -0,0 +1,5 @@
import { setRTLTextPlugin, setWorkerUrl } from "maplibre-gl";
import workerUrl from "maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url";
setWorkerUrl(workerUrl);
setRTLTextPlugin(`${import.meta.env.BASE_URL}mapbox-gl-rtl-text.js`, false);
-3
View File
@@ -1,3 +0,0 @@
import MapLibreGl from "maplibre-gl";
MapLibreGl.setRTLTextPlugin("https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.2.3/mapbox-gl-rtl-text.min.js", false);
-2
View File
@@ -32,8 +32,6 @@ export class ZoomControl {
addEventListeners (){ addEventListeners (){
this._map!.on("render", () => this.updateZoomLevel()); this._map!.on("render", () => this.updateZoomLevel());
this._map!.on("zoomIn", () => this.updateZoomLevel());
this._map!.on("zoomOut", () => this.updateZoomLevel());
} }
onRemove() { onRemove() {
+1
View File
@@ -46,6 +46,7 @@ The following users can help you with the relevant languages:
| ISO Code | Language | User | | ISO Code | Language | User |
|----------|--------------------|--------------------------------------------| |----------|--------------------|--------------------------------------------|
| az | Azerbaijani | [@jamalkamaladdin](https://github.com/jamalkamaladdin) |
| de | German | [@josxha](https://github.com/josxha) | | de | German | [@josxha](https://github.com/josxha) |
| en | English | [@HarelM](https://github.com/HarelM) | | en | English | [@HarelM](https://github.com/HarelM) |
| fr | French | [@lhapaipai](https://github.com/lhapaipai) | | fr | French | [@lhapaipai](https://github.com/lhapaipai) |
+204
View File
@@ -0,0 +1,204 @@
{
"<0>Open in OSM</0>. Opens the current view on openstreetmap.org": "<0>OSM-də aç</0>. Cari görünüşü openstreetmap.org saytında açır",
"Achromatopsia filter": "Axromatopsiya süzgəci",
"Active Sources": "Aktiv Mənbələr",
"Add a new source to your style. You can only choose the source type and id at creation time!": "Üslubunuza yeni mənbə əlavə edin. Mənbə növünü və ID-ni yalnız yaradılma zamanı seçə bilərsiniz!",
"Add filter": "Süzgəc əlavə et",
"Add Layer": "Qat Əlavə Et",
"Add New Source": "Yeni Mənbə Əlavə Et",
"Add one of the publicly available sources to your style.": "Üslubunuza ictimai mənbələrdən birini əlavə edin.",
"Add Source": "Mənbə Əlavə Et",
"Add stop": "Dayanacaq əlavə et",
"Add value": "Dəyər əlavə et",
"Add Variable": "Dəyişən Əlavə Et",
"any filter matches": "istənilən süzgəc uyğun gəlirsə",
"API key for Stadia Maps.": "Stadia Maps üçün API açarı.",
"Base": "Baza",
"Bearing": "İstiqamət",
"Cancel": "Ləğv et",
"Center": "Mərkəz",
"Choose Public Source": "İctimai Mənbə Seç",
"Choose the default Maputnik renderer for this style.": "Bu üslub üçün defolt Maputnik renderer-ini seçin.",
"Click to close the editor": "Redaktoru bağlamaq üçün klikləyin",
"Close": "Bağla",
"Close modal": "Modalı bağla",
"Close popup": "Popapı bağla",
"Cluster": "Klaster",
"Code Editor": "Kod Redaktoru",
"Collapse": "Yığ",
"Color accessibility": "Rəng əlçatanlığı",
"Comment...": "Şərh...",
"Comments": "Şərhlər",
"Comments for the current layer. This is non-standard and not in the spec.": "Cari qat üçün şərhlər. Bu, standart deyil və spesifikasiyada yoxdur.",
"Convert property into a elevation function": "Xassəni hündürlük funksiyasına çevir",
"Convert property into a zoom function": "Xassəni yaxınlaşma funksiyasına çevir",
"Convert property to data function": "Xassəni məlumat funksiyasına çevir",
"Convert to expression": "İfadəyə çevir",
"Coord bottom left": "Koordinat aşağı sol",
"Coord bottom right": "Koordinat aşağı sağ",
"Coord top left": "Koordinat yuxarı sol",
"Coord top right": "Koordinat yuxarı sağ",
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "CORS siyasəti https-dən http üzərindən verilən resursların alınmasına icazə vermir, <1>https://</1> domenindən istifadə edin",
"Create HTML": "HTML Yarat",
"Data Sources": "Məlumat Mənbələri",
"Data Sources modal": "Məlumat Mənbələri modalı",
"Data value": "Məlumat dəyəri",
"Debug": "Sazlama",
"Debug modal": "Sazlama modalı",
"Decrease the pitch by 10 degrees.": "Meyli 10 dərəcə azalt.",
"Decrease the rotation by 15 degrees.": "Fırlanmanı 15 dərəcə azalt.",
"Decrease the zoom level by 1.": "Yaxınlaşma səviyyəsini 1 azalt.",
"Decrease the zoom level by 2.": "Yaxınlaşma səviyyəsini 2 azalt.",
"Default": "Defolt",
"Delete": "Sil",
"Delete expression": "İfadəni sil",
"Delete filter block": "Süzgəc blokunu sil",
"Deuteranopia filter": "Deuteranopiya süzgəci",
"Drag and drop a style JSON file here or click to browse": "Üslub JSON faylını buraya sürükləyib buraxın və ya seçmək üçün klikləyin",
"Duplicate": "Dublikat et",
"Encoding": "Kodlaşdırma",
"Enter URL...": "URL daxil edin...",
"every filter matches": "bütün süzgəclər uyğun gəlirsə",
"Expand": "Genişlət",
"Export modal": "İxrac modalı",
"Filter": "Süzgəc",
"Focus map": "Xəritəyə fokuslan",
"Function": "Funksiya",
"Gallery Styles": "Qalereya Üslubları",
"General layout properties": "Ümumi düzülüş xassələri",
"GeoJSON": "GeoJSON",
"GeoJSON (JSON)": "GeoJSON (JSON)",
"GeoJSON (URL)": "GeoJSON (URL)",
"GeoJSON URL": "GeoJSON URL",
"Global State": "Qlobal Vəziyyət",
"Global State Variables": "Qlobal Vəziyyət Dəyişənləri",
"Glyphs URL": "Şriftlər URL-i",
"Help": "Kömək",
"Hide": "Gizlət",
"Icon layout properties": "İkon düzülüş xassələri",
"Icon paint properties": "İkon boyama xassələri",
"If the Map is in focused you can use the following shortcuts": "Xəritə fokusdadırsa aşağıdakı qısayollardan istifadə edə bilərsiniz",
"Image": "Şəkil",
"Image URL": "Şəkil URL-i",
"Increase the pitch by 10 degrees.": "Meyli 10 dərəcə artır.",
"Increase the rotation by 15 degrees.": "Fırlanmanı 15 dərəcə artır.",
"Increase the zoom level by 1.": "Yaxınlaşma səviyyəsini 1 artır.",
"Increase the zoom level by 2.": "Yaxınlaşma səviyyəsini 2 artır.",
"Input a data property to base styles off of.": "Üslubların əsaslanacağı məlumat xassəsini daxil edin.",
"Input value": "Giriş dəyəri",
"Inspect": "Yoxla",
"JSON Editor": "JSON Redaktoru",
"Key": "Açar",
"Layer": "Qat",
"Layer editor": "Qat redaktoru",
"Layer ID already exists": "Qat ID artıq mövcuddur",
"Layers": "Qatlar",
"Layers list": "Qatlar siyahısı",
"Layout properties": "Düzülüş xassələri",
"Learn More": "Ətraflı Öyrən",
"Light anchor": "İşıq lövbəri",
"Light color": "İşıq rəngi",
"Light intensity": "İşıq intensivliyi",
"Light position": "İşıq mövqeyi",
"Links": "Keçidlər",
"Load from a URL. Note that the URL must have <1>CORS enabled</1>.": "URL-dən yüklə. Qeyd edin ki, URL-də <1>CORS aktiv olmalıdır</1>.",
"Load from URL": "URL-dən yüklə",
"Loading": "Yüklənir",
"Loading style": "Üslub yüklənir",
"LocationIQ Access Token": "LocationIQ Giriş Tokeni",
"Map": "Xəritə",
"Map view": "Xəritə görünüşü",
"MapTiler Access Token": "MapTiler Giriş Tokeni",
"Maputnik on GitHub": "GitHub-da Maputnik",
"Max Zoom": "Maks. Yaxınlaşma",
"Min Zoom": "Min. Yaxınlaşma",
"Move layer down": "Qatı aşağı köçür",
"Move layer up": "Qatı yuxarı köçür",
"Must provide protocol: <1>http://</1> or <3>https://</3>": "Protokol göstərilməlidir: <1>http://</1> və ya <3>https://</3>",
"Must provide protocol: <1>https://</1>": "Protokol göstərilməlidir: <1>https://</1>",
"Name": "Ad",
"Nested filters are not supported.": "İç-içə süzgəclər dəstəklənmir.",
"no filter matches": "heç bir süzgəc uyğun gəlmirsə",
"No global state variables defined. Add variables to create reusable values in your style.": "Heç bir qlobal vəziyyət dəyişəni təyin edilməyib. Üslubunuzda təkrar istifadə oluna bilən dəyərlər yaratmaq üçün dəyişən əlavə edin.",
"Open": "Aç",
"Open a local JSON style from your computer.": "Kompüterinizdən yerli JSON üslubunu açın.",
"OpenLayers (experimental)": "OpenLayers (eksperimental)",
"Open local Style": "Yerli Üslubu Aç",
"Open modal": "Modalı aç",
"Open one of the publicly available styles to start from.": "Başlamaq üçün ictimai üslublardan birini açın.",
"Open Style": "Üslubu Aç",
"Options": "Seçimlər",
"Output value": "Çıxış dəyəri",
"Owner": "Sahib",
"Owner ID of the style. Used by Mapbox or future style APIs.": "Üslubun sahib ID-si. Mapbox və ya gələcək üslub API-ləri tərəfindən istifadə olunur.",
"Paint properties": "Boyama xassələri",
"Pan down by 100 pixels.": "100 piksel aşağı sürüşdür.",
"Pan left by 100 pixels.": "100 piksel sola sürüşdür.",
"Pan right by 100 pixels.": "100 piksel sağa sürüşdür.",
"Pan up by 100 pixels.": "100 piksel yuxarı sürüşdür.",
"Pitch": "Meyl",
"PMTiles URL": "PMTiles URL",
"Press <1>ESC</1> to lose focus of any active elements, then press one of:": "İstənilən aktiv elementin fokusunu itirmək üçün <1>ESC</1> düyməsini basın, sonra bunlardan birini basın:",
"Projection": "Proyeksiya",
"Protanopia filter": "Protanopiya süzgəci",
"Public access token for LocationIQ services.": "LocationIQ xidmətləri üçün ictimai giriş tokeni.",
"Public access token for MapTiler Cloud.": "MapTiler Cloud üçün ictimai giriş tokeni.",
"Public access token for Thunderforest services.": "Thunderforest xidmətləri üçün ictimai giriş tokeni.",
"Raster (Tile URLs)": "Rastr (Kafel URL-ləri)",
"Raster (TileJSON URL)": "Rastr (TileJSON URL)",
"Raster DEM (TileJSON URL)": "Rastr DEM (TileJSON URL)",
"Raster DEM (XYZ URLs)": "Rastr DEM (XYZ URL-ləri)",
"Remove '{{sourceId}}' source": "'{{sourceId}}' mənbəsini sil",
"Remove array item": "Massiv elementini sil",
"Remove variable": "Dəyişəni sil",
"Remove zoom level from stop": "Dayanacaqdan yaxınlaşma səviyyəsini sil",
"Revert from expression": "İfadədən geri qaytar",
"Save": "Yadda saxla",
"Save as": "Fərqli yadda saxla",
"Save Style": "Üslubu Yadda Saxla",
"Save the JSON style to your computer.": "JSON üslubunu kompüterinizə yadda saxlayın.",
"Scheme Type": "Sxem Növü",
"Search": "Axtar",
"Select a type of data scale (default is 'categorical').": "Məlumat şkalasının növünü seçin (defolt 'categorical'dır).",
"Shortcuts": "Qısayollar",
"Shortcuts menu": "Qısayollar menyusu",
"Show": "Göstər",
"Source": "Mənbə",
"Source ID": "Mənbə ID",
"Source Layer": "Mənbə Qatı",
"Source Type": "Mənbə Növü",
"Sources": "Mənbələr",
"Sprite URL": "Sprite URL-i",
"Stadia Maps API Key": "Stadia Maps API Açarı",
"Stops": "Dayanacaqlar",
"Style Renderer": "Üslub Renderer-i",
"Style Settings": "Üslub Parametrləri",
"Style Settings modal": "Üslub Parametrləri modalı",
"Style URL": "Üslub URL-i",
"Switch to filter editor.": "Süzgəc redaktoruna keç.",
"switch to layer": "qata keç",
"Terrain exaggeration": "Relyef şişirdilməsi",
"Terrain source": "Relyef mənbəyi",
"Text layout properties": "Mətn düzülüş xassələri",
"Text paint properties": "Mətn boyama xassələri",
"Thunderforest Access Token": "Thunderforest Giriş Tokeni",
"Tile Size": "Kafel Ölçüsü",
"Tile URL": "Kafel URL-i",
"TileJSON URL": "TileJSON URL",
"Toggle inspect": "Yoxlamanı aç/bağla",
"Transition delay": "Keçid gecikməsi",
"Transition duration": "Keçid müddəti",
"Tritanopia filter": "Tritanopiya süzgəci",
"Type": "Növ",
"Unique ID that identifies the source and is used in the layer to reference the source.": "Mənbəni müəyyən edən və qatda mənbəyə istinad üçün istifadə olunan unikal ID.",
"Upgrade to expression": "İfadəyə yüksəlt",
"Value": "Dəyər",
"Vector (PMTiles)": "Vektor (PMTiles)",
"Vector (Tile URLs)": "Vektor (Kafel URL-ləri)",
"Vector (TileJSON URL)": "Vektor (TileJSON URL)",
"Video": "Video",
"Video URL": "Video URL-i",
"View": "Görünüş",
"You've entered an old style filter.": "Köhnə üslub süzgəci daxil etmisiniz.",
"Zoom": "Yaxınlaşma"
}
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "Keine globalen Zustandsvariablen definiert. Füge Variablen hinzu, um wiederverwendbare Werte in deinem Stil zu erstellen.", "No global state variables defined. Add variables to create reusable values in your style.": "Keine globalen Zustandsvariablen definiert. Füge Variablen hinzu, um wiederverwendbare Werte in deinem Stil zu erstellen.",
"Open": "Öffnen", "Open": "Öffnen",
"Open a local JSON style from your computer.": "Öffne einen lokalen JSON Stil von deinem Computer.", "Open a local JSON style from your computer.": "Öffne einen lokalen JSON Stil von deinem Computer.",
"Open Layers (experimental)": "Ebenen öffnen (experimentell)", "OpenLayers (experimental)": "OpenLayers (experimentell)",
"Open local Style": "Lokalen Stil öffnen", "Open local Style": "Lokalen Stil öffnen",
"Open modal": "Modale Fenster öffnen", "Open modal": "Modale Fenster öffnen",
"Open one of the publicly available styles to start from.": "Öffne einen der öffentlich verfügbaren Stile, um zu starten.", "Open one of the publicly available styles to start from.": "Öffne einen der öffentlich verfügbaren Stile, um zu starten.",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "Aucune variable d'état global définie. Ajoutez des variables pour créer des valeurs réutilisables dans votre style.", "No global state variables defined. Add variables to create reusable values in your style.": "Aucune variable d'état global définie. Ajoutez des variables pour créer des valeurs réutilisables dans votre style.",
"Open": "Ouvrir", "Open": "Ouvrir",
"Open a local JSON style from your computer.": "Ouvrir un style JSON local depuis votre ordinateur.", "Open a local JSON style from your computer.": "Ouvrir un style JSON local depuis votre ordinateur.",
"Open Layers (experimental)": "Open Layers (expérimental)", "OpenLayers (experimental)": "OpenLayers (expérimental)",
"Open local Style": "Ouvrir un style local", "Open local Style": "Ouvrir un style local",
"Open modal": "Ouvrir (modale)", "Open modal": "Ouvrir (modale)",
"Open one of the publicly available styles to start from.": "Ouvrez l'un des styles publics disponibles pour commencer.", "Open one of the publicly available styles to start from.": "Ouvrez l'un des styles publics disponibles pour commencer.",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "לא הוגדרו משתני מצב גלובלי. הוסף משתנים כדי ליצור ערכים שניתן לעשות בהם שימוש חוזר בסטייל שלך.", "No global state variables defined. Add variables to create reusable values in your style.": "לא הוגדרו משתני מצב גלובלי. הוסף משתנים כדי ליצור ערכים שניתן לעשות בהם שימוש חוזר בסטייל שלך.",
"Open": "פתיחה", "Open": "פתיחה",
"Open a local JSON style from your computer.": "פתיחת סטייל JSON מקומי מהמחשב שלך.", "Open a local JSON style from your computer.": "פתיחת סטייל JSON מקומי מהמחשב שלך.",
"Open Layers (experimental)": "Open Layers (experimental)", "OpenLayers (experimental)": "OpenLayers (experimental)",
"Open local Style": "פתיחת סטייל מקומי", "Open local Style": "פתיחת סטייל מקומי",
"Open modal": "פתיחת חלונית", "Open modal": "פתיחת חלונית",
"Open one of the publicly available styles to start from.": "פתיחת אחד הסטייליםפ הציבוריים על מנת להתחיל מהם.", "Open one of the publicly available styles to start from.": "פתיחת אחד הסטייליםפ הציבוריים על מנת להתחיל מהם.",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "Nessuna variabile di stato globale definita. Aggiungi variabili per creare valori riutilizzabili nel tuo stile.", "No global state variables defined. Add variables to create reusable values in your style.": "Nessuna variabile di stato globale definita. Aggiungi variabili per creare valori riutilizzabili nel tuo stile.",
"Open": "Apri", "Open": "Apri",
"Open a local JSON style from your computer.": "Apri uno stile JSON dal tuo computer.", "Open a local JSON style from your computer.": "Apri uno stile JSON dal tuo computer.",
"Open Layers (experimental)": "Apri livelli (sperimentale)", "OpenLayers (experimental)": "OpenLayers (sperimentale)",
"Open local Style": "Apri stile locale", "Open local Style": "Apri stile locale",
"Open modal": "Apri finestra modale", "Open modal": "Apri finestra modale",
"Open one of the publicly available styles to start from.": "Apro uno degli stili pubblici a partire da.", "Open one of the publicly available styles to start from.": "Apro uno degli stili pubblici a partire da.",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "グローバルステート変数が定義されていません。スタイルで再利用可能な値を作成するには、変数を追加してください。", "No global state variables defined. Add variables to create reusable values in your style.": "グローバルステート変数が定義されていません。スタイルで再利用可能な値を作成するには、変数を追加してください。",
"Open": "開く", "Open": "開く",
"Open a local JSON style from your computer.": "コンピュータからローカルJSONスタイルを開きます。", "Open a local JSON style from your computer.": "コンピュータからローカルJSONスタイルを開きます。",
"Open Layers (experimental)": "Open Layers (実験的)", "OpenLayers (experimental)": "OpenLayers (実験的)",
"Open local Style": "ローカルスタイルを開く", "Open local Style": "ローカルスタイルを開く",
"Open modal": "モーダルを開く", "Open modal": "モーダルを開く",
"Open one of the publicly available styles to start from.": "公開スタイルを選んで開始しましょう。", "Open one of the publicly available styles to start from.": "公開スタイルを選んで開始しましょう。",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "전역 상태 변수가 정의되지 않았습니다. 스타일에서 재사용 가능한 값을 생성하려면 변수를 추가하세요.", "No global state variables defined. Add variables to create reusable values in your style.": "전역 상태 변수가 정의되지 않았습니다. 스타일에서 재사용 가능한 값을 생성하려면 변수를 추가하세요.",
"Open": "열기", "Open": "열기",
"Open a local JSON style from your computer.": "컴퓨터에서 로컬 JSON 스타일을 엽니다.", "Open a local JSON style from your computer.": "컴퓨터에서 로컬 JSON 스타일을 엽니다.",
"Open Layers (experimental)": "레이어 열기 (실험적)", "OpenLayers (experimental)": "OpenLayers (실험적)",
"Open local Style": "로컬 스타일 열기", "Open local Style": "로컬 스타일 열기",
"Open modal": "모달 열기", "Open modal": "모달 열기",
"Open one of the publicly available styles to start from.": "공개 스타일 중 하나를 선택하여 시작하세요.", "Open one of the publicly available styles to start from.": "공개 스타일 중 하나를 선택하여 시작하세요.",
+1 -1
View File
@@ -122,7 +122,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "Genel durum değişkeni tanımlanmadı. Stilinizde yeniden kullanılabilir değerler oluşturmak için değişken ekleyin.", "No global state variables defined. Add variables to create reusable values in your style.": "Genel durum değişkeni tanımlanmadı. Stilinizde yeniden kullanılabilir değerler oluşturmak için değişken ekleyin.",
"Open": "Aç", "Open": "Aç",
"Open a local JSON style from your computer.": "Bilgisayarınızdan yerel bir JSON stili açın.", "Open a local JSON style from your computer.": "Bilgisayarınızdan yerel bir JSON stili açın.",
"Open Layers (experimental)": "Open Layers (deneysel)", "OpenLayers (experimental)": "OpenLayers (deneysel)",
"Open local Style": "Yerel Stili Aç", "Open local Style": "Yerel Stili Aç",
"Open modal": "Modalı aç", "Open modal": "Modalı aç",
"Open one of the publicly available styles to start from.": "Başlamak için herkese açık stillerden birini açın.", "Open one of the publicly available styles to start from.": "Başlamak için herkese açık stillerden birini açın.",
+1 -1
View File
@@ -121,7 +121,7 @@
"No global state variables defined. Add variables to create reusable values in your style.": "未定义全局状态变量。添加变量以在样式中创建可重用的值。", "No global state variables defined. Add variables to create reusable values in your style.": "未定义全局状态变量。添加变量以在样式中创建可重用的值。",
"Open": "打开", "Open": "打开",
"Open a local JSON style from your computer.": "从您的计算机打开本地JSON样式。", "Open a local JSON style from your computer.": "从您的计算机打开本地JSON样式。",
"Open Layers (experimental)": "开放图层(实验性)", "OpenLayers (experimental)": "OpenLayers(实验性)",
"Open local Style": "打开本地样式", "Open local Style": "打开本地样式",
"Open modal": "打开模态框", "Open modal": "打开模态框",
"Open one of the publicly available styles to start from.": "打开一个公开可用的样式开始。", "Open one of the publicly available styles to start from.": "打开一个公开可用的样式开始。",
+1 -1
View File
@@ -214,7 +214,7 @@
// SPACE HELPER // SPACE HELPER
.maputnik-space { .maputnik-space {
@include mixins.vendor-prefix(flex-grow, 1); flex-grow: 1;
} }
// MESSAGE PANEL // MESSAGE PANEL
+1 -2
View File
@@ -101,8 +101,7 @@
.maputnik-select { .maputnik-select {
@extend .maputnik-input !optional; /* stylelint-disable-line */ @extend .maputnik-input !optional; /* stylelint-disable-line */
-moz-appearance: none; appearance: none;
-webkit-appearance: none;
background: vars.$color-gray url("#{vars.$icon-down-arrow}") right center no-repeat; background: vars.$color-gray url("#{vars.$icon-down-arrow}") right center no-repeat;
color: vars.$color-white; color: vars.$color-white;
background-position: calc(100% - 2px) center; background-position: calc(100% - 2px) center;
-1
View File
@@ -74,7 +74,6 @@
line-height: 1.3; line-height: 1.3;
max-height: 50px; max-height: 50px;
opacity: 1; opacity: 1;
-webkit-transition: opacity 600ms, visibility 600ms;
transition: opacity 600ms, visibility 600ms; transition: opacity 600ms, visibility 600ms;
&:focus-within { &:focus-within {
+2 -14
View File
@@ -1,21 +1,9 @@
@mixin vendor-prefix($name, $argument) {
-webkit-#{$name}: #{$argument};
-ms-#{$name}: #{$argument};
-moz-#{$name}: #{$argument};
-o-#{$name}: #{$argument};
#{$name}: #{$argument};
}
@mixin flex-row { @mixin flex-row {
display: flex; display: flex;
display: -ms-flexbox; flex-direction: row;
@include vendor-prefix(flex-direction, row);
} }
@mixin flex-column { @mixin flex-column {
display: flex; display: flex;
display: -ms-flexbox; flex-direction: column;
@include vendor-prefix(flex-direction, column);
} }
+1 -1
View File
@@ -7,7 +7,7 @@
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
border-radius: 6px; border-radius: 6px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #666; background-color: #666;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
+1 -1
View File
@@ -3,7 +3,7 @@
"target": "ES2020", "target": "ES2020",
"useDefineForClassFields": true, "useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"], "lib": ["ES2020", "DOM", "DOM.Iterable"],
"types": ["geojson", "@types/wicg-file-system-access", "node"], "types": ["geojson", "@types/wicg-file-system-access", "node", "vite/client"],
"module": "ESNext", "module": "ESNext",
"skipLibCheck": true, "skipLibCheck": true,
+8 -2
View File
@@ -7,7 +7,10 @@ export default defineConfig(({ mode }) => ({
port: 8888, port: 8888,
}, },
build: { build: {
sourcemap: true sourcemap: true,
rolldownOptions: {
checks: { invalidAnnotation: false },
},
}, },
plugins: [ plugins: [
react(), react(),
@@ -17,8 +20,11 @@ export default defineConfig(({ mode }) => ({
forceBuildInstrument: true, // Instrument the source so e2e runs can collect coverage forceBuildInstrument: true, // Instrument the source so e2e runs can collect coverage
}), }),
], ],
optimizeDeps: {
exclude: ["maplibre-gl/dist/maplibre-gl-worker.mjs"],
},
base: mode === "desktop" ? "/" : "/maputnik/", base: mode === "desktop" ? "/" : "/maputnik/",
define: { define: {
global: "window" global: "globalThis"
}, },
})); }));