UNPKG

@wordpress/block-library

Version:
144 lines (143 loc) 4.41 kB
import { Fragment, jsx, jsxs } from "react/jsx-runtime"; import { RichText, useBlockProps, useInnerBlocksProps, InspectorControls, store as blockEditorStore } from "@wordpress/block-editor"; import { TextControl, ToggleControl, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, privateApis as componentsPrivateApis } from "@wordpress/components"; import { __ } from "@wordpress/i18n"; import { useState } from "@wordpress/element"; import { useSelect } from "@wordpress/data"; import { useToolsPanelDropdownMenuProps } from "../utils/hooks"; import { unlock } from "../lock-unlock"; const { withIgnoreIMEEvents } = unlock(componentsPrivateApis); const TEMPLATE = [ [ "core/paragraph", { placeholder: __("Type / to add a hidden block") } ] ]; function DetailsEdit({ attributes, setAttributes, clientId }) { const { name, showContent, summary, allowedBlocks, placeholder } = attributes; const blockProps = useBlockProps(); const innerBlocksProps = useInnerBlocksProps(blockProps, { template: TEMPLATE, __experimentalCaptureToolbars: true, allowedBlocks }); const [isOpen, setIsOpen] = useState(showContent); const dropdownMenuProps = useToolsPanelDropdownMenuProps(); const hasSelectedInnerBlock = useSelect( (select) => select(blockEditorStore).hasSelectedInnerBlock(clientId, true), [clientId] ); const handleSummaryKeyDown = (event) => { if (event.key === "Enter" && !event.shiftKey) { setIsOpen((prevIsOpen) => !prevIsOpen); event.preventDefault(); } }; const handleSummaryKeyUp = (event) => { if (event.key === " ") { event.preventDefault(); } }; return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsx( ToolsPanel, { label: __("Settings"), resetAll: () => { setAttributes({ showContent: false }); }, dropdownMenuProps, children: /* @__PURE__ */ jsx( ToolsPanelItem, { isShownByDefault: true, label: __("Open by default"), hasValue: () => showContent, onDeselect: () => { setAttributes({ showContent: false }); }, children: /* @__PURE__ */ jsx( ToggleControl, { __nextHasNoMarginBottom: true, label: __("Open by default"), checked: showContent, onChange: () => setAttributes({ showContent: !showContent }) } ) } ) } ) }), /* @__PURE__ */ jsx(InspectorControls, { group: "advanced", children: /* @__PURE__ */ jsx( TextControl, { __next40pxDefaultSize: true, __nextHasNoMarginBottom: true, label: __("Name attribute"), value: name || "", onChange: (newName) => setAttributes({ name: newName }), help: __( "Enables multiple Details blocks with the same name attribute to be connected, with only one open at a time." ) } ) }), /* @__PURE__ */ jsxs( "details", { ...innerBlocksProps, open: isOpen || hasSelectedInnerBlock, onToggle: (event) => setIsOpen(event.target.open), name: name || "", children: [ /* @__PURE__ */ jsx( "summary", { onKeyDown: withIgnoreIMEEvents(handleSummaryKeyDown), onKeyUp: handleSummaryKeyUp, children: /* @__PURE__ */ jsx( RichText, { identifier: "summary", "aria-label": __( "Write summary. Press Enter to expand or collapse the details." ), placeholder: placeholder || __("Write summary\u2026"), withoutInteractiveFormatting: true, value: summary, onChange: (newSummary) => setAttributes({ summary: newSummary }) } ) } ), innerBlocksProps.children ] } ) ] }); } var edit_default = DetailsEdit; export { edit_default as default }; //# sourceMappingURL=edit.js.map