dependabot[bot] opened a new pull request, #76620: URL: https://github.com/apache/airflow/pull/76620
Bumps the 3-4-core-ui-package-updates group with 13 updates in the /airflow-core/src/airflow/ui directory: | Package | From | To | | --- | --- | --- | | [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) | `5.105.0` | `5.105.2` | | [@tanstack/react-virtual](https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual) | `3.14.24` | `3.14.25` | | [@xyflow/react](https://github.com/xyflow/xyflow/tree/HEAD/packages/react) | `12.12.0` | `12.12.1` | | [i18next](https://github.com/i18next/i18next) | `26.5.12` | `26.7.1` | | [i18next-browser-languagedetector](https://github.com/i18next/i18next-browser-languageDetector) | `8.2.4` | `8.3.0` | | [i18next-http-backend](https://github.com/i18next/i18next-http-backend) | `4.0.7` | `4.0.9` | | [react-i18next](https://github.com/i18next/react-i18next) | `17.1.9` | `17.1.11` | | [react-resizable-panels](https://github.com/bvaughn/react-resizable-panels) | `4.15.3` | `4.16.1` | | [@tanstack/eslint-plugin-query](https://github.com/TanStack/query/tree/HEAD/packages/eslint-plugin-query) | `5.105.0` | `5.105.2` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.1.2` | `6.2.1` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `5.0.5` | `5.1.0` | | [globals](https://github.com/sindresorhus/globals) | `17.13.0` | `17.14.0` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `5.0.5` | `5.1.0` | Updates `@tanstack/react-query` from 5.105.0 to 5.105.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/TanStack/query/releases">@tanstack/react-query's releases</a>.</em></p> <blockquote> <h2><code>@tanstack/react-query-devtools</code><a href="https://github.com/5"><code>@5</code></a>.105.2</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies [<a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a>, <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a>]: <ul> <li><code>@tanstack/react-query</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> <li><code>@tanstack/query-devtools</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> </ul> </li> </ul> <h2><code>@tanstack/react-query-next-experimental</code><a href="https://github.com/5"><code>@5</code></a>.105.2</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies [<a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a>, <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a>]: <ul> <li><code>@tanstack/react-query</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> </ul> </li> </ul> <h2><code>@tanstack/react-query-persist-client</code><a href="https://github.com/5"><code>@5</code></a>.105.2</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies [<a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a>, <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a>]: <ul> <li><code>@tanstack/react-query</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> <li><code>@tanstack/query-persist-client-core</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> </ul> </li> </ul> <h2><code>@tanstack/react-query</code><a href="https://github.com/5"><code>@5</code></a>.105.2</h2> <h3>Patch Changes</h3> <ul> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/12230">#12230</a> <a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a> - Update the observer options before subscribing so revealing an <code><Activity></code> tree whose query key changed while hidden no longer fetches the previous key.</p> </li> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/12480">#12480</a> <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a> - Exclude <code>status</code> from the filters accepted by <code>QueryClient.isMutating</code>, <code>useIsMutating</code>, and <code>injectIsMutating</code>. These APIs always count mutations with <code>status: 'pending'</code>.</p> </li> <li> <p>Updated dependencies [<a href="https://github.com/TanStack/query/commit/2ee2fd935acd88532255947c4b5e29baffd21ce8"><code>2ee2fd9</code></a>, <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a>, <a href="https://github.com/TanStack/query/commit/e69cac69d99cc3c4f6f32b2ad8aad53da83b4a72"><code>e69cac6</code></a>, <a href="https://github.com/TanStack/query/commit/f2215d25945e6461252b7c32bf822f31239e507e"><code>f2215d2</code></a>, <a href="https://github.com/TanStack/query/commit/86e79571fd45f29ab7d172102fdd718d3b8bde69"><code>86e7957</code></a>, <a href="https://github.com/TanStack/query/commit/b6576b388f2784839081358fa82744b0aacdeecd"><code>b6576b3</code></a>, <a href="https://github.com/TanStack/query/commit/af0e0ef5fc04e9d232fdc3aebd24ffe528b256d7"><code>af0e0ef</code></a>, <a href="https://github.com/TanStack/query/commit/05d9b6a40b9d4ac49943e9d881789e098db5bdfa"><code>05d9b6a</code></a>]:</p> <ul> <li><code>@tanstack/query-core</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md">@tanstack/react-query's changelog</a>.</em></p> <blockquote> <h2>5.105.2</h2> <h3>Patch Changes</h3> <ul> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/12230">#12230</a> <a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a> - Update the observer options before subscribing so revealing an <code><Activity></code> tree whose query key changed while hidden no longer fetches the previous key.</p> </li> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/12480">#12480</a> <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a> - Exclude <code>status</code> from the filters accepted by <code>QueryClient.isMutating</code>, <code>useIsMutating</code>, and <code>injectIsMutating</code>. These APIs always count mutations with <code>status: 'pending'</code>.</p> </li> <li> <p>Updated dependencies [<a href="https://github.com/TanStack/query/commit/2ee2fd935acd88532255947c4b5e29baffd21ce8"><code>2ee2fd9</code></a>, <a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a>, <a href="https://github.com/TanStack/query/commit/e69cac69d99cc3c4f6f32b2ad8aad53da83b4a72"><code>e69cac6</code></a>, <a href="https://github.com/TanStack/query/commit/f2215d25945e6461252b7c32bf822f31239e507e"><code>f2215d2</code></a>, <a href="https://github.com/TanStack/query/commit/86e79571fd45f29ab7d172102fdd718d3b8bde69"><code>86e7957</code></a>, <a href="https://github.com/TanStack/query/commit/b6576b388f2784839081358fa82744b0aacdeecd"><code>b6576b3</code></a>, <a href="https://github.com/TanStack/query/commit/af0e0ef5fc04e9d232fdc3aebd24ffe528b256d7"><code>af0e0ef</code></a>, <a href="https://github.com/TanStack/query/commit/05d9b6a40b9d4ac49943e9d881789e098db5bdfa"><code>05d9b6a</code></a>]:</p> <ul> <li><code>@tanstack/query-core</code><a href="https://github.com/5"><code>@5</code></a>.105.2</li> </ul> </li> </ul> <h2>5.105.1</h2> <h3>Patch Changes</h3> <ul> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/11373">#11373</a> <a href="https://github.com/TanStack/query/commit/7ccba6e959fcb9c51e691db9e2b09ff41d21e0b6"><code>7ccba6e</code></a> - fix({react,preact,angular,solid,vue}-query/infiniteQueryOptions): correct the overload selected for a possibly-undefined 'initialData'</p> </li> <li> <p><a href="https://redirect.github.com/TanStack/query/pull/12390">#12390</a> <a href="https://github.com/TanStack/query/commit/18e54bfac3dc3756afdb8840418d831c61bc15bf"><code>18e54bf</code></a> - Exclude <code>fetchStatus</code> from the filters accepted by <code>QueryClient.isFetching</code>, <code>useIsFetching</code>, and <code>injectIsFetching</code>. These APIs always count queries with <code>fetchStatus: 'fetching'</code>.</p> </li> <li> <p>Updated dependencies [<a href="https://github.com/TanStack/query/commit/6f8a48d543b499b6d9b0e95050c28183c8c18ae0"><code>6f8a48d</code></a>, <a href="https://github.com/TanStack/query/commit/18e54bfac3dc3756afdb8840418d831c61bc15bf"><code>18e54bf</code></a>]:</p> <ul> <li><code>@tanstack/query-core</code><a href="https://github.com/5"><code>@5</code></a>.105.1</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/TanStack/query/commit/d6b2b643f64cf29d18563d326700b61cc09fd432"><code>d6b2b64</code></a> ci: Version Packages (<a href="https://github.com/TanStack/query/tree/HEAD/packages/react-query/issues/12476">#12476</a>)</li> <li><a href="https://github.com/TanStack/query/commit/8d0dc278a728a97eb677b6f2baf37d1677c2edc1"><code>8d0dc27</code></a> fix(query-core): exclude status from mutation count filters (<a href="https://github.com/TanStack/query/tree/HEAD/packages/react-query/issues/12480">#12480</a>)</li> <li><a href="https://github.com/TanStack/query/commit/1e1caa5a32847969f7157627cd805bd8103cd873"><code>1e1caa5</code></a> fix({react,preact}-query): set the observer options before subscribing (<a href="https://github.com/TanStack/query/tree/HEAD/packages/react-query/issues/12230">#12230</a>)</li> <li><a href="https://github.com/TanStack/query/commit/a6be1cede9b69b56ee0bd6c84641dd3899c86ed2"><code>a6be1ce</code></a> ci: Version Packages (<a href="https://github.com/TanStack/query/tree/HEAD/packages/react-query/issues/12391">#12391</a>)</li> <li><a href="https://github.com/TanStack/query/commit/979695d0a2daa8662bdfcbf9f4ae9c9805d97dec"><code>979695d</code></a> docs({react,preact,angular,solid,svelte,vue}-query): describe when the 'Defin...</li> <li><a href="https://github.com/TanStack/query/commit/7ccba6e959fcb9c51e691db9e2b09ff41d21e0b6"><code>7ccba6e</code></a> fix({react,preact,angular,solid,vue}-query/infiniteQueryOptions): correct the...</li> <li><a href="https://github.com/TanStack/query/commit/18e54bfac3dc3756afdb8840418d831c61bc15bf"><code>18e54bf</code></a> fix(query-core): exclude fetchStatus from fetching filters (<a href="https://github.com/TanStack/query/tree/HEAD/packages/react-query/issues/12390">#12390</a>)</li> <li>See full diff in <a href="https://github.com/TanStack/query/commits/@tanstack/[email protected]/packages/react-query">compare view</a></li> </ul> </details> <br /> Updates `@tanstack/react-virtual` from 3.14.24 to 3.14.25 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/TanStack/virtual/releases">@tanstack/react-virtual's releases</a>.</em></p> <blockquote> <h2><code>@tanstack/react-virtual</code><a href="https://github.com/3"><code>@3</code></a>.14.25</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies [<a href="https://github.com/TanStack/virtual/commit/9d7ff6781767f1b9ea30ef69f42d72d8524ab75d"><code>9d7ff67</code></a>]: <ul> <li><code>@tanstack/virtual-core</code><a href="https://github.com/3"><code>@3</code></a>.19.10</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/TanStack/virtual/blob/main/packages/react-virtual/CHANGELOG.md">@tanstack/react-virtual's changelog</a>.</em></p> <blockquote> <h2>3.14.25</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies [<a href="https://github.com/TanStack/virtual/commit/9d7ff6781767f1b9ea30ef69f42d72d8524ab75d"><code>9d7ff67</code></a>]: <ul> <li><code>@tanstack/virtual-core</code><a href="https://github.com/3"><code>@3</code></a>.19.10</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/TanStack/virtual/commit/0a368c76950610227af7a5d3695e53877f9ad914"><code>0a368c7</code></a> ci: Version Packages (<a href="https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual/issues/1358">#1358</a>)</li> <li>See full diff in <a href="https://github.com/TanStack/virtual/commits/@tanstack/[email protected]/packages/react-virtual">compare view</a></li> </ul> </details> <br /> Updates `@xyflow/react` from 12.12.0 to 12.12.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/xyflow/xyflow/releases">@xyflow/react's releases</a>.</em></p> <blockquote> <h2><code>@xyflow/react</code><a href="https://github.com/12"><code>@12</code></a>.12.1</h2> <h3>Patch Changes</h3> <ul> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6068">#6068</a> <a href="https://github.com/xyflow/xyflow/commit/7813eebf06ca22dadbeb7bb919ff8cd8388adcab"><code>7813eeb</code></a> - Cancel a pending click connection when clicking the pane and call <code>onClickConnectEnd</code> / <code>onclickconnectend</code></p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6097">#6097</a> <a href="https://github.com/xyflow/xyflow/commit/d150c38a46c4e6ded900676f4eafbbae60e37a4c"><code>d150c38</code></a> - Don't mutate the internal selection state</p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/5650">#5650</a> <a href="https://github.com/xyflow/xyflow/commit/f7cddb9552be66bdd03d82f8387fba2e3ee7b6f9"><code>f7cddb9</code></a> - Infer the type of <code>pathOptions</code> in <code>EdgeProps</code> from the edge type instead of using <code>any</code>.</p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6090">#6090</a> <a href="https://github.com/xyflow/xyflow/commit/b235ea03677fa500b9474aedf0bdd35abaf76b78"><code>b235ea0</code></a> - Respect <code>nodeOrigin</code> in <code>isNodeIntersecting</code> and <code>getIntersectingNodes</code> when you pass a node object instead of <code>{ id }</code></p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6054">#6054</a> <a href="https://github.com/xyflow/xyflow/commit/c7d0fcb3372e234c33d2c87bec8d4c8394abab74"><code>c7d0fcb</code></a> - Disconnect the <code>ResizeObserver</code>s when a flow unmounts</p> </li> <li> <p>Updated dependencies [<a href="https://github.com/xyflow/xyflow/commit/d150c38a46c4e6ded900676f4eafbbae60e37a4c"><code>d150c38</code></a>, <a href="https://github.com/xyflow/xyflow/commit/8483a2f27d6f856ff595be4239cf736b118318c0"><code>8483a2f</code></a>, <a href="https://github.com/xyflow/xyflow/commit/c7d0fcb3372e234c33d2c87bec8d4c8394abab74"><code>c7d0fcb</code></a>, <a href="https://github.com/xyflow/xyflow/commit/9dcbd29a8e597b6f4cd26ebf64f755d2fb96332b"><code>9dcbd29</code></a>, <a href="https://github.com/xyflow/xyflow/commit/cba335d7cdb809fe274591985bfa377ca2e21bcf"><code>cba335d</code></a>]:</p> <ul> <li><code>@xyflow/system</code><a href="https://github.com/0"><code>@0</code></a>.0.84</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/xyflow/xyflow/blob/main/packages/react/CHANGELOG.md">@xyflow/react's changelog</a>.</em></p> <blockquote> <h2>12.12.1</h2> <h3>Patch Changes</h3> <ul> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6068">#6068</a> <a href="https://github.com/xyflow/xyflow/commit/7813eebf06ca22dadbeb7bb919ff8cd8388adcab"><code>7813eeb</code></a> - Cancel a pending click connection when clicking the pane and call <code>onClickConnectEnd</code> / <code>onclickconnectend</code></p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6097">#6097</a> <a href="https://github.com/xyflow/xyflow/commit/d150c38a46c4e6ded900676f4eafbbae60e37a4c"><code>d150c38</code></a> - Don't mutate the internal selection state</p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/5650">#5650</a> <a href="https://github.com/xyflow/xyflow/commit/f7cddb9552be66bdd03d82f8387fba2e3ee7b6f9"><code>f7cddb9</code></a> - Infer the type of <code>pathOptions</code> in <code>EdgeProps</code> from the edge type instead of using <code>any</code>.</p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6090">#6090</a> <a href="https://github.com/xyflow/xyflow/commit/b235ea03677fa500b9474aedf0bdd35abaf76b78"><code>b235ea0</code></a> - Respect <code>nodeOrigin</code> in <code>isNodeIntersecting</code> and <code>getIntersectingNodes</code> when you pass a node object instead of <code>{ id }</code></p> </li> <li> <p><a href="https://redirect.github.com/xyflow/xyflow/pull/6054">#6054</a> <a href="https://github.com/xyflow/xyflow/commit/c7d0fcb3372e234c33d2c87bec8d4c8394abab74"><code>c7d0fcb</code></a> - Disconnect the <code>ResizeObserver</code>s when a flow unmounts</p> </li> <li> <p>Updated dependencies [<a href="https://github.com/xyflow/xyflow/commit/d150c38a46c4e6ded900676f4eafbbae60e37a4c"><code>d150c38</code></a>, <a href="https://github.com/xyflow/xyflow/commit/8483a2f27d6f856ff595be4239cf736b118318c0"><code>8483a2f</code></a>, <a href="https://github.com/xyflow/xyflow/commit/c7d0fcb3372e234c33d2c87bec8d4c8394abab74"><code>c7d0fcb</code></a>, <a href="https://github.com/xyflow/xyflow/commit/9dcbd29a8e597b6f4cd26ebf64f755d2fb96332b"><code>9dcbd29</code></a>, <a href="https://github.com/xyflow/xyflow/commit/cba335d7cdb809fe274591985bfa377ca2e21bcf"><code>cba335d</code></a>]:</p> <ul> <li><code>@xyflow/system</code><a href="https://github.com/0"><code>@0</code></a>.0.84</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/xyflow/xyflow/commit/7599c7f12e061d8befef36f3f3ced86f75938b8a"><code>7599c7f</code></a> chore(packages): bump</li> <li><a href="https://github.com/xyflow/xyflow/commit/d4bc936edad07aba995dbdb8e2c63af8cdd631c9"><code>d4bc936</code></a> Merge pull request <a href="https://github.com/xyflow/xyflow/tree/HEAD/packages/react/issues/5650">#5650</a> from keepmhwn/fix/path-options-type</li> <li><a href="https://github.com/xyflow/xyflow/commit/c4fdcb1150e247b715545fc1b045a213daed37ce"><code>c4fdcb1</code></a> Merge pull request <a href="https://github.com/xyflow/xyflow/tree/HEAD/packages/react/issues/6097">#6097</a> from xyflow/fix/internal-selection</li> <li><a href="https://github.com/xyflow/xyflow/commit/5c90af484a4eece91fb09aaae6cb6937e1b9da23"><code>5c90af4</code></a> fix(react): cleanup internal selection handling <a href="https://github.com/xyflow/xyflow/tree/HEAD/packages/react/issues/6096">#6096</a></li> <li><a href="https://github.com/xyflow/xyflow/commit/93b7a917ff588906ceb88ab6cf13c3e89be2ca14"><code>93b7a91</code></a> chore(pane): cleanup</li> <li><a href="https://github.com/xyflow/xyflow/commit/7abb6f0683c42f4ff30d0013ad88afb537ee042d"><code>7abb6f0</code></a> Add Svelte pane cancellation and merge latest main</li> <li><a href="https://github.com/xyflow/xyflow/commit/b235ea03677fa500b9474aedf0bdd35abaf76b78"><code>b235ea0</code></a> fix: respect flow nodeOrigin in root node intersections</li> <li><a href="https://github.com/xyflow/xyflow/commit/22388dfee0b27c76faaeecbe09937ee1563cd1b1"><code>22388df</code></a> chore(useResizeHandler): cleanup</li> <li><a href="https://github.com/xyflow/xyflow/commit/7813eebf06ca22dadbeb7bb919ff8cd8388adcab"><code>7813eeb</code></a> fix(react): cancel click connections on pane click</li> <li><a href="https://github.com/xyflow/xyflow/commit/c7d0fcb3372e234c33d2c87bec8d4c8394abab74"><code>c7d0fcb</code></a> fix: disconnect ResizeObservers when a flow unmounts</li> <li>See full diff in <a href="https://github.com/xyflow/xyflow/commits/@xyflow/[email protected]/packages/react">compare view</a></li> </ul> </details> <br /> Updates `i18next` from 26.5.12 to 26.7.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.7.1</h2> <ul> <li>fix: <code>reloadResources()</code> retries the bundles that failed to load. The load queue skipped them also when reloading, so a language whose first load failed (a backend or network outage at startup) stayed missing. i18next-http-backend 4.0.8, i18next-chained-backend 5.0.7 and i18next-locize-backend 10.0.5 reload through <code>reloadResources()</code> with i18next 26.7, so their <code>reloadInterval</code> no longer recovered from such a failure, as their own reload did before.</li> <li>fix: <code>reloadResources()</code> without languages reloads the current languages and every language the backend loaded or tried to load, for the instance and its clones, as the API docs describe ("pass languages and namespaces if you don't want to reload all"). It reloaded only the current languages, so on a server (one clone per request with i18next-http-middleware) a backend's <code>reloadInterval</code> never refreshed the languages loaded for requests. It never requests <code>cimode</code>. With languages given, nothing changes.</li> </ul> <h2>v26.7.0</h2> <p>The last 26.x minor before v27, which follows in about a week. It adds the APIs v27 builds on, and with <code>debug: true</code> it warns wherever a setup relies on something v27 changes. Most of the v27 defaults are existing options, so you can try them now:</p> <pre lang="js"><code>i18next.init({ debug: true, // prints the warnings below fallbackLng: 'en', // v27: fallbackLng defaults to false, set your source language (no implicit 'dev') returnEmptyString: false, // v27 default: an empty string falls back like a missing key cleanCode: true, // close to v27, which canonicalizes codes without a region ('EN' becomes 'en') }); </code></pre> <pre lang="ts"><code>declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; // v27 default returnEmptyString: false; // v27 default } } </code></pre> <p>The other v27 changes (<code>/</code> no longer escaped in values, a logger and post-processors per instance, the key instead of a sentence for an object hit, the dotted-language store calls and <code>*Escaped</code> options removed) have no switch; the debug warnings below show where they apply.</p> <ul> <li>feat: with the default <code>skipOnVariables: true</code>, a missing interpolation variable is now logged in debug mode, once per string and variable: <code>missed to pass in variable name for interpolating Hello {{name}}</code>. The raw <code>{{name}}</code> reached the UI without any log line, even with <code>debug: true</code>, because the warning only ran with <code>skipOnVariables: false</code>. A variable passed as <code>undefined</code> and a <code>missingInterpolationHandler</code> still log nothing.</li> <li>feat: <code>i18next.hydrate(resources, lng)</code> puts resources rendered on the server into the store and changes to the server's language, each only the first time. It does what react-i18next's <code>useSSR</code> did by writing <code>resourceStore.data</code>, <code>options.ns</code>, <code>isInitialized</code>, <code>initializedStoreOnce</code> and <code>initializedLanguageOnce</code> directly, and sets the same flags, so integrations can switch to it and stay compatible with code that still reads or writes them. On a clone it does nothing, as <code>useSSR</code> does: a clone shares its parent's store (one clone per request with i18next-http-middleware). Called before <code>init()</code>, it logs a warning and changes nothing.</li> <li>feat: <code>services.utils.reloadResources()</code> lets a backend reload its bundles through i18next (as <code>i18next.reloadResources()</code>, with retries and the <code>loaded</code> event), instead of calling <code>backendConnector.read()</code> and <code>loaded()</code> itself as the <code>reloadInterval</code> of i18next-http-backend and i18next-chained-backend does. Without languages (no <code>lng</code>, no detector, the default <code>fallbackLng</code>), <code>reloadResources()</code> reloads nothing instead of throwing <code>Cannot read properties of undefined (reading 'forEach')</code>; a backend that also reloads <code>preload</code> passes its languages.</li> <li>feat: backends and async language detectors can declare their calling convention with <code>callbackApi</code> (an instance or static property). <code>true</code>: <code>read(language, namespace, callback)</code>, <code>create(languages, namespace, key, fallbackValue, callback, options)</code> and <code>detect(callback)</code>; <code>false</code>: they return a promise or a value, and <code>create</code> gets the options as its fifth argument. Without it, i18next keeps guessing from the number of parameters (<code>Function.length</code>), which default and rest parameters change: i18next-chained-backend's <code>create(..., clb = () => {}, opts = {})</code> has length 4 and never got its options (<code>isUpdate</code>), and i18next-http-backend's callback form of <code>create</code> has length 5, the length reserved for the callback-less form. Guessing is deprecated: in debug mode an unmarked backend or async detector logs a deprecation warning, once per <code>init()</code>. </li> <li>feat: <code>isSafeLanguageCode(code)</code> is exported for plugins that take a language from a request, a URL or storage: letters, digits, <code>-</code>, <code>_</code>, <code>@</code> and <code>.</code> (no <code>..</code>), at most 128 characters, not a prototype key. It is not a BCP 47 check, so <code>en_US</code>, <code>zh_Hant_TW</code>, <code>sr@latin</code> and <code>de_DE.UTF-8</code> pass; markup, slashes and spaces do not. The language detector, i18next-http-middleware and i18next-http-backend each have their own rule today.</li> <li>feat: <code>use()</code> logs a warning in debug mode when a second backend, language detector, <code>i18nFormat</code> or formatter replaces the first one; only one of each is used per instance, and losing an ICU setup this way was silent. As <code>use()</code> usually runs before <code>init()</code>, the warning is printed once <code>init()</code> has set up the logger.</li> <li>feat(types): <code>ParseKeysWithoutVariables<Ns, KPrefix></code>, the keys <code>t()</code> takes without options: their string has no variables, and a plural key is left out when its forms take <code>count</code>. A wrapper typed with it, like <code>(key: ParseKeysWithoutVariables<'common'>) => t(key)</code>, compiles with <code>strictInterpolationChecks</code> without a cast.</li> <li>feat(types): <code>defaultVariables</code> in <code>CustomTypeOptions</code> declares the variables <code>interpolation.defaultVariables</code> fills in at runtime (<code>defaultVariables: { appName: string }</code>). They become optional in the <code>t()</code> options, also with <code>strictInterpolationChecks</code>; passed, they keep their type.</li> <li>feat(types): <code>interpolationFormatSeparator</code> in <code>CustomTypeOptions</code> for a custom <code>interpolation.formatSeparator</code>: the types split <code>{{price, currency}}</code> at a hard-coded <code>,</code>, so with <code>formatSeparator: ';'</code> the format was not recognized. The per-call <code>skipInterpolation</code> option is typed, and <code>returnedObjectHandler</code> may return a value (what it returns is what <code>t()</code> returns; it was typed as returning <code>void</code>).</li> <li>feat(types): <code>SelectorFn</code>, <code>ApplyTarget</code>, <code>ConstrainTarget</code> and <code>GetSource</code> are exported on purpose, under their current names. react-i18next imports them for <code>Trans</code>; they were importable only because every declaration in the type files counts as exported.</li> <li>fix(types): with <code>nsSeparator: false</code> in <code>CustomTypeOptions</code>, the key union no longer contains <code>nsfalsekey</code>-style keys for the other namespaces, and a key that contains the text <code>false</code> (<code>isfalsey</code>) is no longer split at it, which typed its <code>t()</code> result as <code>never</code>.</li> <li>fix: with clones (i18next-http-middleware makes one per request), <code>saveMissing</code> now checks that the namespace is loaded for the instance that misses the key. Each <code>cloneInstance()</code> pointed the parent's <code>services.utils.hasLoadedNamespace</code> at the new clone, and the backend connector, which all clones share, used that one: a key missing in one request was not saved (<code>did not save key ... as the namespace ... was not yet loaded</code>) while a newer request was still loading its language, and the parent's <code>services.utils</code> answered for the newest clone. A clone's <code>services.utils</code> is now bound to the clone, and the parent keeps its own. A direct <code>services.backendConnector.saveMissing()</code> call, like the missing keys route of i18next-http-middleware, still checks the newest clone (follow-up to <a href="https://redirect.github.com/i18next/i18next/issues/1413">#1413</a>).</li> <li>fix: <code>dir()</code> without a language (before <code>init()</code>, or with no language resolved) returns <code>'ltr'</code> instead of <code>'rtl'</code> ([discussion <a href="https://redirect.github.com/i18next/i18next/issues/2135">#2135</a>](<a href="https://github.com/i18next/i18next/discussions/2135">https://github.com/i18next/i18next/discussions/2135</a>)).</li> <li>fix: <code>t()</code> before <code>init()</code> returns an empty string, as typed (with a warning when debug logging is already on); it returned <code>undefined</code>.</li> <li>fix: <code>off('a b', listener)</code> removes the listener from both events, as <code>on('a b', listener)</code> adds it to both. It looked for an event named <code>'a b'</code>, so <code>once('a b', listener)</code> never removed its listener and ran it on every event.</li> <li>deprecate: dotted languages in the resource store calls (<code>getResource('en.translation.key')</code>, <code>addResource('en.translation.key', value)</code>, <code>addResourceBundle('en.translation', resources)</code>) log a deprecation warning in debug mode; they are removed in v27. Pass language, namespace and key as separate arguments.</li> <li>deprecate: <code>interpolation.prefixEscaped</code>, <code>suffixEscaped</code>, <code>nestingPrefixEscaped</code> and <code>nestingSuffixEscaped</code> (inserted into the RegExp unescaped) log a deprecation warning in debug mode and are marked <code>@deprecated</code>; they are removed in v27. Pass the literal delimiters as <code>prefix</code>, <code>suffix</code>, <code>nestingPrefix</code> and <code>nestingSuffix</code>.</li> <li>deprecate: <code>compatibilityJSON</code> is marked <code>@deprecated</code> (it has no effect since v24) and removed from the types in v27.</li> <li>deprecate: a language code without a region that v27 canonicalizes differently logs a deprecation warning in debug mode: <code>'EN'</code> stays <code>'EN'</code> today and becomes <code>'en'</code> in v27, <code>'iw'</code> becomes <code>'he'</code>. <code>cleanCode: true</code> already lower-cases them.</li> <li>deprecate: when <code>fallbackLng</code> is not set, the first request for the default fallback language <code>dev</code> (loading it, or saving missing keys to it) logs a notice in debug mode: v27 defaults to <code>fallbackLng: false</code> and no longer requests <code>dev</code>. Set <code>fallbackLng</code> to your source language, or to <code>'dev'</code> to keep the current behavior.</li> <li>deprecate: in debug mode, a language code that comes from <code>lng</code>, <code>changeLanguage()</code> or the language detector, is not configured (<code>supportedLngs</code>, <code>fallbackLng</code>, <code>preload</code> or the resources) and fails <code>isSafeLanguageCode</code> logs a deprecation warning, once per code: without <code>supportedLngs</code>, a detector that returns <code>"><img src=x onerror=alert(1)></code> makes that string <code>i18next.language</code>, and apps put it into <code><html lang></code>. Nothing changes in 26.7; v27 is planned to refuse such codes and continue as with an unsupported code. Language codes are still not bound to a format.</li> <li>deprecate: the logger and post-processors are shared by all instances in v26 and per instance from v27 (clones keep their parent's). In debug mode, an instance that runs a post-processor only another instance registered with <code>use()</code> logs a deprecation warning (call <code>use()</code> on this instance too), and a non-clone <code>init()</code> that replaces the logger another instance set with <code>use()</code> logs one through that logger.</li> <li>deprecate: in debug mode, a value with a <code>/</code> under the default escape logs that v27 no longer escapes <code>/</code> (<code>$10/month</code> renders as <code>$10&#x2F;month</code> today; not with <code>escapeValue: false</code>, where react-i18next's <code>Trans</code> escapes one call itself and decodes the entities afterwards), and an object or array hit without <code>returnObjects</code> logs that v27 returns the key instead of the sentence <code>key '... (en)' returned an object instead of string.</code>.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </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.7.1</h2> <ul> <li>fix: <code>reloadResources()</code> retries the bundles that failed to load. The load queue skipped them also when reloading, so a language whose first load failed (a backend or network outage at startup) stayed missing. i18next-http-backend 4.0.8, i18next-chained-backend 5.0.7 and i18next-locize-backend 10.0.5 reload through <code>reloadResources()</code> with i18next 26.7, so their <code>reloadInterval</code> no longer recovered from such a failure, as their own reload did before.</li> <li>fix: <code>reloadResources()</code> without languages reloads the current languages and every language the backend loaded or tried to load, for the instance and its clones, as the API docs describe ("pass languages and namespaces if you don't want to reload all"). It reloaded only the current languages, so on a server (one clone per request with i18next-http-middleware) a backend's <code>reloadInterval</code> never refreshed the languages loaded for requests. It never requests <code>cimode</code>. With languages given, nothing changes.</li> </ul> <h2>26.7.0</h2> <p>The last 26.x minor before v27, which follows in about a week. It adds the APIs v27 builds on, and with <code>debug: true</code> it warns wherever a setup relies on something v27 changes. Most of the v27 defaults are existing options, so you can try them now:</p> <pre lang="js"><code>i18next.init({ debug: true, // prints the warnings below fallbackLng: 'en', // v27: fallbackLng defaults to false, set your source language (no implicit 'dev') returnEmptyString: false, // v27 default: an empty string falls back like a missing key cleanCode: true, // close to v27, which canonicalizes codes without a region ('EN' becomes 'en') }); </code></pre> <pre lang="ts"><code>declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; // v27 default returnEmptyString: false; // v27 default } } </code></pre> <p>The other v27 changes (<code>/</code> no longer escaped in values, a logger and post-processors per instance, the key instead of a sentence for an object hit, the dotted-language store calls and <code>*Escaped</code> options removed) have no switch; the debug warnings below show where they apply.</p> <ul> <li>feat: with the default <code>skipOnVariables: true</code>, a missing interpolation variable is now logged in debug mode, once per string and variable: <code>missed to pass in variable name for interpolating Hello {{name}}</code>. The raw <code>{{name}}</code> reached the UI without any log line, even with <code>debug: true</code>, because the warning only ran with <code>skipOnVariables: false</code>. A variable passed as <code>undefined</code> and a <code>missingInterpolationHandler</code> still log nothing.</li> <li>feat: <code>i18next.hydrate(resources, lng)</code> puts resources rendered on the server into the store and changes to the server's language, each only the first time. It does what react-i18next's <code>useSSR</code> did by writing <code>resourceStore.data</code>, <code>options.ns</code>, <code>isInitialized</code>, <code>initializedStoreOnce</code> and <code>initializedLanguageOnce</code> directly, and sets the same flags, so integrations can switch to it and stay compatible with code that still reads or writes them. On a clone it does nothing, as <code>useSSR</code> does: a clone shares its parent's store (one clone per request with i18next-http-middleware). Called before <code>init()</code>, it logs a warning and changes nothing.</li> <li>feat: <code>services.utils.reloadResources()</code> lets a backend reload its bundles through i18next (as <code>i18next.reloadResources()</code>, with retries and the <code>loaded</code> event), instead of calling <code>backendConnector.read()</code> and <code>loaded()</code> itself as the <code>reloadInterval</code> of i18next-http-backend and i18next-chained-backend does. Without languages (no <code>lng</code>, no detector, the default <code>fallbackLng</code>), <code>reloadResources()</code> reloads nothing instead of throwing <code>Cannot read properties of undefined (reading 'forEach')</code>; a backend that also reloads <code>preload</code> passes its languages.</li> <li>feat: backends and async language detectors can declare their calling convention with <code>callbackApi</code> (an instance or static property). <code>true</code>: <code>read(language, namespace, callback)</code>, <code>create(languages, namespace, key, fallbackValue, callback, options)</code> and <code>detect(callback)</code>; <code>false</code>: they return a promise or a value, and <code>create</code> gets the options as its fifth argument. Without it, i18next keeps guessing from the number of parameters (<code>Function.length</code>), which default and rest parameters change: i18next-chained-backend's <code>create(..., clb = () => {}, opts = {})</code> has length 4 and never got its options (<code>isUpdate</code>), and i18next-http-backend's callback form of <code>create</code> has length 5, the length reserved for the callback-less form. Guessing is deprecated: in debug mode an unmarked backend or async detector logs a deprecation warning, once per <code>init()</code>. </li> <li>feat: <code>isSafeLanguageCode(code)</code> is exported for plugins that take a language from a request, a URL or storage: letters, digits, <code>-</code>, <code>_</code>, <code>@</code> and <code>.</code> (no <code>..</code>), at most 128 characters, not a prototype key. It is not a BCP 47 check, so <code>en_US</code>, <code>zh_Hant_TW</code>, <code>sr@latin</code> and <code>de_DE.UTF-8</code> pass; markup, slashes and spaces do not. The language detector, i18next-http-middleware and i18next-http-backend each have their own rule today.</li> <li>feat: <code>use()</code> logs a warning in debug mode when a second backend, language detector, <code>i18nFormat</code> or formatter replaces the first one; only one of each is used per instance, and losing an ICU setup this way was silent. As <code>use()</code> usually runs before <code>init()</code>, the warning is printed once <code>init()</code> has set up the logger.</li> <li>feat(types): <code>ParseKeysWithoutVariables<Ns, KPrefix></code>, the keys <code>t()</code> takes without options: their string has no variables, and a plural key is left out when its forms take <code>count</code>. A wrapper typed with it, like <code>(key: ParseKeysWithoutVariables<'common'>) => t(key)</code>, compiles with <code>strictInterpolationChecks</code> without a cast.</li> <li>feat(types): <code>defaultVariables</code> in <code>CustomTypeOptions</code> declares the variables <code>interpolation.defaultVariables</code> fills in at runtime (<code>defaultVariables: { appName: string }</code>). They become optional in the <code>t()</code> options, also with <code>strictInterpolationChecks</code>; passed, they keep their type.</li> <li>feat(types): <code>interpolationFormatSeparator</code> in <code>CustomTypeOptions</code> for a custom <code>interpolation.formatSeparator</code>: the types split <code>{{price, currency}}</code> at a hard-coded <code>,</code>, so with <code>formatSeparator: ';'</code> the format was not recognized. The per-call <code>skipInterpolation</code> option is typed, and <code>returnedObjectHandler</code> may return a value (what it returns is what <code>t()</code> returns; it was typed as returning <code>void</code>).</li> <li>feat(types): <code>SelectorFn</code>, <code>ApplyTarget</code>, <code>ConstrainTarget</code> and <code>GetSource</code> are exported on purpose, under their current names. react-i18next imports them for <code>Trans</code>; they were importable only because every declaration in the type files counts as exported.</li> <li>fix(types): with <code>nsSeparator: false</code> in <code>CustomTypeOptions</code>, the key union no longer contains <code>nsfalsekey</code>-style keys for the other namespaces, and a key that contains the text <code>false</code> (<code>isfalsey</code>) is no longer split at it, which typed its <code>t()</code> result as <code>never</code>.</li> <li>fix: with clones (i18next-http-middleware makes one per request), <code>saveMissing</code> now checks that the namespace is loaded for the instance that misses the key. Each <code>cloneInstance()</code> pointed the parent's <code>services.utils.hasLoadedNamespace</code> at the new clone, and the backend connector, which all clones share, used that one: a key missing in one request was not saved (<code>did not save key ... as the namespace ... was not yet loaded</code>) while a newer request was still loading its language, and the parent's <code>services.utils</code> answered for the newest clone. A clone's <code>services.utils</code> is now bound to the clone, and the parent keeps its own. A direct <code>services.backendConnector.saveMissing()</code> call, like the missing keys route of i18next-http-middleware, still checks the newest clone (follow-up to <a href="https://redirect.github.com/i18next/i18next/issues/1413">#1413</a>).</li> <li>fix: <code>dir()</code> without a language (before <code>init()</code>, or with no language resolved) returns <code>'ltr'</code> instead of <code>'rtl'</code> ([discussion <a href="https://redirect.github.com/i18next/i18next/issues/2135">#2135</a>](<a href="https://github.com/i18next/i18next/discussions/2135">https://github.com/i18next/i18next/discussions/2135</a>)).</li> <li>fix: <code>t()</code> before <code>init()</code> returns an empty string, as typed (with a warning when debug logging is already on); it returned <code>undefined</code>.</li> <li>fix: <code>off('a b', listener)</code> removes the listener from both events, as <code>on('a b', listener)</code> adds it to both. It looked for an event named <code>'a b'</code>, so <code>once('a b', listener)</code> never removed its listener and ran it on every event.</li> <li>deprecate: dotted languages in the resource store calls (<code>getResource('en.translation.key')</code>, <code>addResource('en.translation.key', value)</code>, <code>addResourceBundle('en.translation', resources)</code>) log a deprecation warning in debug mode; they are removed in v27. Pass language, namespace and key as separate arguments.</li> <li>deprecate: <code>interpolation.prefixEscaped</code>, <code>suffixEscaped</code>, <code>nestingPrefixEscaped</code> and <code>nestingSuffixEscaped</code> (inserted into the RegExp unescaped) log a deprecation warning in debug mode and are marked <code>@deprecated</code>; they are removed in v27. Pass the literal delimiters as <code>prefix</code>, <code>suffix</code>, <code>nestingPrefix</code> and <code>nestingSuffix</code>.</li> <li>deprecate: <code>compatibilityJSON</code> is marked <code>@deprecated</code> (it has no effect since v24) and removed from the types in v27.</li> <li>deprecate: a language code without a region that v27 canonicalizes differently logs a deprecation warning in debug mode: <code>'EN'</code> stays <code>'EN'</code> today and becomes <code>'en'</code> in v27, <code>'iw'</code> becomes <code>'he'</code>. <code>cleanCode: true</code> already lower-cases them.</li> <li>deprecate: when <code>fallbackLng</code> is not set, the first request for the default fallback language <code>dev</code> (loading it, or saving missing keys to it) logs a notice in debug mode: v27 defaults to <code>fallbackLng: false</code> and no longer requests <code>dev</code>. Set <code>fallbackLng</code> to your source language, or to <code>'dev'</code> to keep the current behavior.</li> <li>deprecate: in debug mode, a language code that comes from <code>lng</code>, <code>changeLanguage()</code> or the language detector, is not configured (<code>supportedLngs</code>, <code>fallbackLng</code>, <code>preload</code> or the resources) and fails <code>isSafeLanguageCode</code> logs a deprecation warning, once per code: without <code>supportedLngs</code>, a detector that returns <code>"><img src=x onerror=alert(1)></code> makes that string <code>i18next.language</code>, and apps put it into <code><html lang></code>. Nothing changes in 26.7; v27 is planned to refuse such codes and continue as with an unsupported code. Language codes are still not bound to a format.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/i18next/i18next/commit/b84e4180d71d271b9ae1f19ebb668224069b435e"><code>b84e418</code></a> 26.7.1</li> <li><a href="https://github.com/i18next/i18next/commit/0a9fc2e4275f570efc251d85df4daf426e02d34c"><code>0a9fc2e</code></a> changelog for 26.7.1</li> <li><a href="https://github.com/i18next/i18next/commit/61fae7e68f14ef055482ef1d4f1a7b48eef28445"><code>61fae7e</code></a> fix: reloadResources() retries bundles that failed and, without languages, re...</li> <li><a href="https://github.com/i18next/i18next/commit/70b64a28bf6477a70f7c4c1c5e9e6be421dd6653"><code>70b64a2</code></a> 26.7.0</li> <li><a href="https://github.com/i18next/i18next/commit/f98d0c6ebb5d49e44da93da6d72bc76831a81b22"><code>f98d0c6</code></a> changelog for 26.7.0</li> <li><a href="https://github.com/i18next/i18next/commit/8e37fb24ae19e9c415daf3198a579480757bb16e"><code>8e37fb2</code></a> ci: type check the public types on TypeScript 5.0, the lowest of the peer range</li> <li><a href="https://github.com/i18next/i18next/commit/c976112c98ac4f85f4ecfdbeea00f235c512a0a8"><code>c976112</code></a> feat: hydrate() and services.utils.reloadResources for SSR integrations and b...</li> <li><a href="https://github.com/i18next/i18next/commit/9f426b2f9f480c416c517e8506668949a86e048f"><code>9f426b2</code></a> feat: debug warnings for a missing interpolation variable, a module replaced ...</li> <li><a href="https://github.com/i18next/i18next/commit/1dbb93acc5eb594c7681dbed98e7553fc08f9bca"><code>1dbb93a</code></a> fix: with clones, saveMissing checks the namespaces of the instance that miss...</li> <li><a href="https://github.com/i18next/i18next/commit/3bfbe2e624f58299fc8d97a8772692a133af9247"><code>3bfbe2e</code></a> feat(types): ParseKeysWithoutVariables and defaultVariables for strictInterpo...</li> <li>Additional commits viewable in <a href="https://github.com/i18next/i18next/compare/v26.5.12...v26.7.1">compare view</a></li> </ul> </details> <br /> Updates `i18next-browser-languagedetector` from 8.2.4 to 8.3.0 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/i18next/i18next-browser-languageDetector/blob/master/CHANGELOG.md">i18next-browser-languagedetector's changelog</a>.</em></p> <blockquote> <h3>8.3.0</h3> <ul> <li>security: a detected language must now have the shape i18next 26.7 accepts for a language code from outside (its <code>isSafeLanguageCode</code>): letters, digits, <code>-</code>, <code>_</code>, <code>@</code> and <code>.</code> (no <code>..</code>), at most 128 characters. It replaces the list of XSS patterns, which missed values like <code><b>x</b></code> or <code>" onmouseover="x()</code> from the query string, a cookie or storage, which then became the language; apps put it into <code><html lang="..."></code>. Compatibility note: a value with other characters (spaces, slashes, quotes) is now skipped and the next detector is used; codes like <code>en_US</code>, <code>zh_Hant_TW</code> or <code>sr@latin</code> still pass, and i18next 27 refuses such codes from outside as well.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/i18next/i18next-browser-languageDetector/commit/8c4b09e4addf534d158f16b6446a9b9df184ae8c"><code>8c4b09e</code></a> 8.3.0</li> <li><a href="https://github.com/i18next/i18next-browser-languageDetector/commit/3fbc31392b65bc8841a84c6998a0fbf0f73fa89e"><code>3fbc313</code></a> release</li> <li><a href="https://github.com/i18next/i18next-browser-languageDetector/commit/b85511fe71abf2e5b0dca60904d89c1a99bb1d4d"><code>b85511f</code></a> changelog for 8.3.0</li> <li><a href="https://github.com/i18next/i18next-browser-languageDetector/commit/979dcc32495ccc1794837fa3e6e6f44a11595596"><code>979dcc3</code></a> security: check the shape of a detected language instead of a list of XSS pat...</li> <li>See full diff in <a href="https://github.com/i18next/i18next-browser-languageDetector/compare/v8.2.4...v8.3.0">compare view</a></li> </ul> </details> <br /> Updates `i18next-http-backend` from 4.0.7 to 4.0.9 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md">i18next-http-backend's changelog</a>.</em></p> <blockquote> <h3>4.0.9</h3> <ul> <li>fix: with i18next 26.7.1 or later, <code>reloadInterval</code> reloads everything i18next loaded or tried to load through the backend: the current languages and the languages loaded for clones (one per request on a server), and it retries the bundles that failed. 4.0.8 passed the fallback and <code>preload</code> languages to i18next's <code>reloadResources()</code>, which skipped a bundle that had failed to load, so a language missing after an outage at startup stayed missing (the backend's own reload before 4.0.8 read it again). With older i18next nothing changes.</li> </ul> <h3>4.0.8</h3> <ul> <li>fix: with i18next 26.7.0 or later, <code>create</code> gets its callback. i18next 26.7.0 deprecates guessing the calling convention of a backend from the number of parameters of its methods; the backend now declares it with <code>callbackApi</code>, so i18next calls <code>read</code> and <code>create</code> with a callback (and passes <code>create</code> its options), and debug mode no longer logs the deprecation notice. Older i18next versions ignore it. <code>create(languages, namespace, key, fallbackValue, callback)</code> has five parameters, the number i18next reserved for the form without a callback, so i18next passed its options object as <code>callback</code>, and with a refused <code>lng</code> or <code>ns</code> value <code>create</code> called that object (a <code>TypeError</code> that i18next swallowed).</li> <li><code>reloadInterval</code> reloads through <code>services.utils.reloadResources</code> with i18next 26.7.0 or later (with i18next's retries and the <code>loaded</code> event) instead of calling i18next's internal backend connector. It reloads the same languages as before: the fallback and <code>preload</code> languages. With older i18next nothing changes.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/i18next/i18next-http-backend/commit/645ad0cce2685f74489eb3edcd99023d33fdead4"><code>645ad0c</code></a> 4.0.9</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/a6085ce8555842ee29350e22cadeea4abf7905f5"><code>a6085ce</code></a> build</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/f615d3e6536692cfa64cdf179e309ca2c2cef6b6"><code>f615d3e</code></a> changelog for 4.0.9</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/8784f1246655ffce7047b43c0ef2e7c79287a898"><code>8784f12</code></a> fix: hand the reload to i18next 26.7.1 or later, which retries bundles that f...</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/b67479412f11a004eacd44e8ff21b8a883b48794"><code>b674794</code></a> 4.0.8</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/03366f98e5ea5948353a35f8aed9f8dc4b53a513"><code>03366f9</code></a> build</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/31d62d8de29f7c547abfbaf800689d4c9b3d4a75"><code>31d62d8</code></a> changelog for 4.0.8</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/334dc53b15d520a43ea6505fca5c5d8b5417d361"><code>334dc53</code></a> fix: declare callbackApi, so i18next 26.7 calls create with its callback; rel...</li> <li><a href="https://github.com/i18next/i18next-http-backend/commit/9aec4e2a163cfb4617b19842baf944d62303333d"><code>9aec4e2</code></a> Bump i18next-http-backend from 4.0.2 to 4.0.4 in /example/vue (<a href="https://redirect.github.com/i18next/i18next-http-backend/issues/205">#205</a>)</li> <li>See full diff in <a href="https://github.com/i18next/i18next-http-backend/compare/v4.0.7...v4.0.9">compare view</a></li> </ul> </details> <br /> Updates `react-i18next` from 17.1.9 to 17.1.11 <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.1.11</h2> <ul> <li>fix(Trans): with i18next 26.7.0 or later and <code>debug: true</code>, the variables of object children are no longer logged as missing. When <code>Trans</code> interpolates before parsing (with <code>count</code>, <code>values</code>, <code>tOptions</code> or <code>interpolation.defaultVariables</code>), its <code>t()</code> call leaves the placeholders of object children like <code>{{ name }}</code> for after parsing, and i18next 26.7 logs each of them as <code>missed to pass in variable name</code>, although the output is right: <code><Trans count={n}>Hello <b>{{ name }}</b>, you have {{ count }} messages.</Trans></code> logged it for <code>name</code>. <code>Trans</code> now passes a <code>missingInterpolationHandler</code> to that call that does what i18next does without one (it keeps the placeholder, and a variable passed as <code>undefined</code> becomes empty), so the output is unchanged. It does not with <code>skipOnVariables: false</code>, a < code>missingInterpolationHandler</code> of your own, an i18nFormat plugin, or an escape function that would change the placeholders of the children.</li> </ul> <h2>17.1.10</h2> <ul> <li>fix(Trans): markup inside an interpolated value is no longer parsed as translation markup. <code>Trans</code> interpolates <code>values</code> (and <code>count</code>, values in <code>tOptions</code>, or the whole string when there are no children) before it parses the string. With <code>interpolation.escapeValue: false</code>, or with an i18nFormat plugin (i18next-icu, i18next-mf2, i18next-fluent), which inserts values without escaping whatever <code>escapeValue</code> says, a value like <code><0 href="https://example.com">x</0></code> was rendered as component 0 with that <code>href</code>, overriding the props of the component, and <code><strong>x</strong></code> in a value became a real <code><strong></code>. <code>Trans</code> now escapes the values for this <code>t()</code> call (with a plugin, the string values in <code>values</code>) and decodes the entities after parsing, so such a value renders as text, and a <code>"</code > in a value no longer closes an attribute like <code><Item > title="{{name}}" /></code>. <code>{{- var}}</code> stays the > explicit way for a translator to insert a value unescaped. As with > <code>shouldUnescape</code>, entities written in these translations (for > example <code>&amp;</code>) are now decoded instead of shown literally. > Output with <code>escapeValue: true</code> and no plugin, with i18next-icu > <code>escapeVariables: true</code>, and with children and no > <code>values</code> or <code>count</code> is unchanged.</li> <li>fix(IcuTrans): the same for <code>IcuTrans</code> with <code>escapeValue: false</code> or an i18nFormat plugin: a value like <code><0>x</0></code> no longer becomes the first component, and a value containing an entity like <code>&amp;</code> is no longer decoded a second time.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/i18next/react-i18next/commit/541e2485cb1e6116a3c77c8062950bf242f16555"><code>541e248</code></a> 17.1.11</li> <li><a href="https://github.com/i18next/react-i18next/commit/31325a146b8d3ba8cb86d6284e8823c06e4a3056"><code>31325a1</code></a> build</li> <li><a href="https://github.com/i18next/react-i18next/commit/5de4de11222b8bd3c383e3167d1edefd1c9b52a9"><code>5de4de1</code></a> changelog for 17.1.11</li> <li><a href="https://github.com/i18next/react-i18next/commit/5e78c78d884b3fdce3f5a38752a492a58b48dc94"><code>5e78c78</code></a> fix(Trans): no missing-variable debug warning from i18next 26.7 for the varia...</li> <li><a href="https://github.com/i18next/react-i18next/commit/983f5863786c5424b2aed6c49b440c1b9b4094e5"><code>983f586</code></a> 17.1.10</li> <li><a href="https://github.com/i18next/react-i18next/commit/7c86836af5c94b7988b2864b400a4b64845e21af"><code>7c86836</code></a> build</li> <li><a href="https://github.com/i18next/react-i18next/commit/26c5467649facc0d52274c1bf6ffb0ece1670b7c"><code>26c5467</code></a> fix(Trans, IcuTrans): don't parse markup that comes from interpolated values</li> <li><a href="https://github.com/i18next/react-i18next/commit/16a017eeb6822d7bef3bdfb53493c74df38e71a1"><code>16a017e</code></a> docs: add Socket badge to README</li> <li>See full diff in <a href="https://github.com/i18next/react-i18next/compare/v17.1.9...v17.1.11">compare view</a></li> </ul> </details> <br /> Updates `react-resizable-panels` from 4.15.3 to 4.16.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/bvaughn/react-resizable-panels/releases">react-resizable-panels's releases</a>.</em></p> <blockquote> <h2>4.16.1</h2> <ul> <li>Add a <code>split</code> entry to the <code>Workspace</code> <code>classNames</code> and <code>styles</code> props, for each split's <code>Group</code> (which now also has <code>data-split</code> and <code>data-split-id</code> attributes). Its CSS <code>gap</code> adds space between tabsets, and counts toward their minimum sizes like separators do. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/783">#783</a></li> <li>Fix dragging a <code>Workspace</code> separator ending after moving a few pixels (most often when resizing tabsets stacked vertically, or tabsets with tabs on the left or right). The size of each tabset's header, which counts toward its minimum size, could change by a pixel as the tabset was resized, because it was measured as the difference of two rounded sizes; that re-registered the tabset's panel, which interrupted the drag. It is now measured from exact sizes. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/782">#782</a></li> <li>Fix <code>Workspace</code> tabsets and splits rendering their model node ids as element ids, which could match other elements on the page (e.g. a tabset with the id <code>"root"</code> matched an application's <code><div id="root"></code>, and its styles) or the elements of another workspace with the same model. Their elements' ids are now unique within the page. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/784">#784</a></li> <li>Fix pressing a tab at the edge of a tabset, in a <code>Workspace</code> without separators, both resizing the tabset and dragging the tab. Resizing takes priority, as it does for other elements at the edges of panels. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/784">#784</a></li> </ul> <h2>4.16.0</h2> <ul> <li>Add <code>Workspace</code> component, for layouts of tabsets that users can rearrange by dragging tabs: between tabsets, within a tabset's list of tabs, or onto the edge of a tabset to split it. Tabsets can also be resized and maximized. The layout is described by a serializable model, and tab content is not remounted when a tab is moved. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/780">#780</a> <ul> <li>Tabsets can be customized with the <code>renderTab</code>, <code>renderTabsetToolbar</code>, and <code>renderEmptyTabset</code> props (and the <code>TabCloseButton</code> component), and styled with the <code>classNames</code> and <code>styles</code> props.</li> <li>Workspaces are uncontrolled (like <code>Group</code>); the <code>useWorkspaceRef</code> and <code>useWorkspaceCallbackRef</code> hooks return its imperative API.</li> <li>Content within a workspace can use the <code>useParentWorkspace</code>, <code>useParentTabset</code>, <code>useParentTabsetState</code>, <code>useParentTab</code>, and <code>useParentTabState</code> hooks.</li> <li>The content of tabs that aren't selected can stay mounted (default), be unmounted, or be rendered within a hidden React <code><Activity></code> (<code>hiddenTabBehavior</code>), and selected tabs' content can opt into server rendering (<code>serverRenderTabContent</code>).</li> <li>Supports mouse, touch, and keyboard interaction.</li> </ul> </li> <li>Fix separators (and grid gridlines) moving farther or less far than the pointer when an ancestor has CSS <code>zoom</code> or a scale transform (e.g. twice as far within <code>zoom: 2</code>). Pointer movements are now converted from screen pixels to layout pixels before resizing. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/780">#780</a></li> <li>Fix separators staying in their "hover" state when the pointer moves onto an iframe within a <code>Group</code> rendered into another window (e.g. a popup). The iframe check no longer uses <code>instanceof HTMLIFrameElement</code>, which is false for iframes from another window. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/778">#778</a></li> <li>Fix the separator resize preview (<code>resizePreviewMode="separator"</code>) missing the separator's styles when its element was created by another window's document (e.g. by a popup's opener). - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/781">#781</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/bvaughn/react-resizable-panels/blob/main/CHANGELOG.md">react-resizable-panels's changelog</a>.</em></p> <blockquote> <h2>4.16.1</h2> <ul> <li>Add a <code>split</code> entry to the <code>Workspace</code> <code>classNames</code> and <code>styles</code> props, for each split's <code>Group</code> (which now also has <code>data-split</code> and <code>data-split-id</code> attributes). Its CSS <code>gap</code> adds space between tabsets, and counts toward their minimum sizes like separators do. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/783">#783</a></li> <li>Fix dragging a <code>Workspace</code> separator ending after moving a few pixels (most often when resizing tabsets stacked vertically, or tabsets with tabs on the left or right). The size of each tabset's header, which counts toward its minimum size, could change by a pixel as the tabset was resized, because it was measured as the difference of two rounded sizes; that re-registered the tabset's panel, which interrupted the drag. It is now measured from exact sizes. - <a href="https://redirect.github.com/bvaughn/react-resizable-panels/pull/782">#782</a></li> <li>Fix <code>Workspace</code> tabsets and splits rendering their model node ids as element ids, which could match other elements on the page (e.g. a tabset with the id <code>"root"</code> matched an application's <code><div id="root"></code>, and its styles) or the elements of another workspace with the same model. Their elements' ids are now unique within the page. - <a href="https://redi... _Description has been truncated_ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
