@gfazioli/mantine-json-tree 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -2
- package/dist/cjs/JsonTree.cjs +298 -175
- package/dist/cjs/JsonTree.cjs.map +1 -1
- package/dist/cjs/JsonTree.module.css.cjs +1 -1
- package/dist/cjs/JsonTreeMediaVariables.cjs +38 -0
- package/dist/cjs/JsonTreeMediaVariables.cjs.map +1 -0
- package/dist/cjs/lib/utils.cjs +15 -0
- package/dist/cjs/lib/utils.cjs.map +1 -1
- package/dist/esm/JsonTree.mjs +301 -178
- package/dist/esm/JsonTree.mjs.map +1 -1
- package/dist/esm/JsonTree.module.css.mjs +1 -1
- package/dist/esm/JsonTreeMediaVariables.mjs +36 -0
- package/dist/esm/JsonTreeMediaVariables.mjs.map +1 -0
- package/dist/esm/lib/utils.mjs +15 -1
- package/dist/esm/lib/utils.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.layer.css +1 -1
- package/dist/types/JsonTree.d.ts +22 -6
- package/dist/types/JsonTreeMediaVariables.d.ts +8 -0
- package/dist/types/index.d.mts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lib/utils.d.ts +4 -0
- package/package.json +12 -5
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.me_e3fe2989{font-family:var(--json-tree-font-family);font-size:var(--json-tree-font-size)}.me_cb75fd74{background-color:var(--json-tree-header-background-color,inherit);padding:var(--mantine-spacing-xs)}.me_cb75fd74[data-sticky=true]{position:sticky;top:var(--json-tree-header-sticky-offset,0);z-index:3}.me_5ecbb76c{color:inherit;font-size:inherit}.me_93bdc4d8{color:var(--json-tree-color-key);font-size:inherit;font-weight:500}.me_9bf8fdaa{background-color:transparent;border-radius:var(--mantine-radius-sm);font-family:var(--json-tree-value-font-family,var(--json-tree-font-family));font-size:inherit;padding:2px 6px}.me_9bf8fdaa[data-type=string]{color:var(--json-tree-color-string)}.me_9bf8fdaa[data-type=number]{color:var(--json-tree-color-number)}.me_9bf8fdaa[data-type=boolean]{color:var(--json-tree-color-boolean)}.me_9bf8fdaa[data-type=null],.me_9bf8fdaa[data-type=undefined]{color:var(--json-tree-color-null);font-style:italic}.me_9bf8fdaa[data-type=function]{color:var(--json-tree-color-function);font-style:italic}.me_9bf8fdaa[data-type=react-element]{color:var(--json-tree-color-react-element);font-style:italic}.me_9bf8fdaa[data-type=date]{color:var(--json-tree-color-date)}.me_9bf8fdaa[data-type=infinity],.me_9bf8fdaa[data-type=nan]{color:var(--json-tree-color-nan);font-style:italic}.me_9bf8fdaa[data-type=bigint]{color:var(--json-tree-color-bigint)}.me_9bf8fdaa[data-type=symbol]{color:var(--json-tree-color-symbol);font-style:italic}.me_9bf8fdaa[data-type=regexp]{color:var(--json-tree-color-regexp)}.me_9bf8fdaa[data-type=map],.me_9bf8fdaa[data-type=set]{color:var(--json-tree-color-map);font-weight:600}.me_7c12eea1{color:var(--json-tree-color-bracket);font-family:var(--json-tree-font-family);font-size:inherit;font-weight:700;user-select:none}.me_13a55df8{color:var(--
|
|
1
|
+
.me_e3fe2989{font-family:var(--json-tree-font-family);font-size:var(--json-tree-font-size)}:where([data-mantine-color-scheme=dark]) .me_e3fe2989{--json-tree-color-key:var(--mantine-color-blue-4);--json-tree-color-string:var(--mantine-color-green-5);--json-tree-color-number:var(--mantine-color-violet-5);--json-tree-color-boolean:var(--mantine-color-orange-5);--json-tree-color-null:var(--mantine-color-gray-5);--json-tree-color-function:var(--mantine-color-cyan-5);--json-tree-color-react-element:var(--mantine-color-pink-5);--json-tree-color-date:var(--mantine-color-teal-5);--json-tree-color-nan:var(--mantine-color-red-5);--json-tree-color-infinity:var(--mantine-color-red-5);--json-tree-color-bigint:var(--mantine-color-indigo-5);--json-tree-color-symbol:var(--mantine-color-yellow-5);--json-tree-color-regexp:var(--mantine-color-lime-5);--json-tree-color-map:var(--mantine-color-grape-5);--json-tree-color-set:var(--mantine-color-grape-5);--json-tree-color-bracket:var(--mantine-color-gray-6);--json-tree-color-ellipsis:var(--mantine-color-gray-5);--json-tree-color-line-number:var(--mantine-color-gray-6)}.me_cb75fd74{background-color:var(--json-tree-header-background-color,inherit);padding:var(--mantine-spacing-xs)}.me_cb75fd74[data-sticky=true]{position:sticky;top:var(--json-tree-header-sticky-offset,0);z-index:3}.me_5ecbb76c{color:inherit;font-size:inherit}.me_93bdc4d8{color:var(--json-tree-color-key);font-size:inherit;font-weight:500}.me_9bf8fdaa{background-color:transparent;border-radius:var(--mantine-radius-sm);font-family:var(--json-tree-value-font-family,var(--json-tree-font-family));font-size:inherit;padding:2px 6px}.me_9bf8fdaa[data-type=string]{color:var(--json-tree-color-string)}.me_9bf8fdaa[data-type=number]{color:var(--json-tree-color-number)}.me_9bf8fdaa[data-type=boolean]{color:var(--json-tree-color-boolean)}.me_9bf8fdaa[data-type=null],.me_9bf8fdaa[data-type=undefined]{color:var(--json-tree-color-null);font-style:italic}.me_9bf8fdaa[data-type=function]{color:var(--json-tree-color-function);font-style:italic}.me_9bf8fdaa[data-type=react-element]{color:var(--json-tree-color-react-element);font-style:italic}.me_9bf8fdaa[data-type=date]{color:var(--json-tree-color-date)}.me_9bf8fdaa[data-type=infinity],.me_9bf8fdaa[data-type=nan]{color:var(--json-tree-color-nan);font-style:italic}.me_9bf8fdaa[data-type=bigint]{color:var(--json-tree-color-bigint)}.me_9bf8fdaa[data-type=symbol]{color:var(--json-tree-color-symbol);font-style:italic}.me_9bf8fdaa[data-type=regexp]{color:var(--json-tree-color-regexp)}.me_9bf8fdaa[data-type=map],.me_9bf8fdaa[data-type=set]{color:var(--json-tree-color-map);font-weight:600}.me_7c12eea1{color:var(--json-tree-color-bracket);font-family:var(--json-tree-font-family);font-size:inherit;font-weight:700;user-select:none}.me_13a55df8{color:var(--json-tree-color-ellipsis);font-size:inherit}.me_338ae66e{opacity:0;transition:opacity .15s ease}.me_338ae66e:focus,.me_e3fe2989:hover .me_338ae66e{opacity:1}.me_e3fe2989[data-line-numbers]{counter-reset:json-tree-line;padding-left:3em;position:relative}.me_e3fe2989[data-line-numbers] [role=treeitem]{counter-increment:json-tree-line;position:relative}.me_733cffc4{color:var(--json-tree-color-line-number);font-size:inherit;left:-3em;opacity:.5;position:absolute;text-align:right;user-select:none;width:2.5em}.me_733cffc4:before{content:counter(json-tree-line)}.me_c97b8329{bottom:0;opacity:.4;pointer-events:none;position:absolute;top:0;width:1px}.me_c97b8329[data-color-index="0"]{background-color:var(--json-tree-indent-guide-color-0)}.me_c97b8329[data-color-index="1"]{background-color:var(--json-tree-indent-guide-color-1)}.me_c97b8329[data-color-index="2"]{background-color:var(--json-tree-indent-guide-color-2)}.me_c97b8329[data-color-index="3"]{background-color:var(--json-tree-indent-guide-color-3)}.me_c97b8329[data-color-index="4"]{background-color:var(--json-tree-indent-guide-color-4)}
|
package/dist/styles.layer.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer mantine-json-tree {.me_e3fe2989{font-family:var(--json-tree-font-family);font-size:var(--json-tree-font-size)}.me_cb75fd74{background-color:var(--json-tree-header-background-color,inherit);padding:var(--mantine-spacing-xs)}.me_cb75fd74[data-sticky=true]{position:sticky;top:var(--json-tree-header-sticky-offset,0);z-index:3}.me_5ecbb76c{color:inherit;font-size:inherit}.me_93bdc4d8{color:var(--json-tree-color-key);font-size:inherit;font-weight:500}.me_9bf8fdaa{background-color:transparent;border-radius:var(--mantine-radius-sm);font-family:var(--json-tree-value-font-family,var(--json-tree-font-family));font-size:inherit;padding:2px 6px}.me_9bf8fdaa[data-type=string]{color:var(--json-tree-color-string)}.me_9bf8fdaa[data-type=number]{color:var(--json-tree-color-number)}.me_9bf8fdaa[data-type=boolean]{color:var(--json-tree-color-boolean)}.me_9bf8fdaa[data-type=null],.me_9bf8fdaa[data-type=undefined]{color:var(--json-tree-color-null);font-style:italic}.me_9bf8fdaa[data-type=function]{color:var(--json-tree-color-function);font-style:italic}.me_9bf8fdaa[data-type=react-element]{color:var(--json-tree-color-react-element);font-style:italic}.me_9bf8fdaa[data-type=date]{color:var(--json-tree-color-date)}.me_9bf8fdaa[data-type=infinity],.me_9bf8fdaa[data-type=nan]{color:var(--json-tree-color-nan);font-style:italic}.me_9bf8fdaa[data-type=bigint]{color:var(--json-tree-color-bigint)}.me_9bf8fdaa[data-type=symbol]{color:var(--json-tree-color-symbol);font-style:italic}.me_9bf8fdaa[data-type=regexp]{color:var(--json-tree-color-regexp)}.me_9bf8fdaa[data-type=map],.me_9bf8fdaa[data-type=set]{color:var(--json-tree-color-map);font-weight:600}.me_7c12eea1{color:var(--json-tree-color-bracket);font-family:var(--json-tree-font-family);font-size:inherit;font-weight:700;user-select:none}.me_13a55df8{color:var(--
|
|
1
|
+
@layer mantine-json-tree {.me_e3fe2989{font-family:var(--json-tree-font-family);font-size:var(--json-tree-font-size)}:where([data-mantine-color-scheme=dark]) .me_e3fe2989{--json-tree-color-key:var(--mantine-color-blue-4);--json-tree-color-string:var(--mantine-color-green-5);--json-tree-color-number:var(--mantine-color-violet-5);--json-tree-color-boolean:var(--mantine-color-orange-5);--json-tree-color-null:var(--mantine-color-gray-5);--json-tree-color-function:var(--mantine-color-cyan-5);--json-tree-color-react-element:var(--mantine-color-pink-5);--json-tree-color-date:var(--mantine-color-teal-5);--json-tree-color-nan:var(--mantine-color-red-5);--json-tree-color-infinity:var(--mantine-color-red-5);--json-tree-color-bigint:var(--mantine-color-indigo-5);--json-tree-color-symbol:var(--mantine-color-yellow-5);--json-tree-color-regexp:var(--mantine-color-lime-5);--json-tree-color-map:var(--mantine-color-grape-5);--json-tree-color-set:var(--mantine-color-grape-5);--json-tree-color-bracket:var(--mantine-color-gray-6);--json-tree-color-ellipsis:var(--mantine-color-gray-5);--json-tree-color-line-number:var(--mantine-color-gray-6)}.me_cb75fd74{background-color:var(--json-tree-header-background-color,inherit);padding:var(--mantine-spacing-xs)}.me_cb75fd74[data-sticky=true]{position:sticky;top:var(--json-tree-header-sticky-offset,0);z-index:3}.me_5ecbb76c{color:inherit;font-size:inherit}.me_93bdc4d8{color:var(--json-tree-color-key);font-size:inherit;font-weight:500}.me_9bf8fdaa{background-color:transparent;border-radius:var(--mantine-radius-sm);font-family:var(--json-tree-value-font-family,var(--json-tree-font-family));font-size:inherit;padding:2px 6px}.me_9bf8fdaa[data-type=string]{color:var(--json-tree-color-string)}.me_9bf8fdaa[data-type=number]{color:var(--json-tree-color-number)}.me_9bf8fdaa[data-type=boolean]{color:var(--json-tree-color-boolean)}.me_9bf8fdaa[data-type=null],.me_9bf8fdaa[data-type=undefined]{color:var(--json-tree-color-null);font-style:italic}.me_9bf8fdaa[data-type=function]{color:var(--json-tree-color-function);font-style:italic}.me_9bf8fdaa[data-type=react-element]{color:var(--json-tree-color-react-element);font-style:italic}.me_9bf8fdaa[data-type=date]{color:var(--json-tree-color-date)}.me_9bf8fdaa[data-type=infinity],.me_9bf8fdaa[data-type=nan]{color:var(--json-tree-color-nan);font-style:italic}.me_9bf8fdaa[data-type=bigint]{color:var(--json-tree-color-bigint)}.me_9bf8fdaa[data-type=symbol]{color:var(--json-tree-color-symbol);font-style:italic}.me_9bf8fdaa[data-type=regexp]{color:var(--json-tree-color-regexp)}.me_9bf8fdaa[data-type=map],.me_9bf8fdaa[data-type=set]{color:var(--json-tree-color-map);font-weight:600}.me_7c12eea1{color:var(--json-tree-color-bracket);font-family:var(--json-tree-font-family);font-size:inherit;font-weight:700;user-select:none}.me_13a55df8{color:var(--json-tree-color-ellipsis);font-size:inherit}.me_338ae66e{opacity:0;transition:opacity .15s ease}.me_338ae66e:focus,.me_e3fe2989:hover .me_338ae66e{opacity:1}.me_e3fe2989[data-line-numbers]{counter-reset:json-tree-line;padding-left:3em;position:relative}.me_e3fe2989[data-line-numbers] [role=treeitem]{counter-increment:json-tree-line;position:relative}.me_733cffc4{color:var(--json-tree-color-line-number);font-size:inherit;left:-3em;opacity:.5;position:absolute;text-align:right;user-select:none;width:2.5em}.me_733cffc4:before{content:counter(json-tree-line)}.me_c97b8329{bottom:0;opacity:.4;pointer-events:none;position:absolute;top:0;width:1px}.me_c97b8329[data-color-index="0"]{background-color:var(--json-tree-indent-guide-color-0)}.me_c97b8329[data-color-index="1"]{background-color:var(--json-tree-indent-guide-color-1)}.me_c97b8329[data-color-index="2"]{background-color:var(--json-tree-indent-guide-color-2)}.me_c97b8329[data-color-index="3"]{background-color:var(--json-tree-indent-guide-color-3)}.me_c97b8329[data-color-index="4"]{background-color:var(--json-tree-indent-guide-color-4)}}
|
package/dist/types/JsonTree.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Factory, MantineSize, StylesApiProps, type BoxProps } from '@mantine/core';
|
|
3
|
-
export type
|
|
4
|
-
export type JsonTreeStylesNames = 'root' | 'header' | 'controls' | 'expandCollapse' | 'key' | 'keyValueSeparator' | 'value' | 'bracket' | 'ellipsis' | 'itemsCount' | 'indentGuide' | 'copyButton';
|
|
2
|
+
import { Factory, MantineSize, StylesApiProps, type BoxProps, type StyleProp, type TooltipProps } from '@mantine/core';
|
|
3
|
+
export type JsonTreeStylesNames = 'root' | 'header' | 'controls' | 'expandCollapse' | 'key' | 'keyValueSeparator' | 'value' | 'bracket' | 'ellipsis' | 'itemsCount' | 'indentGuide' | 'copyButton' | 'lineNumber';
|
|
5
4
|
export type JsonTreeCssVariables = {
|
|
6
5
|
root: '--json-tree-font-family' | '--json-tree-font-size';
|
|
7
6
|
header: '--json-tree-header-background-color' | '--json-tree-header-sticky-offset';
|
|
@@ -10,7 +9,8 @@ export type JsonTreeCssVariables = {
|
|
|
10
9
|
bracket: '--json-tree-color-bracket';
|
|
11
10
|
indentGuide: '--json-tree-indent-guide-color-0' | '--json-tree-indent-guide-color-1' | '--json-tree-indent-guide-color-2' | '--json-tree-indent-guide-color-3' | '--json-tree-indent-guide-color-4';
|
|
12
11
|
expandCollapse: never;
|
|
13
|
-
ellipsis:
|
|
12
|
+
ellipsis: '--json-tree-color-ellipsis';
|
|
13
|
+
lineNumber: '--json-tree-color-line-number';
|
|
14
14
|
itemsCount: never;
|
|
15
15
|
controls: never;
|
|
16
16
|
keyValueSeparator: never;
|
|
@@ -27,10 +27,14 @@ export interface JsonTreeBaseProps {
|
|
|
27
27
|
onNodeClick?: (path: string, value: any) => void;
|
|
28
28
|
/** Callback when a value is copied to clipboard */
|
|
29
29
|
onCopy?: (copy: string, value: unknown) => void;
|
|
30
|
+
/** Callback when a node is expanded */
|
|
31
|
+
onExpand?: (path: string) => void;
|
|
32
|
+
/** Callback when a node is collapsed */
|
|
33
|
+
onCollapse?: (path: string) => void;
|
|
30
34
|
/** Whether to show the root expand/collapse all button @default false */
|
|
31
35
|
withExpandAll?: boolean;
|
|
32
|
-
/** Size of the font @default 'xs' */
|
|
33
|
-
size?: MantineSize | (string & {}) | number
|
|
36
|
+
/** Size of the font, supports responsive object @default 'xs' */
|
|
37
|
+
size?: StyleProp<MantineSize | (string & {}) | number>;
|
|
34
38
|
/** Title displayed above the JSON tree */
|
|
35
39
|
title?: React.ReactNode;
|
|
36
40
|
/** Whether to show item counts for objects and arrays @default false */
|
|
@@ -39,6 +43,18 @@ export interface JsonTreeBaseProps {
|
|
|
39
43
|
withCopyToClipboard?: boolean;
|
|
40
44
|
/** Whether to show indent guides (vertical lines) for nested nodes @default false */
|
|
41
45
|
showIndentGuides?: boolean;
|
|
46
|
+
/** Whether to show line numbers @default false */
|
|
47
|
+
showLineNumbers?: boolean;
|
|
48
|
+
/** Whether to show the full JSON path in a tooltip on hover @default false */
|
|
49
|
+
showPathOnHover?: boolean;
|
|
50
|
+
/** Props passed to the Tooltip component when showPathOnHover is enabled */
|
|
51
|
+
tooltipProps?: Omit<TooltipProps, 'label' | 'children'>;
|
|
52
|
+
/** Maximum height of the tree, enables scrolling when content exceeds this value */
|
|
53
|
+
maxHeight?: React.CSSProperties['maxHeight'];
|
|
54
|
+
/** Controlled expanded state (array of node paths that are expanded) */
|
|
55
|
+
expanded?: string[];
|
|
56
|
+
/** Callback when expanded state changes */
|
|
57
|
+
onExpandedChange?: (expanded: string[]) => void;
|
|
42
58
|
/** If set, the header is sticky @default `false` */
|
|
43
59
|
stickyHeader?: boolean;
|
|
44
60
|
/** Offset for the sticky header (e.g. to account for a fixed navbar) @default 0*/
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MantineSize, type StyleProp } from '@mantine/core';
|
|
3
|
+
interface JsonTreeMediaVariablesProps {
|
|
4
|
+
size?: StyleProp<MantineSize | (string & {}) | number>;
|
|
5
|
+
selector: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function JsonTreeMediaVariables({ size, selector }: JsonTreeMediaVariablesProps): React.JSX.Element;
|
|
8
|
+
export {};
|
package/dist/types/index.d.mts
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -34,3 +34,7 @@ export declare function getItemCount(value: any): number;
|
|
|
34
34
|
* Convert JSON data to Mantine Tree format.
|
|
35
35
|
*/
|
|
36
36
|
export declare function convertToTreeData(value: any, key?: string, path?: string, depth?: number, displayFunctions?: JsonTreeFunctionDisplay): JSONTreeNodeData;
|
|
37
|
+
/**
|
|
38
|
+
* Find a node in the tree by its path value.
|
|
39
|
+
*/
|
|
40
|
+
export declare function findNodeByPath(nodes: JSONTreeNodeData[], targetPath: string): JSONTreeNodeData | null;
|
package/package.json
CHANGED
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gfazioli/mantine-json-tree",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "A Mantine extension component that renders interactive JSON trees with syntax highlighting, collapsible nodes, copy-to-clipboard, and configurable expansion depth.",
|
|
5
5
|
"homepage": "https://gfazioli.github.io/mantine-json-tree/",
|
|
6
6
|
"packageManager": "yarn@4.0.1",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "Giovambattista Fazioli <giovambattista.fazioli@gmail.com>",
|
|
9
9
|
"keywords": [
|
|
10
|
-
"extension",
|
|
11
|
-
"json-tree",
|
|
12
|
-
"json-view",
|
|
13
10
|
"mantine",
|
|
11
|
+
"mantine-ui",
|
|
12
|
+
"mantine-v8",
|
|
14
13
|
"react",
|
|
15
14
|
"react-component",
|
|
16
|
-
"typescript"
|
|
15
|
+
"typescript",
|
|
16
|
+
"extension",
|
|
17
|
+
"component",
|
|
18
|
+
"json-tree",
|
|
19
|
+
"json-view",
|
|
20
|
+
"json-viewer",
|
|
21
|
+
"syntax-highlighting",
|
|
22
|
+
"collapsible-tree",
|
|
23
|
+
"developer-tools"
|
|
17
24
|
],
|
|
18
25
|
"main": "./dist/cjs/index.cjs",
|
|
19
26
|
"module": "./dist/esm/index.mjs",
|