@uiw/react-json-view 2.0.0-alpha.4 → 2.0.0-alpha.41

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 (227) hide show
  1. package/README.md +280 -39
  2. package/basic.d.ts +4 -0
  3. package/cjs/Container.d.ts +2 -0
  4. package/cjs/Container.js +15 -6
  5. package/cjs/arrow/TriangleArrow.js +1 -1
  6. package/cjs/comps/Copied.d.ts +3 -4
  7. package/cjs/comps/Copied.js +61 -18
  8. package/cjs/comps/KeyValues.d.ts +2 -4
  9. package/cjs/comps/KeyValues.js +73 -28
  10. package/cjs/comps/NestedClose.d.ts +2 -2
  11. package/cjs/comps/NestedClose.js +42 -12
  12. package/cjs/comps/NestedOpen.d.ts +2 -3
  13. package/cjs/comps/NestedOpen.js +42 -20
  14. package/cjs/comps/Value.d.ts +2 -2
  15. package/cjs/comps/Value.js +5 -7
  16. package/cjs/comps/useIdCompat.d.ts +1 -0
  17. package/cjs/comps/useIdCompat.js +14 -0
  18. package/cjs/editor/KeyName.d.ts +2 -0
  19. package/cjs/editor/KeyName.js +82 -0
  20. package/cjs/editor/index.d.ts +18 -0
  21. package/cjs/editor/index.js +44 -0
  22. package/cjs/editor/store.d.ts +27 -0
  23. package/cjs/editor/store.js +23 -0
  24. package/cjs/index.d.ts +26 -4
  25. package/cjs/index.js +17 -7
  26. package/cjs/section/Copied.d.ts +4 -1
  27. package/cjs/section/Copied.js +1 -2
  28. package/cjs/section/CountInfo.d.ts +1 -2
  29. package/cjs/section/CountInfo.js +3 -5
  30. package/cjs/section/CountInfoExtra.d.ts +1 -2
  31. package/cjs/section/CountInfoExtra.js +2 -4
  32. package/cjs/section/Ellipsis.d.ts +0 -1
  33. package/cjs/section/Ellipsis.js +4 -5
  34. package/cjs/section/KeyName.d.ts +7 -6
  35. package/cjs/section/KeyName.js +8 -6
  36. package/cjs/section/Row.d.ts +13 -0
  37. package/cjs/section/Row.js +51 -0
  38. package/cjs/store/Expands.js +2 -4
  39. package/cjs/store/Section.d.ts +12 -6
  40. package/cjs/store/Section.js +6 -4
  41. package/cjs/store/ShowTools.js +2 -4
  42. package/cjs/store/Symbols.d.ts +10 -3
  43. package/cjs/store/Symbols.js +2 -4
  44. package/cjs/store/Types.d.ts +30 -25
  45. package/cjs/store/Types.js +8 -8
  46. package/cjs/store.d.ts +12 -6
  47. package/cjs/store.js +5 -10
  48. package/cjs/symbol/Arrow.d.ts +1 -1
  49. package/cjs/symbol/Arrow.js +1 -2
  50. package/cjs/symbol/BraceLeft.d.ts +1 -1
  51. package/cjs/symbol/BraceLeft.js +1 -2
  52. package/cjs/symbol/BraceRight.d.ts +1 -1
  53. package/cjs/symbol/BraceRight.js +1 -2
  54. package/cjs/symbol/BracketsLeft.d.ts +1 -1
  55. package/cjs/symbol/BracketsLeft.js +1 -2
  56. package/cjs/symbol/BracketsRight.d.ts +1 -1
  57. package/cjs/symbol/BracketsRight.js +1 -2
  58. package/cjs/symbol/Colon.d.ts +1 -1
  59. package/cjs/symbol/Colon.js +1 -2
  60. package/cjs/symbol/Quote.d.ts +1 -1
  61. package/cjs/symbol/Quote.js +1 -2
  62. package/cjs/symbol/ValueQuote.d.ts +1 -1
  63. package/cjs/symbol/ValueQuote.js +1 -2
  64. package/cjs/symbol/index.d.ts +12 -17
  65. package/cjs/symbol/index.js +82 -30
  66. package/cjs/theme/basic.d.ts +2 -2
  67. package/cjs/theme/basic.js +4 -3
  68. package/cjs/theme/dark.d.ts +2 -2
  69. package/cjs/theme/dark.js +2 -3
  70. package/cjs/theme/github.dark.d.ts +2 -2
  71. package/cjs/theme/github.dark.js +2 -3
  72. package/cjs/theme/github.light.d.ts +2 -2
  73. package/cjs/theme/github.light.js +2 -3
  74. package/cjs/theme/gruvbox.d.ts +2 -2
  75. package/cjs/theme/gruvbox.js +2 -3
  76. package/cjs/theme/light.d.ts +2 -2
  77. package/cjs/theme/light.js +2 -3
  78. package/cjs/theme/monokai.d.ts +2 -2
  79. package/cjs/theme/monokai.js +2 -3
  80. package/cjs/theme/nord.d.ts +2 -2
  81. package/cjs/theme/nord.js +2 -3
  82. package/cjs/theme/vscode.d.ts +2 -2
  83. package/cjs/theme/vscode.js +2 -3
  84. package/cjs/types/Bigint.d.ts +1 -1
  85. package/cjs/types/Bigint.js +1 -2
  86. package/cjs/types/Date.d.ts +1 -1
  87. package/cjs/types/Date.js +1 -2
  88. package/cjs/types/False.d.ts +1 -1
  89. package/cjs/types/False.js +1 -2
  90. package/cjs/types/Float.d.ts +1 -1
  91. package/cjs/types/Float.js +1 -2
  92. package/cjs/types/Int.d.ts +1 -1
  93. package/cjs/types/Int.js +1 -2
  94. package/cjs/types/Map.d.ts +1 -1
  95. package/cjs/types/Map.js +1 -2
  96. package/cjs/types/Nan.d.ts +1 -1
  97. package/cjs/types/Nan.js +1 -2
  98. package/cjs/types/Null.d.ts +1 -1
  99. package/cjs/types/Null.js +1 -2
  100. package/cjs/types/Set.d.ts +1 -1
  101. package/cjs/types/Set.js +1 -2
  102. package/cjs/types/String.d.ts +1 -1
  103. package/cjs/types/String.js +1 -2
  104. package/cjs/types/True.d.ts +1 -1
  105. package/cjs/types/True.js +1 -2
  106. package/cjs/types/Undefined.d.ts +1 -1
  107. package/cjs/types/Undefined.js +1 -2
  108. package/cjs/types/Url.d.ts +1 -1
  109. package/cjs/types/Url.js +1 -2
  110. package/cjs/types/index.d.ts +5 -2
  111. package/cjs/types/index.js +174 -166
  112. package/cjs/utils/useHighlight.d.ts +0 -1
  113. package/cjs/utils/useRender.d.ts +1 -1
  114. package/dark.d.ts +2 -1
  115. package/editor.d.ts +22 -20
  116. package/esm/Container.d.ts +2 -0
  117. package/esm/Container.js +21 -11
  118. package/esm/arrow/TriangleArrow.js +1 -1
  119. package/esm/comps/Copied.d.ts +3 -4
  120. package/esm/comps/Copied.js +61 -19
  121. package/esm/comps/KeyValues.d.ts +2 -4
  122. package/esm/comps/KeyValues.js +71 -27
  123. package/esm/comps/NestedClose.d.ts +2 -2
  124. package/esm/comps/NestedClose.js +40 -11
  125. package/esm/comps/NestedOpen.d.ts +2 -3
  126. package/esm/comps/NestedOpen.js +47 -26
  127. package/esm/comps/Value.d.ts +2 -2
  128. package/esm/comps/Value.js +3 -3
  129. package/esm/comps/useIdCompat.d.ts +1 -0
  130. package/esm/comps/useIdCompat.js +8 -0
  131. package/esm/editor/KeyName.d.ts +2 -0
  132. package/esm/editor/KeyName.js +77 -0
  133. package/esm/editor/index.d.ts +18 -0
  134. package/esm/editor/index.js +33 -0
  135. package/esm/editor/store.d.ts +27 -0
  136. package/esm/editor/store.js +13 -0
  137. package/esm/index.d.ts +26 -4
  138. package/esm/index.js +50 -41
  139. package/esm/section/Copied.d.ts +4 -1
  140. package/esm/section/Copied.js +2 -2
  141. package/esm/section/CountInfo.d.ts +1 -2
  142. package/esm/section/CountInfo.js +4 -4
  143. package/esm/section/CountInfoExtra.d.ts +1 -2
  144. package/esm/section/CountInfoExtra.js +2 -2
  145. package/esm/section/Ellipsis.d.ts +0 -1
  146. package/esm/section/Ellipsis.js +3 -3
  147. package/esm/section/KeyName.d.ts +7 -6
  148. package/esm/section/KeyName.js +8 -4
  149. package/esm/section/Row.d.ts +13 -0
  150. package/esm/section/Row.js +47 -0
  151. package/esm/store/Section.d.ts +12 -6
  152. package/esm/store/Section.js +4 -0
  153. package/esm/store/Symbols.d.ts +10 -3
  154. package/esm/store/Symbols.js +1 -1
  155. package/esm/store/Types.d.ts +30 -25
  156. package/esm/store/Types.js +6 -4
  157. package/esm/store.d.ts +12 -6
  158. package/esm/store.js +5 -5
  159. package/esm/symbol/Arrow.d.ts +1 -1
  160. package/esm/symbol/Arrow.js +2 -2
  161. package/esm/symbol/BraceLeft.d.ts +1 -1
  162. package/esm/symbol/BraceLeft.js +2 -2
  163. package/esm/symbol/BraceRight.d.ts +1 -1
  164. package/esm/symbol/BraceRight.js +2 -2
  165. package/esm/symbol/BracketsLeft.d.ts +1 -1
  166. package/esm/symbol/BracketsLeft.js +2 -2
  167. package/esm/symbol/BracketsRight.d.ts +1 -1
  168. package/esm/symbol/BracketsRight.js +2 -2
  169. package/esm/symbol/Colon.d.ts +1 -1
  170. package/esm/symbol/Colon.js +2 -2
  171. package/esm/symbol/Quote.d.ts +1 -1
  172. package/esm/symbol/Quote.js +2 -2
  173. package/esm/symbol/ValueQuote.d.ts +1 -1
  174. package/esm/symbol/ValueQuote.js +2 -2
  175. package/esm/symbol/index.d.ts +12 -17
  176. package/esm/symbol/index.js +85 -25
  177. package/esm/theme/basic.d.ts +2 -2
  178. package/esm/theme/basic.js +2 -0
  179. package/esm/theme/dark.d.ts +2 -2
  180. package/esm/theme/github.dark.d.ts +2 -2
  181. package/esm/theme/github.light.d.ts +2 -2
  182. package/esm/theme/gruvbox.d.ts +2 -2
  183. package/esm/theme/light.d.ts +2 -2
  184. package/esm/theme/monokai.d.ts +2 -2
  185. package/esm/theme/nord.d.ts +2 -2
  186. package/esm/theme/vscode.d.ts +2 -2
  187. package/esm/types/Bigint.d.ts +1 -1
  188. package/esm/types/Bigint.js +2 -2
  189. package/esm/types/Date.d.ts +1 -1
  190. package/esm/types/Date.js +2 -2
  191. package/esm/types/False.d.ts +1 -1
  192. package/esm/types/False.js +2 -2
  193. package/esm/types/Float.d.ts +1 -1
  194. package/esm/types/Float.js +2 -2
  195. package/esm/types/Int.d.ts +1 -1
  196. package/esm/types/Int.js +2 -2
  197. package/esm/types/Map.d.ts +1 -1
  198. package/esm/types/Map.js +2 -2
  199. package/esm/types/Nan.d.ts +1 -1
  200. package/esm/types/Nan.js +2 -2
  201. package/esm/types/Null.d.ts +1 -1
  202. package/esm/types/Null.js +2 -2
  203. package/esm/types/Set.d.ts +1 -1
  204. package/esm/types/Set.js +2 -2
  205. package/esm/types/String.d.ts +1 -1
  206. package/esm/types/String.js +2 -2
  207. package/esm/types/True.d.ts +1 -1
  208. package/esm/types/True.js +2 -2
  209. package/esm/types/Undefined.d.ts +1 -1
  210. package/esm/types/Undefined.js +2 -2
  211. package/esm/types/Url.d.ts +1 -1
  212. package/esm/types/Url.js +2 -2
  213. package/esm/types/index.d.ts +5 -2
  214. package/esm/types/index.js +148 -131
  215. package/esm/utils/useHighlight.d.ts +0 -1
  216. package/esm/utils/useRender.d.ts +1 -1
  217. package/esm/utils/useRender.js +3 -3
  218. package/githubDark.d.ts +4 -0
  219. package/githubLight.d.ts +4 -0
  220. package/gruvbox.d.ts +4 -0
  221. package/light.d.ts +2 -1
  222. package/monokai.d.ts +4 -0
  223. package/nord.d.ts +4 -0
  224. package/package.json +12 -6
  225. package/triangle-arrow.d.ts +2 -2
  226. package/triangle-solid-arrow.d.ts +2 -2
  227. package/vscode.d.ts +4 -0
package/README.md CHANGED
@@ -1,6 +1,44 @@
1
+ <div markdown="1">
2
+ <sup>Using <a href="https://wangchujiang.com/#/app" target="_blank">my app</a> is also a way to <a href="https://wangchujiang.com/#/sponsor" target="_blank">support</a> me:</sup>
3
+ <br>
4
+ <a target="_blank" href="https://apps.apple.com/app/6757317079" title="Screen Test for macOS"><img alt="Screen Test" height="52" width="52" src="https://wangchujiang.com/appicon/screen-test.png"></a>
5
+ <a target="_blank" href="https://apps.apple.com/app/Deskmark/6755948110" title="Deskmark for macOS"><img alt="Deskmark" height="52" width="52" src="https://wangchujiang.com/appicon/deskmark.png"></a>
6
+ <a target="_blank" href="https://apps.apple.com/app/Keyzer/6500434773" title="Keyzer for macOS"><img alt="Keyzer" height="52" width="52" src="https://wangchujiang.com/appicon/keyzer.png"></a>
7
+ <a target="_blank" href="https://github.com/jaywcjlove/vidwall-hub" title="Vidwall Hub for macOS"><img alt="Vidwall Hub" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall-hub.png"></a>
8
+ <a target="_blank" href="https://apps.apple.com/app/VidCrop/6752624705" title="VidCrop for macOS"><img alt="VidCrop" height="52" width="52" src="https://wangchujiang.com/appicon/vidcrop.png"></a>
9
+ <a target="_blank" href="https://apps.apple.com/app/Vidwall/6747587746" title="Vidwall for macOS"><img alt="Vidwall" height="52" width="52" src="https://wangchujiang.com/appicon/vidwall.png"></a>
10
+ <a target="_blank" href="https://wangchujiang.com/mousio-hint/" title="Mousio Hint for macOS"><img alt="Mousio Hint" height="52" width="52" src="https://wangchujiang.com/appicon/mousio-hint.png"></a>
11
+ <a target="_blank" href="https://apps.apple.com/app/6746747327" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/mousio.png"></a>
12
+ <a target="_blank" href="https://apps.apple.com/app/6745227444" title="Musicer for macOS"><img alt="Musicer" height="52" width="52" src="https://wangchujiang.com/appicon/musicer.png"></a>
13
+ <a target="_blank" href="https://apps.apple.com/app/6743841447" title="Audioer for macOS"><img alt="Audioer" height="52" width="52" src="https://wangchujiang.com/appicon/audioer.png"></a>
14
+ <a target="_blank" href="https://apps.apple.com/app/6744690194" title="FileSentinel for macOS"><img alt="FileSentinel" height="52" width="52" src="https://wangchujiang.com/appicon/file-sentinel.png"></a>
15
+ <a target="_blank" href="https://apps.apple.com/app/6743495172" title="FocusCursor for macOS"><img alt="FocusCursor" height="52" width="52" src="https://wangchujiang.com/appicon/focus-cursor.png"></a>
16
+ <a target="_blank" href="https://apps.apple.com/app/6742680573" title="Videoer for macOS"><img alt="Videoer" height="52" width="52" src="https://wangchujiang.com/appicon/videoer.png"></a>
17
+ <a target="_blank" href="https://apps.apple.com/app/6740425504" title="KeyClicker for macOS"><img alt="KeyClicker" height="52" width="52" src="https://wangchujiang.com/appicon/key-clicker.png"></a>
18
+ <a target="_blank" href="https://apps.apple.com/app/6739052447" title="DayBar for macOS"><img alt="DayBar" height="52" width="52" src="https://wangchujiang.com/appicon/daybar.png"></a>
19
+ <a target="_blank" href="https://apps.apple.com/app/6739444407" title="Iconed for macOS"><img alt="Iconed" height="52" width="52" src="https://wangchujiang.com/appicon/iconed.png"></a>
20
+ <a target="_blank" href="https://apps.apple.com/app/6737160756" title="Mousio for macOS"><img alt="Mousio" height="52" width="52" src="https://wangchujiang.com/appicon/rightmenu-master.png"></a>
21
+ <a target="_blank" href="https://apps.apple.com/app/6723903021" title="Paste Quick for macOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/paste-quick.png"></a>
22
+ <a target="_blank" href="https://apps.apple.com/app/6670696072" title="Quick RSS for macOS/iOS"><img alt="Quick RSS" height="52" width="52" src="https://wangchujiang.com/appicon/quick-rss.png"></a>
23
+ <a target="_blank" href="https://apps.apple.com/app/6670167443" title="Web Serve for macOS"><img alt="Web Serve" height="52" width="52" src="https://wangchujiang.com/appicon/web-serve.png"></a>
24
+ <a target="_blank" href="https://apps.apple.com/app/6503953628" title="Copybook Generator for macOS/iOS"><img alt="Copybook Generator" height="52" width="52" src="https://wangchujiang.com/appicon/copybook-generator.png"></a>
25
+ <a target="_blank" href="https://apps.apple.com/app/6471227008" title="DevTutor for macOS/iOS"><img alt="DevTutor for SwiftUI" height="52" width="52" src="https://wangchujiang.com/appicon/devtutor.png"></a>
26
+ <a target="_blank" href="https://apps.apple.com/app/6479819388" title="RegexMate for macOS/iOS"><img alt="RegexMate" height="52" width="52" src="https://wangchujiang.com/appicon/regex-mate.png"></a>
27
+ <a target="_blank" href="https://apps.apple.com/app/6479194014" title="Time Passage for macOS/iOS"><img alt="Time Passage" height="52" width="52" src="https://wangchujiang.com/appicon/time-passage.png"></a>
28
+ <a target="_blank" href="https://apps.apple.com/app/6478772538" title="IconizeFolder for macOS"><img alt="Iconize Folder" height="52" width="52" src="https://wangchujiang.com/appicon/iconize-folder.png"></a>
29
+ <a target="_blank" href="https://apps.apple.com/app/6478511402" title="Textsound Saver for macOS/iOS"><img alt="Textsound Saver" height="52" width="52" src="https://wangchujiang.com/appicon/textsound-saver.png"></a>
30
+ <a target="_blank" href="https://apps.apple.com/app/6476924627" title="Create Custom Symbols for macOS"><img alt="Create Custom Symbols" height="52" width="52" src="https://wangchujiang.com/appicon/create-custom-symbols.png"></a>
31
+ <a target="_blank" href="https://apps.apple.com/app/6476452351" title="DevHub for macOS"><img alt="DevHub" height="52" width="52" src="https://wangchujiang.com/appicon/devhub.png"></a>
32
+ <a target="_blank" href="https://apps.apple.com/app/6476400184" title="Resume Revise for macOS"><img alt="Resume Revise" height="52" width="52" src="https://wangchujiang.com/appicon/resume-revise.png"></a>
33
+ <a target="_blank" href="https://apps.apple.com/app/6472593276" title="Palette Genius for macOS"><img alt="Palette Genius" height="52" width="52" src="https://wangchujiang.com/appicon/palette-genius.png"></a>
34
+ <a target="_blank" href="https://apps.apple.com/app/6470879005" title="Symbol Scribe for macOS"><img alt="Symbol Scribe" height="52" width="52" src="https://wangchujiang.com/appicon/symbol-scribe.png"></a>
35
+ </div>
36
+ <hr>
37
+
1
38
  react-json-view
2
39
  ===
3
40
 
41
+ [![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor)
4
42
  [![CI](https://github.com/uiwjs/react-json-view/actions/workflows/ci.yml/badge.svg)](https://github.com/uiwjs/react-json-view/actions/workflows/ci.yml)
5
43
  [![npm version](https://img.shields.io/npm/v/@uiw/react-json-view.svg)](https://www.npmjs.com/package/@uiw/react-json-view)
6
44
  [![NPM Downloads](https://img.shields.io/npm/dm/@uiw/react-json-view.svg?style=flat&label=)](https://www.npmjs.com/package/@uiw/react-json-view)
@@ -18,20 +56,19 @@ A React component for displaying and editing javascript arrays and JSON objects.
18
56
 
19
57
  ## Features
20
58
 
21
- 📚 Use Typescript to write, better code hints.
22
- 🎨 Support theme customization & [`online editing`](https://uiwjs.github.io/react-json-view/#online-editing-theme) theme
23
- 🌒 Support dark/light mode
24
- 📦 Zero dependencies
25
- 📋 Copy to Clipboard
26
- ✏️ Support editing and adding features
27
- ♻️ Whether to highlight updates.
28
-
29
- The new version [**v2**](https://uiwjs.github.io/react-json-view/) has redesigned the API to make the code more maintainable and introduced a simpler and more flexible component customization rendering API. Each component can now have custom rendering, and the new API resembles React more closely. Preview [v2 documentation](https://uiwjs.github.io/react-json-view/) and [examples](https://uiwjs.github.io/react-json-view/).
59
+ 🚀 **Improved with TypeScript** – Better code hints for a smoother development experience.
60
+ 🎨 **Customizable Themes** – Supports theme customization & [`online editing`](https://uiwjs.github.io/react-json-view/#online-editing-theme).
61
+ 🌒 **Dark/Light Mode** – Seamless switching between themes.
62
+ 📦 **Zero Dependencies** – Lightweight and efficient.
63
+ 📋 **Clipboard Support** – Easily copy JSON data.
64
+ ✏️ **Editable & Extendable** – Supports editing and adding new properties.
65
+ ♻️ **Update Highlighting** – Option to highlight changes.
30
66
 
31
- - [x] Complete all features of displaying JSON in v1.
32
- - [ ] Add editing functionality to v2.
33
- - [x] Add test cases to v2.
67
+ The latest version [**v2**](https://uiwjs.github.io/react-json-view/) features a redesigned API for better maintainability, a more flexible component customization system, and fully customizable rendering, making it more aligned with React’s component model. 📖 Check out the [v2 documentation](https://uiwjs.github.io/react-json-view/) and [examples](https://uiwjs.github.io/react-json-view/).
34
68
 
69
+ - [x] Fully implemented all v1 JSON display features.
70
+ - [ ] Adding editing functionality to v2.
71
+ - [x] Added comprehensive test cases for v2.
35
72
 
36
73
  ## Quick Start
37
74
 
@@ -126,7 +163,6 @@ export default function Demo() {
126
163
  }
127
164
  ```
128
165
 
129
-
130
166
  Example of custom `vscode` theme styles:
131
167
 
132
168
  ```tsx mdx:preview
@@ -146,6 +182,7 @@ const object = {
146
182
  const customTheme = {
147
183
  '--w-rjv-font-family': 'monospace',
148
184
  '--w-rjv-color': '#9cdcfe',
185
+ '--w-rjv-key-number': '#268bd2',
149
186
  '--w-rjv-key-string': '#9cdcfe',
150
187
  '--w-rjv-background-color': '#1e1e1e',
151
188
  '--w-rjv-line-color': '#36334280',
@@ -159,6 +196,7 @@ const customTheme = {
159
196
  '--w-rjv-curlybraces-color': '#d4d4d4',
160
197
  '--w-rjv-colon-color': '#d4d4d4',
161
198
  '--w-rjv-brackets-color': '#d4d4d4',
199
+ '--w-rjv-ellipsis-color': '#cb4b16',
162
200
  '--w-rjv-quotes-color': 'var(--w-rjv-key-string)',
163
201
  '--w-rjv-quotes-string-color': 'var(--w-rjv-type-string-color)',
164
202
 
@@ -216,6 +254,7 @@ const object = {
216
254
  }
217
255
  const customTheme = {
218
256
  '--w-rjv-color': '#9cdcfe',
257
+ '--w-rjv-key-number': '#268bd2',
219
258
  '--w-rjv-key-string': '#9cdcfe',
220
259
  '--w-rjv-background-color': '#1e1e1e',
221
260
  '--w-rjv-line-color': '#36334280',
@@ -229,6 +268,7 @@ const customTheme = {
229
268
  '--w-rjv-curlybraces-color': '#d4d4d4',
230
269
  '--w-rjv-colon-color': '#d4d4d4',
231
270
  '--w-rjv-brackets-color': '#d4d4d4',
271
+ '--w-rjv-ellipsis-color': '#cb4b16',
232
272
  '--w-rjv-quotes-color': '#9cdcfe',
233
273
  '--w-rjv-quotes-string-color': '#ce9178',
234
274
 
@@ -278,21 +318,31 @@ export default function Demo() {
278
318
  />
279
319
  <div>
280
320
  <Colorful color={hex} onChange={onChange} />
281
- <div style={{ display: 'flex', gap: '0.4rem', flexDirection: 'column' }}>
321
+ <div style={{ display: 'flex', gap: '0.4rem', flexDirection: 'column', ...customTheme }}>
282
322
  {Object.keys(customTheme).map((varname, idx) => {
283
323
  const click = () => {
284
324
  setCssvar(varname);
285
325
  setHex(customTheme[varname]);
286
326
  };
287
327
  const active = cssvar === varname ? '#a8a8a8' : '';
288
- return <button key={idx} style={{ background: active, border: 0,boxShadow: 'inset 0px 0px 1px #000', textAlign: 'left' }} onClick={click}>{varname}</button>
328
+ return (
329
+ <button key={idx}
330
+ style={{ background: active, border: 0,boxShadow: 'inset 0px 0px 1px #000', display: 'flex', alignItems: 'center', gap: 5, padding: '1px 3px' }}
331
+ onClick={click}
332
+ >
333
+ <span style={{ display: 'inline-block', width: 12, height: 12, background: `var(${varname})` }}></span>
334
+ {varname}
335
+ </button>
336
+ )
289
337
  })}
290
338
  </div>
291
339
  </div>
292
340
  </div>
293
- <pre style={{ padding: 10 }}>
341
+ <div>
294
342
  Copy the theme configuration below into your project.
295
- <JsonView value={theme} displayDataTypes={false} />
343
+ </div>
344
+ <pre style={{ padding: 10 }}>
345
+ {JSON.stringify(theme, null, 2)}
296
346
  </pre>
297
347
  </React.Fragment>
298
348
  );
@@ -324,13 +374,13 @@ export default function Demo() {
324
374
  }}
325
375
  >
326
376
  <JsonView.String
327
- render={({ children, ...reset }, { type }) => {
328
- const isImg = /^https?.*\.(jpg|png)$/i.test(children)
377
+ render={({ children, ...reset }, { type, value, keyName }) => {
378
+ const isImg = /^https?.*\.(jpg|png)$/i.test(value)
329
379
  if (type === 'type' && isImg) {
330
380
  return <span />
331
381
  }
332
382
  if (type === 'value' && isImg) {
333
- return <img {...reset} height="26" src={children} />
383
+ return <img {...reset} height="26" src={value} />
334
384
  }
335
385
  }}
336
386
  />
@@ -362,7 +412,7 @@ export default function Demo() {
362
412
  }
363
413
  ```
364
414
 
365
- Supports certain partial customizations such as: `<Copied />`, `<CountInfo />`, `<CountInfoExtra />`, `<Ellipsis />`, `<KeyName />`
415
+ Supports certain partial customizations such as: `<Copied />`, `<CountInfo />`, `<CountInfoExtra />`, `<Ellipsis />`, `<KeyName />`, `<Row />`
366
416
 
367
417
  ```tsx mdx:preview
368
418
  import React, { Fragment } from 'react';
@@ -415,6 +465,59 @@ export default function Demo() {
415
465
  }
416
466
  ```
417
467
 
468
+ More in-depth customization ([#19](https://github.com/uiwjs/react-json-view/issues/19))
469
+
470
+ ```tsx mdx:preview
471
+ import React from 'react';
472
+ import JsonView from '@uiw/react-json-view';
473
+
474
+ const object = {
475
+ _id: "ObjectId('13212hakjdhajksd')",
476
+ uid: "test1",
477
+ attival_time: new Date('Tue Sep 13 2022 14:07:44 GMT-0500 (Central Daylight Time)'),
478
+ __v: 0
479
+ }
480
+
481
+ export default function Demo() {
482
+ return (
483
+ <JsonView
484
+ value={object}
485
+ // keyName="root"
486
+ displayObjectSize={false}
487
+ style={{
488
+ '--w-rjv-background-color': '#ffffff',
489
+ }}
490
+ >
491
+ <JsonView.Quote render={() => <span />}/>
492
+ <JsonView.String
493
+ render={({ children, ...reset }, { type, value, keyName }) => {
494
+ if (type === 'type') {
495
+ return <span />
496
+ }
497
+ if (type === 'value' && /ObjectId\(['"](.*?)['"]\)/.test(value)) {
498
+ return <span {...reset}>{children}</span>
499
+ }
500
+ }}
501
+ />
502
+ <JsonView.Date
503
+ render={({ children, ...reset }, { type, value, keyName }) => {
504
+ if (type === 'type') {
505
+ return <span />
506
+ }
507
+ }}
508
+ />
509
+ <JsonView.Int
510
+ render={({ children, ...reset }, { type, value, keyName }) => {
511
+ if (type === 'type') {
512
+ return <span />
513
+ }
514
+ }}
515
+ />
516
+ </JsonView>
517
+ )
518
+ }
519
+ ```
520
+
418
521
  Inspector
419
522
 
420
523
  ```tsx mdx:preview
@@ -526,6 +629,52 @@ Passing **as="tagName"** will automatically infer the type.
526
629
  />
527
630
  ```
528
631
 
632
+ Add a click event on the data row
633
+
634
+ ```tsx mdx:preview
635
+ import React from 'react';
636
+ import JsonView from '@uiw/react-json-view';
637
+
638
+ export default function Demo() {
639
+ return (
640
+ <JsonView
641
+ style={{
642
+ '--w-rjv-background-color': '#ffffff',
643
+ }}
644
+ value={{
645
+ name: 'John',
646
+ age: 30,
647
+ hobbies: ['reading', 'coding', 'swimming'],
648
+ address: {
649
+ street: '123 Main St',
650
+ city: 'New York',
651
+ country: {
652
+ name: 'Main ',
653
+ codex: '123'
654
+ }
655
+ }
656
+ }}
657
+ >
658
+ <JsonView.Row
659
+ as="div"
660
+ render={(props, { keyName, value, parentValue }) => {
661
+ return (
662
+ <div
663
+ {...props}
664
+ onClick={() => {
665
+ console.log("keyName", keyName)
666
+ console.log("value", value)
667
+ console.log("parentValue", parentValue)
668
+ }}
669
+ />
670
+ )
671
+ }}
672
+ />
673
+ </JsonView>
674
+ )
675
+ }
676
+ ```
677
+
529
678
  ## Highlight Updates
530
679
 
531
680
  ```tsx mdx:preview
@@ -568,6 +717,82 @@ export default function Demo() {
568
717
 
569
718
  This feature can be disabled with `highlightUpdates={false}`, and the default color can be changed with `--w-rjv-update-color`.
570
719
 
720
+ ## Do not display array index
721
+
722
+ ```tsx mdx:preview
723
+ import React, { Fragment } from 'react';
724
+ import JsonView from '@uiw/react-json-view';
725
+
726
+ export default function Demo() {
727
+ const value = { data: ["123", 23] }
728
+ return (
729
+ <JsonView value={value} style={{ '--w-rjv-background-color': '#ffffff' }}>
730
+ <JsonView.Colon render={(props, { parentValue, value, keyName }) => {
731
+ if (Array.isArray(parentValue) && props.children == ":") {
732
+ return <span />
733
+ }
734
+ return <span {...props} />
735
+ }}/>
736
+ <JsonView.KeyName
737
+ render={({ ...props }, { type, parentValue, value, keyName }) => {
738
+ if (Array.isArray(parentValue) && Number.isFinite( props.children)) {
739
+ return <span />
740
+ }
741
+ return <span {...props} />
742
+ }}
743
+ />
744
+ </JsonView>
745
+ )
746
+ }
747
+ ```
748
+
749
+ ## Default Collapse/Expand
750
+
751
+ Determines whether the node should be expanded on the first render. The default value of `collapsed` is `false`.
752
+ If both `collapsed` and `shouldExpandNodeInitially` are set, `collapsed` takes precedence; `shouldExpandNodeInitially` only takes effect when `collapsed` is `false`.
753
+
754
+ ```tsx mdx:preview
755
+ import React, { useState } from 'react';
756
+ import JsonView from '@uiw/react-json-view';
757
+ const object = {
758
+ string: 'Lorem ipsum dolor sit amet',
759
+ integer: 42,
760
+ float: 114.514,
761
+ object: {
762
+ 'first-child': true,
763
+ 'second-child': false,
764
+ 'last-child': null,
765
+ },
766
+ nestedArray: [
767
+ [1, 2],
768
+ [3, 4],
769
+ ],
770
+ }
771
+ export default function Demo() {
772
+ const [collapsed, setCollapsed] = useState(false)
773
+ return (
774
+ <>
775
+ <input type="checkbox" id="collapsed" checked={collapsed} onChange={(e) => setCollapsed(e.target.checked)} />
776
+ <label for="collapsed"> collapsed={collapsed == true ? "false" : "2"} </label>
777
+ <JsonView
778
+ value={object}
779
+ collapsed={collapsed == true ? false : 2}
780
+ shouldExpandNodeInitially={(isExpanded, { value, keys, level }) => {
781
+ if (keys.length > 0 && keys[0] == "object") {
782
+ return false
783
+ }
784
+ return isExpanded
785
+ }}
786
+ style={{
787
+ '--w-rjv-background-color': '#ffffff',
788
+ }}
789
+ >
790
+ </JsonView>
791
+ </>
792
+ )
793
+ }
794
+ ```
795
+
571
796
  ## Modify Icon Style
572
797
 
573
798
  Use built-in default icons.
@@ -653,13 +878,13 @@ export default function Demo() {
653
878
  if (!isExpanded) {
654
879
  return (
655
880
  <svg viewBox="0 0 24 24" {...svgProps}>
656
- <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z" />
881
+ <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M7,13H17V11H7" />
657
882
  </svg>
658
883
  );
659
884
  }
660
885
  return (
661
886
  <svg viewBox="0 0 24 24" {...svgProps}>
662
- <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M7,13H17V11H7" />
887
+ <path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z" />
663
888
  </svg>
664
889
  );
665
890
  }}
@@ -696,18 +921,28 @@ export interface JsonViewProps<T extends object> extends React.DetailedHTMLProps
696
921
  displayDataTypes?: boolean;
697
922
  /** The user can copy objects and arrays to clipboard by clicking on the clipboard icon. @default true */
698
923
  enableClipboard?: boolean;
924
+ /** When set to true, all nodes will be collapsed by default. Use an integer value to collapse at a particular depth. @default false */
925
+ collapsed?: boolean | number;
926
+ /** Determine whether the node should be expanded on the first render, or you can use collapsed to control the level of expansion (by default, the root is expanded). */
927
+ shouldExpandNodeInitially?: ShouldExpandNodeInitially<T>;
699
928
  /** Whether to highlight updates. @default true */
700
929
  highlightUpdates?: boolean;
930
+ /** Shorten long JSON strings, Set to `0` to disable this feature @default 30 */
931
+ shortenTextAfterLength?: number;
932
+ /** When the text exceeds the length, `...` will be displayed. Currently, this `...` can be customized. @default "..." */
933
+ stringEllipsis?: number;
701
934
  /** Callback function for when a treeNode is expanded or collapsed */
702
- onExpand?: (props: {
703
- expand: boolean;
704
- value?: T;
705
- keyid: string;
706
- keyName?: string | number;
707
- }) => void;
935
+ onExpand?: (props: { expand: boolean; value?: T; keyid: string; keyName?: string | number }) => void;
708
936
  /** Fires event when you copy */
709
937
  onCopied?: (text: string, value?: T) => void;
710
938
  }
939
+ export type ShouldExpandNodeInitially<T extends object> = (isExpanded: boolean, props: {
940
+ keyName?: string | number;
941
+ value?: T;
942
+ parentValue?: T;
943
+ keys: (number | string)[];
944
+ level: number;
945
+ }) => boolean;
711
946
  ```
712
947
 
713
948
  ```ts
@@ -719,6 +954,7 @@ import { Arrow } from './symbol/Arrow';
719
954
  import { Colon } from './symbol/Colon';
720
955
  import { Quote } from './symbol/Quote';
721
956
  import { ValueQuote } from './symbol/ValueQuote';
957
+
722
958
  import { Bigint } from './types/Bigint';
723
959
  import { Date } from './types/Date';
724
960
  import { False } from './types/False';
@@ -732,13 +968,24 @@ import { StringText } from './types/String';
732
968
  import { True } from './types/True';
733
969
  import { Undefined } from './types/Undefined';
734
970
  import { Url } from './types/Url';
971
+
735
972
  import { Copied } from './section/Copied';
736
973
  import { CountInfo } from './section/CountInfo';
737
974
  import { CountInfoExtra } from './section/CountInfoExtra';
738
975
  import { Ellipsis } from './section/Ellipsis';
739
976
  import { KeyName } from './section/KeyName';
977
+ import { Row } from './section/Row';
740
978
 
741
979
  type JsonViewComponent = React.FC<React.PropsWithRef<JsonViewProps<object>>> & {
980
+ BraceLeft: typeof BraceLeft;
981
+ BraceRight: typeof BraceRight;
982
+ BracketsLeft: typeof BracketsLeft;
983
+ BracketsRight: typeof BracketsRight;
984
+ Arrow: typeof Arrow;
985
+ Colon: typeof Colon;
986
+ Quote: typeof Quote;
987
+ ValueQuote: typeof ValueQuote;
988
+
742
989
  Bigint: typeof Bigint;
743
990
  Date: typeof Date;
744
991
  False: typeof False;
@@ -752,19 +999,13 @@ type JsonViewComponent = React.FC<React.PropsWithRef<JsonViewProps<object>>> & {
752
999
  True: typeof True;
753
1000
  Undefined: typeof Undefined;
754
1001
  Url: typeof Url;
755
- BraceLeft: typeof BraceLeft;
756
- BraceRight: typeof BraceRight;
757
- BracketsLeft: typeof BracketsLeft;
758
- BracketsRight: typeof BracketsRight;
759
- Colon: typeof Colon;
760
- Ellipsis: typeof Ellipsis;
761
- Quote: typeof Quote;
762
- ValueQuote: typeof ValueQuote;
763
- Arrow: typeof Arrow;
1002
+
764
1003
  Copied: typeof Copied;
765
1004
  CountInfo: typeof CountInfo;
766
1005
  CountInfoExtra: typeof CountInfoExtra;
1006
+ Ellipsis: typeof Ellipsis;
767
1007
  KeyName: typeof KeyName;
1008
+ Row: typeof Row;
768
1009
  };
769
1010
  declare const JsonView: JsonViewComponent;
770
1011
  export default JsonView;
@@ -786,7 +1027,7 @@ Here is the size benchmark (using [bundlephobia.com](https://bundlephobia.com))
786
1027
  | [react-domify](https://github.com/JedWatson/react-domify) | [![](https://img.shields.io/bundlephobia/min/react-domify?color=red&label=)](https://bundlephobia.com/result?p=react-domify) [![](https://img.shields.io/bundlephobia/minzip/react-domify?color=red&label=gzip)](https://bundlephobia.com/result?p=react-domify) | [![](https://badgen.net/bundlephobia/dependency-count/react-domify?color=red&label=)](https://bundlephobia.com/result?p=react-domify) | [![GitHub last commit](https://img.shields.io/github/last-commit/JedWatson/react-domify?style=flat&label=)](https://github.com/JedWatson/react-domify/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/react-domify.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/react-domify) | ❌ | [demo](https://jedwatson.github.io/react-domify/) |
787
1028
  | [react18-json-view](https://github.com/YYsuni/react18-json-view) | [![](https://img.shields.io/bundlephobia/min/react18-json-view?color=red&label=)](https://bundlephobia.com/result?p=react18-json-view) [![](https://img.shields.io/bundlephobia/minzip/react18-json-view?color=red&label=gzip)](https://bundlephobia.com/result?p=react18-json-view) | [![](https://badgen.net/bundlephobia/dependency-count/react18-json-view?color=red&label=)](https://bundlephobia.com/result?p=react18-json-view) | [![GitHub last commit](https://img.shields.io/github/last-commit/YYsuni/react18-json-view?style=flat&label=)](https://github.com/YYsuni/react18-json-view/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/react18-json-view.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/react18-json-view) | ❌ | [demo](https://jv.yysuni.com/) |
788
1029
  | [@textea/json-viewer](https://github.com/TexteaInc/json-viewer) | [![](https://img.shields.io/bundlephobia/min/@textea/json-viewer?color=red&label=)](https://bundlephobia.com/result?p=@textea/json-viewer) [![](https://img.shields.io/bundlephobia/minzip/@textea/json-viewer?color=red&label=gzip)](https://bundlephobia.com/result?p=@textea/json-viewer) | [![](https://badgen.net/bundlephobia/dependency-count/%40textea%2Fjson-viewer?color=red&label=&t=vvv12213)](https://bundlephobia.com/result?p=@textea/json-viewer) | [![GitHub last commit](https://img.shields.io/github/last-commit/TexteaInc/json-viewer?style=flat&label=)](https://github.com/TexteaInc/json-viewer/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/@textea/json-viewer.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/@textea/json-viewer) | ✅ | [demo](https://stackblitz.com/edit/textea-json-viewer-v3-b4wgxq) |
789
- | [react-editable-json-tree](https://github.com/oxyno-zeta/react-editable-json-tree) | [![](https://img.shields.io/bundlephobia/min/react-editable-json-tree?color=red&label=)](https://bundlephobia.com/result?p=react-editable-json-tree) [![](https://img.shields.io/bundlephobia/minzip/react-editable-json-tree?color=red&label=gzip)](https://bundlephobia.com/result?p=react-editable-json-tree) | [![](https://badgen.net/bundlephobia/dependency-count/%40textea%2Fjson-viewer?color=red&label=&t=vvv12213)](https://bundlephobia.com/result?p=react-editable-json-tree) | [![GitHub last commit](https://img.shields.io/github/last-commit/TexteaInc/json-viewer?style=flat&label=)](https://github.com/TexteaInc/json-viewer/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/react-editable-json-tree.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/react-editable-json-tree) | ✅ | [demo](https://oxyno-zeta.github.io/react-editable-json-tree/) |
1030
+ | [react-editable-json-tree](https://github.com/oxyno-zeta/react-editable-json-tree) | [![](https://img.shields.io/bundlephobia/min/react-editable-json-tree?color=red&label=)](https://bundlephobia.com/result?p=react-editable-json-tree) [![](https://img.shields.io/bundlephobia/minzip/react-editable-json-tree?color=red&label=gzip)](https://bundlephobia.com/result?p=react-editable-json-tree) | [![](https://badgen.net/bundlephobia/dependency-count/%40textea%2Fjson-viewer?color=red&label=&t=vvv12213)](https://bundlephobia.com/result?p=react-editable-json-tree) | [![GitHub last commit](https://img.shields.io/github/last-commit/oxyno-zeta/react-editable-json-tree?style=flat&label=)](https://github.com/oxyno-zeta/react-editable-json-tree/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/react-editable-json-tree.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/react-editable-json-tree) | ✅ | [demo](https://oxyno-zeta.github.io/react-editable-json-tree/) |
790
1031
  | [react-json-view](https://github.com/HuolalaTech/react-json-view) | [![](https://img.shields.io/bundlephobia/min/@huolala-tech/react-json-view?color=red&label=)](https://bundlephobia.com/result?p=@huolala-tech/react-json-view) [![](https://img.shields.io/bundlephobia/minzip/@huolala-tech/react-json-view?color=red&label=gzip)](https://bundlephobia.com/result?p=@huolala-tech/react-json-view) | [![](https://badgen.net/bundlephobia/dependency-count/%40textea%2Fjson-viewer?color=red&label=&t=vvv12213)](https://bundlephobia.com/result?p=@huolala-tech/react-json-view) | [![GitHub last commit](https://img.shields.io/github/last-commit/TexteaInc/json-viewer?style=flat&label=)](https://github.com/HuolalaTech/react-json-view/commits) | [![NPM Downloads](https://img.shields.io/npm/dm/@huolala-tech/react-json-view.svg?style=flat&color=747474&label=)](https://www.npmjs.com/package/@huolala-tech/react-json-view) | ❌ | [demo](https://huolalatech.github.io/react-json-view/) |
791
1032
 
792
1033
  ## Development
package/basic.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ declare module '@uiw/react-json-view/basic' {
2
+ import type * as CSS from 'csstype';
3
+ export const basicTheme: CSS.Properties<string | number>;
4
+ }
@@ -6,5 +6,7 @@ export interface ContainerProps<T extends object> extends React.HTMLAttributes<H
6
6
  level?: number;
7
7
  value?: T;
8
8
  initialValue?: T;
9
+ /** Index of the parent `keyName` */
10
+ keys?: (string | number)[];
9
11
  }
10
12
  export declare const Container: React.ForwardRefExoticComponent<ContainerProps<object> & React.RefAttributes<HTMLDivElement>>;
package/cjs/Container.js CHANGED
@@ -13,10 +13,11 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _NestedClose = require("./comps/NestedClose");
14
14
  var _NestedOpen = require("./comps/NestedOpen");
15
15
  var _KeyValues = require("./comps/KeyValues");
16
+ var _useIdCompat = require("./comps/useIdCompat");
16
17
  var _ShowTools = require("./store/ShowTools");
17
18
  var _jsxRuntime = require("react/jsx-runtime");
18
- var _excluded = ["className", "children", "parentValue", "keyid", "level", "value", "initialValue", "keyName"];
19
- var Container = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
19
+ var _excluded = ["className", "children", "parentValue", "keyid", "level", "value", "initialValue", "keys", "keyName"];
20
+ var Container = exports.Container = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
20
21
  var _props$className = props.className,
21
22
  className = _props$className === void 0 ? '' : _props$className,
22
23
  children = props.children,
@@ -26,10 +27,11 @@ var Container = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
26
27
  level = _props$level === void 0 ? 1 : _props$level,
27
28
  value = props.value,
28
29
  initialValue = props.initialValue,
30
+ keys = props.keys,
29
31
  keyName = props.keyName,
30
32
  elmProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
31
33
  var dispatch = (0, _ShowTools.useShowToolsDispatch)();
32
- var subkeyid = (0, _react.useId)();
34
+ var subkeyid = (0, _useIdCompat.useIdCompat)();
33
35
  var defaultClassNames = [className, 'w-rjv-inner'].filter(Boolean).join(' ');
34
36
  var reset = {
35
37
  onMouseEnter: function onMouseEnter() {
@@ -47,18 +49,25 @@ var Container = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
47
49
  expandKey: subkeyid,
48
50
  value: value,
49
51
  level: level,
52
+ keys: keys,
53
+ parentValue: parentValue,
50
54
  keyName: keyName,
51
55
  initialValue: initialValue
52
56
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_KeyValues.KeyValues, {
53
57
  expandKey: subkeyid,
54
58
  value: value,
55
- level: level
59
+ level: level,
60
+ keys: keys,
61
+ parentValue: parentValue,
62
+ keyName: keyName
56
63
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_NestedClose.NestedClose, {
57
64
  expandKey: subkeyid,
58
65
  value: value,
59
- level: level
66
+ level: level,
67
+ keys: keys,
68
+ parentValue: parentValue,
69
+ keyName: keyName
60
70
  })]
61
71
  }));
62
72
  });
63
- exports.Container = Container;
64
73
  Container.displayName = 'JVR.Container';
@@ -18,7 +18,7 @@ function TriangleArrow(props) {
18
18
  height: '1em',
19
19
  width: '1em',
20
20
  userSelect: 'none',
21
- display: 'flex'
21
+ display: 'inline-flex'
22
22
  }, style);
23
23
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
24
24
  viewBox: "0 0 24 24",
@@ -1,14 +1,13 @@
1
- /// <reference types="react" />
1
+ import { type SectionElementResult } from '../store/Section';
2
2
  import { type TagType } from '../store/Types';
3
3
  export type CopiedOption<T extends object> = {
4
4
  value?: T;
5
5
  copied: boolean;
6
6
  setCopied: React.Dispatch<React.SetStateAction<boolean>>;
7
7
  };
8
- export interface CopiedProps<T extends object> extends React.SVGProps<SVGSVGElement> {
9
- value?: T;
10
- keyName: string | number;
8
+ export interface CopiedProps<T extends object> extends React.SVGProps<SVGSVGElement>, SectionElementResult<T> {
11
9
  expandKey: string;
10
+ beforeCopy?: (copyText: string, keyName?: string | number, value?: T, parentValue?: T, expandKey?: string, keys?: (number | string)[]) => string;
12
11
  }
13
12
  export declare const Copied: {
14
13
  <T extends object, K extends TagType>(props: CopiedProps<T>): string | number | true | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null;