Spaces:
Runtime error
Runtime error
File size: 7,720 Bytes
b5ea024 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# svelte-json-view
> View JSON data prettily.
Display JSON data in a tree-like expandable view. Use as a Svelte component or in Vanilla JS.
Here's a
[demo](https://zerodevx.github.io/json-pretty-print/H4sIAAAAAAAAA7WaXXOkNhaG7_MrtK692FQaAgIE8tU4tmfjxJ7MepykUklqS4Do1g4NHT5sd1L73_foC2g3bXs83krF0wLpICHpOe854tcvEPoL_kfo6N8iPzpGR8SLKWFBESakIJnvJYkfZn4YHS10NVHl_B4qeqa87E27mMShz1InS7PQCUmWOkkUJg4hHityFjCSpoON9iTrxC2Hdl3Tc3M1ZSWrMnnx6O94QXDiJtS22Iis6xt1b9V1m-Ovv96ULOOrusxd0X0d4PsA27psKesFoSnyLT-ty7qRbdOmvqtsvYqtlcHLuqkY-lDWbLi15DBK1aLga1Zyez2r1xtWbeWN9z9c31ycntg7UE2U8noprbXS2JtN3XQiYy60Gsaxqiv10K989A_qh1-i0KMOjnAy9D7PG962so4fxOikgr6d1n3TLdB5Kf5kt6Is-QK943foit-LrF4g6sX-0Dyt-042Pu9QLofNEavEGq3ZEgyxUvzRM9SKqkObphY5hx9rISuIHG1YIxi8ZsR7aIu4vMxysRGtyES1dNHJmnfTK6jol9ACQX85-qMXKOctb3qwCYXWRdd80_CVepeiQ1lfbpjtlO6PNCdtqkfVRQFWGRJNLyvUZQmN-rJk66xGonJ_a34bJqjhS9F2vOFq7WHPJ44XOV5w4yXHPj3GEXLgl-fZ-iXrRNfn8tXD2nSjIMTUt_fqamlvJp4bJ4TG5lbHlnImflUl9djJgIxtuZJkL8diBlPUr8eyHspYZvmkbr1e13k9qSxn40iVfje9KBoBj5x25C_zr9xL-bgZd5b1DUtFt2LobVlv8yNz_7-LAxb8GQuXNXSboZ9XouNPGsBzBmA_MzlN6BtYaCXfDlZ2xrdsOO9gOckm3_KyhCU92ZN_Q7_UPVqxW44o6quGsxytYcXBNm9dO78Fu61hSvjbphdq-bPNplSdVh2eR1zBo4BgwlOeQgGzh4izC8QizkvDIgtI4NACOBcmReSwNA6cOPPSPCe0oJjMIK5gZTvHuGARhoE77vwXMM728EnG_SSfCrMwh7iDgLs8ub748WqPcLfSVsoV4EpARr8-TLgQS8IRJ0jCYI5wfoROyhRMNyVH1zXLF-g7lvXrlC3Q-543XY2uFeN8j5A9xsEq4Wt0yyUoFNrEBkCRiVzkEkIKc2pvGvZM7ilkAXn0XkWcDexy0akGFSBM_7Fg4m03_r7nTQa7oxN1hUroUQNW9LMUzFr5EAtUF11sWrjP-o4PlXeYJ01b1KkK8Fg7Ii76FhghCW2rtKqfJ6aCQaodyrRnA9L1C6izjPGMQdt3dQuuN7cENxhCHV-D1xq4Di_WRVeaxPxev43JS9RG9ainboFNh6aA5qJzeW3wKvKP5L4Z2s7QwWPBlc56ANMX3QRek5rup5yBjx0fnEF8HITHHj3sDLAbhDSi0YwrcGjgejQmyQFfYKZnJLd-d2OZT1yCkPM_FqfAlwN7WPEV8P9dvUXfsqaB-ejq6kX8Py2ZgNl4z16I_7clX8vl8DPQonk2-kdUTcjve6-Lfs7jnLEgoRxHOY3zh-jHD9CfxHHggx52siLznBBj7qSpzx3ix3maFoz7RTSD_gPqNlh41Aeh8Rnktyt2h_xlzx-C_7K-480WFOR6I5fBs-F_8uHmx-uLOXkr7WXa3JsNePceCHPQASTY_xJFIHEDL_JnHAAFpXYjN73VuBfNnai0vP2ONy3fSnk78R0W_WdWaXI2CMtR0g4_JDB2RJtSphaV2n8YzoDolQ4D8D-9mdVVy0EzG49hoAY4kyXlYCymDQZNSd2yWlc_QNfOB8hNa3LLOQNKC8TKYNr6hH23I_2Tobpm6-BfFCsrwQC-H_SjJ4S2nYYLgx3bUrmpdgQ89FldUiN00Q8G7GZ0le0JB2g_ymXsSZHu-zdedIzxsRce5nLsuzQMYOLnwIxBNWGPEhvhPSTzjpyWccZYtK9qKsBhgrOOwzqe53M1bBt1Q475NfgMU7IsOWwidNJUsNFfptA5y1boJ3DJsNhfJtG3FVg47asK-rNi609Q6FOwvBDVKavgvydYndNIanXOCpLk_kRiG1bbNWJZzTgpYo9wJwhi4oR5gh1Ki8AJ0zyJIi-Nw5g9n9X-AnuRi-PPYLVNlTzFanC03RZ90zdV-wmJiIuz83_-sMfpjbSVSlNvgITL-rBEpxEQmmAHe8lcEiKKI9ARVVZnH9GHTq6DBToBf55zbjj9S918BEr7sbdH6fdWfhoEap6YQj7iTYX8LrrUGBmyCBZMokJKF5m_Wb8ROQMIDhoTFptRrmq_gzTOd6kG__Y2K3Ey4aCinGnaihHC77SS7wY6g_o1zHxcelLHi-FV3vge8O0Ye4_kIRLiEprQmM4xLqIuhVkZIrzHGCcmgJo6iMnVflI7n7_-emg7XTFwjqesuZ3Ivk_B2tlWpwz-w0A_vghrsIk-gohs6vpj-2ykTfbfhGfk-TiDxczuYG8026fkZx4QkgVB5McBjTLvIdKsZ7NIi_OcFTEBmhVJ7IQsBqRhQh1KAhrmBQ2jmM4g7VDmAS9I7LkR_gymzWUe5Cvdyzx8zyoOEQD_OMO0A0Q7PX93c3F6vse0j2DqTlp6I92dyPhhqCnZSX0nID6egRoJMTrjrAEyVFZ5vq2bFDRTfQdYu8jZChZEGCT7TLtQ6UmtrLQGmgDJoMTKNw2cn7jRl1Iq6WwrsM-G3GPj27rsN_CDm0oD_vJB0I7ReGtCYmAjSOAhR6AAOQAUwGWQqTWttquzB1cqA6sAqFSgzojcZ3zTcSC2MFQeGGvlniKjRrghttSlbEw16HzMTq6lm-ho5QNA5trEwaTimB9RUvdx0kaOFzqY3vj4GFNA7GHShoEbxoBmm9WdgjbGrhdiEhzK-A4v5HB690H2Vw1_UttO73jJvqkJh18p53tW98uStehdzcsXkRdIuGTomlUw25vVi9D7PetWEGnBrr8W9fPhO3Jiwt74_8DePMQsioqEp4SlBU0estdG1pa92M95SnHm5HmKndBjvkOTkDhZ5kUkIrGfRMknsDdY-J7vks-J_e1afTLrC7qNb9HNtv2EyP-DpO_1xekefVfSWCdtvWklfxuRHQ77Y6JFZYDJXNgfxRid33N5MmA15RWgGFZEC5gDgdmIP-uKAYETuk_gd4BR_jCuN0DWzFKBsEkcmhvmwEmp0DHks1G7Cm8VBe8tGXdCbQtrI111K3niZZTrqblvQ2jrAAx3p0-0fJOtpU9QpqCpOgiz-tME7FONrLunUt0TAavHO4bx3OQt1IhsrwfHMnaUj8lg1RObPDZ-RBkc_ZH1ATtZ7Snx1SuejPJJkUwdn954-Djwj8PgMLoD7EaeH8-R2_djF9MEk4PoBof2QN6ORf2yDp_RmYk8TH3evcohHaASnDUAu4E18SJkX7GmXTEQr6B4n5bbB47pGLoCmjw_STshy8uk8rMi_5CEJA-LkKZREsZR_BDV5AGqk8IjGfaIk7I0csKQZk6SF7nDQ5_JbxNAAhSf8g2Ch-URwGufz81E_ld1nW_Rt7AG6zu2fTarv7m4vLw6P9tD9VqaWxlrb1JYuWueH4a1FwOsYwhb49kMQBhRdAIDL8XwJQLEdk1rv0Som24lr9SlkMjGkZfsIft89lBKa1NNQHsQpTlkdLQBiwrCh7wmEPpMJnEBniqZO3wioK1Jcg0ZBiVZx28IND-1cYCspJmpOmaMBwW8k6zY8QZa4Q6nfhrQoPMHXu50eDjPm6pbVWN3lOOTBwob9GvB_mHyTCmpDe8HjCs4a3-gHjWcH1q7LrrRD5RxiIS-DgdsvSFq2HWsrRgSMS76F7QaPxNR8Yd6oA4j1ERq_zPrPc3nJ5NBPO4nYgf2sgd-wj_2yXH0SL7YiWOZE_Y8GzlPPUUkz1rCgNpDnX2N_wjmJxmS_eSx9Nljyayz8YJe06_hJ74XDbyZCp3DYqy7p1O9c47iWiyXLegtVj3nQHDOUZyuOIhaBqDqW_5sX7ELt4m7iF7kLr74_X8qHdwptSYAAA/).
## Usage
Install the package:
```
$ npm i @zerodevx/svelte-json-view
```
### Svelte
If you're using this in a Svelte app:
```html
<script>
import { JsonView } from '@zerodevx/svelte-json-view'
const json = { foo: 'bar' }
</script>
<JsonView {json} />
```
### Vanilla JS
For other applications with a bundler:
```js
// Import the compiled code from `/dist`
import { JsonView } from '@zerodevx/svelte-json-view/dist'
const app = new JsonView({
target: document.body // node to render into
})
app.$set({
json: { foo: 'bar' }, // object to prettify
... // any other props
})
```
Or load via CDN:
```html
<head>
...
<!-- Load `JsonView` from CDN -->
<script defer src="https://cdn.jsdelivr.net/npm/@zerodevx/svelte-json-view@1"></script>
<!-- Register the view -->
<script type="module">
const app = new JsonView({
target: document.querySelector('#target'), // node to render into
props: {
json: { foo: 'bar' }, // object to prettify
... // any other props
}
})
</script>
</head>
<body>
<div id="target"></div>
</body>
```
## Theming
In general, use CSS variables.
| Name | Default | Description |
| ---------------------------- | ------------ | --------------------------------------------- |
| --jsonPaddingLeft | 1rem | Amount of left padding to apply at each depth |
| --jsonBorderLeft | 1px dotted | Style applied to left border for each depth |
| --jsonBracketColor | currentcolor | Color for brackets `[`, `{`, `}` and `]` |
| --jsonBracketHoverBackground | #e5e7eb | Hover background for brackets |
| --jsonSeparatorColor | currentcolor | Color for separators `:` and `,` |
| --jsonKeyColor | currentcolor | Color for keys |
| --jsonValColor | #9ca3af | Default color for values |
| --jsonValStringColor | #059669 | Color for `string` values |
| --jsonValNumberColor | #d97706 | Color for `number` values |
| --jsonValBooleanColor | #2563eb | Color for `boolean` values |
It's recommended to wrap the component to apply your own font family (a monospaced font is
recommended) and also to apply custom CSS var overrides.
<!-- prettier-ignore -->
```html
<div class="wrap">
<JsonView {json} />
</div>
<style>
.wrap {
font-family: monospace;
font-size: 14px;
--jsonBorderLeft: 2px dashed red;
--jsonValColor: blue;
...
}
</style>
```
## Props
| Name | Type | Default | Description |
| ----- | ------ | --------- | -------------------------------- |
| json | Object | undefined | Un-stringified object to display |
| depth | Number | Infinity | Initial expansion depth |
## Development
Library is packaged via [SvelteKit](https://kit.svelte.dev/docs/packaging). Standard Github
[contribution workflow](https://docs.github.com/en/get-started/quickstart/contributing-to-projects)
applies.
### Tests
End-to-end testing via [Playwright](https://github.com/microsoft/playwright). To run tests
headlessly:
```
$ npm run test
```
## Changelog
Please refer to the [releases](https://github.com/zerodevx/svelte-json-view/releases) page.
## License
ISC
|