var $dMxap$react = require("react");


function $parcel$export(e, n, v, s) {
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}

$parcel$export(module.exports, "useCachedChildren", function () { return $252b361f1adaf82f$export$727c8fc270210f13; });
/*
 * Copyright 2024 Adobe. All rights reserved.
 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy
 * of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under
 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
 * OF ANY KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */ 
function $252b361f1adaf82f$export$727c8fc270210f13(props) {
    let { children: children, items: items, idScope: idScope, addIdAndValue: addIdAndValue, dependencies: dependencies = [] } = props;
    // In development, invalidate when the children function updates (e.g. HMR).
    let childrenString = (0, $dMxap$react.useMemo)(()=>process.env.NODE_ENV !== 'production' && typeof children === 'function' ? children.toString() : undefined, [
        children
    ]);
    // Invalidate the cache whenever dependencies change.
    // eslint-disable-next-line react-hooks/exhaustive-deps
    // oxlint-disable-next-line react/react-compiler, react-hooks/exhaustive-deps
    let cache = (0, $dMxap$react.useMemo)(()=>new WeakMap(), [
        ...dependencies,
        childrenString
    ]);
    return (0, $dMxap$react.useMemo)(()=>{
        if (items && typeof children === 'function') {
            let res = [];
            for (let item of items){
                let cacheKey = $252b361f1adaf82f$var$isWeakKey(item) ? item : null;
                let rendered = cacheKey ? cache.get(cacheKey) : null;
                if (!rendered) {
                    rendered = children(item);
                    // @ts-ignore
                    let id = rendered.props.id ?? item?.key ?? item?.id;
                    if (idScope != null && rendered.props.id == null && id != null) id = idScope + ':' + id;
                    // If no id is inferred from data, use the index as the React key.
                    // An id will be generated by the collection document.
                    let key = id ?? res.length;
                    // Note: only works if wrapped Item passes through id...
                    rendered = (0, $dMxap$react.cloneElement)(rendered, addIdAndValue ? {
                        key: key,
                        id: id,
                        value: item
                    } : {
                        key: key
                    });
                    if (cacheKey) cache.set(cacheKey, rendered);
                }
                res.push(rendered);
            }
            return res;
        } else if (typeof children !== 'function') return children;
    }, [
        children,
        items,
        cache,
        idScope,
        addIdAndValue
    ]);
}
function $252b361f1adaf82f$var$isWeakKey(value) {
    switch(typeof value){
        case 'object':
            return value != null;
        case 'function':
        case 'symbol':
            return true;
        default:
            return false;
    }
}


//# sourceMappingURL=useCachedChildren.cjs.map
