json-tree-view-vue3
Version:
JSON tree rendering Vue3 component
124 lines (90 loc) • 4.81 kB
Markdown
[](https://www.npmjs.com/package/json-tree-view-vue3)
[](https://github.com/seijikohara/json-tree-view-vue3/actions/workflows/npm-ci.yml)
[](https://github.com/seijikohara/json-tree-view-vue3/actions/workflows/playwright.yml)
[](https://www.typescriptlang.org/)
[](https://bundlephobia.com/package/json-tree-view-vue3)
[](https://opensource.org/licenses/MIT)
A Vue 3 component for rendering JSON data as an interactive, collapsible tree structure.
Inspired by [vue-json-component](https://www.npmjs.com/package/vue-json-component) and [vue-json-tree-view](https://www.npmjs.com/package/vue-json-tree-view), this library provides native Vue 3 and TypeScript support.
```bash
npm install json-tree-view-vue3
```
```vue
<script setup lang="ts">
import { JsonTreeView } from "json-tree-view-vue3";
import "json-tree-view-vue3/dist/style.css";
const json = `{"string":"text","number":123,"boolean":true,"null":null,"array":["A","B","C"],"object":{"prop1":"value1","nestedObject":{"prop2":"value2"}}}`;
</script>
<template>
<JsonTreeView :json="json" :maxDepth="3" />
</template>
```
<img width="296" alt="JSON tree view example" src="https://github.com/seijikohara/json-tree-view-vue3/assets/9543980/0d4d74bc-367d-4fd1-a47a-edfb857a6478">
| Property | Type | Required | Default | Description |
|---------------|----------|----------|-----------|------------------------------------------------------------------|
| `json` | `string` | Yes | - | A valid JSON string to be rendered as a tree structure |
| `rootKey` | `string` | No | `"/"` | The label displayed for the root node of the tree |
| `maxDepth` | `number` | No | `1` | The initial depth level to which the tree will be expanded |
| `colorScheme` | `string` | No | `"light"` | Visual theme of the component. Accepts `"light"` or `"dark"` |
Emitted when a user selects a value in the tree.
**Payload Type:**
```typescript
{
key: string; // The key of the selected node
value: PrimitiveTypes; // The value of the selected node (string, number, boolean, or null)
path: string; // The full path to the selected node
}
```
The component uses CSS custom properties (variables) for theming, allowing you to customize colors and dimensions to match your application's design system.
### Available CSS Variables
```css
/* Color palette */
--jtv-key-color: oklch(0.55 0.15 240); /* Object/Array key color */
--jtv-valueKey-color: oklch(0.25 0.05 210); /* Primitive value key color */
--jtv-string-color: oklch(0.6 0.12 230); /* String value color */
--jtv-number-color: oklch(0.65 0.1 180); /* Number value color */
--jtv-boolean-color: oklch(0.55 0.15 40); /* Boolean value color */
--jtv-null-color: oklch(0.55 0.12 280); /* Null value color */
/* UI colors */
--jtv-arrow-color: oklch(0.3 0 0); /* Expand/collapse arrow color */
--jtv-hover-color: oklch(0 0 0 / 0.1); /* Hover background color */
/* Dimensions */
--jtv-arrow-size: 6px; /* Size of the expand/collapse arrow */
--jtv-spacing-unit: 4px; /* Base spacing unit */
```
You can override these variables to customize the appearance:
```vue
<style>
.json-tree-view {
/* Custom color scheme */
--jtv-key-color:
--jtv-valueKey-color:
--jtv-string-color:
--jtv-number-color:
--jtv-boolean-color:
--jtv-null-color:
/* Custom dimensions */
--jtv-arrow-size: 8px;
--jtv-spacing-unit: 6px;
}
</style>
<template>
<div class="json-tree-view">
<JsonTreeView :json="json" />
</div>
</template>
```
The component includes built-in dark mode support through the `colorScheme` prop. Alternatively, you can customize the dark theme by overriding the CSS variables within your own dark mode class.
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.