@trackunit/react-core-contexts-test 1.12.41 → 1.12.42-alpha-ea91072db16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs2.js CHANGED
@@ -224,9 +224,9 @@ function getDefaultExportFromCjs (x) {
224
224
 
225
225
  var build = {};
226
226
 
227
- var ansiStyles = {exports: {}};
227
+ var _package$2 = {exports: {}};
228
228
 
229
- ansiStyles.exports;
229
+ _package$2.exports;
230
230
 
231
231
  (function (module) {
232
232
 
@@ -392,9 +392,9 @@ ansiStyles.exports;
392
392
  enumerable: true,
393
393
  get: assembleStyles
394
394
  });
395
- } (ansiStyles));
395
+ } (_package$2));
396
396
 
397
- var ansiStylesExports = ansiStyles.exports;
397
+ var _packageExports$1 = _package$2.exports;
398
398
 
399
399
  var collections = {};
400
400
 
@@ -704,7 +704,7 @@ AsymmetricMatcher.default = _default$2q;
704
704
 
705
705
  var ConvertAnsi = {};
706
706
 
707
- var ansiRegex = ({onlyFirst = false} = {}) => {
707
+ var _package$1 = ({onlyFirst = false} = {}) => {
708
708
  const pattern = [
709
709
  '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
710
710
  '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
@@ -718,9 +718,9 @@ Object.defineProperty(ConvertAnsi, '__esModule', {
718
718
  });
719
719
  ConvertAnsi.test = ConvertAnsi.serialize = ConvertAnsi.default = void 0;
720
720
 
721
- var _ansiRegex = _interopRequireDefault$d(ansiRegex);
721
+ var _ansiRegex = _interopRequireDefault$d(_package$1);
722
722
 
723
- var _ansiStyles$1 = _interopRequireDefault$d(ansiStylesExports);
723
+ var _ansiStyles$1 = _interopRequireDefault$d(_packageExports$1);
724
724
 
725
725
  function _interopRequireDefault$d(obj) {
726
726
  return obj && obj.__esModule ? obj : {default: obj};
@@ -1439,7 +1439,7 @@ Immutable.default = _default$2m;
1439
1439
 
1440
1440
  var ReactElement = {};
1441
1441
 
1442
- var reactIs = {exports: {}};
1442
+ var _package = {exports: {}};
1443
1443
 
1444
1444
  var reactIs_production = {};
1445
1445
 
@@ -1721,19 +1721,19 @@ function requireReactIs_development () {
1721
1721
  }
1722
1722
 
1723
1723
  if (process.env.NODE_ENV === 'production') {
1724
- reactIs.exports = requireReactIs_production();
1724
+ _package.exports = requireReactIs_production();
1725
1725
  } else {
1726
- reactIs.exports = requireReactIs_development();
1726
+ _package.exports = requireReactIs_development();
1727
1727
  }
1728
1728
 
1729
- var reactIsExports = reactIs.exports;
1729
+ var _packageExports = _package.exports;
1730
1730
 
1731
1731
  Object.defineProperty(ReactElement, '__esModule', {
1732
1732
  value: true
1733
1733
  });
1734
1734
  ReactElement.test = ReactElement.serialize = ReactElement.default = void 0;
1735
1735
 
1736
- var ReactIs = _interopRequireWildcard(reactIsExports);
1736
+ var ReactIs = _interopRequireWildcard(_packageExports);
1737
1737
 
1738
1738
  var _markup$1 = markup;
1739
1739
 
@@ -1980,7 +1980,7 @@ build.default = build.DEFAULT_OPTIONS = void 0;
1980
1980
  var format_1 = build.format = format;
1981
1981
  var plugins_1 = build.plugins = void 0;
1982
1982
 
1983
- var _ansiStyles = _interopRequireDefault$b(ansiStylesExports);
1983
+ var _ansiStyles = _interopRequireDefault$b(_packageExports$1);
1984
1984
 
1985
1985
  var _collections = collections;
1986
1986
 
@@ -13490,36 +13490,38 @@ const mockWidgetConfigContext = {
13490
13490
  closeEditMode: async () => { },
13491
13491
  };
13492
13492
 
13493
- const RerenderContext = React.createContext({ rerenderCounter: 0, setRerenderCounter: (value) => { } });
13493
+ const RerenderContext = React.createContext({ counter: 0 });
13494
13494
  /**
13495
- * This provider is used to force re-renders in the test environment, since tanstack router does not support re-render.
13495
+ * Provides a rerender signal via context to force re-renders in tests.
13496
+ * TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
13497
+ * propagating to the hook under test. React context changes bypass React.memo boundaries,
13498
+ * so changing the context value triggers a re-render in any descendant consuming RerenderContext.
13499
+ *
13500
+ * The value is intentionally wrapped in a new object on every render. This ensures the context
13501
+ * identity always changes -- even when the external counter prop hasn't changed (e.g. during
13502
+ * HookRenderer's automatic rerender) -- so consumers are always notified.
13496
13503
  */
13497
- const RerenderProvider = ({ children, counter }) => {
13498
- const [rerenderCounter, setRerenderCounter] = React.useState(0);
13499
- React.useEffect(() => {
13500
- if (counter && rerenderCounter !== counter && rerenderCounter !== 0) {
13501
- setRerenderCounter(counter);
13502
- }
13503
- }, [rerenderCounter, counter]);
13504
- return (jsxRuntime.jsx(RerenderContext.Provider, { value: { rerenderCounter, setRerenderCounter }, children: children }));
13505
- };
13504
+ const RerenderProvider = ({ children, counter }) => (jsxRuntime.jsx(RerenderContext.Provider, { value: { counter }, children: children }));
13506
13505
  /**
13507
- * This hook is used to get the rerender counter.
13506
+ * Returns the current rerender counter from context.
13508
13507
  */
13509
- const useRerenderCounter = () => {
13510
- return React.useContext(RerenderContext);
13511
- };
13508
+ const useRerenderCounter = () => React.useContext(RerenderContext).counter;
13512
13509
 
13513
13510
  /**
13514
- * This component is used to force re-renders in the test environment, since tanstack router does not support re-render.
13511
+ * Subscribes to RerenderContext so this subtree re-renders when the counter changes,
13512
+ * even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
13513
+ *
13514
+ * Consuming the context alone is not enough: React will bail out of re-rendering children
13515
+ * if the element references haven't changed. createElement produces new element instances
13516
+ * with a changed prop, which forces React to reconcile and re-render the test component.
13515
13517
  */
13516
13518
  const RerenderComponent = ({ children }) => {
13517
- const { rerenderCounter } = useRerenderCounter();
13518
- return (jsxRuntime.jsx("div", { "data-rerender-counter": `rerender-${rerenderCounter}`, children: React.Children.map(children, child => React.isValidElement(child)
13519
+ const counter = useRerenderCounter();
13520
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: React.Children.map(children, child => React.isValidElement(child)
13519
13521
  ? React.createElement(child.type, {
13520
13522
  ...child.props,
13521
13523
  key: child.key,
13522
- "data-rerender-counter": rerenderCounter,
13524
+ "data-rerender-counter": counter,
13523
13525
  })
13524
13526
  : child) }));
13525
13527
  };
package/index.esm2.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { SortOrder, AssetSortByProperty } from '@trackunit/iris-app-runtime-core-api';
2
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
3
3
  import * as React from 'react';
4
- import React__default, { createContext, useState, useEffect, useContext, Children, createElement, isValidElement, useRef, useCallback, useMemo } from 'react';
4
+ import React__default, { createContext, useContext, Children, createElement, isValidElement, useRef, useEffect, useCallback, useMemo, useState } from 'react';
5
5
  import * as DeprecatedReactTestUtils from 'react-dom/test-utils';
6
6
  import ReactDOM from 'react-dom';
7
7
  import * as ReactDOMClient from 'react-dom/client';
@@ -202,9 +202,9 @@ function getDefaultExportFromCjs (x) {
202
202
 
203
203
  var build = {};
204
204
 
205
- var ansiStyles = {exports: {}};
205
+ var _package$2 = {exports: {}};
206
206
 
207
- ansiStyles.exports;
207
+ _package$2.exports;
208
208
 
209
209
  (function (module) {
210
210
 
@@ -370,9 +370,9 @@ ansiStyles.exports;
370
370
  enumerable: true,
371
371
  get: assembleStyles
372
372
  });
373
- } (ansiStyles));
373
+ } (_package$2));
374
374
 
375
- var ansiStylesExports = ansiStyles.exports;
375
+ var _packageExports$1 = _package$2.exports;
376
376
 
377
377
  var collections = {};
378
378
 
@@ -682,7 +682,7 @@ AsymmetricMatcher.default = _default$2q;
682
682
 
683
683
  var ConvertAnsi = {};
684
684
 
685
- var ansiRegex = ({onlyFirst = false} = {}) => {
685
+ var _package$1 = ({onlyFirst = false} = {}) => {
686
686
  const pattern = [
687
687
  '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
688
688
  '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
@@ -696,9 +696,9 @@ Object.defineProperty(ConvertAnsi, '__esModule', {
696
696
  });
697
697
  ConvertAnsi.test = ConvertAnsi.serialize = ConvertAnsi.default = void 0;
698
698
 
699
- var _ansiRegex = _interopRequireDefault$d(ansiRegex);
699
+ var _ansiRegex = _interopRequireDefault$d(_package$1);
700
700
 
701
- var _ansiStyles$1 = _interopRequireDefault$d(ansiStylesExports);
701
+ var _ansiStyles$1 = _interopRequireDefault$d(_packageExports$1);
702
702
 
703
703
  function _interopRequireDefault$d(obj) {
704
704
  return obj && obj.__esModule ? obj : {default: obj};
@@ -1417,7 +1417,7 @@ Immutable.default = _default$2m;
1417
1417
 
1418
1418
  var ReactElement = {};
1419
1419
 
1420
- var reactIs = {exports: {}};
1420
+ var _package = {exports: {}};
1421
1421
 
1422
1422
  var reactIs_production = {};
1423
1423
 
@@ -1699,19 +1699,19 @@ function requireReactIs_development () {
1699
1699
  }
1700
1700
 
1701
1701
  if (process.env.NODE_ENV === 'production') {
1702
- reactIs.exports = requireReactIs_production();
1702
+ _package.exports = requireReactIs_production();
1703
1703
  } else {
1704
- reactIs.exports = requireReactIs_development();
1704
+ _package.exports = requireReactIs_development();
1705
1705
  }
1706
1706
 
1707
- var reactIsExports = reactIs.exports;
1707
+ var _packageExports = _package.exports;
1708
1708
 
1709
1709
  Object.defineProperty(ReactElement, '__esModule', {
1710
1710
  value: true
1711
1711
  });
1712
1712
  ReactElement.test = ReactElement.serialize = ReactElement.default = void 0;
1713
1713
 
1714
- var ReactIs = _interopRequireWildcard(reactIsExports);
1714
+ var ReactIs = _interopRequireWildcard(_packageExports);
1715
1715
 
1716
1716
  var _markup$1 = markup;
1717
1717
 
@@ -1958,7 +1958,7 @@ build.default = build.DEFAULT_OPTIONS = void 0;
1958
1958
  var format_1 = build.format = format;
1959
1959
  var plugins_1 = build.plugins = void 0;
1960
1960
 
1961
- var _ansiStyles = _interopRequireDefault$b(ansiStylesExports);
1961
+ var _ansiStyles = _interopRequireDefault$b(_packageExports$1);
1962
1962
 
1963
1963
  var _collections = collections;
1964
1964
 
@@ -13468,36 +13468,38 @@ const mockWidgetConfigContext = {
13468
13468
  closeEditMode: async () => { },
13469
13469
  };
13470
13470
 
13471
- const RerenderContext = createContext({ rerenderCounter: 0, setRerenderCounter: (value) => { } });
13471
+ const RerenderContext = createContext({ counter: 0 });
13472
13472
  /**
13473
- * This provider is used to force re-renders in the test environment, since tanstack router does not support re-render.
13473
+ * Provides a rerender signal via context to force re-renders in tests.
13474
+ * TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
13475
+ * propagating to the hook under test. React context changes bypass React.memo boundaries,
13476
+ * so changing the context value triggers a re-render in any descendant consuming RerenderContext.
13477
+ *
13478
+ * The value is intentionally wrapped in a new object on every render. This ensures the context
13479
+ * identity always changes -- even when the external counter prop hasn't changed (e.g. during
13480
+ * HookRenderer's automatic rerender) -- so consumers are always notified.
13474
13481
  */
13475
- const RerenderProvider = ({ children, counter }) => {
13476
- const [rerenderCounter, setRerenderCounter] = useState(0);
13477
- useEffect(() => {
13478
- if (counter && rerenderCounter !== counter && rerenderCounter !== 0) {
13479
- setRerenderCounter(counter);
13480
- }
13481
- }, [rerenderCounter, counter]);
13482
- return (jsx(RerenderContext.Provider, { value: { rerenderCounter, setRerenderCounter }, children: children }));
13483
- };
13482
+ const RerenderProvider = ({ children, counter }) => (jsx(RerenderContext.Provider, { value: { counter }, children: children }));
13484
13483
  /**
13485
- * This hook is used to get the rerender counter.
13484
+ * Returns the current rerender counter from context.
13486
13485
  */
13487
- const useRerenderCounter = () => {
13488
- return useContext(RerenderContext);
13489
- };
13486
+ const useRerenderCounter = () => useContext(RerenderContext).counter;
13490
13487
 
13491
13488
  /**
13492
- * This component is used to force re-renders in the test environment, since tanstack router does not support re-render.
13489
+ * Subscribes to RerenderContext so this subtree re-renders when the counter changes,
13490
+ * even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
13491
+ *
13492
+ * Consuming the context alone is not enough: React will bail out of re-rendering children
13493
+ * if the element references haven't changed. createElement produces new element instances
13494
+ * with a changed prop, which forces React to reconcile and re-render the test component.
13493
13495
  */
13494
13496
  const RerenderComponent = ({ children }) => {
13495
- const { rerenderCounter } = useRerenderCounter();
13496
- return (jsx("div", { "data-rerender-counter": `rerender-${rerenderCounter}`, children: Children.map(children, child => isValidElement(child)
13497
+ const counter = useRerenderCounter();
13498
+ return (jsx(Fragment, { children: Children.map(children, child => isValidElement(child)
13497
13499
  ? createElement(child.type, {
13498
13500
  ...child.props,
13499
13501
  key: child.key,
13500
- "data-rerender-counter": rerenderCounter,
13502
+ "data-rerender-counter": counter,
13501
13503
  })
13502
13504
  : child) }));
13503
13505
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-core-contexts-test",
3
- "version": "1.12.41",
3
+ "version": "1.12.42-alpha-ea91072db16.0",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -10,11 +10,11 @@
10
10
  "@apollo/client": "3.13.8",
11
11
  "react": "19.0.0",
12
12
  "@tanstack/react-router": "1.114.29",
13
- "@trackunit/shared-utils": "1.13.57",
13
+ "@trackunit/shared-utils": "1.13.58-alpha-ea91072db16.0",
14
14
  "graphql": "^16.10.0",
15
15
  "@tanstack/router-core": "1.114.29",
16
- "@trackunit/iris-app-runtime-core-api": "1.12.39",
17
- "@trackunit/react-core-contexts-api": "1.13.39",
16
+ "@trackunit/iris-app-runtime-core-api": "1.12.40-alpha-ea91072db16.0",
17
+ "@trackunit/react-core-contexts-api": "1.13.40-alpha-ea91072db16.0",
18
18
  "es-toolkit": "^1.39.10"
19
19
  },
20
20
  "module": "./index.esm.js",
@@ -1,7 +1,12 @@
1
- import { ReactNode } from "react";
1
+ import { type ReactNode } from "react";
2
2
  /**
3
- * This component is used to force re-renders in the test environment, since tanstack router does not support re-render.
3
+ * Subscribes to RerenderContext so this subtree re-renders when the counter changes,
4
+ * even when nested inside React.memo boundaries (like TanStack Router's Match/MatchInner).
5
+ *
6
+ * Consuming the context alone is not enough: React will bail out of re-rendering children
7
+ * if the element references haven't changed. createElement produces new element instances
8
+ * with a changed prop, which forces React to reconcile and re-render the test component.
4
9
  */
5
10
  export declare const RerenderComponent: ({ children }: {
6
11
  children: ReactNode;
7
- }) => import("react/jsx-runtime").JSX.Element;
12
+ }) => ReactNode;
@@ -1,15 +1,19 @@
1
1
  import { ReactNode } from "react";
2
2
  /**
3
- * This provider is used to force re-renders in the test environment, since tanstack router does not support re-render.
3
+ * Provides a rerender signal via context to force re-renders in tests.
4
+ * TanStack Router wraps Match/MatchInner in React.memo, which blocks RTL's rerender() from
5
+ * propagating to the hook under test. React context changes bypass React.memo boundaries,
6
+ * so changing the context value triggers a re-render in any descendant consuming RerenderContext.
7
+ *
8
+ * The value is intentionally wrapped in a new object on every render. This ensures the context
9
+ * identity always changes -- even when the external counter prop hasn't changed (e.g. during
10
+ * HookRenderer's automatic rerender) -- so consumers are always notified.
4
11
  */
5
12
  export declare const RerenderProvider: ({ children, counter }: {
6
13
  children: ReactNode;
7
14
  counter: number;
8
- }) => import("react/jsx-runtime").JSX.Element;
15
+ }) => ReactNode;
9
16
  /**
10
- * This hook is used to get the rerender counter.
17
+ * Returns the current rerender counter from context.
11
18
  */
12
- export declare const useRerenderCounter: () => {
13
- rerenderCounter: number;
14
- setRerenderCounter: (value: number) => void;
15
- };
19
+ export declare const useRerenderCounter: () => number;