@tanstack/react-query-devtools 4.15.0 → 4.16.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.
@@ -3,6 +3,9 @@ export declare const Entry: React.ForwardRefExoticComponent<React.HTMLAttributes
3
3
  export declare const Label: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
4
4
  export declare const LabelButton: React.ForwardRefExoticComponent<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & React.RefAttributes<HTMLButtonElement>>;
5
5
  export declare const ExpandButton: React.ForwardRefExoticComponent<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & React.RefAttributes<HTMLButtonElement>>;
6
+ export declare const CopyButton: ({ value }: {
7
+ value: unknown;
8
+ }) => JSX.Element;
6
9
  export declare const Value: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
7
10
  export declare const SubEntries: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
8
11
  export declare const Info: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
@@ -22,6 +25,7 @@ declare type RendererProps = {
22
25
  subEntryPages: Entry[][];
23
26
  type: string;
24
27
  expanded: boolean;
28
+ copyable: boolean;
25
29
  toggleExpanded: () => void;
26
30
  pageSize: number;
27
31
  };
@@ -40,6 +44,7 @@ export declare const DefaultRenderer: Renderer;
40
44
  declare type ExplorerProps = Partial<RendererProps> & {
41
45
  renderer?: Renderer;
42
46
  defaultExpanded?: true | Record<string, boolean>;
47
+ copyable?: boolean;
43
48
  };
44
- export default function Explorer({ value, defaultExpanded, renderer, pageSize, ...rest }: ExplorerProps): JSX.Element;
49
+ export default function Explorer({ value, defaultExpanded, renderer, pageSize, copyable, ...rest }: ExplorerProps): JSX.Element;
45
50
  export {};
@@ -1,6 +1,7 @@
1
1
  import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.esm.js';
2
2
  import * as React from 'react';
3
3
  import { displayValue, styled } from './utils.esm.js';
4
+ import SuperJSON from 'superjson';
4
5
 
5
6
  const Entry = styled('div', {
6
7
  fontFamily: 'Menlo, monospace',
@@ -25,6 +26,36 @@ const ExpandButton = styled('button', {
25
26
  border: 'none',
26
27
  padding: 0
27
28
  });
29
+ const CopyButton = ({
30
+ value
31
+ }) => {
32
+ const [copyState, setCopyState] = React.useState('NoCopy');
33
+ return /*#__PURE__*/React.createElement("button", {
34
+ onClick: copyState === 'NoCopy' ? () => {
35
+ navigator.clipboard.writeText(SuperJSON.stringify(value)).then(() => {
36
+ setCopyState('SuccessCopy');
37
+ setTimeout(() => {
38
+ setCopyState('NoCopy');
39
+ }, 1500);
40
+ }, err => {
41
+ console.error('Failed to copy: ', err);
42
+ setCopyState('ErrorCopy');
43
+ setTimeout(() => {
44
+ setCopyState('NoCopy');
45
+ }, 1500);
46
+ });
47
+ } : undefined,
48
+ style: {
49
+ cursor: 'pointer',
50
+ color: 'inherit',
51
+ font: 'inherit',
52
+ outline: 'inherit',
53
+ background: 'transparent',
54
+ border: 'none',
55
+ padding: 0
56
+ }
57
+ }, copyState === 'NoCopy' ? /*#__PURE__*/React.createElement(Copier, null) : copyState === 'SuccessCopy' ? /*#__PURE__*/React.createElement(CopiedCopier, null) : /*#__PURE__*/React.createElement(ErrorCopier, null));
58
+ };
28
59
  const Value = styled('span', (_props, theme) => ({
29
60
  color: theme.danger
30
61
  }));
@@ -49,6 +80,68 @@ const Expander = ({
49
80
  }
50
81
  }, "\u25B6");
51
82
 
83
+ const Copier = () => /*#__PURE__*/React.createElement("span", {
84
+ "aria-label": "Copy object to clipboard",
85
+ title: "Copy object to clipboard",
86
+ style: {
87
+ paddingLeft: '1em'
88
+ }
89
+ }, /*#__PURE__*/React.createElement("svg", {
90
+ height: "12",
91
+ viewBox: "0 0 16 12",
92
+ width: "10"
93
+ }, /*#__PURE__*/React.createElement("path", {
94
+ fill: "currentColor",
95
+ d: "M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"
96
+ }), /*#__PURE__*/React.createElement("path", {
97
+ fill: "currentColor",
98
+ d: "M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"
99
+ })));
100
+
101
+ const ErrorCopier = () => /*#__PURE__*/React.createElement("span", {
102
+ "aria-label": "Failed copying to clipboard",
103
+ title: "Failed copying to clipboard",
104
+ style: {
105
+ paddingLeft: '1em',
106
+ display: 'flex',
107
+ alignItems: 'center'
108
+ }
109
+ }, /*#__PURE__*/React.createElement("svg", {
110
+ height: "12",
111
+ viewBox: "0 0 16 12",
112
+ width: "10",
113
+ display: "block"
114
+ }, /*#__PURE__*/React.createElement("path", {
115
+ fill: "red",
116
+ d: "M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"
117
+ })), /*#__PURE__*/React.createElement("span", {
118
+ style: {
119
+ color: 'red',
120
+ fontSize: '12px',
121
+ paddingLeft: '4px',
122
+ position: 'relative',
123
+ top: '2px'
124
+ }
125
+ }, "See console"));
126
+
127
+ const CopiedCopier = () => /*#__PURE__*/React.createElement("span", {
128
+ "aria-label": "Object copied to clipboard",
129
+ title: "Object copied to clipboard",
130
+ style: {
131
+ paddingLeft: '1em',
132
+ display: 'inline-block',
133
+ verticalAlign: 'middle'
134
+ }
135
+ }, /*#__PURE__*/React.createElement("svg", {
136
+ height: "16",
137
+ viewBox: "0 0 16 16",
138
+ width: "16",
139
+ display: "block"
140
+ }, /*#__PURE__*/React.createElement("path", {
141
+ fill: "green",
142
+ d: "M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"
143
+ })));
144
+
52
145
  /**
53
146
  * Chunk elements in the array by size
54
147
  *
@@ -78,6 +171,7 @@ const DefaultRenderer = ({
78
171
  subEntryPages = [],
79
172
  type,
80
173
  expanded = false,
174
+ copyable = false,
81
175
  toggleExpanded,
82
176
  pageSize
83
177
  }) => {
@@ -88,7 +182,9 @@ const DefaultRenderer = ({
88
182
  onClick: () => toggleExpanded()
89
183
  }, /*#__PURE__*/React.createElement(Expander, {
90
184
  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(handleEntry)) : /*#__PURE__*/React.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React.createElement("div", {
185
+ }), " ", label, ' ', /*#__PURE__*/React.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), copyable ? /*#__PURE__*/React.createElement(CopyButton, {
186
+ value: value
187
+ }) : null, 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", {
92
188
  key: index
93
189
  }, /*#__PURE__*/React.createElement(Entry, null, /*#__PURE__*/React.createElement(LabelButton, {
94
190
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
@@ -106,6 +202,7 @@ function Explorer({
106
202
  defaultExpanded,
107
203
  renderer = DefaultRenderer,
108
204
  pageSize = 100,
205
+ copyable = false,
109
206
  ...rest
110
207
  }) {
111
208
  const [expanded, setExpanded] = React.useState(Boolean(defaultExpanded));
@@ -147,18 +244,20 @@ function Explorer({
147
244
  handleEntry: entry => /*#__PURE__*/React.createElement(Explorer, _extends({
148
245
  key: entry.label,
149
246
  value: value,
150
- renderer: renderer
247
+ renderer: renderer,
248
+ copyable: copyable
151
249
  }, rest, entry)),
152
250
  type,
153
251
  subEntries,
154
252
  subEntryPages,
155
253
  value,
156
254
  expanded,
255
+ copyable,
157
256
  toggleExpanded,
158
257
  pageSize,
159
258
  ...rest
160
259
  });
161
260
  }
162
261
 
163
- export { DefaultRenderer, Entry, ExpandButton, Expander, Info, Label, LabelButton, SubEntries, Value, chunkArray, Explorer as default };
262
+ export { CopyButton, DefaultRenderer, Entry, ExpandButton, Expander, Info, Label, LabelButton, SubEntries, Value, chunkArray, Explorer as default };
164
263
  //# sourceMappingURL=Explorer.esm.js.map
@@ -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: (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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"}
1
+ {"version":3,"file":"Explorer.esm.js","sources":["../../src/Explorer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { displayValue, styled } from './utils'\nimport superjson from 'superjson'\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\ntype CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy'\n\nexport const CopyButton = ({ value }: { value: unknown }) => {\n const [copyState, setCopyState] = React.useState<CopyState>('NoCopy')\n\n return (\n <button\n onClick={\n copyState === 'NoCopy'\n ? () => {\n navigator.clipboard.writeText(superjson.stringify(value)).then(\n () => {\n setCopyState('SuccessCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n (err) => {\n console.error('Failed to copy: ', err)\n setCopyState('ErrorCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n )\n }\n : undefined\n }\n style={{\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n }}\n >\n {copyState === 'NoCopy' ? (\n <Copier />\n ) : copyState === 'SuccessCopy' ? (\n <CopiedCopier />\n ) : (\n <ErrorCopier />\n )}\n </button>\n )\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\nconst Copier = () => (\n <span\n aria-label=\"Copy object to clipboard\"\n title=\"Copy object to clipboard\"\n style={{\n paddingLeft: '1em',\n }}\n >\n <svg height=\"12\" viewBox=\"0 0 16 12\" width=\"10\">\n <path\n fill=\"currentColor\"\n d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z\"\n ></path>\n <path\n fill=\"currentColor\"\n d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z\"\n ></path>\n </svg>\n </span>\n)\n\nconst ErrorCopier = () => (\n <span\n aria-label=\"Failed copying to clipboard\"\n title=\"Failed copying to clipboard\"\n style={{\n paddingLeft: '1em',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg height=\"12\" viewBox=\"0 0 16 12\" width=\"10\" display=\"block\">\n <path\n fill=\"red\"\n d=\"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z\"\n ></path>\n </svg>\n <span\n style={{\n color: 'red',\n fontSize: '12px',\n paddingLeft: '4px',\n position: 'relative',\n top: '2px',\n }}\n >\n See console\n </span>\n </span>\n)\n\nconst CopiedCopier = () => (\n <span\n aria-label=\"Object copied to clipboard\"\n title=\"Object copied to clipboard\"\n style={{\n paddingLeft: '1em',\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n >\n <svg height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" display=\"block\">\n <path\n fill=\"green\"\n d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"\n ></path>\n </svg>\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 copyable: 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 copyable = 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 {copyable ? <CopyButton value={value} /> : null}\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 copyable?: 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 copyable = false,\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 copyable={copyable}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n copyable,\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","CopyButton","value","copyState","setCopyState","React","useState","navigator","clipboard","writeText","superjson","stringify","then","setTimeout","err","console","error","undefined","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","Copier","ErrorCopier","alignItems","position","top","CopiedCopier","verticalAlign","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","subEntries","subEntryPages","type","copyable","toggleExpanded","pageSize","expandedPages","setExpandedPages","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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"}
@@ -5,6 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
6
6
  var React = require('react');
7
7
  var utils = require('./utils.js');
8
+ var SuperJSON = require('superjson');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
11
 
9
12
  function _interopNamespace(e) {
10
13
  if (e && e.__esModule) return e;
@@ -25,6 +28,7 @@ function _interopNamespace(e) {
25
28
  }
26
29
 
27
30
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+ var SuperJSON__default = /*#__PURE__*/_interopDefaultLegacy(SuperJSON);
28
32
 
29
33
  const Entry = utils.styled('div', {
30
34
  fontFamily: 'Menlo, monospace',
@@ -49,6 +53,36 @@ const ExpandButton = utils.styled('button', {
49
53
  border: 'none',
50
54
  padding: 0
51
55
  });
56
+ const CopyButton = ({
57
+ value
58
+ }) => {
59
+ const [copyState, setCopyState] = React__namespace.useState('NoCopy');
60
+ return /*#__PURE__*/React__namespace.createElement("button", {
61
+ onClick: copyState === 'NoCopy' ? () => {
62
+ navigator.clipboard.writeText(SuperJSON__default["default"].stringify(value)).then(() => {
63
+ setCopyState('SuccessCopy');
64
+ setTimeout(() => {
65
+ setCopyState('NoCopy');
66
+ }, 1500);
67
+ }, err => {
68
+ console.error('Failed to copy: ', err);
69
+ setCopyState('ErrorCopy');
70
+ setTimeout(() => {
71
+ setCopyState('NoCopy');
72
+ }, 1500);
73
+ });
74
+ } : undefined,
75
+ style: {
76
+ cursor: 'pointer',
77
+ color: 'inherit',
78
+ font: 'inherit',
79
+ outline: 'inherit',
80
+ background: 'transparent',
81
+ border: 'none',
82
+ padding: 0
83
+ }
84
+ }, copyState === 'NoCopy' ? /*#__PURE__*/React__namespace.createElement(Copier, null) : copyState === 'SuccessCopy' ? /*#__PURE__*/React__namespace.createElement(CopiedCopier, null) : /*#__PURE__*/React__namespace.createElement(ErrorCopier, null));
85
+ };
52
86
  const Value = utils.styled('span', (_props, theme) => ({
53
87
  color: theme.danger
54
88
  }));
@@ -73,6 +107,68 @@ const Expander = ({
73
107
  }
74
108
  }, "\u25B6");
75
109
 
110
+ const Copier = () => /*#__PURE__*/React__namespace.createElement("span", {
111
+ "aria-label": "Copy object to clipboard",
112
+ title: "Copy object to clipboard",
113
+ style: {
114
+ paddingLeft: '1em'
115
+ }
116
+ }, /*#__PURE__*/React__namespace.createElement("svg", {
117
+ height: "12",
118
+ viewBox: "0 0 16 12",
119
+ width: "10"
120
+ }, /*#__PURE__*/React__namespace.createElement("path", {
121
+ fill: "currentColor",
122
+ d: "M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"
123
+ }), /*#__PURE__*/React__namespace.createElement("path", {
124
+ fill: "currentColor",
125
+ d: "M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"
126
+ })));
127
+
128
+ const ErrorCopier = () => /*#__PURE__*/React__namespace.createElement("span", {
129
+ "aria-label": "Failed copying to clipboard",
130
+ title: "Failed copying to clipboard",
131
+ style: {
132
+ paddingLeft: '1em',
133
+ display: 'flex',
134
+ alignItems: 'center'
135
+ }
136
+ }, /*#__PURE__*/React__namespace.createElement("svg", {
137
+ height: "12",
138
+ viewBox: "0 0 16 12",
139
+ width: "10",
140
+ display: "block"
141
+ }, /*#__PURE__*/React__namespace.createElement("path", {
142
+ fill: "red",
143
+ d: "M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"
144
+ })), /*#__PURE__*/React__namespace.createElement("span", {
145
+ style: {
146
+ color: 'red',
147
+ fontSize: '12px',
148
+ paddingLeft: '4px',
149
+ position: 'relative',
150
+ top: '2px'
151
+ }
152
+ }, "See console"));
153
+
154
+ const CopiedCopier = () => /*#__PURE__*/React__namespace.createElement("span", {
155
+ "aria-label": "Object copied to clipboard",
156
+ title: "Object copied to clipboard",
157
+ style: {
158
+ paddingLeft: '1em',
159
+ display: 'inline-block',
160
+ verticalAlign: 'middle'
161
+ }
162
+ }, /*#__PURE__*/React__namespace.createElement("svg", {
163
+ height: "16",
164
+ viewBox: "0 0 16 16",
165
+ width: "16",
166
+ display: "block"
167
+ }, /*#__PURE__*/React__namespace.createElement("path", {
168
+ fill: "green",
169
+ d: "M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"
170
+ })));
171
+
76
172
  /**
77
173
  * Chunk elements in the array by size
78
174
  *
@@ -102,6 +198,7 @@ const DefaultRenderer = ({
102
198
  subEntryPages = [],
103
199
  type,
104
200
  expanded = false,
201
+ copyable = false,
105
202
  toggleExpanded,
106
203
  pageSize
107
204
  }) => {
@@ -112,7 +209,9 @@ const DefaultRenderer = ({
112
209
  onClick: () => toggleExpanded()
113
210
  }, /*#__PURE__*/React__namespace.createElement(Expander, {
114
211
  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(handleEntry)) : /*#__PURE__*/React__namespace.createElement(SubEntries, null, subEntryPages.map((entries, index) => /*#__PURE__*/React__namespace.createElement("div", {
212
+ }), " ", label, ' ', /*#__PURE__*/React__namespace.createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), copyable ? /*#__PURE__*/React__namespace.createElement(CopyButton, {
213
+ value: value
214
+ }) : null, 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", {
116
215
  key: index
117
216
  }, /*#__PURE__*/React__namespace.createElement(Entry, null, /*#__PURE__*/React__namespace.createElement(LabelButton, {
118
217
  onClick: () => setExpandedPages(old => old.includes(index) ? old.filter(d => d !== index) : [...old, index])
@@ -130,6 +229,7 @@ function Explorer({
130
229
  defaultExpanded,
131
230
  renderer = DefaultRenderer,
132
231
  pageSize = 100,
232
+ copyable = false,
133
233
  ...rest
134
234
  }) {
135
235
  const [expanded, setExpanded] = React__namespace.useState(Boolean(defaultExpanded));
@@ -171,19 +271,22 @@ function Explorer({
171
271
  handleEntry: entry => /*#__PURE__*/React__namespace.createElement(Explorer, _rollupPluginBabelHelpers["extends"]({
172
272
  key: entry.label,
173
273
  value: value,
174
- renderer: renderer
274
+ renderer: renderer,
275
+ copyable: copyable
175
276
  }, rest, entry)),
176
277
  type,
177
278
  subEntries,
178
279
  subEntryPages,
179
280
  value,
180
281
  expanded,
282
+ copyable,
181
283
  toggleExpanded,
182
284
  pageSize,
183
285
  ...rest
184
286
  });
185
287
  }
186
288
 
289
+ exports.CopyButton = CopyButton;
187
290
  exports.DefaultRenderer = DefaultRenderer;
188
291
  exports.Entry = Entry;
189
292
  exports.ExpandButton = ExpandButton;
@@ -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: (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":"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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'\nimport superjson from 'superjson'\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\ntype CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy'\n\nexport const CopyButton = ({ value }: { value: unknown }) => {\n const [copyState, setCopyState] = React.useState<CopyState>('NoCopy')\n\n return (\n <button\n onClick={\n copyState === 'NoCopy'\n ? () => {\n navigator.clipboard.writeText(superjson.stringify(value)).then(\n () => {\n setCopyState('SuccessCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n (err) => {\n console.error('Failed to copy: ', err)\n setCopyState('ErrorCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n )\n }\n : undefined\n }\n style={{\n cursor: 'pointer',\n color: 'inherit',\n font: 'inherit',\n outline: 'inherit',\n background: 'transparent',\n border: 'none',\n padding: 0,\n }}\n >\n {copyState === 'NoCopy' ? (\n <Copier />\n ) : copyState === 'SuccessCopy' ? (\n <CopiedCopier />\n ) : (\n <ErrorCopier />\n )}\n </button>\n )\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\nconst Copier = () => (\n <span\n aria-label=\"Copy object to clipboard\"\n title=\"Copy object to clipboard\"\n style={{\n paddingLeft: '1em',\n }}\n >\n <svg height=\"12\" viewBox=\"0 0 16 12\" width=\"10\">\n <path\n fill=\"currentColor\"\n d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z\"\n ></path>\n <path\n fill=\"currentColor\"\n d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z\"\n ></path>\n </svg>\n </span>\n)\n\nconst ErrorCopier = () => (\n <span\n aria-label=\"Failed copying to clipboard\"\n title=\"Failed copying to clipboard\"\n style={{\n paddingLeft: '1em',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg height=\"12\" viewBox=\"0 0 16 12\" width=\"10\" display=\"block\">\n <path\n fill=\"red\"\n d=\"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z\"\n ></path>\n </svg>\n <span\n style={{\n color: 'red',\n fontSize: '12px',\n paddingLeft: '4px',\n position: 'relative',\n top: '2px',\n }}\n >\n See console\n </span>\n </span>\n)\n\nconst CopiedCopier = () => (\n <span\n aria-label=\"Object copied to clipboard\"\n title=\"Object copied to clipboard\"\n style={{\n paddingLeft: '1em',\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n >\n <svg height=\"16\" viewBox=\"0 0 16 16\" width=\"16\" display=\"block\">\n <path\n fill=\"green\"\n d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"\n ></path>\n </svg>\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 copyable: 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 copyable = 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 {copyable ? <CopyButton value={value} /> : null}\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 copyable?: 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 copyable = false,\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 copyable={copyable}\n {...rest}\n {...entry}\n />\n ),\n type,\n subEntries,\n subEntryPages,\n value,\n expanded,\n copyable,\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","CopyButton","value","copyState","setCopyState","React","useState","navigator","clipboard","writeText","superjson","stringify","then","setTimeout","err","console","error","undefined","Value","_props","theme","danger","SubEntries","marginLeft","paddingLeft","borderLeft","Info","Expander","expanded","style","display","transition","transform","Copier","ErrorCopier","alignItems","position","top","CopiedCopier","verticalAlign","chunkArray","array","size","i","result","length","push","slice","DefaultRenderer","handleEntry","label","subEntries","subEntryPages","type","copyable","toggleExpanded","pageSize","expandedPages","setExpandedPages","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":"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"}