@edgeandnode/eds-react 1.0.1 → 1.0.2

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.
Files changed (160) hide show
  1. package/README.md +20 -3
  2. package/dist/EDSContext.d.ts +3 -0
  3. package/dist/EDSContext.d.ts.map +1 -1
  4. package/dist/EDSContext.js +7 -0
  5. package/dist/EDSContext.js.map +1 -1
  6. package/dist/EDSProvider.d.ts +1 -1
  7. package/dist/EDSProvider.d.ts.map +1 -1
  8. package/dist/EDSProvider.js +15 -8
  9. package/dist/EDSProvider.js.map +1 -1
  10. package/dist/components/Avatar.d.ts.map +1 -1
  11. package/dist/components/Avatar.js +3 -2
  12. package/dist/components/Avatar.js.map +1 -1
  13. package/dist/components/Breadcrumbs.parts.d.ts +4 -3
  14. package/dist/components/Breadcrumbs.parts.d.ts.map +1 -1
  15. package/dist/components/Breadcrumbs.parts.js +15 -14
  16. package/dist/components/Breadcrumbs.parts.js.map +1 -1
  17. package/dist/components/Button.d.ts.map +1 -1
  18. package/dist/components/Button.js +3 -2
  19. package/dist/components/Button.js.map +1 -1
  20. package/dist/components/CodeBlock.parts.d.ts.map +1 -1
  21. package/dist/components/CodeBlock.parts.js +16 -20
  22. package/dist/components/CodeBlock.parts.js.map +1 -1
  23. package/dist/components/CopyButton.d.ts.map +1 -1
  24. package/dist/components/CopyButton.js +3 -2
  25. package/dist/components/CopyButton.js.map +1 -1
  26. package/dist/components/Icon.d.ts.map +1 -1
  27. package/dist/components/Icon.js +3 -3
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/LocalTheme.d.ts +16 -0
  30. package/dist/components/LocalTheme.d.ts.map +1 -0
  31. package/dist/components/LocalTheme.js +22 -0
  32. package/dist/components/LocalTheme.js.map +1 -0
  33. package/dist/components/Menu.parts.d.ts.map +1 -1
  34. package/dist/components/Menu.parts.js +6 -4
  35. package/dist/components/Menu.parts.js.map +1 -1
  36. package/dist/components/Modal.parts.d.ts.map +1 -1
  37. package/dist/components/Modal.parts.js +21 -10
  38. package/dist/components/Modal.parts.js.map +1 -1
  39. package/dist/components/SegmentedControl.parts.d.ts.map +1 -1
  40. package/dist/components/SegmentedControl.parts.js +3 -2
  41. package/dist/components/SegmentedControl.parts.js.map +1 -1
  42. package/dist/components/Select.parts.d.ts +4 -4
  43. package/dist/components/Select.parts.d.ts.map +1 -1
  44. package/dist/components/Select.parts.js +2 -1
  45. package/dist/components/Select.parts.js.map +1 -1
  46. package/dist/components/TabSet.parts.d.ts.map +1 -1
  47. package/dist/components/TabSet.parts.js +3 -2
  48. package/dist/components/TabSet.parts.js.map +1 -1
  49. package/dist/components/Table.parts.d.ts.map +1 -1
  50. package/dist/components/Table.parts.js +3 -4
  51. package/dist/components/Table.parts.js.map +1 -1
  52. package/dist/components/ThemeSwitcher.js +2 -2
  53. package/dist/components/ThemeSwitcher.js.map +1 -1
  54. package/dist/components/Tooltip.parts.js +2 -2
  55. package/dist/components/Tooltip.parts.js.map +1 -1
  56. package/dist/components/base/Addon.d.ts.map +1 -1
  57. package/dist/components/base/Addon.js +2 -4
  58. package/dist/components/base/Addon.js.map +1 -1
  59. package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
  60. package/dist/components/base/ButtonOrLink.parts.js +2 -1
  61. package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
  62. package/dist/components/index.d.ts +1 -0
  63. package/dist/components/index.d.ts.map +1 -1
  64. package/dist/components/index.js +1 -0
  65. package/dist/components/index.js.map +1 -1
  66. package/dist/hooks/useCSSProp.js +1 -1
  67. package/dist/hooks/useCSSProp.js.map +1 -1
  68. package/dist/hooks/useEDS.d.ts +16 -1
  69. package/dist/hooks/useEDS.d.ts.map +1 -1
  70. package/dist/hooks/useEDS.js +18 -2
  71. package/dist/hooks/useEDS.js.map +1 -1
  72. package/dist/hooks/useStyleObserver.d.ts.map +1 -1
  73. package/dist/hooks/useStyleObserver.js +2 -1
  74. package/dist/hooks/useStyleObserver.js.map +1 -1
  75. package/dist/icons/CalendarDynamicIcon.d.ts.map +1 -1
  76. package/dist/icons/CalendarDynamicIcon.js +3 -1
  77. package/dist/icons/CalendarDynamicIcon.js.map +1 -1
  78. package/dist/utils/getReactNodeKey.d.ts.map +1 -1
  79. package/dist/utils/getReactNodeKey.js +31 -13
  80. package/dist/utils/getReactNodeKey.js.map +1 -1
  81. package/dist/utils/index.d.ts +1 -1
  82. package/dist/utils/index.d.ts.map +1 -1
  83. package/dist/utils/index.js +1 -1
  84. package/dist/utils/index.js.map +1 -1
  85. package/dist/utils/internal/getTooltipProps.d.ts +9 -0
  86. package/dist/utils/internal/getTooltipProps.d.ts.map +1 -0
  87. package/dist/utils/internal/getTooltipProps.js +18 -0
  88. package/dist/utils/internal/getTooltipProps.js.map +1 -0
  89. package/dist/utils/internal/index.d.ts +4 -0
  90. package/dist/utils/internal/index.d.ts.map +1 -0
  91. package/dist/utils/internal/index.js +4 -0
  92. package/dist/utils/internal/index.js.map +1 -0
  93. package/dist/utils/internal/resolveLazy.d.ts +29 -0
  94. package/dist/utils/internal/resolveLazy.d.ts.map +1 -0
  95. package/dist/utils/internal/resolveLazy.js +40 -0
  96. package/dist/utils/internal/resolveLazy.js.map +1 -0
  97. package/dist/utils/internal/styleScheduler.d.ts.map +1 -0
  98. package/dist/utils/internal/styleScheduler.js.map +1 -0
  99. package/dist/utils/isComponentType.d.ts +9 -0
  100. package/dist/utils/isComponentType.d.ts.map +1 -0
  101. package/dist/utils/isComponentType.js +22 -0
  102. package/dist/utils/isComponentType.js.map +1 -0
  103. package/dist/utils/isReactNode.d.ts +7 -0
  104. package/dist/utils/isReactNode.d.ts.map +1 -1
  105. package/dist/utils/isReactNode.js +11 -0
  106. package/dist/utils/isReactNode.js.map +1 -1
  107. package/dist/utils/reactNodeToString.d.ts +3 -0
  108. package/dist/utils/reactNodeToString.d.ts.map +1 -1
  109. package/dist/utils/reactNodeToString.js +6 -0
  110. package/dist/utils/reactNodeToString.js.map +1 -1
  111. package/dist/utils/styleObserver.js +1 -1
  112. package/dist/utils/trimReactNode.d.ts +3 -0
  113. package/dist/utils/trimReactNode.d.ts.map +1 -1
  114. package/dist/utils/trimReactNode.js +6 -0
  115. package/dist/utils/trimReactNode.js.map +1 -1
  116. package/package.json +8 -7
  117. package/scripts/update-skill.cjs +18 -5
  118. package/skill/SKILL.md +13 -9
  119. package/skill/references/tokens.md +2 -8
  120. package/src/EDSContext.ts +9 -0
  121. package/src/EDSProvider.tsx +34 -9
  122. package/src/components/Avatar.tsx +3 -2
  123. package/src/components/Breadcrumbs.parts.tsx +31 -15
  124. package/src/components/Button.tsx +3 -2
  125. package/src/components/CodeBlock.parts.tsx +20 -24
  126. package/src/components/CopyButton.tsx +3 -2
  127. package/src/components/Icon.tsx +3 -9
  128. package/src/components/LocalTheme.tsx +39 -0
  129. package/src/components/Menu.parts.tsx +5 -3
  130. package/src/components/Modal.parts.tsx +20 -10
  131. package/src/components/SegmentedControl.parts.tsx +3 -8
  132. package/src/components/Select.parts.tsx +6 -5
  133. package/src/components/TabSet.parts.tsx +3 -5
  134. package/src/components/Table.parts.tsx +3 -3
  135. package/src/components/ThemeSwitcher.tsx +2 -2
  136. package/src/components/Tooltip.parts.tsx +2 -2
  137. package/src/components/base/Addon.tsx +3 -4
  138. package/src/components/base/ButtonOrLink.parts.tsx +2 -1
  139. package/src/components/index.ts +1 -0
  140. package/src/hooks/useCSSProp.ts +1 -1
  141. package/src/hooks/useEDS.ts +18 -2
  142. package/src/hooks/useStyleObserver.ts +2 -1
  143. package/src/icons/CalendarDynamicIcon.tsx +1 -0
  144. package/src/utils/getReactNodeKey.ts +30 -14
  145. package/src/utils/index.ts +1 -1
  146. package/src/utils/internal/getTooltipProps.ts +25 -0
  147. package/src/utils/internal/index.ts +3 -0
  148. package/src/utils/internal/resolveLazy.ts +44 -0
  149. package/src/utils/isComponentType.ts +27 -0
  150. package/src/utils/isReactNode.ts +11 -0
  151. package/src/utils/reactNodeToString.ts +7 -0
  152. package/src/utils/styleObserver.ts +1 -1
  153. package/src/utils/trimReactNode.tsx +7 -0
  154. package/dist/utils/styleScheduler.d.ts.map +0 -1
  155. package/dist/utils/styleScheduler.js.map +0 -1
  156. package/src/__snapshots__/compiled.css +0 -22499
  157. package/styles/tailwind.storybook.css +0 -19
  158. /package/dist/utils/{styleScheduler.d.ts → internal/styleScheduler.d.ts} +0 -0
  159. /package/dist/utils/{styleScheduler.js → internal/styleScheduler.js} +0 -0
  160. /package/src/utils/{styleScheduler.ts → internal/styleScheduler.ts} +0 -0
@@ -1,8 +1,23 @@
1
1
  /** Throws an error if used outside of a `EDSProvider`. */
2
2
  export declare function useEDS(): {
3
+ /** The page's theme: `'dark'`, `'light'`, or `'system'` (follows the OS preference) */
3
4
  theme: import("../EDSContext.ts").Theme;
4
- activeTheme: import("../EDSContext.ts").ResolvedTheme;
5
+ /** Changes the page's theme (use `ThemeSwitcher` for the UI) */
5
6
  setTheme: (theme: import("../EDSContext.ts").Theme) => void;
7
+ /** The page's theme, with `'system'` resolved to `'dark'` or `'light'` */
8
+ activeTheme: import("../EDSContext.ts").ResolvedTheme;
9
+ /**
10
+ * The theme of the nearest `Dark` or `Light` ancestor, or `undefined` if there's none. Use
11
+ * `localTheme ?? activeTheme` to get the theme content is rendered in.
12
+ */
13
+ localTheme: import("../EDSContext.ts").ResolvedTheme | undefined;
14
+ /**
15
+ * The class of the nearest `Dark` or `Light` ancestor, or `undefined` if there's none. Add it
16
+ * to content rendered outside of that ancestor in the DOM (e.g. with `createPortal`) so it
17
+ * keeps its theme.
18
+ */
19
+ localThemeClass: string | undefined;
20
+ /** The `dir` and `lang` of `EDSProvider`, to spread on content rendered outside of it. */
6
21
  dirProps: {
7
22
  dir: NonNullable<import("@base-ui/react").TextDirection | undefined>;
8
23
  lang: string;
@@ -1 +1 @@
1
- {"version":3,"file":"useEDS.d.ts","sourceRoot":"","sources":["../../src/hooks/useEDS.ts"],"names":[],"mappings":"AAIA,0DAA0D;AAC1D,wBAAgB,MAAM;IAQlB,KAAK;IACL,WAAW;IACX,QAAQ;IACR,QAAQ;QACN,GAAG;QACH,IAAI;;EAGT"}
1
+ {"version":3,"file":"useEDS.d.ts","sourceRoot":"","sources":["../../src/hooks/useEDS.ts"],"names":[],"mappings":"AAIA,0DAA0D;AAC1D,wBAAgB,MAAM;IASlB,uFAAuF;;IAEvF,gEAAgE;;IAEhE,0EAA0E;;IAE1E;;;OAGG;;IAEH;;;;OAIG;;IAEH,0FAA0F;;QAExF,GAAG;QACH,IAAI;;EAGT"}
@@ -1,15 +1,31 @@
1
1
  import { useContext } from 'react';
2
- import { EDSContext } from '../EDSContext.js';
2
+ import { EDSContext, LocalThemeContext, THEME_CLASSES } from '../EDSContext.js';
3
3
  /** Throws an error if used outside of a `EDSProvider`. */
4
4
  export function useEDS() {
5
5
  const context = useContext(EDSContext);
6
+ const localTheme = useContext(LocalThemeContext);
6
7
  if (context === null) {
7
8
  throw new Error('EDS components must be wrapped in a `EDSProvider`');
8
9
  }
9
10
  return {
11
+ /** The page's theme: `'dark'`, `'light'`, or `'system'` (follows the OS preference) */
10
12
  theme: context.theme,
11
- activeTheme: context.activeTheme,
13
+ /** Changes the page's theme (use `ThemeSwitcher` for the UI) */
12
14
  setTheme: context.setTheme,
15
+ /** The page's theme, with `'system'` resolved to `'dark'` or `'light'` */
16
+ activeTheme: context.activeTheme,
17
+ /**
18
+ * The theme of the nearest `Dark` or `Light` ancestor, or `undefined` if there's none. Use
19
+ * `localTheme ?? activeTheme` to get the theme content is rendered in.
20
+ */
21
+ localTheme,
22
+ /**
23
+ * The class of the nearest `Dark` or `Light` ancestor, or `undefined` if there's none. Add it
24
+ * to content rendered outside of that ancestor in the DOM (e.g. with `createPortal`) so it
25
+ * keeps its theme.
26
+ */
27
+ localThemeClass: localTheme !== undefined ? THEME_CLASSES[localTheme] : undefined,
28
+ /** The `dir` and `lang` of `EDSProvider`, to spread on content rendered outside of it. */
13
29
  dirProps: {
14
30
  dir: context.direction,
15
31
  lang: context.language,
@@ -1 +1 @@
1
- {"version":3,"file":"useEDS.js","sourceRoot":"","sources":["../../src/hooks/useEDS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,0DAA0D;AAC1D,MAAM,UAAU,MAAM;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAEtC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE;YACR,GAAG,EAAE,OAAO,CAAC,SAAS;YACtB,IAAI,EAAE,OAAO,CAAC,QAAQ;SACvB;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"useEDS.js","sourceRoot":"","sources":["../../src/hooks/useEDS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAE/E,0DAA0D;AAC1D,MAAM,UAAU,MAAM;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACtC,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAEhD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,OAAO;QACL,uFAAuF;QACvF,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,gEAAgE;QAChE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,0EAA0E;QAC1E,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC;;;WAGG;QACH,UAAU;QACV;;;;WAIG;QACH,eAAe,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,0FAA0F;QAC1F,QAAQ,EAAE;YACR,GAAG,EAAE,OAAO,CAAC,SAAS;YACtB,IAAI,EAAE,OAAO,CAAC,QAAQ;SACvB;KACF,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStyleObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useStyleObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAGtE,OAAO,EAAiC,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAG3F;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,UAAU,EAAE,CAAC,EAAE,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EACrD,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,4CA4CP"}
1
+ {"version":3,"file":"useStyleObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useStyleObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAGtE,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAI3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,UAAU,EAAE,CAAC,EAAE,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EACrD,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,4CA4CP"}
@@ -1,6 +1,7 @@
1
1
  import { useCallback, useLayoutEffect, useRef } from 'react';
2
2
  import { useMergedRefs } from '@base-ui/utils/useMergedRefs';
3
- import { styleObserver, styleScheduler } from '../utils/index.js';
3
+ import { styleObserver } from '../utils/index.js';
4
+ import { styleScheduler } from '../utils/internal/index.js';
4
5
  import { useEffectWithRefDeps } from './useEffectWithRefDeps.js';
5
6
  /**
6
7
  * Hook that observes style changes on an element. Calls the `onChange` callback whenever specified
@@ -1 +1 @@
1
- {"version":3,"file":"useStyleObserver.js","sourceRoot":"","sources":["../../src/hooks/useStyleObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAY,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,cAAc,EAA4B,MAAM,mBAAmB,CAAA;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAe,EACf,QAAqD,EACrD,IAAe,EACf,OAAO,GAIH,EAAE;IAEN,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IACvE,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAEvD,uDAAuD;IACvD,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAEpD,MAAM,CAAC,WAAW,CAAC,GAAG,oBAAoB,CACxC,GAAG,EAAE;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;QAClC,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ;YAAE,OAAM;QAE3D,uHAAuH;QACvH,IAAI,SAAS,EAAE,CAAC;YACd,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBACtD,gBAAgB,CACd,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,OAAO;oBACf,QAAQ;oBACR,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC;oBAC/C,QAAQ,EAAE,EAAE;iBACb,CAAC,CAAC,CACJ,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,aAAa,CAAC,SAAS,CAC5B,OAAO,EACP,UAAU,EACV,gBAA4D,CAC7D,CAAA;IACH,CAAC,EACD,CAAC,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,EACnD,CAAC,UAAU,CAAC,EACZ;QACE,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,eAAe;KACtB,CACF,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"useStyleObserver.js","sourceRoot":"","sources":["../../src/hooks/useStyleObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAY,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,OAAO,EAAE,aAAa,EAA4B,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAe,EACf,QAAqD,EACrD,IAAe,EACf,OAAO,GAIH,EAAE;IAEN,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IACvE,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAEvD,uDAAuD;IACvD,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAEpD,MAAM,CAAC,WAAW,CAAC,GAAG,oBAAoB,CACxC,GAAG,EAAE;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;QAClC,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ;YAAE,OAAM;QAE3D,uHAAuH;QACvH,IAAI,SAAS,EAAE,CAAC;YACd,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBACtD,gBAAgB,CACd,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,OAAO;oBACf,QAAQ;oBACR,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC;oBAC/C,QAAQ,EAAE,EAAE;iBACb,CAAC,CAAC,CACJ,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,aAAa,CAAC,SAAS,CAC5B,OAAO,EACP,UAAU,EACV,gBAA4D,CAC7D,CAAA;IACH,CAAC,EACD,CAAC,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,EACnD,CAAC,UAAU,CAAC,EACZ;QACE,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,eAAe;KACtB,CACF,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarDynamicIcon.d.ts","sourceRoot":"","sources":["../../src/icons/CalendarDynamicIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE7D,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IACtE,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,IAAiB,EACjB,GAAG,KAAK,EACT,EAAE,wBAAwB,+BAwC1B"}
1
+ {"version":3,"file":"CalendarDynamicIcon.d.ts","sourceRoot":"","sources":["../../src/icons/CalendarDynamicIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE7D,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IACtE,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EAEH,IAAiB,EACjB,GAAG,KAAK,EACT,EAAE,wBAAwB,+BAwC1B"}
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useId } from 'react';
3
3
  import { Icon } from '../components/Icon.js';
4
- export function CalendarDynamicIcon({ alt, date = new Date(), ...props }) {
4
+ export function CalendarDynamicIcon({ alt,
5
+ // oxlint-disable-next-line react/purity -- `useState(() => new Date())` would need `'use client'`, which would cause hydration mismatches (time zone, locale) where this is rendered by a server component
6
+ date = new Date(), ...props }) {
5
7
  const uniqueId = useId();
6
8
  return (_jsx(Icon, { src: _jsxs("svg", { viewBox: "0 0 16 16", fill: "currentcolor", children: [_jsxs("defs", { children: [_jsx("path", { id: `${uniqueId}-calendar-path`, d: "M13 2H11.5V1.5C11.5 1.37 11.45 1.24 11.35 1.15C11.26 1.05 11.13 1 11 1C10.87 1 10.74 1.05 10.65 1.15C10.55 1.24 10.5 1.37 10.5 1.5V2H5.5V1.5C5.5 1.37 5.45 1.24 5.35 1.15C5.26 1.05 5.13 1 5 1C4.87 1 4.74 1.05 4.65 1.15C4.55 1.24 4.5 1.37 4.5 1.5V2H3C2.73 2 2.48 2.11 2.29 2.29C2.11 2.48 2 2.73 2 3V13C2 13.27 2.11 13.52 2.29 13.71C2.48 13.89 2.73 14 3 14H13C13.27 14 13.52 13.89 13.71 13.71C13.89 13.52 14 13.27 14 13V3C14 2.73 13.89 2.48 13.71 2.29C13.52 2.11 13.27 2 13 2ZM3 5V3H4.5V3.5C4.5 3.63 4.55 3.76 4.65 3.85C4.74 3.95 4.87 4 5 4C5.13 4 5.26 3.95 5.35 3.85C5.45 3.76 5.5 3.63 5.5 3.5V3H10.5V3.5C10.5 3.63 10.55 3.76 10.65 3.85C10.74 3.95 10.87 4 11 4C11.13 4 11.26 3.95 11.35 3.85C11.45 3.76 11.5 3.63 11.5 3.5V3H13V5H3Z" }), _jsxs("mask", { id: `${uniqueId}-text-mask`, children: [_jsx("rect", { width: "16", height: "16", fill: "white" }), _jsx("text", { x: "8", y: "10", textAnchor: "middle", dominantBaseline: "middle", fill: "black", fontSize: "7px", fontWeight: "bold", children: typeof date === 'number' ? date : date.getDate() })] })] }), _jsx("use", { href: `#${uniqueId}-calendar-path`, mask: `url(#${uniqueId}-text-mask)` })] }), alt: alt ??
7
9
  (typeof date === 'number'
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarDynamicIcon.js","sourceRoot":"","sources":["../../src/icons/CalendarDynamicIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,IAAI,EAAkB,MAAM,uBAAwB,CAAA;AAc7D,MAAM,UAAU,mBAAmB,CAAC,EAClC,GAAG,EACH,IAAI,GAAG,IAAI,IAAI,EAAE,EACjB,GAAG,KAAK,EACiB;IACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAA;IAExB,OAAO,CACL,KAAC,IAAI,IACH,GAAG,EACD,eAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,aAC1C,2BACE,eACE,EAAE,EAAE,GAAG,QAAQ,gBAAgB,EAC/B,CAAC,EAAC,0tBAA0tB,GAC5tB,EACF,gBAAM,EAAE,EAAE,GAAG,QAAQ,YAAY,aAC/B,eAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,GAAG,EAC5C,eACE,CAAC,EAAC,GAAG,EACL,CAAC,EAAC,IAAI,EACN,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,QAAQ,EACzB,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAC,KAAK,EACd,UAAU,EAAC,MAAM,YAEhB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAC5C,IACF,IACF,EACP,cAAK,IAAI,EAAE,IAAI,QAAQ,gBAAgB,EAAE,IAAI,EAAE,QAAQ,QAAQ,aAAa,GAAI,IAC5E,EAER,GAAG,EACD,GAAG;YACH,CAAC,OAAO,IAAI,KAAK,QAAQ;gBACvB,CAAC,CAAC,OAAO,IAAI,eAAe;gBAC5B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,eAEtD,iBAAiB,KACvB,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"CalendarDynamicIcon.js","sourceRoot":"","sources":["../../src/icons/CalendarDynamicIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,IAAI,EAAkB,MAAM,uBAAwB,CAAA;AAc7D,MAAM,UAAU,mBAAmB,CAAC,EAClC,GAAG;AACH,2MAA2M;AAC3M,IAAI,GAAG,IAAI,IAAI,EAAE,EACjB,GAAG,KAAK,EACiB;IACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAA;IAExB,OAAO,CACL,KAAC,IAAI,IACH,GAAG,EACD,eAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,aAC1C,2BACE,eACE,EAAE,EAAE,GAAG,QAAQ,gBAAgB,EAC/B,CAAC,EAAC,0tBAA0tB,GAC5tB,EACF,gBAAM,EAAE,EAAE,GAAG,QAAQ,YAAY,aAC/B,eAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,GAAG,EAC5C,eACE,CAAC,EAAC,GAAG,EACL,CAAC,EAAC,IAAI,EACN,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,QAAQ,EACzB,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAC,KAAK,EACd,UAAU,EAAC,MAAM,YAEhB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAC5C,IACF,IACF,EACP,cAAK,IAAI,EAAE,IAAI,QAAQ,gBAAgB,EAAE,IAAI,EAAE,QAAQ,QAAQ,aAAa,GAAI,IAC5E,EAER,GAAG,EACD,GAAG;YACH,CAAC,OAAO,IAAI,KAAK,QAAQ;gBACvB,CAAC,CAAC,OAAO,IAAI,eAAe;gBAC5B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,eAEtD,iBAAiB,KACvB,KAAK,GACT,CACH,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getReactNodeKey.d.ts","sourceRoot":"","sources":["../../src/utils/getReactNodeKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAMhE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAe5D"}
1
+ {"version":3,"file":"getReactNodeKey.d.ts","sourceRoot":"","sources":["../../src/utils/getReactNodeKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAOhE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA8B5D"}
@@ -1,5 +1,6 @@
1
1
  import { Children, isValidElement } from 'react';
2
2
  import { getKey } from '@edgeandnode/eds-utils';
3
+ import { resolveLazy } from './internal/index.js';
3
4
  import { reactNodeToString } from './reactNodeToString.js';
4
5
  /**
5
6
  * Generates a stable key for a `ReactNode`. Useful for detecting when arbitrary content has
@@ -9,18 +10,35 @@ import { reactNodeToString } from './reactNodeToString.js';
9
10
  * @returns A string key that uniquely identifies the node structure and content.
10
11
  */
11
12
  export function getReactNodeKey(reactNode) {
12
- const keys = Children.map(reactNode, (child) => {
13
- if (!child || typeof child === 'boolean') {
14
- return 'empty';
15
- }
16
- if (!isValidElement(child)) {
17
- return getKey(child);
18
- }
19
- if (child.key !== null) {
20
- return `key:${child.key}`;
21
- }
22
- return `${getKey(child.type)}:${reactNodeToString(child)}`;
23
- }) ?? [];
24
- return keys.length > 0 ? keys.join('|') : 'empty';
13
+ try {
14
+ const keys = Children.map(reactNode, (child) => {
15
+ if (!child || typeof child === 'boolean') {
16
+ return 'empty';
17
+ }
18
+ if (!isValidElement(child)) {
19
+ return getKey(child);
20
+ }
21
+ if (child.key !== null) {
22
+ return `key:${child.key}`;
23
+ }
24
+ /**
25
+ * Key the type by the component it resolves to, so that identical content created by a
26
+ * server component gets the same key in every server response (each of which has new lazy
27
+ * types)
28
+ */
29
+ return `${getKey(resolveLazy(child.type))}:${reactNodeToString(child)}`;
30
+ }) ?? [];
31
+ return keys.length > 0 ? keys.join('|') : 'empty';
32
+ }
33
+ catch (error) {
34
+ /**
35
+ * Resolving a lazy value (e.g. from a server component) suspends (throws a thenable) while it's
36
+ * still loading, which isn't possible in effects, where this is also called. Fall back to the
37
+ * node's identity then, but let any other error through.
38
+ */
39
+ if (typeof error !== 'object' || error === null || !('then' in error))
40
+ throw error;
41
+ return getKey(reactNode);
42
+ }
25
43
  }
26
44
  //# sourceMappingURL=getReactNodeKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getReactNodeKey.js","sourceRoot":"","sources":["../../src/utils/getReactNodeKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAA;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,MAAM,IAAI,GACR,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,OAAO,KAAK,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAA;IAC5D,CAAC,CAAC,IAAI,EAAE,CAAA;IACV,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"getReactNodeKey.js","sourceRoot":"","sources":["../../src/utils/getReactNodeKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAA;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GACR,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzC,OAAO,OAAO,CAAA;YAChB,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,OAAO,KAAK,CAAC,GAAG,EAAE,CAAA;YAC3B,CAAC;YACD;;;;eAIG;YACH,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAA;QACzE,CAAC,CAAC,IAAI,EAAE,CAAA;QACV,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf;;;;WAIG;QACH,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QAClF,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC"}
@@ -3,13 +3,13 @@ export { getAssetUrl } from './getAssetUrl.ts';
3
3
  export { getCSSPropsAttributes } from './getCSSPropsAttributes.ts';
4
4
  export { getReactNodeKey } from './getReactNodeKey.ts';
5
5
  export { InlineCounter } from './InlineCounter.tsx';
6
+ export { isComponentType } from './isComponentType.ts';
6
7
  export { isReactNode } from './isReactNode.ts';
7
8
  export { reactNodeToString } from './reactNodeToString.ts';
8
9
  export { RenderCount } from './RenderCount.tsx';
9
10
  export { setInputValue } from './setInputValue.ts';
10
11
  export { splitProps } from './splitProps.ts';
11
12
  export { styleObserver, type StyleObserverRecord } from './styleObserver.ts';
12
- export { styleScheduler } from './styleScheduler.ts';
13
13
  export { trimReactNode } from './trimReactNode.tsx';
14
14
  export type { OptionValue, Stringifiable } from './types.ts';
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -3,12 +3,12 @@ export { getAssetUrl } from './getAssetUrl.js';
3
3
  export { getCSSPropsAttributes } from './getCSSPropsAttributes.js';
4
4
  export { getReactNodeKey } from './getReactNodeKey.js';
5
5
  export { InlineCounter } from './InlineCounter.js';
6
+ export { isComponentType } from './isComponentType.js';
6
7
  export { isReactNode } from './isReactNode.js';
7
8
  export { reactNodeToString } from './reactNodeToString.js';
8
9
  export { RenderCount } from './RenderCount.js';
9
10
  export { setInputValue } from './setInputValue.js';
10
11
  export { splitProps } from './splitProps.js';
11
12
  export { styleObserver } from './styleObserver.js';
12
- export { styleScheduler } from './styleScheduler.js';
13
13
  export { trimReactNode } from './trimReactNode.js';
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAA4B,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAA4B,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { TooltipProps } from '../../components/Tooltip.tsx';
2
+ /**
3
+ * Normalizes a component's `tooltip` prop, which accepts either the tooltip's content or its props.
4
+ * Checks for props (a plain object that isn't a React node) rather than for content, so that any
5
+ * kind of node is treated as content, including ones that `isReactNode` doesn't recognize (e.g.
6
+ * portals or promises).
7
+ */
8
+ export declare function getTooltipProps(tooltip: TooltipProps['content'] | Omit<TooltipProps, 'children'>): Omit<TooltipProps, 'children'>;
9
+ //# sourceMappingURL=getTooltipProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTooltipProps.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/getTooltipProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAChE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAGhC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Normalizes a component's `tooltip` prop, which accepts either the tooltip's content or its props.
3
+ * Checks for props (a plain object that isn't a React node) rather than for content, so that any
4
+ * kind of node is treated as content, including ones that `isReactNode` doesn't recognize (e.g.
5
+ * portals or promises).
6
+ */
7
+ export function getTooltipProps(tooltip) {
8
+ if (tooltip === undefined)
9
+ return {};
10
+ return isTooltipProps(tooltip) ? tooltip : { content: tooltip };
11
+ }
12
+ function isTooltipProps(tooltip) {
13
+ return (typeof tooltip === 'object' &&
14
+ tooltip !== null &&
15
+ !('$$typeof' in tooltip) &&
16
+ [Object.prototype, null].includes(Object.getPrototypeOf(tooltip)));
17
+ }
18
+ //# sourceMappingURL=getTooltipProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTooltipProps.js","sourceRoot":"","sources":["../../../src/utils/internal/getTooltipProps.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAiE;IAEjE,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,cAAc,CACrB,OAAqF;IAErF,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC;QACxB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAClE,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getTooltipProps } from './getTooltipProps.ts';
2
+ export { isLazy, resolveLazy } from './resolveLazy.ts';
3
+ export { styleScheduler } from './styleScheduler.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { getTooltipProps } from './getTooltipProps.js';
2
+ export { isLazy, resolveLazy } from './resolveLazy.js';
3
+ export { styleScheduler } from './styleScheduler.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Whether `value` is a lazy value, which is how the React Server Components payload can encode an
3
+ * element passed as a prop from a server component (e.g. when it's rendered by an async server
4
+ * component), or the `type` of an element created by a server component (so the client can suspend
5
+ * on that component's code). `React.lazy()` components are lazy values too.
6
+ *
7
+ * Not to be confused with `react-is`'s `isLazy`, which checks whether an element's type is lazy.
8
+ */
9
+ export declare function isLazy(value: unknown): value is {
10
+ _payload: unknown;
11
+ _init: (payload: unknown) => unknown;
12
+ };
13
+ /**
14
+ * Resolves a lazy value (see `isLazy`) to what it stands for. React resolves lazy values when
15
+ * rendering them, but code that inspects nodes or element types (`isValidElement`, `cloneElement`,
16
+ * reading `props`, comparing `type`, etc.) must resolve them first. Suspends (throws) while the
17
+ * value's content or code is still loading, so it must be called during render.
18
+ *
19
+ * React has no public API for this. Its `Children` utilities resolve lazy values but only keep
20
+ * renderable results, so they drop a function component and throw on a `memo` or `forwardRef` one.
21
+ * This relies on the same internal `_init` and `_payload` fields they use, which is why it's kept
22
+ * internal rather than offered as public API. Returns other values as is, including lazy ones in an
23
+ * unexpected shape.
24
+ *
25
+ * The return type is the same as the argument's because TypeScript already types a lazy value as
26
+ * what it resolves to.
27
+ */
28
+ export declare function resolveLazy<Value>(value: Value): Value;
29
+ //# sourceMappingURL=resolveLazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveLazy.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/resolveLazy.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,CAUtE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAItD"}
@@ -0,0 +1,40 @@
1
+ import { Lazy } from 'react-is';
2
+ /**
3
+ * Whether `value` is a lazy value, which is how the React Server Components payload can encode an
4
+ * element passed as a prop from a server component (e.g. when it's rendered by an async server
5
+ * component), or the `type` of an element created by a server component (so the client can suspend
6
+ * on that component's code). `React.lazy()` components are lazy values too.
7
+ *
8
+ * Not to be confused with `react-is`'s `isLazy`, which checks whether an element's type is lazy.
9
+ */
10
+ export function isLazy(value) {
11
+ return (typeof value === 'object' &&
12
+ value !== null &&
13
+ '$$typeof' in value &&
14
+ value.$$typeof === Lazy &&
15
+ '_payload' in value &&
16
+ '_init' in value &&
17
+ typeof value._init === 'function');
18
+ }
19
+ /**
20
+ * Resolves a lazy value (see `isLazy`) to what it stands for. React resolves lazy values when
21
+ * rendering them, but code that inspects nodes or element types (`isValidElement`, `cloneElement`,
22
+ * reading `props`, comparing `type`, etc.) must resolve them first. Suspends (throws) while the
23
+ * value's content or code is still loading, so it must be called during render.
24
+ *
25
+ * React has no public API for this. Its `Children` utilities resolve lazy values but only keep
26
+ * renderable results, so they drop a function component and throw on a `memo` or `forwardRef` one.
27
+ * This relies on the same internal `_init` and `_payload` fields they use, which is why it's kept
28
+ * internal rather than offered as public API. Returns other values as is, including lazy ones in an
29
+ * unexpected shape.
30
+ *
31
+ * The return type is the same as the argument's because TypeScript already types a lazy value as
32
+ * what it resolves to.
33
+ */
34
+ export function resolveLazy(value) {
35
+ let resolvedValue = value;
36
+ while (isLazy(resolvedValue))
37
+ resolvedValue = resolvedValue._init(resolvedValue._payload);
38
+ return resolvedValue;
39
+ }
40
+ //# sourceMappingURL=resolveLazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveLazy.js","sourceRoot":"","sources":["../../../src/utils/internal/resolveLazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CACpB,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,UAAU,IAAI,KAAK;QACnB,KAAK,CAAC,QAAQ,KAAK,IAAI;QACvB,UAAU,IAAI,KAAK;QACnB,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAClC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAQ,KAAY;IAC7C,IAAI,aAAa,GAAY,KAAK,CAAA;IAClC,OAAO,MAAM,CAAC,aAAa,CAAC;QAAE,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzF,OAAO,aAAsB,CAAA;AAC/B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleScheduler.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/styleScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAM,cAAc;IAClB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAiBzC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAM/D;CACF;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleScheduler.js","sourceRoot":"","sources":["../../../src/utils/internal/styleScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,cAAc;IACV,KAAK,GAAkB,IAAI,CAAA;IAC3B,OAAO,GAAmB,EAAE,CAAA;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,QAAoB;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE3B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;gBACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAA;gBAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;gBACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;gBAEjB,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC5C,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACjD,CAAC,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAgB;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACjB,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ /**
3
+ * Whether `value` is a component (function, class, `forwardRef`, or `memo`) rather than a node.
4
+ *
5
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
6
+ * components), which suspends while one is still loading, so call it during render.
7
+ */
8
+ export declare function isComponentType<Props>(value: ReactNode | ComponentType<Props>): value is ComponentType<Props>;
9
+ //# sourceMappingURL=isComponentType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isComponentType.d.ts","sourceRoot":"","sources":["../../src/utils/isComponentType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKrD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EACnC,KAAK,EAAE,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,GACtC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAa/B"}
@@ -0,0 +1,22 @@
1
+ import { ForwardRef, Memo } from 'react-is';
2
+ import { isLazy, resolveLazy } from './internal/index.js';
3
+ /**
4
+ * Whether `value` is a component (function, class, `forwardRef`, or `memo`) rather than a node.
5
+ *
6
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
7
+ * components), which suspends while one is still loading, so call it during render.
8
+ */
9
+ export function isComponentType(value) {
10
+ /**
11
+ * Unlike `react-is`'s `isValidElementType`, which returns `true` for any lazy value, resolving
12
+ * tells lazy components (e.g. `React.lazy()`) apart from lazy nodes.
13
+ */
14
+ if (isLazy(value))
15
+ return isComponentType(resolveLazy(value));
16
+ return (typeof value === 'function' ||
17
+ (typeof value === 'object' &&
18
+ value !== null &&
19
+ '$$typeof' in value &&
20
+ (value.$$typeof === ForwardRef || value.$$typeof === Memo)));
21
+ }
22
+ //# sourceMappingURL=isComponentType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isComponentType.js","sourceRoot":"","sources":["../../src/utils/isComponentType.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAuC;IAEvC;;;OAGG;IACH,IAAI,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7D,OAAO,CACL,OAAO,KAAK,KAAK,UAAU;QAC3B,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,KAAK,KAAK,IAAI;YACd,UAAU,IAAI,KAAK;YACnB,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAC9D,CAAA;AACH,CAAC"}
@@ -1,3 +1,10 @@
1
1
  import { type ReactNode } from 'react';
2
+ /**
3
+ * Whether `value` is a React node: `null`, `undefined`, a string, number, or boolean, an element, a
4
+ * lazy node (e.g. an element from a server component), or an array of these.
5
+ *
6
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
7
+ * components), which suspends while one is still loading, so call it during render.
8
+ */
2
9
  export declare function isReactNode(value: unknown): value is ReactNode;
3
10
  //# sourceMappingURL=isReactNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isReactNode.d.ts","sourceRoot":"","sources":["../../src/utils/isReactNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAU9D"}
1
+ {"version":3,"file":"isReactNode.d.ts","sourceRoot":"","sources":["../../src/utils/isReactNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAItD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAY9D"}
@@ -1,5 +1,16 @@
1
1
  import { isValidElement } from 'react';
2
+ import { isLazy, resolveLazy } from './internal/index.js';
3
+ /**
4
+ * Whether `value` is a React node: `null`, `undefined`, a string, number, or boolean, an element, a
5
+ * lazy node (e.g. an element from a server component), or an array of these.
6
+ *
7
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
8
+ * components), which suspends while one is still loading, so call it during render.
9
+ */
2
10
  export function isReactNode(value) {
11
+ // Resolving tells lazy nodes apart from lazy components (e.g. `React.lazy()`)
12
+ if (isLazy(value))
13
+ return isReactNode(resolveLazy(value));
3
14
  return (value === null ||
4
15
  value === undefined ||
5
16
  typeof value === 'string' ||
@@ -1 +1 @@
1
- {"version":3,"file":"isReactNode.js","sourceRoot":"","sources":["../../src/utils/isReactNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAA;AAEtD,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,cAAc,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CACnD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"isReactNode.js","sourceRoot":"","sources":["../../src/utils/isReactNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,OAAO,CAAA;AAEtD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,8EAA8E;IAC9E,IAAI,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,OAAO,CACL,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,cAAc,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CACnD,CAAA;AACH,CAAC"}
@@ -5,6 +5,9 @@ import { type ReactNode } from 'react';
5
5
  *
6
6
  * Based on `https://github.com/sunknudsen/react-node-to-string`
7
7
  *
8
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
9
+ * components), which suspends while one is still loading, so call it during render.
10
+ *
8
11
  * @param reactNode - The React node to convert to string.
9
12
  * @returns The string representation of the node, or empty string for null/undefined/boolean.
10
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reactNodeToString.d.ts","sourceRoot":"","sources":["../../src/utils/reactNodeToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEzE;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAe9D"}
1
+ {"version":3,"file":"reactNodeToString.d.ts","sourceRoot":"","sources":["../../src/utils/reactNodeToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIzE;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAiB9D"}
@@ -1,14 +1,20 @@
1
1
  import { isValidElement } from 'react';
2
+ import { isLazy, resolveLazy } from './internal/index.js';
2
3
  /**
3
4
  * Converts a `ReactNode` to a `string` representation. Extracts text content from React elements
4
5
  * recursively.
5
6
  *
6
7
  * Based on `https://github.com/sunknudsen/react-node-to-string`
7
8
  *
9
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
10
+ * components), which suspends while one is still loading, so call it during render.
11
+ *
8
12
  * @param reactNode - The React node to convert to string.
9
13
  * @returns The string representation of the node, or empty string for null/undefined/boolean.
10
14
  */
11
15
  export function reactNodeToString(reactNode) {
16
+ if (isLazy(reactNode))
17
+ return reactNodeToString(resolveLazy(reactNode));
12
18
  if (typeof reactNode === 'string') {
13
19
  return reactNode;
14
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reactNodeToString.js","sourceRoot":"","sources":["../../src/utils/reactNodeToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,OAAO,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,SAAmD,CAAA;QACnE,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"reactNodeToString.js","sourceRoot":"","sources":["../../src/utils/reactNodeToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqC,MAAM,OAAO,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,IAAI,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;IAEvE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,SAAmD,CAAA;QACnE,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import StyleObserver from 'style-observer';
2
- import { styleScheduler } from './styleScheduler.js';
2
+ import { styleScheduler } from './internal/index.js';
3
3
  /**
4
4
  * Singleton StyleObserver that all `useStyleObserver` hooks subscribe to. Instead of each hook
5
5
  * creating its own StyleObserver instance (with its own CSS transitions and event listeners), a
@@ -13,6 +13,9 @@ type Side = 'start' | 'end' | 'both';
13
13
  * When recursing into a non-string edge child (e.g. a nested fragment), only the corresponding side
14
14
  * is trimmed, so that whitespace which is internal to the outer node is preserved.
15
15
  *
16
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
17
+ * components), which suspends while one is still loading, so call it during render.
18
+ *
16
19
  * @example
17
20
  * ````tsx
18
21
  * trimReactNode(' hello ') // 'hello'
@@ -1 +1 @@
1
- {"version":3,"file":"trimReactNode.d.ts","sourceRoot":"","sources":["../../src/utils/trimReactNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEnF,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,IAAa,GAAG,SAAS,CAkElF"}
1
+ {"version":3,"file":"trimReactNode.d.ts","sourceRoot":"","sources":["../../src/utils/trimReactNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAInF,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,IAAa,GAAG,SAAS,CAoElF"}
@@ -1,4 +1,5 @@
1
1
  import { Children, isValidElement } from 'react';
2
+ import { isLazy, resolveLazy } from './internal/index.js';
2
3
  /**
3
4
  * Trims leading and trailing whitespace from a `ReactNode`.
4
5
  *
@@ -12,6 +13,9 @@ import { Children, isValidElement } from 'react';
12
13
  * When recursing into a non-string edge child (e.g. a nested fragment), only the corresponding side
13
14
  * is trimmed, so that whitespace which is internal to the outer node is preserved.
14
15
  *
16
+ * Like React's `Children` utilities, this resolves lazy values (e.g. elements from server
17
+ * components), which suspends while one is still loading, so call it during render.
18
+ *
15
19
  * @example
16
20
  * ````tsx
17
21
  * trimReactNode(' hello ') // 'hello'
@@ -27,6 +31,8 @@ import { Children, isValidElement } from 'react';
27
31
  * @returns A new `ReactNode` with the requested edge whitespace removed.
28
32
  */
29
33
  export function trimReactNode(reactNode, side = 'both') {
34
+ if (isLazy(reactNode))
35
+ return trimReactNode(resolveLazy(reactNode), side);
30
36
  // Handle primitives
31
37
  if (typeof reactNode === 'string') {
32
38
  switch (side) {
@@ -1 +1 @@
1
- {"version":3,"file":"trimReactNode.js","sourceRoot":"","sources":["../../src/utils/trimReactNode.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trimReactNode.js","sourceRoot":"","sources":["../../src/utils/trimReactNode.tsx"],"names":[],"mappings":"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"}