@tanstack/react-query-devtools 4.5.0 → 4.6.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.
@@ -15,7 +15,7 @@ declare type Entry = {
15
15
  label: string;
16
16
  };
17
17
  declare type RendererProps = {
18
- HandleEntry: HandleEntryComponent;
18
+ handleEntry: (entry: Entry) => JSX.Element;
19
19
  label?: string;
20
20
  value: unknown;
21
21
  subEntries: Entry[];
@@ -37,9 +37,6 @@ declare type RendererProps = {
37
37
  export declare function chunkArray<T>(array: T[], size: number): T[][];
38
38
  declare type Renderer = (props: RendererProps) => JSX.Element;
39
39
  export declare const DefaultRenderer: Renderer;
40
- declare type HandleEntryComponent = (props: {
41
- entry: Entry;
42
- }) => JSX.Element;
43
40
  declare type ExplorerProps = Partial<RendererProps> & {
44
41
  renderer?: Renderer;
45
42
  defaultExpanded?: true | Record<string, boolean>;
@@ -71,7 +71,7 @@ function chunkArray(array, size) {
71
71
  return result;
72
72
  }
73
73
  const DefaultRenderer = ({
74
- HandleEntry,
74
+ handleEntry,
75
75
  label,
76
76
  value,
77
77
  subEntries = [],
@@ -88,19 +88,13 @@ const DefaultRenderer = ({
88
88
  onClick: () => toggleExpanded()
89
89
  }, /*#__PURE__*/React.createElement(Expander, {
90
90
  expanded: expanded
91
- }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
92
- key: entry.label,
93
- entry: entry
94
- }))) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
91
+ }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(handleEntry)) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
95
92
  key: index
96
93
  }, /*#__PURE__*/React.createElement(Entry, null, /*#__PURE__*/React.createElement(LabelButton, {
97
94
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
98
95
  }, /*#__PURE__*/React.createElement(Expander, {
99
96
  expanded: expanded
100
- }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
101
- key: entry.label,
102
- entry: entry
103
- }))) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
97
+ }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(handleEntry)) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
104
98
  };
105
99
 
106
100
  function isIterable(x) {
@@ -150,9 +144,8 @@ function Explorer({
150
144
 
151
145
  const subEntryPages = chunkArray(subEntries, pageSize);
152
146
  return renderer({
153
- HandleEntry: ({
154
- entry
155
- }) => /*#__PURE__*/React.createElement(Explorer, _extends({
147
+ handleEntry: entry => /*#__PURE__*/React.createElement(Explorer, _extends({
148
+ key: entry.label,
156
149
  value: value,
157
150
  renderer: renderer
158
151
  }, rest, entry)),
@@ -1 +1 @@
1
- {"version":3,"file":"Explorer.esm.js","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n HandleEntry: HandleEntryComponent\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n HandleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>\n {subEntries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>\n {entries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype HandleEntryComponent = (props: { entry: Entry }) => JSX.Element\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n HandleEntry: ({ entry }) => (\n <Explorer value={value} renderer={renderer} {...rest} {...entry} />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","HandleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","React","useState","String","toLowerCase","map","entry","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key"],"mappings":"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"}
1
+ {"version":3,"file":"Explorer.esm.js","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n handleEntry: (entry: Entry) => JSX.Element\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n handleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>{subEntries.map(handleEntry)}</SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>{entries.map(handleEntry)}</SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n handleEntry: (entry) => (\n <Explorer\n key={entry.label}\n value={value}\n renderer={renderer}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","React","useState","String","toLowerCase","map","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","entry"],"mappings":"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"}
@@ -95,7 +95,7 @@ function chunkArray(array, size) {
95
95
  return result;
96
96
  }
97
97
  const DefaultRenderer = ({
98
- HandleEntry,
98
+ handleEntry,
99
99
  label,
100
100
  value,
101
101
  subEntries = [],
@@ -112,19 +112,13 @@ const DefaultRenderer = ({
112
112
  onClick: () => toggleExpanded()
113
113
  }, /*#__PURE__*/React__namespace.createElement(Expander, {
114
114
  expanded: expanded
115
- }), " ", label, ' ', /*#__PURE__*/React__namespace.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React__namespace.createElement(SubEntries, null, subEntries.map(entry => /*#__PURE__*/React__namespace.createElement(HandleEntry, {
116
- key: entry.label,
117
- entry: entry
118
- }))) : /*#__PURE__*/React__namespace.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React__namespace.createElement("div", {
115
+ }), " ", label, ' ', /*#__PURE__*/React__namespace.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React__namespace.createElement(SubEntries, null, subEntries.map(handleEntry)) : /*#__PURE__*/React__namespace.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React__namespace.createElement("div", {
119
116
  key: index
120
117
  }, /*#__PURE__*/React__namespace.createElement(Entry, null, /*#__PURE__*/React__namespace.createElement(LabelButton, {
121
118
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
122
119
  }, /*#__PURE__*/React__namespace.createElement(Expander, {
123
120
  expanded: expanded
124
- }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React__namespace.createElement(SubEntries, null, entries.map(entry => /*#__PURE__*/React__namespace.createElement(HandleEntry, {
125
- key: entry.label,
126
- entry: entry
127
- }))) : null)))) : null) : /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React__namespace.createElement(Value, null, utils.displayValue(value))));
121
+ }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React__namespace.createElement(SubEntries, null, entries.map(handleEntry)) : null)))) : null) : /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React__namespace.createElement(Value, null, utils.displayValue(value))));
128
122
  };
129
123
 
130
124
  function isIterable(x) {
@@ -174,9 +168,8 @@ function Explorer({
174
168
 
175
169
  const subEntryPages = chunkArray(subEntries, pageSize);
176
170
  return renderer({
177
- HandleEntry: ({
178
- entry
179
- }) => /*#__PURE__*/React__namespace.createElement(Explorer, _rollupPluginBabelHelpers["extends"]({
171
+ handleEntry: entry => /*#__PURE__*/React__namespace.createElement(Explorer, _rollupPluginBabelHelpers["extends"]({
172
+ key: entry.label,
180
173
  value: value,
181
174
  renderer: renderer
182
175
  }, rest, entry)),
@@ -1 +1 @@
1
- {"version":3,"file":"Explorer.js","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n HandleEntry: HandleEntryComponent\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n HandleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>\n {subEntries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>\n {entries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype HandleEntryComponent = (props: { entry: Entry }) => JSX.Element\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n HandleEntry: ({ entry }) => (\n <Explorer value={value} renderer={renderer} {...rest} {...entry} />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","React","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","HandleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","useState","String","toLowerCase","map","entry","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","_extends"],"mappings":"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"}
1
+ {"version":3,"file":"Explorer.js","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n handleEntry: (entry: Entry) => JSX.Element\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n handleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>{subEntries.map(handleEntry)}</SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>{entries.map(handleEntry)}</SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n handleEntry: (entry) => (\n <Explorer\n key={entry.label}\n value={value}\n renderer={renderer}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","React","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","useState","String","toLowerCase","map","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","entry","_extends"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MAIaA,KAAK,GAAGC,YAAM,CAAC,KAAD,EAAQ;AACjCC,EAAAA,UAAU,EAAE,kBADqB;AAEjCC,EAAAA,QAAQ,EAAE,KAFuB;AAGjCC,EAAAA,UAAU,EAAE,KAHqB;AAIjCC,EAAAA,OAAO,EAAE,MAJwB;AAKjCC,EAAAA,SAAS,EAAE,YAAA;AALsB,CAAR,EAApB;MAQMC,KAAK,GAAGN,YAAM,CAAC,MAAD,EAAS;AAClCO,EAAAA,KAAK,EAAE,OAAA;AAD2B,CAAT,EAApB;MAIMC,WAAW,GAAGR,YAAM,CAAC,QAAD,EAAW;AAC1CS,EAAAA,MAAM,EAAE,SADkC;AAE1CF,EAAAA,KAAK,EAAE,OAAA;AAFmC,CAAX,EAA1B;MAKMG,YAAY,GAAGV,YAAM,CAAC,QAAD,EAAW;AAC3CS,EAAAA,MAAM,EAAE,SADmC;AAE3CF,EAAAA,KAAK,EAAE,SAFoC;AAG3CI,EAAAA,IAAI,EAAE,SAHqC;AAI3CP,EAAAA,OAAO,EAAE,SAJkC;AAK3CQ,EAAAA,UAAU,EAAE,aAL+B;AAM3CC,EAAAA,MAAM,EAAE,MANmC;AAO3CC,EAAAA,OAAO,EAAE,CAAA;AAPkC,CAAX,EAA3B;AAUA,MAAMC,KAAK,GAAGf,YAAM,CAAC,MAAD,EAAS,CAACgB,MAAD,EAASC,KAAT,MAAoB;EACtDV,KAAK,EAAEU,KAAK,CAACC,MAAAA;AADyC,CAApB,CAAT,EAApB;MAIMC,UAAU,GAAGnB,YAAM,CAAC,KAAD,EAAQ;AACtCoB,EAAAA,UAAU,EAAE,MAD0B;AAEtCC,EAAAA,WAAW,EAAE,KAFyB;AAGtCC,EAAAA,UAAU,EAAE,2BAAA;AAH0B,CAAR,EAAzB;MAMMC,IAAI,GAAGvB,YAAM,CAAC,MAAD,EAAS;AACjCO,EAAAA,KAAK,EAAE,MAD0B;AAEjCL,EAAAA,QAAQ,EAAE,MAAA;AAFuB,CAAT,EAAnB;AAUA,MAAMsB,QAAQ,GAAG,CAAC;EAAEC,QAAF;AAAYC,EAAAA,KAAK,GAAG,EAAA;AAApB,CAAD,kBACtBC,gBAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AACE,EAAA,KAAK,EAAE;AACLC,IAAAA,OAAO,EAAE,cADJ;AAELC,IAAAA,UAAU,EAAE,cAFP;AAGLC,IAAAA,SAAS,EAAYL,SAAAA,IAAAA,QAAQ,GAAG,EAAH,GAAQ,CAA5B,CAAqCC,GAAAA,OAAAA,IAAAA,KAAK,CAACI,SAAN,IAAmB,EAAxD,CAHJ;IAIL,GAAGJ,KAAAA;AAJE,GAAA;AADT,CADK,EAAA,QAAA,EAAA;;AA6BP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,UAAT,CAAuBC,KAAvB,EAAmCC,IAAnC,EAAwD;AAC7D,EAAA,IAAIA,IAAI,GAAG,CAAX,EAAc,OAAO,EAAP,CAAA;EACd,IAAIC,CAAC,GAAG,CAAR,CAAA;EACA,MAAMC,MAAa,GAAG,EAAtB,CAAA;;AACA,EAAA,OAAOD,CAAC,GAAGF,KAAK,CAACI,MAAjB,EAAyB;AACvBD,IAAAA,MAAM,CAACE,IAAP,CAAYL,KAAK,CAACM,KAAN,CAAYJ,CAAZ,EAAeA,CAAC,GAAGD,IAAnB,CAAZ,CAAA,CAAA;IACAC,CAAC,GAAGA,CAAC,GAAGD,IAAR,CAAA;AACD,GAAA;;AACD,EAAA,OAAOE,MAAP,CAAA;AACD,CAAA;AAIM,MAAMI,eAAyB,GAAG,CAAC;EACxCC,WADwC;EAExCC,KAFwC;EAGxCC,KAHwC;AAIxCC,EAAAA,UAAU,GAAG,EAJ2B;AAKxCC,EAAAA,aAAa,GAAG,EALwB;EAMxCC,IANwC;AAOxCpB,EAAAA,QAAQ,GAAG,KAP6B;EAQxCqB,cARwC;AASxCC,EAAAA,QAAAA;AATwC,CAAD,KAUnC;EACJ,MAAM,CAACC,aAAD,EAAgBC,gBAAhB,CAAA,GAAoCtB,gBAAK,CAACuB,QAAN,CAAyB,EAAzB,CAA1C,CAAA;AAEA,EAAA,oBACEvB,+BAAC,KAAD,EAAA;AAAO,IAAA,GAAG,EAAEc,KAAAA;AAAZ,GAAA,EACGG,aAAa,CAACR,MAAd,gBACCT,gBAAA,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eACEA,+BAAC,YAAD,EAAA;IAAc,OAAO,EAAE,MAAMmB,cAAc,EAAA;AAA3C,GAAA,eACEnB,+BAAC,QAAD,EAAA;AAAU,IAAA,QAAQ,EAAEF,QAAAA;AAApB,GAAA,CADF,EACoCgB,GAAAA,EAAAA,KADpC,EAC2C,GAD3C,eAEEd,gBAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,EACGwB,MAAM,CAACN,IAAD,CAAN,CAAaO,WAAb,EAAA,KAA+B,UAA/B,GAA4C,aAA5C,GAA4D,EAD/D,EAEGT,UAAU,CAACP,MAFd,EAAA,GAAA,EAEuBO,UAAU,CAACP,MAAX,GAAoB,CAApB,GAFvB,OAAA,GAAA,MAAA,CAFF,CADF,EAQGX,QAAQ,GACPmB,aAAa,CAACR,MAAd,KAAyB,CAAzB,gBACET,gBAAC,CAAA,aAAA,CAAA,UAAD,EAAagB,IAAAA,EAAAA,UAAU,CAACU,GAAX,CAAeb,WAAf,CAAb,CADF,gBAGEb,gBAAC,CAAA,aAAA,CAAA,UAAD,EACGiB,IAAAA,EAAAA,aAAa,CAACS,GAAd,CAAkB,CAACC,OAAD,EAAUC,KAAV,kBACjB5B,gBAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAK,IAAA,GAAG,EAAE4B,KAAAA;AAAV,GAAA,eACE5B,gBAAC,CAAA,aAAA,CAAA,KAAD,EACE,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,WAAD,EAAA;AACE,IAAA,OAAO,EAAE,MACPsB,gBAAgB,CAAEO,GAAD,IACfA,GAAG,CAACC,QAAJ,CAAaF,KAAb,CAAA,GACIC,GAAG,CAACE,MAAJ,CAAYC,CAAD,IAAOA,CAAC,KAAKJ,KAAxB,CADJ,GAEI,CAAC,GAAGC,GAAJ,EAASD,KAAT,CAHU,CAAA;AAFpB,GAAA,eASE5B,+BAAC,QAAD,EAAA;AAAU,IAAA,QAAQ,EAAEF,QAAAA;GATtB,CAAA,EAAA,IAAA,EASqC8B,KAAK,GAAGR,QAT7C,EAAA,MAAA,EAS2D,GAT3D,EAUGQ,KAAK,GAAGR,QAAR,GAAmBA,QAAnB,GAA8B,CAVjC,EAAA,GAAA,CADF,EAaGC,aAAa,CAACS,QAAd,CAAuBF,KAAvB,CACC,gBAAA5B,gBAAA,CAAA,aAAA,CAAC,UAAD,EAAA,IAAA,EAAa2B,OAAO,CAACD,GAAR,CAAYb,WAAZ,CAAb,CADD,GAEG,IAfN,CADF,CADD,CADH,CAJK,GA4BL,IApCN,CADD,gBAwCCb,gBACE,CAAA,aAAA,CAAAA,gBAAA,CAAA,QAAA,EAAA,IAAA,eAAAA,gBAAA,CAAA,aAAA,CAAC,KAAD,EAAA,IAAA,EAAQc,KAAR,EAAA,GAAA,CADF,EAC0B,GAAA,eAAAd,gBAAA,CAAA,aAAA,CAAC,KAAD,EAAA,IAAA,EAAQiC,kBAAY,CAAClB,KAAD,CAApB,CAD1B,CAzCJ,CADF,CAAA;AAgDD,EA7DM;;AA0EP,SAASmB,UAAT,CAAoBC,CAApB,EAAoD;AAClD,EAAA,OAAOC,MAAM,CAACC,QAAP,IAAmBF,CAA1B,CAAA;AACD,CAAA;;AAEc,SAASG,QAAT,CAAkB;EAC/BvB,KAD+B;EAE/BwB,eAF+B;AAG/BC,EAAAA,QAAQ,GAAG5B,eAHoB;AAI/BQ,EAAAA,QAAQ,GAAG,GAJoB;EAK/B,GAAGqB,IAAAA;AAL4B,CAAlB,EAMG;AAChB,EAAA,MAAM,CAAC3C,QAAD,EAAW4C,WAAX,CAA0B1C,GAAAA,gBAAK,CAACuB,QAAN,CAAeoB,OAAO,CAACJ,eAAD,CAAtB,CAAhC,CAAA;AACA,EAAA,MAAMpB,cAAc,GAAGnB,gBAAK,CAAC4C,WAAN,CAAkB,MAAMF,WAAW,CAAEb,GAAD,IAAS,CAACA,GAAX,CAAnC,EAAoD,EAApD,CAAvB,CAAA;EAEA,IAAIX,IAAY,GAAG,OAAOH,KAA1B,CAAA;EACA,IAAIC,UAAsB,GAAG,EAA7B,CAAA;;EAEA,MAAM6B,YAAY,GAAIC,GAAD,IAAsD;AACzE,IAAA,MAAMC,kBAAkB,GACtBR,eAAe,KAAK,IAApB,GACI;MAAE,CAACO,GAAG,CAAChC,KAAL,GAAa,IAAA;KADnB,GAEIyB,eAFJ,IAEIA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAe,CAAGO,GAAG,CAAChC,KAAP,CAHrB,CAAA;IAIA,OAAO,EACL,GAAGgC,GADE;AAELP,MAAAA,eAAe,EAAEQ,kBAAAA;KAFnB,CAAA;GALF,CAAA;;AAWA,EAAA,IAAIC,KAAK,CAACC,OAAN,CAAclC,KAAd,CAAJ,EAA0B;AACxBG,IAAAA,IAAI,GAAG,OAAP,CAAA;IACAF,UAAU,GAAGD,KAAK,CAACW,GAAN,CAAU,CAACM,CAAD,EAAIzB,CAAJ,KACrBsC,YAAY,CAAC;AACX/B,MAAAA,KAAK,EAAEP,CAAC,CAAC2C,QAAF,EADI;AAEXnC,MAAAA,KAAK,EAAEiB,CAAAA;AAFI,KAAD,CADD,CAAb,CAAA;GAFF,MAQO,IACLjB,KAAK,KAAK,IAAV,IACA,OAAOA,KAAP,KAAiB,QADjB,IAEAmB,UAAU,CAACnB,KAAD,CAFV,IAGA,OAAOA,KAAK,CAACqB,MAAM,CAACC,QAAR,CAAZ,KAAkC,UAJ7B,EAKL;AACAnB,IAAAA,IAAI,GAAG,UAAP,CAAA;AACAF,IAAAA,UAAU,GAAGgC,KAAK,CAACG,IAAN,CAAWpC,KAAX,EAAkB,CAACqC,GAAD,EAAM7C,CAAN,KAC7BsC,YAAY,CAAC;AACX/B,MAAAA,KAAK,EAAEP,CAAC,CAAC2C,QAAF,EADI;AAEXnC,MAAAA,KAAK,EAAEqC,GAAAA;AAFI,KAAD,CADD,CAAb,CAAA;GAPK,MAaA,IAAI,OAAOrC,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAA3C,EAAiD;AACtDG,IAAAA,IAAI,GAAG,QAAP,CAAA;AACAF,IAAAA,UAAU,GAAGqC,MAAM,CAAC1B,OAAP,CAAeZ,KAAf,CAAsBW,CAAAA,GAAtB,CAA0B,CAAC,CAAC4B,GAAD,EAAMF,GAAN,CAAD,KACrCP,YAAY,CAAC;AACX/B,MAAAA,KAAK,EAAEwC,GADI;AAEXvC,MAAAA,KAAK,EAAEqC,GAAAA;AAFI,KAAD,CADD,CAAb,CAAA;AAMD,GAAA;;AAED,EAAA,MAAMnC,aAAa,GAAGb,UAAU,CAACY,UAAD,EAAaI,QAAb,CAAhC,CAAA;AAEA,EAAA,OAAOoB,QAAQ,CAAC;AACd3B,IAAAA,WAAW,EAAG0C,KAAD,iBACXvD,gBAAA,CAAA,aAAA,CAAC,QAAD,EAAAwD,oCAAA,CAAA;MACE,GAAG,EAAED,KAAK,CAACzC,KADb;AAEE,MAAA,KAAK,EAAEC,KAFT;AAGE,MAAA,QAAQ,EAAEyB,QAAAA;KACNC,EAAAA,IAJN,EAKMc,KALN,CAFY,CAAA;IAUdrC,IAVc;IAWdF,UAXc;IAYdC,aAZc;IAadF,KAbc;IAcdjB,QAdc;IAedqB,cAfc;IAgBdC,QAhBc;IAiBd,GAAGqB,IAAAA;AAjBW,GAAD,CAAf,CAAA;AAmBD;;;;;;;;;;;;;;"}
@@ -71,7 +71,7 @@ function chunkArray(array, size) {
71
71
  return result;
72
72
  }
73
73
  const DefaultRenderer = ({
74
- HandleEntry,
74
+ handleEntry,
75
75
  label,
76
76
  value,
77
77
  subEntries = [],
@@ -88,19 +88,13 @@ const DefaultRenderer = ({
88
88
  onClick: () => toggleExpanded()
89
89
  }, /*#__PURE__*/React.createElement(Expander, {
90
90
  expanded: expanded
91
- }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
92
- key: entry.label,
93
- entry: entry
94
- }))) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
91
+ }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(handleEntry)) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
95
92
  key: index
96
93
  }, /*#__PURE__*/React.createElement(Entry, null, /*#__PURE__*/React.createElement(LabelButton, {
97
94
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
98
95
  }, /*#__PURE__*/React.createElement(Expander, {
99
96
  expanded: expanded
100
- }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
101
- key: entry.label,
102
- entry: entry
103
- }))) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
97
+ }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(handleEntry)) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
104
98
  };
105
99
 
106
100
  function isIterable(x) {
@@ -150,9 +144,8 @@ function Explorer({
150
144
 
151
145
  const subEntryPages = chunkArray(subEntries, pageSize);
152
146
  return renderer({
153
- HandleEntry: ({
154
- entry
155
- }) => /*#__PURE__*/React.createElement(Explorer, _extends({
147
+ handleEntry: entry => /*#__PURE__*/React.createElement(Explorer, _extends({
148
+ key: entry.label,
156
149
  value: value,
157
150
  renderer: renderer
158
151
  }, rest, entry)),
@@ -1 +1 @@
1
- {"version":3,"file":"Explorer.mjs","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n HandleEntry: HandleEntryComponent\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n HandleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>\n {subEntries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>\n {entries.map((entry) => (\n <HandleEntry key={entry.label} entry={entry} />\n ))}\n </SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype HandleEntryComponent = (props: { entry: Entry }) => JSX.Element\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n HandleEntry: ({ entry }) => (\n <Explorer value={value} renderer={renderer} {...rest} {...entry} />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","HandleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","React","useState","String","toLowerCase","map","entry","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key"],"mappings":"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"}
1
+ {"version":3,"file":"Explorer.mjs","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\n\nexport const Entry = styled('div', {\n fontFamily: 'Menlo, monospace',\n fontSize: '1em',\n lineHeight: '1.7',\n outline: 'none',\n wordBreak: 'break-word',\n})\n\nexport const Label = styled('span', {\n color: 'white',\n})\n\nexport const LabelButton = styled('button', {\n cursor: 'pointer',\n color: 'white',\n})\n\nexport const ExpandButton = styled('button', {\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n})\n\nexport const Value = styled('span', (_props, theme) => ({\n color: theme.danger,\n}))\n\nexport const SubEntries = styled('div', {\n marginLeft: '.1em',\n paddingLeft: '1em',\n borderLeft: '2px solid rgba(0,0,0,.15)',\n})\n\nexport const Info = styled('span', {\n color: 'grey',\n fontSize: '.7em',\n})\n\ntype ExpanderProps = {\n expanded: boolean\n style?: React.CSSProperties\n}\n\nexport const Expander = ({ expanded, style = {} }: ExpanderProps) => (\n <span\n style={{\n display: 'inline-block',\n transition: 'all .1s ease',\n transform: `rotate(${expanded ? 90 : 0}deg) ${style.transform || ''}`,\n ...style,\n }}\n >\n ▶\n </span>\n)\n\ntype Entry = {\n label: string\n}\n\ntype RendererProps = {\n handleEntry: (entry: Entry) => JSX.Element\n label?: string\n value: unknown\n subEntries: Entry[]\n subEntryPages: Entry[][]\n type: string\n expanded: boolean\n toggleExpanded: () => void\n pageSize: number\n}\n\n/**\n * Chunk elements in the array by size\n *\n * when the array cannot be chunked evenly by size, the last chunk will be\n * filled with the remaining elements\n *\n * @example\n * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']]\n */\nexport function chunkArray<T>(array: T[], size: number): T[][] {\n if (size < 1) return []\n let i = 0\n const result: T[][] = []\n while (i < array.length) {\n result.push(array.slice(i, i + size))\n i = i + size\n }\n return result\n}\n\ntype Renderer = (props: RendererProps) => JSX.Element\n\nexport const DefaultRenderer: Renderer = ({\n handleEntry,\n label,\n value,\n subEntries = [],\n subEntryPages = [],\n type,\n expanded = false,\n toggleExpanded,\n pageSize,\n}) => {\n const [expandedPages, setExpandedPages] = React.useState<number[]>([])\n\n return (\n <Entry key={label}>\n {subEntryPages.length ? (\n <>\n <ExpandButton onClick={() => toggleExpanded()}>\n <Expander expanded={expanded} /> {label}{' '}\n <Info>\n {String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : ''}\n {subEntries.length} {subEntries.length > 1 ? `items` : `item`}\n </Info>\n </ExpandButton>\n {expanded ? (\n subEntryPages.length === 1 ? (\n <SubEntries>{subEntries.map(handleEntry)}</SubEntries>\n ) : (\n <SubEntries>\n {subEntryPages.map((entries, index) => (\n <div key={index}>\n <Entry>\n <LabelButton\n onClick={() =>\n setExpandedPages((old) =>\n old.includes(index)\n ? old.filter((d) => d !== index)\n : [...old, index],\n )\n }\n >\n <Expander expanded={expanded} /> [{index * pageSize} ...{' '}\n {index * pageSize + pageSize - 1}]\n </LabelButton>\n {expandedPages.includes(index) ? (\n <SubEntries>{entries.map(handleEntry)}</SubEntries>\n ) : null}\n </Entry>\n </div>\n ))}\n </SubEntries>\n )\n ) : null}\n </>\n ) : (\n <>\n <Label>{label}:</Label> <Value>{displayValue(value)}</Value>\n </>\n )}\n </Entry>\n )\n}\n\ntype ExplorerProps = Partial<RendererProps> & {\n renderer?: Renderer\n defaultExpanded?: true | Record<string, boolean>\n}\n\ntype Property = {\n defaultExpanded?: boolean | Record<string, boolean>\n label: string\n value: unknown\n}\n\nfunction isIterable(x: any): x is Iterable<unknown> {\n return Symbol.iterator in x\n}\n\nexport default function Explorer({\n value,\n defaultExpanded,\n renderer = DefaultRenderer,\n pageSize = 100,\n ...rest\n}: ExplorerProps) {\n const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded))\n const toggleExpanded = React.useCallback(() => setExpanded((old) => !old), [])\n\n let type: string = typeof value\n let subEntries: Property[] = []\n\n const makeProperty = (sub: { label: string; value: unknown }): Property => {\n const subDefaultExpanded =\n defaultExpanded === true\n ? { [sub.label]: true }\n : defaultExpanded?.[sub.label]\n return {\n ...sub,\n defaultExpanded: subDefaultExpanded,\n }\n }\n\n if (Array.isArray(value)) {\n type = 'array'\n subEntries = value.map((d, i) =>\n makeProperty({\n label: i.toString(),\n value: d,\n }),\n )\n } else if (\n value !== null &&\n typeof value === 'object' &&\n isIterable(value) &&\n typeof value[Symbol.iterator] === 'function'\n ) {\n type = 'Iterable'\n subEntries = Array.from(value, (val, i) =>\n makeProperty({\n label: i.toString(),\n value: val,\n }),\n )\n } else if (typeof value === 'object' && value !== null) {\n type = 'object'\n subEntries = Object.entries(value).map(([key, val]) =>\n makeProperty({\n label: key,\n value: val,\n }),\n )\n }\n\n const subEntryPages = chunkArray(subEntries, pageSize)\n\n return renderer({\n handleEntry: (entry) => (\n <Explorer\n key={entry.label}\n value={value}\n renderer={renderer}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n toggleExpanded,\n pageSize,\n ...rest,\n })\n}\n"],"names":["Entry","styled","fontFamily","fontSize","lineHeight","outline","wordBreak","Label","color","LabelButton","cursor","ExpandButton","font","background","border","padding","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","value","subEntries","subEntryPages","type","toggleExpanded","pageSize","expandedPages","setExpandedPages","React","useState","String","toLowerCase","map","entries","index","old","includes","filter","d","displayValue","isIterable","x","Symbol","iterator","Explorer","defaultExpanded","renderer","rest","setExpanded","Boolean","useCallback","makeProperty","sub","subDefaultExpanded","Array","isArray","toString","from","val","Object","key","entry"],"mappings":"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"}
@@ -354,7 +354,7 @@ function chunkArray(array, size) {
354
354
  return result;
355
355
  }
356
356
  const DefaultRenderer = ({
357
- HandleEntry,
357
+ handleEntry,
358
358
  label,
359
359
  value,
360
360
  subEntries = [],
@@ -371,19 +371,13 @@ const DefaultRenderer = ({
371
371
  onClick: () => toggleExpanded()
372
372
  }, /*#__PURE__*/React.createElement(Expander, {
373
373
  expanded: expanded
374
- }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
375
- key: entry.label,
376
- entry: entry
377
- }))) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
374
+ }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/React.createElement(SubEntries, null, subEntries.map(handleEntry)) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
378
375
  key: index
379
376
  }, /*#__PURE__*/React.createElement(Entry, null, /*#__PURE__*/React.createElement(LabelButton, {
380
377
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
381
378
  }, /*#__PURE__*/React.createElement(Expander, {
382
379
  expanded: expanded
383
- }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(entry => /*#__PURE__*/React.createElement(HandleEntry, {
384
- key: entry.label,
385
- entry: entry
386
- }))) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
380
+ }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/React.createElement(SubEntries, null, entries.map(handleEntry)) : null)))) : null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, null, label, ":"), " ", /*#__PURE__*/React.createElement(Value, null, displayValue(value))));
387
381
  };
388
382
 
389
383
  function isIterable(x) {
@@ -433,9 +427,8 @@ function Explorer({
433
427
 
434
428
  const subEntryPages = chunkArray(subEntries, pageSize);
435
429
  return renderer({
436
- HandleEntry: ({
437
- entry
438
- }) => /*#__PURE__*/React.createElement(Explorer, _extends({
430
+ handleEntry: entry => /*#__PURE__*/React.createElement(Explorer, _extends({
431
+ key: entry.label,
439
432
  value: value,
440
433
  renderer: renderer
441
434
  }, rest, entry)),