text: import Mixin from "@ember/object/mixin";
  import { isNone } from "@ember/utils";
  
  let _appendContentCallbacks = {};
  function appendContent(pluginApiIdentifiers, contentFunction) {
    if (isNone(_appendContentCallbacks[pluginApiIdentifiers])) {
      _appendContentCallbacks[pluginApiIdentifiers] = [];
    }
  
    _appendContentCallbacks[pluginApiIdentifiers].push(contentFunction);
  }
  
  let _prependContentCallbacks = {};
  function prependContent(pluginApiIdentifiers, contentFunction) {
    if (isNone(_prependContentCallbacks[pluginApiIdentifiers])) {
      _prependContentCallbacks[pluginApiIdentifiers] = [];
    }
  
    _prependContentCallbacks[pluginApiIdentifiers].push(contentFunction);
  }
  
  let _modifyContentCallbacks = {};
  function modifyContent(pluginApiIdentifiers, contentFunction) {
    if (isNone(_modifyContentCallbacks[pluginApiIdentifiers])) {
      _modifyContentCallbacks[pluginApiIdentifiers] = [];
    }
  
    _modifyContentCallbacks[pluginApiIdentifiers].push(contentFunction);
  }
  
  let _modifyHeaderComputedContentCallbacks = {};
  function modifyHeaderComputedContent(pluginApiIdentifiers, contentFunction) {
    if (isNone(_modifyHeaderComputedContentCallbacks[pluginApiIdentifiers])) {
      _modifyHeaderComputedContentCallbacks[pluginApiIdentifiers] = [];
    }
  
    _modifyHeaderComputedContentCallbacks[pluginApiIdentifiers].push(
      contentFunction
    );
  }
  
  let _modifyCollectionHeaderCallbacks = {};
  function modifyCollectionHeader(pluginApiIdentifiers, contentFunction) {
    if (isNone(_modifyCollectionHeaderCallbacks[pluginApiIdentifiers])) {
      _modifyCollectionHeaderCallbacks[pluginApiIdentifiers] = [];
    }
  
    _modifyCollectionHeaderCallbacks[pluginApiIdentifiers].push(contentFunction);
  }
  
  let _onSelectNoneCallbacks = {};
  function onSelectNone(pluginApiIdentifiers, mutationFunction) {
    if (isNone(_onSelectNoneCallbacks[pluginApiIdentifiers])) {
      _onSelectNoneCallbacks[pluginApiIdentifiers] = [];
    }
  
    _onSelectNoneCallbacks[pluginApiIdentifiers].push(mutationFunction);
  }
  
  let _onSelectCallbacks = {};
  function onSelect(pluginApiIdentifiers, mutationFunction) {
    if (isNone(_onSelectCallbacks[pluginApiIdentifiers])) {
      _onSelectCallbacks[pluginApiIdentifiers] = [];
    }
  
    _onSelectCallbacks[pluginApiIdentifiers].push(mutationFunction);
  }
  
  export function applyContentPluginApiCallbacks(identifiers, content, context) {
    identifiers.forEach(key => {
      (_prependContentCallbacks[key] || []).forEach(c => {
        content = c()
          .concat(content)
          .uniqBy("id");
      });
      (_appendContentCallbacks[key] || []).forEach(c => {
        content = content.concat(c()).uniqBy("id");
      });
      (_modifyContentCallbacks[key] || []).forEach(c => {
        content = c(context, content).uniqBy("id");
      });
    });
  
    return content;
  }
  
  export function applyHeaderContentPluginApiCallbacks(
    identifiers,
    content,
    context
  ) {
    identifiers.forEach(key => {
      (_modifyHeaderComputedContentCallbacks[key] || []).forEach(c => {
        content = c(context, content);
      });
    });
  
    return content;
  }
  
  export function applyCollectionHeaderCallbacks(identifiers, content, context) {
    identifiers.forEach(key => {
      (_modifyCollectionHeaderCallbacks[key] || []).forEach(c => {
        content = c(context, content);
      });
    });
  
    return content;
  }
  
  export function applyOnSelectPluginApiCallbacks(identifiers, val, context) {
    identifiers.forEach(key => {
      (_onSelectCallbacks[key] || []).forEach(c => c(context, val));
    });
  }
  
  export function applyOnSelectNonePluginApiCallbacks(identifiers, context) {
    identifiers.forEach(key => {
      (_onSelectNoneCallbacks[key] || []).forEach(c => c(context));
    });
  }
  
  export function modifySelectKit(pluginApiIdentifiers) {
    return {
      appendContent: content => {
        appendContent(pluginApiIdentifiers, () => {
          return content;
        });
        return modifySelectKit(pluginApiIdentifiers);
      },
      prependContent: content => {
        prependContent(pluginApiIdentifiers, () => {
          return content;
        });
        return modifySelectKit(pluginApiIdentifiers);
      },
      modifyContent: callback => {
        modifyContent(pluginApiIdentifiers, callback);
        return modifySelectKit(pluginApiIdentifiers);
      },
      modifyHeaderComputedContent: callback => {
        modifyHeaderComputedContent(pluginApiIdentifiers, callback);
        return modifySelectKit(pluginApiIdentifiers);
      },
      modifyCollectionHeader: callback => {
        modifyCollectionHeader(pluginApiIdentifiers, callback);
        return modifySelectKit(pluginApiIdentifiers);
      },
      onSelect: callback => {
        onSelect(pluginApiIdentifiers, callback);
        return modifySelectKit(pluginApiIdentifiers);
      },
      onSelectNone: callback => {
        onSelectNone(pluginApiIdentifiers, callback);
        return modifySelectKit(pluginApiIdentifiers);
      }
    };
  }
  
  export function clearCallbacks() {
    _appendContentCallbacks = {};
    _prependContentCallbacks = {};
    _modifyContentCallbacks = {};
    _modifyHeaderComputedContentCallbacks = {};
    _modifyCollectionHeaderCallbacks = {};
    _onSelectCallbacks = {};
    _onSelectNoneCallbacks = {};
  }
  
  const EMPTY_ARRAY = Object.freeze([]);
  export default Mixin.create({
    concatenatedProperties: ["pluginApiIdentifiers"],
    pluginApiIdentifiers: EMPTY_ARRAY
  });
  