"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// packages/block-editor/src/utils/block-bindings.js
var block_bindings_exports = {};
__export(block_bindings_exports, {
  hasPatternOverridesDefaultBinding: () => hasPatternOverridesDefaultBinding,
  replacePatternOverridesDefaultBinding: () => replacePatternOverridesDefaultBinding,
  useBlockBindingsUtils: () => useBlockBindingsUtils
});
module.exports = __toCommonJS(block_bindings_exports);
var import_data = require("@wordpress/data");
var import_store = require("../store");
var import_block_edit = require("../components/block-edit");
var DEFAULT_ATTRIBUTE = "__default";
var PATTERN_OVERRIDES_SOURCE = "core/pattern-overrides";
function isObjectEmpty(object) {
  return !object || Object.keys(object).length === 0;
}
function hasPatternOverridesDefaultBinding(bindings) {
  return bindings?.[DEFAULT_ATTRIBUTE]?.source === PATTERN_OVERRIDES_SOURCE;
}
function replacePatternOverridesDefaultBinding(bindings, supportedAttributes) {
  if (hasPatternOverridesDefaultBinding(bindings)) {
    const bindingsWithDefaults = {};
    for (const attributeName of supportedAttributes) {
      const bindingSource = bindings[attributeName] ? bindings[attributeName] : { source: PATTERN_OVERRIDES_SOURCE };
      bindingsWithDefaults[attributeName] = bindingSource;
    }
    return bindingsWithDefaults;
  }
  return bindings;
}
function useBlockBindingsUtils(clientId) {
  const { clientId: contextClientId } = (0, import_block_edit.useBlockEditContext)();
  const blockClientId = clientId || contextClientId;
  const { updateBlockAttributes } = (0, import_data.useDispatch)(import_store.store);
  const { getBlockAttributes } = (0, import_data.useRegistry)().select(import_store.store);
  const updateBlockBindings = (bindings) => {
    const { metadata: { bindings: currentBindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
    const newBindings = { ...currentBindings };
    Object.entries(bindings).forEach(([attribute, binding]) => {
      if (!binding && newBindings[attribute]) {
        delete newBindings[attribute];
        return;
      }
      newBindings[attribute] = binding;
    });
    const newMetadata = {
      ...metadata,
      bindings: newBindings
    };
    if (isObjectEmpty(newMetadata.bindings)) {
      delete newMetadata.bindings;
    }
    updateBlockAttributes(blockClientId, {
      metadata: isObjectEmpty(newMetadata) ? void 0 : newMetadata
    });
  };
  const removeAllBlockBindings = () => {
    const { metadata: { bindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
    updateBlockAttributes(blockClientId, {
      metadata: isObjectEmpty(metadata) ? void 0 : metadata
    });
  };
  return { updateBlockBindings, removeAllBlockBindings };
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  hasPatternOverridesDefaultBinding,
  replacePatternOverridesDefaultBinding,
  useBlockBindingsUtils
});
//# sourceMappingURL=block-bindings.js.map
