UNPKG

storybook-addon-playground

Version:

A playground to enable consumers learn how to use the component library or to reproduce bugs

62 lines (59 loc) 3.44 kB
import React__default, { useCallback } from 'react'; import usePlaygroundArgs from '../../hooks/usePlaygroundArgs.js'; import { useAddonState, useParameter } from '@storybook/manager-api'; import '@storybook/addon-links'; import { PANEL_ID, ADDON_ID_FOR_PARAMETERS } from '../../consts/addon-consts.js'; import { DEFAULT_ADDON_PARAMETERS } from '../../consts/parameter-consts.js'; import { DEFAULT_ADDON_STATE } from '../../consts/state-consts.js'; import { EDITOR_STATE_FIELDS } from '../../consts/editor-consts.js'; import 'prettier'; import 'prettier/parser-html'; import 'prettier/parser-typescript'; import 'prettier/parser-postcss'; import 'lz-string'; import useToolbarActions from '../../hooks/useToolbarActions.js'; import useCopyToClipboard from '../../hooks/useCopyToClipboard.js'; import useShare from '../../hooks/useShare.js'; import '@storybook/preview-api'; import '@uiw/codemirror-theme-github'; import EditorToolbarButton from './EditorToolbarButton.js'; import styles from './EditorToolbar.module.css.js'; import EditorTabs from './EditorTabs.js'; import SvgCopy from '../../icons/Copy.js'; import SvgEdit from '../../icons/Edit.js'; import SvgReset from '../../icons/Reset.js'; import SvgShare from '../../icons/Share.js'; const EditorToolbar = ({ editorRef }) => { const { updateCode, resetCode } = usePlaygroundArgs(); const [state, setState] = useAddonState(PANEL_ID, DEFAULT_ADDON_STATE); const { share: enableShare } = useParameter(ADDON_ID_FOR_PARAMETERS, DEFAULT_ADDON_PARAMETERS); const { code, selectedTab } = state; const { onCopy, isCopied, shouldAllowCopy } = useCopyToClipboard(code); const { onShare, isShareCopied, shouldAllowShare } = useShare(code); const { onFormatCode, onReset } = useToolbarActions(code, updateCode, resetCode, selectedTab); const onTabChange = useCallback((newTab) => { setState((prev) => { const updates = { ...prev, selectedTab: newTab, }; const editorStateJson = editorRef.current?.view?.state?.toJSON?.(EDITOR_STATE_FIELDS); if (editorStateJson) { updates.editorState = { ...prev.editorState, [prev.selectedTab]: editorStateJson, }; } return updates; }); }, [editorRef, setState]); return (React__default.createElement("div", { className: styles.toolbar }, React__default.createElement(EditorTabs, { selectedTab: selectedTab, onTabChange: onTabChange }), React__default.createElement("section", null, React__default.createElement(EditorToolbarButton, { tooltip: shouldAllowCopy ? "" : "Editor is empty", text: isCopied ? "Copied!" : "Copy", renderIcon: SvgCopy, disabled: isCopied || !shouldAllowCopy, onClick: onCopy }), enableShare && (React__default.createElement(EditorToolbarButton, { tooltip: shouldAllowShare ? "" : "Editor is empty", text: isShareCopied ? "Copied!" : "Share", renderIcon: SvgShare, disabled: isShareCopied || !shouldAllowShare, onClick: onShare })), React__default.createElement(EditorToolbarButton, { text: "Format", renderIcon: SvgEdit, onClick: onFormatCode }), React__default.createElement(EditorToolbarButton, { text: "Reset", renderIcon: SvgReset, onClick: onReset })))); }; export { EditorToolbar as default }; //# sourceMappingURL=EditorToolbar.js.map