@gfazioli/mantine-json-tree
A Mantine extension component that renders interactive JSON trees with syntax highlighting, collapsible nodes, copy-to-clipboard, and configurable expansion depth.
Installation
After installation import package styles at the root of your application:
You can import styles within a layer @layer mantine-json-tree by importing @gfazioli/mantine-json-tree/styles.layer.css file.
Usage
The JsonTree is interactive JSON tree viewer component built with Mantine's Tree component. Features collapsible nodes, syntax highlighting with type-specific colors, copy-to-clipboard functionality, item count badges, configurable expansion depth, and smooth animations. Perfect for debugging API responses, exploring complex data structures, and developer tools.
- {
- name:
"John Doe" - age:
30 - isAdmin:
false - courses:[...]
- wife:
null - onClick:
[Function: onClick] - address:{...}
- action:{...}
- projects:[...]
Syntax Highlighting values
Below is an example of syntax highlighting for different JSON value types: strings, numbers, booleans, nulls, objects, and arrays. Each type is displayed in a distinct color for better readability.
"Hello, World!"
42
true
false
null
- {
- key1:
"value1" - key2:
123 - key3:
false - key4:
null
- [
- 0:
"string" - 1:
456 - 2:
true - 3:
null - 4:{
- nestedKey:
"nestedValue"
Indent Guides
Display vertical lines to visualize nesting levels, similar to Visual Studio Code. The guides use 5 distinct colors that cycle for deeper nesting levels.
- {
- name:
"John Doe" - age:
30 - isAdmin:
false - courses:[
- 0:
"html" - 1:
"css" - 2:
"js"
- wife:
null - onClick:
[Function: onClick] - address:{
- street:
"123 Main St" - city:
"Anytown" - zip:
"12345"
- action:{
- type:
"click" - payload:
undefined
- projects:[
- 0:{
- name:
"Project A" - status:
"completed"
- 1:{
- name:
"Project B" - status:
"in progress"
Sticky Header
You may enable sticky headers for better context when scrolling through large JSON structures. When enabled, the header of each expanded node remains visible at the top of the scrollable area as you navigate through its child elements. You can also set an offset to accommodate fixed headers in your layout.
Icons
You can customize the expand/collapse icons used in the JsonTree component by providing your own icons via the expandControlIcon and collapseControlIcon props. The default icons are simple chevrons, but you can replace them with any React component or icon of your choice.
Note: If only the
expandControlIconis provided, the component will automatically use it for both expand and collapse states, by rotating (90deg) it accordingly. If only thecollapseControlIconis provided, the default expand icon will be used. Of course, you can provide both icons for complete customization.
Only Expand Icons
- {...}
Only Collapse Icons
- {...}
Both Expand and Collapse Icons
- {...}
Function Display
By default, functions in JSON data are displayed as strings (e.g., [Function: name]). You can control how functions are handled using the displayFunctions prop:
as-string(default): Display functions as formatted strings showing their namehide: Completely omit functions from the treeas-object: Treat functions as objects and display their properties
as-string- {
- name:
"UserProfile" - age:
25 - onClick:
[Function: onClick] - calculate:
[Function: calculate] - methods:{
- fetchData:
[Function: fetchData] - process:
[Function: process]
- data:[
- 0:
1 - 1:
2 - 2:
3
- isActive:
true
hide- {
- name:
"UserProfile" - age:
25 - methods:
[object Object] - data:[
- 0:
1 - 1:
2 - 2:
3
- isActive:
true
as-object- {
- name:
"UserProfile" - age:
25 - onClick:{
- length:
0 - name:
"onClick" - prototype:
[object Object]
- calculate:{
- length:
2 - name:
"calculate"
- methods:{
- fetchData:{...}
- process:{...}
- data:[
- 0:
1 - 1:
2 - 2:
3
- isActive:
true
Style the component with classNames
You can style the JsonTree component using the classNames prop to target specific inner elements. This allows for granular customization of the component's appearance.
- {
- name:
"John Doe" - age:
30 - isAdmin:
false - courses:[...]3
- wife:
null - onClick:
[Function: onClick] - address:{...}3
- action:{...}2
- projects:[...]2
Styles API
JsonTree supports Styles API, you can add styles to any inner element of the component with classNames prop. Follow Styles API documentation to learn more.
You can customize the appearance of the JsonTree component using the Styles API. This allows you to modify styles for various parts of the component, such as keys, values, brackets, and more.
- {
- name:
"John Doe" - age:
30 - isAdmin:
false - courses:[...]3
- wife:
null - onClick:
[Function: onClick] - address:{...}3
- action:{...}2
- projects:[...]2
Component Styles API
Hover over selectors to highlight corresponding elements