UNPKG

@microlink/react-json-view

Version:

Interactive react component for displaying javascript arrays and JSON objects.

313 lines (303 loc) 7.67 kB
import * as React from 'react' export interface ReactJsonViewProps { /** * This property contains your input JSON. * * Required. */ src: object /** * Contains the name of your root node. Use null or false for no name. * * Default: "root" */ name?: React.JSX.Element | string | null | false /** * RJV supports base-16 themes. Check out the list of supported themes in the demo. * A custom "rjv-default" theme applies by default. * * Default: "rjv-default" */ theme?: ThemeKeys | ThemeObject /** * Style attributes for react-json-view container. * Explicit style attributes will override attributes provided by a theme. * * Default: "rjv-default" */ style?: React.CSSProperties /** * Style of expand/collapse icons. Accepted values are "circle", triangle" or "square". * * Default: {} */ iconStyle?: 'circle' | 'triangle' | 'square' /** * Set the indent-width for nested objects. * * Default: 4 */ indentWidth?: number /** * When set to true, all nodes will be collapsed by default. * Use an integer value to collapse at a particular depth. * * Default: false */ collapsed?: boolean | number /** * When an integer value is assigned, strings will be cut off at that length. * Collapsed strings are followed by an ellipsis. * String content can be expanded and collapsed by clicking on the string value. * * Default: false */ collapseStringsAfterLength?: number | false /** * Callback function to provide control over what objects and arrays should be collapsed by default. * An object is passed to the callback containing name, src, type ("array" or "object") and namespace. * * Default: false */ shouldCollapse?: false | ((field: CollapsedFieldProps) => boolean) /** * When an integer value is assigned, arrays will be displayed in groups by count of the value. * Groups are displayed with brakcet notation and can be expanded and collapsed by clickong on the brackets. * * Default: 100 */ groupArraysAfterLength?: number /** * When prop is not false, the user can copy objects and arrays to clipboard by clicking on the clipboard icon. * Copy callbacks are supported. * * Default: true */ enableClipboard?: boolean | ((copy: OnCopyProps) => void) /** * When set to true, objects and arrays are labeled with size. * * Default: true */ displayObjectSize?: boolean /** * When set to true, data type labels prefix values. * * Default: true */ displayDataTypes?: boolean /** * When set to true, the index of the elements prefix values * * Default: true */ displayArrayKey?: boolean /** * set to false to remove quotes from keys (eg. "name": vs. name:) * * Default: true */ quotesOnKeys?: boolean /** * When a callback function is passed in, edit functionality is enabled. * The callback is invoked before edits are completed. Returning false * from onEdit will prevent the change from being made. see: onEdit docs. * * Default: false */ onEdit?: ((edit: InteractionProps) => false | any) | false /** * When a callback function is passed in, add functionality is enabled. * The callback is invoked before additions are completed. * Returning false from onAdd will prevent the change from being made. see: onAdd docs * * Default: false */ onAdd?: ((add: InteractionProps) => false | any) | false /** * When a callback function is passed in, delete functionality is enabled. * The callback is invoked before deletions are completed. * Returning false from onDelete will prevent the change from being made. see: onDelete docs * * Default: false */ onDelete?: ((del: InteractionProps) => false | any) | false /** * When a function is passed in, clicking a value triggers the onSelect method to be called. * * Default: false */ onSelect?: ((select: OnSelectProps) => void) | false /** * Custom message for validation failures to onEdit, onAdd, or onDelete callbacks. * * Default: "Validation Error" */ validationMessage?: string /** * Set to true to sort object keys. * * Default: false */ sortKeys?: boolean /** * Set to a value to be used as defaultValue when adding new key to json * * Default: null */ defaultValue?: TypeDefaultValue | TypeDefaultValue[] | null /** * Whether to select the textarea contents on edit * * Default: false */ selectOnFocus?: boolean /** * The key modifier to be combined with a click on JSON values to edit them * * Default: (e) => e.metaKey || e.ctrlKey */ keyModifier?: (event: Event, type: 'edit' | 'submit') => boolean /** * Set to true to escape strings sequences such as \n, \t, \r, \f * * Default: true */ escapeStrings?: boolean } export interface OnCopyProps { /** * The JSON tree source object */ src: object /** * List of keys. */ namespace: Array<string | null> /** * The last key in the namespace array. */ name: string | null } export interface CollapsedFieldProps { /** * The name of the entry. */ name: string | null /** * The corresponding JSON subtree. */ src: object /** * The type of src. Can only be "array" or "object". */ type: 'array' | 'object' /** * The scopes above the current entry. */ namespace: Array<string | null> } export interface InteractionProps { /** * The updated subtree of the JSON tree. */ updated_src: object /** * The existing subtree of the JSON tree. */ existing_src: object /** * The key of the entry that is interacted with. */ name: string | null /** * List of keys. */ namespace: Array<string | null> /** * The original value of the entry that is interacted with. */ existing_value: object | string | number | boolean | null /** * The updated value of the entry that is interacted with. */ new_value?: object | string | number | boolean | null } export interface OnSelectProps { /** * The name of the currently selected entry. */ name: string | null /** * The value of the currently selected entry. */ value: object | string | number | boolean | null /** * The type of the value. For "number" type, it will be replaced with the more * accurate types: "float", "integer", or "nan". */ type: string /** * List of keys representing the scopes above the selected entry. */ namespace: Array<string | null> } export type TypeDefaultValue = string | number | boolean | object export interface ThemeObject { base00: string base01: string base02: string base03: string base04: string base05: string base06: string base07: string base08: string base09: string base0A: string base0B: string base0C: string base0D: string base0E: string base0F: string } export type ThemeKeys = | 'apathy' | 'apathy:inverted' | 'ashes' | 'bespin' | 'brewer' | 'bright:inverted' | 'bright' | 'chalk' | 'codeschool' | 'colors' | 'eighties' | 'embers' | 'flat' | 'google' | 'grayscale' | 'grayscale:inverted' | 'greenscreen' | 'harmonic' | 'hopscotch' | 'isotope' | 'marrakesh' | 'mocha' | 'monokai' | 'ocean' | 'paraiso' | 'pop' | 'railscasts' | 'rjv-default' | 'shapeshifter' | 'shapeshifter:inverted' | 'solarized' | 'summerfruit' | 'summerfruit:inverted' | 'threezerotwofour' | 'tomorrow' | 'tube' | 'twilight' declare const ReactJson: React.ComponentType<ReactJsonViewProps> export default ReactJson