UNPKG

ngx-json-treeview

Version:

A simple Angular component to display object data in an expandable JSON tree view.

172 lines (125 loc) 5.52 kB
# ngx-json-treeview A simple Angular component to display object data in an expandable JSON tree view. <img width="751" alt="image" src="https://github.com/user-attachments/assets/6025f020-727e-4098-bcb9-146fb2b66c0a" /> ## Key Features - Display JSON objects and arrays in a collapsible tree structure. - Customize styling with CSS variables. - Clickable value nodes for custom interactions. - Control over initial expansion depth. - Keyboard navigable ## Demo [https://stackblitz.com/edit/ngx-json-treeview](https://stackblitz.com/edit/ngx-json-treeview?file=src%2Fapp%2Fapp.component.ts) ## Install ```bash npm install ngx-json-treeview ``` ## Usage ### Basic Setup By default, JSON objects are rendered fully expanded: ```html <ngx-json-treeview [json]="someObject" /> ``` ### Controlling Field Expansion To render the JSON with all nodes initially collapsed: ```html <ngx-json-treeview [json]="someObject" [expanded]="false" /> ``` Or with nodes expanded up to a certain depth: ```html <ngx-json-treeview [json]="someObject" [depth]="1" /> ``` ### Clickable Values You can make values in the JSON tree clickable to trigger custom actions. For convenience, a default click handler is provided for URLs (which will be opened in a new tab, when clicked.) 1. **Enable Clickable Values**: Set the `enableClickableValues` input to `true`. This also enables the default click handler(s) automatically. ```html <ngx-json-treeview [json]="someObject" [enableClickableValues]="true" /> ``` 2. **Provide Click Handlers**: Provide your own custom behaviors by passing an array of `ValueClickHandler` objects to the `valueClickHandlers` input. A `ValueClickHandler` has two properties: - `canHandle`: A function that returns `true` if the handler should apply to a given value. - `handler`: The function to execute when the value is clicked. Only the _first_ handler in the array where `canHandle` returns `true` will be executed. #### Example: Copy to Clipboard Here's how you could implement a handler that copies a string value to the clipboard when clicked. **In your component's TypeScript file:** ```typescript import { Segment, ValueClickHandler } from 'ngx-json-treeview'; // Define a custom click handler copyToClipboardHandler: ValueClickHandler = { canHandle: (segment: Segment) => typeof segment.value === 'string', handler: (segment: Segment) => { navigator.clipboard.writeText(segment.value).then(() => { alert(`Copied "${segment.value}" to clipboard!`); }); }, }; customValueClickHandlers: ValueClickHandler[] = [ this.copyToClipboardHandler, // Add addt'l custom handlers here ]; ``` **In your component's HTML file:** <!-- prettier-ignore --> ```html <ngx-json-treeview [json]="someObject" [enableClickableValues]="true" [valueClickhandlers]="customValueClickHandlers" /> ``` In this example, any string value will be clickable. When clicked, it will be copied to the clipboard. #### Combining Handlers Custom handlers can be combined alongside the built-in ones (such as the URL handler). To apply all of the default built-in handlers, you can import the `VALUE_CLICK_HANDLERS` array and spread it into your `customValueClickHandlers` array. Alternatively, handlers be the imported individually via `ValueClickHandlers`. ```typescript import { ValueClickHandlers, VALUE_CLICK_HANDLERS, } from 'ngx-json-treeview'; customValueClickHandlers: ValueClickHandler[] = [ ...VALUE_CLICK_HANDLERS, this.copyToClipboardHandler, ]; // OR customValueClickHandlers: ValueClickHandler[] = [ ValueClickHandlers.followLinkHandler, this.copyToClipboardHandler, ]; ``` In this example, any string that matches a URL will trigger the `followLinkHandler`, and all other strings will trigger the `copyToClipboardHandler`. ## Theming You can customize the appearance of the tree view using these CSS variables: | Variable | Description | | -------------------------- | -------------------------------------- | | `--ngx-json-font-family` | Font family for the tree view. | | `--ngx-json-font-size` | Font size for the tree view. | | `--ngx-json-focus-color` | Outline color for focused elements. | | `--ngx-json-toggler` | Color of the expand/collapse toggler. | | `--ngx-json-key` | Color of object keys. | | `--ngx-json-label` | Color of array indices. | | `--ngx-json-value` | Default color for primitive values. | | `--ngx-json-string` | Color for string values. | | `--ngx-json-number` | Color for number values. | | `--ngx-json-boolean` | Color for boolean values. | | `--ngx-json-date` | Color for date values. | | `--ngx-json-function` | Color for function values. | | `--ngx-json-null` | Text color for null values. | | `--ngx-json-null-bg` | Background color for null values. | | `--ngx-json-undefined` | Text color for undefined values. | | `--ngx-json-undefined-key` | Key color for undefined values. | | `--ngx-json-undefined-bg` | Background color for undefined values. | | `--ngx-json-punctuation` | Color of braces, brackets, and commas. | ## Thanks ngx-json-treeview is originally based on [ngx-json-viewer](https://github.com/hivivo/ngx-json-viewer) by Vivo Xu and contributors.