diff --git a/code/addons/docs/src/blocks/controls/Object.tsx b/code/addons/docs/src/blocks/controls/Object.tsx index a817cd1e368a..dfaf5677ef62 100644 --- a/code/addons/docs/src/blocks/controls/Object.tsx +++ b/code/addons/docs/src/blocks/controls/Object.tsx @@ -1,4 +1,4 @@ -import type { ComponentProps, FC, FocusEvent, SyntheticEvent } from 'react'; +import type { FC, FocusEvent, SyntheticEvent } from 'react'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Button, Form, ToggleButton } from 'storybook/internal/components'; @@ -6,7 +6,7 @@ import { Button, Form, ToggleButton } from 'storybook/internal/components'; import { AddIcon, SubtractIcon } from '@storybook/icons'; import { cloneDeep } from 'es-toolkit/object'; -import { type Theme, styled, useTheme } from 'storybook/theming'; +import { styled, useTheme } from 'storybook/theming'; import { getControlId, getControlSetterButtonId } from './helpers'; import { JsonTree } from './react-editable-json-tree'; @@ -14,8 +14,6 @@ import type { ControlProps, ObjectConfig, ObjectValue } from './types'; const { window: globalWindow } = globalThis; -type JsonTreeProps = ComponentProps; - const Wrapper = styled.div(({ theme }) => ({ position: 'relative', display: 'flex', @@ -39,8 +37,14 @@ const Wrapper = styled.div(({ theme }) => ({ alignItems: 'center', }, '.rejt-name': { + color: theme.color.secondary, lineHeight: '22px', }, + '.rejt-not-collapsed-list': { + listStyle: 'none', + margin: '0 0 0 1rem', + padding: 0, + }, '.rejt-not-collapsed-delimiter': { lineHeight: '22px', }, @@ -57,6 +61,9 @@ const Wrapper = styled.div(({ theme }) => ({ background: theme.base === 'light' ? theme.color.lighter : 'hsl(0 0 100 / 0.02)', borderColor: theme.appBorderColor, }, + '.rejt-collapsed-value': { + color: theme.color.defaultText, + }, })); const ButtonInline = styled.button<{ primary?: boolean }>(({ theme, primary }) => ({ @@ -155,23 +162,6 @@ const selectValue = (event: SyntheticEvent) => { export type ObjectProps = ControlProps & ObjectConfig; -const getCustomStyleFunction: (theme: Theme) => JsonTreeProps['getStyle'] = (theme) => () => ({ - name: { - color: theme.color.secondary, - }, - collapsed: { - color: theme.color.dark, - }, - ul: { - listStyle: 'none', - margin: '0 0 0 1rem', - padding: 0, - }, - li: { - outline: 0, - }, -}); - export const ObjectControl: FC = ({ name, value, onChange, argType }) => { const theme = useTheme(); const data = useMemo(() => value && cloneDeep(value), [value]); @@ -266,7 +256,6 @@ export const ObjectControl: FC = ({ name, value, onChange, argType data={data} rootName={name} onFullyUpdate={onChange} - getStyle={getCustomStyleFunction(theme)} cancelButtonElement={Cancel} addButtonElement={ diff --git a/code/addons/docs/src/blocks/controls/react-editable-json-tree/JsonNodeAccordion.tsx b/code/addons/docs/src/blocks/controls/react-editable-json-tree/JsonNodeAccordion.tsx index 75da2a484b41..19e29e8aad78 100644 --- a/code/addons/docs/src/blocks/controls/react-editable-json-tree/JsonNodeAccordion.tsx +++ b/code/addons/docs/src/blocks/controls/react-editable-json-tree/JsonNodeAccordion.tsx @@ -99,7 +99,7 @@ export function JsonNodeAccordion({ {name} : { renderCollapsed() { const { name, data, keyPath, deep } = this.state; - const { handleRemove, readOnly, getStyle, dataType, minusMenuElement } = this.props; - const { minus, collapsed } = getStyle(name, data, keyPath, deep, dataType); + const { handleRemove, readOnly, dataType, minusMenuElement } = this.props; const isReadOnly = readOnly(name, data, keyPath, deep, dataType); @@ -335,13 +334,12 @@ export class JsonArray extends Component { cloneElement(minusMenuElement, { onClick: handleRemove, className: 'rejt-minus-menu', - style: minus, 'aria-label': `remove the array '${String(name)}'`, }); return ( <> - + [...] {data.length} {data.length === 1 ? 'item' : 'items'} {!isReadOnly && removeItemButton} @@ -356,7 +354,6 @@ export class JsonArray extends Component { handleRemove, onDeltaUpdate, readOnly, - getStyle, dataType, addButtonElement, cancelButtonElement, @@ -370,7 +367,6 @@ export class JsonArray extends Component { logger, onSubmitValueParser, } = this.props; - const { minus, plus, delimiter, ul, addForm } = getStyle(name, data, keyPath, deep, dataType); const isReadOnly = readOnly(name, data, keyPath, deep, dataType); @@ -379,7 +375,6 @@ export class JsonArray extends Component { cloneElement(plusMenuElement, { onClick: this.handleAddMode, className: 'rejt-plus-menu', - style: plus, 'aria-label': `add a new item to the '${String(name)}' array`, }); const removeItemButton = @@ -387,7 +382,6 @@ export class JsonArray extends Component { cloneElement(minusMenuElement, { onClick: handleRemove, className: 'rejt-minus-menu', - style: minus, 'aria-label': `remove the array '${String(name)}'`, }); @@ -396,11 +390,9 @@ export class JsonArray extends Component { const endObject = ']'; return ( <> - - {startObject} - + {startObject} {!addFormVisible && addItemButton} -
    +
      {data.map((item, index) => ( { onUpdate={this.onChildUpdate} onDeltaUpdate={onDeltaUpdate} readOnly={readOnly} - getStyle={getStyle} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} @@ -430,7 +421,7 @@ export class JsonArray extends Component { ))}
    {!isReadOnly && addFormVisible && ( -
    +
    { />
    )} - - {endObject} - + {endObject} {!isReadOnly && removeItemButton} ); @@ -481,7 +470,6 @@ interface JsonArrayProps { onDeltaUpdate: (...args: any) => any; readOnly: (...args: any) => any; dataType?: string; - getStyle: (...args: any) => any; addButtonElement?: ReactElement; cancelButtonElement?: ReactElement; inputElementGenerator: (...args: any) => any; @@ -619,13 +607,11 @@ export class JsonFunctionValue extends Component - {textareaElementLayout} - - ); + result = {textareaElementLayout}; minusElement = null; } else { result = ( - + {value} ); @@ -670,7 +648,6 @@ export class JsonFunctionValue extends Component - - {name} :{' '} - +
  • + {name} : {result} {minusElement}
  • @@ -700,7 +675,6 @@ interface JsonFunctionValueProps { handleUpdateValue?: (...args: any) => any; readOnly: (...args: any) => any; dataType?: string; - getStyle: (...args: any) => any; cancelButtonElement?: ReactElement; textareaElementGenerator: (...args: any) => any; minusMenuElement?: ReactElement; @@ -748,7 +722,6 @@ export class JsonNode extends Component { onUpdate, onDeltaUpdate, readOnly, - getStyle, addButtonElement, cancelButtonElement, inputElementGenerator, @@ -778,7 +751,6 @@ export class JsonNode extends Component { onDeltaUpdate={onDeltaUpdate} readOnly={readOnlyTrue} dataType={dataType} - getStyle={getStyle} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} @@ -805,7 +777,6 @@ export class JsonNode extends Component { onDeltaUpdate={onDeltaUpdate} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} @@ -832,7 +803,6 @@ export class JsonNode extends Component { onDeltaUpdate={onDeltaUpdate} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} @@ -858,7 +828,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -878,7 +847,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -898,7 +866,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -918,7 +885,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnlyTrue} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -938,7 +904,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -958,7 +923,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -978,7 +942,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnly} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} textareaElementGenerator={textareaElementGenerator} minusMenuElement={minusMenuElement} @@ -998,7 +961,6 @@ export class JsonNode extends Component { handleUpdateValue={handleUpdateValue} readOnly={readOnlyTrue} dataType={dataType} - getStyle={getStyle} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} minusMenuElement={minusMenuElement} @@ -1023,7 +985,6 @@ interface JsonNodeProps { onUpdate: (...args: any) => any; onDeltaUpdate: (...args: any) => any; readOnly: (...args: any) => any; - getStyle: (...args: any) => any; addButtonElement?: ReactElement; cancelButtonElement?: ReactElement; inputElementGenerator: (...args: any) => any; @@ -1210,9 +1171,8 @@ export class JsonObject extends Component { renderCollapsed() { const { name, keyPath, deep, data } = this.state; - const { handleRemove, readOnly, dataType, getStyle, minusMenuElement } = this.props; + const { handleRemove, readOnly, dataType, minusMenuElement } = this.props; - const { minus, collapsed } = getStyle(name, data, keyPath, deep, dataType); const keyList = Object.getOwnPropertyNames(data); const isReadOnly = readOnly(name, data, keyPath, deep, dataType); @@ -1222,13 +1182,12 @@ export class JsonObject extends Component { cloneElement(minusMenuElement, { onClick: handleRemove, className: 'rejt-minus-menu', - style: minus, 'aria-label': `remove the object '${String(name)}'`, }); return ( <> - + {'{...}'} {keyList.length} {keyList.length === 1 ? 'key' : 'keys'} {!isReadOnly && removeItemButton} @@ -1243,7 +1202,6 @@ export class JsonObject extends Component { handleRemove, onDeltaUpdate, readOnly, - getStyle, dataType, addButtonElement, cancelButtonElement, @@ -1258,7 +1216,6 @@ export class JsonObject extends Component { onSubmitValueParser, } = this.props; - const { minus, plus, addForm, ul, delimiter } = getStyle(name, data, keyPath, deep, dataType); const keyList = Object.getOwnPropertyNames(data); const isReadOnly = readOnly(name, data, keyPath, deep, dataType); @@ -1268,7 +1225,6 @@ export class JsonObject extends Component { cloneElement(plusMenuElement, { onClick: this.handleAddMode, className: 'rejt-plus-menu', - style: plus, 'aria-label': `add a new property to the object '${String(name)}'`, }); const removeItemButton = @@ -1276,7 +1232,6 @@ export class JsonObject extends Component { cloneElement(minusMenuElement, { onClick: handleRemove, className: 'rejt-minus-menu', - style: minus, 'aria-label': `remove the object '${String(name)}'`, }); @@ -1293,7 +1248,6 @@ export class JsonObject extends Component { onUpdate={this.onChildUpdate} onDeltaUpdate={onDeltaUpdate} readOnly={readOnly} - getStyle={getStyle} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementGenerator} @@ -1313,15 +1267,11 @@ export class JsonObject extends Component { return ( <> - - {startObject} - + {startObject} {!isReadOnly && addItemButton} -
      - {list} -
    +
      {list}
    {!isReadOnly && addFormVisible && ( -
    +
    { />
    )} - - {endObject} - + {endObject} {!isReadOnly && removeItemButton} ); @@ -1371,7 +1319,6 @@ interface JsonObjectProps { onDeltaUpdate: (...args: any) => any; readOnly: (...args: any) => any; dataType?: string; - getStyle: (...args: any) => any; addButtonElement?: ReactElement; cancelButtonElement?: ReactElement; inputElementGenerator: (...args: any) => any; @@ -1509,13 +1456,11 @@ export class JsonValue extends Component { originalValue, readOnly, dataType, - getStyle, inputElementGenerator, minusMenuElement, keyPath: comeFromKeyPath, } = this.props; - const style = getStyle(name, originalValue, keyPath, deep, dataType); const isReadOnly = readOnly(name, originalValue, keyPath, deep, dataType); const isEditing = editEnabled && !isReadOnly; const inputElement = inputElementGenerator( @@ -1540,28 +1485,21 @@ export class JsonValue extends Component { cloneElement(minusMenuElement, { onClick: handleRemove, className: 'rejt-minus-menu', - style: style.minus, 'aria-label': `remove the property '${String(name)}' with value '${String(originalValue)}'${ String(parentPropertyName) ? ` from '${String(parentPropertyName)}'` : '' }`, }); return ( -
  • - +
  • + {name} {' : '} {isEditing ? ( - - {inputElementLayout} - + {inputElementLayout} ) : ( - + {String(value)} )} @@ -1581,7 +1519,6 @@ interface JsonValueProps { handleUpdateValue?: (...args: any) => any; readOnly: (...args: any) => any; dataType?: string; - getStyle: (...args: any) => any; cancelButtonElement?: ReactElement; inputElementGenerator: (...args: any) => any; minusMenuElement?: ReactElement; diff --git a/code/addons/docs/src/blocks/controls/react-editable-json-tree/index.tsx b/code/addons/docs/src/blocks/controls/react-editable-json-tree/index.tsx index 465d8da87c8e..51c4f65cd75a 100644 --- a/code/addons/docs/src/blocks/controls/react-editable-json-tree/index.tsx +++ b/code/addons/docs/src/blocks/controls/react-editable-json-tree/index.tsx @@ -50,7 +50,6 @@ export class JsonTree extends Component { isCollapsed, onDeltaUpdate, readOnly, - getStyle, addButtonElement, cancelButtonElement, inputElement, @@ -94,7 +93,6 @@ export class JsonTree extends Component { onUpdate={this.onUpdate} onDeltaUpdate={onDeltaUpdate ?? (() => {})} readOnly={readOnlyFunction as (...args: any) => any} - getStyle={getStyle ?? (() => ({}))} addButtonElement={addButtonElement} cancelButtonElement={cancelButtonElement} inputElementGenerator={inputElementFunction as (...args: any) => any} @@ -123,7 +121,6 @@ interface JsonTreeProps { onFullyUpdate?: (...args: any) => any; onDeltaUpdate?: (...args: any) => any; readOnly?: boolean | ((...args: any) => any); - getStyle?: (...args: any) => any; addButtonElement?: ReactElement; cancelButtonElement?: ReactElement; inputElement?: ReactElement | ((...args: any) => ReactElement); @@ -142,17 +139,6 @@ interface JsonTreeProps { JsonTree.defaultProps = { rootName: 'root', isCollapsed: (keyPath, deep) => deep !== -1, - getStyle: (keyName, data, keyPath, deep, dataType) => { - switch (dataType) { - case 'Object': - case 'Error': - return object; - case 'Array': - return array; - default: - return value; - } - }, readOnly: () => false, onFullyUpdate: () => {}, onDeltaUpdate: () => {},