UNPKG

@gechiui/block-editor

Version:
128 lines (106 loc) 3.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.LETTER_SPACING_SUPPORT_KEY = void 0; exports.LetterSpacingEdit = LetterSpacingEdit; exports.hasLetterSpacingValue = hasLetterSpacingValue; exports.resetLetterSpacing = resetLetterSpacing; exports.useIsLetterSpacingDisabled = useIsLetterSpacingDisabled; var _element = require("@gechiui/element"); var _blocks = require("@gechiui/blocks"); var _letterSpacingControl = _interopRequireDefault(require("../components/letter-spacing-control")); var _useSetting = _interopRequireDefault(require("../components/use-setting")); var _utils = require("./utils"); /** * GeChiUI dependencies */ /** * Internal dependencies */ /** * Key within block settings' supports array indicating support for letter-spacing * e.g. settings found in `block.json`. */ const LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing'; /** * Inspector control panel containing the letter-spacing options. * * @param {Object} props Block properties. * @return {GCElement} Letter-spacing edit element. */ exports.LETTER_SPACING_SUPPORT_KEY = LETTER_SPACING_SUPPORT_KEY; function LetterSpacingEdit(props) { var _style$typography; const { attributes: { style }, setAttributes } = props; function onChange(newSpacing) { setAttributes({ style: (0, _utils.cleanEmptyObject)({ ...style, typography: { ...(style === null || style === void 0 ? void 0 : style.typography), letterSpacing: newSpacing } }) }); } return (0, _element.createElement)(_letterSpacingControl.default, { value: style === null || style === void 0 ? void 0 : (_style$typography = style.typography) === null || _style$typography === void 0 ? void 0 : _style$typography.letterSpacing, onChange: onChange, __unstableInputWidth: false }); } /** * Checks if letter-spacing settings have been disabled. * * @param {string} name Name of the block. * @return {boolean} Whether or not the setting is disabled. */ function useIsLetterSpacingDisabled() { let { name: blockName } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const notSupported = !(0, _blocks.hasBlockSupport)(blockName, LETTER_SPACING_SUPPORT_KEY); const hasLetterSpacing = (0, _useSetting.default)('typography.letterSpacing'); return notSupported || !hasLetterSpacing; } /** * Checks if there is a current value set for the letter spacing block support. * * @param {Object} props Block props. * @return {boolean} Whether or not the block has a letter spacing set. */ function hasLetterSpacingValue(props) { var _props$attributes$sty, _props$attributes$sty2; return !!((_props$attributes$sty = props.attributes.style) !== null && _props$attributes$sty !== void 0 && (_props$attributes$sty2 = _props$attributes$sty.typography) !== null && _props$attributes$sty2 !== void 0 && _props$attributes$sty2.letterSpacing); } /** * Resets the letter spacing block support attribute. This can be used when * disabling the letter spacing support controls for a block via a progressive * discovery panel. * * @param {Object} props Block props. * @param {Object} props.attributes Block's attributes. * @param {Object} props.setAttributes Function to set block's attributes. */ function resetLetterSpacing(_ref) { let { attributes = {}, setAttributes } = _ref; const { style } = attributes; setAttributes({ style: (0, _utils.cleanEmptyObject)({ ...style, typography: { ...(style === null || style === void 0 ? void 0 : style.typography), letterSpacing: undefined } }) }); } //# sourceMappingURL=letter-spacing.js.map