[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: render.js
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; 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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // package-external:@wordpress/element var require_element = __commonJS({ "package-external:@wordpress/element"(exports, module) { module.exports = window.wp.element; } }); // package-external:@wordpress/data var require_data = __commonJS({ "package-external:@wordpress/data"(exports, module) { module.exports = window.wp.data; } }); // package-external:@wordpress/core-data var require_core_data = __commonJS({ "package-external:@wordpress/core-data"(exports, module) { module.exports = window.wp.coreData; } }); // package-external:@wordpress/components var require_components = __commonJS({ "package-external:@wordpress/components"(exports, module) { module.exports = window.wp.components; } }); // package-external:@wordpress/i18n var require_i18n = __commonJS({ "package-external:@wordpress/i18n"(exports, module) { module.exports = window.wp.i18n; } }); // package-external:@wordpress/primitives var require_primitives = __commonJS({ "package-external:@wordpress/primitives"(exports, module) { module.exports = window.wp.primitives; } }); // vendor-external:react/jsx-runtime var require_jsx_runtime = __commonJS({ "vendor-external:react/jsx-runtime"(exports, module) { module.exports = window.ReactJSXRuntime; } }); // vendor-external:react var require_react = __commonJS({ "vendor-external:react"(exports, module) { module.exports = window.React; } }); // vendor-external:react-dom var require_react_dom = __commonJS({ "vendor-external:react-dom"(exports, module) { module.exports = window.ReactDOM; } }); // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js var require_use_sync_external_store_shim_development = __commonJS({ "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { "use strict"; (function() { function is(x2, y2) { return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; } function useSyncExternalStore$2(subscribe2, getSnapshot) { didWarnOld18Alpha || void 0 === React119.startTransition || (didWarnOld18Alpha = true, console.error( "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." )); var value = getSnapshot(); if (!didWarnUncachedGetSnapshot) { var cachedValue = getSnapshot(); objectIs(value, cachedValue) || (console.error( "The result of getSnapshot should be cached to avoid an infinite loop" ), didWarnUncachedGetSnapshot = true); } cachedValue = useState50({ inst: { value, getSnapshot } }); var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; useLayoutEffect5( function() { inst.value = value; inst.getSnapshot = getSnapshot; checkIfSnapshotChanged(inst) && forceUpdate({ inst }); }, [subscribe2, value, getSnapshot] ); useEffect43( function() { checkIfSnapshotChanged(inst) && forceUpdate({ inst }); return subscribe2(function() { checkIfSnapshotChanged(inst) && forceUpdate({ inst }); }); }, [subscribe2] ); useDebugValue2(value); return value; } function checkIfSnapshotChanged(inst) { var latestGetSnapshot = inst.getSnapshot; inst = inst.value; try { var nextValue = latestGetSnapshot(); return !objectIs(inst, nextValue); } catch (error2) { return true; } } function useSyncExternalStore$1(subscribe2, getSnapshot) { return getSnapshot(); } "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); var React119 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState50 = React119.useState, useEffect43 = React119.useEffect, useLayoutEffect5 = React119.useLayoutEffect, useDebugValue2 = React119.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; exports.useSyncExternalStore = void 0 !== React119.useSyncExternalStore ? React119.useSyncExternalStore : shim; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); })(); } }); // node_modules/use-sync-external-store/shim/index.js var require_shim = __commonJS({ "node_modules/use-sync-external-store/shim/index.js"(exports, module) { "use strict"; if (false) { module.exports = null; } else { module.exports = require_use_sync_external_store_shim_development(); } } }); // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js var require_with_selector_development = __commonJS({ "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { "use strict"; (function() { function is(x2, y2) { return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; } "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); var React119 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef70 = React119.useRef, useEffect43 = React119.useEffect, useMemo59 = React119.useMemo, useDebugValue2 = React119.useDebugValue; exports.useSyncExternalStoreWithSelector = function(subscribe2, getSnapshot, getServerSnapshot, selector2, isEqual) { var instRef = useRef70(null); if (null === instRef.current) { var inst = { hasValue: false, value: null }; instRef.current = inst; } else inst = instRef.current; instRef = useMemo59( function() { function memoizedSelector(nextSnapshot) { if (!hasMemo) { hasMemo = true; memoizedSnapshot = nextSnapshot; nextSnapshot = selector2(nextSnapshot); if (void 0 !== isEqual && inst.hasValue) { var currentSelection = inst.value; if (isEqual(currentSelection, nextSnapshot)) return memoizedSelection = currentSelection; } return memoizedSelection = nextSnapshot; } currentSelection = memoizedSelection; if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection; var nextSelection = selector2(nextSnapshot); if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) return memoizedSnapshot = nextSnapshot, currentSelection; memoizedSnapshot = nextSnapshot; return memoizedSelection = nextSelection; } var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; return [ function() { return memoizedSelector(getSnapshot()); }, null === maybeGetServerSnapshot ? void 0 : function() { return memoizedSelector(maybeGetServerSnapshot()); } ]; }, [getSnapshot, getServerSnapshot, selector2, isEqual] ); var value = useSyncExternalStore3(subscribe2, instRef[0], instRef[1]); useEffect43( function() { inst.hasValue = true; inst.value = value; }, [value] ); useDebugValue2(value); return value; }; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); })(); } }); // node_modules/use-sync-external-store/shim/with-selector.js var require_with_selector = __commonJS({ "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { "use strict"; if (false) { module.exports = null; } else { module.exports = require_with_selector_development(); } } }); // package-external:@wordpress/compose var require_compose = __commonJS({ "package-external:@wordpress/compose"(exports, module) { module.exports = window.wp.compose; } }); // package-external:@wordpress/theme var require_theme = __commonJS({ "package-external:@wordpress/theme"(exports, module) { module.exports = window.wp.theme; } }); // package-external:@wordpress/private-apis var require_private_apis = __commonJS({ "package-external:@wordpress/private-apis"(exports, module) { module.exports = window.wp.privateApis; } }); // package-external:@wordpress/keycodes var require_keycodes = __commonJS({ "package-external:@wordpress/keycodes"(exports, module) { module.exports = window.wp.keycodes; } }); // node_modules/remove-accents/index.js var require_remove_accents = __commonJS({ "node_modules/remove-accents/index.js"(exports, module) { var characterMap = { "\xC0": "A", "\xC1": "A", "\xC2": "A", "\xC3": "A", "\xC4": "A", "\xC5": "A", "\u1EA4": "A", "\u1EAE": "A", "\u1EB2": "A", "\u1EB4": "A", "\u1EB6": "A", "\xC6": "AE", "\u1EA6": "A", "\u1EB0": "A", "\u0202": "A", "\u1EA2": "A", "\u1EA0": "A", "\u1EA8": "A", "\u1EAA": "A", "\u1EAC": "A", "\xC7": "C", "\u1E08": "C", "\xC8": "E", "\xC9": "E", "\xCA": "E", "\xCB": "E", "\u1EBE": "E", "\u1E16": "E", "\u1EC0": "E", "\u1E14": "E", "\u1E1C": "E", "\u0206": "E", "\u1EBA": "E", "\u1EBC": "E", "\u1EB8": "E", "\u1EC2": "E", "\u1EC4": "E", "\u1EC6": "E", "\xCC": "I", "\xCD": "I", "\xCE": "I", "\xCF": "I", "\u1E2E": "I", "\u020A": "I", "\u1EC8": "I", "\u1ECA": "I", "\xD0": "D", "\xD1": "N", "\xD2": "O", "\xD3": "O", "\xD4": "O", "\xD5": "O", "\xD6": "O", "\xD8": "O", "\u1ED0": "O", "\u1E4C": "O", "\u1E52": "O", "\u020E": "O", "\u1ECE": "O", "\u1ECC": "O", "\u1ED4": "O", "\u1ED6": "O", "\u1ED8": "O", "\u1EDC": "O", "\u1EDE": "O", "\u1EE0": "O", "\u1EDA": "O", "\u1EE2": "O", "\xD9": "U", "\xDA": "U", "\xDB": "U", "\xDC": "U", "\u1EE6": "U", "\u1EE4": "U", "\u1EEC": "U", "\u1EEE": "U", "\u1EF0": "U", "\xDD": "Y", "\xE0": "a", "\xE1": "a", "\xE2": "a", "\xE3": "a", "\xE4": "a", "\xE5": "a", "\u1EA5": "a", "\u1EAF": "a", "\u1EB3": "a", "\u1EB5": "a", "\u1EB7": "a", "\xE6": "ae", "\u1EA7": "a", "\u1EB1": "a", "\u0203": "a", "\u1EA3": "a", "\u1EA1": "a", "\u1EA9": "a", "\u1EAB": "a", "\u1EAD": "a", "\xE7": "c", "\u1E09": "c", "\xE8": "e", "\xE9": "e", "\xEA": "e", "\xEB": "e", "\u1EBF": "e", "\u1E17": "e", "\u1EC1": "e", "\u1E15": "e", "\u1E1D": "e", "\u0207": "e", "\u1EBB": "e", "\u1EBD": "e", "\u1EB9": "e", "\u1EC3": "e", "\u1EC5": "e", "\u1EC7": "e", "\xEC": "i", "\xED": "i", "\xEE": "i", "\xEF": "i", "\u1E2F": "i", "\u020B": "i", "\u1EC9": "i", "\u1ECB": "i", "\xF0": "d", "\xF1": "n", "\xF2": "o", "\xF3": "o", "\xF4": "o", "\xF5": "o", "\xF6": "o", "\xF8": "o", "\u1ED1": "o", "\u1E4D": "o", "\u1E53": "o", "\u020F": "o", "\u1ECF": "o", "\u1ECD": "o", "\u1ED5": "o", "\u1ED7": "o", "\u1ED9": "o", "\u1EDD": "o", "\u1EDF": "o", "\u1EE1": "o", "\u1EDB": "o", "\u1EE3": "o", "\xF9": "u", "\xFA": "u", "\xFB": "u", "\xFC": "u", "\u1EE7": "u", "\u1EE5": "u", "\u1EED": "u", "\u1EEF": "u", "\u1EF1": "u", "\xFD": "y", "\xFF": "y", "\u0100": "A", "\u0101": "a", "\u0102": "A", "\u0103": "a", "\u0104": "A", "\u0105": "a", "\u0106": "C", "\u0107": "c", "\u0108": "C", "\u0109": "c", "\u010A": "C", "\u010B": "c", "\u010C": "C", "\u010D": "c", "C\u0306": "C", "c\u0306": "c", "\u010E": "D", "\u010F": "d", "\u0110": "D", "\u0111": "d", "\u0112": "E", "\u0113": "e", "\u0114": "E", "\u0115": "e", "\u0116": "E", "\u0117": "e", "\u0118": "E", "\u0119": "e", "\u011A": "E", "\u011B": "e", "\u011C": "G", "\u01F4": "G", "\u011D": "g", "\u01F5": "g", "\u011E": "G", "\u011F": "g", "\u0120": "G", "\u0121": "g", "\u0122": "G", "\u0123": "g", "\u0124": "H", "\u0125": "h", "\u0126": "H", "\u0127": "h", "\u1E2A": "H", "\u1E2B": "h", "\u0128": "I", "\u0129": "i", "\u012A": "I", "\u012B": "i", "\u012C": "I", "\u012D": "i", "\u012E": "I", "\u012F": "i", "\u0130": "I", "\u0131": "i", "\u0132": "IJ", "\u0133": "ij", "\u0134": "J", "\u0135": "j", "\u0136": "K", "\u0137": "k", "\u1E30": "K", "\u1E31": "k", "K\u0306": "K", "k\u0306": "k", "\u0139": "L", "\u013A": "l", "\u013B": "L", "\u013C": "l", "\u013D": "L", "\u013E": "l", "\u013F": "L", "\u0140": "l", "\u0141": "l", "\u0142": "l", "\u1E3E": "M", "\u1E3F": "m", "M\u0306": "M", "m\u0306": "m", "\u0143": "N", "\u0144": "n", "\u0145": "N", "\u0146": "n", "\u0147": "N", "\u0148": "n", "\u0149": "n", "N\u0306": "N", "n\u0306": "n", "\u014C": "O", "\u014D": "o", "\u014E": "O", "\u014F": "o", "\u0150": "O", "\u0151": "o", "\u0152": "OE", "\u0153": "oe", "P\u0306": "P", "p\u0306": "p", "\u0154": "R", "\u0155": "r", "\u0156": "R", "\u0157": "r", "\u0158": "R", "\u0159": "r", "R\u0306": "R", "r\u0306": "r", "\u0212": "R", "\u0213": "r", "\u015A": "S", "\u015B": "s", "\u015C": "S", "\u015D": "s", "\u015E": "S", "\u0218": "S", "\u0219": "s", "\u015F": "s", "\u0160": "S", "\u0161": "s", "\u0162": "T", "\u0163": "t", "\u021B": "t", "\u021A": "T", "\u0164": "T", "\u0165": "t", "\u0166": "T", "\u0167": "t", "T\u0306": "T", "t\u0306": "t", "\u0168": "U", "\u0169": "u", "\u016A": "U", "\u016B": "u", "\u016C": "U", "\u016D": "u", "\u016E": "U", "\u016F": "u", "\u0170": "U", "\u0171": "u", "\u0172": "U", "\u0173": "u", "\u0216": "U", "\u0217": "u", "V\u0306": "V", "v\u0306": "v", "\u0174": "W", "\u0175": "w", "\u1E82": "W", "\u1E83": "w", "X\u0306": "X", "x\u0306": "x", "\u0176": "Y", "\u0177": "y", "\u0178": "Y", "Y\u0306": "Y", "y\u0306": "y", "\u0179": "Z", "\u017A": "z", "\u017B": "Z", "\u017C": "z", "\u017D": "Z", "\u017E": "z", "\u017F": "s", "\u0192": "f", "\u01A0": "O", "\u01A1": "o", "\u01AF": "U", "\u01B0": "u", "\u01CD": "A", "\u01CE": "a", "\u01CF": "I", "\u01D0": "i", "\u01D1": "O", "\u01D2": "o", "\u01D3": "U", "\u01D4": "u", "\u01D5": "U", "\u01D6": "u", "\u01D7": "U", "\u01D8": "u", "\u01D9": "U", "\u01DA": "u", "\u01DB": "U", "\u01DC": "u", "\u1EE8": "U", "\u1EE9": "u", "\u1E78": "U", "\u1E79": "u", "\u01FA": "A", "\u01FB": "a", "\u01FC": "AE", "\u01FD": "ae", "\u01FE": "O", "\u01FF": "o", "\xDE": "TH", "\xFE": "th", "\u1E54": "P", "\u1E55": "p", "\u1E64": "S", "\u1E65": "s", "X\u0301": "X", "x\u0301": "x", "\u0403": "\u0413", "\u0453": "\u0433", "\u040C": "\u041A", "\u045C": "\u043A", "A\u030B": "A", "a\u030B": "a", "E\u030B": "E", "e\u030B": "e", "I\u030B": "I", "i\u030B": "i", "\u01F8": "N", "\u01F9": "n", "\u1ED2": "O", "\u1ED3": "o", "\u1E50": "O", "\u1E51": "o", "\u1EEA": "U", "\u1EEB": "u", "\u1E80": "W", "\u1E81": "w", "\u1EF2": "Y", "\u1EF3": "y", "\u0200": "A", "\u0201": "a", "\u0204": "E", "\u0205": "e", "\u0208": "I", "\u0209": "i", "\u020C": "O", "\u020D": "o", "\u0210": "R", "\u0211": "r", "\u0214": "U", "\u0215": "u", "B\u030C": "B", "b\u030C": "b", "\u010C\u0323": "C", "\u010D\u0323": "c", "\xCA\u030C": "E", "\xEA\u030C": "e", "F\u030C": "F", "f\u030C": "f", "\u01E6": "G", "\u01E7": "g", "\u021E": "H", "\u021F": "h", "J\u030C": "J", "\u01F0": "j", "\u01E8": "K", "\u01E9": "k", "M\u030C": "M", "m\u030C": "m", "P\u030C": "P", "p\u030C": "p", "Q\u030C": "Q", "q\u030C": "q", "\u0158\u0329": "R", "\u0159\u0329": "r", "\u1E66": "S", "\u1E67": "s", "V\u030C": "V", "v\u030C": "v", "W\u030C": "W", "w\u030C": "w", "X\u030C": "X", "x\u030C": "x", "Y\u030C": "Y", "y\u030C": "y", "A\u0327": "A", "a\u0327": "a", "B\u0327": "B", "b\u0327": "b", "\u1E10": "D", "\u1E11": "d", "\u0228": "E", "\u0229": "e", "\u0190\u0327": "E", "\u025B\u0327": "e", "\u1E28": "H", "\u1E29": "h", "I\u0327": "I", "i\u0327": "i", "\u0197\u0327": "I", "\u0268\u0327": "i", "M\u0327": "M", "m\u0327": "m", "O\u0327": "O", "o\u0327": "o", "Q\u0327": "Q", "q\u0327": "q", "U\u0327": "U", "u\u0327": "u", "X\u0327": "X", "x\u0327": "x", "Z\u0327": "Z", "z\u0327": "z", "\u0439": "\u0438", "\u0419": "\u0418", "\u0451": "\u0435", "\u0401": "\u0415" }; var chars = Object.keys(characterMap).join("|"); var allAccents = new RegExp(chars, "g"); var firstAccent = new RegExp(chars, ""); function matcher(match2) { return characterMap[match2]; } var removeAccents2 = function(string) { return string.replace(allAccents, matcher); }; var hasAccents = function(string) { return !!string.match(firstAccent); }; module.exports = removeAccents2; module.exports.has = hasAccents; module.exports.remove = removeAccents2; } }); // node_modules/fast-deep-equal/es6/index.js var require_es6 = __commonJS({ "node_modules/fast-deep-equal/es6/index.js"(exports, module) { "use strict"; module.exports = function equal(a2, b2) { if (a2 === b2) return true; if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { if (a2.constructor !== b2.constructor) return false; var length, i2, keys; if (Array.isArray(a2)) { length = a2.length; if (length != b2.length) return false; for (i2 = length; i2-- !== 0; ) if (!equal(a2[i2], b2[i2])) return false; return true; } if (a2 instanceof Map && b2 instanceof Map) { if (a2.size !== b2.size) return false; for (i2 of a2.entries()) if (!b2.has(i2[0])) return false; for (i2 of a2.entries()) if (!equal(i2[1], b2.get(i2[0]))) return false; return true; } if (a2 instanceof Set && b2 instanceof Set) { if (a2.size !== b2.size) return false; for (i2 of a2.entries()) if (!b2.has(i2[0])) return false; return true; } if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { length = a2.length; if (length != b2.length) return false; for (i2 = length; i2-- !== 0; ) if (a2[i2] !== b2[i2]) return false; return true; } if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); keys = Object.keys(a2); length = keys.length; if (length !== Object.keys(b2).length) return false; for (i2 = length; i2-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; for (i2 = length; i2-- !== 0; ) { var key = keys[i2]; if (!equal(a2[key], b2[key])) return false; } return true; } return a2 !== a2 && b2 !== b2; }; } }); // package-external:@wordpress/date var require_date = __commonJS({ "package-external:@wordpress/date"(exports, module) { module.exports = window.wp.date; } }); // package-external:@wordpress/warning var require_warning = __commonJS({ "package-external:@wordpress/warning"(exports, module) { module.exports = window.wp.warning; } }); // widgets/events/render.tsx var import_element117 = __toESM(require_element()); var import_data6 = __toESM(require_data()); var import_core_data = __toESM(require_core_data()); var import_components46 = __toESM(require_components()); var import_i18n50 = __toESM(require_i18n()); // packages/icons/build-module/library/arrow-down.mjs var import_primitives = __toESM(require_primitives(), 1); var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) }); // packages/icons/build-module/library/arrow-left.mjs var import_primitives2 = __toESM(require_primitives(), 1); var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) }); // packages/icons/build-module/library/arrow-right.mjs var import_primitives3 = __toESM(require_primitives(), 1); var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) }); // packages/icons/build-module/library/arrow-up.mjs var import_primitives4 = __toESM(require_primitives(), 1); var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) }); // packages/icons/build-module/library/block-table.mjs var import_primitives5 = __toESM(require_primitives(), 1); var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); // packages/icons/build-module/library/calendar.mjs var import_primitives6 = __toESM(require_primitives(), 1); var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); var calendar_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z" }) }); // packages/icons/build-module/library/category.mjs var import_primitives7 = __toESM(require_primitives(), 1); var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); var category_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z" }) }); // packages/icons/build-module/library/check.mjs var import_primitives8 = __toESM(require_primitives(), 1); var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); var check_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) }); // packages/icons/build-module/library/close-small.mjs var import_primitives9 = __toESM(require_primitives(), 1); var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) }); // packages/icons/build-module/library/cog.mjs var import_primitives10 = __toESM(require_primitives(), 1); var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); var cog_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z" }) }); // packages/icons/build-module/library/envelope.mjs var import_primitives11 = __toESM(require_primitives(), 1); var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z" }) }); // packages/icons/build-module/library/error.mjs var import_primitives12 = __toESM(require_primitives(), 1); var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); var error_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z" }) }); // packages/icons/build-module/library/format-list-bullets-rtl.mjs var import_primitives13 = __toESM(require_primitives(), 1); var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) }); // packages/icons/build-module/library/format-list-bullets.mjs var import_primitives14 = __toESM(require_primitives(), 1); var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) }); // packages/icons/build-module/library/funnel.mjs var import_primitives15 = __toESM(require_primitives(), 1); var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); // packages/icons/build-module/library/link.mjs var import_primitives16 = __toESM(require_primitives(), 1); var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); var link_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) }); // packages/icons/build-module/library/map-marker.mjs var import_primitives17 = __toESM(require_primitives(), 1); var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); var map_marker_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z" }) }); // packages/icons/build-module/library/mobile.mjs var import_primitives18 = __toESM(require_primitives(), 1); var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) }); // packages/icons/build-module/library/more-vertical.mjs var import_primitives19 = __toESM(require_primitives(), 1); var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); // packages/icons/build-module/library/next.mjs var import_primitives20 = __toESM(require_primitives(), 1); var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); var next_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); // packages/icons/build-module/library/people.mjs var import_primitives21 = __toESM(require_primitives(), 1); var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); var people_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { fillRule: "evenodd", d: "M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z" }) }); // packages/icons/build-module/library/previous.mjs var import_primitives22 = __toESM(require_primitives(), 1); var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); var previous_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); // packages/icons/build-module/library/scheduled.mjs var import_primitives23 = __toESM(require_primitives(), 1); var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z" }) }); // packages/icons/build-module/library/search.mjs var import_primitives24 = __toESM(require_primitives(), 1); var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); var search_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); // packages/icons/build-module/library/seen.mjs var import_primitives25 = __toESM(require_primitives(), 1); var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); var seen_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) }); // packages/icons/build-module/library/unseen.mjs var import_primitives26 = __toESM(require_primitives(), 1); var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) }); // packages/icons/build-module/library/wordpress.mjs var import_primitives27 = __toESM(require_primitives(), 1); var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); var wordpress_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "-2 -2 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z" }) }); // node_modules/clsx/dist/clsx.mjs function r(e2) { var t2, f2, n2 = ""; if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; else if ("object" == typeof e2) if (Array.isArray(e2)) { var o2 = e2.length; for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); return n2; } function clsx() { for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); return n2; } var clsx_default = clsx; // node_modules/@base-ui/utils/esm/useControlled.js var React = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/error.js var set; if (true) { set = /* @__PURE__ */ new Set(); } function error(...messages) { if (true) { const messageKey = messages.join(" "); if (!set.has(messageKey)) { set.add(messageKey); console.error(`Base UI: ${messageKey}`); } } } // node_modules/@base-ui/utils/esm/useControlled.js function useControlled({ controlled, default: defaultProp, name, state = "value" }) { const { current: isControlled } = React.useRef(controlled !== void 0); const [valueState, setValue] = React.useState(defaultProp); const value = isControlled ? controlled : valueState; if (true) { React.useEffect(() => { if (isControlled !== (controlled !== void 0)) { error([`A component is changing the ${isControlled ? "" : "un"}controlled ${state} state of ${name} to be ${isControlled ? "un" : ""}controlled.`, "Elements should not switch from uncontrolled to controlled (or vice versa).", `Decide between using a controlled or uncontrolled ${name} element for the lifetime of the component.`, "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", "More info: https://fb.me/react-controlled-components"].join("\n")); } }, [state, name, controlled]); const { current: defaultValue2 } = React.useRef(defaultProp); React.useEffect(() => { if (!isControlled && serializeToDevModeString(defaultValue2) !== serializeToDevModeString(defaultProp)) { error([`A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. To suppress this warning opt to use a controlled ${name}.`].join("\n")); } }, [defaultProp]); } const setValueIfUncontrolled = React.useCallback((newValue) => { if (!isControlled) { setValue(newValue); } }, []); return [value, setValueIfUncontrolled]; } function serializeToDevModeString(input) { let nextId = 0; const seen = /* @__PURE__ */ new WeakMap(); try { const result = JSON.stringify(input, function replacer(key, value) { if (key === "_owner" && this != null && typeof this === "object" && "$$typeof" in this) { return void 0; } if (typeof value === "bigint") { return `__bigint__:${value}`; } if (value !== null && typeof value === "object") { const id = seen.get(value); if (id !== void 0) { return `__object__:${id}`; } seen.set(value, nextId); nextId += 1; } return value; }); return result ?? `__top__:${typeof input}`; } catch { return "__unserializable__"; } } // node_modules/@base-ui/utils/esm/safeReact.js var React2 = __toESM(require_react(), 1); var SafeReact = { ...React2 }; // node_modules/@base-ui/utils/esm/useRefWithInit.js var React3 = __toESM(require_react(), 1); var UNINITIALIZED = {}; function useRefWithInit(init2, initArg) { const ref = React3.useRef(UNINITIALIZED); if (ref.current === UNINITIALIZED) { ref.current = init2(initArg); } return ref; } // node_modules/@base-ui/utils/esm/useStableCallback.js var useInsertionEffect = SafeReact.useInsertionEffect; var useSafeInsertionEffect = ( // React 17 doesn't have useInsertionEffect. useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late. useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn() ); function useStableCallback(callback) { const stable = useRefWithInit(createStableCallback).current; stable.next = callback; useSafeInsertionEffect(stable.effect); return stable.trampoline; } function createStableCallback() { const stable = { next: void 0, callback: assertNotCalled, trampoline: (...args) => stable.callback?.(...args), effect: () => { stable.callback = stable.next; } }; return stable; } function assertNotCalled() { if (true) { throw ( /* minify-error-disabled */ new Error("Base UI: Cannot call an event handler while rendering.") ); } } // node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js var React4 = __toESM(require_react(), 1); var noop = () => { }; var useIsoLayoutEffect = typeof document !== "undefined" ? React4.useLayoutEffect : noop; // node_modules/@base-ui/utils/esm/warn.js var set2; if (true) { set2 = /* @__PURE__ */ new Set(); } function warn(...messages) { if (true) { const messageKey = messages.join(" "); if (!set2.has(messageKey)) { set2.add(messageKey); console.warn(`Base UI: ${messageKey}`); } } } // node_modules/@base-ui/react/esm/internals/composite/list/CompositeList.js var React6 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/internals/composite/list/CompositeListContext.js var React5 = __toESM(require_react(), 1); var CompositeListContext = /* @__PURE__ */ React5.createContext({ register: () => { }, unregister: () => { }, subscribeMapChange: () => { return () => { }; }, elementsRef: { current: [] }, nextIndexRef: { current: 0 } }); if (true) CompositeListContext.displayName = "CompositeListContext"; function useCompositeListContext() { return React5.useContext(CompositeListContext); } // node_modules/@base-ui/react/esm/internals/composite/list/CompositeList.js var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); function CompositeList(props) { const { children, elementsRef, labelsRef, onMapChange: onMapChangeProp } = props; const onMapChange = useStableCallback(onMapChangeProp); const nextIndexRef = React6.useRef(0); const listeners = useRefWithInit(createListeners).current; const map = useRefWithInit(createMap).current; const [mapTick, setMapTick] = React6.useState(0); const lastTickRef = React6.useRef(mapTick); const register2 = useStableCallback((node, metadata) => { map.set(node, metadata ?? null); lastTickRef.current += 1; setMapTick(lastTickRef.current); }); const unregister = useStableCallback((node) => { map.delete(node); lastTickRef.current += 1; setMapTick(lastTickRef.current); }); const sortedMap = React6.useMemo(() => { disableEslintWarning(mapTick); const newMap = /* @__PURE__ */ new Map(); const sortedNodes = Array.from(map.keys()).filter((node) => node.isConnected).sort(sortByDocumentPosition); sortedNodes.forEach((node, index2) => { const metadata = map.get(node) ?? {}; newMap.set(node, { ...metadata, index: index2 }); }); return newMap; }, [map, mapTick]); useIsoLayoutEffect(() => { if (typeof MutationObserver !== "function" || sortedMap.size === 0) { return void 0; } const mutationObserver = new MutationObserver((entries) => { const diff = /* @__PURE__ */ new Set(); const updateDiff = (node) => diff.has(node) ? diff.delete(node) : diff.add(node); entries.forEach((entry) => { entry.removedNodes.forEach(updateDiff); entry.addedNodes.forEach(updateDiff); }); if (diff.size === 0) { lastTickRef.current += 1; setMapTick(lastTickRef.current); } }); sortedMap.forEach((_, node) => { if (node.parentElement) { mutationObserver.observe(node.parentElement, { childList: true }); } }); return () => { mutationObserver.disconnect(); }; }, [sortedMap]); useIsoLayoutEffect(() => { const shouldUpdateLengths = lastTickRef.current === mapTick; if (shouldUpdateLengths) { if (elementsRef.current.length !== sortedMap.size) { elementsRef.current.length = sortedMap.size; } if (labelsRef && labelsRef.current.length !== sortedMap.size) { labelsRef.current.length = sortedMap.size; } nextIndexRef.current = sortedMap.size; } onMapChange(sortedMap); }, [onMapChange, sortedMap, elementsRef, labelsRef, mapTick]); useIsoLayoutEffect(() => { return () => { elementsRef.current = []; }; }, [elementsRef]); useIsoLayoutEffect(() => { return () => { if (labelsRef) { labelsRef.current = []; } }; }, [labelsRef]); const subscribeMapChange = useStableCallback((fn) => { listeners.add(fn); return () => { listeners.delete(fn); }; }); useIsoLayoutEffect(() => { listeners.forEach((l2) => l2(sortedMap)); }, [listeners, sortedMap]); const contextValue = React6.useMemo(() => ({ register: register2, unregister, subscribeMapChange, elementsRef, labelsRef, nextIndexRef }), [register2, unregister, subscribeMapChange, elementsRef, labelsRef, nextIndexRef]); return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CompositeListContext.Provider, { value: contextValue, children }); } function createMap() { return /* @__PURE__ */ new Map(); } function createListeners() { return /* @__PURE__ */ new Set(); } function sortByDocumentPosition(a2, b2) { const position = a2.compareDocumentPosition(b2); if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) { return -1; } if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) { return 1; } return 0; } function disableEslintWarning(_) { } // node_modules/@base-ui/react/esm/internals/direction-context/DirectionContext.js var React7 = __toESM(require_react(), 1); var DirectionContext = /* @__PURE__ */ React7.createContext(void 0); if (true) DirectionContext.displayName = "DirectionContext"; function useDirection() { const context = React7.useContext(DirectionContext); return context?.direction ?? "ltr"; } // node_modules/@base-ui/react/esm/internals/useRenderElement.js var React10 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/useMergedRefs.js function useMergedRefs(a2, b2, c2, d2) { const forkRef = useRefWithInit(createForkRef).current; if (didChange(forkRef, a2, b2, c2, d2)) { update(forkRef, [a2, b2, c2, d2]); } return forkRef.callback; } function useMergedRefsN(refs) { const forkRef = useRefWithInit(createForkRef).current; if (didChangeN(forkRef, refs)) { update(forkRef, refs); } return forkRef.callback; } function createForkRef() { return { callback: null, cleanup: null, refs: [] }; } function didChange(forkRef, a2, b2, c2, d2) { return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; } function didChangeN(forkRef, newRefs) { return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]); } function update(forkRef, refs) { forkRef.refs = refs; if (refs.every((ref) => ref == null)) { forkRef.callback = null; return; } forkRef.callback = (instance) => { if (forkRef.cleanup) { forkRef.cleanup(); forkRef.cleanup = null; } if (instance != null) { const cleanupCallbacks = Array(refs.length).fill(null); for (let i2 = 0; i2 < refs.length; i2 += 1) { const ref = refs[i2]; if (ref == null) { continue; } switch (typeof ref) { case "function": { const refCleanup = ref(instance); if (typeof refCleanup === "function") { cleanupCallbacks[i2] = refCleanup; } break; } case "object": { ref.current = instance; break; } default: } } forkRef.cleanup = () => { for (let i2 = 0; i2 < refs.length; i2 += 1) { const ref = refs[i2]; if (ref == null) { continue; } switch (typeof ref) { case "function": { const cleanupCallback = cleanupCallbacks[i2]; if (typeof cleanupCallback === "function") { cleanupCallback(); } else { ref(null); } break; } case "object": { ref.current = null; break; } default: } } }; } }; } // node_modules/@base-ui/utils/esm/getReactElementRef.js var React9 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/reactVersion.js var React8 = __toESM(require_react(), 1); var majorVersion = parseInt(React8.version, 10); function isReactVersionAtLeast(reactVersionToCheck) { return majorVersion >= reactVersionToCheck; } // node_modules/@base-ui/utils/esm/getReactElementRef.js function getReactElementRef(element) { if (!/* @__PURE__ */ React9.isValidElement(element)) { return null; } const reactElement = element; const propsWithRef = reactElement.props; return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; } // node_modules/@base-ui/utils/esm/mergeObjects.js function mergeObjects(a2, b2) { if (a2 && !b2) { return a2; } if (!a2 && b2) { return b2; } if (a2 || b2) { return { ...a2, ...b2 }; } return void 0; } // node_modules/@base-ui/utils/esm/empty.js function NOOP() { } var EMPTY_ARRAY = Object.freeze([]); var EMPTY_OBJECT = Object.freeze({}); // node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js function getStateAttributesProps(state, customMapping) { const props = {}; for (const key in state) { const value = state[key]; if (customMapping?.hasOwnProperty(key)) { const customProps = customMapping[key](value); if (customProps != null) { Object.assign(props, customProps); } continue; } if (value === true) { props[`data-${key.toLowerCase()}`] = ""; } else if (value) { props[`data-${key.toLowerCase()}`] = value.toString(); } } return props; } // node_modules/@base-ui/react/esm/utils/resolveClassName.js function resolveClassName(className, state) { return typeof className === "function" ? className(state) : className; } // node_modules/@base-ui/react/esm/utils/resolveStyle.js function resolveStyle(style, state) { return typeof style === "function" ? style(state) : style; } // node_modules/@base-ui/react/esm/merge-props/mergeProps.js var EMPTY_PROPS = {}; function mergeProps(a2, b2, c2, d2, e2) { if (!c2 && !d2 && !e2 && !a2) { return createInitialMergedProps(b2); } let merged = createInitialMergedProps(a2); if (b2) { merged = mergeInto(merged, b2); } if (c2) { merged = mergeInto(merged, c2); } if (d2) { merged = mergeInto(merged, d2); } if (e2) { merged = mergeInto(merged, e2); } return merged; } function mergePropsN(props) { if (props.length === 0) { return EMPTY_PROPS; } if (props.length === 1) { return createInitialMergedProps(props[0]); } let merged = createInitialMergedProps(props[0]); for (let i2 = 1; i2 < props.length; i2 += 1) { merged = mergeInto(merged, props[i2]); } return merged; } function createInitialMergedProps(inputProps) { if (isPropsGetter(inputProps)) { return { ...resolvePropsGetter(inputProps, EMPTY_PROPS) }; } return copyInitialProps(inputProps); } function mergeInto(merged, inputProps) { if (isPropsGetter(inputProps)) { return resolvePropsGetter(inputProps, merged); } return mutablyMergeInto(merged, inputProps); } function copyInitialProps(inputProps) { const copiedProps = { ...inputProps }; for (const propName in copiedProps) { const propValue = copiedProps[propName]; if (isEventHandler(propName, propValue)) { copiedProps[propName] = wrapEventHandler(propValue); } } return copiedProps; } function mutablyMergeInto(mergedProps, externalProps) { if (!externalProps) { return mergedProps; } for (const propName in externalProps) { const externalPropValue = externalProps[propName]; switch (propName) { case "style": { mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); break; } case "className": { mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); break; } default: { if (isEventHandler(propName, externalPropValue)) { mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); } else { mergedProps[propName] = externalPropValue; } } } } return mergedProps; } function isEventHandler(key, value) { const code0 = key.charCodeAt(0); const code1 = key.charCodeAt(1); const code2 = key.charCodeAt(2); return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); } function isPropsGetter(inputProps) { return typeof inputProps === "function"; } function resolvePropsGetter(inputProps, previousProps) { if (isPropsGetter(inputProps)) { return inputProps(previousProps); } return inputProps ?? EMPTY_PROPS; } function mergeEventHandlers(ourHandler, theirHandler) { if (!theirHandler) { return ourHandler; } if (!ourHandler) { return wrapEventHandler(theirHandler); } return (...args) => { const event = args[0]; if (isSyntheticEvent(event)) { const baseUIEvent = event; makeEventPreventable(baseUIEvent); const result2 = theirHandler(...args); if (!baseUIEvent.baseUIHandlerPrevented) { ourHandler?.(...args); } return result2; } const result = theirHandler(...args); ourHandler?.(...args); return result; }; } function wrapEventHandler(handler) { if (!handler) { return handler; } return (...args) => { const event = args[0]; if (isSyntheticEvent(event)) { makeEventPreventable(event); } return handler(...args); }; } function makeEventPreventable(event) { event.preventBaseUIHandler = () => { event.baseUIHandlerPrevented = true; }; return event; } function mergeClassNames(ourClassName, theirClassName) { if (theirClassName) { if (ourClassName) { return theirClassName + " " + ourClassName; } return theirClassName; } return ourClassName; } function isSyntheticEvent(event) { return event != null && typeof event === "object" && "nativeEvent" in event; } // node_modules/@base-ui/react/esm/internals/useRenderElement.js var import_react = __toESM(require_react(), 1); function useRenderElement(element, componentProps, params = {}) { const renderProp = componentProps.render; const outProps = useRenderElementProps(componentProps, params); if (params.enabled === false) { return null; } const state = params.state ?? EMPTY_OBJECT; return evaluateRenderProp(element, renderProp, outProps, state); } function useRenderElementProps(componentProps, params = {}) { const { className: classNameProp, style: styleProp, render: renderProp } = componentProps; const { state = EMPTY_OBJECT, ref, props, stateAttributesMapping: stateAttributesMapping7, enabled = true } = params; const className = enabled ? resolveClassName(classNameProp, state) : void 0; const style = enabled ? resolveStyle(styleProp, state) : void 0; const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping7) : EMPTY_OBJECT; const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0; const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT; if (typeof document !== "undefined") { if (!enabled) { useMergedRefs(null, null); } else if (Array.isArray(ref)) { outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); } else { outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); } } if (!enabled) { return EMPTY_OBJECT; } if (className !== void 0) { outProps.className = mergeClassNames(outProps.className, className); } if (style !== void 0) { outProps.style = mergeObjects(outProps.style, style); } return outProps; } function resolveRenderFunctionProps(props) { if (Array.isArray(props)) { return mergePropsN(props); } return mergeProps(void 0, props); } var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/; var LOWERCASE_CHARACTER_PATTERN = /[a-z]/; function evaluateRenderProp(element, render4, props, state) { if (render4) { if (typeof render4 === "function") { if (true) { warnIfRenderPropLooksLikeComponent(render4); } return render4(props, state); } const mergedProps = mergeProps(props, render4.props); mergedProps.ref = props.ref; let newElement = render4; if (newElement?.$$typeof === REACT_LAZY_TYPE) { const children = React10.Children.toArray(render4); newElement = children[0]; } if (true) { if (!/* @__PURE__ */ React10.isValidElement(newElement)) { throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join("\n")); } } return /* @__PURE__ */ React10.cloneElement(newElement, mergedProps); } if (element) { if (typeof element === "string") { return renderTag(element, props); } } throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8)); } function warnIfRenderPropLooksLikeComponent(renderFn) { const functionName = renderFn.name; if (functionName.length === 0) { return; } if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) { return; } if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) { return; } warn(`The \`render\` prop received a function named \`${functionName}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop"); } function renderTag(Tag, props) { if (Tag === "button") { return /* @__PURE__ */ (0, import_react.createElement)("button", { type: "button", ...props, key: props.key }); } if (Tag === "img") { return /* @__PURE__ */ (0, import_react.createElement)("img", { alt: "", ...props, key: props.key }); } return /* @__PURE__ */ React10.createElement(Tag, props); } // node_modules/@base-ui/react/esm/internals/reason-parts.js var reason_parts_exports = {}; __export(reason_parts_exports, { cancelOpen: () => cancelOpen, chipRemovePress: () => chipRemovePress, clearPress: () => clearPress, closePress: () => closePress, closeWatcher: () => closeWatcher, decrementPress: () => decrementPress, disabled: () => disabled, drag: () => drag, escapeKey: () => escapeKey, focusOut: () => focusOut, imperativeAction: () => imperativeAction, incrementPress: () => incrementPress, initial: () => initial, inputBlur: () => inputBlur, inputChange: () => inputChange, inputClear: () => inputClear, inputPaste: () => inputPaste, inputPress: () => inputPress, itemPress: () => itemPress, keyboard: () => keyboard, linkPress: () => linkPress, listNavigation: () => listNavigation, missing: () => missing, none: () => none, outsidePress: () => outsidePress, pointer: () => pointer, scrub: () => scrub, siblingOpen: () => siblingOpen, swipe: () => swipe, trackPress: () => trackPress, triggerFocus: () => triggerFocus, triggerHover: () => triggerHover, triggerPress: () => triggerPress, wheel: () => wheel, windowResize: () => windowResize }); var none = "none"; var triggerPress = "trigger-press"; var triggerHover = "trigger-hover"; var triggerFocus = "trigger-focus"; var outsidePress = "outside-press"; var itemPress = "item-press"; var closePress = "close-press"; var linkPress = "link-press"; var clearPress = "clear-press"; var chipRemovePress = "chip-remove-press"; var trackPress = "track-press"; var incrementPress = "increment-press"; var decrementPress = "decrement-press"; var inputChange = "input-change"; var inputClear = "input-clear"; var inputBlur = "input-blur"; var inputPaste = "input-paste"; var inputPress = "input-press"; var focusOut = "focus-out"; var escapeKey = "escape-key"; var closeWatcher = "close-watcher"; var listNavigation = "list-navigation"; var keyboard = "keyboard"; var pointer = "pointer"; var drag = "drag"; var wheel = "wheel"; var scrub = "scrub"; var cancelOpen = "cancel-open"; var siblingOpen = "sibling-open"; var disabled = "disabled"; var missing = "missing"; var initial = "initial"; var imperativeAction = "imperative-action"; var swipe = "swipe"; var windowResize = "window-resize"; // node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js function createChangeEventDetails(reason, event, trigger, customProperties) { let canceled = false; let allowPropagation = false; const custom = customProperties ?? EMPTY_OBJECT; const details = { reason, event: event ?? new Event("base-ui"), cancel() { canceled = true; }, allowPropagation() { allowPropagation = true; }, get isCanceled() { return canceled; }, get isPropagationAllowed() { return allowPropagation; }, trigger, ...custom }; return details; } function createGenericEventDetails(reason, event, customProperties) { const custom = customProperties ?? EMPTY_OBJECT; const details = { reason, event: event ?? new Event("base-ui"), ...custom }; return details; } // node_modules/@base-ui/utils/esm/useId.js var React11 = __toESM(require_react(), 1); var globalId = 0; function useGlobalId(idOverride, prefix = "mui") { const [defaultId, setDefaultId] = React11.useState(idOverride); const id = idOverride || defaultId; React11.useEffect(() => { if (defaultId == null) { globalId += 1; setDefaultId(`${prefix}-${globalId}`); } }, [defaultId, prefix]); return id; } var maybeReactUseId = SafeReact.useId; function useId(idOverride, prefix) { if (maybeReactUseId !== void 0) { const reactId = maybeReactUseId(); return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId); } return useGlobalId(idOverride, prefix); } // node_modules/@base-ui/react/esm/internals/useBaseUiId.js function useBaseUiId(idOverride) { return useId(idOverride, "base-ui"); } // node_modules/@base-ui/react/esm/internals/useTransitionStatus.js var React13 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/useOnMount.js var React12 = __toESM(require_react(), 1); var EMPTY = []; function useOnMount(fn) { React12.useEffect(fn, EMPTY); } // node_modules/@base-ui/utils/esm/useAnimationFrame.js var EMPTY2 = null; var LAST_RAF = globalThis.requestAnimationFrame; var Scheduler = class { /* This implementation uses an array as a backing data-structure for frame callbacks. * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it * never calls the native `cancelAnimationFrame` if there are no frames left. This can * be much more efficient if there is a call pattern that alterns as * "request-cancel-request-cancel-…". * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ callbacks = []; callbacksCount = 0; nextId = 1; startId = 1; isScheduled = false; tick = (timestamp) => { this.isScheduled = false; const currentCallbacks = this.callbacks; const currentCallbacksCount = this.callbacksCount; this.callbacks = []; this.callbacksCount = 0; this.startId = this.nextId; if (currentCallbacksCount > 0) { for (let i2 = 0; i2 < currentCallbacks.length; i2 += 1) { currentCallbacks[i2]?.(timestamp); } } }; request(fn) { const id = this.nextId; this.nextId += 1; this.callbacks.push(fn); this.callbacksCount += 1; const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true); if (!this.isScheduled || didRAFChange) { requestAnimationFrame(this.tick); this.isScheduled = true; } return id; } cancel(id) { const index2 = id - this.startId; if (index2 < 0 || index2 >= this.callbacks.length) { return; } this.callbacks[index2] = null; this.callbacksCount -= 1; } }; var scheduler = new Scheduler(); var AnimationFrame = class _AnimationFrame { static create() { return new _AnimationFrame(); } static request(fn) { return scheduler.request(fn); } static cancel(id) { return scheduler.cancel(id); } currentId = EMPTY2; /** * Executes `fn` after `delay`, clearing any previously scheduled call. */ request(fn) { this.cancel(); this.currentId = scheduler.request(() => { this.currentId = EMPTY2; fn(); }); } cancel = () => { if (this.currentId !== EMPTY2) { scheduler.cancel(this.currentId); this.currentId = EMPTY2; } }; disposeEffect = () => { return this.cancel; }; }; function useAnimationFrame() { const timeout = useRefWithInit(AnimationFrame.create).current; useOnMount(timeout.disposeEffect); return timeout; } // node_modules/@base-ui/react/esm/internals/useTransitionStatus.js function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) { const [transitionStatus, setTransitionStatus] = React13.useState(open && enableIdleState ? "idle" : void 0); const [mounted, setMounted] = React13.useState(open); if (open && !mounted) { setMounted(true); setTransitionStatus("starting"); } if (!open && mounted && transitionStatus !== "ending" && !deferEndingState) { setTransitionStatus("ending"); } if (!open && !mounted && transitionStatus === "ending") { setTransitionStatus(void 0); } useIsoLayoutEffect(() => { if (!open && mounted && transitionStatus !== "ending" && deferEndingState) { const frame = AnimationFrame.request(() => { setTransitionStatus("ending"); }); return () => { AnimationFrame.cancel(frame); }; } return void 0; }, [open, mounted, transitionStatus, deferEndingState]); useIsoLayoutEffect(() => { if (!open || enableIdleState) { return void 0; } const frame = AnimationFrame.request(() => { setTransitionStatus(void 0); }); return () => { AnimationFrame.cancel(frame); }; }, [enableIdleState, open]); useIsoLayoutEffect(() => { if (!open || !enableIdleState) { return void 0; } if (open && mounted && transitionStatus !== "idle") { setTransitionStatus("starting"); } const frame = AnimationFrame.request(() => { setTransitionStatus("idle"); }); return () => { AnimationFrame.cancel(frame); }; }, [enableIdleState, open, mounted, transitionStatus]); return { mounted, setMounted, transitionStatus }; } // node_modules/@base-ui/react/esm/internals/composite/list/useCompositeListItem.js var React14 = __toESM(require_react(), 1); var IndexGuessBehavior = /* @__PURE__ */ (function(IndexGuessBehavior2) { IndexGuessBehavior2[IndexGuessBehavior2["None"] = 0] = "None"; IndexGuessBehavior2[IndexGuessBehavior2["GuessFromOrder"] = 1] = "GuessFromOrder"; return IndexGuessBehavior2; })({}); function useCompositeListItem(params = {}) { const { label, metadata, textRef, indexGuessBehavior, index: externalIndex } = params; const { register: register2, unregister, subscribeMapChange, elementsRef, labelsRef, nextIndexRef } = useCompositeListContext(); const indexRef = React14.useRef(-1); const [index2, setIndex] = React14.useState(externalIndex ?? (indexGuessBehavior === IndexGuessBehavior.GuessFromOrder ? () => { if (indexRef.current === -1) { const newIndex = nextIndexRef.current; nextIndexRef.current += 1; indexRef.current = newIndex; } return indexRef.current; } : -1)); const componentRef = React14.useRef(null); const ref = React14.useCallback((node) => { componentRef.current = node; if (index2 !== -1 && node !== null) { elementsRef.current[index2] = node; if (labelsRef) { const isLabelDefined = label !== void 0; labelsRef.current[index2] = isLabelDefined ? label : textRef?.current?.textContent ?? node.textContent; } } }, [index2, elementsRef, labelsRef, label, textRef]); useIsoLayoutEffect(() => { if (externalIndex != null) { return void 0; } const node = componentRef.current; if (node) { register2(node, metadata); return () => { unregister(node); }; } return void 0; }, [externalIndex, register2, unregister, metadata]); useIsoLayoutEffect(() => { if (externalIndex != null) { return void 0; } return subscribeMapChange((map) => { const i2 = componentRef.current ? map.get(componentRef.current)?.index : null; if (i2 != null) { setIndex(i2); } }); }, [externalIndex, subscribeMapChange, setIndex]); return React14.useMemo(() => ({ ref, index: index2 }), [index2, ref]); } // node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js var TransitionStatusDataAttributes = /* @__PURE__ */ (function(TransitionStatusDataAttributes2) { TransitionStatusDataAttributes2["startingStyle"] = "data-starting-style"; TransitionStatusDataAttributes2["endingStyle"] = "data-ending-style"; return TransitionStatusDataAttributes2; })({}); var STARTING_HOOK = { [TransitionStatusDataAttributes.startingStyle]: "" }; var ENDING_HOOK = { [TransitionStatusDataAttributes.endingStyle]: "" }; var transitionStatusMapping = { transitionStatus(value) { if (value === "starting") { return STARTING_HOOK; } if (value === "ending") { return ENDING_HOOK; } return null; } }; // node_modules/@base-ui/react/esm/internals/use-button/useButton.js var React17 = __toESM(require_react(), 1); // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs function hasWindow() { return typeof window !== "undefined"; } function getNodeName(node) { if (isNode(node)) { return (node.nodeName || "").toLowerCase(); } return "#document"; } function getWindow(node) { var _node$ownerDocument; return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; } function getDocumentElement(node) { var _ref; return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; } function isNode(value) { if (!hasWindow()) { return false; } return value instanceof Node || value instanceof getWindow(value).Node; } function isElement(value) { if (!hasWindow()) { return false; } return value instanceof Element || value instanceof getWindow(value).Element; } function isHTMLElement(value) { if (!hasWindow()) { return false; } return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; } function isShadowRoot(value) { if (!hasWindow() || typeof ShadowRoot === "undefined") { return false; } return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; } function isOverflowElement(element) { const { overflow, overflowX, overflowY, display } = getComputedStyle2(element); return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents"; } function isTableElement(element) { return /^(table|td|th)$/.test(getNodeName(element)); } function isTopLayer(element) { try { if (element.matches(":popover-open")) { return true; } } catch (_e) { } try { return element.matches(":modal"); } catch (_e) { return false; } } var willChangeRe = /transform|translate|scale|rotate|perspective|filter/; var containRe = /paint|layout|strict|content/; var isNotNone = (value) => !!value && value !== "none"; var isWebKitValue; function isContainingBlock(elementOrCss) { const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || ""); } function getContainingBlock(element) { let currentNode = getParentNode(element); while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { if (isContainingBlock(currentNode)) { return currentNode; } else if (isTopLayer(currentNode)) { return null; } currentNode = getParentNode(currentNode); } return null; } function isWebKit() { if (isWebKitValue == null) { isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"); } return isWebKitValue; } function isLastTraversableNode(node) { return /^(html|body|#document)$/.test(getNodeName(node)); } function getComputedStyle2(element) { return getWindow(element).getComputedStyle(element); } function getNodeScroll(element) { if (isElement(element)) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } return { scrollLeft: element.scrollX, scrollTop: element.scrollY }; } function getParentNode(node) { if (getNodeName(node) === "html") { return node; } const result = ( // Step into the shadow DOM of the parent of a slotted node. node.assignedSlot || // DOM Element detected. node.parentNode || // ShadowRoot detected. isShadowRoot(node) && node.host || // Fallback. getDocumentElement(node) ); return isShadowRoot(result) ? result.host : result; } function getNearestOverflowAncestor(node) { const parentNode = getParentNode(node); if (isLastTraversableNode(parentNode)) { return node.ownerDocument ? node.ownerDocument.body : node.body; } if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { return parentNode; } return getNearestOverflowAncestor(parentNode); } function getOverflowAncestors(node, list, traverseIframes) { var _node$ownerDocument2; if (list === void 0) { list = []; } if (traverseIframes === void 0) { traverseIframes = true; } const scrollableAncestor = getNearestOverflowAncestor(node); const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); const win = getWindow(scrollableAncestor); if (isBody) { const frameElement = getFrameElement(win); return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); } else { return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); } } function getFrameElement(win) { return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; } // node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js var React15 = __toESM(require_react(), 1); var CompositeRootContext = /* @__PURE__ */ React15.createContext(void 0); if (true) CompositeRootContext.displayName = "CompositeRootContext"; function useCompositeRootContext(optional = false) { const context = React15.useContext(CompositeRootContext); if (context === void 0 && !optional) { throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16)); } return context; } // node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js var React16 = __toESM(require_react(), 1); function useFocusableWhenDisabled(parameters) { const { focusableWhenDisabled, disabled: disabled2, composite = false, tabIndex: tabIndexProp = 0, isNativeButton } = parameters; const isFocusableComposite = composite && focusableWhenDisabled !== false; const isNonFocusableComposite = composite && focusableWhenDisabled === false; const props = React16.useMemo(() => { const additionalProps = { // allow Tabbing away from focusableWhenDisabled elements onKeyDown(event) { if (disabled2 && focusableWhenDisabled && event.key !== "Tab") { event.preventDefault(); } } }; if (!composite) { additionalProps.tabIndex = tabIndexProp; if (!isNativeButton && disabled2) { additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1; } } if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) { additionalProps["aria-disabled"] = disabled2; } if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) { additionalProps.disabled = disabled2; } return additionalProps; }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]); return { props }; } // node_modules/@base-ui/react/esm/internals/use-button/useButton.js function useButton(parameters = {}) { const { disabled: disabled2 = false, focusableWhenDisabled, tabIndex = 0, native: isNativeButton = true, composite: compositeProp } = parameters; const elementRef = React17.useRef(null); const compositeRootContext = useCompositeRootContext(true); const isCompositeItem = compositeProp ?? compositeRootContext !== void 0; const { props: focusableWhenDisabledProps } = useFocusableWhenDisabled({ focusableWhenDisabled, disabled: disabled2, composite: isCompositeItem, tabIndex, isNativeButton }); if (true) { React17.useEffect(() => { if (!elementRef.current) { return; } const isButtonTag = isButtonElement(elementRef.current); if (isNativeButton) { if (!isButtonTag) { const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; const message2 = "A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `render` prop, or set `nativeButton` to `false`."; error(`${message2}${ownerStackMessage}`); } } else if (isButtonTag) { const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; const message2 = "A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set `nativeButton` to `true`."; error(`${message2}${ownerStackMessage}`); } }, [isNativeButton]); } const updateDisabled = React17.useCallback(() => { const element = elementRef.current; if (!isButtonElement(element)) { return; } if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) { element.disabled = false; } }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]); useIsoLayoutEffect(updateDisabled, [updateDisabled]); const getButtonProps = React17.useCallback((externalProps = {}) => { const { onClick: externalOnClick, onMouseDown: externalOnMouseDown, onKeyUp: externalOnKeyUp, onKeyDown: externalOnKeyDown, onPointerDown: externalOnPointerDown, ...otherExternalProps } = externalProps; return mergeProps({ onClick(event) { if (disabled2) { event.preventDefault(); return; } externalOnClick?.(event); }, onMouseDown(event) { if (!disabled2) { externalOnMouseDown?.(event); } }, onKeyDown(event) { if (disabled2) { return; } makeEventPreventable(event); externalOnKeyDown?.(event); if (event.baseUIHandlerPrevented) { return; } const isCurrentTarget = event.target === event.currentTarget; const currentTarget = event.currentTarget; const isButton2 = isButtonElement(currentTarget); const isLink = !isNativeButton && isValidLinkElement(currentTarget); const shouldClick = isCurrentTarget && (isNativeButton ? isButton2 : !isLink); const isEnterKey = event.key === "Enter"; const isSpaceKey = event.key === " "; const role = currentTarget.getAttribute("role"); const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell"; if (isCurrentTarget && isCompositeItem && isSpaceKey) { if (event.defaultPrevented && isTextNavigationRole) { return; } event.preventDefault(); if (isLink || isNativeButton && isButton2) { currentTarget.click(); event.preventBaseUIHandler(); } else if (shouldClick) { externalOnClick?.(event); event.preventBaseUIHandler(); } return; } if (shouldClick) { if (!isNativeButton && (isSpaceKey || isEnterKey)) { event.preventDefault(); } if (!isNativeButton && isEnterKey) { externalOnClick?.(event); } } }, onKeyUp(event) { if (disabled2) { return; } makeEventPreventable(event); externalOnKeyUp?.(event); if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") { event.preventDefault(); return; } if (event.baseUIHandlerPrevented) { return; } if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && event.key === " ") { externalOnClick?.(event); } }, onPointerDown(event) { if (disabled2) { event.preventDefault(); return; } externalOnPointerDown?.(event); } }, isNativeButton ? { type: "button" } : { role: "button" }, focusableWhenDisabledProps, otherExternalProps); }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]); const buttonRef = useStableCallback((element) => { elementRef.current = element; updateDisabled(); }); return { getButtonProps, buttonRef }; } function isButtonElement(elem) { return isHTMLElement(elem) && elem.tagName === "BUTTON"; } function isValidLinkElement(elem) { return Boolean(elem?.tagName === "A" && elem?.href); } // node_modules/@base-ui/utils/esm/detectBrowser.js var hasNavigator = typeof navigator !== "undefined"; var nav = getNavigatorData(); var platform = getPlatform(); var userAgent = getUserAgent(); var isWebKit2 = typeof CSS === "undefined" || !CSS.supports ? false : CSS.supports("-webkit-backdrop-filter:none"); var isIOS = ( // iPads can claim to be MacIntel nav.platform === "MacIntel" && nav.maxTouchPoints > 1 ? true : /iP(hone|ad|od)|iOS/.test(nav.platform) ); var isFirefox = hasNavigator && /firefox/i.test(userAgent); var isSafari = hasNavigator && /apple/i.test(navigator.vendor); var isEdge = hasNavigator && /Edg/i.test(userAgent); var isAndroid = hasNavigator && /android/i.test(platform) || /android/i.test(userAgent); var isMac = hasNavigator && platform.toLowerCase().startsWith("mac") && !navigator.maxTouchPoints; var isJSDOM = userAgent.includes("jsdom/"); function getNavigatorData() { if (!hasNavigator) { return { platform: "", maxTouchPoints: -1 }; } const uaData = navigator.userAgentData; if (uaData?.platform) { return { platform: uaData.platform, maxTouchPoints: navigator.maxTouchPoints }; } return { platform: navigator.platform ?? "", maxTouchPoints: navigator.maxTouchPoints ?? -1 }; } function getUserAgent() { if (!hasNavigator) { return ""; } const uaData = navigator.userAgentData; if (uaData && Array.isArray(uaData.brands)) { return uaData.brands.map(({ brand, version: version2 }) => `${brand}/${version2}`).join(" "); } return navigator.userAgent; } function getPlatform() { if (!hasNavigator) { return ""; } const uaData = navigator.userAgentData; if (uaData?.platform) { return uaData.platform; } return navigator.platform ?? ""; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; var ARROW_LEFT = "ArrowLeft"; var ARROW_RIGHT = "ArrowRight"; var ARROW_UP = "ArrowUp"; var ARROW_DOWN = "ArrowDown"; // node_modules/@base-ui/react/esm/internals/shadowDom.js function activeElement(doc) { let element = doc.activeElement; while (element?.shadowRoot?.activeElement != null) { element = element.shadowRoot.activeElement; } return element; } function contains(parent, child) { if (!parent || !child) { return false; } const rootNode = child.getRootNode?.(); if (parent.contains(child)) { return true; } if (rootNode && isShadowRoot(rootNode)) { let next = child; while (next) { if (parent === next) { return true; } next = next.parentNode || next.host; } } return false; } function getTarget(event) { if ("composedPath" in event) { return event.composedPath()[0]; } return event.target; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js function isTargetInsideEnabledTrigger(target, triggerElements) { if (!isElement(target)) { return false; } const targetElement = target; if (triggerElements.hasElement(targetElement)) { return !targetElement.hasAttribute("data-trigger-disabled"); } for (const [, trigger] of triggerElements.entries()) { if (contains(trigger, targetElement)) { return !trigger.hasAttribute("data-trigger-disabled"); } } return false; } function isEventTargetWithin(event, node) { if (node == null) { return false; } if ("composedPath" in event) { return event.composedPath().includes(node); } const eventAgain = event; return eventAgain.target != null && node.contains(eventAgain.target); } function isRootElement(element) { return element.matches("html,body"); } function isTypeableElement(element) { return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); } function isInteractiveElement(element) { return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null; } function isTypeableCombobox(element) { if (!element) { return false; } return element.getAttribute("role") === "combobox" && isTypeableElement(element); } function matchesFocusVisible(element) { if (!element || isJSDOM) { return true; } try { return element.matches(":focus-visible"); } catch (_e) { return true; } } function getFloatingFocusElement(floatingElement) { if (!floatingElement) { return null; } return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(`[${FOCUSABLE_ATTRIBUTE}]`) || floatingElement; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js function getNodeChildren(nodes, id, onlyOpenChildren = true) { const directChildren = nodes.filter((node) => node.parentId === id); return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); } function getNodeAncestors(nodes, id) { let allAncestors = []; let currentParentId = nodes.find((node) => node.id === id)?.parentId; while (currentParentId) { const currentNode = nodes.find((node) => node.id === currentParentId); currentParentId = currentNode?.parentId; if (currentNode) { allAncestors = allAncestors.concat(currentNode); } } return allAncestors; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js function stopEvent(event) { event.preventDefault(); event.stopPropagation(); } function isReactEvent(event) { return "nativeEvent" in event; } function isVirtualClick(event) { if (event.pointerType === "" && event.isTrusted) { return true; } if (isAndroid && event.pointerType) { return event.type === "click" && event.buttons === 1; } return event.detail === 0 && !event.pointerType; } function isVirtualPointerEvent(event) { if (isJSDOM) { return false; } return !isAndroid && event.width === 0 && event.height === 0 || isAndroid && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "mouse" || // iOS VoiceOver returns 0.333• for width/height. event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "touch"; } function isMouseLikePointerType(pointerType, strict) { const values = ["mouse", "pen"]; if (!strict) { values.push("", void 0); } return values.includes(pointerType); } function isClickLikeEvent(event) { const type = event.type; return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; } // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs var sides = ["top", "right", "bottom", "left"]; var min = Math.min; var max = Math.max; var round = Math.round; var floor = Math.floor; var createCoords = (v2) => ({ x: v2, y: v2 }); var oppositeSideMap = { left: "right", right: "left", bottom: "top", top: "bottom" }; function clamp(start, value, end) { return max(start, min(value, end)); } function evaluate(value, param) { return typeof value === "function" ? value(param) : value; } function getSide(placement) { return placement.split("-")[0]; } function getAlignment(placement) { return placement.split("-")[1]; } function getOppositeAxis(axis) { return axis === "x" ? "y" : "x"; } function getAxisLength(axis) { return axis === "y" ? "height" : "width"; } function getSideAxis(placement) { const firstChar = placement[0]; return firstChar === "t" || firstChar === "b" ? "y" : "x"; } function getAlignmentAxis(placement) { return getOppositeAxis(getSideAxis(placement)); } function getAlignmentSides(placement, rects, rtl) { if (rtl === void 0) { rtl = false; } const alignment = getAlignment(placement); const alignmentAxis = getAlignmentAxis(placement); const length = getAxisLength(alignmentAxis); let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; if (rects.reference[length] > rects.floating[length]) { mainAlignmentSide = getOppositePlacement(mainAlignmentSide); } return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; } function getExpandedPlacements(placement) { const oppositePlacement = getOppositePlacement(placement); return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; } function getOppositeAlignmentPlacement(placement) { return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); } var lrPlacement = ["left", "right"]; var rlPlacement = ["right", "left"]; var tbPlacement = ["top", "bottom"]; var btPlacement = ["bottom", "top"]; function getSideList(side, isStart, rtl) { switch (side) { case "top": case "bottom": if (rtl) return isStart ? rlPlacement : lrPlacement; return isStart ? lrPlacement : rlPlacement; case "left": case "right": return isStart ? tbPlacement : btPlacement; default: return []; } } function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { const alignment = getAlignment(placement); let list = getSideList(getSide(placement), direction === "start", rtl); if (alignment) { list = list.map((side) => side + "-" + alignment); if (flipAlignment) { list = list.concat(list.map(getOppositeAlignmentPlacement)); } } return list; } function getOppositePlacement(placement) { const side = getSide(placement); return oppositeSideMap[side] + placement.slice(side.length); } function expandPaddingObject(padding) { return { top: 0, right: 0, bottom: 0, left: 0, ...padding }; } function getPaddingObject(padding) { return typeof padding !== "number" ? expandPaddingObject(padding) : { top: padding, right: padding, bottom: padding, left: padding }; } function rectToClientRect(rect) { const { x: x2, y: y2, width, height } = rect; return { width, height, top: y2, left: x2, right: x2 + width, bottom: y2 + height, x: x2, y: y2 }; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js function isDifferentGridRow(index2, cols, prevRow) { return Math.floor(index2 / cols) !== prevRow; } function isIndexOutOfListBounds(list, index2) { return index2 < 0 || index2 >= list.length; } function getMinListIndex(listRef, disabledIndices) { return findNonDisabledListIndex(listRef.current, { disabledIndices }); } function getMaxListIndex(listRef, disabledIndices) { return findNonDisabledListIndex(listRef.current, { decrement: true, startingIndex: listRef.current.length, disabledIndices }); } function findNonDisabledListIndex(list, { startingIndex = -1, decrement = false, disabledIndices, amount = 1 } = {}) { let index2 = startingIndex; do { index2 += decrement ? -amount : amount; } while (index2 >= 0 && index2 <= list.length - 1 && isListIndexDisabled(list, index2, disabledIndices)); return index2; } function getGridNavigatedIndex(list, { event, orientation, loopFocus, onLoop, rtl, cols, disabledIndices, minIndex, maxIndex, prevIndex, stopEvent: stop = false }) { let nextIndex = prevIndex; let verticalDirection; if (event.key === ARROW_UP) { verticalDirection = "up"; } else if (event.key === ARROW_DOWN) { verticalDirection = "down"; } if (verticalDirection) { const rows = []; const rowIndexMap = []; let hasRoleRow = false; let visibleItemCount = 0; { let currentRowEl = null; let currentRowIndex = -1; list.forEach((el, idx) => { if (el == null) { return; } visibleItemCount += 1; const rowEl = el.closest('[role="row"]'); if (rowEl) { hasRoleRow = true; } if (rowEl !== currentRowEl || currentRowIndex === -1) { currentRowEl = rowEl; currentRowIndex += 1; rows[currentRowIndex] = []; } rows[currentRowIndex].push(idx); rowIndexMap[idx] = currentRowIndex; }); } let hasDomRows = false; let inferredDomCols = 0; if (hasRoleRow) { for (const row of rows) { const rowLength = row.length; if (rowLength > inferredDomCols) { inferredDomCols = rowLength; } if (rowLength !== cols) { hasDomRows = true; } } } const hasVirtualizedGaps = hasDomRows && visibleItemCount < list.length; const verticalCols = inferredDomCols || cols; const navigateVertically = (direction) => { if (!hasDomRows || prevIndex === -1) { return void 0; } const currentRow = rowIndexMap[prevIndex]; if (currentRow == null) { return void 0; } const colInRow = rows[currentRow].indexOf(prevIndex); const step = direction === "up" ? -1 : 1; for (let nextRow = currentRow + step, i2 = 0; i2 < rows.length; i2 += 1, nextRow += step) { if (nextRow < 0 || nextRow >= rows.length) { if (!loopFocus || hasVirtualizedGaps) { return void 0; } nextRow = nextRow < 0 ? rows.length - 1 : 0; if (onLoop) { const clampedCol = Math.min(colInRow, rows[nextRow].length - 1); const targetItemIndex = rows[nextRow][clampedCol] ?? rows[nextRow][0]; const returnedItemIndex = onLoop(event, prevIndex, targetItemIndex); nextRow = rowIndexMap[returnedItemIndex] ?? nextRow; } } const targetRow = rows[nextRow]; for (let col = Math.min(colInRow, targetRow.length - 1); col >= 0; col -= 1) { const candidate = targetRow[col]; if (!isListIndexDisabled(list, candidate, disabledIndices)) { return candidate; } } } return void 0; }; const navigateVerticallyWithInferredRows = (direction) => { if (!hasVirtualizedGaps || prevIndex === -1) { return void 0; } const colInRow = prevIndex % verticalCols; const rowStep = direction === "up" ? -verticalCols : verticalCols; const lastRowStart = maxIndex - maxIndex % verticalCols; const rowCount = floor(maxIndex / verticalCols) + 1; for (let rowStart = prevIndex - colInRow + rowStep, i2 = 0; i2 < rowCount; i2 += 1, rowStart += rowStep) { if (rowStart < 0 || rowStart > maxIndex) { if (!loopFocus) { return void 0; } rowStart = rowStart < 0 ? lastRowStart : 0; } const rowEnd = Math.min(rowStart + verticalCols - 1, maxIndex); for (let candidate = Math.min(rowStart + colInRow, rowEnd); candidate >= rowStart; candidate -= 1) { if (!isListIndexDisabled(list, candidate, disabledIndices)) { return candidate; } } } return void 0; }; if (stop) { stopEvent(event); } const verticalCandidate = navigateVertically(verticalDirection) ?? navigateVerticallyWithInferredRows(verticalDirection); if (verticalCandidate !== void 0) { nextIndex = verticalCandidate; } else if (prevIndex === -1) { nextIndex = verticalDirection === "up" ? maxIndex : minIndex; } else { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex, amount: verticalCols, decrement: verticalDirection === "up", disabledIndices }); if (loopFocus) { if (verticalDirection === "up" && (prevIndex - verticalCols < minIndex || nextIndex < 0)) { const col = prevIndex % verticalCols; const maxCol = maxIndex % verticalCols; const offset4 = maxIndex - (maxCol - col); if (maxCol === col) { nextIndex = maxIndex; } else { nextIndex = maxCol > col ? offset4 : offset4 - verticalCols; } if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } if (verticalDirection === "down" && prevIndex + verticalCols > maxIndex) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex % verticalCols - verticalCols, amount: verticalCols, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } } } if (isIndexOutOfListBounds(list, nextIndex)) { nextIndex = prevIndex; } } if (orientation === "both") { const prevRow = floor(prevIndex / cols); if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) { if (stop) { stopEvent(event); } if (prevIndex % cols !== cols - 1) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex, disabledIndices }); if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex - prevIndex % cols - 1, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } } else if (loopFocus) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex - prevIndex % cols - 1, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } if (isDifferentGridRow(nextIndex, cols, prevRow)) { nextIndex = prevIndex; } } if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) { if (stop) { stopEvent(event); } if (prevIndex % cols !== 0) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex, decrement: true, disabledIndices }); if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex + (cols - prevIndex % cols), decrement: true, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } } else if (loopFocus) { nextIndex = findNonDisabledListIndex(list, { startingIndex: prevIndex + (cols - prevIndex % cols), decrement: true, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } if (isDifferentGridRow(nextIndex, cols, prevRow)) { nextIndex = prevIndex; } } const lastRow = floor(maxIndex / cols) === prevRow; if (isIndexOutOfListBounds(list, nextIndex)) { if (loopFocus && lastRow) { nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(list, { startingIndex: prevIndex - prevIndex % cols - 1, disabledIndices }); if (onLoop) { nextIndex = onLoop(event, prevIndex, nextIndex); } } else { nextIndex = prevIndex; } } } return nextIndex; } function createGridCellMap(sizes, cols, dense) { const cellMap = []; let startIndex = 0; sizes.forEach(({ width, height }, index2) => { if (width > cols) { if (true) { throw new Error(`[Floating UI]: Invalid grid - item width at index ${index2} is greater than grid columns`); } } let itemPlaced = false; if (dense) { startIndex = 0; } while (!itemPlaced) { const targetCells = []; for (let i2 = 0; i2 < width; i2 += 1) { for (let j2 = 0; j2 < height; j2 += 1) { targetCells.push(startIndex + i2 + j2 * cols); } } if (startIndex % cols + width <= cols && targetCells.every((cell) => cellMap[cell] == null)) { targetCells.forEach((cell) => { cellMap[cell] = index2; }); itemPlaced = true; } else { startIndex += 1; } } }); return [...cellMap]; } function getGridCellIndexOfCorner(index2, sizes, cellMap, cols, corner) { if (index2 === -1) { return -1; } const firstCellIndex = cellMap.indexOf(index2); const sizeItem = sizes[index2]; switch (corner) { case "tl": return firstCellIndex; case "tr": if (!sizeItem) { return firstCellIndex; } return firstCellIndex + sizeItem.width - 1; case "bl": if (!sizeItem) { return firstCellIndex; } return firstCellIndex + (sizeItem.height - 1) * cols; case "br": return cellMap.lastIndexOf(index2); default: return -1; } } function getGridCellIndices(indices, cellMap) { return cellMap.flatMap((index2, cellIndex) => indices.includes(index2) ? [cellIndex] : []); } function isListIndexDisabled(list, index2, disabledIndices) { const isExplicitlyDisabled = typeof disabledIndices === "function" ? disabledIndices(index2) : disabledIndices?.includes(index2) ?? false; if (isExplicitlyDisabled) { return true; } const element = list[index2]; if (!element) { return false; } if (!isElementVisible(element)) { return true; } return !disabledIndices && (element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true"); } function isHiddenByStyles(styles) { return styles.visibility === "hidden" || styles.visibility === "collapse"; } function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { return false; } if (typeof element.checkVisibility === "function") { return element.checkVisibility(); } return styles.display !== "none" && styles.display !== "contents"; } // node_modules/@base-ui/utils/esm/owner.js function ownerDocument(node) { return node?.ownerDocument || document; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; function getParentElement(element) { const assignedSlot = element.assignedSlot; if (assignedSlot) { return assignedSlot; } if (element.parentElement) { return element.parentElement; } const rootNode = element.getRootNode(); return isShadowRoot(rootNode) ? rootNode.host : null; } function getDetailsSummary(details) { for (const child of Array.from(details.children)) { if (getNodeName(child) === "summary") { return child; } } return null; } function isWithinOpenDetailsSummary(element, details) { const summary = getDetailsSummary(details); return !!summary && (element === summary || contains(summary, element)); } function isFocusableCandidate(element) { const nodeName = element ? getNodeName(element) : ""; return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== "summary" || element.parentElement != null && getNodeName(element.parentElement) === "details" && getDetailsSummary(element.parentElement) === element) && (nodeName !== "details" || getDetailsSummary(element) == null) && (nodeName !== "input" || element.type !== "hidden"); } function isFocusableElement(element) { if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { return false; } for (let current = element; current; current = getParentElement(current)) { const isAncestor = current !== element; const isSlot = getNodeName(current) === "slot"; if (current.hasAttribute("inert")) { return false; } if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { return false; } } return true; } function isVisibleInTabbableTree(element, isAncestor) { const styles = getComputedStyle2(element); if (!isAncestor) { return isElementVisible(element, styles); } return styles.display !== "none"; } function getTabIndex(element) { const tabIndex = element.tabIndex; if (tabIndex < 0) { const nodeName = getNodeName(element); if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { return 0; } } return tabIndex; } function getNamedRadioInput(element) { if (getNodeName(element) !== "input") { return null; } const input = element; return input.type === "radio" && input.name !== "" ? input : null; } function isTabbableRadio(element, candidates) { const input = getNamedRadioInput(element); if (!input) { return true; } const checkedRadio = candidates.find((candidate) => { const radio = getNamedRadioInput(candidate); return radio?.name === input.name && radio.form === input.form && radio.checked; }); if (checkedRadio) { return checkedRadio === input; } return candidates.find((candidate) => { const radio = getNamedRadioInput(candidate); return radio?.name === input.name && radio.form === input.form; }) === input; } function getComposedChildren(container) { if (isHTMLElement(container) && getNodeName(container) === "slot") { const assignedElements = container.assignedElements({ flatten: true }); if (assignedElements.length > 0) { return assignedElements; } } if (isHTMLElement(container) && container.shadowRoot) { return Array.from(container.shadowRoot.children); } return Array.from(container.children); } function appendCandidates(container, list) { getComposedChildren(container).forEach((child) => { if (isFocusableCandidate(child)) { list.push(child); } appendCandidates(child, list); }); } function appendMatchingElements(container, selector2, list) { getComposedChildren(container).forEach((child) => { if (isHTMLElement(child) && child.matches(selector2)) { list.push(child); } appendMatchingElements(child, selector2, list); }); } function isTabbable(element) { return isFocusableElement(element) && getTabIndex(element) >= 0; } function focusable(container) { const candidates = []; appendCandidates(container, candidates); return candidates.filter(isFocusableElement); } function tabbable(container) { const candidates = focusable(container); return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); } function getTabbableIn(container, dir) { const list = tabbable(container); const len = list.length; if (len === 0) { return void 0; } const active = activeElement(ownerDocument(container)); const index2 = list.indexOf(active); const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; return list[nextIndex]; } function getNextTabbable(referenceElement) { return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; } function getPreviousTabbable(referenceElement) { return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; } function isOutsideEvent(event, container) { const containerElement = container || event.currentTarget; const relatedTarget = event.relatedTarget; return !relatedTarget || !contains(containerElement, relatedTarget); } function disableFocusInside(container) { const tabbableElements = tabbable(container); tabbableElements.forEach((element) => { element.dataset.tabindex = element.getAttribute("tabindex") || ""; element.setAttribute("tabindex", "-1"); }); } function enableFocusInside(container) { const elements = []; appendMatchingElements(container, "[data-tabindex]", elements); elements.forEach((element) => { const tabindex = element.dataset.tabindex; delete element.dataset.tabindex; if (tabindex) { element.setAttribute("tabindex", tabindex); } else { element.removeAttribute("tabindex"); } }); } // node_modules/@base-ui/utils/esm/addEventListener.js function addEventListener(target, type, listener, options) { target.addEventListener(type, listener, options); return () => { target.removeEventListener(type, listener, options); }; } // node_modules/@base-ui/utils/esm/useValueAsRef.js function useValueAsRef(value) { const latest = useRefWithInit(createLatestRef, value).current; latest.next = value; useIsoLayoutEffect(latest.effect); return latest; } function createLatestRef(value) { const latest = { current: value, next: value, effect: () => { latest.current = latest.next; } }; return latest; } // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js var React18 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js var ReactDOM = __toESM(require_react_dom(), 1); // node_modules/@base-ui/react/esm/utils/resolveRef.js function resolveRef(maybeRef) { if (maybeRef == null) { return maybeRef; } return "current" in maybeRef ? maybeRef.current : maybeRef; } // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, treatAbortedAsFinished = true) { const frame = useAnimationFrame(); return useStableCallback((fnToExecute, signal = null) => { frame.cancel(); const element = resolveRef(elementOrRef); if (element == null) { return; } const resolvedElement = element; const done = () => { ReactDOM.flushSync(fnToExecute); }; if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { fnToExecute(); return; } function exec() { Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => { if (!signal?.aborted) { done(); } }).catch(() => { if (treatAbortedAsFinished) { if (!signal?.aborted) { done(); } return; } const currentAnimations = resolvedElement.getAnimations(); if (!signal?.aborted && currentAnimations.length > 0 && currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { exec(); } }); } if (waitForStartingStyleRemoved) { const startingStyleAttribute = TransitionStatusDataAttributes.startingStyle; if (!resolvedElement.hasAttribute(startingStyleAttribute)) { frame.request(exec); return; } const attributeObserver = new MutationObserver(() => { if (!resolvedElement.hasAttribute(startingStyleAttribute)) { attributeObserver.disconnect(); exec(); } }); attributeObserver.observe(resolvedElement, { attributes: true, attributeFilter: [startingStyleAttribute] }); signal?.addEventListener("abort", () => attributeObserver.disconnect(), { once: true }); return; } frame.request(exec); }); } // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js function useOpenChangeComplete(parameters) { const { enabled = true, open, ref, onComplete: onCompleteParam } = parameters; const onComplete = useStableCallback(onCompleteParam); const runOnceAnimationsFinish = useAnimationsFinished(ref, open, false); React18.useEffect(() => { if (!enabled) { return void 0; } const abortController = new AbortController(); runOnceAnimationsFinish(onComplete, abortController.signal); return () => { abortController.abort(); }; }, [enabled, open, onComplete, runOnceAnimationsFinish]); } // node_modules/@base-ui/utils/esm/useOnFirstRender.js var React19 = __toESM(require_react(), 1); function useOnFirstRender(fn) { const ref = React19.useRef(true); if (ref.current) { ref.current = false; fn(); } } // node_modules/@base-ui/utils/esm/useTimeout.js var EMPTY3 = 0; var Timeout = class _Timeout { static create() { return new _Timeout(); } currentId = EMPTY3; /** * Executes `fn` after `delay`, clearing any previously scheduled call. */ start(delay, fn) { this.clear(); this.currentId = setTimeout(() => { this.currentId = EMPTY3; fn(); }, delay); } isStarted() { return this.currentId !== EMPTY3; } clear = () => { if (this.currentId !== EMPTY3) { clearTimeout(this.currentId); this.currentId = EMPTY3; } }; disposeEffect = () => { return this.clear; }; }; function useTimeout() { const timeout = useRefWithInit(Timeout.create).current; useOnMount(timeout.disposeEffect); return timeout; } // node_modules/@base-ui/utils/esm/useScrollLock.js var originalHtmlStyles = {}; var originalBodyStyles = {}; var originalHtmlScrollBehavior = ""; function hasInsetScrollbars(referenceElement) { if (typeof document === "undefined") { return false; } const doc = ownerDocument(referenceElement); const win = getWindow(doc); return win.innerWidth - doc.documentElement.clientWidth > 0; } function supportsStableScrollbarGutter(referenceElement) { const supported = typeof CSS !== "undefined" && CSS.supports && CSS.supports("scrollbar-gutter", "stable"); if (!supported || typeof document === "undefined") { return false; } const doc = ownerDocument(referenceElement); const html = doc.documentElement; const body = doc.body; const scrollContainer = isOverflowElement(html) ? html : body; const originalScrollContainerOverflowY = scrollContainer.style.overflowY; const originalHtmlStyleGutter = html.style.scrollbarGutter; html.style.scrollbarGutter = "stable"; scrollContainer.style.overflowY = "scroll"; const before = scrollContainer.offsetWidth; scrollContainer.style.overflowY = "hidden"; const after = scrollContainer.offsetWidth; scrollContainer.style.overflowY = originalScrollContainerOverflowY; html.style.scrollbarGutter = originalHtmlStyleGutter; return before === after; } function preventScrollOverlayScrollbars(referenceElement) { const doc = ownerDocument(referenceElement); const html = doc.documentElement; const body = doc.body; const elementToLock = isOverflowElement(html) ? html : body; const originalElementToLockStyles = { overflowY: elementToLock.style.overflowY, overflowX: elementToLock.style.overflowX }; Object.assign(elementToLock.style, { overflowY: "hidden", overflowX: "hidden" }); return () => { Object.assign(elementToLock.style, originalElementToLockStyles); }; } function preventScrollInsetScrollbars(referenceElement) { const doc = ownerDocument(referenceElement); const html = doc.documentElement; const body = doc.body; const win = getWindow(html); let scrollTop = 0; let scrollLeft = 0; let updateGutterOnly = false; const resizeFrame = AnimationFrame.create(); if (isWebKit2 && (win.visualViewport?.scale ?? 1) !== 1) { return () => { }; } function lockScroll() { const htmlStyles = win.getComputedStyle(html); const bodyStyles = win.getComputedStyle(body); const htmlScrollbarGutterValue = htmlStyles.scrollbarGutter || ""; const hasBothEdges = htmlScrollbarGutterValue.includes("both-edges"); const scrollbarGutterValue = hasBothEdges ? "stable both-edges" : "stable"; scrollTop = html.scrollTop; scrollLeft = html.scrollLeft; originalHtmlStyles = { scrollbarGutter: html.style.scrollbarGutter, overflowY: html.style.overflowY, overflowX: html.style.overflowX }; originalHtmlScrollBehavior = html.style.scrollBehavior; originalBodyStyles = { position: body.style.position, height: body.style.height, width: body.style.width, boxSizing: body.style.boxSizing, overflowY: body.style.overflowY, overflowX: body.style.overflowX, scrollBehavior: body.style.scrollBehavior }; const isScrollableY = html.scrollHeight > html.clientHeight; const isScrollableX = html.scrollWidth > html.clientWidth; const hasConstantOverflowY = htmlStyles.overflowY === "scroll" || bodyStyles.overflowY === "scroll"; const hasConstantOverflowX = htmlStyles.overflowX === "scroll" || bodyStyles.overflowX === "scroll"; const scrollbarWidth = Math.max(0, win.innerWidth - body.clientWidth); const scrollbarHeight = Math.max(0, win.innerHeight - body.clientHeight); const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom); const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight); const elementToLock = isOverflowElement(html) ? html : body; updateGutterOnly = supportsStableScrollbarGutter(referenceElement); if (updateGutterOnly) { html.style.scrollbarGutter = scrollbarGutterValue; elementToLock.style.overflowY = "hidden"; elementToLock.style.overflowX = "hidden"; return; } Object.assign(html.style, { scrollbarGutter: scrollbarGutterValue, overflowY: "hidden", overflowX: "hidden" }); if (isScrollableY || hasConstantOverflowY) { html.style.overflowY = "scroll"; } if (isScrollableX || hasConstantOverflowX) { html.style.overflowX = "scroll"; } Object.assign(body.style, { position: "relative", height: marginY || scrollbarHeight ? `calc(100dvh - ${marginY + scrollbarHeight}px)` : "100dvh", width: marginX || scrollbarWidth ? `calc(100vw - ${marginX + scrollbarWidth}px)` : "100vw", boxSizing: "border-box", overflow: "hidden", scrollBehavior: "unset" }); body.scrollTop = scrollTop; body.scrollLeft = scrollLeft; html.setAttribute("data-base-ui-scroll-locked", ""); html.style.scrollBehavior = "unset"; } function cleanup() { Object.assign(html.style, originalHtmlStyles); Object.assign(body.style, originalBodyStyles); if (!updateGutterOnly) { html.scrollTop = scrollTop; html.scrollLeft = scrollLeft; html.removeAttribute("data-base-ui-scroll-locked"); html.style.scrollBehavior = originalHtmlScrollBehavior; } } function handleResize() { cleanup(); resizeFrame.request(lockScroll); } lockScroll(); const unsubscribeResize = addEventListener(win, "resize", handleResize); return () => { resizeFrame.cancel(); cleanup(); if (typeof win.removeEventListener === "function") { unsubscribeResize(); } }; } var ScrollLocker = class { lockCount = 0; restore = null; timeoutLock = Timeout.create(); timeoutUnlock = Timeout.create(); acquire(referenceElement) { this.lockCount += 1; if (this.lockCount === 1 && this.restore === null) { this.timeoutLock.start(0, () => this.lock(referenceElement)); } return this.release; } release = () => { this.lockCount -= 1; if (this.lockCount === 0 && this.restore) { this.timeoutUnlock.start(0, this.unlock); } }; unlock = () => { if (this.lockCount === 0 && this.restore) { this.restore?.(); this.restore = null; } }; lock(referenceElement) { if (this.lockCount === 0 || this.restore !== null) { return; } const doc = ownerDocument(referenceElement); const html = doc.documentElement; const htmlOverflowY = getWindow(html).getComputedStyle(html).overflowY; if (htmlOverflowY === "hidden" || htmlOverflowY === "clip") { this.restore = NOOP; return; } const hasOverlayScrollbars = isIOS || !hasInsetScrollbars(referenceElement); this.restore = hasOverlayScrollbars ? preventScrollOverlayScrollbars(referenceElement) : preventScrollInsetScrollbars(referenceElement); } }; var SCROLL_LOCKER = new ScrollLocker(); function useScrollLock(enabled = true, referenceElement = null) { useIsoLayoutEffect(() => { if (!enabled) { return void 0; } return SCROLL_LOCKER.acquire(referenceElement); }, [enabled, referenceElement]); } // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js var React20 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.js function resolveValue(value, pointerType) { if (pointerType != null && !isMouseLikePointerType(pointerType)) { return 0; } if (typeof value === "function") { return value(); } return value; } function getDelay(value, prop, pointerType) { const result = resolveValue(value, pointerType); if (typeof result === "number") { return result; } return result?.[prop]; } function getRestMs(value) { if (typeof value === "function") { return value(); } return value; } function isClickLikeOpenEvent(openEventType, interactedInside) { return interactedInside || openEventType === "click" || openEventType === "mousedown"; } function isHoverOpenEvent(openEventType) { return openEventType?.includes("mouse") && openEventType !== "mousedown"; } // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); var FloatingDelayGroupContext = /* @__PURE__ */ React20.createContext({ hasProvider: false, timeoutMs: 0, delayRef: { current: 0 }, initialDelayRef: { current: 0 }, timeout: new Timeout(), currentIdRef: { current: null }, currentContextRef: { current: null } }); if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; function FloatingDelayGroup(props) { const { children, delay, timeoutMs = 0 } = props; const delayRef = React20.useRef(delay); const initialDelayRef = React20.useRef(delay); const currentIdRef = React20.useRef(null); const currentContextRef = React20.useRef(null); const timeout = useTimeout(); return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(FloatingDelayGroupContext.Provider, { value: React20.useMemo(() => ({ hasProvider: true, delayRef, initialDelayRef, currentIdRef, timeoutMs, currentContextRef, timeout }), [timeoutMs, timeout]), children }); } function useDelayGroup(context, options = { open: false }) { const { open } = options; const store = "rootStore" in context ? context.rootStore : context; const floatingId = store.useState("floatingId"); const groupContext = React20.useContext(FloatingDelayGroupContext); const { currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, hasProvider, timeout } = groupContext; const [isInstantPhase, setIsInstantPhase] = React20.useState(false); useIsoLayoutEffect(() => { function unset() { setIsInstantPhase(false); currentContextRef.current?.setIsInstantPhase(false); currentIdRef.current = null; currentContextRef.current = null; delayRef.current = initialDelayRef.current; } if (!currentIdRef.current) { return void 0; } if (!open && currentIdRef.current === floatingId) { setIsInstantPhase(false); if (timeoutMs) { const closingId = floatingId; timeout.start(timeoutMs, () => { if (store.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { return; } unset(); }); return () => { timeout.clear(); }; } unset(); } return void 0; }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store]); useIsoLayoutEffect(() => { if (!open) { return; } const prevContext = currentContextRef.current; const prevId = currentIdRef.current; timeout.clear(); currentContextRef.current = { onOpenChange: store.setOpen, setIsInstantPhase }; currentIdRef.current = floatingId; delayRef.current = { open: 0, close: getDelay(initialDelayRef.current, "close") }; if (prevId !== null && prevId !== floatingId) { setIsInstantPhase(true); prevContext?.setIsInstantPhase(true); prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); } else { setIsInstantPhase(false); prevContext?.setIsInstantPhase(false); } }, [open, floatingId, store, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); useIsoLayoutEffect(() => { return () => { currentContextRef.current = null; }; }, [currentContextRef]); return React20.useMemo(() => ({ hasProvider, delayRef, isInstantPhase }), [hasProvider, delayRef, isInstantPhase]); } // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js var React24 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/mergeCleanups.js function mergeCleanups(...cleanups) { return () => { for (let i2 = 0; i2 < cleanups.length; i2 += 1) { const cleanup = cleanups[i2]; if (cleanup) { cleanup(); } } }; } // node_modules/@base-ui/react/esm/utils/FocusGuard.js var React21 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/visuallyHidden.js var visuallyHiddenBase = { clipPath: "inset(50%)", overflow: "hidden", whiteSpace: "nowrap", border: 0, padding: 0, width: 1, height: 1, margin: -1 }; var visuallyHidden = { ...visuallyHiddenBase, position: "fixed", top: 0, left: 0 }; var visuallyHiddenInput = { ...visuallyHiddenBase, position: "absolute" }; // node_modules/@base-ui/react/esm/utils/FocusGuard.js var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); var FocusGuard = /* @__PURE__ */ React21.forwardRef(function FocusGuard2(props, ref) { const [role, setRole] = React21.useState(); useIsoLayoutEffect(() => { if (isSafari) { setRole("button"); } }, []); const restProps = { tabIndex: 0, // Role is only for VoiceOver role }; return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { ...props, ref, style: visuallyHidden, "aria-hidden": role ? void 0 : true, ...restProps, "data-base-ui-focus-guard": "" }); }); if (true) FocusGuard.displayName = "FocusGuard"; // node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js function createAttribute(name) { return `data-base-ui-${name}`; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js var rafId = 0; function enqueueFocus(el, options = {}) { const { preventScroll = false, sync: sync2 = false, shouldFocus } = options; cancelAnimationFrame(rafId); function exec() { if (shouldFocus && !shouldFocus()) { return; } el?.focus({ preventScroll }); } if (sync2) { exec(); return NOOP; } const currentRafId = requestAnimationFrame(exec); rafId = currentRafId; return () => { if (rafId === currentRafId) { cancelAnimationFrame(currentRafId); rafId = 0; } }; } // node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js var counters = { inert: /* @__PURE__ */ new WeakMap(), "aria-hidden": /* @__PURE__ */ new WeakMap() }; var markerName = "data-base-ui-inert"; var uncontrolledElementsSets = { inert: /* @__PURE__ */ new WeakSet(), "aria-hidden": /* @__PURE__ */ new WeakSet() }; var markerCounterMap = /* @__PURE__ */ new WeakMap(); var lockCount = 0; function getUncontrolledElementsSet(controlAttribute) { return uncontrolledElementsSets[controlAttribute]; } function unwrapHost(node) { if (!node) { return null; } return isShadowRoot(node) ? node.host : unwrapHost(node.parentNode); } var correctElements = (parent, targets) => targets.map((target) => { if (parent.contains(target)) { return target; } const correctedTarget = unwrapHost(target); if (parent.contains(correctedTarget)) { return correctedTarget; } return null; }).filter((x2) => x2 != null); var buildKeepSet = (targets) => { const keep = /* @__PURE__ */ new Set(); targets.forEach((target) => { let node = target; while (node && !keep.has(node)) { keep.add(node); node = node.parentNode; } }); return keep; }; var collectOutsideElements = (root, keepElements, stopElements) => { const outside = []; const walk = (parent) => { if (!parent || stopElements.has(parent)) { return; } Array.from(parent.children).forEach((node) => { if (getNodeName(node) === "script") { return; } if (keepElements.has(node)) { walk(node); } else { outside.push(node); } }); }; walk(root); return outside; }; function applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert, { mark = true, markerIgnoreElements = [] }) { const controlAttribute = inert ? "inert" : ariaHidden ? "aria-hidden" : null; let counterMap = null; let uncontrolledElementsSet = null; const avoidElements = correctElements(body, uncorrectedAvoidElements); const markerIgnoreTargets = mark ? correctElements(body, markerIgnoreElements) : []; const markerIgnoreSet = new Set(markerIgnoreTargets); const markerTargets = mark ? collectOutsideElements(body, buildKeepSet(avoidElements), new Set(avoidElements)).filter((target) => !markerIgnoreSet.has(target)) : []; const hiddenElements = []; const markedElements = []; if (controlAttribute) { const map = counters[controlAttribute]; const currentUncontrolledElementsSet = getUncontrolledElementsSet(controlAttribute); uncontrolledElementsSet = currentUncontrolledElementsSet; counterMap = map; const ariaLiveElements = correctElements(body, Array.from(body.querySelectorAll("[aria-live]"))); const controlElements = avoidElements.concat(ariaLiveElements); const controlTargets = collectOutsideElements(body, buildKeepSet(controlElements), new Set(controlElements)); controlTargets.forEach((node) => { const attr2 = node.getAttribute(controlAttribute); const alreadyHidden = attr2 !== null && attr2 !== "false"; const counterValue = (map.get(node) || 0) + 1; map.set(node, counterValue); hiddenElements.push(node); if (counterValue === 1 && alreadyHidden) { currentUncontrolledElementsSet.add(node); } if (!alreadyHidden) { node.setAttribute(controlAttribute, controlAttribute === "inert" ? "" : "true"); } }); } if (mark) { markerTargets.forEach((node) => { const markerValue = (markerCounterMap.get(node) || 0) + 1; markerCounterMap.set(node, markerValue); markedElements.push(node); if (markerValue === 1) { node.setAttribute(markerName, ""); } }); } lockCount += 1; return () => { if (counterMap) { hiddenElements.forEach((element) => { const currentCounterValue = counterMap.get(element) || 0; const counterValue = currentCounterValue - 1; counterMap.set(element, counterValue); if (!counterValue) { if (!uncontrolledElementsSet?.has(element) && controlAttribute) { element.removeAttribute(controlAttribute); } uncontrolledElementsSet?.delete(element); } }); } if (mark) { markedElements.forEach((element) => { const markerValue = (markerCounterMap.get(element) || 0) - 1; markerCounterMap.set(element, markerValue); if (!markerValue) { element.removeAttribute(markerName); } }); } lockCount -= 1; if (!lockCount) { counters.inert = /* @__PURE__ */ new WeakMap(); counters["aria-hidden"] = /* @__PURE__ */ new WeakMap(); uncontrolledElementsSets.inert = /* @__PURE__ */ new WeakSet(); uncontrolledElementsSets["aria-hidden"] = /* @__PURE__ */ new WeakSet(); markerCounterMap = /* @__PURE__ */ new WeakMap(); } }; } function markOthers(avoidElements, options = {}) { const { ariaHidden = false, inert = false, mark = true, markerIgnoreElements = [] } = options; const body = ownerDocument(avoidElements[0]).body; return applyAttributeToOthers(avoidElements, body, ariaHidden, inert, { mark, markerIgnoreElements }); } // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js var React22 = __toESM(require_react(), 1); var ReactDOM2 = __toESM(require_react_dom(), 1); // node_modules/@base-ui/react/esm/internals/constants.js var DISABLED_TRANSITIONS_STYLE = { style: { transition: "none" } }; var CLICK_TRIGGER_IDENTIFIER = "data-base-ui-click-trigger"; var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; var DROPDOWN_COLLISION_AVOIDANCE = { fallbackAxisSide: "none" }; var POPUP_COLLISION_AVOIDANCE = { fallbackAxisSide: "end" }; var ownerVisuallyHidden = { clipPath: "inset(50%)", position: "fixed", top: 0, left: 0 }; // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); var PortalContext = /* @__PURE__ */ React22.createContext(null); if (true) PortalContext.displayName = "PortalContext"; var usePortalContext = () => React22.useContext(PortalContext); var attr = createAttribute("portal"); function useFloatingPortalNode(props = {}) { const { ref, container: containerProp, componentProps = EMPTY_OBJECT, elementProps } = props; const uniqueId = useId(); const portalContext = usePortalContext(); const parentPortalNode = portalContext?.portalNode; const [containerElement, setContainerElement] = React22.useState(null); const [portalNode, setPortalNode] = React22.useState(null); const setPortalNodeRef = useStableCallback((node) => { if (node !== null) { setPortalNode(node); } }); const containerRef = React22.useRef(null); useIsoLayoutEffect(() => { if (containerProp === null) { if (containerRef.current) { containerRef.current = null; setPortalNode(null); setContainerElement(null); } return; } if (uniqueId == null) { return; } const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; if (resolvedContainer == null) { if (containerRef.current) { containerRef.current = null; setPortalNode(null); setContainerElement(null); } return; } if (containerRef.current !== resolvedContainer) { containerRef.current = resolvedContainer; setPortalNode(null); setContainerElement(resolvedContainer); } }, [containerProp, parentPortalNode, uniqueId]); const portalElement = useRenderElement("div", componentProps, { ref: [ref, setPortalNodeRef], props: [{ id: uniqueId, [attr]: "" }, elementProps] }); const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; return { portalNode, portalSubtree }; } var FloatingPortal = /* @__PURE__ */ React22.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { const { render: render4, className, style, children, container, renderGuards, ...elementProps } = componentProps; const { portalNode, portalSubtree } = useFloatingPortalNode({ container, ref: forwardedRef, componentProps, elementProps }); const beforeOutsideRef = React22.useRef(null); const afterOutsideRef = React22.useRef(null); const beforeInsideRef = React22.useRef(null); const afterInsideRef = React22.useRef(null); const [focusManagerState, setFocusManagerState] = React22.useState(null); const focusInsideDisabledRef = React22.useRef(false); const modal = focusManagerState?.modal; const open = focusManagerState?.open; const shouldRenderGuards = typeof renderGuards === "boolean" ? renderGuards : !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; React22.useEffect(() => { if (!portalNode || modal) { return void 0; } function onFocus(event) { if (portalNode && event.relatedTarget && isOutsideEvent(event)) { if (event.type === "focusin") { if (focusInsideDisabledRef.current) { enableFocusInside(portalNode); focusInsideDisabledRef.current = false; } } else { disableFocusInside(portalNode); focusInsideDisabledRef.current = true; } } } return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); }, [portalNode, modal]); React22.useEffect(() => { if (!portalNode || open !== false) { return; } enableFocusInside(portalNode); focusInsideDisabledRef.current = false; }, [open, portalNode]); const portalContextValue = React22.useMemo(() => ({ beforeOutsideRef, afterOutsideRef, beforeInsideRef, afterInsideRef, portalNode, setFocusManagerState }), [portalNode]); return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(React22.Fragment, { children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(PortalContext.Provider, { value: portalContextValue, children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FocusGuard, { "data-type": "outside", ref: beforeOutsideRef, onFocus: (event) => { if (isOutsideEvent(event, portalNode)) { beforeInsideRef.current?.focus(); } else { const domReference = focusManagerState ? focusManagerState.domReference : null; const prevTabbable = getPreviousTabbable(domReference); prevTabbable?.focus(); } } }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { "aria-owns": portalNode.id, style: ownerVisuallyHidden }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FocusGuard, { "data-type": "outside", ref: afterOutsideRef, onFocus: (event) => { if (isOutsideEvent(event, portalNode)) { afterInsideRef.current?.focus(); } else { const domReference = focusManagerState ? focusManagerState.domReference : null; const nextTabbable = getNextTabbable(domReference); nextTabbable?.focus(); if (focusManagerState?.closeOnFocusOut) { focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); } } } })] })] }); }); if (true) FloatingPortal.displayName = "FloatingPortal"; // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js var React23 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js function createEventEmitter() { const map = /* @__PURE__ */ new Map(); return { emit(event, data) { map.get(event)?.forEach((listener) => listener(data)); }, on(event, listener) { if (!map.has(event)) { map.set(event, /* @__PURE__ */ new Set()); } map.get(event).add(listener); }, off(event, listener) { map.get(event)?.delete(listener); } }; } // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); var FloatingNodeContext = /* @__PURE__ */ React23.createContext(null); if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; var FloatingTreeContext = /* @__PURE__ */ React23.createContext(null); if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; var useFloatingParentNodeId = () => React23.useContext(FloatingNodeContext)?.id || null; var useFloatingTree = (externalTree) => { const contextTree = React23.useContext(FloatingTreeContext); return externalTree ?? contextTree; }; // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); function getEventType(event, lastInteractionType) { const win = getWindow(getTarget(event)); if (event instanceof win.KeyboardEvent) { return "keyboard"; } if (event instanceof win.FocusEvent) { return lastInteractionType || "keyboard"; } if ("pointerType" in event) { return event.pointerType || "keyboard"; } if ("touches" in event) { return "touch"; } if (event instanceof win.MouseEvent) { return lastInteractionType || (event.detail === 0 ? "keyboard" : "mouse"); } return ""; } var LIST_LIMIT = 20; var previouslyFocusedElements = []; function clearDisconnectedPreviouslyFocusedElements() { previouslyFocusedElements = previouslyFocusedElements.filter((entry) => { return entry.deref()?.isConnected; }); } function addPreviouslyFocusedElement(element) { clearDisconnectedPreviouslyFocusedElements(); if (element && getNodeName(element) !== "body") { previouslyFocusedElements.push(new WeakRef(element)); if (previouslyFocusedElements.length > LIST_LIMIT) { previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT); } } } function getPreviouslyFocusedElement() { clearDisconnectedPreviouslyFocusedElements(); return previouslyFocusedElements[previouslyFocusedElements.length - 1]?.deref(); } function getFirstTabbableElement(container) { if (!container) { return null; } if (isTabbable(container)) { return container; } return tabbable(container)[0] || container; } function handleTabIndex(floatingFocusElement, orderRef) { if (floatingFocusElement.hasAttribute("tabindex") && !floatingFocusElement.hasAttribute("data-tabindex")) { return; } if (!orderRef.current.includes("floating") && !floatingFocusElement.getAttribute("role")?.includes("dialog")) { return; } const focusableElements = focusable(floatingFocusElement); const tabbableContent = focusableElements.filter((element) => { const dataTabIndex = element.getAttribute("data-tabindex") || ""; return isTabbable(element) || element.hasAttribute("data-tabindex") && !dataTabIndex.startsWith("-"); }); const tabIndex = floatingFocusElement.getAttribute("tabindex"); if (orderRef.current.includes("floating") || tabbableContent.length === 0) { if (tabIndex !== "0") { floatingFocusElement.setAttribute("tabindex", "0"); } } else if (tabIndex !== "-1" || floatingFocusElement.hasAttribute("data-tabindex") && floatingFocusElement.getAttribute("data-tabindex") !== "-1") { floatingFocusElement.setAttribute("tabindex", "-1"); floatingFocusElement.setAttribute("data-tabindex", "-1"); } } function FloatingFocusManager(props) { const { context, children, disabled: disabled2 = false, initialFocus = true, returnFocus = true, restoreFocus = false, modal = true, closeOnFocusOut = true, openInteractionType = "", nextFocusableElement, previousFocusableElement, beforeContentFocusGuardRef, externalTree, getInsideElements } = props; const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const domReference = store.useState("domReferenceElement"); const floating = store.useState("floatingElement"); const { events, dataRef } = store.context; const getNodeId = useStableCallback(() => dataRef.current.floatingContext?.nodeId); const ignoreInitialFocus = initialFocus === false; const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus; const orderRef = React24.useRef(["content"]); const initialFocusRef = useValueAsRef(initialFocus); const returnFocusRef = useValueAsRef(returnFocus); const openInteractionTypeRef = useValueAsRef(openInteractionType); const tree = useFloatingTree(externalTree); const portalContext = usePortalContext(); const preventReturnFocusRef = React24.useRef(false); const isPointerDownRef = React24.useRef(false); const pointerDownOutsideRef = React24.useRef(false); const lastFocusedTabbableRef = React24.useRef(null); const closeTypeRef = React24.useRef(""); const lastInteractionTypeRef = React24.useRef(""); const beforeGuardRef = React24.useRef(null); const afterGuardRef = React24.useRef(null); const mergedBeforeGuardRef = useMergedRefs(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef); const mergedAfterGuardRef = useMergedRefs(afterGuardRef, portalContext?.afterInsideRef); const blurTimeout = useTimeout(); const pointerDownTimeout = useTimeout(); const restoreFocusFrame = useAnimationFrame(); const isInsidePortal = portalContext != null; const floatingFocusElement = getFloatingFocusElement(floating); const getTabbableContent = useStableCallback((container = floatingFocusElement) => { return container ? tabbable(container) : []; }); const getResolvedInsideElements = useStableCallback(() => getInsideElements?.().filter((element) => element != null) ?? []); React24.useEffect(() => { if (disabled2 || !modal) { return void 0; } function onKeyDown(event) { if (event.key === "Tab") { if (contains(floatingFocusElement, activeElement(ownerDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) { stopEvent(event); } } } const doc = ownerDocument(floatingFocusElement); return addEventListener(doc, "keydown", onKeyDown); }, [disabled2, floatingFocusElement, modal, isUntrappedTypeableCombobox, getTabbableContent]); React24.useEffect(() => { if (disabled2 || !open) { return void 0; } const doc = ownerDocument(floatingFocusElement); function clearPointerDownOutside() { pointerDownOutsideRef.current = false; } function onPointerDown(event) { const target = getTarget(event); const insideElements = getResolvedInsideElements(); const pointerTargetInside = contains(floating, target) || contains(domReference, target) || contains(portalContext?.portalNode, target) || insideElements.some((element) => element === target || contains(element, target)); pointerDownOutsideRef.current = !pointerTargetInside; lastInteractionTypeRef.current = event.pointerType || "keyboard"; if (target?.closest(`[${CLICK_TRIGGER_IDENTIFIER}]`)) { isPointerDownRef.current = true; } } function onKeyDown() { lastInteractionTypeRef.current = "keyboard"; } return mergeCleanups(addEventListener(doc, "pointerdown", onPointerDown, true), addEventListener(doc, "pointerup", clearPointerDownOutside, true), addEventListener(doc, "pointercancel", clearPointerDownOutside, true), addEventListener(doc, "keydown", onKeyDown, true)); }, [disabled2, floating, domReference, floatingFocusElement, open, portalContext, getResolvedInsideElements]); React24.useEffect(() => { if (disabled2 || !closeOnFocusOut) { return void 0; } const doc = ownerDocument(floatingFocusElement); function handlePointerDown() { isPointerDownRef.current = true; pointerDownTimeout.start(0, () => { isPointerDownRef.current = false; }); } function handleFocusIn(event) { const target = getTarget(event); if (isTabbable(target)) { lastFocusedTabbableRef.current = target; } } function handleFocusOutside(event) { const relatedTarget = event.relatedTarget; const currentTarget = event.currentTarget; const target = getTarget(event); queueMicrotask(() => { const nodeId = getNodeId(); const triggers = store.context.triggerElements; const insideElements = getResolvedInsideElements(); const isRelatedFocusGuard = relatedTarget?.hasAttribute(createAttribute("focus-guard")) && [beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeInsideRef.current, portalContext?.afterInsideRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement)].includes(relatedTarget); const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext?.portalNode, relatedTarget) || insideElements.some((element) => element === relatedTarget || contains(element, relatedTarget)) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement((trigger) => contains(trigger, relatedTarget)) || isRelatedFocusGuard || tree && (getNodeChildren(tree.nodesRef.current, nodeId).find((node) => contains(node.context?.elements.floating, relatedTarget) || contains(node.context?.elements.domReference, relatedTarget)) || getNodeAncestors(tree.nodesRef.current, nodeId).find((node) => [node.context?.elements.floating, getFloatingFocusElement(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget))); if (currentTarget === domReference && floatingFocusElement) { handleTabIndex(floatingFocusElement, orderRef); } if (restoreFocus && currentTarget !== domReference && !isElementVisible(target) && activeElement(doc) === doc.body) { if (isHTMLElement(floatingFocusElement)) { floatingFocusElement.focus(); if (restoreFocus === "popup") { restoreFocusFrame.request(() => { floatingFocusElement.focus(); }); return; } } const tabbableContent = getTabbableContent(); const prevTabbable = lastFocusedTabbableRef.current; const nodeToFocus = (prevTabbable && tabbableContent.includes(prevTabbable) ? prevTabbable : null) || tabbableContent[tabbableContent.length - 1] || floatingFocusElement; if (isHTMLElement(nodeToFocus)) { nodeToFocus.focus(); } } if (dataRef.current.insideReactTree) { dataRef.current.insideReactTree = false; return; } if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current && // Fix React 18 Strict Mode returnFocus due to double rendering. // For an "untrapped" typeable combobox (input role=combobox with // initialFocus=false), re-opening the popup and tabbing out should still close it even // when the previously focused element (e.g. the next tabbable outside the popup) is // focused again. Otherwise, the popup remains open on the second Tab sequence: // click input -> Tab (closes) -> click input -> Tab. // Allow closing when `isUntrappedTypeableCombobox` regardless of the previously focused element. (isUntrappedTypeableCombobox || relatedTarget !== getPreviouslyFocusedElement())) { preventReturnFocusRef.current = true; store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event)); } }); } function markInsideReactTree() { if (pointerDownOutsideRef.current) { return; } dataRef.current.insideReactTree = true; blurTimeout.start(0, () => { dataRef.current.insideReactTree = false; }); } const domReferenceElement = isHTMLElement(domReference) ? domReference : null; if (!floating && !domReferenceElement) { return void 0; } return mergeCleanups(domReferenceElement && addEventListener(domReferenceElement, "focusout", handleFocusOutside), domReferenceElement && addEventListener(domReferenceElement, "pointerdown", handlePointerDown), floating && addEventListener(floating, "focusin", handleFocusIn), floating && addEventListener(floating, "focusout", handleFocusOutside), floating && portalContext && addEventListener(floating, "focusout", markInsideReactTree, true)); }, [disabled2, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]); React24.useEffect(() => { if (disabled2 || !floating || !open) { return void 0; } const portalNodes = Array.from(portalContext?.portalNode?.querySelectorAll(`[${createAttribute("portal")}]`) || []); const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : []; const rootAncestorComboboxDomReference = ancestors.find((node) => isTypeableCombobox(node.context?.elements.domReference || null))?.context?.elements.domReference; const controlInsideElements = [floating, ...portalNodes, beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, ...getResolvedInsideElements()]; const insideElements = [...controlInsideElements, rootAncestorComboboxDomReference, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement), isUntrappedTypeableCombobox ? domReference : null].filter((x2) => x2 != null); const ariaHiddenCleanup = markOthers(insideElements, { ariaHidden: modal || isUntrappedTypeableCombobox, mark: false }); const markerInsideElements = [floating, ...portalNodes].filter((x2) => x2 != null); const markerCleanup = markOthers(markerInsideElements); return () => { markerCleanup(); ariaHiddenCleanup(); }; }, [open, disabled2, domReference, floating, modal, portalContext, isUntrappedTypeableCombobox, tree, getNodeId, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]); useIsoLayoutEffect(() => { if (!open || disabled2 || !isHTMLElement(floatingFocusElement)) { return; } const doc = ownerDocument(floatingFocusElement); const previouslyFocusedElement = activeElement(doc); queueMicrotask(() => { const initialFocusValueOrFn = initialFocusRef.current; const resolvedInitialFocus = typeof initialFocusValueOrFn === "function" ? initialFocusValueOrFn(openInteractionTypeRef.current || "") : initialFocusValueOrFn; if (resolvedInitialFocus === void 0 || resolvedInitialFocus === false) { return; } const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement); if (focusAlreadyInsideFloatingEl) { return; } let focusableElements = null; const getDefaultFocusElement = () => { if (focusableElements == null) { focusableElements = getTabbableContent(floatingFocusElement); } return focusableElements[0] || floatingFocusElement; }; let elToFocus; if (resolvedInitialFocus === true || resolvedInitialFocus === null) { elToFocus = getDefaultFocusElement(); } else { elToFocus = resolveRef(resolvedInitialFocus); } elToFocus = elToFocus || getDefaultFocusElement(); const hadFocusInside = contains(floatingFocusElement, activeElement(doc)); enqueueFocus(elToFocus, { preventScroll: elToFocus === floatingFocusElement, shouldFocus() { if (hadFocusInside) { return true; } const currentActiveElement = activeElement(doc); const focusMovedInside = currentActiveElement !== elToFocus && contains(floatingFocusElement, currentActiveElement); return !focusMovedInside; } }); }); }, [disabled2, open, floatingFocusElement, getTabbableContent, initialFocusRef, openInteractionTypeRef]); useIsoLayoutEffect(() => { if (disabled2 || !floatingFocusElement) { return void 0; } const doc = ownerDocument(floatingFocusElement); const previouslyFocusedElement = activeElement(doc); addPreviouslyFocusedElement(previouslyFocusedElement); function onOpenChangeLocal(details) { if (!details.open) { closeTypeRef.current = getEventType(details.nativeEvent, lastInteractionTypeRef.current); } if (details.reason === reason_parts_exports.triggerHover && details.nativeEvent.type === "mouseleave") { preventReturnFocusRef.current = true; } if (details.reason !== reason_parts_exports.outsidePress) { return; } if (details.nested) { preventReturnFocusRef.current = false; } else if (isVirtualClick(details.nativeEvent) || isVirtualPointerEvent(details.nativeEvent)) { preventReturnFocusRef.current = false; } else { let isPreventScrollSupported = false; ownerDocument(floatingFocusElement).createElement("div").focus({ get preventScroll() { isPreventScrollSupported = true; return false; } }); if (isPreventScrollSupported) { preventReturnFocusRef.current = false; } else { preventReturnFocusRef.current = true; } } } events.on("openchange", onOpenChangeLocal); function getReturnElement() { const returnFocusValueOrFn = returnFocusRef.current; let resolvedReturnFocusValue = typeof returnFocusValueOrFn === "function" ? returnFocusValueOrFn(closeTypeRef.current) : returnFocusValueOrFn; if (resolvedReturnFocusValue === void 0 || resolvedReturnFocusValue === false) { return null; } if (resolvedReturnFocusValue === null) { resolvedReturnFocusValue = true; } if (typeof resolvedReturnFocusValue === "boolean") { if (domReference?.isConnected) { return domReference; } return getPreviouslyFocusedElement() || null; } const fallback = domReference?.isConnected ? domReference : getPreviouslyFocusedElement(); return resolveRef(resolvedReturnFocusValue) || fallback || null; } return () => { events.off("openchange", onOpenChangeLocal); const activeEl = activeElement(doc); const insideElements = getResolvedInsideElements(); const isFocusInsideFloatingTree = contains(floating, activeEl) || insideElements.some((element) => element === activeEl || contains(element, activeEl)) || tree && getNodeChildren(tree.nodesRef.current, getNodeId(), false).some((node) => contains(node.context?.elements.floating, activeEl)); const returnFocusValueOrFn = returnFocusRef.current; const returnElement = getReturnElement(); queueMicrotask(() => { const tabbableReturnElement = getFirstTabbableElement(returnElement); const hasExplicitReturnFocus = typeof returnFocusValueOrFn !== "boolean"; if (returnFocusValueOrFn && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && // If the focus moved somewhere else after mount, avoid returning focus // since it likely entered a different element which should be // respected: https://github.com/floating-ui/floating-ui/issues/2607 (!hasExplicitReturnFocus && tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) { tabbableReturnElement.focus({ preventScroll: true }); } preventReturnFocusRef.current = false; }); }; }, [disabled2, floating, floatingFocusElement, returnFocusRef, events, tree, domReference, getNodeId, getResolvedInsideElements]); useIsoLayoutEffect(() => { if (!isWebKit2 || open || !floating) { return; } const activeEl = activeElement(ownerDocument(floating)); if (!isHTMLElement(activeEl) || !isTypeableElement(activeEl)) { return; } if (contains(floating, activeEl)) { activeEl.blur(); } }, [open, floating]); useIsoLayoutEffect(() => { if (disabled2 || !portalContext) { return void 0; } portalContext.setFocusManagerState({ modal, closeOnFocusOut, open, onOpenChange: store.setOpen, domReference }); return () => { portalContext.setFocusManagerState(null); }; }, [disabled2, portalContext, modal, open, store, closeOnFocusOut, domReference]); useIsoLayoutEffect(() => { if (disabled2 || !floatingFocusElement) { return void 0; } handleTabIndex(floatingFocusElement, orderRef); return () => { queueMicrotask(clearDisconnectedPreviouslyFocusedElements); }; }, [disabled2, floatingFocusElement, orderRef]); const shouldRenderGuards = !disabled2 && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal); return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(React24.Fragment, { children: [shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FocusGuard, { "data-type": "inside", ref: mergedBeforeGuardRef, onFocus: (event) => { if (modal) { const els = getTabbableContent(); enqueueFocus(els[els.length - 1]); } else if (portalContext?.portalNode) { preventReturnFocusRef.current = false; if (isOutsideEvent(event, portalContext.portalNode)) { const nextTabbable = getNextTabbable(domReference); nextTabbable?.focus(); } else { resolveRef(previousFocusableElement ?? portalContext.beforeOutsideRef)?.focus(); } } } }), children, shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FocusGuard, { "data-type": "inside", ref: mergedAfterGuardRef, onFocus: (event) => { if (modal) { enqueueFocus(getTabbableContent()[0]); } else if (portalContext?.portalNode) { if (closeOnFocusOut) { preventReturnFocusRef.current = true; } if (isOutsideEvent(event, portalContext.portalNode)) { const prevTabbable = getPreviousTabbable(domReference); prevTabbable?.focus(); } else { resolveRef(nextFocusableElement ?? portalContext.afterOutsideRef)?.focus(); } } } })] }); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js var React25 = __toESM(require_react(), 1); function useClick(context, props = {}) { const { enabled = true, event: eventOption = "click", toggle = true, ignoreMouse = false, stickIfOpen = true, touchOpenDelay = 0, reason = reason_parts_exports.triggerPress } = props; const store = "rootStore" in context ? context.rootStore : context; const dataRef = store.context.dataRef; const pointerTypeRef = React25.useRef(void 0); const frame = useAnimationFrame(); const touchOpenTimeout = useTimeout(); const reference = React25.useMemo(() => { function setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType) { const details = createChangeEventDetails(reason, nativeEvent, target); if (nextOpen && pointerType === "touch" && touchOpenDelay > 0) { touchOpenTimeout.start(touchOpenDelay, () => { store.setOpen(true, details); }); } else { store.setOpen(nextOpen, details); } } function getNextOpen(open, currentTarget, isClickLikeOpenEvent2) { const openEvent = dataRef.current.openEvent; const hasClickedOnInactiveTrigger = store.select("domReferenceElement") !== currentTarget; if (open && hasClickedOnInactiveTrigger) { return true; } if (!open) { return true; } if (!toggle) { return true; } if (openEvent && stickIfOpen) { return !isClickLikeOpenEvent2(openEvent.type); } return false; } return { onPointerDown(event) { pointerTypeRef.current = event.pointerType; }, onMouseDown(event) { const pointerType = pointerTypeRef.current; const nativeEvent = event.nativeEvent; const open = store.select("open"); if (event.button !== 0 || eventOption === "click" || isMouseLikePointerType(pointerType, true) && ignoreMouse) { return; } const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown"); const target = getTarget(nativeEvent); if (isTypeableElement(target)) { setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType); return; } const eventCurrentTarget = event.currentTarget; frame.request(() => { setOpenWithTouchDelay(nextOpen, nativeEvent, eventCurrentTarget, pointerType); }); }, onClick(event) { if (eventOption === "mousedown-only") { return; } const pointerType = pointerTypeRef.current; if (eventOption === "mousedown" && pointerType) { pointerTypeRef.current = void 0; return; } if (isMouseLikePointerType(pointerType, true) && ignoreMouse) { return; } const open = store.select("open"); const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown" || openEventType === "keydown" || openEventType === "keyup"); setOpenWithTouchDelay(nextOpen, event.nativeEvent, event.currentTarget, pointerType); }, onKeyDown() { pointerTypeRef.current = void 0; } }; }, [dataRef, eventOption, ignoreMouse, reason, store, stickIfOpen, toggle, frame, touchOpenTimeout, touchOpenDelay]); return React25.useMemo(() => enabled ? { reference } : EMPTY_OBJECT, [enabled, reference]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClientPoint.js var React26 = __toESM(require_react(), 1); function createVirtualElement(domElement, data) { let offsetX = null; let offsetY = null; let isAutoUpdateEvent = false; return { contextElement: domElement || void 0, getBoundingClientRect() { const domRect = domElement?.getBoundingClientRect() || { width: 0, height: 0, x: 0, y: 0 }; const isXAxis = data.axis === "x" || data.axis === "both"; const isYAxis = data.axis === "y" || data.axis === "both"; const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; let width = domRect.width; let height = domRect.height; let x2 = domRect.x; let y2 = domRect.y; if (offsetX == null && data.x && isXAxis) { offsetX = domRect.x - data.x; } if (offsetY == null && data.y && isYAxis) { offsetY = domRect.y - data.y; } x2 -= offsetX || 0; y2 -= offsetY || 0; width = 0; height = 0; if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { width = data.axis === "y" ? domRect.width : 0; height = data.axis === "x" ? domRect.height : 0; x2 = isXAxis && data.x != null ? data.x : x2; y2 = isYAxis && data.y != null ? data.y : y2; } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) { height = data.axis === "x" ? domRect.height : height; width = data.axis === "y" ? domRect.width : width; } isAutoUpdateEvent = true; return { width, height, x: x2, y: y2, top: y2, right: x2 + width, bottom: y2 + height, left: x2 }; } }; } function isMouseBasedEvent(event) { return event != null && event.clientX != null; } function useClientPoint(context, props = {}) { const { enabled = true, axis = "both" } = props; const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const floating = store.useState("floatingElement"); const domReference = store.useState("domReferenceElement"); const dataRef = store.context.dataRef; const initialRef = React26.useRef(false); const cleanupListenerRef = React26.useRef(null); const [pointerType, setPointerType] = React26.useState(); const [reactive, setReactive] = React26.useState([]); const resetReference = useStableCallback((reference2) => { store.set("positionReference", reference2); }); const setReference = useStableCallback((newX, newY, referenceElement) => { if (initialRef.current) { return; } if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { return; } store.set("positionReference", createVirtualElement(referenceElement ?? domReference, { x: newX, y: newY, axis, dataRef, pointerType })); }); const handleReferenceEnterOrMove = useStableCallback((event) => { if (!open) { setReference(event.clientX, event.clientY, event.currentTarget); } else if (!cleanupListenerRef.current) { setReference(event.clientX, event.clientY, event.currentTarget); setReactive([]); } }); const openCheck = isMouseLikePointerType(pointerType) ? floating : open; React26.useEffect(() => { if (!enabled) { resetReference(domReference); return void 0; } if (!openCheck) { return void 0; } function cleanupListener() { cleanupListenerRef.current?.(); cleanupListenerRef.current = null; } const win = getWindow(floating); function handleMouseMove(event) { const target = getTarget(event); if (!contains(floating, target)) { setReference(event.clientX, event.clientY); } else { cleanupListener(); } } if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); } else { resetReference(domReference); } return cleanupListener; }, [openCheck, enabled, floating, dataRef, domReference, store, setReference, resetReference, reactive]); React26.useEffect(() => () => { store.set("positionReference", null); }, [store]); React26.useEffect(() => { if (enabled && !floating) { initialRef.current = false; } }, [enabled, floating]); React26.useEffect(() => { if (!enabled && open) { initialRef.current = true; } }, [enabled, open]); const reference = React26.useMemo(() => { function setPointerTypeRef(event) { setPointerType(event.pointerType); } return { onPointerDown: setPointerTypeRef, onPointerEnter: setPointerTypeRef, onMouseMove: handleReferenceEnterOrMove, onMouseEnter: handleReferenceEnterOrMove }; }, [handleReferenceEnterOrMove]); return React26.useMemo(() => enabled ? { reference, trigger: reference } : {}, [enabled, reference]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js var React27 = __toESM(require_react(), 1); var bubbleHandlerKeys = { intentional: "onClick", sloppy: "onPointerDown" }; function alwaysFalse() { return false; } function normalizeProp(normalizable) { return { escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true }; } function useDismiss(context, props = {}) { const { enabled = true, escapeKey: escapeKey2 = true, outsidePress: outsidePressProp = true, outsidePressEvent = "sloppy", referencePress = alwaysFalse, referencePressEvent = "sloppy", bubbles, externalTree } = props; const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const floatingElement = store.useState("floatingElement"); const { dataRef } = store.context; const tree = useFloatingTree(externalTree); const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; const outsidePressEnabled = outsidePress2 !== false; const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); const { escapeKey: escapeKeyBubbles, outsidePress: outsidePressBubbles } = normalizeProp(bubbles); const pressStartedInsideRef = React27.useRef(false); const pressStartPreventedRef = React27.useRef(false); const suppressNextOutsideClickRef = React27.useRef(false); const isComposingRef = React27.useRef(false); const currentPointerTypeRef = React27.useRef(""); const touchStateRef = React27.useRef(null); const cancelDismissOnEndTimeout = useTimeout(); const clearInsideReactTreeTimeout = useTimeout(); const clearInsideReactTree = useStableCallback(() => { clearInsideReactTreeTimeout.clear(); dataRef.current.insideReactTree = false; }); const hasBlockingChild = useStableCallback((bubbleKey) => { const nodeId = dataRef.current.floatingContext?.nodeId; const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); }); const isEventWithinOwnElements = useStableCallback((event) => { return isEventTargetWithin(event, store.select("floatingElement")) || isEventTargetWithin(event, store.select("domReferenceElement")); }); const closeOnReferencePress = useStableCallback((event) => { if (!referencePress()) { return; } store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); }); const closeOnEscapeKeyDown = useStableCallback((event) => { if (!open || !enabled || !escapeKey2 || event.key !== "Escape") { return; } if (isComposingRef.current) { return; } if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { return; } const native = isReactEvent(event) ? event.nativeEvent : event; const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); store.setOpen(false, eventDetails); if (!eventDetails.isCanceled) { event.preventDefault(); } if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { event.stopPropagation(); } }); const markInsideReactTree = useStableCallback(() => { dataRef.current.insideReactTree = true; clearInsideReactTreeTimeout.start(0, clearInsideReactTree); }); const markPressStartedInsideReactTree = useStableCallback((event) => { if (!open || !enabled || event.button !== 0) { return; } const target = getTarget(event.nativeEvent); if (!contains(store.select("floatingElement"), target)) { return; } if (!pressStartedInsideRef.current) { pressStartedInsideRef.current = true; pressStartPreventedRef.current = false; } }); const markInsidePressStartPrevented = useStableCallback((event) => { if (!open || !enabled) { return; } if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { return; } if (pressStartedInsideRef.current) { pressStartPreventedRef.current = true; } }); React27.useEffect(() => { if (!open || !enabled) { return void 0; } dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; dataRef.current.__outsidePressBubbles = outsidePressBubbles; const compositionTimeout = new Timeout(); const preventedPressSuppressionTimeout = new Timeout(); function handleCompositionStart() { compositionTimeout.clear(); isComposingRef.current = true; } function handleCompositionEnd() { compositionTimeout.start( // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. // Only apply to WebKit for the test to remain 0ms. isWebKit() ? 5 : 0, () => { isComposingRef.current = false; } ); } function suppressImmediateOutsideClickAfterPreventedStart() { suppressNextOutsideClickRef.current = true; preventedPressSuppressionTimeout.start(0, () => { suppressNextOutsideClickRef.current = false; }); } function resetPressStartState() { pressStartedInsideRef.current = false; pressStartPreventedRef.current = false; } function getOutsidePressEvent() { const type = currentPointerTypeRef.current; const computedType = type === "pen" || !type ? "mouse" : type; const outsidePressEventValue = getOutsidePressEventProp(); const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; if (typeof resolved === "string") { return resolved; } return resolved[computedType]; } function shouldIgnoreEvent(event) { const computedOutsidePressEvent = getOutsidePressEvent(); return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; } function isEventWithinFloatingTree(event) { const nodeId = dataRef.current.floatingContext?.nodeId; const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); return isEventWithinOwnElements(event) || targetIsInsideChildren; } function closeOnPressOutside(event) { if (shouldIgnoreEvent(event)) { if (event.type !== "click" && !isEventWithinOwnElements(event)) { preventedPressSuppressionTimeout.clear(); suppressNextOutsideClickRef.current = false; } clearInsideReactTree(); return; } if (dataRef.current.insideReactTree) { clearInsideReactTree(); return; } const target = getTarget(event); const inertSelector = `[${createAttribute("inert")}]`; const targetRoot = isElement(target) ? target.getRootNode() : null; const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store.select("floatingElement"))).querySelectorAll(inertSelector)); const triggers = store.context.triggerElements; if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { return; } let targetRootAncestor = isElement(target) ? target : null; while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { const nextParent = getParentNode(targetRootAncestor); if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { break; } targetRootAncestor = nextParent; } if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). !contains(target, store.select("floatingElement")) && // If the target root element contains none of the markers, then the // element was injected after the floating element rendered. markers.every((marker) => !contains(targetRootAncestor, marker))) { return; } if (isHTMLElement(target) && !("touches" in event)) { const lastTraversableNode = isLastTraversableNode(target); const style = getComputedStyle2(target); const scrollRe = /auto|scroll/; const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; const isRTL7 = style.direction === "rtl"; const pressedVerticalScrollbar = canScrollY && (isRTL7 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { return; } } if (isEventWithinFloatingTree(event)) { return; } if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) { preventedPressSuppressionTimeout.clear(); suppressNextOutsideClickRef.current = false; return; } if (typeof outsidePress2 === "function" && !outsidePress2(event)) { return; } if (hasBlockingChild("__outsidePressBubbles")) { return; } store.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); clearInsideReactTree(); } function handlePointerDown(event) { if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) { return; } closeOnPressOutside(event); } function handleTouchStart(event) { if (getOutsidePressEvent() !== "sloppy" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) { return; } const touch = event.touches[0]; if (touch) { touchStateRef.current = { startTime: Date.now(), startX: touch.clientX, startY: touch.clientY, dismissOnTouchEnd: false, dismissOnMouseDown: true }; cancelDismissOnEndTimeout.start(1e3, () => { if (touchStateRef.current) { touchStateRef.current.dismissOnTouchEnd = false; touchStateRef.current.dismissOnMouseDown = false; } }); } } function addTargetEventListenerOnce(event, listener) { const target = getTarget(event); if (!target) { return; } const unsubscribe2 = addEventListener(target, event.type, () => { listener(event); unsubscribe2(); }); } function handleTouchStartCapture(event) { currentPointerTypeRef.current = "touch"; addTargetEventListenerOnce(event, handleTouchStart); } function closeOnPressOutsideCapture(event) { cancelDismissOnEndTimeout.clear(); if (event.type === "pointerdown") { currentPointerTypeRef.current = event.pointerType; } if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { return; } addTargetEventListenerOnce(event, (targetEvent) => { if (targetEvent.type === "pointerdown") { handlePointerDown(targetEvent); } else { closeOnPressOutside(targetEvent); } }); } function handlePressEndCapture(event) { if (!pressStartedInsideRef.current) { return; } const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; resetPressStartState(); if (getOutsidePressEvent() !== "intentional") { return; } if (event.type === "pointercancel") { if (pressStartedInsideDefaultPrevented) { suppressImmediateOutsideClickAfterPreventedStart(); } return; } if (isEventWithinFloatingTree(event)) { return; } if (pressStartedInsideDefaultPrevented) { suppressImmediateOutsideClickAfterPreventedStart(); return; } if (typeof outsidePress2 === "function" && !outsidePress2(event)) { return; } preventedPressSuppressionTimeout.clear(); suppressNextOutsideClickRef.current = true; clearInsideReactTree(); } function handleTouchMove(event) { if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { return; } const touch = event.touches[0]; if (!touch) { return; } const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); if (distance > 5) { touchStateRef.current.dismissOnTouchEnd = true; } if (distance > 10) { closeOnPressOutside(event); cancelDismissOnEndTimeout.clear(); touchStateRef.current = null; } } function handleTouchMoveCapture(event) { addTargetEventListenerOnce(event, handleTouchMove); } function handleTouchEnd(event) { if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { return; } if (touchStateRef.current.dismissOnTouchEnd) { closeOnPressOutside(event); } cancelDismissOnEndTimeout.clear(); touchStateRef.current = null; } function handleTouchEndCapture(event) { addTargetEventListenerOnce(event, handleTouchEnd); } const doc = ownerDocument(floatingElement); const unsubscribe = mergeCleanups(escapeKey2 && mergeCleanups(addEventListener(doc, "keydown", closeOnEscapeKeyDown), addEventListener(doc, "compositionstart", handleCompositionStart), addEventListener(doc, "compositionend", handleCompositionEnd)), outsidePressEnabled && mergeCleanups(addEventListener(doc, "click", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerdown", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerup", handlePressEndCapture, true), addEventListener(doc, "pointercancel", handlePressEndCapture, true), addEventListener(doc, "mousedown", closeOnPressOutsideCapture, true), addEventListener(doc, "mouseup", handlePressEndCapture, true), addEventListener(doc, "touchstart", handleTouchStartCapture, true), addEventListener(doc, "touchmove", handleTouchMoveCapture, true), addEventListener(doc, "touchend", handleTouchEndCapture, true))); return () => { unsubscribe(); compositionTimeout.clear(); preventedPressSuppressionTimeout.clear(); resetPressStartState(); suppressNextOutsideClickRef.current = false; }; }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store, cancelDismissOnEndTimeout]); React27.useEffect(clearInsideReactTree, [outsidePress2, clearInsideReactTree]); const reference = React27.useMemo(() => ({ onKeyDown: closeOnEscapeKeyDown, [bubbleHandlerKeys[referencePressEvent]]: closeOnReferencePress, ...referencePressEvent !== "intentional" && { onClick: closeOnReferencePress } }), [closeOnEscapeKeyDown, closeOnReferencePress, referencePressEvent]); const floating = React27.useMemo(() => ({ onKeyDown: closeOnEscapeKeyDown, // `onMouseDown` may be blocked if `event.preventDefault()` is called in // `onPointerDown`, such as with <NumberField.ScrubArea>. // See https://github.com/mui/base-ui/pull/3379 onPointerDown: markInsidePressStartPrevented, onMouseDown: markInsidePressStartPrevented, onClickCapture: markInsideReactTree, onMouseDownCapture(event) { markInsideReactTree(); markPressStartedInsideReactTree(event); }, onPointerDownCapture(event) { markInsideReactTree(); markPressStartedInsideReactTree(event); }, onMouseUpCapture: markInsideReactTree, onTouchEndCapture: markInsideReactTree, onTouchMoveCapture: markInsideReactTree }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); return React27.useMemo(() => enabled ? { reference, floating, trigger: reference } : {}, [enabled, reference, floating]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js var React34 = __toESM(require_react(), 1); // node_modules/@floating-ui/core/dist/floating-ui.core.mjs function computeCoordsFromPlacement(_ref, placement, rtl) { let { reference, floating } = _ref; const sideAxis = getSideAxis(placement); const alignmentAxis = getAlignmentAxis(placement); const alignLength = getAxisLength(alignmentAxis); const side = getSide(placement); const isVertical = sideAxis === "y"; const commonX = reference.x + reference.width / 2 - floating.width / 2; const commonY = reference.y + reference.height / 2 - floating.height / 2; const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; let coords; switch (side) { case "top": coords = { x: commonX, y: reference.y - floating.height }; break; case "bottom": coords = { x: commonX, y: reference.y + reference.height }; break; case "right": coords = { x: reference.x + reference.width, y: commonY }; break; case "left": coords = { x: reference.x - floating.width, y: commonY }; break; default: coords = { x: reference.x, y: reference.y }; } switch (getAlignment(placement)) { case "start": coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); break; case "end": coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); break; } return coords; } async function detectOverflow(state, options) { var _await$platform$isEle; if (options === void 0) { options = {}; } const { x: x2, y: y2, platform: platform3, rects, elements, strategy } = state; const { boundary = "clippingAncestors", rootBoundary = "viewport", elementContext = "floating", altBoundary = false, padding = 0 } = evaluate(options, state); const paddingObject = getPaddingObject(padding); const altContext = elementContext === "floating" ? "reference" : "floating"; const element = elements[altBoundary ? altContext : elementContext]; const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ element: ((_await$platform$isEle = await (platform3.isElement == null ? void 0 : platform3.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform3.getDocumentElement == null ? void 0 : platform3.getDocumentElement(elements.floating)), boundary, rootBoundary, strategy })); const rect = elementContext === "floating" ? { x: x2, y: y2, width: rects.floating.width, height: rects.floating.height } : rects.reference; const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) ? await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { x: 1, y: 1 } : { x: 1, y: 1 }; const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ elements, rect, offsetParent, strategy }) : rect); return { top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x }; } var MAX_RESET_COUNT = 50; var computePosition = async (reference, floating, config) => { const { placement = "bottom", strategy = "absolute", middleware = [], platform: platform3 } = config; const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { ...platform3, detectOverflow }; const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); let rects = await platform3.getElementRects({ reference, floating, strategy }); let { x: x2, y: y2 } = computeCoordsFromPlacement(rects, placement, rtl); let statefulPlacement = placement; let resetCount = 0; const middlewareData = {}; for (let i2 = 0; i2 < middleware.length; i2++) { const currentMiddleware = middleware[i2]; if (!currentMiddleware) { continue; } const { name, fn } = currentMiddleware; const { x: nextX, y: nextY, data, reset } = await fn({ x: x2, y: y2, initialPlacement: placement, placement: statefulPlacement, strategy, middlewareData, rects, platform: platformWithDetectOverflow, elements: { reference, floating } }); x2 = nextX != null ? nextX : x2; y2 = nextY != null ? nextY : y2; middlewareData[name] = { ...middlewareData[name], ...data }; if (reset && resetCount < MAX_RESET_COUNT) { resetCount++; if (typeof reset === "object") { if (reset.placement) { statefulPlacement = reset.placement; } if (reset.rects) { rects = reset.rects === true ? await platform3.getElementRects({ reference, floating, strategy }) : reset.rects; } ({ x: x2, y: y2 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); } i2 = -1; } } return { x: x2, y: y2, placement: statefulPlacement, strategy, middlewareData }; }; var flip = function(options) { if (options === void 0) { options = {}; } return { name: "flip", options, async fn(state) { var _middlewareData$arrow, _middlewareData$flip; const { placement, middlewareData, rects, initialPlacement, platform: platform3, elements } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = "bestFit", fallbackAxisSideDirection = "none", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state); if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } const side = getSide(placement); const initialSideAxis = getSideAxis(initialPlacement); const isBasePlacement = getSide(initialPlacement) === initialPlacement; const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); } const placements2 = [initialPlacement, ...fallbackPlacements]; const overflow = await platform3.detectOverflow(state, detectOverflowOptions); const overflows = []; let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; if (checkMainAxis) { overflows.push(overflow[side]); } if (checkCrossAxis) { const sides2 = getAlignmentSides(placement, rects, rtl); overflows.push(overflow[sides2[0]], overflow[sides2[1]]); } overflowsData = [...overflowsData, { placement, overflows }]; if (!overflows.every((side2) => side2 <= 0)) { var _middlewareData$flip2, _overflowsData$filter; const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; const nextPlacement = placements2[nextIndex]; if (nextPlacement) { const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis // overflows the main axis. overflowsData.every((d2) => getSideAxis(d2.placement) === initialSideAxis ? d2.overflows[0] > 0 : true)) { return { data: { index: nextIndex, overflows: overflowsData }, reset: { placement: nextPlacement } }; } } let resetPlacement = (_overflowsData$filter = overflowsData.filter((d2) => d2.overflows[0] <= 0).sort((a2, b2) => a2.overflows[1] - b2.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; if (!resetPlacement) { switch (fallbackStrategy) { case "bestFit": { var _overflowsData$filter2; const placement2 = (_overflowsData$filter2 = overflowsData.filter((d2) => { if (hasFallbackAxisSideDirection) { const currentSideAxis = getSideAxis(d2.placement); return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal // reading directions favoring greater width. currentSideAxis === "y"; } return true; }).map((d2) => [d2.placement, d2.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a2, b2) => a2[1] - b2[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; if (placement2) { resetPlacement = placement2; } break; } case "initialPlacement": resetPlacement = initialPlacement; break; } } if (placement !== resetPlacement) { return { reset: { placement: resetPlacement } }; } } return {}; } }; }; function getSideOffsets(overflow, rect) { return { top: overflow.top - rect.height, right: overflow.right - rect.width, bottom: overflow.bottom - rect.height, left: overflow.left - rect.width }; } function isAnySideFullyClipped(overflow) { return sides.some((side) => overflow[side] >= 0); } var hide = function(options) { if (options === void 0) { options = {}; } return { name: "hide", options, async fn(state) { const { rects, platform: platform3 } = state; const { strategy = "referenceHidden", ...detectOverflowOptions } = evaluate(options, state); switch (strategy) { case "referenceHidden": { const overflow = await platform3.detectOverflow(state, { ...detectOverflowOptions, elementContext: "reference" }); const offsets = getSideOffsets(overflow, rects.reference); return { data: { referenceHiddenOffsets: offsets, referenceHidden: isAnySideFullyClipped(offsets) } }; } case "escaped": { const overflow = await platform3.detectOverflow(state, { ...detectOverflowOptions, altBoundary: true }); const offsets = getSideOffsets(overflow, rects.floating); return { data: { escapedOffsets: offsets, escaped: isAnySideFullyClipped(offsets) } }; } default: { return {}; } } } }; }; var originSides = /* @__PURE__ */ new Set(["left", "top"]); async function convertValueToCoords(state, options) { const { placement, platform: platform3, elements } = state; const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); const side = getSide(placement); const alignment = getAlignment(placement); const isVertical = getSideAxis(placement) === "y"; const mainAxisMulti = originSides.has(side) ? -1 : 1; const crossAxisMulti = rtl && isVertical ? -1 : 1; const rawValue = evaluate(options, state); let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === "number" ? { mainAxis: rawValue, crossAxis: 0, alignmentAxis: null } : { mainAxis: rawValue.mainAxis || 0, crossAxis: rawValue.crossAxis || 0, alignmentAxis: rawValue.alignmentAxis }; if (alignment && typeof alignmentAxis === "number") { crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; } return isVertical ? { x: crossAxis * crossAxisMulti, y: mainAxis * mainAxisMulti } : { x: mainAxis * mainAxisMulti, y: crossAxis * crossAxisMulti }; } var offset = function(options) { if (options === void 0) { options = 0; } return { name: "offset", options, async fn(state) { var _middlewareData$offse, _middlewareData$arrow; const { x: x2, y: y2, placement, middlewareData } = state; const diffCoords = await convertValueToCoords(state, options); if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } return { x: x2 + diffCoords.x, y: y2 + diffCoords.y, data: { ...diffCoords, placement } }; } }; }; var shift = function(options) { if (options === void 0) { options = {}; } return { name: "shift", options, async fn(state) { const { x: x2, y: y2, placement, platform: platform3 } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: (_ref) => { let { x: x3, y: y3 } = _ref; return { x: x3, y: y3 }; } }, ...detectOverflowOptions } = evaluate(options, state); const coords = { x: x2, y: y2 }; const overflow = await platform3.detectOverflow(state, detectOverflowOptions); const crossAxis = getSideAxis(getSide(placement)); const mainAxis = getOppositeAxis(crossAxis); let mainAxisCoord = coords[mainAxis]; let crossAxisCoord = coords[crossAxis]; if (checkMainAxis) { const minSide = mainAxis === "y" ? "top" : "left"; const maxSide = mainAxis === "y" ? "bottom" : "right"; const min2 = mainAxisCoord + overflow[minSide]; const max2 = mainAxisCoord - overflow[maxSide]; mainAxisCoord = clamp(min2, mainAxisCoord, max2); } if (checkCrossAxis) { const minSide = crossAxis === "y" ? "top" : "left"; const maxSide = crossAxis === "y" ? "bottom" : "right"; const min2 = crossAxisCoord + overflow[minSide]; const max2 = crossAxisCoord - overflow[maxSide]; crossAxisCoord = clamp(min2, crossAxisCoord, max2); } const limitedCoords = limiter.fn({ ...state, [mainAxis]: mainAxisCoord, [crossAxis]: crossAxisCoord }); return { ...limitedCoords, data: { x: limitedCoords.x - x2, y: limitedCoords.y - y2, enabled: { [mainAxis]: checkMainAxis, [crossAxis]: checkCrossAxis } } }; } }; }; var limitShift = function(options) { if (options === void 0) { options = {}; } return { options, fn(state) { const { x: x2, y: y2, placement, rects, middlewareData } = state; const { offset: offset4 = 0, mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true } = evaluate(options, state); const coords = { x: x2, y: y2 }; const crossAxis = getSideAxis(placement); const mainAxis = getOppositeAxis(crossAxis); let mainAxisCoord = coords[mainAxis]; let crossAxisCoord = coords[crossAxis]; const rawOffset = evaluate(offset4, state); const computedOffset = typeof rawOffset === "number" ? { mainAxis: rawOffset, crossAxis: 0 } : { mainAxis: 0, crossAxis: 0, ...rawOffset }; if (checkMainAxis) { const len = mainAxis === "y" ? "height" : "width"; const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; if (mainAxisCoord < limitMin) { mainAxisCoord = limitMin; } else if (mainAxisCoord > limitMax) { mainAxisCoord = limitMax; } } if (checkCrossAxis) { var _middlewareData$offse, _middlewareData$offse2; const len = mainAxis === "y" ? "width" : "height"; const isOriginSide = originSides.has(getSide(placement)); const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis); const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0); if (crossAxisCoord < limitMin) { crossAxisCoord = limitMin; } else if (crossAxisCoord > limitMax) { crossAxisCoord = limitMax; } } return { [mainAxis]: mainAxisCoord, [crossAxis]: crossAxisCoord }; } }; }; var size = function(options) { if (options === void 0) { options = {}; } return { name: "size", options, async fn(state) { var _state$middlewareData, _state$middlewareData2; const { placement, rects, platform: platform3, elements } = state; const { apply = () => { }, ...detectOverflowOptions } = evaluate(options, state); const overflow = await platform3.detectOverflow(state, detectOverflowOptions); const side = getSide(placement); const alignment = getAlignment(placement); const isYAxis = getSideAxis(placement) === "y"; const { width, height } = rects.floating; let heightSide; let widthSide; if (side === "top" || side === "bottom") { heightSide = side; widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; } else { widthSide = side; heightSide = alignment === "end" ? "top" : "bottom"; } const maximumClippingHeight = height - overflow.top - overflow.bottom; const maximumClippingWidth = width - overflow.left - overflow.right; const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); const noShift = !state.middlewareData.shift; let availableHeight = overflowAvailableHeight; let availableWidth = overflowAvailableWidth; if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) { availableWidth = maximumClippingWidth; } if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) { availableHeight = maximumClippingHeight; } if (noShift && !alignment) { const xMin = max(overflow.left, 0); const xMax = max(overflow.right, 0); const yMin = max(overflow.top, 0); const yMax = max(overflow.bottom, 0); if (isYAxis) { availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); } else { availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); } } await apply({ ...state, availableWidth, availableHeight }); const nextDimensions = await platform3.getDimensions(elements.floating); if (width !== nextDimensions.width || height !== nextDimensions.height) { return { reset: { rects: true } }; } return {}; } }; }; // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs function getCssDimensions(element) { const css = getComputedStyle2(element); let width = parseFloat(css.width) || 0; let height = parseFloat(css.height) || 0; const hasOffset = isHTMLElement(element); const offsetWidth = hasOffset ? element.offsetWidth : width; const offsetHeight = hasOffset ? element.offsetHeight : height; const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; if (shouldFallback) { width = offsetWidth; height = offsetHeight; } return { width, height, $: shouldFallback }; } function unwrapElement(element) { return !isElement(element) ? element.contextElement : element; } function getScale(element) { const domElement = unwrapElement(element); if (!isHTMLElement(domElement)) { return createCoords(1); } const rect = domElement.getBoundingClientRect(); const { width, height, $: $2 } = getCssDimensions(domElement); let x2 = ($2 ? round(rect.width) : rect.width) / width; let y2 = ($2 ? round(rect.height) : rect.height) / height; if (!x2 || !Number.isFinite(x2)) { x2 = 1; } if (!y2 || !Number.isFinite(y2)) { y2 = 1; } return { x: x2, y: y2 }; } var noOffsets = /* @__PURE__ */ createCoords(0); function getVisualOffsets(element) { const win = getWindow(element); if (!isWebKit() || !win.visualViewport) { return noOffsets; } return { x: win.visualViewport.offsetLeft, y: win.visualViewport.offsetTop }; } function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { if (isFixed === void 0) { isFixed = false; } if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) { return false; } return isFixed; } function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } const clientRect = element.getBoundingClientRect(); const domElement = unwrapElement(element); let scale = createCoords(1); if (includeScale) { if (offsetParent) { if (isElement(offsetParent)) { scale = getScale(offsetParent); } } else { scale = getScale(element); } } const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); let x2 = (clientRect.left + visualOffsets.x) / scale.x; let y2 = (clientRect.top + visualOffsets.y) / scale.y; let width = clientRect.width / scale.x; let height = clientRect.height / scale.y; if (domElement) { const win = getWindow(domElement); const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; let currentWin = win; let currentIFrame = getFrameElement(currentWin); while (currentIFrame && offsetParent && offsetWin !== currentWin) { const iframeScale = getScale(currentIFrame); const iframeRect = currentIFrame.getBoundingClientRect(); const css = getComputedStyle2(currentIFrame); const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; x2 *= iframeScale.x; y2 *= iframeScale.y; width *= iframeScale.x; height *= iframeScale.y; x2 += left; y2 += top; currentWin = getWindow(currentIFrame); currentIFrame = getFrameElement(currentWin); } } return rectToClientRect({ width, height, x: x2, y: y2 }); } function getWindowScrollBarX(element, rect) { const leftScroll = getNodeScroll(element).scrollLeft; if (!rect) { return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; } return rect.left + leftScroll; } function getHTMLOffset(documentElement, scroll) { const htmlRect = documentElement.getBoundingClientRect(); const x2 = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); const y2 = htmlRect.top + scroll.scrollTop; return { x: x2, y: y2 }; } function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { let { elements, rect, offsetParent, strategy } = _ref; const isFixed = strategy === "fixed"; const documentElement = getDocumentElement(offsetParent); const topLayer = elements ? isTopLayer(elements.floating) : false; if (offsetParent === documentElement || topLayer && isFixed) { return rect; } let scroll = { scrollLeft: 0, scrollTop: 0 }; let scale = createCoords(1); const offsets = createCoords(0); const isOffsetParentAnElement = isHTMLElement(offsetParent); if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isOffsetParentAnElement) { const offsetRect = getBoundingClientRect(offsetParent); scale = getScale(offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } } const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); return { width: rect.width * scale.x, height: rect.height * scale.y, x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y }; } function getClientRects(element) { return Array.from(element.getClientRects()); } function getDocumentRect(element) { const html = getDocumentElement(element); const scroll = getNodeScroll(element); const body = element.ownerDocument.body; const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); let x2 = -scroll.scrollLeft + getWindowScrollBarX(element); const y2 = -scroll.scrollTop; if (getComputedStyle2(body).direction === "rtl") { x2 += max(html.clientWidth, body.clientWidth) - width; } return { width, height, x: x2, y: y2 }; } var SCROLLBAR_MAX = 25; function getViewportRect(element, strategy) { const win = getWindow(element); const html = getDocumentElement(element); const visualViewport = win.visualViewport; let width = html.clientWidth; let height = html.clientHeight; let x2 = 0; let y2 = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; const visualViewportBased = isWebKit(); if (!visualViewportBased || visualViewportBased && strategy === "fixed") { x2 = visualViewport.offsetLeft; y2 = visualViewport.offsetTop; } } const windowScrollbarX = getWindowScrollBarX(html); if (windowScrollbarX <= 0) { const doc = html.ownerDocument; const body = doc.body; const bodyStyles = getComputedStyle(body); const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { width -= clippingStableScrollbarWidth; } } else if (windowScrollbarX <= SCROLLBAR_MAX) { width += windowScrollbarX; } return { width, height, x: x2, y: y2 }; } function getInnerBoundingClientRect(element, strategy) { const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); const top = clientRect.top + element.clientTop; const left = clientRect.left + element.clientLeft; const scale = isHTMLElement(element) ? getScale(element) : createCoords(1); const width = element.clientWidth * scale.x; const height = element.clientHeight * scale.y; const x2 = left * scale.x; const y2 = top * scale.y; return { width, height, x: x2, y: y2 }; } function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { let rect; if (clippingAncestor === "viewport") { rect = getViewportRect(element, strategy); } else if (clippingAncestor === "document") { rect = getDocumentRect(getDocumentElement(element)); } else if (isElement(clippingAncestor)) { rect = getInnerBoundingClientRect(clippingAncestor, strategy); } else { const visualOffsets = getVisualOffsets(element); rect = { x: clippingAncestor.x - visualOffsets.x, y: clippingAncestor.y - visualOffsets.y, width: clippingAncestor.width, height: clippingAncestor.height }; } return rectToClientRect(rect); } function hasFixedPositionAncestor(element, stopNode) { const parentNode = getParentNode(element); if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { return false; } return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode); } function getClippingElementAncestors(element, cache) { const cachedResult = cache.get(element); if (cachedResult) { return cachedResult; } let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); let currentContainingBlockComputedStyle = null; const elementIsFixed = getComputedStyle2(element).position === "fixed"; let currentNode = elementIsFixed ? getParentNode(element) : element; while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { const computedStyle = getComputedStyle2(currentNode); const currentNodeIsContaining = isContainingBlock(currentNode); if (!currentNodeIsContaining && computedStyle.position === "fixed") { currentContainingBlockComputedStyle = null; } const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); if (shouldDropCurrentNode) { result = result.filter((ancestor) => ancestor !== currentNode); } else { currentContainingBlockComputedStyle = computedStyle; } currentNode = getParentNode(currentNode); } cache.set(element, result); return result; } function getClippingRect(_ref) { let { element, boundary, rootBoundary, strategy } = _ref; const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); const clippingAncestors = [...elementClippingAncestors, rootBoundary]; const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); let top = firstRect.top; let right = firstRect.right; let bottom = firstRect.bottom; let left = firstRect.left; for (let i2 = 1; i2 < clippingAncestors.length; i2++) { const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i2], strategy); top = max(rect.top, top); right = min(rect.right, right); bottom = min(rect.bottom, bottom); left = max(rect.left, left); } return { width: right - left, height: bottom - top, x: left, y: top }; } function getDimensions(element) { const { width, height } = getCssDimensions(element); return { width, height }; } function getRectRelativeToOffsetParent(element, offsetParent, strategy) { const isOffsetParentAnElement = isHTMLElement(offsetParent); const documentElement = getDocumentElement(offsetParent); const isFixed = strategy === "fixed"; const rect = getBoundingClientRect(element, true, isFixed, offsetParent); let scroll = { scrollLeft: 0, scrollTop: 0 }; const offsets = createCoords(0); function setLeftRTLScrollbarOffset() { offsets.x = getWindowScrollBarX(documentElement); } if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isOffsetParentAnElement) { const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } else if (documentElement) { setLeftRTLScrollbarOffset(); } } if (isFixed && !isOffsetParentAnElement && documentElement) { setLeftRTLScrollbarOffset(); } const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); const x2 = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; const y2 = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; return { x: x2, y: y2, width: rect.width, height: rect.height }; } function isStaticPositioned(element) { return getComputedStyle2(element).position === "static"; } function getTrueOffsetParent(element, polyfill) { if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { return null; } if (polyfill) { return polyfill(element); } let rawOffsetParent = element.offsetParent; if (getDocumentElement(element) === rawOffsetParent) { rawOffsetParent = rawOffsetParent.ownerDocument.body; } return rawOffsetParent; } function getOffsetParent(element, polyfill) { const win = getWindow(element); if (isTopLayer(element)) { return win; } if (!isHTMLElement(element)) { let svgOffsetParent = getParentNode(element); while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { return svgOffsetParent; } svgOffsetParent = getParentNode(svgOffsetParent); } return win; } let offsetParent = getTrueOffsetParent(element, polyfill); while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { offsetParent = getTrueOffsetParent(offsetParent, polyfill); } if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { return win; } return offsetParent || getContainingBlock(element) || win; } var getElementRects = async function(data) { const getOffsetParentFn = this.getOffsetParent || getOffsetParent; const getDimensionsFn = this.getDimensions; const floatingDimensions = await getDimensionsFn(data.floating); return { reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), floating: { x: 0, y: 0, width: floatingDimensions.width, height: floatingDimensions.height } }; }; function isRTL(element) { return getComputedStyle2(element).direction === "rtl"; } var platform2 = { convertOffsetParentRelativeRectToViewportRelativeRect, getDocumentElement, getClippingRect, getOffsetParent, getElementRects, getClientRects, getDimensions, getScale, isElement, isRTL }; function rectsAreEqual(a2, b2) { return a2.x === b2.x && a2.y === b2.y && a2.width === b2.width && a2.height === b2.height; } function observeMove(element, onMove) { let io = null; let timeoutId; const root = getDocumentElement(element); function cleanup() { var _io; clearTimeout(timeoutId); (_io = io) == null || _io.disconnect(); io = null; } function refresh(skip, threshold) { if (skip === void 0) { skip = false; } if (threshold === void 0) { threshold = 1; } cleanup(); const elementRectForRootMargin = element.getBoundingClientRect(); const { left, top, width, height } = elementRectForRootMargin; if (!skip) { onMove(); } if (!width || !height) { return; } const insetTop = floor(top); const insetRight = floor(root.clientWidth - (left + width)); const insetBottom = floor(root.clientHeight - (top + height)); const insetLeft = floor(left); const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; const options = { rootMargin, threshold: max(0, min(1, threshold)) || 1 }; let isFirstUpdate = true; function handleObserve(entries) { const ratio = entries[0].intersectionRatio; if (ratio !== threshold) { if (!isFirstUpdate) { return refresh(); } if (!ratio) { timeoutId = setTimeout(() => { refresh(false, 1e-7); }, 1e3); } else { refresh(false, ratio); } } if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { refresh(); } isFirstUpdate = false; } try { io = new IntersectionObserver(handleObserve, { ...options, // Handle <iframe>s root: root.ownerDocument }); } catch (_e) { io = new IntersectionObserver(handleObserve, options); } io.observe(element); } refresh(true); return cleanup; } function autoUpdate(reference, floating, update2, options) { if (options === void 0) { options = {}; } const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === "function", layoutShift = typeof IntersectionObserver === "function", animationFrame = false } = options; const referenceEl = unwrapElement(reference); const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; ancestors.forEach((ancestor) => { ancestorScroll && ancestor.addEventListener("scroll", update2, { passive: true }); ancestorResize && ancestor.addEventListener("resize", update2); }); const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2) : null; let reobserveFrame = -1; let resizeObserver = null; if (elementResize) { resizeObserver = new ResizeObserver((_ref) => { let [firstEntry] = _ref; if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { resizeObserver.unobserve(floating); cancelAnimationFrame(reobserveFrame); reobserveFrame = requestAnimationFrame(() => { var _resizeObserver; (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); }); } update2(); }); if (referenceEl && !animationFrame) { resizeObserver.observe(referenceEl); } if (floating) { resizeObserver.observe(floating); } } let frameId; let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; if (animationFrame) { frameLoop(); } function frameLoop() { const nextRefRect = getBoundingClientRect(reference); if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { update2(); } prevRefRect = nextRefRect; frameId = requestAnimationFrame(frameLoop); } update2(); return () => { var _resizeObserver2; ancestors.forEach((ancestor) => { ancestorScroll && ancestor.removeEventListener("scroll", update2); ancestorResize && ancestor.removeEventListener("resize", update2); }); cleanupIo == null || cleanupIo(); (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); resizeObserver = null; if (animationFrame) { cancelAnimationFrame(frameId); } }; } var offset2 = offset; var shift2 = shift; var flip2 = flip; var size2 = size; var hide2 = hide; var limitShift2 = limitShift; var computePosition2 = (reference, floating, options) => { const cache = /* @__PURE__ */ new Map(); const mergedOptions = { platform: platform2, ...options }; const platformWithCache = { ...mergedOptions.platform, _c: cache }; return computePosition(reference, floating, { ...mergedOptions, platform: platformWithCache }); }; // node_modules/@base-ui/react/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs var React28 = __toESM(require_react(), 1); var import_react2 = __toESM(require_react(), 1); var ReactDOM3 = __toESM(require_react_dom(), 1); var isClient = typeof document !== "undefined"; var noop2 = function noop3() { }; var index = isClient ? import_react2.useLayoutEffect : noop2; function deepEqual(a2, b2) { if (a2 === b2) { return true; } if (typeof a2 !== typeof b2) { return false; } if (typeof a2 === "function" && a2.toString() === b2.toString()) { return true; } let length; let i2; let keys; if (a2 && b2 && typeof a2 === "object") { if (Array.isArray(a2)) { length = a2.length; if (length !== b2.length) return false; for (i2 = length; i2-- !== 0; ) { if (!deepEqual(a2[i2], b2[i2])) { return false; } } return true; } keys = Object.keys(a2); length = keys.length; if (length !== Object.keys(b2).length) { return false; } for (i2 = length; i2-- !== 0; ) { if (!{}.hasOwnProperty.call(b2, keys[i2])) { return false; } } for (i2 = length; i2-- !== 0; ) { const key = keys[i2]; if (key === "_owner" && a2.$$typeof) { continue; } if (!deepEqual(a2[key], b2[key])) { return false; } } return true; } return a2 !== a2 && b2 !== b2; } function getDPR(element) { if (typeof window === "undefined") { return 1; } const win = element.ownerDocument.defaultView || window; return win.devicePixelRatio || 1; } function roundByDPR(element, value) { const dpr = getDPR(element); return Math.round(value * dpr) / dpr; } function useLatestRef(value) { const ref = React28.useRef(value); index(() => { ref.current = value; }); return ref; } function useFloating(options) { if (options === void 0) { options = {}; } const { placement = "bottom", strategy = "absolute", middleware = [], platform: platform3, elements: { reference: externalReference, floating: externalFloating } = {}, transform = true, whileElementsMounted, open } = options; const [data, setData] = React28.useState({ x: 0, y: 0, strategy, placement, middlewareData: {}, isPositioned: false }); const [latestMiddleware, setLatestMiddleware] = React28.useState(middleware); if (!deepEqual(latestMiddleware, middleware)) { setLatestMiddleware(middleware); } const [_reference, _setReference] = React28.useState(null); const [_floating, _setFloating] = React28.useState(null); const setReference = React28.useCallback((node) => { if (node !== referenceRef.current) { referenceRef.current = node; _setReference(node); } }, []); const setFloating = React28.useCallback((node) => { if (node !== floatingRef.current) { floatingRef.current = node; _setFloating(node); } }, []); const referenceEl = externalReference || _reference; const floatingEl = externalFloating || _floating; const referenceRef = React28.useRef(null); const floatingRef = React28.useRef(null); const dataRef = React28.useRef(data); const hasWhileElementsMounted = whileElementsMounted != null; const whileElementsMountedRef = useLatestRef(whileElementsMounted); const platformRef = useLatestRef(platform3); const openRef = useLatestRef(open); const update2 = React28.useCallback(() => { if (!referenceRef.current || !floatingRef.current) { return; } const config = { placement, strategy, middleware: latestMiddleware }; if (platformRef.current) { config.platform = platformRef.current; } computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { const fullData = { ...data2, // The floating element's position may be recomputed while it's closed // but still mounted (such as when transitioning out). To ensure // `isPositioned` will be `false` initially on the next open, avoid // setting it to `true` when `open === false` (must be specified). isPositioned: openRef.current !== false }; if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { dataRef.current = fullData; ReactDOM3.flushSync(() => { setData(fullData); }); } }); }, [latestMiddleware, placement, strategy, platformRef, openRef]); index(() => { if (open === false && dataRef.current.isPositioned) { dataRef.current.isPositioned = false; setData((data2) => ({ ...data2, isPositioned: false })); } }, [open]); const isMountedRef = React28.useRef(false); index(() => { isMountedRef.current = true; return () => { isMountedRef.current = false; }; }, []); index(() => { if (referenceEl) referenceRef.current = referenceEl; if (floatingEl) floatingRef.current = floatingEl; if (referenceEl && floatingEl) { if (whileElementsMountedRef.current) { return whileElementsMountedRef.current(referenceEl, floatingEl, update2); } update2(); } }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); const refs = React28.useMemo(() => ({ reference: referenceRef, floating: floatingRef, setReference, setFloating }), [setReference, setFloating]); const elements = React28.useMemo(() => ({ reference: referenceEl, floating: floatingEl }), [referenceEl, floatingEl]); const floatingStyles = React28.useMemo(() => { const initialStyles = { position: strategy, left: 0, top: 0 }; if (!elements.floating) { return initialStyles; } const x2 = roundByDPR(elements.floating, data.x); const y2 = roundByDPR(elements.floating, data.y); if (transform) { return { ...initialStyles, transform: "translate(" + x2 + "px, " + y2 + "px)", ...getDPR(elements.floating) >= 1.5 && { willChange: "transform" } }; } return { position: strategy, left: x2, top: y2 }; }, [strategy, transform, elements.floating, data.x, data.y]); return React28.useMemo(() => ({ ...data, update: update2, refs, elements, floatingStyles }), [data, update2, refs, elements, floatingStyles]); } var offset3 = (options, deps) => { const result = offset2(options); return { name: result.name, fn: result.fn, options: [options, deps] }; }; var shift3 = (options, deps) => { const result = shift2(options); return { name: result.name, fn: result.fn, options: [options, deps] }; }; var limitShift3 = (options, deps) => { const result = limitShift2(options); return { fn: result.fn, options: [options, deps] }; }; var flip3 = (options, deps) => { const result = flip2(options); return { name: result.name, fn: result.fn, options: [options, deps] }; }; var size3 = (options, deps) => { const result = size2(options); return { name: result.name, fn: result.fn, options: [options, deps] }; }; var hide3 = (options, deps) => { const result = hide2(options); return { name: result.name, fn: result.fn, options: [options, deps] }; }; // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js var React33 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js var React32 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/store/createSelector.js var createSelector = (a2, b2, c2, d2, e2, f2, ...other) => { if (other.length > 0) { throw new Error(true ? "Unsupported number of selectors" : formatErrorMessage_default(1)); } let selector2; if (a2 && b2 && c2 && d2 && e2 && f2) { selector2 = (state, a1, a22, a3) => { const va = a2(state, a1, a22, a3); const vb = b2(state, a1, a22, a3); const vc = c2(state, a1, a22, a3); const vd = d2(state, a1, a22, a3); const ve = e2(state, a1, a22, a3); return f2(va, vb, vc, vd, ve, a1, a22, a3); }; } else if (a2 && b2 && c2 && d2 && e2) { selector2 = (state, a1, a22, a3) => { const va = a2(state, a1, a22, a3); const vb = b2(state, a1, a22, a3); const vc = c2(state, a1, a22, a3); const vd = d2(state, a1, a22, a3); return e2(va, vb, vc, vd, a1, a22, a3); }; } else if (a2 && b2 && c2 && d2) { selector2 = (state, a1, a22, a3) => { const va = a2(state, a1, a22, a3); const vb = b2(state, a1, a22, a3); const vc = c2(state, a1, a22, a3); return d2(va, vb, vc, a1, a22, a3); }; } else if (a2 && b2 && c2) { selector2 = (state, a1, a22, a3) => { const va = a2(state, a1, a22, a3); const vb = b2(state, a1, a22, a3); return c2(va, vb, a1, a22, a3); }; } else if (a2 && b2) { selector2 = (state, a1, a22, a3) => { const va = a2(state, a1, a22, a3); return b2(va, a1, a22, a3); }; } else if (a2) { selector2 = a2; } else { throw ( /* minify-error-disabled */ new Error("Missing arguments") ); } return selector2; }; // node_modules/@base-ui/utils/esm/store/useStore.js var React30 = __toESM(require_react(), 1); var import_shim = __toESM(require_shim(), 1); var import_with_selector = __toESM(require_with_selector(), 1); // node_modules/@base-ui/utils/esm/fastHooks.js var React29 = __toESM(require_react(), 1); var hooks = []; var currentInstance = void 0; function getInstance() { return currentInstance; } function register(hook) { hooks.push(hook); } function fastComponent(fn) { const FastComponent = (props, forwardedRef) => { const instance = useRefWithInit(createInstance).current; let result; try { currentInstance = instance; for (const hook of hooks) { hook.before(instance); } result = fn(props, forwardedRef); for (const hook of hooks) { hook.after(instance); } instance.didInitialize = true; } finally { currentInstance = void 0; } return result; }; FastComponent.displayName = fn.displayName || fn.name; return FastComponent; } function fastComponentRef(fn) { return /* @__PURE__ */ React29.forwardRef(fastComponent(fn)); } function createInstance() { return { didInitialize: false }; } // node_modules/@base-ui/utils/esm/store/useStore.js var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; function useStore(store, selector2, a1, a2, a3) { return useStoreImplementation(store, selector2, a1, a2, a3); } function useStoreR19(store, selector2, a1, a2, a3) { const getSelection = React30.useCallback(() => selector2(store.getSnapshot(), a1, a2, a3), [store, selector2, a1, a2, a3]); return (0, import_shim.useSyncExternalStore)(store.subscribe, getSelection, getSelection); } register({ before(instance) { instance.syncIndex = 0; if (!instance.didInitialize) { instance.syncTick = 1; instance.syncHooks = []; instance.didChangeStore = true; instance.getSnapshot = () => { let didChange2 = false; for (let i2 = 0; i2 < instance.syncHooks.length; i2 += 1) { const hook = instance.syncHooks[i2]; const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); if (hook.didChange || !Object.is(hook.value, value)) { didChange2 = true; hook.value = value; hook.didChange = false; } } if (didChange2) { instance.syncTick += 1; } return instance.syncTick; }; } }, after(instance) { if (instance.syncHooks.length > 0) { if (instance.didChangeStore) { instance.didChangeStore = false; instance.subscribe = (onStoreChange) => { const stores = /* @__PURE__ */ new Set(); for (const hook of instance.syncHooks) { stores.add(hook.store); } const unsubscribes = []; for (const store of stores) { unsubscribes.push(store.subscribe(onStoreChange)); } return () => { for (const unsubscribe of unsubscribes) { unsubscribe(); } }; }; } (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); } } }); function useStoreFast(store, selector2, a1, a2, a3) { const instance = getInstance(); if (!instance) { return useStoreR19(store, selector2, a1, a2, a3); } const index2 = instance.syncIndex; instance.syncIndex += 1; let hook; if (!instance.didInitialize) { hook = { store, selector: selector2, a1, a2, a3, value: selector2(store.getSnapshot(), a1, a2, a3), didChange: false }; instance.syncHooks.push(hook); } else { hook = instance.syncHooks[index2]; if (hook.store !== store || hook.selector !== selector2 || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { if (hook.store !== store) { instance.didChangeStore = true; } hook.store = store; hook.selector = selector2; hook.a1 = a1; hook.a2 = a2; hook.a3 = a3; hook.didChange = true; } } return hook.value; } function useStoreLegacy(store, selector2, a1, a2, a3) { return (0, import_with_selector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, (state) => selector2(state, a1, a2, a3)); } // node_modules/@base-ui/utils/esm/store/Store.js var Store = class { /** * The current state of the store. * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState). * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. * * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. */ // Internal state to handle recursive `setState()` calls constructor(state) { this.state = state; this.listeners = /* @__PURE__ */ new Set(); this.updateTick = 0; } /** * Registers a listener that will be called whenever the store's state changes. * * @param fn The listener function to be called on state changes. * @returns A function to unsubscribe the listener. */ subscribe = (fn) => { this.listeners.add(fn); return () => { this.listeners.delete(fn); }; }; /** * Returns the current state of the store. */ getSnapshot = () => { return this.state; }; /** * Updates the entire store's state and notifies all registered listeners. * * @param newState The new state to set for the store. */ setState(newState) { if (this.state === newState) { return; } this.state = newState; this.updateTick += 1; const currentTick = this.updateTick; for (const listener of this.listeners) { if (currentTick !== this.updateTick) { return; } listener(newState); } } /** * Merges the provided changes into the current state and notifies listeners if there are changes. * * @param changes An object containing the changes to apply to the current state. */ update(changes) { for (const key in changes) { if (!Object.is(this.state[key], changes[key])) { this.setState({ ...this.state, ...changes }); return; } } } /** * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. * * @param key The key in the store's state to update. * @param value The new value to set for the specified key. */ set(key, value) { if (!Object.is(this.state[key], value)) { this.setState({ ...this.state, [key]: value }); } } /** * Gives the state a new reference and updates all registered listeners. */ notifyAll() { const newState = { ...this.state }; this.setState(newState); } use(selector2, a1, a2, a3) { return useStore(this, selector2, a1, a2, a3); } }; // node_modules/@base-ui/utils/esm/store/ReactStore.js var React31 = __toESM(require_react(), 1); var ReactStore = class extends Store { /** * Creates a new ReactStore instance. * * @param state Initial state of the store. * @param context Non-reactive context values. * @param selectors Optional selectors for use with `useState`. */ constructor(state, context = {}, selectors4) { super(state); this.context = context; this.selectors = selectors4; } /** * Non-reactive values such as refs, callbacks, etc. */ /** * Synchronizes a single external value into the store. * * Note that the while the value in `state` is updated immediately, the value returned * by `useState` is updated before the next render (similarly to React's `useState`). */ useSyncedValue(key, value) { React31.useDebugValue(key); const store = this; useIsoLayoutEffect(() => { if (store.state[key] !== value) { store.set(key, value); } }, [store, key, value]); } /** * Synchronizes a single external value into the store and * cleans it up (sets to `undefined`) on unmount. * * Note that the while the value in `state` is updated immediately, the value returned * by `useState` is updated before the next render (similarly to React's `useState`). */ useSyncedValueWithCleanup(key, value) { const store = this; useIsoLayoutEffect(() => { if (store.state[key] !== value) { store.set(key, value); } return () => { store.set(key, void 0); }; }, [store, key, value]); } /** * Synchronizes multiple external values into the store. * * Note that the while the values in `state` are updated immediately, the values returned * by `useState` are updated before the next render (similarly to React's `useState`). */ useSyncedValues(statePart) { const store = this; if (true) { React31.useDebugValue(statePart, (p2) => Object.keys(p2)); const keys = React31.useRef(Object.keys(statePart)).current; const nextKeys = Object.keys(statePart); if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); } } const dependencies = Object.values(statePart); useIsoLayoutEffect(() => { store.update(statePart); }, [store, ...dependencies]); } /** * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` * is non-undefined, the store's state at `key` is updated to match `controlled`. */ useControlledProp(key, controlled) { React31.useDebugValue(key); const store = this; const isControlled = controlled !== void 0; useIsoLayoutEffect(() => { if (isControlled && !Object.is(store.state[key], controlled)) { store.setState({ ...store.state, [key]: controlled }); } }, [store, key, controlled, isControlled]); if (true) { const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); if (!cache.has(key)) { cache.set(key, isControlled); } const previouslyControlled = cache.get(key); if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { console.error(`A component is changing the ${isControlled ? "" : "un"}controlled state of ${key.toString()} to be ${isControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`); } } } /** Gets the current value from the store using a selector with the provided key. * * @param key Key of the selector to use. */ select(key, a1, a2, a3) { const selector2 = this.selectors[key]; return selector2(this.state, a1, a2, a3); } /** * Returns a value from the store's state using a selector function. * Used to subscribe to specific parts of the state. * This methods causes a rerender whenever the selected state changes. * * @param key Key of the selector to use. */ useState(key, a1, a2, a3) { React31.useDebugValue(key); return useStore(this, this.selectors[key], a1, a2, a3); } /** * Wraps a function with `useStableCallback` to ensure it has a stable reference * and assigns it to the context. * * @param key Key of the event callback. Must be a function in the context. * @param fn Function to assign. */ useContextCallback(key, fn) { React31.useDebugValue(key); const stableFunction = useStableCallback(fn ?? NOOP); this.context[key] = stableFunction; } /** * Returns a stable setter function for a specific key in the store's state. * It's commonly used to pass as a ref callback to React elements. * * @param key Key of the state to set. */ useStateSetter(key) { const ref = React31.useRef(void 0); if (ref.current === void 0) { ref.current = (value) => { this.set(key, value); }; } return ref.current; } /** * Observes changes derived from the store's selectors and calls the listener when the selected value changes. * * @param key Key of the selector to observe. * @param listener Listener function called when the selector result changes. */ observe(selector2, listener) { let selectFn; if (typeof selector2 === "function") { selectFn = selector2; } else { selectFn = this.selectors[selector2]; } let prevValue = selectFn(this.state); listener(prevValue, prevValue, this); return this.subscribe((nextState) => { const nextValue = selectFn(nextState); if (!Object.is(prevValue, nextValue)) { const oldValue = prevValue; prevValue = nextValue; listener(nextValue, oldValue, this); } }); } }; // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js var selectors = { open: createSelector((state) => state.open), transitionStatus: createSelector((state) => state.transitionStatus), domReferenceElement: createSelector((state) => state.domReferenceElement), referenceElement: createSelector((state) => state.positionReference ?? state.referenceElement), floatingElement: createSelector((state) => state.floatingElement), floatingId: createSelector((state) => state.floatingId) }; var FloatingRootStore = class extends ReactStore { constructor(options) { const { syncOnly, nested, onOpenChange, triggerElements, ...initialState } = options; super({ ...initialState, positionReference: initialState.referenceElement, domReferenceElement: initialState.referenceElement }, { onOpenChange, dataRef: { current: {} }, events: createEventEmitter(), nested, triggerElements }, selectors); this.syncOnly = syncOnly; } /** * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. */ syncOpenEvent = (newOpen, event) => { if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing // click events to upgrade a hover-open. event != null && isClickLikeEvent(event)) { this.context.dataRef.current.openEvent = newOpen ? event : void 0; } }; /** * Runs the root-owned side effects for an open state change. */ dispatchOpenChange = (newOpen, eventDetails) => { this.syncOpenEvent(newOpen, eventDetails.event); const details = { open: newOpen, reason: eventDetails.reason, nativeEvent: eventDetails.event, nested: this.context.nested, triggerElement: eventDetails.trigger }; this.context.events.emit("openchange", details); }; /** * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. * * @param newOpen The new open state. * @param eventDetails Details about the event that triggered the open state change. */ setOpen = (newOpen, eventDetails) => { if (this.syncOnly) { this.context.onOpenChange?.(newOpen, eventDetails); return; } this.dispatchOpenChange(newOpen, eventDetails); this.context.onOpenChange?.(newOpen, eventDetails); }; }; // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js function useSyncedFloatingRootContext(options) { const { popupStore, treatPopupAsFloatingElement = false, floatingRootContext: floatingRootContextProp, floatingId, nested, onOpenChange } = options; const open = popupStore.useState("open"); const referenceElement = popupStore.useState("activeTriggerElement"); const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); const triggerElements = popupStore.context.triggerElements; const handleOpenChange = onOpenChange; const internalStoreRef = React32.useRef(null); if (floatingRootContextProp === void 0 && internalStoreRef.current === null) { internalStoreRef.current = new FloatingRootStore({ open, transitionStatus: void 0, referenceElement, floatingElement, triggerElements, onOpenChange: handleOpenChange, floatingId, syncOnly: true, nested }); } const store = floatingRootContextProp ?? internalStoreRef.current; popupStore.useSyncedValue("floatingId", floatingId); useIsoLayoutEffect(() => { const valuesToSync = { open, floatingId, referenceElement, floatingElement }; if (isElement(referenceElement)) { valuesToSync.domReferenceElement = referenceElement; } if (store.state.positionReference === store.state.referenceElement) { valuesToSync.positionReference = referenceElement; } store.update(valuesToSync); }, [open, floatingId, referenceElement, floatingElement, store]); store.context.onOpenChange = handleOpenChange; store.context.nested = nested; return store; } // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js var FOCUSABLE_POPUP_PROPS = { tabIndex: -1, [FOCUSABLE_ATTRIBUTE]: "" }; function usePopupStore(externalStore, createStore2, treatPopupAsFloatingElement = false) { const floatingId = useId(); const nested = useFloatingParentNodeId() != null; const internalStoreRef = React33.useRef(null); if (externalStore === void 0 && internalStoreRef.current === null) { internalStoreRef.current = createStore2(floatingId, nested); } const store = externalStore ?? internalStoreRef.current; useSyncedFloatingRootContext({ popupStore: store, treatPopupAsFloatingElement, floatingRootContext: store.state.floatingRootContext, floatingId, nested, onOpenChange: store.setOpen }); return { store, internalStore: internalStoreRef.current }; } function useTriggerRegistration(id, store) { const registeredElementIdRef = React33.useRef(null); const registeredElementRef = React33.useRef(null); return React33.useCallback((element) => { if (id === void 0) { return; } let shouldSyncTriggerCount = false; if (registeredElementIdRef.current !== null) { const registeredId = registeredElementIdRef.current; const registeredElement = registeredElementRef.current; const currentElement = store.context.triggerElements.getById(registeredId); if (registeredElement && currentElement === registeredElement) { store.context.triggerElements.delete(registeredId); shouldSyncTriggerCount = true; } registeredElementIdRef.current = null; registeredElementRef.current = null; } if (element !== null) { registeredElementIdRef.current = id; registeredElementRef.current = element; store.context.triggerElements.add(id, element); shouldSyncTriggerCount = true; } if (shouldSyncTriggerCount) { const triggerCount = store.context.triggerElements.size; if (store.select("open") && store.state.triggerCount !== triggerCount) { store.set("triggerCount", triggerCount); } } }, [store, id]); } function setOpenTriggerState(state, open, trigger) { const triggerId = trigger?.id ?? null; if (triggerId || open) { state.activeTriggerId = triggerId; state.activeTriggerElement = trigger ?? null; } } function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpdates) { const isMountedByThisTrigger = store.useState("isMountedByTrigger", triggerId); const baseRegisterTrigger = useTriggerRegistration(triggerId, store); const registerTrigger = useStableCallback((element) => { baseRegisterTrigger(element); if (!element) { return; } const open = store.select("open"); const activeTriggerId = store.select("activeTriggerId"); if (activeTriggerId === triggerId) { store.update({ activeTriggerElement: element, ...open ? stateUpdates : null }); return; } if (activeTriggerId == null && open) { store.update({ activeTriggerId: triggerId, activeTriggerElement: element, ...stateUpdates }); } }); useIsoLayoutEffect(() => { if (isMountedByThisTrigger) { store.update({ activeTriggerElement: triggerElementRef.current, ...stateUpdates }); } }, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]); return { registerTrigger, isMountedByThisTrigger }; } function useImplicitActiveTrigger(store) { const open = store.useState("open"); const reactiveTriggerCount = store.useState("triggerCount"); useIsoLayoutEffect(() => { if (!open) { if (store.state.triggerCount !== 0) { store.set("triggerCount", 0); } return; } const triggerCount = store.context.triggerElements.size; const stateUpdates = {}; if (store.state.triggerCount !== triggerCount) { stateUpdates.triggerCount = triggerCount; } if (!store.select("activeTriggerId") && triggerCount === 1) { const iteratorResult = store.context.triggerElements.entries().next(); if (!iteratorResult.done) { const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; stateUpdates.activeTriggerId = implicitTriggerId; stateUpdates.activeTriggerElement = implicitTriggerElement; } } if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0) { store.update(stateUpdates); } }, [open, store, reactiveTriggerCount]); } function useOpenStateTransitions(open, store, onUnmount) { const { mounted, setMounted, transitionStatus } = useTransitionStatus(open); store.useSyncedValues({ mounted, transitionStatus }); const forceUnmount = useStableCallback(() => { setMounted(false); store.update({ activeTriggerId: null, activeTriggerElement: null, mounted: false, preventUnmountingOnClose: false }); onUnmount?.(); store.context.onOpenChangeComplete?.(false); }); const preventUnmountingOnClose = store.useState("preventUnmountingOnClose"); useOpenChangeComplete({ enabled: mounted && !open && !preventUnmountingOnClose, open, ref: store.context.popupRef, onComplete() { if (!open) { forceUnmount(); } } }); return { forceUnmount, transitionStatus }; } function usePopupInteractionProps(store, statePart) { store.useSyncedValues(statePart); useIsoLayoutEffect(() => () => { store.update({ activeTriggerProps: EMPTY_OBJECT, inactiveTriggerProps: EMPTY_OBJECT, popupProps: EMPTY_OBJECT }); }, [store]); } // node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js var PopupTriggerMap = class { constructor() { this.elementsSet = /* @__PURE__ */ new Set(); this.idMap = /* @__PURE__ */ new Map(); } /** * Adds a trigger element with the given ID. * * Note: The provided element is assumed to not be registered under multiple IDs. */ add(id, element) { const existingElement = this.idMap.get(id); if (existingElement === element) { return; } if (existingElement !== void 0) { this.elementsSet.delete(existingElement); } this.elementsSet.add(element); this.idMap.set(id, element); if (true) { if (this.elementsSet.size !== this.idMap.size) { throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); } } } /** * Removes the trigger element with the given ID. */ delete(id) { const element = this.idMap.get(id); if (element) { this.elementsSet.delete(element); this.idMap.delete(id); } } /** * Whether the given element is registered as a trigger. */ hasElement(element) { return this.elementsSet.has(element); } /** * Whether there is a registered trigger element matching the given predicate. */ hasMatchingElement(predicate) { for (const element of this.elementsSet) { if (predicate(element)) { return true; } } return false; } /** * Returns the trigger element associated with the given ID, or undefined if no such element exists. */ getById(id) { return this.idMap.get(id); } /** * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. */ entries() { return this.idMap.entries(); } /** * Returns an iterable of all registered trigger elements. */ elements() { return this.elementsSet.values(); } /** * Returns the number of registered trigger elements. */ get size() { return this.idMap.size; } }; // node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js function getEmptyRootContext() { return new FloatingRootStore({ open: false, transitionStatus: void 0, floatingElement: null, referenceElement: null, triggerElements: new PopupTriggerMap(), floatingId: void 0, syncOnly: false, nested: false, onOpenChange: void 0 }); } // node_modules/@base-ui/react/esm/utils/popups/store.js function createInitialPopupStoreState() { return { open: false, openProp: void 0, mounted: false, transitionStatus: void 0, floatingRootContext: getEmptyRootContext(), floatingId: void 0, triggerCount: 0, preventUnmountingOnClose: false, payload: void 0, activeTriggerId: null, activeTriggerElement: null, triggerIdProp: void 0, popupElement: null, positionerElement: null, activeTriggerProps: EMPTY_OBJECT, inactiveTriggerProps: EMPTY_OBJECT, popupProps: EMPTY_OBJECT }; } function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) { return new FloatingRootStore({ open: false, transitionStatus: void 0, floatingElement: null, referenceElement: null, triggerElements, floatingId, syncOnly: true, nested, onOpenChange: void 0 }); } var activeTriggerIdSelector = createSelector((state) => state.triggerIdProp ?? state.activeTriggerId); var openSelector = createSelector((state) => state.openProp ?? state.open); var popupIdSelector = createSelector((state) => { const popupId = state.popupElement?.id ?? state.floatingId; return popupId || void 0; }); function triggerOwnsOpenPopup(state, triggerId) { return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; } function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { if (triggerOwnsOpenPopup(state, triggerId)) { return true; } return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1; } var popupStoreSelectors = { open: openSelector, mounted: createSelector((state) => state.mounted), transitionStatus: createSelector((state) => state.transitionStatus), floatingRootContext: createSelector((state) => state.floatingRootContext), triggerCount: createSelector((state) => state.triggerCount), preventUnmountingOnClose: createSelector((state) => state.preventUnmountingOnClose), payload: createSelector((state) => state.payload), activeTriggerId: activeTriggerIdSelector, activeTriggerElement: createSelector((state) => state.mounted ? state.activeTriggerElement : null), popupId: popupIdSelector, /** * Whether the trigger with the given ID was used to open the popup. */ isTriggerActive: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId), /** * Whether the popup is open and was activated by a trigger with the given ID. */ isOpenedByTrigger: createSelector((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)), /** * Whether the popup is mounted and was activated by a trigger with the given ID. */ isMountedByTrigger: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted), triggerProps: createSelector((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps), /** * Popup id for the trigger that currently owns the open popup. */ triggerPopupId: createSelector((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0), popupProps: createSelector((state) => state.popupProps), popupElement: createSelector((state) => state.popupElement), positionerElement: createSelector((state) => state.positionerElement) }; // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloatingRootContext.js function useFloatingRootContext(options) { const { open = false, onOpenChange, elements = {} } = options; const floatingId = useId(); const nested = useFloatingParentNodeId() != null; if (true) { const optionDomReference = elements.reference; if (optionDomReference && !isElement(optionDomReference)) { console.error("Cannot pass a virtual element to the `elements.reference` option,", "as it must be a real DOM element. Use `context.setPositionReference()`", "instead."); } } const store = useRefWithInit(() => new FloatingRootStore({ open, transitionStatus: void 0, onOpenChange, referenceElement: elements.reference ?? null, floatingElement: elements.floating ?? null, triggerElements: new PopupTriggerMap(), floatingId, syncOnly: false, nested })).current; useIsoLayoutEffect(() => { const valuesToSync = { open, floatingId }; if (elements.reference !== void 0) { valuesToSync.referenceElement = elements.reference; valuesToSync.domReferenceElement = isElement(elements.reference) ? elements.reference : null; } if (elements.floating !== void 0) { valuesToSync.floatingElement = elements.floating; } store.update(valuesToSync); }, [open, floatingId, elements.reference, elements.floating, store]); store.context.onOpenChange = onOpenChange; store.context.nested = nested; return store; } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js function useFloating2(options = {}) { const { nodeId, externalTree } = options; const internalStore = useFloatingRootContext(options); const store = options.rootContext || internalStore; const referenceElement = store.useState("referenceElement"); const floatingElement = store.useState("floatingElement"); const domReferenceElement = store.useState("domReferenceElement"); const open = store.useState("open"); const floatingId = store.useState("floatingId"); const [positionReference, setPositionReferenceRaw] = React34.useState(null); const [localDomReference, setLocalDomReference] = React34.useState(void 0); const [localFloatingElement, setLocalFloatingElement] = React34.useState(void 0); const domReferenceRef = React34.useRef(null); const tree = useFloatingTree(externalTree); const storeElements = React34.useMemo(() => ({ reference: referenceElement, floating: floatingElement, domReference: domReferenceElement }), [referenceElement, floatingElement, domReferenceElement]); const position = useFloating({ ...options, elements: { ...storeElements, ...positionReference && { reference: positionReference } } }); const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null; const syncedFloatingElement = localFloatingElement === void 0 ? store.state.floatingElement : localFloatingElement; store.useSyncedValue("referenceElement", localDomReference ?? null); store.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement); store.useSyncedValue("floatingElement", syncedFloatingElement); const setPositionReference = React34.useCallback((node) => { const computedPositionReference = isElement(node) ? { getBoundingClientRect: () => node.getBoundingClientRect(), getClientRects: () => node.getClientRects(), contextElement: node } : node; setPositionReferenceRaw(computedPositionReference); position.refs.setReference(computedPositionReference); }, [position.refs]); const setReference = React34.useCallback((node) => { if (isElement(node) || node === null) { domReferenceRef.current = node; setLocalDomReference(node); } if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to // `null` to support `positionReference` + an unstable `reference` // callback ref. node !== null && !isElement(node)) { position.refs.setReference(node); } }, [position.refs, setLocalDomReference]); const setFloating = React34.useCallback((node) => { setLocalFloatingElement(node); position.refs.setFloating(node); }, [position.refs]); const refs = React34.useMemo(() => ({ ...position.refs, setReference, setFloating, setPositionReference, domReference: domReferenceRef }), [position.refs, setReference, setFloating, setPositionReference]); const elements = React34.useMemo(() => ({ ...position.elements, domReference: domReferenceElement }), [position.elements, domReferenceElement]); const context = React34.useMemo(() => ({ ...position, dataRef: store.context.dataRef, open, onOpenChange: store.setOpen, events: store.context.events, floatingId, refs, elements, nodeId, rootStore: store }), [position, refs, elements, nodeId, store, open, floatingId]); useIsoLayoutEffect(() => { if (domReferenceElement) { domReferenceRef.current = domReferenceElement; } }, [domReferenceElement]); useIsoLayoutEffect(() => { store.context.dataRef.current.floatingContext = context; const node = tree?.nodesRef.current.find((n2) => n2.id === nodeId); if (node) { node.context = context; } }); return React34.useMemo(() => ({ ...position, context, refs, elements, rootStore: store }), [position, refs, elements, context, store]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.js var React35 = __toESM(require_react(), 1); var isMacSafari = isMac && isSafari; function useFocus(context, props = {}) { const { enabled = true, delay } = props; const store = "rootStore" in context ? context.rootStore : context; const { events, dataRef } = store.context; const blockFocusRef = React35.useRef(false); const blockedReferenceRef = React35.useRef(null); const keyboardModalityRef = React35.useRef(true); const timeout = useTimeout(); React35.useEffect(() => { const domReference = store.select("domReferenceElement"); if (!enabled) { return void 0; } const win = getWindow(domReference); function onBlur() { const currentDomReference = store.select("domReferenceElement"); if (!store.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { blockFocusRef.current = true; } } function onKeyDown() { keyboardModalityRef.current = true; } function onPointerDown() { keyboardModalityRef.current = false; } return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); }, [store, enabled]); React35.useEffect(() => { if (!enabled) { return void 0; } function onOpenChangeLocal(details) { if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { const referenceElement = store.select("domReferenceElement"); if (isElement(referenceElement)) { blockedReferenceRef.current = referenceElement; blockFocusRef.current = true; } } } events.on("openchange", onOpenChangeLocal); return () => { events.off("openchange", onOpenChangeLocal); }; }, [events, enabled, store]); const reference = React35.useMemo(() => { function resetBlockedFocus() { blockFocusRef.current = false; blockedReferenceRef.current = null; } return { onMouseLeave() { resetBlockedFocus(); }, onFocus(event) { const focusTarget = event.currentTarget; if (blockFocusRef.current) { if (blockedReferenceRef.current === focusTarget) { return; } resetBlockedFocus(); } const target = getTarget(event.nativeEvent); if (isElement(target)) { if (isMacSafari && !event.relatedTarget) { if (!keyboardModalityRef.current && !isTypeableElement(target)) { return; } } else if (!matchesFocusVisible(target)) { return; } } const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements); const { nativeEvent, currentTarget } = event; const delayValue = typeof delay === "function" ? delay() : delay; if (store.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); return; } timeout.start(delayValue, () => { if (blockFocusRef.current) { return; } store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); }); }, onBlur(event) { resetBlockedFocus(); const relatedTarget = event.relatedTarget; const nativeEvent = event.nativeEvent; const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; timeout.start(0, () => { const domReference = store.select("domReferenceElement"); const activeEl = activeElement(ownerDocument(domReference)); if (!relatedTarget && activeEl === domReference) { return; } if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { return; } const nextFocusedElement = relatedTarget ?? activeEl; if (isTargetInsideEnabledTrigger(nextFocusedElement, store.context.triggerElements)) { return; } store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); }); } }; }, [dataRef, delay, store, timeout]); return React35.useMemo(() => enabled ? { reference, trigger: reference } : {}, [enabled, reference]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js var React36 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js var HoverInteraction = class _HoverInteraction { constructor() { this.pointerType = void 0; this.interactedInside = false; this.handler = void 0; this.blockMouseMove = true; this.performedPointerEventsMutation = false; this.pointerEventsScopeElement = null; this.pointerEventsReferenceElement = null; this.pointerEventsFloatingElement = null; this.restTimeoutPending = false; this.openChangeTimeout = new Timeout(); this.restTimeout = new Timeout(); this.handleCloseOptions = void 0; } static create() { return new _HoverInteraction(); } dispose = () => { this.openChangeTimeout.clear(); this.restTimeout.clear(); }; disposeEffect = () => { return this.dispose; }; }; var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); function clearSafePolygonPointerEventsMutation(instance) { if (!instance.performedPointerEventsMutation) { return; } const scopeElement = instance.pointerEventsScopeElement; if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); pointerEventsMutationOwnerByScopeElement.delete(scopeElement); } instance.performedPointerEventsMutation = false; instance.pointerEventsScopeElement = null; instance.pointerEventsReferenceElement = null; instance.pointerEventsFloatingElement = null; } function applySafePolygonPointerEventsMutation(instance, options) { const { scopeElement, referenceElement, floatingElement } = options; const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); if (existingOwner && existingOwner !== instance) { clearSafePolygonPointerEventsMutation(existingOwner); } clearSafePolygonPointerEventsMutation(instance); instance.performedPointerEventsMutation = true; instance.pointerEventsScopeElement = scopeElement; instance.pointerEventsReferenceElement = referenceElement; instance.pointerEventsFloatingElement = floatingElement; pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); scopeElement.style.pointerEvents = "none"; referenceElement.style.pointerEvents = "auto"; floatingElement.style.pointerEvents = "auto"; } function useHoverInteractionSharedState(store) { const data = store.context.dataRef.current; const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; if (!data.hoverInteractionState) { data.hoverInteractionState = instance; } useOnMount(data.hoverInteractionState.disposeEffect); return data.hoverInteractionState; } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js function useHoverFloatingInteraction(context, parameters = {}) { const { enabled = true, closeDelay: closeDelayProp = 0, nodeId: nodeIdProp } = parameters; const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const floatingElement = store.useState("floatingElement"); const domReferenceElement = store.useState("domReferenceElement"); const { dataRef } = store.context; const tree = useFloatingTree(); const parentId = useFloatingParentNodeId(); const instance = useHoverInteractionSharedState(store); const childClosedTimeout = useTimeout(); const isClickLikeOpenEvent2 = useStableCallback(() => { return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); }); const isHoverOpen = useStableCallback(() => { return isHoverOpenEvent(dataRef.current.openEvent?.type); }); const clearPointerEvents = useStableCallback(() => { clearSafePolygonPointerEventsMutation(instance); }); useIsoLayoutEffect(() => { if (!open) { instance.pointerType = void 0; instance.restTimeoutPending = false; instance.interactedInside = false; clearPointerEvents(); } }, [open, instance, clearPointerEvents]); React36.useEffect(() => { return clearPointerEvents; }, [clearPointerEvents]); useIsoLayoutEffect(() => { if (!enabled) { return void 0; } if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { const ref = domReferenceElement; const floatingEl = floatingElement; const doc = ownerDocument(floatingElement); const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; if (parentFloating) { parentFloating.style.pointerEvents = ""; } const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body; applySafePolygonPointerEventsMutation(instance, { scopeElement, referenceElement: ref, floatingElement: floatingEl }); return () => { clearPointerEvents(); }; } return void 0; }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); React36.useEffect(() => { if (!enabled) { return void 0; } function hasParentChildren() { return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); } function closeWithDelay(event) { const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); const close = () => { store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); tree?.events.emit("floating.closed", event); }; if (closeDelay) { instance.openChangeTimeout.start(closeDelay, close); } else { instance.openChangeTimeout.clear(); close(); } } function handleInteractInside(event) { const target = getTarget(event); if (!isInteractiveElement(target)) { instance.interactedInside = false; return; } instance.interactedInside = target?.closest("[aria-haspopup]") != null; } function onFloatingMouseEnter() { instance.openChangeTimeout.clear(); childClosedTimeout.clear(); tree?.events.off("floating.closed", onNodeClosed); clearPointerEvents(); } function onFloatingMouseLeave(event) { if (hasParentChildren() && tree) { tree.events.on("floating.closed", onNodeClosed); return; } if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) { return; } const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; const relatedTarget = event.relatedTarget; const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); if (isMovingIntoDescendantFloating) { return; } if (instance.handler) { instance.handler(event); return; } clearPointerEvents(); if (!isClickLikeOpenEvent2()) { closeWithDelay(event); } } function onNodeClosed(event) { if (!tree || !parentId || hasParentChildren()) { return; } childClosedTimeout.start(0, () => { tree.events.off("floating.closed", onNodeClosed); store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); tree.events.emit("floating.closed", event); }); } const floating = floatingElement; return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { tree?.events.off("floating.closed", onNodeClosed); }); }, [enabled, floatingElement, store, dataRef, closeDelayProp, nodeIdProp, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js var React37 = __toESM(require_react(), 1); var ReactDOM4 = __toESM(require_react_dom(), 1); var EMPTY_REF = { current: null }; function useHoverReferenceInteraction(context, props = {}) { const { enabled = true, delay = 0, handleClose = null, mouseOnly = false, restMs = 0, move = true, triggerElementRef = EMPTY_REF, externalTree, isActiveTrigger = true, getHandleCloseContext, isClosing, shouldOpen: shouldOpenProp } = props; const store = "rootStore" in context ? context.rootStore : context; const { dataRef, events } = store.context; const tree = useFloatingTree(externalTree); const instance = useHoverInteractionSharedState(store); const isHoverCloseActiveRef = React37.useRef(false); const handleCloseRef = useValueAsRef(handleClose); const delayRef = useValueAsRef(delay); const restMsRef = useValueAsRef(restMs); const enabledRef = useValueAsRef(enabled); const shouldOpenRef = useValueAsRef(shouldOpenProp); const isClosingRef = useValueAsRef(isClosing); const isClickLikeOpenEvent2 = useStableCallback(() => { return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); }); const checkShouldOpen = useStableCallback(() => { return shouldOpenRef.current?.() !== false; }); const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { const allTriggers = store.context.triggerElements; if (allTriggers.hasElement(currentTarget)) { return !currentDomReference || !contains(currentDomReference, currentTarget); } if (!isElement(target)) { return false; } const targetElement = target; return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); }); const cleanupMouseMoveHandler = useStableCallback(() => { if (!instance.handler) { return; } const doc = ownerDocument(store.select("domReferenceElement")); doc.removeEventListener("mousemove", instance.handler); instance.handler = void 0; }); const clearPointerEvents = useStableCallback(() => { clearSafePolygonPointerEventsMutation(instance); }); if (isActiveTrigger) { instance.handleCloseOptions = handleCloseRef.current?.__options; } React37.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); React37.useEffect(() => { if (!enabled) { return void 0; } function onOpenChangeLocal(details) { if (!details.open) { isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; cleanupMouseMoveHandler(); instance.openChangeTimeout.clear(); instance.restTimeout.clear(); instance.blockMouseMove = true; instance.restTimeoutPending = false; } else { isHoverCloseActiveRef.current = false; } } events.on("openchange", onOpenChangeLocal); return () => { events.off("openchange", onOpenChangeLocal); }; }, [enabled, events, instance, cleanupMouseMoveHandler]); React37.useEffect(() => { if (!enabled) { return void 0; } function closeWithDelay(event, runElseBranch = true) { const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); if (closeDelay) { instance.openChangeTimeout.start(closeDelay, () => { store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); tree?.events.emit("floating.closed", event); }); } else if (runElseBranch) { instance.openChangeTimeout.clear(); store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); tree?.events.emit("floating.closed", event); } } const trigger = triggerElementRef.current ?? (isActiveTrigger ? store.select("domReferenceElement") : null); if (!isElement(trigger)) { return void 0; } function onMouseEnter(event) { instance.openChangeTimeout.clear(); instance.blockMouseMove = false; if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { return; } const restMsValue = getRestMs(restMsRef.current); const openDelay = getDelay(delayRef.current, "open", instance.pointerType); const eventTarget = getTarget(event); const currentTarget = event.currentTarget ?? null; const currentDomReference = store.select("domReferenceElement"); let triggerNode = currentTarget; if (isElement(eventTarget) && !store.context.triggerElements.hasElement(eventTarget)) { for (const triggerElement of store.context.triggerElements.elements()) { if (contains(triggerElement, eventTarget)) { triggerNode = triggerElement; break; } } } if (isElement(currentTarget) && isElement(currentDomReference) && !store.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { triggerNode = currentDomReference; } const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); const isOpen = store.select("open"); const isInClosingTransition = isClosingRef.current?.() ?? store.select("transitionStatus") === "ending"; const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; const isRestOnlyDelay = restMsValue > 0 && !openDelay; const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; const shouldOpen = !isOpen || isOverInactive; if (shouldOpenImmediately) { if (checkShouldOpen()) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); } return; } if (isRestOnlyDelay) { return; } if (openDelay) { instance.openChangeTimeout.start(openDelay, () => { if (shouldOpen && checkShouldOpen()) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); } }); } else if (shouldOpen) { if (checkShouldOpen()) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); } } } function onMouseLeave(event) { if (isClickLikeOpenEvent2()) { clearPointerEvents(); return; } cleanupMouseMoveHandler(); const domReferenceElement = store.select("domReferenceElement"); const doc = ownerDocument(domReferenceElement); instance.restTimeout.clear(); instance.restTimeoutPending = false; const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) { return; } if (handleCloseRef.current && handleCloseContextBase) { if (!store.select("open")) { instance.openChangeTimeout.clear(); } const currentTrigger = triggerElementRef.current; instance.handler = handleCloseRef.current({ ...handleCloseContextBase, tree, x: event.clientX, y: event.clientY, onClose() { clearPointerEvents(); cleanupMouseMoveHandler(); if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store.select("domReferenceElement")) { closeWithDelay(event, true); } } }); doc.addEventListener("mousemove", instance.handler); instance.handler(event); return; } const shouldClose = instance.pointerType === "touch" ? !contains(store.select("floatingElement"), event.relatedTarget) : true; if (shouldClose) { closeWithDelay(event); } } if (move) { return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { once: true }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); } return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen]); return React37.useMemo(() => { if (!enabled) { return void 0; } function setPointerRef(event) { instance.pointerType = event.pointerType; } return { onPointerDown: setPointerRef, onPointerEnter: setPointerRef, onMouseMove(event) { const { nativeEvent } = event; const trigger = event.currentTarget; const currentDomReference = store.select("domReferenceElement"); const currentOpen = store.select("open"); const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { return; } if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { const floatingElement = store.select("floatingElement"); if (floatingElement) { const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; applySafePolygonPointerEventsMutation(instance, { scopeElement, referenceElement: trigger, floatingElement }); } } const restMsValue = getRestMs(restMsRef.current); if (currentOpen && !isOverInactive || restMsValue === 0) { return; } if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { return; } instance.restTimeout.clear(); function handleMouseMove() { instance.restTimeoutPending = false; if (isClickLikeOpenEvent2()) { return; } const latestOpen = store.select("open"); if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); } } if (instance.pointerType === "touch") { ReactDOM4.flushSync(() => { handleMouseMove(); }); } else if (isOverInactive && currentOpen) { handleMouseMove(); } else { instance.restTimeoutPending = true; instance.restTimeout.start(restMsValue, handleMouseMove); } } }; }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store, restMsRef, checkShouldOpen]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useListNavigation.js var React38 = __toESM(require_react(), 1); var ESCAPE = "Escape"; function doSwitch(orientation, vertical, horizontal) { switch (orientation) { case "vertical": return vertical; case "horizontal": return horizontal; default: return vertical || horizontal; } } function isMainOrientationKey(key, orientation) { const vertical = key === ARROW_UP || key === ARROW_DOWN; const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT; return doSwitch(orientation, vertical, horizontal); } function isMainOrientationToEndKey(key, orientation, rtl) { const vertical = key === ARROW_DOWN; const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT; return doSwitch(orientation, vertical, horizontal) || key === "Enter" || key === " " || key === ""; } function isCrossOrientationOpenKey(key, orientation, rtl) { const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT; const horizontal = key === ARROW_DOWN; return doSwitch(orientation, vertical, horizontal); } function isCrossOrientationCloseKey(key, orientation, rtl, cols) { const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT; const horizontal = key === ARROW_UP; if (orientation === "both" || orientation === "horizontal" && cols && cols > 1) { return key === ESCAPE; } return doSwitch(orientation, vertical, horizontal); } function useListNavigation(context, props) { const { listRef, activeIndex, onNavigate: onNavigateProp = () => { }, enabled = true, selectedIndex = null, allowEscape = false, loopFocus = false, nested = false, rtl = false, virtual = false, focusItemOnOpen = "auto", focusItemOnHover = true, openOnArrowKeyDown = true, disabledIndices = void 0, orientation = "vertical", parentOrientation, cols = 1, id, resetOnPointerLeave = true, externalTree } = props; if (true) { if (allowEscape) { if (!loopFocus) { console.warn("`useListNavigation` looping must be enabled to allow escaping."); } if (!virtual) { console.warn("`useListNavigation` must be virtual to allow escaping."); } } if (orientation === "vertical" && cols > 1) { console.warn("In grid list navigation mode (`cols` > 1), the `orientation` should", 'be either "horizontal" or "both".'); } } const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const floatingElement = store.useState("floatingElement"); const domReferenceElement = store.useState("domReferenceElement"); const dataRef = store.context.dataRef; const floatingFocusElement = getFloatingFocusElement(floatingElement); const typeableComboboxReference = isTypeableCombobox(domReferenceElement); const floatingFocusElementRef = useValueAsRef(floatingFocusElement); const parentId = useFloatingParentNodeId(); const tree = useFloatingTree(externalTree); const focusItemOnOpenRef = React38.useRef(focusItemOnOpen); const indexRef = React38.useRef(selectedIndex ?? -1); const keyRef = React38.useRef(null); const isPointerModalityRef = React38.useRef(true); const onNavigate = useStableCallback((event) => { onNavigateProp(indexRef.current === -1 ? null : indexRef.current, event); }); const previousOnNavigateRef = React38.useRef(onNavigate); const previousMountedRef = React38.useRef(!!floatingElement); const previousOpenRef = React38.useRef(open); const forceSyncFocusRef = React38.useRef(false); const forceScrollIntoViewRef = React38.useRef(false); const cancelQueuedFocusRef = React38.useRef(null); const disabledIndicesRef = useValueAsRef(disabledIndices); const latestOpenRef = useValueAsRef(open); const selectedIndexRef = useValueAsRef(selectedIndex); const resetOnPointerLeaveRef = useValueAsRef(resetOnPointerLeave); const focusFrame = useAnimationFrame(); const waitForListPopulatedFrame = useAnimationFrame(); const focusItem = useStableCallback(() => { function runFocus(item2) { if (virtual) { tree?.events.emit("virtualfocus", item2); } else { cancelQueuedFocusRef.current = enqueueFocus(item2, { sync: forceSyncFocusRef.current, preventScroll: true }); } } const initialItem = listRef.current[indexRef.current]; const forceScrollIntoView = forceScrollIntoViewRef.current; if (initialItem) { runFocus(initialItem); } const scheduler2 = forceSyncFocusRef.current ? (callback) => callback() : (callback) => focusFrame.request(callback); scheduler2(() => { const waitedItem = listRef.current[indexRef.current] || initialItem; if (!waitedItem) { return; } if (!initialItem) { runFocus(waitedItem); } const shouldScrollIntoView = ( // eslint-disable-next-line @typescript-eslint/no-use-before-define item && (forceScrollIntoView || !isPointerModalityRef.current) ); if (shouldScrollIntoView) { waitedItem.scrollIntoView?.({ block: "nearest", inline: "nearest" }); } }); }); useIsoLayoutEffect(() => { dataRef.current.orientation = orientation; }, [dataRef, orientation]); useIsoLayoutEffect(() => { if (!enabled) { return; } if (open && floatingElement) { indexRef.current = selectedIndex ?? -1; if (focusItemOnOpenRef.current && selectedIndex != null) { forceScrollIntoViewRef.current = true; onNavigate(); } } else if (previousMountedRef.current) { indexRef.current = -1; previousOnNavigateRef.current(); } }, [enabled, open, floatingElement, selectedIndex, onNavigate]); useIsoLayoutEffect(() => { if (!enabled) { return; } if (!open) { forceSyncFocusRef.current = false; return; } if (!floatingElement) { return; } if (activeIndex == null) { forceSyncFocusRef.current = false; if (selectedIndexRef.current != null) { return; } if (previousMountedRef.current) { indexRef.current = -1; focusItem(); } if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) { let runs = 0; const waitForListPopulated = () => { if (listRef.current[0] == null) { if (runs < 2) { const scheduler2 = runs ? (callback) => waitForListPopulatedFrame.request(callback) : queueMicrotask; scheduler2(waitForListPopulated); } runs += 1; } else { indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef) : getMaxListIndex(listRef); keyRef.current = null; onNavigate(); } }; waitForListPopulated(); } } else if (!isIndexOutOfListBounds(listRef.current, activeIndex)) { indexRef.current = activeIndex; focusItem(); forceScrollIntoViewRef.current = false; } }, [enabled, open, floatingElement, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, waitForListPopulatedFrame]); useIsoLayoutEffect(() => { if (!enabled || floatingElement || !tree || virtual || !previousMountedRef.current) { return; } const nodes = tree.nodesRef.current; const parent = nodes.find((node) => node.id === parentId)?.context?.elements.floating; const activeEl = activeElement(ownerDocument(floatingElement)); const treeContainsActiveEl = nodes.some((node) => node.context && contains(node.context.elements.floating, activeEl)); if (parent && !treeContainsActiveEl && isPointerModalityRef.current) { parent.focus({ preventScroll: true }); } }, [enabled, floatingElement, tree, parentId, virtual]); useIsoLayoutEffect(() => { previousOnNavigateRef.current = onNavigate; previousOpenRef.current = open; previousMountedRef.current = !!floatingElement; }); useIsoLayoutEffect(() => { if (!open) { keyRef.current = null; focusItemOnOpenRef.current = focusItemOnOpen; } }, [open, focusItemOnOpen]); const hasActiveIndex = activeIndex != null; const syncCurrentTarget = useStableCallback((event) => { if (!latestOpenRef.current) { return; } const index2 = listRef.current.indexOf(event.currentTarget); if (index2 !== -1 && (indexRef.current !== index2 || activeIndex !== index2)) { indexRef.current = index2; onNavigate(event); } }); const getParentOrientation = useStableCallback(() => { return parentOrientation ?? tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.dataRef?.current.orientation; }); const getMinEnabledIndex = useStableCallback(() => { return getMinListIndex(listRef, disabledIndicesRef.current); }); const commonOnKeyDown = useStableCallback((event) => { isPointerModalityRef.current = false; forceSyncFocusRef.current = true; if (event.which === 229) { return; } if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) { return; } if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) { if (!isMainOrientationKey(event.key, getParentOrientation())) { stopEvent(event); } store.setOpen(false, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent)); if (isHTMLElement(domReferenceElement)) { if (virtual) { tree?.events.emit("virtualfocus", domReferenceElement); } else { domReferenceElement.focus(); } } return; } const currentIndex = indexRef.current; const minIndex = getMinListIndex(listRef, disabledIndices); const maxIndex = getMaxListIndex(listRef, disabledIndices); if (!typeableComboboxReference) { if (event.key === "Home") { stopEvent(event); indexRef.current = minIndex; onNavigate(event); } if (event.key === "End") { stopEvent(event); indexRef.current = maxIndex; onNavigate(event); } } if (cols > 1) { const sizes = Array.from({ length: listRef.current.length }, () => ({ width: 1, height: 1 })); const cellMap = createGridCellMap(sizes, cols, false); const minGridIndex = cellMap.findIndex((index3) => index3 != null && !isListIndexDisabled(listRef.current, index3, disabledIndices)); const maxGridIndex = cellMap.reduce((foundIndex, index3, cellIndex) => index3 != null && !isListIndexDisabled(listRef.current, index3, disabledIndices) ? cellIndex : foundIndex, -1); const index2 = cellMap[getGridNavigatedIndex(cellMap.map((itemIndex) => itemIndex != null ? listRef.current[itemIndex] : null), { event, orientation, loopFocus, rtl, cols, // treat undefined (empty grid spaces) as disabled indices so we // don't end up in them disabledIndices: getGridCellIndices([...(typeof disabledIndices !== "function" ? disabledIndices : null) || listRef.current.map((_, listIndex) => isListIndexDisabled(listRef.current, listIndex, disabledIndices) ? listIndex : void 0), void 0], cellMap), minIndex: minGridIndex, maxIndex: maxGridIndex, prevIndex: getGridCellIndexOfCorner( indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols, // use a corner matching the edge closest to the direction // we're moving in so we don't end up in the same item. Prefer // top/left over bottom/right. // eslint-disable-next-line no-nested-ternary event.key === ARROW_DOWN ? "bl" : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? "tr" : "tl" ), stopEvent: true })]; if (index2 != null) { indexRef.current = index2; onNavigate(event); } if (orientation === "both") { return; } } if (isMainOrientationKey(event.key, orientation)) { stopEvent(event); if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) { indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex; onNavigate(event); return; } if (isMainOrientationToEndKey(event.key, orientation, rtl)) { if (loopFocus) { if (currentIndex >= maxIndex) { if (allowEscape && currentIndex !== listRef.current.length) { indexRef.current = -1; } else { forceSyncFocusRef.current = false; indexRef.current = minIndex; } } else { indexRef.current = findNonDisabledListIndex(listRef.current, { startingIndex: currentIndex, disabledIndices }); } } else { indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef.current, { startingIndex: currentIndex, disabledIndices })); } } else if (loopFocus) { if (currentIndex <= minIndex) { if (allowEscape && currentIndex !== -1) { indexRef.current = listRef.current.length; } else { forceSyncFocusRef.current = false; indexRef.current = maxIndex; } } else { indexRef.current = findNonDisabledListIndex(listRef.current, { startingIndex: currentIndex, decrement: true, disabledIndices }); } } else { indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef.current, { startingIndex: currentIndex, decrement: true, disabledIndices })); } if (isIndexOutOfListBounds(listRef.current, indexRef.current)) { indexRef.current = -1; } onNavigate(event); } }); const item = React38.useMemo(() => { const itemProps = { onFocus(event) { forceSyncFocusRef.current = true; syncCurrentTarget(event); }, onClick: ({ currentTarget }) => currentTarget.focus({ preventScroll: true }), // Safari onMouseMove(event) { forceSyncFocusRef.current = true; forceScrollIntoViewRef.current = false; if (focusItemOnHover) { syncCurrentTarget(event); } }, onPointerLeave(event) { if (!latestOpenRef.current || !isPointerModalityRef.current || event.pointerType === "touch") { return; } forceSyncFocusRef.current = true; const relatedTarget = event.relatedTarget; if (!focusItemOnHover || listRef.current.includes(relatedTarget)) { return; } if (!resetOnPointerLeaveRef.current) { return; } cancelQueuedFocusRef.current?.(); cancelQueuedFocusRef.current = null; indexRef.current = -1; onNavigate(event); if (!virtual) { const floatingFocusEl = floatingFocusElementRef.current; const activeEl = activeElement(ownerDocument(floatingFocusEl)); if (floatingFocusEl && contains(floatingFocusEl, activeEl)) { floatingFocusEl.focus({ preventScroll: true }); } } } }; return itemProps; }, [syncCurrentTarget, latestOpenRef, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, resetOnPointerLeaveRef, virtual]); const ariaActiveDescendantProp = React38.useMemo(() => { return virtual && open && hasActiveIndex && { "aria-activedescendant": `${id}-${activeIndex}` }; }, [virtual, open, hasActiveIndex, id, activeIndex]); const floating = React38.useMemo(() => { return { "aria-orientation": orientation === "both" ? void 0 : orientation, ...!typeableComboboxReference ? ariaActiveDescendantProp : {}, onKeyDown(event) { if (event.key === "Tab" && event.shiftKey && open && !virtual) { const target = getTarget(event.nativeEvent); if (target && !contains(floatingFocusElementRef.current, target)) { return; } stopEvent(event); store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); if (isHTMLElement(domReferenceElement)) { domReferenceElement.focus(); } return; } commonOnKeyDown(event); }, onPointerMove() { isPointerModalityRef.current = true; } }; }, [ariaActiveDescendantProp, commonOnKeyDown, floatingFocusElementRef, orientation, typeableComboboxReference, store, open, virtual, domReferenceElement]); const trigger = React38.useMemo(() => { function openOnNavigationKeyDown(event) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent, event.currentTarget)); } function checkVirtualMouse(event) { if (focusItemOnOpen === "auto" && isVirtualClick(event.nativeEvent)) { focusItemOnOpenRef.current = !virtual; } } function checkVirtualPointer(event) { focusItemOnOpenRef.current = focusItemOnOpen; if (focusItemOnOpen === "auto" && isVirtualPointerEvent(event.nativeEvent)) { focusItemOnOpenRef.current = true; } } return { onKeyDown(event) { const currentOpen = store.select("open"); isPointerModalityRef.current = false; const isArrowKey = event.key.startsWith("Arrow"); const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl); const isMainKey = isMainOrientationKey(event.key, orientation); const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === "Enter" || event.key.trim() === ""; if (virtual && currentOpen) { return commonOnKeyDown(event); } if (!currentOpen && !openOnArrowKeyDown && isArrowKey) { return void 0; } if (isNavigationKey) { const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation()); keyRef.current = nested && isParentMainKey ? null : event.key; } if (nested) { if (isParentCrossOpenKey) { stopEvent(event); if (currentOpen) { indexRef.current = getMinEnabledIndex(); onNavigate(event); } else { openOnNavigationKeyDown(event); } } return void 0; } if (isMainKey) { if (selectedIndexRef.current != null) { indexRef.current = selectedIndexRef.current; } stopEvent(event); if (!currentOpen && openOnArrowKeyDown) { openOnNavigationKeyDown(event); } else { commonOnKeyDown(event); } if (currentOpen) { onNavigate(event); } } return void 0; }, onFocus(event) { if (store.select("open") && !virtual) { indexRef.current = -1; onNavigate(event); } }, onPointerDown: checkVirtualPointer, onPointerEnter: checkVirtualPointer, onMouseDown: checkVirtualMouse, onClick: checkVirtualMouse }; }, [commonOnKeyDown, focusItemOnOpen, getMinEnabledIndex, nested, onNavigate, store, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndexRef, virtual]); const reference = React38.useMemo(() => { return { ...ariaActiveDescendantProp, ...trigger }; }, [ariaActiveDescendantProp, trigger]); return React38.useMemo(() => enabled ? { reference, floating, item, trigger } : {}, [enabled, reference, floating, trigger, item]); } // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useTypeahead.js var React39 = __toESM(require_react(), 1); function useTypeahead(context, props) { const { listRef, elementsRef, activeIndex, onMatch: onMatchProp, onTyping, enabled = true, resetMs = 750, selectedIndex = null } = props; const store = "rootStore" in context ? context.rootStore : context; const open = store.useState("open"); const timeout = useTimeout(); const stringRef = React39.useRef(""); const prevIndexRef = React39.useRef(selectedIndex ?? activeIndex ?? -1); const matchIndexRef = React39.useRef(null); const onKeyDown = useStableCallback((event) => { function isVisible2(index3) { const element = elementsRef?.current[index3]; return !element || isElementVisible(element); } function getMatchingIndex(list, string, startIndex2 = 0) { if (list.length === 0) { return -1; } const normalizedStartIndex = (startIndex2 % list.length + list.length) % list.length; const lowerString = string.toLocaleLowerCase(); for (let offset4 = 0; offset4 < list.length; offset4 += 1) { const index3 = (normalizedStartIndex + offset4) % list.length; const text = list[index3]; if (!text?.toLocaleLowerCase().startsWith(lowerString) || !isVisible2(index3)) { continue; } return index3; } return -1; } const listContent = listRef.current; if (stringRef.current.length > 0 && event.key === " ") { stopEvent(event); onTyping?.(true); } if (stringRef.current.length > 0 && stringRef.current[0] !== " ") { if (getMatchingIndex(listContent, stringRef.current) === -1 && event.key !== " ") { onTyping?.(false); } } if (listContent == null || // Character key. event.key.length !== 1 || // Modifier key. event.ctrlKey || event.metaKey || event.altKey) { return; } if (open && event.key !== " ") { stopEvent(event); onTyping?.(true); } const isNewSession = stringRef.current === ""; if (isNewSession) { prevIndexRef.current = selectedIndex ?? activeIndex ?? -1; } const allowRapidSuccessionOfFirstLetter = listContent.every((text) => text ? text[0]?.toLocaleLowerCase() !== text[1]?.toLocaleLowerCase() : true); if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) { stringRef.current = ""; prevIndexRef.current = matchIndexRef.current; } stringRef.current += event.key; timeout.start(resetMs, () => { stringRef.current = ""; prevIndexRef.current = matchIndexRef.current; onTyping?.(false); }); const prevIndex = isNewSession ? selectedIndex ?? activeIndex ?? -1 : prevIndexRef.current; const startIndex = (prevIndex ?? 0) + 1; const index2 = getMatchingIndex(listContent, stringRef.current, startIndex); if (index2 !== -1) { onMatchProp?.(index2); matchIndexRef.current = index2; } else if (event.key !== " ") { stringRef.current = ""; onTyping?.(false); } }); const onBlur = useStableCallback((event) => { const next = event.relatedTarget; const currentDomReferenceElement = store.select("domReferenceElement"); const currentFloatingElement = store.select("floatingElement"); const withinComposite = contains(currentDomReferenceElement, next) || contains(currentFloatingElement, next); if (withinComposite) { return; } timeout.clear(); stringRef.current = ""; prevIndexRef.current = matchIndexRef.current; onTyping?.(false); }); useIsoLayoutEffect(() => { if (!open && selectedIndex !== null) { return; } timeout.clear(); matchIndexRef.current = null; if (stringRef.current !== "") { stringRef.current = ""; } }, [open, selectedIndex, timeout]); useIsoLayoutEffect(() => { if (open && stringRef.current === "") { prevIndexRef.current = selectedIndex ?? activeIndex ?? -1; } }, [open, selectedIndex, activeIndex]); const sharedProps = React39.useMemo(() => ({ onKeyDown, onBlur }), [onKeyDown, onBlur]); return React39.useMemo(() => enabled ? { reference: sharedProps, floating: sharedProps } : {}, [enabled, sharedProps]); } // node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.js var CURSOR_SPEED_THRESHOLD = 0.1; var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; var POLYGON_BUFFER = 0.5; function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; } function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { let isInsideValue = false; if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { isInsideValue = !isInsideValue; } if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { isInsideValue = !isInsideValue; } if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { isInsideValue = !isInsideValue; } if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { isInsideValue = !isInsideValue; } return isInsideValue; } function isInsideRect(pointX, pointY, rect) { return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; } function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { const minX = Math.min(x1, x2); const maxX = Math.max(x1, x2); const minY = Math.min(y1, y2); const maxY = Math.max(y1, y2); return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; } function safePolygon(options = {}) { const { blockPointerEvents = false } = options; const timeout = new Timeout(); const fn = ({ x: x2, y: y2, placement, elements, onClose, nodeId, tree }) => { const side = placement?.split("-")[0]; let hasLanded = false; let lastX = null; let lastY = null; let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; function isCursorMovingSlowly(nextX, nextY) { const currentTime = performance.now(); const elapsedTime = currentTime - lastCursorTime; if (lastX === null || lastY === null || elapsedTime === 0) { lastX = nextX; lastY = nextY; lastCursorTime = currentTime; return false; } const deltaX = nextX - lastX; const deltaY = nextY - lastY; const distanceSquared = deltaX * deltaX + deltaY * deltaY; const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; lastX = nextX; lastY = nextY; lastCursorTime = currentTime; return distanceSquared < thresholdSquared; } function close() { timeout.clear(); onClose(); } return function onMouseMove(event) { timeout.clear(); const domReference = elements.domReference; const floating = elements.floating; if (!domReference || !floating || side == null || x2 == null || y2 == null) { return void 0; } const { clientX, clientY } = event; const target = getTarget(event); const isLeave = event.type === "mouseleave"; const isOverFloatingEl = contains(floating, target); const isOverReferenceEl = contains(domReference, target); if (isOverFloatingEl) { hasLanded = true; if (!isLeave) { return void 0; } } if (isOverReferenceEl) { hasLanded = false; if (!isLeave) { hasLanded = true; return void 0; } } if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { return void 0; } function hasOpenChildNode() { return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); } function closeIfNoOpenChild() { if (!hasOpenChildNode()) { close(); } } if (hasOpenChildNode()) { return void 0; } const refRect = domReference.getBoundingClientRect(); const rect = floating.getBoundingClientRect(); const cursorLeaveFromRight = x2 > rect.right - rect.width / 2; const cursorLeaveFromBottom = y2 > rect.bottom - rect.height / 2; const isFloatingWider = rect.width > refRect.width; const isFloatingTaller = rect.height > refRect.height; const left = (isFloatingWider ? refRect : rect).left; const right = (isFloatingWider ? refRect : rect).right; const top = (isFloatingTaller ? refRect : rect).top; const bottom = (isFloatingTaller ? refRect : rect).bottom; if (side === "top" && y2 >= refRect.bottom - 1 || side === "bottom" && y2 <= refRect.top + 1 || side === "left" && x2 >= refRect.right - 1 || side === "right" && x2 <= refRect.left + 1) { closeIfNoOpenChild(); return void 0; } let isInsideTroughRect = false; switch (side) { case "top": isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); break; case "bottom": isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); break; case "left": isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); break; case "right": isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); break; default: } if (isInsideTroughRect) { return void 0; } if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { closeIfNoOpenChild(); return void 0; } if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { closeIfNoOpenChild(); return void 0; } let isInsidePolygon = false; switch (side) { case "top": { const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; const cursorPointY = y2 + POLYGON_BUFFER + 1; const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); break; } case "bottom": { const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; const cursorPointY = y2 - POLYGON_BUFFER; const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); break; } case "left": { const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; const cursorPointX = x2 + POLYGON_BUFFER + 1; const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); break; } case "right": { const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; const cursorPointX = x2 - POLYGON_BUFFER; const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); break; } default: } if (!isInsidePolygon) { closeIfNoOpenChild(); } else if (!hasLanded) { timeout.start(40, closeIfNoOpenChild); } return void 0; }; }; fn.__options = { ...options, blockPointerEvents }; return fn; } // node_modules/@base-ui/react/esm/utils/popupStateMapping.js var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) { CommonPopupDataAttributes2["open"] = "data-open"; CommonPopupDataAttributes2["closed"] = "data-closed"; CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle"; CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle"; CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden"; CommonPopupDataAttributes2["side"] = "data-side"; CommonPopupDataAttributes2["align"] = "data-align"; return CommonPopupDataAttributes2; })({}); var CommonTriggerDataAttributes = /* @__PURE__ */ (function(CommonTriggerDataAttributes2) { CommonTriggerDataAttributes2["popupOpen"] = "data-popup-open"; CommonTriggerDataAttributes2["pressed"] = "data-pressed"; return CommonTriggerDataAttributes2; })({}); var TRIGGER_HOOK = { [CommonTriggerDataAttributes.popupOpen]: "" }; var PRESSABLE_TRIGGER_HOOK = { [CommonTriggerDataAttributes.popupOpen]: "", [CommonTriggerDataAttributes.pressed]: "" }; var POPUP_OPEN_HOOK = { [CommonPopupDataAttributes.open]: "" }; var POPUP_CLOSED_HOOK = { [CommonPopupDataAttributes.closed]: "" }; var ANCHOR_HIDDEN_HOOK = { [CommonPopupDataAttributes.anchorHidden]: "" }; var triggerOpenStateMapping = { open(value) { if (value) { return TRIGGER_HOOK; } return null; } }; var pressableTriggerOpenStateMapping = { open(value) { if (value) { return PRESSABLE_TRIGGER_HOOK; } return null; } }; var popupStateMapping = { open(value) { if (value) { return POPUP_OPEN_HOOK; } return POPUP_CLOSED_HOOK; }, anchorHidden(value) { if (value) { return ANCHOR_HIDDEN_HOOK; } return null; } }; // node_modules/@base-ui/utils/esm/inertValue.js function inertValue(value) { if (isReactVersionAtLeast(19)) { return value; } return value ? "true" : void 0; } // node_modules/@base-ui/react/esm/utils/InternalBackdrop.js var React40 = __toESM(require_react(), 1); var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); var InternalBackdrop = /* @__PURE__ */ React40.forwardRef(function InternalBackdrop2(props, ref) { const { cutout, ...otherProps } = props; let clipPath; if (cutout) { const rect = cutout.getBoundingClientRect(); clipPath = `polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${rect.left}px ${rect.top}px,${rect.left}px ${rect.bottom}px,${rect.right}px ${rect.bottom}px,${rect.right}px ${rect.top}px,${rect.left}px ${rect.top}px)`; } return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { ref, role: "presentation", "data-base-ui-inert": "", ...otherProps, style: { position: "fixed", inset: 0, userSelect: "none", WebkitUserSelect: "none", clipPath } }); }); if (true) InternalBackdrop.displayName = "InternalBackdrop"; // node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js var React43 = __toESM(require_react(), 1); // node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js var React41 = __toESM(require_react(), 1); function useEnhancedClickHandler(handler) { const lastClickInteractionTypeRef = React41.useRef(""); const handlePointerDown = React41.useCallback((event) => { if (event.defaultPrevented) { return; } lastClickInteractionTypeRef.current = event.pointerType; handler(event, event.pointerType); }, [handler]); const handleClick = React41.useCallback((event) => { if (event.detail === 0) { handler(event, "keyboard"); return; } if ("pointerType" in event) { handler(event, event.pointerType); } else { handler(event, lastClickInteractionTypeRef.current); } lastClickInteractionTypeRef.current = ""; }, [handler]); return { onClick: handleClick, onPointerDown: handlePointerDown }; } // node_modules/@base-ui/react/esm/internals/useValueChanged.js var React42 = __toESM(require_react(), 1); function useValueChanged(value, onChange) { const valueRef = React42.useRef(value); const onChangeCallback = useStableCallback(onChange); useIsoLayoutEffect(() => { if (valueRef.current === value) { return; } onChangeCallback(valueRef.current); }, [value, onChangeCallback]); useIsoLayoutEffect(() => { valueRef.current = value; }, [value]); } // node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js function useOpenMethodTriggerProps(open, setOpenMethod) { const handleTriggerClick = useStableCallback((_, interactionType) => { const isOpen = typeof open === "function" ? open() : open; if (!isOpen) { setOpenMethod(interactionType || // On iOS Safari, the hitslop around touch targets means tapping outside an element's // bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType` // will be "" in that case. (isIOS ? "touch" : "")); } }); const { onClick, onPointerDown } = useEnhancedClickHandler(handleTriggerClick); return React43.useMemo(() => ({ onClick, onPointerDown }), [onClick, onPointerDown]); } function useOpenInteractionType(open) { const [openMethod, setOpenMethod] = React43.useState(null); const triggerProps = useOpenMethodTriggerProps(open, setOpenMethod); useValueChanged(open, (previousOpen) => { if (previousOpen && !open) { setOpenMethod(null); } }); return React43.useMemo(() => ({ openMethod, triggerProps }), [openMethod, triggerProps]); } // node_modules/@base-ui/react/esm/autocomplete/index.parts.js var index_parts_exports = {}; __export(index_parts_exports, { Arrow: () => ComboboxArrow, Backdrop: () => ComboboxBackdrop, Clear: () => ComboboxClear, Collection: () => ComboboxCollection, Empty: () => ComboboxEmpty, Group: () => ComboboxGroup, GroupLabel: () => ComboboxGroupLabel, Icon: () => ComboboxIcon, Input: () => ComboboxInput, InputGroup: () => AutocompleteInputGroup, Item: () => AutocompleteItem, List: () => ComboboxList, Popup: () => ComboboxPopup, Portal: () => ComboboxPortal, Positioner: () => ComboboxPositioner, Root: () => AutocompleteRoot, Row: () => ComboboxRow, Separator: () => Separator, Status: () => ComboboxStatus, Trigger: () => AutocompleteTrigger, Value: () => AutocompleteValue, useFilter: () => useCoreFilter, useFilteredItems: () => useFilteredItems }); // node_modules/@base-ui/react/esm/autocomplete/root/AutocompleteRoot.js var React53 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/root/AriaCombobox.js var React52 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/root/ComboboxRootContext.js var React44 = __toESM(require_react(), 1); var ComboboxRootContext = /* @__PURE__ */ React44.createContext(void 0); if (true) ComboboxRootContext.displayName = "ComboboxRootContext"; var ComboboxFloatingContext = /* @__PURE__ */ React44.createContext(void 0); if (true) ComboboxFloatingContext.displayName = "ComboboxFloatingContext"; var ComboboxDerivedItemsContext = /* @__PURE__ */ React44.createContext(void 0); if (true) ComboboxDerivedItemsContext.displayName = "ComboboxDerivedItemsContext"; var ComboboxInputValueContext = /* @__PURE__ */ React44.createContext(""); if (true) ComboboxInputValueContext.displayName = "ComboboxInputValueContext"; function useComboboxRootContext() { const context = React44.useContext(ComboboxRootContext); if (!context) { throw new Error(true ? "Base UI: ComboboxRootContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(22)); } return context; } function useComboboxFloatingContext() { const context = React44.useContext(ComboboxFloatingContext); if (!context) { throw new Error(true ? "Base UI: ComboboxFloatingContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(23)); } return context; } function useComboboxDerivedItemsContext() { const context = React44.useContext(ComboboxDerivedItemsContext); if (!context) { throw new Error(true ? "Base UI: ComboboxItemsContext is missing. Combobox parts must be placed within <Combobox.Root>." : formatErrorMessage_default(24)); } return context; } function useComboboxInputValueContext() { return React44.useContext(ComboboxInputValueContext); } // node_modules/@base-ui/react/esm/internals/itemEquality.js var defaultItemEquality = (itemValue, selectedValue) => Object.is(itemValue, selectedValue); function compareItemEquality(itemValue, selectedValue, comparer) { if (itemValue == null || selectedValue == null) { return Object.is(itemValue, selectedValue); } return comparer(itemValue, selectedValue); } function selectedValueIncludes(selectedValues, itemValue, comparer) { if (!selectedValues || selectedValues.length === 0) { return false; } return selectedValues.some((selectedValue) => { if (selectedValue === void 0) { return false; } return compareItemEquality(itemValue, selectedValue, comparer); }); } function findItemIndex(itemValues, selectedValue, comparer) { if (!itemValues || itemValues.length === 0) { return -1; } return itemValues.findIndex((itemValue) => { if (itemValue === void 0) { return false; } return compareItemEquality(itemValue, selectedValue, comparer); }); } function removeItem(selectedValues, itemValue, comparer) { return selectedValues.filter((selectedValue) => !compareItemEquality(itemValue, selectedValue, comparer)); } // node_modules/@base-ui/react/esm/internals/resolveValueLabel.js var React45 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/internals/serializeValue.js function serializeValue(value) { if (value == null) { return ""; } if (typeof value === "string") { return value; } try { return JSON.stringify(value); } catch { return String(value); } } // node_modules/@base-ui/react/esm/internals/resolveValueLabel.js var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); function isGroupedItems(items) { return items != null && items.length > 0 && typeof items[0] === "object" && items[0] != null && "items" in items[0]; } function hasNullItemLabel(items) { if (!Array.isArray(items)) { return items != null && "null" in items; } const arrayItems = items; if (isGroupedItems(arrayItems)) { for (const group of arrayItems) { for (const item of group.items) { if (item && item.value == null && item.label != null) { return true; } } } return false; } for (const item of arrayItems) { if (item && item.value == null && item.label != null) { return true; } } return false; } function stringifyAsLabel(item, itemToStringLabel) { if (itemToStringLabel && item != null) { return itemToStringLabel(item) ?? ""; } if (item && typeof item === "object") { if ("label" in item && item.label != null) { return String(item.label); } if ("value" in item) { return String(item.value); } } return serializeValue(item); } function stringifyAsValue(item, itemToStringValue) { if (itemToStringValue && item != null) { return itemToStringValue(item) ?? ""; } if (item && typeof item === "object" && "value" in item && "label" in item) { return serializeValue(item.value); } return serializeValue(item); } // node_modules/@base-ui/react/esm/combobox/store.js var selectors2 = { id: createSelector((state) => state.id), labelId: createSelector((state) => state.labelId), items: createSelector((state) => state.items), selectedValue: createSelector((state) => state.selectedValue), hasSelectionChips: createSelector((state) => { const selectedValue = state.selectedValue; return Array.isArray(selectedValue) && selectedValue.length > 0; }), hasSelectedValue: createSelector((state) => { const { selectedValue, selectionMode } = state; if (selectedValue == null) { return false; } if (selectionMode === "multiple" && Array.isArray(selectedValue)) { return selectedValue.length > 0; } return true; }), hasNullItemLabel: createSelector((state, enabled) => { return enabled ? hasNullItemLabel(state.items) : false; }), open: createSelector((state) => state.open), mounted: createSelector((state) => state.mounted), forceMounted: createSelector((state) => state.forceMounted), inline: createSelector((state) => state.inline), activeIndex: createSelector((state) => state.activeIndex), selectedIndex: createSelector((state) => state.selectedIndex), isActive: createSelector((state, index2) => state.activeIndex === index2), isSelected: createSelector((state, itemValue) => { const comparer = state.isItemEqualToValue; const selectedValue = state.selectedValue; if (Array.isArray(selectedValue)) { return selectedValue.some((selectedItem) => compareItemEquality(itemValue, selectedItem, comparer)); } return compareItemEquality(itemValue, selectedValue, comparer); }), transitionStatus: createSelector((state) => state.transitionStatus), popupProps: createSelector((state) => state.popupProps), inputProps: createSelector((state) => state.inputProps), triggerProps: createSelector((state) => state.triggerProps), itemProps: createSelector((state) => state.itemProps), positionerElement: createSelector((state) => state.positionerElement), listElement: createSelector((state) => state.listElement), triggerElement: createSelector((state) => state.triggerElement), inputElement: createSelector((state) => state.inputElement), inputGroupElement: createSelector((state) => state.inputGroupElement), popupSide: createSelector((state) => state.popupSide), openMethod: createSelector((state) => state.openMethod), inputInsidePopup: createSelector((state) => state.inputInsidePopup), inputOwnsFormValue: createSelector((state) => state.inputOwnsFormValue), selectionMode: createSelector((state) => state.selectionMode), name: createSelector((state) => state.name), form: createSelector((state) => state.form), disabled: createSelector((state) => state.disabled), readOnly: createSelector((state) => state.readOnly), required: createSelector((state) => state.required), grid: createSelector((state) => state.grid), virtualized: createSelector((state) => state.virtualized), itemToStringLabel: createSelector((state) => state.itemToStringLabel), isItemEqualToValue: createSelector((state) => state.isItemEqualToValue), modal: createSelector((state) => state.modal), autoHighlight: createSelector((state) => state.autoHighlight), submitOnItemClick: createSelector((state) => state.submitOnItemClick) }; // node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js var React46 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js var FieldControlDataAttributes = /* @__PURE__ */ (function(FieldControlDataAttributes2) { FieldControlDataAttributes2["disabled"] = "data-disabled"; FieldControlDataAttributes2["valid"] = "data-valid"; FieldControlDataAttributes2["invalid"] = "data-invalid"; FieldControlDataAttributes2["touched"] = "data-touched"; FieldControlDataAttributes2["dirty"] = "data-dirty"; FieldControlDataAttributes2["filled"] = "data-filled"; FieldControlDataAttributes2["focused"] = "data-focused"; return FieldControlDataAttributes2; })({}); // node_modules/@base-ui/react/esm/internals/field-constants/constants.js var DEFAULT_VALIDITY_STATE = { badInput: false, customError: false, patternMismatch: false, rangeOverflow: false, rangeUnderflow: false, stepMismatch: false, tooLong: false, tooShort: false, typeMismatch: false, valid: null, valueMissing: false }; var DEFAULT_FIELD_STATE_ATTRIBUTES = { valid: null, touched: false, dirty: false, filled: false, focused: false }; var DEFAULT_FIELD_ROOT_STATE = { disabled: false, ...DEFAULT_FIELD_STATE_ATTRIBUTES }; var fieldValidityMapping = { valid(value) { if (value === null) { return null; } if (value) { return { [FieldControlDataAttributes.valid]: "" }; } return { [FieldControlDataAttributes.invalid]: "" }; } }; // node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js var DEFAULT_FIELD_ROOT_CONTEXT = { invalid: void 0, name: void 0, validityData: { state: DEFAULT_VALIDITY_STATE, errors: [], error: "", value: "", initialValue: null }, setValidityData: NOOP, disabled: void 0, touched: DEFAULT_FIELD_STATE_ATTRIBUTES.touched, setTouched: NOOP, dirty: DEFAULT_FIELD_STATE_ATTRIBUTES.dirty, setDirty: NOOP, filled: DEFAULT_FIELD_STATE_ATTRIBUTES.filled, setFilled: NOOP, focused: DEFAULT_FIELD_STATE_ATTRIBUTES.focused, setFocused: NOOP, validate: () => null, validationMode: "onSubmit", validationDebounceTime: 0, shouldValidateOnChange: () => false, state: DEFAULT_FIELD_ROOT_STATE, markedDirtyRef: { current: false }, registerFieldControl: NOOP, validation: { getValidationProps: (props = EMPTY_OBJECT) => props, getInputValidationProps: (props = EMPTY_OBJECT) => props, inputRef: { current: null }, commit: async () => { } } }; var FieldRootContext = /* @__PURE__ */ React46.createContext(DEFAULT_FIELD_ROOT_CONTEXT); if (true) FieldRootContext.displayName = "FieldRootContext"; function useFieldRootContext(optional = true) { const context = React46.useContext(FieldRootContext); if (context.setValidityData === NOOP && !optional) { throw new Error(true ? "Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>." : formatErrorMessage_default(28)); } return context; } // node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js var React47 = __toESM(require_react(), 1); function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true) { const { registerFieldControl } = useFieldRootContext(); const sourceRef = React47.useRef(null); if (!sourceRef.current) { sourceRef.current = /* @__PURE__ */ Symbol(); } useIsoLayoutEffect(() => { const source = sourceRef.current; if (!source || !enabled) { return void 0; } const registration = { controlRef, getValue: getFormValueOverride, id, value }; registerFieldControl(source, registration); return () => { registerFieldControl(source, void 0); }; }, [controlRef, enabled, getFormValueOverride, id, registerFieldControl, value]); } // node_modules/@base-ui/react/esm/internals/form-context/FormContext.js var React48 = __toESM(require_react(), 1); var FormContext = /* @__PURE__ */ React48.createContext({ formRef: { current: { fields: /* @__PURE__ */ new Map() } }, errors: {}, clearErrors: NOOP, validationMode: "onSubmit", submitAttemptedRef: { current: false } }); if (true) FormContext.displayName = "FormContext"; function useFormContext() { return React48.useContext(FormContext); } // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js var React50 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js var React49 = __toESM(require_react(), 1); var LabelableContext = /* @__PURE__ */ React49.createContext({ controlId: void 0, registerControlId: NOOP, labelId: void 0, setLabelId: NOOP, messageIds: [], setMessageIds: NOOP, getDescriptionProps: (externalProps) => externalProps }); if (true) LabelableContext.displayName = "LabelableContext"; function useLabelableContext() { return React49.useContext(LabelableContext); } // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js function useLabelableId(params = {}) { const { id, implicit = false, controlRef } = params; const { controlId, registerControlId } = useLabelableContext(); const defaultId = useBaseUiId(id); const controlIdForEffect = implicit ? controlId : void 0; const controlSourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol("labelable-control")); const hasRegisteredRef = React50.useRef(false); const hadExplicitIdRef = React50.useRef(id != null); const unregisterControlId = useStableCallback(() => { if (!hasRegisteredRef.current || registerControlId === NOOP) { return; } hasRegisteredRef.current = false; registerControlId(controlSourceRef.current, void 0); }); useIsoLayoutEffect(() => { if (registerControlId === NOOP) { return void 0; } let nextId; if (implicit) { const elem = controlRef?.current; if (isElement(elem) && elem.closest("label") != null) { nextId = id ?? null; } else { nextId = controlIdForEffect ?? defaultId; } } else if (id != null) { hadExplicitIdRef.current = true; nextId = id; } else if (hadExplicitIdRef.current) { nextId = defaultId; } else { unregisterControlId(); return void 0; } if (nextId === void 0) { unregisterControlId(); return void 0; } hasRegisteredRef.current = true; registerControlId(controlSourceRef.current, nextId); return void 0; }, [id, controlRef, controlIdForEffect, registerControlId, implicit, defaultId, controlSourceRef, unregisterControlId]); React50.useEffect(() => { return unregisterControlId; }, [unregisterControlId]); return controlId ?? defaultId; } // node_modules/@base-ui/react/esm/combobox/root/utils/index.js function createCollatorItemFilter(collatorFilter, itemToStringLabel) { return (item, query) => { if (item == null) { return false; } const itemString = stringifyAsLabel(item, itemToStringLabel); return collatorFilter.contains(itemString, query); }; } function createSingleSelectionCollatorFilter(collatorFilter, itemToStringLabel, selectedValue) { return (item, query) => { if (item == null) { return false; } if (!query) { return true; } const itemString = stringifyAsLabel(item, itemToStringLabel); const selectedString = selectedValue != null ? stringifyAsLabel(selectedValue, itemToStringLabel) : ""; if (selectedString && collatorFilter.contains(selectedString, query) && selectedString.length === query.length) { return true; } return collatorFilter.contains(itemString, query); }; } // node_modules/@base-ui/react/esm/combobox/root/utils/useFilter.js var React51 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/internals/filter.js var filterCache = /* @__PURE__ */ new Map(); function getFilter(options = {}) { const mergedOptions = { usage: "search", sensitivity: "base", ignorePunctuation: true, ...options }; const cacheKey = `${stringifyLocale(options.locale)}|${JSON.stringify(mergedOptions)}`; const cachedFilter = filterCache.get(cacheKey); if (cachedFilter) { return cachedFilter; } const collator = new Intl.Collator(options.locale, mergedOptions); const filter = { contains(item, query, itemToString) { if (!query) { return true; } const itemString = stringifyAsLabel(item, itemToString); for (let i2 = 0; i2 <= itemString.length - query.length; i2 += 1) { if (collator.compare(itemString.slice(i2, i2 + query.length), query) === 0) { return true; } } return false; }, startsWith(item, query, itemToString) { if (!query) { return true; } const itemString = stringifyAsLabel(item, itemToString); return collator.compare(itemString.slice(0, query.length), query) === 0; }, endsWith(item, query, itemToString) { if (!query) { return true; } const itemString = stringifyAsLabel(item, itemToString); const queryLength = query.length; return itemString.length >= queryLength && collator.compare(itemString.slice(itemString.length - queryLength), query) === 0; } }; filterCache.set(cacheKey, filter); return filter; } function stringifyLocale(locale) { if (Array.isArray(locale)) { return locale.map((value) => stringifyLocale(value)).join(","); } if (locale == null) { return ""; } return String(locale); } // node_modules/@base-ui/react/esm/combobox/root/utils/useFilter.js var useCoreFilter = getFilter; // node_modules/@base-ui/react/esm/combobox/root/utils/constants.js var NO_ACTIVE_VALUE = /* @__PURE__ */ Symbol("none"); var INITIAL_LAST_HIGHLIGHT = { value: NO_ACTIVE_VALUE, index: -1 }; // node_modules/@base-ui/react/esm/combobox/root/AriaCombobox.js var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); function AriaCombobox(props) { const { id: idProp, onOpenChangeComplete: onOpenChangeCompleteProp, defaultSelectedValue = null, selectedValue: selectedValueProp, onSelectedValueChange, defaultInputValue: defaultInputValueProp, inputValue: inputValueProp, open: openProp, defaultOpen = false, selectionMode = "none", onItemHighlighted: onItemHighlightedProp, name: nameProp, form, disabled: disabledProp = false, readOnly = false, required = false, inputRef: inputRefProp, grid = false, items, filteredItems: filteredItemsProp, filter: filterProp, openOnInputClick = true, autoHighlight = false, keepHighlight = false, highlightItemOnHover = true, loopFocus = true, itemToStringLabel, itemToStringValue, isItemEqualToValue = defaultItemEquality, virtualized = false, inline: inlineProp = false, fillInputOnItemPress = true, modal = false, limit = -1, autoComplete = "list", formAutoComplete, locale, submitOnItemClick = false } = props; const { clearErrors } = useFormContext(); const { setDirty, validityData, shouldValidateOnChange, setFilled, name: fieldName, disabled: fieldDisabled, setTouched, setFocused, validationMode, validation } = useFieldRootContext(); const direction = useDirection(); const id = useLabelableId({ id: idProp }); const collatorFilter = useCoreFilter({ locale }); const [queryChangedAfterOpen, setQueryChangedAfterOpen] = React52.useState(false); const [closeQuery, setCloseQuery] = React52.useState(null); const listRef = React52.useRef([]); const labelsRef = React52.useRef([]); const popupRef = React52.useRef(null); const inputRef = React52.useRef(null); const startDismissRef = React52.useRef(null); const endDismissRef = React52.useRef(null); const emptyRef = React52.useRef(null); const keyboardActiveRef = React52.useRef(true); const hadInputClearRef = React52.useRef(false); const chipsContainerRef = React52.useRef(null); const clearRef = React52.useRef(null); const selectionEventRef = React52.useRef(null); const lastHighlightRef = React52.useRef(INITIAL_LAST_HIGHLIGHT); const pendingQueryHighlightRef = React52.useRef(null); const valuesRef = React52.useRef([]); const allValuesRef = React52.useRef([]); const disabled2 = fieldDisabled || disabledProp; const name = fieldName ?? nameProp; const multiple = selectionMode === "multiple"; const single = selectionMode === "single"; const hasInputValue = inputValueProp !== void 0 || defaultInputValueProp !== void 0; const hasItems = items !== void 0; const hasFilteredItemsProp = filteredItemsProp !== void 0; let autoHighlightMode; if (autoHighlight === "always") { autoHighlightMode = "always"; } else { autoHighlightMode = autoHighlight ? "input-change" : false; } const [selectedValue, setSelectedValueUnwrapped] = useControlled({ controlled: selectedValueProp, default: multiple ? defaultSelectedValue ?? EMPTY_ARRAY : defaultSelectedValue, name: "Combobox", state: "selectedValue" }); const filter = React52.useMemo(() => { if (filterProp === null) { return () => true; } if (filterProp !== void 0) { return filterProp; } if (single && !queryChangedAfterOpen) { return createSingleSelectionCollatorFilter(collatorFilter, itemToStringLabel, selectedValue); } return createCollatorItemFilter(collatorFilter, itemToStringLabel); }, [filterProp, single, selectedValue, queryChangedAfterOpen, collatorFilter, itemToStringLabel]); const initialDefaultInputValue = useRefWithInit(() => { if (hasInputValue) { return defaultInputValueProp ?? ""; } if (single) { return stringifyAsLabel(selectedValue, itemToStringLabel); } return ""; }).current; const [inputValue, setInputValueUnwrapped] = useControlled({ controlled: inputValueProp, default: initialDefaultInputValue, name: "Combobox", state: "inputValue" }); const [open, setOpenUnwrapped] = useControlled({ controlled: openProp, default: defaultOpen, name: "Combobox", state: "open" }); const isGrouped = isGroupedItems(items); const query = closeQuery ?? (inputValue === "" ? "" : String(inputValue).trim()); const selectedLabelString = single ? stringifyAsLabel(selectedValue, itemToStringLabel) : ""; const shouldBypassFiltering = single && !queryChangedAfterOpen && query !== "" && selectedLabelString !== "" && selectedLabelString.length === query.length && collatorFilter.contains(selectedLabelString, query); const filterQuery = shouldBypassFiltering ? "" : query; const shouldIgnoreExternalFiltering = hasItems && hasFilteredItemsProp && shouldBypassFiltering; const flatItems = React52.useMemo(() => { if (!items) { return EMPTY_ARRAY; } if (isGrouped) { return items.flatMap((group) => group.items); } return items; }, [items, isGrouped]); const filteredItems = React52.useMemo(() => { if (filteredItemsProp && !shouldIgnoreExternalFiltering) { return filteredItemsProp; } if (!items) { return EMPTY_ARRAY; } if (isGrouped) { const groupedItems = items; const resultingGroups = []; let currentCount = 0; for (const group of groupedItems) { if (limit > -1 && currentCount >= limit) { break; } const candidateItems = filterQuery === "" ? group.items : group.items.filter((item) => filter(item, filterQuery, itemToStringLabel)); if (candidateItems.length === 0) { continue; } const remainingLimit = limit > -1 ? limit - currentCount : Infinity; const itemsToTake = candidateItems.slice(0, remainingLimit); if (itemsToTake.length > 0) { const newGroup = { ...group, items: itemsToTake }; resultingGroups.push(newGroup); currentCount += itemsToTake.length; } } return resultingGroups; } if (filterQuery === "") { return limit > -1 ? flatItems.slice(0, limit) : ( // The cast here is done as `flatItems` is readonly. // valuesRef.current, a mutable ref, can be set to `flatFilteredItems`, which may // reference this exact readonly value, creating a mutation risk. // However, <Combobox.Item> can never mutate this value as the mutating effect // bails early when `items` is provided, and this is only ever returned // when `items` is provided due to the early return at the top of this hook. flatItems ); } const limitedItems = []; for (const item of flatItems) { if (limit > -1 && limitedItems.length >= limit) { break; } if (filter(item, filterQuery, itemToStringLabel)) { limitedItems.push(item); } } return limitedItems; }, [filteredItemsProp, shouldIgnoreExternalFiltering, items, isGrouped, filterQuery, limit, filter, itemToStringLabel, flatItems]); const flatFilteredItems = React52.useMemo(() => { if (isGrouped) { const groups = filteredItems; return groups.flatMap((g2) => g2.items); } return filteredItems; }, [filteredItems, isGrouped]); const store = useRefWithInit(() => new Store({ id, labelId: void 0, selectedValue, open, filter, query, items, selectionMode, listRef, labelsRef, popupRef, emptyRef, inputRef, startDismissRef, endDismissRef, keyboardActiveRef, chipsContainerRef, clearRef, valuesRef, allValuesRef, selectionEventRef, name, form, disabled: disabled2, readOnly, required, grid, isGrouped, virtualized, openOnInputClick, itemToStringLabel, isItemEqualToValue, modal, autoHighlight: autoHighlightMode, submitOnItemClick, hasInputValue, mounted: false, forceMounted: false, transitionStatus: "idle", inline: inlineProp, activeIndex: null, selectedIndex: null, popupProps: {}, inputProps: {}, triggerProps: {}, itemProps: EMPTY_OBJECT, positionerElement: null, listElement: null, triggerElement: null, inputElement: null, inputGroupElement: null, popupSide: null, openMethod: null, inputInsidePopup: true, // Avoid duplicate names in the server HTML. Popup inputs aren't rendered // until after hydration, so the hidden input takes over then if needed. inputOwnsFormValue: selectionMode === "none", onOpenChangeComplete: onOpenChangeCompleteProp || NOOP, // Placeholder callbacks replaced on first render setOpen: NOOP, setInputValue: NOOP, setSelectedValue: NOOP, setIndices: NOOP, onItemHighlighted: NOOP, handleSelection: NOOP, forceMount: NOOP, requestSubmit: NOOP })).current; const fieldRawValue = selectionMode === "none" ? inputValue : selectedValue; const fieldStringValue = React52.useMemo(() => { if (selectionMode === "none") { return fieldRawValue; } if (Array.isArray(selectedValue)) { return selectedValue.map((value) => stringifyAsValue(value, itemToStringValue)); } return stringifyAsValue(selectedValue, itemToStringValue); }, [fieldRawValue, itemToStringValue, selectionMode, selectedValue]); const onItemHighlighted = useStableCallback(onItemHighlightedProp); const onOpenChangeComplete = useStableCallback(onOpenChangeCompleteProp); const activeIndex = useStore(store, selectors2.activeIndex); const selectedIndex = useStore(store, selectors2.selectedIndex); const positionerElement = useStore(store, selectors2.positionerElement); const listElement = useStore(store, selectors2.listElement); const triggerElement = useStore(store, selectors2.triggerElement); const inputElement = useStore(store, selectors2.inputElement); const inputGroupElement = useStore(store, selectors2.inputGroupElement); const inline4 = useStore(store, selectors2.inline); const inputInsidePopup = useStore(store, selectors2.inputInsidePopup); const inputOwnsFormValue = useStore(store, selectors2.inputOwnsFormValue); const triggerRef = useValueAsRef(triggerElement); const { mounted, setMounted, transitionStatus } = useTransitionStatus(open); const { openMethod, triggerProps } = useOpenInteractionType(open); const getStringifiedValueForForm = useStableCallback(() => fieldStringValue); useRegisterFieldControl(inputInsidePopup ? triggerRef : inputRef, id, fieldRawValue, getStringifiedValueForForm); const forceMount = useStableCallback(() => { if (items) { labelsRef.current = flatFilteredItems.map((item) => stringifyAsLabel(item, itemToStringLabel)); } else { store.set("forceMounted", true); } }); const initialSelectedValueRef = React52.useRef(selectedValue); useIsoLayoutEffect(() => { if (selectedValue !== initialSelectedValueRef.current) { forceMount(); } }, [forceMount, selectedValue]); const setIndices = useStableCallback((options) => { store.update(options); const type = options.type || "none"; if (options.activeIndex === void 0) { return; } if (options.activeIndex === null) { if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) { lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT; onItemHighlighted(void 0, createGenericEventDetails(type, void 0, { index: -1 })); } } else { const activeValue = valuesRef.current[options.activeIndex]; lastHighlightRef.current = { value: activeValue, index: options.activeIndex }; onItemHighlighted(activeValue, createGenericEventDetails(type, void 0, { index: options.activeIndex })); } }); const setInputValue = useStableCallback((next, eventDetails) => { hadInputClearRef.current = eventDetails.reason === reason_parts_exports.inputClear; props.onInputValueChange?.(next, eventDetails); if (eventDetails.isCanceled) { return; } if (eventDetails.reason === reason_parts_exports.inputChange) { const event = eventDetails.event; const inputType = event.inputType; const isTypedInput = event.type === "compositionend" || inputType != null && inputType !== "" && inputType !== "insertReplacementText"; if (isTypedInput) { const hasQuery = next.trim() !== ""; if (hasQuery) { setQueryChangedAfterOpen(true); } pendingQueryHighlightRef.current = { hasQuery }; if (hasQuery && autoHighlightMode && store.state.activeIndex == null) { store.set("activeIndex", 0); } } } setInputValueUnwrapped(next); }); const setOpen = useStableCallback((nextOpen, eventDetails) => { if (open === nextOpen) { return; } if (eventDetails.reason === "escape-key" && hasItems && flatFilteredItems.length === 0 && !store.state.emptyRef.current) { eventDetails.allowPropagation(); } props.onOpenChange?.(nextOpen, eventDetails); if (eventDetails.isCanceled) { return; } if (nextOpen && multiple && inputInsidePopup && !inline4 && closeQuery !== null) { setQueryChangedAfterOpen(false); setCloseQuery(null); if (inputValue !== "") { setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event)); } } if (!nextOpen && queryChangedAfterOpen) { if (single) { if (!inline4) { setCloseQuery(query); } if (query === "") { setQueryChangedAfterOpen(false); } } else if (multiple) { if (!inline4) { setCloseQuery(query); } if (inputInsidePopup) { setIndices({ activeIndex: null }); } if (!inputInsidePopup || inline4) { setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event)); } } } setOpenUnwrapped(nextOpen); if (!nextOpen && inputInsidePopup && (eventDetails.reason === reason_parts_exports.focusOut || eventDetails.reason === reason_parts_exports.outsidePress)) { setTouched(true); setFocused(false); if (validationMode === "onBlur") { const valueToValidate = selectionMode === "none" ? inputValue : selectedValue; validation.commit(valueToValidate); } } }); const setSelectedValue = useStableCallback((nextValue, eventDetails) => { onSelectedValueChange?.(nextValue, eventDetails); if (eventDetails.isCanceled) { return; } setSelectedValueUnwrapped(nextValue); const shouldFillInput = selectionMode === "none" && popupRef.current && fillInputOnItemPress || single && !store.state.inputInsidePopup; if (shouldFillInput) { setInputValue(stringifyAsLabel(nextValue, itemToStringLabel), createChangeEventDetails(eventDetails.reason, eventDetails.event)); } if (single && nextValue != null && eventDetails.reason !== reason_parts_exports.inputChange && queryChangedAfterOpen && !inline4) { setCloseQuery(query); } }); const handleSelection = useStableCallback((event, passedValue) => { let itemValue = passedValue; if (itemValue === void 0) { if (activeIndex === null) { return; } itemValue = valuesRef.current[activeIndex]; } const targetEl = getTarget(event); const overrideEvent = selectionEventRef.current ?? event; selectionEventRef.current = null; const eventDetails = createChangeEventDetails(reason_parts_exports.itemPress, overrideEvent); const href = targetEl?.closest("a")?.getAttribute("href"); if (href) { if (href.startsWith("#")) { setOpen(false, eventDetails); } return; } if (multiple) { const currentSelectedValue = Array.isArray(selectedValue) ? selectedValue : []; const isCurrentlySelected = selectedValueIncludes(currentSelectedValue, itemValue, store.state.isItemEqualToValue); const nextValue = isCurrentlySelected ? removeItem(currentSelectedValue, itemValue, store.state.isItemEqualToValue) : [...currentSelectedValue, itemValue]; setSelectedValue(nextValue, eventDetails); const wasFiltering = inputRef.current ? inputRef.current.value.trim() !== "" : false; if (!wasFiltering) { return; } if (store.state.inputInsidePopup) { setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear, eventDetails.event)); } else { setOpen(false, eventDetails); } } else { setSelectedValue(itemValue, eventDetails); setOpen(false, eventDetails); } }); const requestSubmit = useStableCallback(() => { if (!store.state.submitOnItemClick) { return; } const formElement = validation.inputRef.current?.form ?? store.state.inputElement?.form; if (formElement && typeof formElement.requestSubmit === "function") { formElement.requestSubmit(); } }); const handleUnmount = useStableCallback(() => { setMounted(false); onOpenChangeComplete?.(false); setQueryChangedAfterOpen(false); setCloseQuery(null); if (selectionMode === "none") { setIndices({ activeIndex: null, selectedIndex: null }); } else { setIndices({ activeIndex: null }); } if (multiple && inputRef.current && inputRef.current.value !== "" && !hadInputClearRef.current) { setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear)); } if (single) { if (store.state.inputInsidePopup) { if (inputRef.current && inputRef.current.value !== "") { setInputValue("", createChangeEventDetails(reason_parts_exports.inputClear)); } } else { const stringVal = stringifyAsLabel(selectedValue, itemToStringLabel); if (inputRef.current && inputRef.current.value !== stringVal) { const reason = stringVal === "" ? reason_parts_exports.inputClear : reason_parts_exports.none; setInputValue(stringVal, createChangeEventDetails(reason)); } } } }); const resolvedPopupRef = React52.useMemo(() => { if (inline4 && positionerElement) { return { current: positionerElement.closest('[role="dialog"]') }; } return popupRef; }, [inline4, positionerElement]); useOpenChangeComplete({ enabled: !props.actionsRef, open, ref: resolvedPopupRef, onComplete() { if (!open) { handleUnmount(); } } }); React52.useImperativeHandle(props.actionsRef, () => ({ unmount: handleUnmount }), [handleUnmount]); useIsoLayoutEffect(function syncSelectedIndex() { if (open || selectionMode === "none") { return; } const registry = items ? flatItems : allValuesRef.current; if (multiple) { const currentValue = Array.isArray(selectedValue) ? selectedValue : []; const lastValue = currentValue[currentValue.length - 1]; const lastIndex = findItemIndex(registry, lastValue, isItemEqualToValue); setIndices({ selectedIndex: lastIndex === -1 ? null : lastIndex }); } else { const index2 = findItemIndex(registry, selectedValue, isItemEqualToValue); setIndices({ selectedIndex: index2 === -1 ? null : index2 }); } }, [open, selectedValue, items, selectionMode, flatItems, multiple, isItemEqualToValue, setIndices]); useIsoLayoutEffect(() => { if (items) { valuesRef.current = flatFilteredItems; listRef.current.length = flatFilteredItems.length; } }, [items, flatFilteredItems]); useIsoLayoutEffect(() => { const pendingHighlight = pendingQueryHighlightRef.current; if (pendingHighlight) { if (pendingHighlight.hasQuery) { if (autoHighlightMode) { store.set("activeIndex", 0); } } else if (autoHighlightMode === "always") { store.set("activeIndex", 0); } pendingQueryHighlightRef.current = null; } if (!open && !inline4) { return; } const shouldUseFlatFilteredItems = hasItems || hasFilteredItemsProp; const candidateItems = shouldUseFlatFilteredItems ? flatFilteredItems : valuesRef.current; const storeActiveIndex = store.state.activeIndex; if (storeActiveIndex == null) { if (autoHighlightMode === "always" && candidateItems.length > 0) { store.set("activeIndex", 0); return; } if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) { lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT; store.state.onItemHighlighted(void 0, createGenericEventDetails(reason_parts_exports.none, void 0, { index: -1 })); } return; } if (storeActiveIndex >= candidateItems.length) { if (lastHighlightRef.current !== INITIAL_LAST_HIGHLIGHT) { lastHighlightRef.current = INITIAL_LAST_HIGHLIGHT; store.state.onItemHighlighted(void 0, createGenericEventDetails(reason_parts_exports.none, void 0, { index: -1 })); } store.set("activeIndex", null); return; } const itemValue = candidateItems[storeActiveIndex]; const previouslyHighlightedItemValue = lastHighlightRef.current.value; const isSameItem = previouslyHighlightedItemValue !== NO_ACTIVE_VALUE && compareItemEquality(itemValue, previouslyHighlightedItemValue, store.state.isItemEqualToValue); if (lastHighlightRef.current.index !== storeActiveIndex || !isSameItem) { lastHighlightRef.current = { value: itemValue, index: storeActiveIndex }; store.state.onItemHighlighted(itemValue, createGenericEventDetails(reason_parts_exports.none, void 0, { index: storeActiveIndex })); } }, [activeIndex, autoHighlightMode, hasFilteredItemsProp, hasItems, flatFilteredItems, inline4, open, store]); useIsoLayoutEffect(() => { if (selectionMode === "none") { setFilled(String(inputValue) !== ""); return; } setFilled(multiple ? Array.isArray(selectedValue) && selectedValue.length > 0 : selectedValue != null); }, [setFilled, selectionMode, inputValue, selectedValue, multiple]); React52.useEffect(() => { if (hasItems && autoHighlightMode && flatFilteredItems.length === 0) { setIndices({ activeIndex: null }); } }, [hasItems, autoHighlightMode, flatFilteredItems.length, setIndices]); useValueChanged(query, () => { if (!open || query === "" || query === String(initialDefaultInputValue)) { return; } setQueryChangedAfterOpen(true); }); useValueChanged(selectedValue, () => { if (selectionMode === "none") { return; } clearErrors(name); setDirty(selectedValue !== validityData.initialValue); if (shouldValidateOnChange()) { validation.commit(selectedValue); } else { validation.commit(selectedValue, true); } if (single && !hasInputValue && !inputInsidePopup) { const nextInputValue = stringifyAsLabel(selectedValue, itemToStringLabel); if (inputValue !== nextInputValue) { setInputValue(nextInputValue, createChangeEventDetails(reason_parts_exports.none)); } } }); useValueChanged(inputValue, () => { if (selectionMode !== "none") { return; } clearErrors(name); setDirty(inputValue !== validityData.initialValue); if (shouldValidateOnChange()) { validation.commit(inputValue); } else { validation.commit(inputValue, true); } }); useValueChanged(items, () => { if (!single || hasInputValue || inputInsidePopup || queryChangedAfterOpen) { return; } const nextInputValue = stringifyAsLabel(selectedValue, itemToStringLabel); if (inputValue !== nextInputValue) { setInputValue(nextInputValue, createChangeEventDetails(reason_parts_exports.none)); } }); const floatingRootContext = useFloatingRootContext({ open: inline4 ? true : open, onOpenChange: setOpen, elements: { reference: inputInsidePopup ? triggerElement : inputElement, floating: positionerElement } }); let ariaHasPopup; let ariaExpanded; if (!inline4) { ariaHasPopup = grid ? "grid" : "listbox"; ariaExpanded = open ? "true" : "false"; } const role = React52.useMemo(() => { const isPlainInput = inputElement?.tagName === "INPUT"; const shouldTreatAsInput = inputElement == null || isPlainInput; const shouldApplyAria = shouldTreatAsInput || open; const reference = shouldTreatAsInput ? { autoComplete: "off", spellCheck: "false", autoCorrect: "off", autoCapitalize: "none" } : {}; if (shouldApplyAria) { reference.role = "combobox"; reference["aria-expanded"] = ariaExpanded; reference["aria-haspopup"] = ariaHasPopup; reference["aria-controls"] = open ? listElement?.id : void 0; reference["aria-autocomplete"] = autoComplete; } return { reference, floating: { role: "presentation" } }; }, [inputElement, open, ariaExpanded, ariaHasPopup, listElement?.id, autoComplete]); const click = useClick(floatingRootContext, { enabled: !readOnly && !disabled2 && openOnInputClick, event: "mousedown-only", toggle: false, // Apply a small delay for touch to let mobile viewport/keyboard positioning settle. // This avoids top-bottom flip flickers if the preferred position is "top" when first tapping. touchOpenDelay: inputInsidePopup ? 0 : 100, reason: reason_parts_exports.inputPress }); const dismiss = useDismiss(floatingRootContext, { enabled: !readOnly && !disabled2 && !inline4, outsidePressEvent: { mouse: "sloppy", // The visual viewport (affected by the mobile software keyboard) can be // somewhat small. The user may want to scroll the screen to see more of // the popup. touch: "intentional" }, // Without a popup, let the Escape key bubble the event up to other popups' handlers. bubbles: inline4 ? true : void 0, outsidePress(event) { const target = getTarget(event); return !contains(triggerElement, target) && !contains(clearRef.current, target) && !contains(chipsContainerRef.current, target) && !contains(inputGroupElement, target); } }); const listNavigation2 = useListNavigation(floatingRootContext, { enabled: !readOnly && !disabled2, id, listRef, activeIndex, selectedIndex, virtual: true, loopFocus, allowEscape: loopFocus && !autoHighlightMode, focusItemOnOpen: queryChangedAfterOpen || selectionMode === "none" && !autoHighlightMode ? false : "auto", focusItemOnHover: highlightItemOnHover, resetOnPointerLeave: !keepHighlight, // `cols` > 1 enables grid navigation. // Since <Combobox.Row> infers column sizes (and is required when building a grid), // it works correctly even with a value of `2`. // Floating UI tests don't require `role="row"` wrappers, so retains the number API. cols: grid ? 2 : 1, orientation: grid ? "horizontal" : void 0, rtl: direction === "rtl", disabledIndices: EMPTY_ARRAY, onNavigate(nextActiveIndex, event) { if (!event && !open || transitionStatus === "ending") { return; } if (!event) { setIndices({ activeIndex: nextActiveIndex }); } else { setIndices({ activeIndex: nextActiveIndex, type: keyboardActiveRef.current ? "keyboard" : "pointer" }); } } }); const inputProps = React52.useMemo(() => mergeProps(listNavigation2.reference, dismiss.reference, click.reference, role.reference), [listNavigation2.reference, dismiss.reference, click.reference, role.reference]); const popupProps = React52.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, listNavigation2.floating, dismiss.floating, role.floating), [listNavigation2.floating, dismiss.floating, role.floating]); const itemProps = React52.useMemo(() => { const listNavigationItemProps = listNavigation2.item; if (!listNavigationItemProps) { return EMPTY_OBJECT; } return { ...listNavigationItemProps, onFocus: void 0 }; }, [listNavigation2.item]); useOnFirstRender(() => { store.update({ inline: inlineProp, popupProps, inputProps, triggerProps, itemProps, setOpen, setInputValue, setSelectedValue, setIndices, onItemHighlighted, handleSelection, forceMount, requestSubmit }); }); useIsoLayoutEffect(() => { store.update({ id, selectedValue, open, mounted, transitionStatus, items, inline: inlineProp, popupProps, inputProps, triggerProps, openMethod, itemProps, selectionMode, name, form, disabled: disabled2, readOnly, required, grid, isGrouped, virtualized, onOpenChangeComplete, openOnInputClick, itemToStringLabel, modal, autoHighlight: autoHighlightMode, isItemEqualToValue, submitOnItemClick, hasInputValue, requestSubmit, inputOwnsFormValue: selectionMode === "none" && (inlineProp || !store.state.inputInsidePopup) }); }, [store, id, selectedValue, open, mounted, transitionStatus, items, popupProps, inputProps, itemProps, openMethod, triggerProps, selectionMode, name, disabled2, readOnly, required, validation, grid, isGrouped, virtualized, onOpenChangeComplete, openOnInputClick, itemToStringLabel, modal, isItemEqualToValue, submitOnItemClick, hasInputValue, inlineProp, requestSubmit, autoHighlightMode, form]); const hiddenInputRef = useMergedRefs(inputRefProp, validation.inputRef); const itemsContextValue = React52.useMemo(() => ({ query, hasItems, filteredItems, flatFilteredItems }), [query, hasItems, filteredItems, flatFilteredItems]); const serializedValue = React52.useMemo(() => { if (Array.isArray(fieldRawValue)) { return ""; } return stringifyAsValue(fieldRawValue, itemToStringValue); }, [fieldRawValue, itemToStringValue]); const hasMultipleSelection = multiple && Array.isArray(selectedValue) && selectedValue.length > 0; const hiddenInputName = multiple || selectionMode === "none" && inputOwnsFormValue ? void 0 : name; const hiddenInputs = React52.useMemo(() => { if (!multiple || !Array.isArray(selectedValue) || !name) { return null; } return selectedValue.map((value) => { const currentSerializedValue = stringifyAsValue(value, itemToStringValue); return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("input", { type: "hidden", form, name, value: currentSerializedValue }, currentSerializedValue); }); }, [multiple, selectedValue, form, name, itemToStringValue]); const children = /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(React52.Fragment, { children: [props.children, /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("input", { ...validation.getInputValidationProps({ // Move focus when the hidden input is focused. onFocus() { if (inputInsidePopup) { triggerElement?.focus(); return; } (inputRef.current || triggerElement)?.focus(); }, // Handle browser autofill. onChange(event) { if (event.nativeEvent.defaultPrevented || disabled2 || readOnly) { event.preventBaseUIHandler?.(); return; } const nextValue = event.currentTarget.value; const details = createChangeEventDetails(reason_parts_exports.none, event.nativeEvent); function handleChange() { if (multiple) { return; } if (selectionMode === "none") { setDirty(nextValue !== validityData.initialValue); setInputValue(nextValue, details); if (shouldValidateOnChange()) { validation.commit(nextValue); } return; } const matchingValue = valuesRef.current.find((v2) => { const candidateValue = stringifyAsValue(v2, itemToStringValue); if (candidateValue.toLowerCase() === nextValue.toLowerCase()) { return true; } const candidateLabel = stringifyAsLabel(v2, itemToStringLabel); if (candidateLabel.toLowerCase() === nextValue.toLowerCase()) { return true; } return false; }); if (matchingValue != null) { setDirty(matchingValue !== validityData.initialValue); setSelectedValue?.(matchingValue, details); if (shouldValidateOnChange()) { validation.commit(matchingValue); } } } if (items) { handleChange(); } else { forceMount(); queueMicrotask(handleChange); } } }), id: id && hiddenInputName == null ? `${id}-hidden-input` : void 0, form, name: hiddenInputName, autoComplete: formAutoComplete, disabled: disabled2, required: required && !hasMultipleSelection, readOnly, value: serializedValue, ref: hiddenInputRef, style: hiddenInputName ? visuallyHiddenInput : visuallyHidden, tabIndex: -1, "aria-hidden": true, suppressHydrationWarning: true }), hiddenInputs] }); return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComboboxRootContext.Provider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComboboxFloatingContext.Provider, { value: floatingRootContext, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComboboxDerivedItemsContext.Provider, { value: itemsContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ComboboxInputValueContext.Provider, { value: inputValue, children }) }) }) }); } // node_modules/@base-ui/react/esm/autocomplete/root/AutocompleteRoot.js var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); function AutocompleteRoot(props) { const { openOnInputClick = false, value, defaultValue: defaultValue2, onValueChange, mode = "list", itemToStringValue, ...other } = props; const enableInline = mode === "inline" || mode === "both"; const staticItems = mode === "inline" || mode === "none"; const isControlled = value !== void 0; const [internalValue, setInternalValue] = React53.useState(defaultValue2 ?? ""); const [inlineInputValue, setInlineInputValue] = React53.useState(""); React53.useEffect(() => { if (isControlled) { setInlineInputValue(""); } }, [value, isControlled]); let resolvedInputValue; if (enableInline && inlineInputValue !== "") { resolvedInputValue = inlineInputValue; } else if (isControlled) { resolvedInputValue = value ?? ""; } else { resolvedInputValue = internalValue; } const collator = useCoreFilter(); const baseFilter = React53.useMemo(() => { if (other.filter !== void 0) { return other.filter; } return collator.contains; }, [other.filter, collator]); const resolvedQuery = String(isControlled ? value : internalValue).trim(); const resolvedFilter = React53.useMemo(() => { if (mode !== "both") { return staticItems ? null : baseFilter; } if (baseFilter === null) { return null; } return (item, _query, toString) => { return baseFilter(item, resolvedQuery, toString); }; }, [baseFilter, mode, resolvedQuery, staticItems]); function handleValueChange(nextValue, eventDetails) { setInlineInputValue(""); if (!isControlled) { setInternalValue(nextValue); } onValueChange?.(nextValue, eventDetails); } function handleItemHighlighted(highlightedValue, eventDetails) { props.onItemHighlighted?.(highlightedValue, eventDetails); if (eventDetails.reason === reason_parts_exports.pointer) { return; } if (enableInline) { if (highlightedValue == null) { setInlineInputValue(""); } else { setInlineInputValue(stringifyAsLabel(highlightedValue, itemToStringValue)); } } else { setInlineInputValue(""); } } return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AriaCombobox, { ...other, itemToStringLabel: itemToStringValue, openOnInputClick, selectionMode: "none", fillInputOnItemPress: true, filter: resolvedFilter, autoComplete: mode, inputValue: resolvedInputValue, defaultInputValue: defaultValue2, onInputValueChange: handleValueChange, onItemHighlighted: handleItemHighlighted }); } // node_modules/@base-ui/react/esm/autocomplete/value/AutocompleteValue.js var React54 = __toESM(require_react(), 1); var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); function AutocompleteValue(props) { const { children } = props; const inputValue = useComboboxInputValueContext(); let returnValue = null; if (typeof children === "function") { returnValue = children(String(inputValue)); } else if (children != null) { returnValue = children; } else { returnValue = inputValue; } return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(React54.Fragment, { children: returnValue }); } // node_modules/@base-ui/react/esm/combobox/trigger/ComboboxTrigger.js var React55 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/utils/stateAttributesMapping.js var triggerStateAttributesMapping = { ...pressableTriggerOpenStateMapping, ...fieldValidityMapping, popupSide: (side) => side ? { "data-popup-side": side } : null, listEmpty: (empty) => empty ? { "data-list-empty": "" } : null }; // node_modules/@base-ui/react/esm/utils/getPseudoElementBounds.js function getPseudoElementBounds(element) { const elementRect = element.getBoundingClientRect(); if (true) { return elementRect; } const win = getWindow(element); const beforeStyles = win.getComputedStyle(element, "::before"); const afterStyles = win.getComputedStyle(element, "::after"); const hasPseudoElements = beforeStyles.content !== "none" || afterStyles.content !== "none"; if (!hasPseudoElements) { return elementRect; } const beforeWidth = parseFloat(beforeStyles.width) || 0; const beforeHeight = parseFloat(beforeStyles.height) || 0; const afterWidth = parseFloat(afterStyles.width) || 0; const afterHeight = parseFloat(afterStyles.height) || 0; const totalWidth = Math.max(elementRect.width, beforeWidth, afterWidth); const totalHeight = Math.max(elementRect.height, beforeHeight, afterHeight); const widthDiff = totalWidth - elementRect.width; const heightDiff = totalHeight - elementRect.height; return { left: elementRect.left - widthDiff / 2, right: elementRect.right + widthDiff / 2, top: elementRect.top - heightDiff / 2, bottom: elementRect.bottom + heightDiff / 2 }; } // node_modules/@base-ui/react/esm/utils/resolveAriaLabelledBy.js function resolveAriaLabelledBy(fieldLabelId, localLabelId) { return fieldLabelId ?? localLabelId; } // node_modules/@base-ui/react/esm/combobox/trigger/ComboboxTrigger.js var BOUNDARY_OFFSET = 2; var ComboboxTrigger = /* @__PURE__ */ React55.forwardRef(function ComboboxTrigger2(componentProps, forwardedRef) { const { render: render4, className, nativeButton = true, disabled: disabledProp = false, id: idProp, style, ...elementProps } = componentProps; const { state: fieldState, disabled: fieldDisabled, setTouched, setFocused, validationMode, validation } = useFieldRootContext(); const { labelId: fieldLabelId } = useLabelableContext(); const store = useComboboxRootContext(); const { filteredItems } = useComboboxDerivedItemsContext(); const selectionMode = useStore(store, selectors2.selectionMode); const comboboxDisabled = useStore(store, selectors2.disabled); const readOnly = useStore(store, selectors2.readOnly); const required = useStore(store, selectors2.required); const mounted = useStore(store, selectors2.mounted); const popupSideValue = useStore(store, selectors2.popupSide); const positionerElement = useStore(store, selectors2.positionerElement); const listElement = useStore(store, selectors2.listElement); const triggerProps = useStore(store, selectors2.triggerProps); const triggerElement = useStore(store, selectors2.triggerElement); const inputInsidePopup = useStore(store, selectors2.inputInsidePopup); const rootId = useStore(store, selectors2.id); const comboboxLabelId = useStore(store, selectors2.labelId); const open = useStore(store, selectors2.open); const selectedValue = useStore(store, selectors2.selectedValue); const activeIndex = useStore(store, selectors2.activeIndex); const selectedIndex = useStore(store, selectors2.selectedIndex); const hasSelectedValue = useStore(store, selectors2.hasSelectedValue); const floatingRootContext = useComboboxFloatingContext(); const inputValue = useComboboxInputValueContext(); const focusTimeout = useTimeout(); const disabled2 = fieldDisabled || comboboxDisabled || disabledProp; const listEmpty = filteredItems.length === 0; const popupSide = mounted && positionerElement ? popupSideValue : null; useLabelableId({ id: inputInsidePopup ? idProp : void 0 }); const id = inputInsidePopup ? idProp ?? rootId : idProp; const ariaLabelledBy = resolveAriaLabelledBy(fieldLabelId, comboboxLabelId); const currentPointerTypeRef = React55.useRef(""); function trackPointerType(event) { currentPointerTypeRef.current = event.pointerType; } const domReference = floatingRootContext.useState("domReferenceElement"); React55.useEffect(() => { if (!inputInsidePopup) { return; } if (triggerElement && triggerElement !== domReference) { floatingRootContext.set("domReferenceElement", triggerElement); } }, [triggerElement, domReference, floatingRootContext, inputInsidePopup]); const { reference: triggerTypeaheadProps } = useTypeahead(floatingRootContext, { enabled: !open && !readOnly && !comboboxDisabled && selectionMode === "single", listRef: store.state.labelsRef, activeIndex, selectedIndex, onMatch(index2) { const nextSelectedValue = store.state.valuesRef.current[index2]; if (nextSelectedValue !== void 0) { store.state.setSelectedValue(nextSelectedValue, createChangeEventDetails("none")); } } }); const { reference: triggerClickProps } = useClick(floatingRootContext, { enabled: !readOnly && !comboboxDisabled, event: "mousedown" }); const { buttonRef, getButtonProps } = useButton({ native: nativeButton, disabled: disabled2 }); const state = { ...fieldState, open, disabled: disabled2, popupSide, listEmpty, placeholder: selectionMode === "none" ? false : !hasSelectedValue }; const setTriggerElement = useStableCallback((element2) => { store.set("triggerElement", element2); }); const element = useRenderElement("button", componentProps, { ref: [forwardedRef, buttonRef, setTriggerElement], state, props: [triggerProps, triggerClickProps, triggerTypeaheadProps, { id, tabIndex: inputInsidePopup ? 0 : -1, role: inputInsidePopup ? "combobox" : void 0, "aria-expanded": open ? "true" : "false", "aria-haspopup": inputInsidePopup ? "dialog" : "listbox", "aria-controls": open ? listElement?.id : void 0, "aria-required": inputInsidePopup ? required || void 0 : void 0, "aria-labelledby": ariaLabelledBy, onPointerDown: trackPointerType, onPointerEnter: trackPointerType, onFocus() { setFocused(true); if (disabled2 || readOnly) { return; } focusTimeout.start(0, store.state.forceMount); }, onBlur(event) { if (contains(positionerElement, event.relatedTarget)) { return; } setTouched(true); setFocused(false); if (validationMode === "onBlur") { const valueToValidate = selectionMode === "none" ? inputValue : selectedValue; validation.commit(valueToValidate); } }, onMouseDown(event) { if (disabled2 || readOnly) { return; } if (!inputInsidePopup) { floatingRootContext.set("domReferenceElement", event.currentTarget); } store.state.forceMount(); if (currentPointerTypeRef.current !== "touch") { store.state.inputRef.current?.focus(); if (!inputInsidePopup) { event.preventDefault(); } } if (open) { return; } const doc = ownerDocument(event.currentTarget); function handleMouseUp(mouseEvent) { if (!triggerElement) { return; } const mouseUpTarget = getTarget(mouseEvent); const positioner = store.state.positionerElement; const list = store.state.listElement; if (contains(triggerElement, mouseUpTarget) || contains(positioner, mouseUpTarget) || contains(list, mouseUpTarget) || mouseUpTarget === triggerElement) { return; } const bounds = getPseudoElementBounds(triggerElement); const withinHorizontal = mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET; const withinVertical = mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET; if (withinHorizontal && withinVertical) { return; } store.state.setOpen(false, createChangeEventDetails("cancel-open", mouseEvent)); } if (inputInsidePopup) { doc.addEventListener("mouseup", handleMouseUp, { once: true }); } }, onKeyDown(event) { if (disabled2 || readOnly) { return; } if (event.key === "ArrowDown" || event.key === "ArrowUp") { stopEvent(event); store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent)); store.state.inputRef.current?.focus(); } } }, validation ? validation.getValidationProps(elementProps) : elementProps, getButtonProps], stateAttributesMapping: triggerStateAttributesMapping }); return element; }); if (true) ComboboxTrigger.displayName = "ComboboxTrigger"; // node_modules/@base-ui/react/esm/autocomplete/trigger/AutocompleteTrigger.js var AutocompleteTrigger = ComboboxTrigger; // node_modules/@base-ui/react/esm/combobox/input/ComboboxInput.js var React59 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/chips/ComboboxChipsContext.js var React56 = __toESM(require_react(), 1); var ComboboxChipsContext = /* @__PURE__ */ React56.createContext(void 0); if (true) ComboboxChipsContext.displayName = "ComboboxChipsContext"; function useComboboxChipsContext() { return React56.useContext(ComboboxChipsContext); } // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositionerContext.js var React57 = __toESM(require_react(), 1); var ComboboxPositionerContext = /* @__PURE__ */ React57.createContext(void 0); if (true) ComboboxPositionerContext.displayName = "ComboboxPositionerContext"; function useComboboxPositionerContext(optional) { const context = React57.useContext(ComboboxPositionerContext); if (context === void 0 && !optional) { throw new Error(true ? "Base UI: <Combobox.Popup> and <Combobox.Arrow> must be used within the <Combobox.Positioner> component" : formatErrorMessage_default(21)); } return context; } // node_modules/@base-ui/react/esm/combobox/utils/ComboboxInternalDismissButton.js var React58 = __toESM(require_react(), 1); var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); var ComboboxInternalDismissButton = /* @__PURE__ */ React58.forwardRef(function ComboboxInternalDismissButton2(_, forwardedRef) { const store = useComboboxRootContext(); const { buttonRef, getButtonProps } = useButton({ native: false }); const mergedRef = useMergedRefs(forwardedRef, buttonRef); function handleDismiss(event) { store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.closePress, event.nativeEvent, event.currentTarget)); } const dismissProps = getButtonProps({ onClick: handleDismiss }); return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { ref: mergedRef, ...dismissProps, "aria-label": "Dismiss", tabIndex: void 0, style: visuallyHiddenInput }); }); if (true) ComboboxInternalDismissButton.displayName = "ComboboxInternalDismissButton"; // node_modules/@base-ui/react/esm/combobox/input/ComboboxInput.js var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); var ComboboxInput = /* @__PURE__ */ React59.forwardRef(function ComboboxInput2(componentProps, forwardedRef) { const { render: render4, className, disabled: disabledProp = false, id: idProp, style, ...elementProps } = componentProps; const { state: fieldState, disabled: fieldDisabled, setTouched, setFocused, validationMode, validation } = useFieldRootContext(); const { labelId: fieldLabelId } = useLabelableContext(); const comboboxChipsContext = useComboboxChipsContext(); const positioning = useComboboxPositionerContext(true); const hasPositionerParent = Boolean(positioning); const store = useComboboxRootContext(); const { filteredItems } = useComboboxDerivedItemsContext(); const inputValue = useComboboxInputValueContext(); const direction = useDirection(); const required = useStore(store, selectors2.required); const comboboxDisabled = useStore(store, selectors2.disabled); const readOnly = useStore(store, selectors2.readOnly); const name = useStore(store, selectors2.name); const form = useStore(store, selectors2.form); const selectionMode = useStore(store, selectors2.selectionMode); const autoHighlightMode = useStore(store, selectors2.autoHighlight); const inputProps = useStore(store, selectors2.inputProps); const triggerProps = useStore(store, selectors2.triggerProps); const open = useStore(store, selectors2.open); const mounted = useStore(store, selectors2.mounted); const selectedValue = useStore(store, selectors2.selectedValue); const popupSideValue = useStore(store, selectors2.popupSide); const positionerElement = useStore(store, selectors2.positionerElement); const rootId = useStore(store, selectors2.id); const inline4 = useStore(store, selectors2.inline); const modal = useStore(store, selectors2.modal); const autoHighlightEnabled = Boolean(autoHighlightMode); const popupSide = mounted && positionerElement ? popupSideValue : null; const disabled2 = fieldDisabled || comboboxDisabled || disabledProp; const listEmpty = filteredItems.length === 0; const isInsidePopup = hasPositionerParent || inline4; const focusManagerModal = !isInsidePopup || modal; const id = useBaseUiId(idProp ?? (!isInsidePopup ? rootId : void 0)); const ariaLabelledBy = resolveAriaLabelledBy(fieldLabelId, void 0); const fieldStateForInput = hasPositionerParent ? DEFAULT_FIELD_STATE_ATTRIBUTES : fieldState; const [composingValue, setComposingValue] = React59.useState(null); const isComposingRef = React59.useRef(false); const lastActiveIndexRef = React59.useRef(null); const shouldRestoreActiveIndexRef = React59.useRef(false); const inputOwnsFormValue = selectionMode === "none" && !hasPositionerParent; const setInputElement = useStableCallback((element2) => { const nextIsInsidePopup = hasPositionerParent || store.state.inline; if (nextIsInsidePopup && !store.state.hasInputValue) { store.state.setInputValue("", createChangeEventDetails(reason_parts_exports.none)); } store.update({ inputElement: element2, inputInsidePopup: nextIsInsidePopup, inputOwnsFormValue }); }); const validationProps = hasPositionerParent || !validation ? elementProps : validation.getValidationProps(elementProps); const state = { ...fieldStateForInput, open, disabled: disabled2, readOnly, popupSide, listEmpty }; function handleKeyDown(event) { if (!comboboxChipsContext) { return void 0; } let nextIndex; const { highlightedChipIndex } = comboboxChipsContext; const renderedChipsCount = comboboxChipsContext.chipsRef.current.length; const isRtl = direction === "rtl"; const previousChipKey = isRtl ? "ArrowRight" : "ArrowLeft"; const nextChipKey = isRtl ? "ArrowLeft" : "ArrowRight"; if (highlightedChipIndex !== void 0) { if (event.key === previousChipKey) { event.preventDefault(); if (highlightedChipIndex > 0) { nextIndex = highlightedChipIndex - 1; } else { nextIndex = void 0; } } else if (event.key === nextChipKey) { event.preventDefault(); if (highlightedChipIndex < renderedChipsCount - 1) { nextIndex = highlightedChipIndex + 1; } else { nextIndex = void 0; } } else if (event.key === "Backspace" || event.key === "Delete") { event.preventDefault(); const computedNextIndex = highlightedChipIndex >= selectedValue.length - 1 ? selectedValue.length - 2 : highlightedChipIndex; nextIndex = computedNextIndex >= 0 ? computedNextIndex : void 0; store.state.setIndices({ activeIndex: null, selectedIndex: null, type: "keyboard" }); } return nextIndex; } if (event.key === previousChipKey && (event.currentTarget.selectionStart ?? 0) === 0 && selectedValue.length > 0) { event.preventDefault(); nextIndex = renderedChipsCount > 0 ? renderedChipsCount - 1 : void 0; } else if (event.key === "Backspace" && event.currentTarget.value === "" && selectedValue.length > 0) { store.state.setIndices({ activeIndex: null, selectedIndex: null, type: "keyboard" }); event.preventDefault(); } return nextIndex; } const element = useRenderElement("input", componentProps, { state, ref: [forwardedRef, store.state.inputRef, setInputElement], props: [inputProps, triggerProps, { type: "text", value: componentProps.value ?? composingValue ?? inputValue, "aria-readonly": readOnly || void 0, "aria-required": required || void 0, "aria-labelledby": ariaLabelledBy, disabled: disabled2, readOnly, required: selectionMode === "none" ? required : void 0, form, ...inputOwnsFormValue && name && { name }, id, onFocus() { setFocused(true); if (!inline4 || !shouldRestoreActiveIndexRef.current) { return; } shouldRestoreActiveIndexRef.current = false; const nextActiveIndex = lastActiveIndexRef.current; if (nextActiveIndex == null || // `valuesRef` can be sparse, so guard against restoring a removed slot. !Object.hasOwn(store.state.valuesRef.current, nextActiveIndex)) { return; } store.state.setIndices({ activeIndex: nextActiveIndex }); }, onBlur() { setTouched(true); setFocused(false); const activeIndex = store.state.activeIndex; if (inline4 && activeIndex !== null && autoHighlightMode !== "always") { lastActiveIndexRef.current = activeIndex; shouldRestoreActiveIndexRef.current = true; store.state.setIndices({ activeIndex: null }); } if (validationMode === "onBlur") { const valueToValidate = selectionMode === "none" ? inputValue : selectedValue; validation.commit(valueToValidate); } }, onCompositionStart(event) { if (isAndroid) { return; } isComposingRef.current = true; setComposingValue(event.currentTarget.value); }, onCompositionEnd(event) { isComposingRef.current = false; const next = event.currentTarget.value; setComposingValue(null); store.state.setInputValue(next, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent)); }, onChange(event) { const inputType = event.nativeEvent.inputType; const autofillLikeInput = !inputType || inputType === "insertReplacementText"; const shouldOpenOnInput = isComposingRef.current || !autofillLikeInput; if (isComposingRef.current) { const nextVal = event.currentTarget.value; setComposingValue(nextVal); if (nextVal === "" && !store.state.openOnInputClick && !store.state.inputInsidePopup) { store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.inputClear, event.nativeEvent)); } const trimmed2 = nextVal.trim(); const shouldMaintainHighlight = autoHighlightEnabled && trimmed2 !== ""; if (!readOnly && !disabled2 && trimmed2) { if (shouldOpenOnInput) { store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent)); if (!autoHighlightEnabled) { store.state.setIndices({ activeIndex: null, selectedIndex: null, type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer" }); } } } if (open && store.state.activeIndex !== null && !shouldMaintainHighlight) { store.state.setIndices({ activeIndex: null, selectedIndex: null, type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer" }); } return; } store.state.setInputValue(event.currentTarget.value, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent)); const empty = event.currentTarget.value === ""; const clearDetails = createChangeEventDetails(reason_parts_exports.inputClear, event.nativeEvent); if (empty && !store.state.inputInsidePopup) { if (selectionMode === "single") { store.state.setSelectedValue(null, clearDetails); } if (!store.state.openOnInputClick) { store.state.setOpen(false, clearDetails); } } const trimmed = event.currentTarget.value.trim(); if (!readOnly && !disabled2 && trimmed) { if (shouldOpenOnInput) { store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputChange, event.nativeEvent)); if (!autoHighlightEnabled) { store.state.setIndices({ activeIndex: null, selectedIndex: null, type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer" }); } } } if (open && store.state.activeIndex !== null && !autoHighlightEnabled) { store.state.setIndices({ activeIndex: null, selectedIndex: null, type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer" }); } }, onKeyDown(event) { if (disabled2 || readOnly) { return; } if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) { return; } store.state.keyboardActiveRef.current = true; const input = event.currentTarget; const scrollAmount = input.scrollWidth - input.clientWidth; const isRTL7 = direction === "rtl"; if (event.key === "Home") { stopEvent(event); const cursor = isFirefox && isRTL7 ? input.value.length : 0; input.setSelectionRange(cursor, cursor); input.scrollLeft = 0; return; } if (event.key === "End") { stopEvent(event); const cursor = isFirefox && isRTL7 ? 0 : input.value.length; input.setSelectionRange(cursor, cursor); input.scrollLeft = isRTL7 ? -scrollAmount : scrollAmount; return; } if (!mounted && event.key === "Escape") { const isClear = selectionMode === "multiple" && Array.isArray(selectedValue) ? selectedValue.length === 0 : selectedValue === null; const details = createChangeEventDetails(reason_parts_exports.escapeKey, event.nativeEvent); const value = selectionMode === "multiple" ? [] : null; store.state.setInputValue("", details); store.state.setSelectedValue(value, details); if (!isClear && !store.state.inline && !details.isPropagationAllowed) { event.stopPropagation(); } return; } if (comboboxChipsContext && event.key === "Backspace" && input.value === "" && comboboxChipsContext.highlightedChipIndex === void 0 && Array.isArray(selectedValue) && selectedValue.length > 0) { const renderedChipsCount = comboboxChipsContext.chipsRef.current.length; const removalIndex = renderedChipsCount > 0 ? renderedChipsCount - 1 : selectedValue.length - 1; const newValue = selectedValue.filter((_, index2) => index2 !== removalIndex); store.state.setIndices({ activeIndex: null, selectedIndex: null, type: store.state.keyboardActiveRef.current ? "keyboard" : "pointer" }); store.state.setSelectedValue(newValue, createChangeEventDetails(reason_parts_exports.none, event.nativeEvent)); return; } const hadHighlightedChip = comboboxChipsContext?.highlightedChipIndex !== void 0; const nextIndex = handleKeyDown(event); comboboxChipsContext?.setHighlightedChipIndex(nextIndex); if (nextIndex !== void 0) { comboboxChipsContext?.chipsRef.current[nextIndex]?.focus(); } else if (hadHighlightedChip) { store.state.inputRef.current?.focus(); } if (event.which === 229) { return; } if (event.key === "Enter" && open) { const activeIndex = store.state.activeIndex; const nativeEvent = event.nativeEvent; if (activeIndex === null) { if (inline4) { return; } store.state.setOpen(false, createChangeEventDetails(reason_parts_exports.none, nativeEvent)); return; } stopEvent(event); const listItem = store.state.listRef.current[activeIndex]; if (listItem) { store.state.selectionEventRef.current = nativeEvent; listItem.click(); store.state.selectionEventRef.current = null; } } }, onPointerMove() { store.state.keyboardActiveRef.current = false; }, onPointerDown() { store.state.keyboardActiveRef.current = false; } }, validationProps], stateAttributesMapping: triggerStateAttributesMapping }); const renderedInput = hasPositionerParent ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(FieldRootContext.Provider, { value: DEFAULT_FIELD_ROOT_CONTEXT, children: element }) : element; return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(React59.Fragment, { children: [open && focusManagerModal && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ComboboxInternalDismissButton, { ref: store.state.startDismissRef }), renderedInput] }); }); if (true) ComboboxInput.displayName = "ComboboxInput"; // node_modules/@base-ui/react/esm/combobox/input-group/ComboboxInputGroup.js var React60 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/utils/handleInputPress.js function handleInputPress(event, store, disabled2, readOnly, shouldIgnoreTarget) { if (event.baseUIHandlerPrevented || readOnly) { return; } const target = getTarget(event.nativeEvent); const targetElement = isElement(target) ? target : null; if (targetElement !== event.currentTarget && (shouldIgnoreTarget?.(targetElement) || isInteractiveElement(targetElement))) { return; } event.preventDefault(); if (disabled2) { return; } store.state.inputRef.current?.focus(); if (store.state.openOnInputClick) { store.state.setOpen(true, createChangeEventDetails(reason_parts_exports.inputPress, event.nativeEvent)); } } // node_modules/@base-ui/react/esm/combobox/input-group/ComboboxInputGroup.js var ComboboxInputGroup = /* @__PURE__ */ React60.forwardRef(function ComboboxInputGroup2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const { state: fieldState } = useFieldRootContext(); const store = useComboboxRootContext(); const { filteredItems } = useComboboxDerivedItemsContext(); const open = useStore(store, selectors2.open); const mounted = useStore(store, selectors2.mounted); const popupSideValue = useStore(store, selectors2.popupSide); const positionerElement = useStore(store, selectors2.positionerElement); const comboboxDisabled = useStore(store, selectors2.disabled); const readOnly = useStore(store, selectors2.readOnly); const hasSelectedValue = useStore(store, selectors2.hasSelectedValue); const selectionMode = useStore(store, selectors2.selectionMode); const popupSide = mounted && positionerElement ? popupSideValue : null; const disabled2 = comboboxDisabled; const listEmpty = filteredItems.length === 0; const placeholder = selectionMode === "none" ? false : !hasSelectedValue; const state = { ...fieldState, open, disabled: disabled2, readOnly, popupSide, listEmpty, placeholder }; const setInputGroupElement = useStableCallback((element) => { store.set("inputGroupElement", element); }); return useRenderElement("div", componentProps, { ref: [forwardedRef, setInputGroupElement], props: [{ role: "group", onMouseDown(event) { handleInputPress(event, store, disabled2, readOnly, (target) => { return contains(store.state.chipsContainerRef.current, target); }); } }, elementProps], state, stateAttributesMapping: triggerStateAttributesMapping }); }); if (true) ComboboxInputGroup.displayName = "ComboboxInputGroup"; // node_modules/@base-ui/react/esm/autocomplete/input-group/AutocompleteInputGroup.js var AutocompleteInputGroup = ComboboxInputGroup; // node_modules/@base-ui/react/esm/combobox/icon/ComboboxIcon.js var React61 = __toESM(require_react(), 1); var ComboboxIcon = /* @__PURE__ */ React61.forwardRef(function ComboboxIcon2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const element = useRenderElement("span", componentProps, { ref: forwardedRef, props: [{ "aria-hidden": true, children: "\u25BC" }, elementProps] }); return element; }); if (true) ComboboxIcon.displayName = "ComboboxIcon"; // node_modules/@base-ui/react/esm/combobox/clear/ComboboxClear.js var React62 = __toESM(require_react(), 1); var stateAttributesMapping = { ...transitionStatusMapping, ...triggerOpenStateMapping }; var ComboboxClear = /* @__PURE__ */ React62.forwardRef(function ComboboxClear2(componentProps, forwardedRef) { const { render: render4, className, disabled: disabledProp = false, nativeButton = true, keepMounted = false, style, ...elementProps } = componentProps; const { disabled: fieldDisabled } = useFieldRootContext(); const store = useComboboxRootContext(); const selectionMode = useStore(store, selectors2.selectionMode); const comboboxDisabled = useStore(store, selectors2.disabled); const readOnly = useStore(store, selectors2.readOnly); const open = useStore(store, selectors2.open); const selectedValue = useStore(store, selectors2.selectedValue); const hasSelectionChips = useStore(store, selectors2.hasSelectionChips); const inputValue = useComboboxInputValueContext(); let visible = false; if (selectionMode === "none") { visible = inputValue !== ""; } else if (selectionMode === "single") { visible = selectedValue != null; } else { visible = hasSelectionChips; } const disabled2 = fieldDisabled || comboboxDisabled || disabledProp; const { buttonRef, getButtonProps } = useButton({ native: nativeButton, disabled: disabled2 }); const { mounted, transitionStatus, setMounted } = useTransitionStatus(visible); const state = { disabled: disabled2, visible, open, transitionStatus }; useOpenChangeComplete({ open: visible, ref: store.state.clearRef, onComplete() { if (!visible) { setMounted(false); } } }); const element = useRenderElement("button", componentProps, { state, ref: [forwardedRef, buttonRef, store.state.clearRef], props: [{ tabIndex: -1, children: "x", // Avoid stealing focus from the input. onMouseDown(event) { event.preventDefault(); }, onClick(event) { if (disabled2 || readOnly) { return; } const keyboardActiveRef = store.state.keyboardActiveRef; store.state.setInputValue("", createChangeEventDetails(reason_parts_exports.clearPress, event.nativeEvent)); if (selectionMode !== "none") { store.state.setSelectedValue(Array.isArray(selectedValue) ? [] : null, createChangeEventDetails(reason_parts_exports.clearPress, event.nativeEvent)); store.state.setIndices({ activeIndex: null, selectedIndex: null, type: keyboardActiveRef.current ? "keyboard" : "pointer" }); } else { store.state.setIndices({ activeIndex: null, type: keyboardActiveRef.current ? "keyboard" : "pointer" }); } store.state.inputRef.current?.focus(); } }, elementProps, getButtonProps], stateAttributesMapping }); const shouldRender = keepMounted || mounted; if (!shouldRender) { return null; } return element; }); if (true) ComboboxClear.displayName = "ComboboxClear"; // node_modules/@base-ui/react/esm/combobox/list/ComboboxList.js var React65 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/collection/ComboboxCollection.js var React64 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/collection/GroupCollectionContext.js var React63 = __toESM(require_react(), 1); var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); var GroupCollectionContext = /* @__PURE__ */ React63.createContext(null); if (true) GroupCollectionContext.displayName = "GroupCollectionContext"; function useGroupCollectionContext() { return React63.useContext(GroupCollectionContext); } function GroupCollectionProvider(props) { const { children, items } = props; const contextValue = React63.useMemo(() => ({ items }), [items]); return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(GroupCollectionContext.Provider, { value: contextValue, children }); } // node_modules/@base-ui/react/esm/combobox/collection/ComboboxCollection.js var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); function ComboboxCollection(props) { const { children } = props; const { filteredItems } = useComboboxDerivedItemsContext(); const groupContext = useGroupCollectionContext(); const itemsToRender = groupContext ? groupContext.items : filteredItems; if (!itemsToRender) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(React64.Fragment, { children: itemsToRender.map(children) }); } // node_modules/@base-ui/react/esm/combobox/list/ComboboxList.js var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); var ComboboxList = /* @__PURE__ */ React65.forwardRef(function ComboboxList2(componentProps, forwardedRef) { var _ComboboxCollection; const { render: render4, className, style, children, ...elementProps } = componentProps; const store = useComboboxRootContext(); const floatingRootContext = useComboboxFloatingContext(); const hasPositionerContext = Boolean(useComboboxPositionerContext(true)); const { filteredItems, hasItems } = useComboboxDerivedItemsContext(); const selectionMode = useStore(store, selectors2.selectionMode); const grid = useStore(store, selectors2.grid); const popupProps = useStore(store, selectors2.popupProps); const virtualized = useStore(store, selectors2.virtualized); const multiple = selectionMode === "multiple"; const empty = filteredItems.length === 0; const setPositionerElement = useStableCallback((element2) => { store.set("positionerElement", element2); }); const setListElement = useStableCallback((element2) => { store.set("listElement", element2); }); const resolvedChildren = React65.useMemo(() => { if (typeof children === "function") { return _ComboboxCollection || (_ComboboxCollection = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ComboboxCollection, { children })); } return children; }, [children]); const state = { empty }; const floatingId = floatingRootContext.useState("floatingId"); const element = useRenderElement("div", componentProps, { state, ref: [forwardedRef, setListElement, hasPositionerContext ? null : setPositionerElement], props: [popupProps, { children: resolvedChildren, tabIndex: -1, id: floatingId, role: grid ? "grid" : "listbox", "aria-multiselectable": multiple ? "true" : void 0, onKeyDown(event) { if (store.state.disabled || store.state.readOnly) { return; } if (event.key === "Enter") { const activeIndex = store.state.activeIndex; if (activeIndex == null) { return; } stopEvent(event); const nativeEvent = event.nativeEvent; const listItem = store.state.listRef.current[activeIndex]; if (listItem) { store.state.selectionEventRef.current = nativeEvent; listItem.click(); store.state.selectionEventRef.current = null; } } }, onKeyDownCapture() { store.state.keyboardActiveRef.current = true; }, onPointerMoveCapture() { store.state.keyboardActiveRef.current = false; } }, elementProps] }); if (virtualized) { return element; } return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(CompositeList, { elementsRef: store.state.listRef, labelsRef: hasItems ? void 0 : store.state.labelsRef, children: element }); }); if (true) ComboboxList.displayName = "ComboboxList"; // node_modules/@base-ui/react/esm/combobox/status/ComboboxStatus.js var React67 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/utils/useInitialLiveRegionTextMutation.js var React66 = __toESM(require_react(), 1); var LIVE_REGION_MARKER = "\u2060"; var INITIAL_LIVE_REGION_TEXT_MUTATION_RESET_DELAY = 200; function findLastTextNode(root) { const walker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_TEXT); let lastTextNode = null; while (walker.nextNode()) { const textNode = walker.currentNode; if (textNode.nodeValue !== "") { lastTextNode = textNode; } } return lastTextNode; } function useInitialLiveRegionTextMutation() { const timeout = useTimeout(); const rootRef = React66.useRef(null); React66.useEffect(() => { if (isIOS) { return void 0; } const root = rootRef.current; if (root == null) { return void 0; } const textNode = findLastTextNode(root); if (textNode == null) { return void 0; } const originalValue = textNode.nodeValue ?? ""; const markedValue = `${originalValue}${LIVE_REGION_MARKER}`; textNode.nodeValue = markedValue; timeout.start(INITIAL_LIVE_REGION_TEXT_MUTATION_RESET_DELAY, () => { if (textNode.nodeValue === markedValue) { textNode.nodeValue = originalValue; } }); return () => { timeout.clear(); if (textNode.nodeValue === markedValue) { textNode.nodeValue = originalValue; } }; }, [rootRef, timeout]); return rootRef; } // node_modules/@base-ui/react/esm/combobox/status/ComboboxStatus.js var ComboboxStatus = /* @__PURE__ */ React67.forwardRef(function ComboboxStatus2(componentProps, forwardedRef) { const { render: render4, className, style, children: childrenProp, ...elementProps } = componentProps; const statusRef = useInitialLiveRegionTextMutation(); return useRenderElement("div", componentProps, { ref: [forwardedRef, statusRef], props: [{ children: childrenProp, role: "status", "aria-live": "polite", "aria-atomic": true }, elementProps] }); }); if (true) ComboboxStatus.displayName = "ComboboxStatus"; // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortal.js var React69 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortalContext.js var React68 = __toESM(require_react(), 1); var ComboboxPortalContext = /* @__PURE__ */ React68.createContext(void 0); if (true) ComboboxPortalContext.displayName = "ComboboxPortalContext"; function useComboboxPortalContext() { const context = React68.useContext(ComboboxPortalContext); if (context === void 0) { throw new Error(true ? "Base UI: <Combobox.Portal> is missing." : formatErrorMessage_default(20)); } return context; } // node_modules/@base-ui/react/esm/combobox/portal/ComboboxPortal.js var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); var ComboboxPortal = /* @__PURE__ */ React69.forwardRef(function ComboboxPortal2(props, forwardedRef) { const { keepMounted = false, ...portalProps } = props; const store = useComboboxRootContext(); const mounted = useStore(store, selectors2.mounted); const forceMounted = useStore(store, selectors2.forceMounted); const shouldRender = mounted || keepMounted || forceMounted; if (!shouldRender) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ComboboxPortalContext.Provider, { value: keepMounted, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(FloatingPortal, { ref: forwardedRef, ...portalProps }) }); }); if (true) ComboboxPortal.displayName = "ComboboxPortal"; // node_modules/@base-ui/react/esm/combobox/backdrop/ComboboxBackdrop.js var React70 = __toESM(require_react(), 1); var stateAttributesMapping2 = { ...popupStateMapping, ...transitionStatusMapping }; var ComboboxBackdrop = /* @__PURE__ */ React70.forwardRef(function ComboboxBackdrop2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const store = useComboboxRootContext(); const open = useStore(store, selectors2.open); const mounted = useStore(store, selectors2.mounted); const transitionStatus = useStore(store, selectors2.transitionStatus); const state = { open, transitionStatus }; return useRenderElement("div", componentProps, { state, ref: forwardedRef, stateAttributesMapping: stateAttributesMapping2, props: [{ role: "presentation", hidden: !mounted, style: { userSelect: "none", WebkitUserSelect: "none" } }, elementProps] }); }); if (true) ComboboxBackdrop.displayName = "ComboboxBackdrop"; // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositioner.js var React73 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js var React71 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/floating-ui-react/middleware/arrow.js var baseArrow = (options) => ({ name: "arrow", options, async fn(state) { const { x: x2, y: y2, placement, rects, platform: platform3, elements, middlewareData } = state; const { element, padding = 0, offsetParent = "real" } = evaluate(options, state) || {}; if (element == null) { return {}; } const paddingObject = getPaddingObject(padding); const coords = { x: x2, y: y2 }; const axis = getAlignmentAxis(placement); const length = getAxisLength(axis); const arrowDimensions = await platform3.getDimensions(element); const isYAxis = axis === "y"; const minProp = isYAxis ? "top" : "left"; const maxProp = isYAxis ? "bottom" : "right"; const clientProp = isYAxis ? "clientHeight" : "clientWidth"; const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; const startDiff = coords[axis] - rects.reference[axis]; const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating; let clientSize = elements.floating[clientProp] || rects.floating[length]; if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) { clientSize = elements.floating[clientProp] || rects.floating[length]; } const centerToReference = endDiff / 2 - startDiff / 2; const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); const min2 = minPadding; const max2 = clientSize - arrowDimensions[length] - maxPadding; const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; const offset4 = clamp(min2, center, max2); const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0; return { [axis]: coords[axis] + alignmentOffset, data: { [axis]: offset4, centerOffset: center - offset4 - alignmentOffset, ...shouldAddOffset && { alignmentOffset } }, reset: shouldAddOffset }; } }); var arrow4 = (options, deps) => ({ ...baseArrow(options), options: [options, deps] }); // node_modules/@base-ui/react/esm/utils/hideMiddleware.js var hide4 = { name: "hide", async fn(state) { const { width, height, x: x2, y: y2 } = state.rects.reference; const anchorHidden = width === 0 && height === 0 && x2 === 0 && y2 === 0; const nativeHideResult = await hide3().fn(state); return { data: { referenceHidden: nativeHideResult.data?.referenceHidden || anchorHidden } }; } }; // node_modules/@base-ui/react/esm/utils/adaptiveOriginMiddleware.js var DEFAULT_SIDES = { sideX: "left", sideY: "top" }; var adaptiveOrigin = { name: "adaptiveOrigin", async fn(state) { const { x: rawX, y: rawY, rects: { floating: floatRect }, elements: { floating }, platform: platform3, strategy, placement } = state; const win = getWindow(floating); const styles = win.getComputedStyle(floating); const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; if (!hasTransition) { return { x: rawX, y: rawY, data: DEFAULT_SIDES }; } const offsetParent = await platform3.getOffsetParent?.(floating); let offsetDimensions = { width: 0, height: 0 }; if (strategy === "fixed" && win?.visualViewport) { offsetDimensions = { width: win.visualViewport.width, height: win.visualViewport.height }; } else if (offsetParent === win) { const doc = ownerDocument(floating); offsetDimensions = { width: doc.documentElement.clientWidth, height: doc.documentElement.clientHeight }; } else if (await platform3.isElement?.(offsetParent)) { offsetDimensions = await platform3.getDimensions(offsetParent); } const currentSide = getSide(placement); let x2 = rawX; let y2 = rawY; if (currentSide === "left") { x2 = offsetDimensions.width - (rawX + floatRect.width); } if (currentSide === "top") { y2 = offsetDimensions.height - (rawY + floatRect.height); } const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; return { x: x2, y: y2, data: { sideX, sideY } }; } }; // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js function getLogicalSide(sideParam, renderedSide, isRtl) { const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; const logicalRight = isRtl ? "inline-start" : "inline-end"; const logicalLeft = isRtl ? "inline-end" : "inline-start"; return { top: "top", right: isLogicalSideParam ? logicalRight : "right", bottom: "bottom", left: isLogicalSideParam ? logicalLeft : "left" }[renderedSide]; } function getOffsetData(state, sideParam, isRtl) { const { rects, placement } = state; const data = { side: getLogicalSide(sideParam, getSide(placement), isRtl), align: getAlignment(placement) || "center", anchor: { width: rects.reference.width, height: rects.reference.height }, positioner: { width: rects.floating.width, height: rects.floating.height } }; return data; } function useAnchorPositioning(params) { const { // Public parameters anchor, positionMethod = "absolute", side: sideParam = "bottom", sideOffset = 0, align = "center", alignOffset = 0, collisionBoundary, collisionPadding: collisionPaddingParam = 5, sticky = false, arrowPadding = 5, disableAnchorTracking = false, inline: inlineMiddleware, // Private parameters keepMounted = false, floatingRootContext, mounted, collisionAvoidance, shiftCrossAxis = false, nodeId, adaptiveOrigin: adaptiveOrigin2, lazyFlip = false, externalTree } = params; const [mountSide, setMountSide] = React71.useState(null); if (!mounted && mountSide !== null) { setMountSide(null); } const collisionAvoidanceSide = collisionAvoidance.side || "flip"; const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; const anchorFn = typeof anchor === "function" ? anchor : void 0; const anchorFnCallback = useStableCallback(anchorFn); const anchorDep = anchorFn ? anchorFnCallback : anchor; const anchorValueRef = useValueAsRef(anchor); const mountedRef = useValueAsRef(mounted); const direction = useDirection(); const isRtl = direction === "rtl"; const side = mountSide || { top: "top", right: "right", bottom: "bottom", left: "left", "inline-end": isRtl ? "left" : "right", "inline-start": isRtl ? "right" : "left" }[sideParam]; const placement = align === "center" ? side : `${side}-${align}`; let collisionPadding = collisionPaddingParam; const bias = 1; const biasTop = sideParam === "bottom" ? bias : 0; const biasBottom = sideParam === "top" ? bias : 0; const biasLeft = sideParam === "right" ? bias : 0; const biasRight = sideParam === "left" ? bias : 0; if (typeof collisionPadding === "number") { collisionPadding = { top: collisionPadding + biasTop, right: collisionPadding + biasRight, bottom: collisionPadding + biasBottom, left: collisionPadding + biasLeft }; } else if (collisionPadding) { collisionPadding = { top: (collisionPadding.top || 0) + biasTop, right: (collisionPadding.right || 0) + biasRight, bottom: (collisionPadding.bottom || 0) + biasBottom, left: (collisionPadding.left || 0) + biasLeft }; } const commonCollisionProps = { boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, padding: collisionPadding }; const arrowRef = React71.useRef(null); const sideOffsetRef = useValueAsRef(sideOffset); const alignOffsetRef = useValueAsRef(alignOffset); const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; const middleware = []; if (inlineMiddleware) { middleware.push(inlineMiddleware); } middleware.push(offset3((state) => { const data = getOffsetData(state, sideParam, isRtl); const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; return { mainAxis: sideAxis, crossAxis: alignAxis, alignmentAxis: alignAxis }; }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ ...commonCollisionProps, // Ensure the popup flips if it's been limited by its --available-height and it resizes. // Since the size() padding is smaller than the flip() padding, flip() will take precedence. padding: { top: collisionPadding.top + bias, right: collisionPadding.right + bias, bottom: collisionPadding.bottom + bias, left: collisionPadding.left + bias }, mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide }); const shiftMiddleware = shiftDisabled ? null : shift3((data) => { const html = ownerDocument(data.elements.floating).documentElement; return { ...commonCollisionProps, // Use the Layout Viewport to avoid shifting around when pinch-zooming // for context menus. rootBoundary: shiftCrossAxis ? { x: 0, y: 0, width: html.clientWidth, height: html.clientHeight } : void 0, mainAxis: collisionAvoidanceAlign !== "none", crossAxis: crossAxisShiftEnabled, limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { if (!arrowRef.current) { return {}; } const { width, height } = arrowRef.current.getBoundingClientRect(); const sideAxis = getSideAxis(getSide(limitData.placement)); const arrowSize = sideAxis === "y" ? width : height; const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; return { offset: arrowSize / 2 + offsetAmount / 2 }; }) }; }, [commonCollisionProps, sticky, shiftCrossAxis, collisionPadding, collisionAvoidanceAlign]); if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") { middleware.push(shiftMiddleware, flipMiddleware); } else { middleware.push(flipMiddleware, shiftMiddleware); } middleware.push(size3({ ...commonCollisionProps, apply({ elements: { floating }, availableWidth, availableHeight, rects }) { if (!mountedRef.current) { return; } const floatingStyle = floating.style; floatingStyle.setProperty("--available-width", `${availableWidth}px`); floatingStyle.setProperty("--available-height", `${availableHeight}px`); const dpr = getWindow(floating).devicePixelRatio || 1; const { x: x3, y: y3, width, height } = rects.reference; const anchorWidth = (Math.round((x3 + width) * dpr) - Math.round(x3 * dpr)) / dpr; const anchorHeight = (Math.round((y3 + height) * dpr) - Math.round(y3 * dpr)) / dpr; floatingStyle.setProperty("--anchor-width", `${anchorWidth}px`); floatingStyle.setProperty("--anchor-height", `${anchorHeight}px`); } }), arrow4((state) => ({ // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, // we'll create a fake element. element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), padding: arrowPadding, offsetParent: "floating" }), [arrowPadding]), { name: "transformOrigin", fn(state) { const { elements: elements2, middlewareData: middlewareData2, placement: renderedPlacement2, rects, y: y3 } = state; const currentRenderedSide = getSide(renderedPlacement2); const currentRenderedAxis = getSideAxis(currentRenderedSide); const arrowEl = arrowRef.current; const arrowX = middlewareData2.arrow?.x || 0; const arrowY = middlewareData2.arrow?.y || 0; const arrowWidth = arrowEl?.clientWidth || 0; const arrowHeight = arrowEl?.clientHeight || 0; const transformX = arrowX + arrowWidth / 2; const transformY = arrowY + arrowHeight / 2; const shiftY = Math.abs(middlewareData2.shift?.y || 0); const halfAnchorHeight = rects.reference.height / 2; const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; const isOverlappingAnchor = shiftY > sideOffsetValue; const adjacentTransformOrigin = { top: `${transformX}px calc(100% + ${sideOffsetValue}px)`, bottom: `${transformX}px ${-sideOffsetValue}px`, left: `calc(100% + ${sideOffsetValue}px) ${transformY}px`, right: `${-sideOffsetValue}px ${transformY}px` }[currentRenderedSide]; const overlapTransformOrigin = `${transformX}px ${rects.reference.y + halfAnchorHeight - y3}px`; elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin); return {}; } }, hide4, adaptiveOrigin2); useIsoLayoutEffect(() => { if (!mounted && floatingRootContext) { floatingRootContext.update({ referenceElement: null, floatingElement: null, domReferenceElement: null, positionReference: null }); } }, [mounted, floatingRootContext]); const autoUpdateOptions = React71.useMemo(() => ({ elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" }), [disableAnchorTracking]); const { refs, elements, x: x2, y: y2, middlewareData, update: update2, placement: renderedPlacement, context, isPositioned, floatingStyles: originalFloatingStyles } = useFloating2({ rootContext: floatingRootContext, open: keepMounted ? mounted : void 0, placement, middleware, strategy: positionMethod, whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), nodeId, externalTree }); const { sideX, sideY } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; const resolvedPosition = isPositioned ? positionMethod : "fixed"; const floatingStyles = React71.useMemo(() => { const base = adaptiveOrigin2 ? { position: resolvedPosition, [sideX]: x2, [sideY]: y2 } : { position: resolvedPosition, ...originalFloatingStyles }; if (!isPositioned) { base.opacity = 0; } return base; }, [adaptiveOrigin2, resolvedPosition, sideX, x2, sideY, y2, originalFloatingStyles, isPositioned]); const registeredPositionReferenceRef = React71.useRef(null); useIsoLayoutEffect(() => { if (!mounted) { return; } const anchorValue = anchorValueRef.current; const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; const finalAnchor = unwrappedElement || null; if (finalAnchor !== registeredPositionReferenceRef.current) { refs.setPositionReference(finalAnchor); registeredPositionReferenceRef.current = finalAnchor; } }, [mounted, refs, anchorDep, anchorValueRef]); React71.useEffect(() => { if (!mounted) { return; } const anchorValue = anchorValueRef.current; if (typeof anchorValue === "function") { return; } if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { refs.setPositionReference(anchorValue.current); registeredPositionReferenceRef.current = anchorValue.current; } }, [mounted, refs, anchorDep, anchorValueRef]); React71.useEffect(() => { if (keepMounted && mounted && elements.domReference && elements.floating) { return autoUpdate(elements.domReference, elements.floating, update2, autoUpdateOptions); } return void 0; }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); const renderedSide = getSide(renderedPlacement); const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); const renderedAlign = getAlignment(renderedPlacement) || "center"; const anchorHidden = Boolean(middlewareData.hide?.referenceHidden); useIsoLayoutEffect(() => { if (lazyFlip && mounted && isPositioned) { setMountSide(renderedSide); } }, [lazyFlip, mounted, isPositioned, renderedSide]); const arrowStyles = React71.useMemo(() => ({ position: "absolute", top: middlewareData.arrow?.y, left: middlewareData.arrow?.x }), [middlewareData.arrow]); const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; return React71.useMemo(() => ({ positionerStyles: floatingStyles, arrowStyles, arrowRef, arrowUncentered, side: logicalRenderedSide, align: renderedAlign, physicalSide: renderedSide, anchorHidden, refs, context, isPositioned, update: update2 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]); } function isRef(param) { return param != null && "current" in param; } // node_modules/@base-ui/react/esm/utils/getDisabledMountTransitionStyles.js function getDisabledMountTransitionStyles(transitionStatus) { return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; } // node_modules/@base-ui/react/esm/utils/usePositioner.js function usePositioner(componentProps, state, { styles, transitionStatus, props, refs, hidden, inert = false }) { const style = { ...styles }; if (inert) { style.pointerEvents = "none"; } return useRenderElement("div", componentProps, { state, ref: refs, props: [{ role: "presentation", hidden, style }, getDisabledMountTransitionStyles(transitionStatus), props], stateAttributesMapping: popupStateMapping }); } // node_modules/@base-ui/react/esm/utils/useAnchoredPopupScrollLock.js var React72 = __toESM(require_react(), 1); var VIEWPORT_WIDTH_TOLERANCE_PX = 20; function useAnchoredPopupScrollLock(enabled, touchOpen, positionerElement, referenceElement) { const [touchOpenShouldLockScroll, setTouchOpenShouldLockScroll] = React72.useState(false); useIsoLayoutEffect(() => { if (!enabled || !touchOpen || positionerElement == null) { setTouchOpenShouldLockScroll(false); return; } const viewportWidth = ownerDocument(positionerElement).documentElement.clientWidth; const popupWidth = positionerElement.offsetWidth; setTouchOpenShouldLockScroll(viewportWidth > 0 && popupWidth > 0 && popupWidth >= viewportWidth - VIEWPORT_WIDTH_TOLERANCE_PX); }, [enabled, touchOpen, positionerElement]); useScrollLock(enabled && (!touchOpen || touchOpenShouldLockScroll), referenceElement); } // node_modules/@base-ui/react/esm/combobox/positioner/ComboboxPositioner.js var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); var ComboboxPositioner = /* @__PURE__ */ React73.forwardRef(function ComboboxPositioner2(componentProps, forwardedRef) { const { render: render4, className, anchor, positionMethod = "absolute", side = "bottom", align = "center", sideOffset = 0, alignOffset = 0, collisionBoundary = "clipping-ancestors", collisionPadding = 5, arrowPadding = 5, sticky = false, disableAnchorTracking = false, collisionAvoidance = DROPDOWN_COLLISION_AVOIDANCE, style: styleProp, ...elementProps } = componentProps; const store = useComboboxRootContext(); const { filteredItems } = useComboboxDerivedItemsContext(); const floatingRootContext = useComboboxFloatingContext(); const keepMounted = useComboboxPortalContext(); const modal = useStore(store, selectors2.modal); const open = useStore(store, selectors2.open); const mounted = useStore(store, selectors2.mounted); const openMethod = useStore(store, selectors2.openMethod); const positionerElement = useStore(store, selectors2.positionerElement); const triggerElement = useStore(store, selectors2.triggerElement); const inputElement = useStore(store, selectors2.inputElement); const inputGroupElement = useStore(store, selectors2.inputGroupElement); const inputInsidePopup = useStore(store, selectors2.inputInsidePopup); const transitionStatus = useStore(store, selectors2.transitionStatus); const empty = filteredItems.length === 0; const resolvedAnchor = anchor ?? (inputInsidePopup ? triggerElement : inputGroupElement ?? inputElement); const positioning = useAnchorPositioning({ anchor: resolvedAnchor, floatingRootContext, positionMethod, mounted, side, sideOffset, align, alignOffset, arrowPadding, collisionBoundary, collisionPadding, sticky, disableAnchorTracking, keepMounted, collisionAvoidance, lazyFlip: true }); useAnchoredPopupScrollLock(open && modal, openMethod === "touch", positionerElement, triggerElement); const state = { open, side: positioning.side, align: positioning.align, anchorHidden: positioning.anchorHidden, empty }; useIsoLayoutEffect(() => { store.set("popupSide", positioning.side); }, [store, positioning.side]); const setPositionerElement = useStableCallback((element2) => { store.set("positionerElement", element2); }); const element = usePositioner(componentProps, state, { styles: positioning.positionerStyles, transitionStatus, props: elementProps, refs: [forwardedRef, setPositionerElement], hidden: !mounted, inert: !open }); return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(ComboboxPositionerContext.Provider, { value: positioning, children: [mounted && modal && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(InternalBackdrop, { inert: inertValue(!open), cutout: inputGroupElement ?? inputElement ?? triggerElement }), element] }); }); if (true) ComboboxPositioner.displayName = "ComboboxPositioner"; // node_modules/@base-ui/react/esm/combobox/popup/ComboboxPopup.js var React74 = __toESM(require_react(), 1); var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); var stateAttributesMapping3 = { ...popupStateMapping, ...transitionStatusMapping }; var ComboboxPopup = /* @__PURE__ */ React74.forwardRef(function ComboboxPopup2(componentProps, forwardedRef) { const { render: render4, className, style, initialFocus, finalFocus, ...elementProps } = componentProps; const store = useComboboxRootContext(); const positioning = useComboboxPositionerContext(); const floatingRootContext = useComboboxFloatingContext(); const { filteredItems } = useComboboxDerivedItemsContext(); const mounted = useStore(store, selectors2.mounted); const open = useStore(store, selectors2.open); const openMethod = useStore(store, selectors2.openMethod); const transitionStatus = useStore(store, selectors2.transitionStatus); const inputInsidePopup = useStore(store, selectors2.inputInsidePopup); const inputElement = useStore(store, selectors2.inputElement); const modal = useStore(store, selectors2.modal); const empty = filteredItems.length === 0; useOpenChangeComplete({ open, ref: store.state.popupRef, onComplete() { if (open) { store.state.onOpenChangeComplete(true); } } }); const state = { open, side: positioning.side, align: positioning.align, anchorHidden: positioning.anchorHidden, transitionStatus, empty }; const element = useRenderElement("div", componentProps, { state, ref: [forwardedRef, store.state.popupRef], props: [{ role: inputInsidePopup ? "dialog" : "presentation", tabIndex: -1, onFocus(event) { const target = getTarget(event.nativeEvent); if (openMethod !== "touch" && (contains(store.state.listElement, target) || target === event.currentTarget)) { store.state.inputRef.current?.focus(); } } }, getDisabledMountTransitionStyles(transitionStatus), elementProps], stateAttributesMapping: stateAttributesMapping3 }); const computedDefaultInitialFocus = inputInsidePopup ? (interactionType) => interactionType === "touch" ? store.state.popupRef.current : inputElement : false; const resolvedInitialFocus = initialFocus === void 0 ? computedDefaultInitialFocus : initialFocus; let resolvedFinalFocus; if (finalFocus != null) { resolvedFinalFocus = finalFocus; } else { resolvedFinalFocus = inputInsidePopup ? void 0 : false; } const focusManagerModal = !inputInsidePopup || modal; return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(FloatingFocusManager, { context: floatingRootContext, disabled: !mounted, modal: focusManagerModal, openInteractionType: openMethod, initialFocus: resolvedInitialFocus, returnFocus: resolvedFinalFocus, getInsideElements: () => [store.state.startDismissRef.current, store.state.endDismissRef.current], children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(React74.Fragment, { children: [element, focusManagerModal && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ComboboxInternalDismissButton, { ref: store.state.endDismissRef })] }) }); }); if (true) ComboboxPopup.displayName = "ComboboxPopup"; // node_modules/@base-ui/react/esm/combobox/arrow/ComboboxArrow.js var React75 = __toESM(require_react(), 1); var ComboboxArrow = /* @__PURE__ */ React75.forwardRef(function ComboboxArrow2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const store = useComboboxRootContext(); const { arrowRef, side, align, arrowUncentered, arrowStyles } = useComboboxPositionerContext(); const open = useStore(store, selectors2.open); const state = { open, side, align, uncentered: arrowUncentered }; return useRenderElement("div", componentProps, { ref: [arrowRef, forwardedRef], stateAttributesMapping: popupStateMapping, state, props: { style: arrowStyles, "aria-hidden": true, ...elementProps } }); }); if (true) ComboboxArrow.displayName = "ComboboxArrow"; // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroup.js var React77 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroupContext.js var React76 = __toESM(require_react(), 1); var ComboboxGroupContext = /* @__PURE__ */ React76.createContext(void 0); if (true) ComboboxGroupContext.displayName = "ComboboxGroupContext"; function useComboboxGroupContext() { const context = React76.useContext(ComboboxGroupContext); if (context === void 0) { throw new Error(true ? "Base UI: ComboboxGroupContext is missing. ComboboxGroup parts must be placed within <Combobox.Group>." : formatErrorMessage_default(18)); } return context; } // node_modules/@base-ui/react/esm/combobox/group/ComboboxGroup.js var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); var ComboboxGroup = /* @__PURE__ */ React77.forwardRef(function ComboboxGroup2(componentProps, forwardedRef) { const { render: render4, className, style, items, ...elementProps } = componentProps; const [labelId, setLabelId] = React77.useState(); const contextValue = React77.useMemo(() => ({ labelId, setLabelId, items }), [labelId, setLabelId, items]); const element = useRenderElement("div", componentProps, { ref: forwardedRef, props: [{ role: "group", "aria-labelledby": labelId }, elementProps] }); const wrappedElement = /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ComboboxGroupContext.Provider, { value: contextValue, children: element }); if (items) { return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(GroupCollectionProvider, { items, children: wrappedElement }); } return wrappedElement; }); if (true) ComboboxGroup.displayName = "ComboboxGroup"; // node_modules/@base-ui/react/esm/combobox/group-label/ComboboxGroupLabel.js var React78 = __toESM(require_react(), 1); var ComboboxGroupLabel = /* @__PURE__ */ React78.forwardRef(function ComboboxGroupLabel2(componentProps, forwardedRef) { const { render: render4, className, style, id: idProp, ...elementProps } = componentProps; const { setLabelId } = useComboboxGroupContext(); const id = useBaseUiId(idProp); useIsoLayoutEffect(() => { setLabelId(id); return () => { setLabelId(void 0); }; }, [id, setLabelId]); const element = useRenderElement("div", componentProps, { ref: forwardedRef, props: [{ id }, elementProps] }); return element; }); if (true) ComboboxGroupLabel.displayName = "ComboboxGroupLabel"; // node_modules/@base-ui/react/esm/combobox/item/ComboboxItem.js var React81 = __toESM(require_react(), 1); var ReactDOM5 = __toESM(require_react_dom(), 1); // node_modules/@base-ui/react/esm/combobox/item/ComboboxItemContext.js var React79 = __toESM(require_react(), 1); var ComboboxItemContext = /* @__PURE__ */ React79.createContext(void 0); if (true) ComboboxItemContext.displayName = "ComboboxItemContext"; // node_modules/@base-ui/react/esm/combobox/row/ComboboxRowContext.js var React80 = __toESM(require_react(), 1); var ComboboxRowContext = /* @__PURE__ */ React80.createContext(false); if (true) ComboboxRowContext.displayName = "ComboboxRowContext"; function useComboboxRowContext() { return React80.useContext(ComboboxRowContext); } // node_modules/@base-ui/react/esm/combobox/item/ComboboxItem.js var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); var ComboboxItem = /* @__PURE__ */ React81.memo(/* @__PURE__ */ React81.forwardRef(function ComboboxItem2(componentProps, forwardedRef) { const { render: render4, className, style, value: itemValue = null, index: indexProp, disabled: disabled2 = false, nativeButton = false, ...elementProps } = componentProps; const didPointerDownRef = React81.useRef(false); const textRef = React81.useRef(null); const listItem = useCompositeListItem({ index: indexProp, textRef, indexGuessBehavior: IndexGuessBehavior.GuessFromOrder }); const store = useComboboxRootContext(); const isRow = useComboboxRowContext(); const { flatFilteredItems, hasItems } = useComboboxDerivedItemsContext(); const open = useStore(store, selectors2.open); const selectionMode = useStore(store, selectors2.selectionMode); const readOnly = useStore(store, selectors2.readOnly); const virtualized = useStore(store, selectors2.virtualized); const isItemEqualToValue = useStore(store, selectors2.isItemEqualToValue); const selectable = selectionMode !== "none"; const index2 = indexProp ?? (virtualized ? findItemIndex(flatFilteredItems, itemValue, isItemEqualToValue) : listItem.index); const hasRegistered = listItem.index !== -1; const rootId = useStore(store, selectors2.id); const highlighted = useStore(store, selectors2.isActive, index2); const matchesSelectedValue = useStore(store, selectors2.isSelected, itemValue); const itemProps = useStore(store, selectors2.itemProps); const itemRef = React81.useRef(null); const id = rootId != null && hasRegistered ? `${rootId}-${index2}` : void 0; const selected = matchesSelectedValue && selectable; useIsoLayoutEffect(() => { const shouldRun = hasRegistered && (virtualized || indexProp != null); if (!shouldRun) { return void 0; } const list = store.state.listRef.current; list[index2] = itemRef.current; return () => { delete list[index2]; }; }, [hasRegistered, virtualized, index2, indexProp, store]); useIsoLayoutEffect(() => { if (!hasRegistered || hasItems) { return void 0; } const visibleMap = store.state.valuesRef.current; visibleMap[index2] = itemValue; if (selectionMode !== "none") { store.state.allValuesRef.current.push(itemValue); } return () => { delete visibleMap[index2]; }; }, [hasRegistered, hasItems, index2, itemValue, store, selectionMode]); useIsoLayoutEffect(() => { if (!open) { didPointerDownRef.current = false; return; } if (!hasRegistered || hasItems) { return; } const selectedValue = store.state.selectedValue; const lastSelectedValue = Array.isArray(selectedValue) ? selectedValue[selectedValue.length - 1] : selectedValue; if (compareItemEquality(itemValue, lastSelectedValue, isItemEqualToValue)) { store.set("selectedIndex", index2); } }, [hasRegistered, hasItems, open, store, index2, itemValue, isItemEqualToValue]); const { getButtonProps, buttonRef } = useButton({ disabled: disabled2, focusableWhenDisabled: true, native: nativeButton, composite: true }); const state = { disabled: disabled2, selected, highlighted }; function commitSelection(nativeEvent) { function selectItem() { store.state.handleSelection(nativeEvent, itemValue); } if (store.state.submitOnItemClick) { ReactDOM5.flushSync(selectItem); store.state.requestSubmit(); } else { selectItem(); } } const defaultProps = { id, role: isRow ? "gridcell" : "option", "aria-selected": selectable ? selected : void 0, // Focusable items steal focus from the input upon mouseup. // Warn if the user renders a natively focusable element like `<button>`, // as it should be a `<div>` instead. tabIndex: void 0, onPointerDownCapture(event) { didPointerDownRef.current = true; event.preventDefault(); }, onMouseDown(event) { event.preventDefault(); }, onClick(event) { if (disabled2 || readOnly) { return; } commitSelection(event.nativeEvent); }, onMouseUp(event) { const pointerStartedOnItem = didPointerDownRef.current; didPointerDownRef.current = false; if (disabled2 || readOnly || event.button !== 0 || pointerStartedOnItem || !highlighted) { return; } commitSelection(event.nativeEvent); } }; const element = useRenderElement("div", componentProps, { ref: [buttonRef, forwardedRef, listItem.ref, itemRef], state, props: [itemProps, defaultProps, elementProps, getButtonProps] }); const contextValue = React81.useMemo(() => ({ selected, textRef }), [selected, textRef]); return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(ComboboxItemContext.Provider, { value: contextValue, children: element }); })); if (true) ComboboxItem.displayName = "ComboboxItem"; // node_modules/@base-ui/react/esm/autocomplete/item/AutocompleteItem.js var AutocompleteItem = ComboboxItem; // node_modules/@base-ui/react/esm/combobox/row/ComboboxRow.js var React82 = __toESM(require_react(), 1); var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); var ComboboxRow = /* @__PURE__ */ React82.forwardRef(function ComboboxRow2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const element = useRenderElement("div", componentProps, { ref: forwardedRef, props: [{ role: "row" }, elementProps] }); return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ComboboxRowContext.Provider, { value: true, children: element }); }); if (true) ComboboxRow.displayName = "ComboboxRow"; // node_modules/@base-ui/react/esm/combobox/empty/ComboboxEmpty.js var React83 = __toESM(require_react(), 1); var ComboboxEmpty = /* @__PURE__ */ React83.forwardRef(function ComboboxEmpty2(componentProps, forwardedRef) { const { render: render4, className, style, children: childrenProp, ...elementProps } = componentProps; const { filteredItems } = useComboboxDerivedItemsContext(); const store = useComboboxRootContext(); const emptyRef = useInitialLiveRegionTextMutation(); const children = filteredItems.length === 0 ? childrenProp : null; return useRenderElement("div", componentProps, { ref: [forwardedRef, store.state.emptyRef, emptyRef], props: [{ children, role: "status", "aria-live": "polite", "aria-atomic": true }, elementProps] }); }); if (true) ComboboxEmpty.displayName = "ComboboxEmpty"; // node_modules/@base-ui/react/esm/separator/Separator.js var React84 = __toESM(require_react(), 1); var Separator = /* @__PURE__ */ React84.forwardRef(function SeparatorComponent(componentProps, forwardedRef) { const { className, render: render4, orientation = "horizontal", style, ...elementProps } = componentProps; const state = { orientation }; const element = useRenderElement("div", componentProps, { state, ref: forwardedRef, props: [{ role: "separator", "aria-orientation": orientation }, elementProps] }); return element; }); if (true) Separator.displayName = "Separator"; // node_modules/@base-ui/react/esm/combobox/root/utils/useFilteredItems.js function useFilteredItems() { const items = useComboboxDerivedItemsContext(); return items.filteredItems; } // node_modules/@base-ui/react/esm/button/Button.js var React85 = __toESM(require_react(), 1); var Button = /* @__PURE__ */ React85.forwardRef(function Button2(componentProps, forwardedRef) { const { render: render4, className, disabled: disabled2 = false, focusableWhenDisabled = false, nativeButton = true, style, ...elementProps } = componentProps; const { getButtonProps, buttonRef } = useButton({ disabled: disabled2, focusableWhenDisabled, native: nativeButton }); const state = { disabled: disabled2 }; return useRenderElement("button", componentProps, { state, ref: [forwardedRef, buttonRef], props: [elementProps, getButtonProps] }); }); if (true) Button.displayName = "Button"; // node_modules/@base-ui/react/esm/field/item/FieldItemContext.js var React86 = __toESM(require_react(), 1); var FieldItemContext = /* @__PURE__ */ React86.createContext({ disabled: false }); if (true) FieldItemContext.displayName = "FieldItemContext"; // node_modules/@base-ui/react/esm/checkbox-group/CheckboxGroupContext.js var React87 = __toESM(require_react(), 1); var CheckboxGroupContext = /* @__PURE__ */ React87.createContext(void 0); if (true) CheckboxGroupContext.displayName = "CheckboxGroupContext"; function useCheckboxGroupContext(optional = true) { const context = React87.useContext(CheckboxGroupContext); if (context === void 0 && !optional) { throw new Error(true ? "Base UI: CheckboxGroupContext is missing. CheckboxGroup parts must be placed within <CheckboxGroup>." : formatErrorMessage_default(3)); } return context; } // node_modules/@base-ui/react/esm/utils/useRegisteredLabelId.js function useRegisteredLabelId(idProp, setLabelId) { const id = useBaseUiId(idProp); useIsoLayoutEffect(() => { setLabelId(id); return () => { setLabelId(void 0); }; }, [id, setLabelId]); return id; } // node_modules/@base-ui/react/esm/internals/labelable-provider/useLabel.js function useLabel(params = {}) { const { id: idProp, fallbackControlId, native = false, setLabelId: setLabelIdProp, focusControl: focusControlProp } = params; const { controlId: contextControlId, setLabelId: setContextLabelId } = useLabelableContext(); const syncLabelId = useStableCallback((nextLabelId) => { setContextLabelId(nextLabelId); setLabelIdProp?.(nextLabelId); }); const id = useRegisteredLabelId(idProp, syncLabelId); const resolvedControlId = contextControlId ?? fallbackControlId; function focusControl(event) { if (focusControlProp) { focusControlProp(event, resolvedControlId); return; } if (!resolvedControlId) { return; } const controlElement = ownerDocument(event.currentTarget).getElementById(resolvedControlId); if (isHTMLElement(controlElement)) { focusElementWithVisible(controlElement); } } function handleInteraction(event) { const target = getTarget(event.nativeEvent); if (target?.closest("button,input,select,textarea")) { return; } if (!event.defaultPrevented && event.detail > 1) { event.preventDefault(); } if (native) { return; } focusControl(event); } return native ? { id, htmlFor: resolvedControlId ?? void 0, onMouseDown: handleInteraction } : { id, onClick: handleInteraction, onPointerDown(event) { event.preventDefault(); } }; } function focusElementWithVisible(element) { element.focus({ // Available from Chrome 144+ (January 2026). // Safari and Firefox already support it. focusVisible: true }); } // node_modules/@base-ui/react/esm/utils/usePopupViewport.js var React90 = __toESM(require_react(), 1); var ReactDOM6 = __toESM(require_react_dom(), 1); // node_modules/@base-ui/utils/esm/usePreviousValue.js var React88 = __toESM(require_react(), 1); function usePreviousValue(value) { const [state, setState] = React88.useState({ current: value, previous: null }); if (value !== state.current) { setState({ current: value, previous: state.current }); } return state.previous; } // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js var React89 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/utils/getCssDimensions.js function getCssDimensions2(element) { const css = getComputedStyle2(element); let width = parseFloat(css.width) || 0; let height = parseFloat(css.height) || 0; const hasOffset = isHTMLElement(element); const offsetWidth = hasOffset ? element.offsetWidth : width; const offsetHeight = hasOffset ? element.offsetHeight : height; const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; if (shouldFallback) { width = offsetWidth; height = offsetHeight; } return { width, height }; } // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js var DEFAULT_ENABLED = () => true; function usePopupAutoResize(parameters) { const { popupElement, positionerElement, content, mounted, enabled = DEFAULT_ENABLED, onMeasureLayout: onMeasureLayoutParam, onMeasureLayoutComplete: onMeasureLayoutCompleteParam, side, direction } = parameters; const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false); const animationFrame = useAnimationFrame(); const committedDimensionsRef = React89.useRef(null); const liveDimensionsRef = React89.useRef(null); const isInitialRenderRef = React89.useRef(true); const restoreAnchoringStylesRef = React89.useRef(NOOP); const onMeasureLayout = useStableCallback(onMeasureLayoutParam); const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); const anchoringStyles = React89.useMemo(() => { let isOriginSide = side === "top"; let isPhysicalLeft = side === "left"; if (direction === "rtl") { isOriginSide = isOriginSide || side === "inline-end"; isPhysicalLeft = isPhysicalLeft || side === "inline-end"; } else { isOriginSide = isOriginSide || side === "inline-start"; isPhysicalLeft = isPhysicalLeft || side === "inline-start"; } return isOriginSide ? { position: "absolute", [side === "top" ? "bottom" : "top"]: "0", [isPhysicalLeft ? "right" : "left"]: "0" } : EMPTY_OBJECT; }, [side, direction]); useIsoLayoutEffect(() => { if (!mounted || !enabled() || typeof ResizeObserver !== "function") { restoreAnchoringStylesRef.current = NOOP; isInitialRenderRef.current = true; committedDimensionsRef.current = null; liveDimensionsRef.current = null; return void 0; } if (!popupElement || !positionerElement) { return void 0; } restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles); const observer = new ResizeObserver((entries) => { const entry = entries[0]; if (entry) { liveDimensionsRef.current = { width: Math.ceil(entry.borderBoxSize[0].inlineSize), height: Math.ceil(entry.borderBoxSize[0].blockSize) }; } }); observer.observe(popupElement); setPopupCssSize(popupElement, "auto"); const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); const restorePositionerAvailableSize = applyElementStyles(positionerElement, { "--available-width": "max-content", "--available-height": "max-content" }); function restoreMeasurementOverrides() { restorePopupPosition(); restorePopupTransform(); restorePositionerAvailableSize(); } function restoreMeasurementOverridesIncludingScale() { restoreMeasurementOverrides(); restorePopupScale(); } onMeasureLayout?.(); if (isInitialRenderRef.current || committedDimensionsRef.current === null) { setPositionerCssSize(positionerElement, "max-content"); const dimensions = getCssDimensions2(popupElement); committedDimensionsRef.current = dimensions; setPositionerCssSize(positionerElement, dimensions); restoreMeasurementOverridesIncludingScale(); onMeasureLayoutComplete?.(null, dimensions); isInitialRenderRef.current = false; return () => { observer.disconnect(); restoreAnchoringStylesRef.current(); restoreAnchoringStylesRef.current = NOOP; }; } setPopupCssSize(popupElement, "auto"); setPositionerCssSize(positionerElement, "max-content"); const previousDimensions = committedDimensionsRef.current ?? liveDimensionsRef.current; const newDimensions = getCssDimensions2(popupElement); committedDimensionsRef.current = newDimensions; if (!previousDimensions) { setPositionerCssSize(positionerElement, newDimensions); restoreMeasurementOverridesIncludingScale(); onMeasureLayoutComplete?.(null, newDimensions); return () => { observer.disconnect(); animationFrame.cancel(); restoreAnchoringStylesRef.current(); restoreAnchoringStylesRef.current = NOOP; }; } setPopupCssSize(popupElement, previousDimensions); restoreMeasurementOverridesIncludingScale(); onMeasureLayoutComplete?.(previousDimensions, newDimensions); setPositionerCssSize(positionerElement, newDimensions); const abortController = new AbortController(); animationFrame.request(() => { setPopupCssSize(popupElement, newDimensions); runOnceAnimationsFinish(() => { popupElement.style.setProperty("--popup-width", "auto"); popupElement.style.setProperty("--popup-height", "auto"); }, abortController.signal); }); return () => { observer.disconnect(); abortController.abort(); animationFrame.cancel(); restoreAnchoringStylesRef.current(); restoreAnchoringStylesRef.current = NOOP; }; }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, enabled, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); } function overrideElementStyle(element, property, value) { const originalValue = element.style.getPropertyValue(property); element.style.setProperty(property, value); return () => { element.style.setProperty(property, originalValue); }; } function applyElementStyles(element, styles) { const restorers = []; for (const [key, value] of Object.entries(styles)) { restorers.push(overrideElementStyle(element, key, value)); } return restorers.length ? () => { restorers.forEach((restore) => restore()); } : NOOP; } function setPopupCssSize(popupElement, size4) { const width = size4 === "auto" ? "auto" : `${size4.width}px`; const height = size4 === "auto" ? "auto" : `${size4.height}px`; popupElement.style.setProperty("--popup-width", width); popupElement.style.setProperty("--popup-height", height); } function setPositionerCssSize(positionerElement, size4) { const width = size4 === "max-content" ? "max-content" : `${size4.width}px`; const height = size4 === "max-content" ? "max-content" : `${size4.height}px`; positionerElement.style.setProperty("--positioner-width", width); positionerElement.style.setProperty("--positioner-height", height); } // node_modules/@base-ui/react/esm/utils/usePopupViewport.js var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); function usePopupViewport(parameters) { const { store, side, cssVars, children } = parameters; const direction = useDirection(); const activeTrigger = store.useState("activeTriggerElement"); const activeTriggerId = store.useState("activeTriggerId"); const open = store.useState("open"); const payload = store.useState("payload"); const mounted = store.useState("mounted"); const popupElement = store.useState("popupElement"); const positionerElement = store.useState("positionerElement"); const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null); const currentContentKey = usePopupContentKey(activeTriggerId, payload); const capturedNodeRef = React90.useRef(null); const [previousContentNode, setPreviousContentNode] = React90.useState(null); const [newTriggerOffset, setNewTriggerOffset] = React90.useState(null); const currentContainerRef = React90.useRef(null); const previousContainerRef = React90.useRef(null); const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true, false); const cleanupFrame = useAnimationFrame(); const [previousContentDimensions, setPreviousContentDimensions] = React90.useState(null); const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React90.useState(false); useIsoLayoutEffect(() => { store.set("hasViewport", true); return () => { store.set("hasViewport", false); }; }, [store]); const handleMeasureLayout = useStableCallback(() => { currentContainerRef.current?.style.setProperty("animation", "none"); currentContainerRef.current?.style.setProperty("transition", "none"); previousContainerRef.current?.style.setProperty("display", "none"); }); const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { currentContainerRef.current?.style.removeProperty("animation"); currentContainerRef.current?.style.removeProperty("transition"); previousContainerRef.current?.style.removeProperty("display"); if (previousDimensions) { setPreviousContentDimensions(previousDimensions); } }); const lastHandledTriggerRef = React90.useRef(null); useIsoLayoutEffect(() => { if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { setPreviousContentNode(capturedNodeRef.current); setShowStartingStyleAttribute(true); const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); setNewTriggerOffset(offset4); cleanupFrame.request(() => { ReactDOM6.flushSync(() => { setShowStartingStyleAttribute(false); }); onAnimationsFinished(() => { setPreviousContentNode(null); setPreviousContentDimensions(null); capturedNodeRef.current = null; }); }); lastHandledTriggerRef.current = activeTrigger; } }, [activeTrigger, previousActiveTrigger, previousContentNode, onAnimationsFinished, cleanupFrame]); useIsoLayoutEffect(() => { const source = currentContainerRef.current; if (!source) { return; } const wrapper = ownerDocument(source).createElement("div"); for (const child of Array.from(source.childNodes)) { wrapper.appendChild(child.cloneNode(true)); } capturedNodeRef.current = wrapper; }); const isTransitioning = previousContentNode != null; let childrenToRender; if (!isTransitioning) { childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { "data-current": true, ref: currentContainerRef, children }, currentContentKey); } else { childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(React90.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { "data-previous": true, inert: inertValue(true), ref: previousContainerRef, style: { ...previousContentDimensions ? { [cssVars.popupWidth]: `${previousContentDimensions.width}px`, [cssVars.popupHeight]: `${previousContentDimensions.height}px` } : null, position: "absolute" }, "data-ending-style": showStartingStyleAttribute ? void 0 : "" }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { "data-current": true, ref: currentContainerRef, "data-starting-style": showStartingStyleAttribute ? "" : void 0, children }, currentContentKey)] }); } useIsoLayoutEffect(() => { const container = previousContainerRef.current; if (!container || !previousContentNode) { return; } container.replaceChildren(...Array.from(previousContentNode.childNodes)); }, [previousContentNode]); usePopupAutoResize({ popupElement, positionerElement, mounted, content: payload, onMeasureLayout: handleMeasureLayout, onMeasureLayoutComplete: handleMeasureLayoutComplete, side, direction }); const state = { activationDirection: getActivationDirection(newTriggerOffset), transitioning: isTransitioning }; return { children: childrenToRender, state }; } function getActivationDirection(offset4) { if (!offset4) { return void 0; } return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; } function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { if (value > tolerance) { return positiveLabel; } if (value < -tolerance) { return negativeLabel; } return ""; } function calculateRelativePosition(from, to) { const fromRect = from.getBoundingClientRect(); const toRect = to.getBoundingClientRect(); const fromCenter = { x: fromRect.left + fromRect.width / 2, y: fromRect.top + fromRect.height / 2 }; const toCenter = { x: toRect.left + toRect.width / 2, y: toRect.top + toRect.height / 2 }; return { horizontal: toCenter.x - fromCenter.x, vertical: toCenter.y - fromCenter.y }; } function usePopupContentKey(activeTriggerId, payload) { const [contentKey, setContentKey] = React90.useState(0); const previousActiveTriggerIdRef = React90.useRef(activeTriggerId); const previousPayloadRef = React90.useRef(payload); const pendingPayloadUpdateRef = React90.useRef(false); useIsoLayoutEffect(() => { const previousActiveTriggerId = previousActiveTriggerIdRef.current; const previousPayload = previousPayloadRef.current; const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; const payloadChanged = payload !== previousPayload; if (triggerIdChanged) { setContentKey((value) => value + 1); pendingPayloadUpdateRef.current = !payloadChanged; } else if (pendingPayloadUpdateRef.current && payloadChanged) { setContentKey((value) => value + 1); pendingPayloadUpdateRef.current = false; } previousActiveTriggerIdRef.current = activeTriggerId; previousPayloadRef.current = payload; }, [activeTriggerId, payload]); return `${activeTriggerId ?? "current"}-${contentKey}`; } // node_modules/@base-ui/react/esm/field/index.parts.js var index_parts_exports2 = {}; __export(index_parts_exports2, { Control: () => FieldControl, Description: () => FieldDescription, Error: () => FieldError, Item: () => FieldItem, Label: () => FieldLabel, Root: () => FieldRoot, Validity: () => FieldValidity }); // node_modules/@base-ui/react/esm/field/root/FieldRoot.js var React95 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/fieldset/root/FieldsetRootContext.js var React91 = __toESM(require_react(), 1); var FieldsetRootContext = /* @__PURE__ */ React91.createContext({ legendId: void 0, setLegendId: () => { }, disabled: void 0 }); if (true) FieldsetRootContext.displayName = "FieldsetRootContext"; function useFieldsetRootContext(optional = false) { const context = React91.useContext(FieldsetRootContext); if (!context && !optional) { throw new Error(true ? "Base UI: FieldsetRootContext is missing. Fieldset parts must be placed within <Fieldset.Root>." : formatErrorMessage_default(86)); } return context; } // node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableProvider.js var React92 = __toESM(require_react(), 1); var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); var LabelableProvider = function LabelableProvider2(props) { const defaultId = useBaseUiId(); const initialControlId = props.controlId === void 0 ? defaultId : props.controlId; const [controlId, setControlIdState] = React92.useState(initialControlId); const [labelId, setLabelId] = React92.useState(props.labelId); const [messageIds, setMessageIds] = React92.useState([]); const registrationsRef = useRefWithInit(() => /* @__PURE__ */ new Map()); const { messageIds: parentMessageIds } = useLabelableContext(); const registerControlId = useStableCallback((source, nextId) => { const registrations = registrationsRef.current; if (nextId === void 0) { registrations.delete(source); return; } registrations.set(source, nextId); setControlIdState((prev) => { if (registrations.size === 0) { return void 0; } let nextControlId; for (const id of registrations.values()) { if (prev !== void 0 && id === prev) { return prev; } if (nextControlId === void 0) { nextControlId = id; } } return nextControlId; }); }); const getDescriptionProps = React92.useCallback((externalProps) => { return mergeProps({ "aria-describedby": parentMessageIds.concat(messageIds).join(" ") || void 0 }, externalProps); }, [parentMessageIds, messageIds]); const contextValue = React92.useMemo(() => ({ controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps }), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]); return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(LabelableContext.Provider, { value: contextValue, children: props.children }); }; if (true) LabelableProvider.displayName = "LabelableProvider"; // node_modules/@base-ui/react/esm/field/root/useFieldValidation.js var React93 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/field/utils/getCombinedFieldValidityData.js function getCombinedFieldValidityData(validityData, invalid) { return { ...validityData, state: { ...validityData.state, valid: !invalid && validityData.state.valid } }; } // node_modules/@base-ui/react/esm/field/root/useFieldValidation.js var validityKeys = Object.keys(DEFAULT_VALIDITY_STATE); function isOnlyValueMissing(state) { if (!state || state.valid || !state.valueMissing) { return false; } let onlyValueMissing = false; for (const key of validityKeys) { if (key === "valid") { continue; } if (key === "valueMissing") { onlyValueMissing = state[key]; } if (state[key]) { onlyValueMissing = false; } } return onlyValueMissing; } function useFieldValidation(params) { const { formRef, clearErrors } = useFormContext(); const { setValidityData, validate, validityData, validationDebounceTime, invalid, markedDirtyRef, state, name, shouldValidateOnChange, getRegisteredFieldId } = params; const { controlId, getDescriptionProps } = useLabelableContext(); const timeout = useTimeout(); const inputRef = React93.useRef(null); const commit = useStableCallback(async (value, revalidate = false) => { const element = inputRef.current; if (!element) { return; } function updateRegisteredFieldValidity(nextValidityData2, externalInvalid = invalid) { const fieldId = getRegisteredFieldId() ?? controlId; if (fieldId == null) { return; } const currentFieldData = formRef.current.fields.get(fieldId); if (!currentFieldData) { return; } const validityDataWithFormErrors = getCombinedFieldValidityData(nextValidityData2, externalInvalid); formRef.current.fields.set(fieldId, { ...currentFieldData, validityData: validityDataWithFormErrors }); } if (revalidate) { if (state.valid !== false) { return; } const currentNativeValidity = element.validity; if (!currentNativeValidity.valueMissing) { const nextValidityData2 = { value, state: { ...DEFAULT_VALIDITY_STATE, valid: true }, error: "", errors: [], initialValue: validityData.initialValue }; element.setCustomValidity(""); updateRegisteredFieldValidity(nextValidityData2, false); setValidityData(nextValidityData2); return; } const currentNativeValidityObject = validityKeys.reduce((acc, key) => { acc[key] = currentNativeValidity[key]; return acc; }, {}); if (!currentNativeValidityObject.valid && !isOnlyValueMissing(currentNativeValidityObject)) { return; } } function getState(el) { const computedState = validityKeys.reduce((acc, key) => { acc[key] = el.validity[key]; return acc; }, {}); let hasOnlyValueMissingError = false; for (const key of validityKeys) { if (key === "valid") { continue; } if (key === "valueMissing" && computedState[key]) { hasOnlyValueMissingError = true; } else if (computedState[key]) { return computedState; } } if (hasOnlyValueMissingError && !markedDirtyRef.current) { computedState.valid = true; computedState.valueMissing = false; } return computedState; } timeout.clear(); let result = null; let validationErrors = []; const nextState = getState(element); let defaultValidationMessage; const validateOnChange = shouldValidateOnChange(); if (element.validationMessage && !validateOnChange) { defaultValidationMessage = element.validationMessage; validationErrors = [element.validationMessage]; } else { const formValues = Array.from(formRef.current.fields.values()).reduce((acc, field) => { if (field.name) { acc[field.name] = field.getValue(); } return acc; }, {}); const resultOrPromise = validate(value, formValues); if (typeof resultOrPromise === "object" && resultOrPromise !== null && "then" in resultOrPromise) { result = await resultOrPromise; } else { result = resultOrPromise; } if (result !== null) { nextState.valid = false; nextState.customError = true; if (Array.isArray(result)) { validationErrors = result; element.setCustomValidity(result.join("\n")); } else if (result) { validationErrors = [result]; element.setCustomValidity(result); } } else if (validateOnChange) { element.setCustomValidity(""); nextState.customError = false; if (element.validationMessage) { defaultValidationMessage = element.validationMessage; validationErrors = [element.validationMessage]; } else if (element.validity.valid && !nextState.valid) { nextState.valid = true; } } } const nextValidityData = { value, state: nextState, error: defaultValidationMessage ?? (Array.isArray(result) ? result[0] : result ?? ""), errors: validationErrors, initialValue: validityData.initialValue }; updateRegisteredFieldValidity(nextValidityData); setValidityData(nextValidityData); }); const getValidationProps = React93.useCallback((externalProps = {}) => mergeProps(getDescriptionProps, state.valid === false ? { "aria-invalid": true } : EMPTY_OBJECT, externalProps), [getDescriptionProps, state.valid]); const getInputValidationProps = React93.useCallback((externalProps = {}) => mergeProps({ onChange(event) { if (event.nativeEvent.defaultPrevented) { return; } clearErrors(name); if (!shouldValidateOnChange()) { commit(event.currentTarget.value, true); return; } const element = event.currentTarget; if (element.value === "") { commit(element.value); return; } timeout.clear(); if (validationDebounceTime) { timeout.start(validationDebounceTime, () => { commit(element.value); }); } else { commit(element.value); } } }, getValidationProps(externalProps)), [getValidationProps, clearErrors, name, timeout, commit, validationDebounceTime, shouldValidateOnChange]); return React93.useMemo(() => ({ getValidationProps, getInputValidationProps, inputRef, commit }), [getValidationProps, getInputValidationProps, commit]); } // node_modules/@base-ui/react/esm/internals/field-register-control/useFieldControlRegistration.js var React94 = __toESM(require_react(), 1); function useFieldControlRegistration(params) { const { commit, invalid, markedDirtyRef, name, setRegisteredFieldId, setValidityData, validityData } = params; const { formRef } = useFormContext(); const activeFieldControlSourceRef = React94.useRef(null); const registrationRef = React94.useRef(null); const fallbackControlRef = React94.useRef(null); const getValueForForm = useStableCallback(() => { const registration = registrationRef.current; if (!registration) { return void 0; } if (registration.getValue) { return registration.getValue(); } return registration.value; }); const validate = useStableCallback(() => { const registration = registrationRef.current; if (!registration) { return; } let nextValue = registration.value; if (nextValue === void 0) { nextValue = getValueForForm(); } markedDirtyRef.current = true; commit(nextValue); }); function refreshRegistration() { const registration = registrationRef.current; if (!registration || !registration.id) { return; } formRef.current.fields.set(registration.id, { getValue: getValueForForm, name, controlRef: registration.controlRef ?? fallbackControlRef, validityData: getCombinedFieldValidityData(validityData, invalid), validate }); } function deleteRegistration(id = registrationRef.current?.id) { if (id) { formRef.current.fields.delete(id); } } function syncInitialValue() { const registration = registrationRef.current; if (!registration) { return; } let initialValue = registration.value; if (initialValue === void 0) { initialValue = getValueForForm(); } if (validityData.initialValue === null && initialValue !== null) { setValidityData((prev) => ({ ...prev, initialValue })); } } useIsoLayoutEffect(() => { const registration = registrationRef.current; if (!registration || !registration.id) { return; } formRef.current.fields.set(registration.id, { getValue: getValueForForm, name, controlRef: registration.controlRef ?? fallbackControlRef, validityData: getCombinedFieldValidityData(validityData, invalid), validate }); }, [formRef, getValueForForm, invalid, name, validate, validityData]); useIsoLayoutEffect(() => { const fields = formRef.current.fields; return () => { const id = registrationRef.current?.id; if (id) { fields.delete(id); } }; }, [formRef]); return useStableCallback((source, registration) => { if (!registration) { if (activeFieldControlSourceRef.current === source) { activeFieldControlSourceRef.current = null; deleteRegistration(); registrationRef.current = null; setRegisteredFieldId(void 0); } return; } const previousId = registrationRef.current?.id; activeFieldControlSourceRef.current = source; registrationRef.current = registration; setRegisteredFieldId(registration.id); if (previousId && previousId !== registration.id) { deleteRegistration(previousId); } syncInitialValue(); refreshRegistration(); }); } // node_modules/@base-ui/react/esm/field/root/FieldRoot.js var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); var FieldRootInner = /* @__PURE__ */ React95.forwardRef(function FieldRootInner2(componentProps, forwardedRef) { const { errors, validationMode: formValidationMode, submitAttemptedRef } = useFormContext(); const { render: render4, className, validate: validateProp, validationDebounceTime = 0, validationMode = formValidationMode, name, disabled: disabledProp = false, invalid: invalidProp, dirty: dirtyProp, touched: touchedProp, actionsRef, style, ...elementProps } = componentProps; const { disabled: disabledFieldset } = useFieldsetRootContext(); const validate = useStableCallback(validateProp || (() => null)); const disabled2 = disabledFieldset || disabledProp; const [touchedState, setTouchedUnwrapped] = React95.useState(false); const [dirtyState, setDirtyUnwrapped] = React95.useState(false); const [filled, setFilled] = React95.useState(false); const [focused, setFocused] = React95.useState(false); const dirty = dirtyProp ?? dirtyState; const touched = touchedProp ?? touchedState; const markedDirtyRef = React95.useRef(false); const registeredFieldIdRef = React95.useRef(void 0); const getRegisteredFieldId = React95.useCallback(() => registeredFieldIdRef.current, []); const setRegisteredFieldId = React95.useCallback((id) => { registeredFieldIdRef.current = id; }, []); const setDirty = useStableCallback((value) => { if (dirtyProp !== void 0) { return; } if (value) { markedDirtyRef.current = true; } setDirtyUnwrapped(value); }); const setTouched = useStableCallback((value) => { if (touchedProp !== void 0) { return; } setTouchedUnwrapped(value); }); const shouldValidateOnChange = useStableCallback(() => validationMode === "onChange" || validationMode === "onSubmit" && submitAttemptedRef.current); const hasFormError = !!name && Object.hasOwn(errors, name) && errors[name] !== void 0; const invalid = invalidProp === true || hasFormError; const [validityData, setValidityData] = React95.useState({ state: DEFAULT_VALIDITY_STATE, error: "", errors: [], value: null, initialValue: null }); const valid = !invalid && validityData.state.valid; const state = React95.useMemo(() => ({ disabled: disabled2, touched, dirty, valid, filled, focused }), [disabled2, touched, dirty, valid, filled, focused]); const validation = useFieldValidation({ setValidityData, validate, validityData, validationDebounceTime, invalid, markedDirtyRef, state, name, shouldValidateOnChange, getRegisteredFieldId }); const validityValue = validityData.value; const handleImperativeValidate = React95.useCallback(() => { markedDirtyRef.current = true; validation.commit(validityValue); }, [validation, validityValue]); const registerFieldControl = useFieldControlRegistration({ commit: validation.commit, invalid, markedDirtyRef, name, setRegisteredFieldId, setValidityData, validityData }); React95.useImperativeHandle(actionsRef, () => ({ validate: handleImperativeValidate }), [handleImperativeValidate]); const contextValue = React95.useMemo(() => ({ invalid, name, validityData, setValidityData, disabled: disabled2, touched, setTouched, dirty, setDirty, filled, setFilled, focused, setFocused, validate, validationMode, validationDebounceTime, shouldValidateOnChange, state, markedDirtyRef, registerFieldControl, validation }), [invalid, name, validityData, disabled2, touched, setTouched, dirty, setDirty, filled, setFilled, focused, setFocused, validate, validationMode, validationDebounceTime, shouldValidateOnChange, state, registerFieldControl, validation]); const element = useRenderElement("div", componentProps, { ref: forwardedRef, state, props: elementProps, stateAttributesMapping: fieldValidityMapping }); return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(FieldRootContext.Provider, { value: contextValue, children: element }); }); if (true) FieldRootInner.displayName = "FieldRootInner"; var FieldRoot = /* @__PURE__ */ React95.forwardRef(function FieldRoot2(componentProps, forwardedRef) { return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(LabelableProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(FieldRootInner, { ...componentProps, ref: forwardedRef }) }); }); if (true) FieldRoot.displayName = "FieldRoot"; // node_modules/@base-ui/react/esm/field/label/FieldLabel.js var React96 = __toESM(require_react(), 1); var FieldLabel = /* @__PURE__ */ React96.forwardRef(function FieldLabel2(componentProps, forwardedRef) { const { render: render4, className, style, id: idProp, nativeLabel = true, ...elementProps } = componentProps; const fieldRootContext = useFieldRootContext(false); const { labelId } = useLabelableContext(); const labelRef = React96.useRef(null); const labelProps = useLabel({ id: labelId ?? idProp, native: nativeLabel }); if (true) { React96.useEffect(() => { if (!labelRef.current) { return; } const isLabelTag = labelRef.current.tagName === "LABEL"; if (nativeLabel) { if (!isLabelTag) { const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; const message2 = "<Field.Label> expected a <label> element because the `nativeLabel` prop is true. Rendering a non-<label> disables native label association, so `htmlFor` will not work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`."; error(`${message2}${ownerStackMessage}`); } } else if (isLabelTag) { const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; const message2 = "<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. Rendering a <label> assumes native label behavior while Base UI treats it as non-native, which can cause unexpected pointer behavior. Use a non-<label> in the `render` prop, or set `nativeLabel` to `true`."; error(`${message2}${ownerStackMessage}`); } }, [nativeLabel]); } const element = useRenderElement("label", componentProps, { ref: [forwardedRef, labelRef], state: fieldRootContext.state, props: [labelProps, elementProps], stateAttributesMapping: fieldValidityMapping }); return element; }); if (true) FieldLabel.displayName = "FieldLabel"; // node_modules/@base-ui/react/esm/field/error/FieldError.js var React97 = __toESM(require_react(), 1); var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); var stateAttributesMapping4 = { ...fieldValidityMapping, ...transitionStatusMapping }; var FieldError = /* @__PURE__ */ React97.forwardRef(function FieldError2(componentProps, forwardedRef) { const { render: render4, id: idProp, className, match: match2, style, ...elementProps } = componentProps; const id = useBaseUiId(idProp); const { validityData, state: fieldState, name } = useFieldRootContext(false); const { setMessageIds } = useLabelableContext(); const { errors } = useFormContext(); const formError = name ? errors[name] : null; const hasSpecificMatch = typeof match2 === "string"; let rendered = false; if (match2 === true) { rendered = true; } else if (hasSpecificMatch) { rendered = Boolean(validityData.state[match2]); } else { rendered = Boolean(formError) || validityData.state.valid === false; } const { mounted, transitionStatus, setMounted } = useTransitionStatus(rendered); useIsoLayoutEffect(() => { if (!rendered || !id) { return void 0; } setMessageIds((v2) => v2.concat(id)); return () => { setMessageIds((v2) => v2.filter((item) => item !== id)); }; }, [rendered, id, setMessageIds]); const errorRef = React97.useRef(null); const [lastRenderedMessage, setLastRenderedMessage] = React97.useState(null); const [lastRenderedMessageKey, setLastRenderedMessageKey] = React97.useState(null); const clientErrorMessage = validityData.errors.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("ul", { children: validityData.errors.map((message2) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("li", { children: message2 }, message2)) }) : validityData.error; const errorMessage = hasSpecificMatch ? clientErrorMessage : formError || clientErrorMessage; let errorKey = validityData.error; if (formError != null) { errorKey = Array.isArray(formError) ? JSON.stringify(formError) : formError; } else if (validityData.errors.length > 1) { errorKey = JSON.stringify(validityData.errors); } if (rendered && errorKey !== lastRenderedMessageKey) { setLastRenderedMessageKey(errorKey); setLastRenderedMessage(errorMessage); } useOpenChangeComplete({ open: rendered, ref: errorRef, onComplete() { if (!rendered) { setMounted(false); } } }); const state = { ...fieldState, transitionStatus }; const element = useRenderElement("div", componentProps, { ref: [forwardedRef, errorRef], state, props: [{ id, children: rendered ? errorMessage : lastRenderedMessage }, elementProps], stateAttributesMapping: stateAttributesMapping4, enabled: mounted }); if (!mounted) { return null; } return element; }); if (true) FieldError.displayName = "FieldError"; // node_modules/@base-ui/react/esm/field/description/FieldDescription.js var React98 = __toESM(require_react(), 1); var FieldDescription = /* @__PURE__ */ React98.forwardRef(function FieldDescription2(componentProps, forwardedRef) { const { render: render4, id: idProp, className, style, ...elementProps } = componentProps; const id = useBaseUiId(idProp); const fieldRootContext = useFieldRootContext(false); const { setMessageIds } = useLabelableContext(); useIsoLayoutEffect(() => { if (!id) { return void 0; } setMessageIds((v2) => v2.concat(id)); return () => { setMessageIds((v2) => v2.filter((item) => item !== id)); }; }, [id, setMessageIds]); const element = useRenderElement("p", componentProps, { ref: forwardedRef, state: fieldRootContext.state, props: [{ id }, elementProps], stateAttributesMapping: fieldValidityMapping }); return element; }); if (true) FieldDescription.displayName = "FieldDescription"; // node_modules/@base-ui/react/esm/field/control/FieldControl.js var React99 = __toESM(require_react(), 1); var FieldControl = /* @__PURE__ */ React99.forwardRef(function FieldControl2(componentProps, forwardedRef) { const { render: render4, className, id: idProp, name: nameProp, value: valueProp, disabled: disabledProp = false, onValueChange, defaultValue: defaultValue2, autoFocus = false, style, ...elementProps } = componentProps; const { state: fieldState, name: fieldName, disabled: fieldDisabled, setTouched, setDirty, validityData, setFocused, setFilled, validationMode, validation } = useFieldRootContext(); const disabled2 = fieldDisabled || disabledProp; const name = fieldName ?? nameProp; const state = { ...fieldState, disabled: disabled2 }; const { labelId } = useLabelableContext(); const id = useLabelableId({ id: idProp }); useIsoLayoutEffect(() => { const hasExternalValue = valueProp != null; if (validation.inputRef.current?.value || hasExternalValue && valueProp !== "") { setFilled(true); } else if (hasExternalValue && valueProp === "") { setFilled(false); } }, [validation.inputRef, setFilled, valueProp]); const inputRef = React99.useRef(null); useIsoLayoutEffect(() => { if (autoFocus && inputRef.current === activeElement(ownerDocument(inputRef.current))) { setFocused(true); } }, [autoFocus, setFocused]); const [valueUnwrapped] = useControlled({ controlled: valueProp, default: defaultValue2, name: "FieldControl", state: "value" }); const isControlled = valueProp !== void 0; const value = isControlled ? valueUnwrapped : void 0; const getValueFromInput = useStableCallback(() => validation.inputRef.current?.value); useRegisterFieldControl(validation.inputRef, id, value, getValueFromInput); const element = useRenderElement("input", componentProps, { ref: [forwardedRef, inputRef], state, props: [{ id, disabled: disabled2, name, ref: validation.inputRef, "aria-labelledby": labelId, autoFocus, ...isControlled ? { value } : { defaultValue: defaultValue2 }, onChange(event) { const inputValue = event.currentTarget.value; onValueChange?.(inputValue, createChangeEventDetails(reason_parts_exports.none, event.nativeEvent)); setDirty(inputValue !== validityData.initialValue); setFilled(inputValue !== ""); }, onFocus() { setFocused(true); }, onBlur(event) { setTouched(true); setFocused(false); if (validationMode === "onBlur") { validation.commit(event.currentTarget.value); } }, onKeyDown(event) { if (event.currentTarget.tagName === "INPUT" && event.key === "Enter") { setTouched(true); validation.commit(event.currentTarget.value); } } }, validation.getInputValidationProps(), elementProps], stateAttributesMapping: fieldValidityMapping }); return element; }); if (true) FieldControl.displayName = "FieldControl"; // node_modules/@base-ui/react/esm/field/validity/FieldValidity.js var React100 = __toESM(require_react(), 1); var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); var FieldValidity = function FieldValidity2(props) { const { children } = props; const { validityData, invalid } = useFieldRootContext(false); const combinedFieldValidityData = React100.useMemo(() => getCombinedFieldValidityData(validityData, invalid), [validityData, invalid]); const isInvalid = combinedFieldValidityData.state.valid === false; const { transitionStatus } = useTransitionStatus(isInvalid); const fieldValidityState = React100.useMemo(() => { return { ...combinedFieldValidityData, validity: combinedFieldValidityData.state, transitionStatus }; }, [combinedFieldValidityData, transitionStatus]); return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(React100.Fragment, { children: children(fieldValidityState) }); }; if (true) FieldValidity.displayName = "FieldValidity"; // node_modules/@base-ui/react/esm/field/item/FieldItem.js var React101 = __toESM(require_react(), 1); var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); var FieldItem = /* @__PURE__ */ React101.forwardRef(function FieldItem2(componentProps, forwardedRef) { const { render: render4, className, style, disabled: disabledProp = false, ...elementProps } = componentProps; const { state, disabled: rootDisabled } = useFieldRootContext(false); const disabled2 = rootDisabled || disabledProp; const checkboxGroupContext = useCheckboxGroupContext(); const hasParentCheckbox = checkboxGroupContext?.allValues !== void 0; const controlId = hasParentCheckbox ? checkboxGroupContext?.parent.id : void 0; const fieldItemContext = React101.useMemo(() => ({ disabled: disabled2 }), [disabled2]); const element = useRenderElement("div", componentProps, { ref: forwardedRef, state, props: elementProps, stateAttributesMapping: fieldValidityMapping }); return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LabelableProvider, { controlId, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(FieldItemContext.Provider, { value: fieldItemContext, children: element }) }); }); if (true) FieldItem.displayName = "FieldItem"; // node_modules/@base-ui/react/esm/input/Input.js var React102 = __toESM(require_react(), 1); var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); var Input = /* @__PURE__ */ React102.forwardRef(function Input2(props, forwardedRef) { return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(index_parts_exports2.Control, { ref: forwardedRef, ...props }); }); if (true) Input.displayName = "Input"; // node_modules/@base-ui/react/esm/utils/FloatingPortalLite.js var React103 = __toESM(require_react(), 1); var ReactDOM7 = __toESM(require_react_dom(), 1); var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); var FloatingPortalLite = /* @__PURE__ */ React103.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { const { children, container, className, render: render4, style, ...elementProps } = componentProps; const { portalNode, portalSubtree } = useFloatingPortalNode({ container, ref: forwardedRef, componentProps, elementProps }); if (!portalSubtree && !portalNode) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(React103.Fragment, { children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)] }); }); if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; // node_modules/@base-ui/react/esm/tooltip/index.parts.js var index_parts_exports3 = {}; __export(index_parts_exports3, { Arrow: () => TooltipArrow, Handle: () => TooltipHandle, Popup: () => TooltipPopup, Portal: () => TooltipPortal, Positioner: () => TooltipPositioner, Provider: () => TooltipProvider, Root: () => TooltipRoot, Trigger: () => TooltipTrigger, Viewport: () => TooltipViewport, createHandle: () => createTooltipHandle }); // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js var React106 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/tooltip/root/TooltipRootContext.js var React104 = __toESM(require_react(), 1); var TooltipRootContext = /* @__PURE__ */ React104.createContext(void 0); if (true) TooltipRootContext.displayName = "TooltipRootContext"; function useTooltipRootContext(optional) { const context = React104.useContext(TooltipRootContext); if (context === void 0 && !optional) { throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); } return context; } // node_modules/@base-ui/react/esm/tooltip/store/TooltipStore.js var React105 = __toESM(require_react(), 1); var ReactDOM8 = __toESM(require_react_dom(), 1); var selectors3 = { ...popupStoreSelectors, disabled: createSelector((state) => state.disabled), instantType: createSelector((state) => state.instantType), isInstantPhase: createSelector((state) => state.isInstantPhase), trackCursorAxis: createSelector((state) => state.trackCursorAxis), disableHoverablePopup: createSelector((state) => state.disableHoverablePopup), lastOpenChangeReason: createSelector((state) => state.openChangeReason), closeOnClick: createSelector((state) => state.closeOnClick), closeDelay: createSelector((state) => state.closeDelay), hasViewport: createSelector((state) => state.hasViewport) }; var TooltipStore = class _TooltipStore extends ReactStore { constructor(initialState, floatingId, nested = false) { const triggerElements = new PopupTriggerMap(); const state = { ...createInitialState(), ...initialState }; state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested); super(state, { popupRef: /* @__PURE__ */ React105.createRef(), onOpenChange: void 0, onOpenChangeComplete: void 0, triggerElements }, selectors3); } setOpen = (nextOpen, eventDetails) => { const reason = eventDetails.reason; const isHover = reason === reason_parts_exports.triggerHover; const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); eventDetails.preventUnmountOnClose = () => { this.set("preventUnmountingOnClose", true); }; this.context.onOpenChange?.(nextOpen, eventDetails); if (eventDetails.isCanceled) { return; } this.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); const changeState = () => { const updatedState = { open: nextOpen, openChangeReason: reason }; if (isFocusOpen) { updatedState.instantType = "focus"; } else if (isDismissClose) { updatedState.instantType = "dismiss"; } else if (reason === reason_parts_exports.triggerHover) { updatedState.instantType = void 0; } setOpenTriggerState(updatedState, nextOpen, eventDetails.trigger); this.update(updatedState); }; if (isHover) { ReactDOM8.flushSync(changeState); } else { changeState(); } }; // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. cancelPendingOpen(event) { this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); } static useStore(externalStore, initialState) { const store = usePopupStore(externalStore, (floatingId, nested) => new _TooltipStore(initialState, floatingId, nested)).store; return store; } }; function createInitialState() { return { ...createInitialPopupStoreState(), disabled: false, instantType: void 0, isInstantPhase: false, trackCursorAxis: "none", disableHoverablePopup: false, openChangeReason: null, closeOnClick: true, closeDelay: 0, hasViewport: false }; } // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); var TooltipRoot = fastComponent(function TooltipRoot2(props) { const { disabled: disabled2 = false, defaultOpen = false, open: openProp, disableHoverablePopup = false, trackCursorAxis = "none", actionsRef, onOpenChange, onOpenChangeComplete, handle, triggerId: triggerIdProp, defaultTriggerId: defaultTriggerIdProp = null, children } = props; const store = TooltipStore.useStore(handle?.store, { open: defaultOpen, openProp, activeTriggerId: defaultTriggerIdProp, triggerIdProp }); useOnFirstRender(() => { if (openProp === void 0 && store.state.open === false && defaultOpen === true) { store.update({ open: true, activeTriggerId: defaultTriggerIdProp }); } }); store.useControlledProp("openProp", openProp); store.useControlledProp("triggerIdProp", triggerIdProp); store.useContextCallback("onOpenChange", onOpenChange); store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); const openState = store.useState("open"); const open = !disabled2 && openState; const activeTriggerId = store.useState("activeTriggerId"); const mounted = store.useState("mounted"); const payload = store.useState("payload"); store.useSyncedValues({ trackCursorAxis, disableHoverablePopup }); store.useSyncedValue("disabled", disabled2); useImplicitActiveTrigger(store); const { forceUnmount, transitionStatus } = useOpenStateTransitions(open, store); const isInstantPhase = store.useState("isInstantPhase"); const instantType = store.useState("instantType"); const lastOpenChangeReason = store.useState("lastOpenChangeReason"); const previousInstantTypeRef = React106.useRef(null); useIsoLayoutEffect(() => { if (openState && disabled2) { store.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); } }, [openState, disabled2, store]); useIsoLayoutEffect(() => { if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { if (instantType !== "delay") { previousInstantTypeRef.current = instantType; } store.set("instantType", "delay"); } else if (previousInstantTypeRef.current !== null) { store.set("instantType", previousInstantTypeRef.current); previousInstantTypeRef.current = null; } }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store]); useIsoLayoutEffect(() => { if (open) { if (activeTriggerId == null) { store.set("payload", void 0); } } }, [store, activeTriggerId, open]); const handleImperativeClose = React106.useCallback(() => { store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); }, [store]); React106.useImperativeHandle(actionsRef, () => ({ unmount: forceUnmount, close: handleImperativeClose }), [forceUnmount, handleImperativeClose]); const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none"; return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(TooltipRootContext.Provider, { value: store, children: [shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(TooltipInteractions, { store, disabled: disabled2, trackCursorAxis }), typeof children === "function" ? children({ payload }) : children] }); }); if (true) TooltipRoot.displayName = "TooltipRoot"; function TooltipInteractions({ store, disabled: disabled2, trackCursorAxis }) { const floatingRootContext = store.useState("floatingRootContext"); const dismiss = useDismiss(floatingRootContext, { enabled: !disabled2, referencePress: () => store.select("closeOnClick") }); const clientPoint = useClientPoint(floatingRootContext, { enabled: !disabled2 && trackCursorAxis !== "none", axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis }); const activeTriggerProps = React106.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); const inactiveTriggerProps = React106.useMemo(() => mergeProps(clientPoint.trigger, dismiss.trigger), [clientPoint.trigger, dismiss.trigger]); const popupProps = React106.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, clientPoint.floating, dismiss.floating), [clientPoint.floating, dismiss.floating]); usePopupInteractionProps(store, { activeTriggerProps, inactiveTriggerProps, popupProps }); return null; } // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js var React108 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProviderContext.js var React107 = __toESM(require_react(), 1); var TooltipProviderContext = /* @__PURE__ */ React107.createContext(void 0); if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; function useTooltipProviderContext() { return React107.useContext(TooltipProviderContext); } // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTriggerDataAttributes.js var TooltipTriggerDataAttributes = (function(TooltipTriggerDataAttributes2) { TooltipTriggerDataAttributes2[TooltipTriggerDataAttributes2["popupOpen"] = CommonTriggerDataAttributes.popupOpen] = "popupOpen"; TooltipTriggerDataAttributes2["triggerDisabled"] = "data-trigger-disabled"; return TooltipTriggerDataAttributes2; })({}); // node_modules/@base-ui/react/esm/tooltip/utils/constants.js var OPEN_DELAY = 600; // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; function getTargetElement(event) { if ("composedPath" in event) { const path = event.composedPath(); for (let i2 = 0; i2 < path.length; i2 += 1) { const element = path[i2]; if (isElement(element)) { return element; } } } const target = event.target; if (isElement(target)) { return target; } return null; } function closestEnabledTooltipTrigger(element) { let current = element; while (current) { if (current.hasAttribute(TOOLTIP_TRIGGER_IDENTIFIER)) { return current; } const parentElement = current.parentElement; if (parentElement) { current = parentElement; continue; } const root = current.getRootNode(); current = "host" in root && isElement(root.host) ? root.host : null; } return null; } var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { const { render: render4, className, style, handle, payload, disabled: disabledProp, delay, closeOnClick = true, closeDelay, id: idProp, ...elementProps } = componentProps; const rootContext = useTooltipRootContext(true); const store = handle?.store ?? rootContext; if (!store) { throw new Error(true ? "Base UI: <Tooltip.Trigger> must be either used within a <Tooltip.Root> component or provided with a handle." : formatErrorMessage_default(82)); } const thisTriggerId = useBaseUiId(idProp); const isTriggerActive = store.useState("isTriggerActive", thisTriggerId); const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId); const floatingRootContext = store.useState("floatingRootContext"); const triggerElementRef = React108.useRef(null); const delayWithDefault = delay ?? OPEN_DELAY; const closeDelayWithDefault = closeDelay ?? 0; const { registerTrigger, isMountedByThisTrigger } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, { payload, closeOnClick, closeDelay: closeDelayWithDefault }); const providerContext = useTooltipProviderContext(); const { delayRef, isInstantPhase, hasProvider } = useDelayGroup(floatingRootContext, { open: isOpenedByThisTrigger }); const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); store.useSyncedValue("isInstantPhase", isInstantPhase); const rootDisabled = store.useState("disabled"); const disabled2 = disabledProp ?? rootDisabled; const disabledRef = useValueAsRef(disabled2); const trackCursorAxis = store.useState("trackCursorAxis"); const disableHoverablePopup = store.useState("disableHoverablePopup"); const isNestedTriggerHoveredRef = React108.useRef(false); const nestedTriggerOpenTimeout = useTimeout(); const pointerTypeRef = React108.useRef(void 0); function getOpenDelay() { const providerDelay = providerContext?.delay; const groupOpenValue = typeof delayRef.current === "object" ? delayRef.current.open : void 0; let computedOpenDelay = delayWithDefault; if (hasProvider) { if (groupOpenValue !== 0) { computedOpenDelay = delay ?? providerDelay ?? delayWithDefault; } else { computedOpenDelay = 0; } } return computedOpenDelay; } function isEnabledNestedTriggerTarget(target) { const triggerEl = triggerElementRef.current; if (!triggerEl || !target) { return false; } const nearestTrigger = closestEnabledTooltipTrigger(target); return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); } function detectNestedTriggerHover(target) { const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); isNestedTriggerHoveredRef.current = nestedTriggerHovered; if (nestedTriggerHovered) { hoverInteraction.openChangeTimeout.clear(); hoverInteraction.restTimeout.clear(); hoverInteraction.restTimeoutPending = false; nestedTriggerOpenTimeout.clear(); } return nestedTriggerHovered; } const hoverProps = useHoverReferenceInteraction(floatingRootContext, { enabled: !disabled2, mouseOnly: true, move: false, handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, restMs: getOpenDelay, delay() { const closeValue = typeof delayRef.current === "object" ? delayRef.current.close : void 0; let computedCloseDelay = closeDelayWithDefault; if (closeDelay == null && hasProvider) { computedCloseDelay = closeValue; } return { close: computedCloseDelay }; }, triggerElementRef, isActiveTrigger: isTriggerActive, isClosing: () => store.select("transitionStatus") === "ending", shouldOpen() { return !isNestedTriggerHoveredRef.current; } }); const focusProps = useFocus(floatingRootContext, { enabled: !disabled2 }).reference; const handleNestedTriggerHover = (event) => { const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; const target = getTargetElement(event); const nestedTriggerHovered = detectNestedTriggerHover(target); const triggerEl = triggerElementRef.current; const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); if (nestedTriggerHovered && store.select("open") && store.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); return; } if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. isMouseLikePointerType(pointerTypeRef.current)) { const open = () => { if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store.select("open")) { store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); } }; const openDelay = getOpenDelay(); if (openDelay === 0) { nestedTriggerOpenTimeout.clear(); open(); } else { nestedTriggerOpenTimeout.start(openDelay, open); } } }; const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger); const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none"; const state = { open: isOpenedByThisTrigger }; const element = useRenderElement("button", componentProps, { state, ref: [forwardedRef, registerTrigger, triggerElementRef], props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, { onMouseOver(event) { handleNestedTriggerHover(event.nativeEvent); }, onFocus(event) { if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { event.preventBaseUIHandler(); } }, onMouseLeave() { isNestedTriggerHoveredRef.current = false; nestedTriggerOpenTimeout.clear(); pointerTypeRef.current = void 0; }, onPointerEnter(event) { pointerTypeRef.current = event.pointerType; }, onPointerDown(event) { pointerTypeRef.current = event.pointerType; store.set("closeOnClick", closeOnClick); if (closeOnClick && !store.select("open")) { store.cancelPendingOpen(event.nativeEvent); } }, onClick(event) { if (closeOnClick && !store.select("open")) { store.cancelPendingOpen(event.nativeEvent); } }, id: thisTriggerId, [TooltipTriggerDataAttributes.triggerDisabled]: disabled2 ? "" : void 0, [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" }, elementProps], stateAttributesMapping: triggerOpenStateMapping }); return element; }); if (true) TooltipTrigger.displayName = "TooltipTrigger"; // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js var React110 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortalContext.js var React109 = __toESM(require_react(), 1); var TooltipPortalContext = /* @__PURE__ */ React109.createContext(void 0); if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; function useTooltipPortalContext() { const value = React109.useContext(TooltipPortalContext); if (value === void 0) { throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); } return value; } // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); var TooltipPortal = /* @__PURE__ */ React110.forwardRef(function TooltipPortal2(props, forwardedRef) { const { keepMounted = false, ...portalProps } = props; const store = useTooltipRootContext(); const mounted = store.useState("mounted"); const shouldRender = mounted || keepMounted; if (!shouldRender) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(TooltipPortalContext.Provider, { value: keepMounted, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(FloatingPortalLite, { ref: forwardedRef, ...portalProps }) }); }); if (true) TooltipPortal.displayName = "TooltipPortal"; // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js var React112 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositionerContext.js var React111 = __toESM(require_react(), 1); var TooltipPositionerContext = /* @__PURE__ */ React111.createContext(void 0); if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; function useTooltipPositionerContext() { const context = React111.useContext(TooltipPositionerContext); if (context === void 0) { throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); } return context; } // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); var TooltipPositioner = /* @__PURE__ */ React112.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { const { render: render4, className, anchor, positionMethod = "absolute", side = "top", align = "center", sideOffset = 0, alignOffset = 0, collisionBoundary = "clipping-ancestors", collisionPadding = 5, arrowPadding = 5, sticky = false, disableAnchorTracking = false, collisionAvoidance = POPUP_COLLISION_AVOIDANCE, style, ...elementProps } = componentProps; const store = useTooltipRootContext(); const keepMounted = useTooltipPortalContext(); const open = store.useState("open"); const mounted = store.useState("mounted"); const trackCursorAxis = store.useState("trackCursorAxis"); const disableHoverablePopup = store.useState("disableHoverablePopup"); const floatingRootContext = store.useState("floatingRootContext"); const instantType = store.useState("instantType"); const transitionStatus = store.useState("transitionStatus"); const hasViewport = store.useState("hasViewport"); const positioning = useAnchorPositioning({ anchor, positionMethod, floatingRootContext, mounted, side, sideOffset, align, alignOffset, collisionBoundary, collisionPadding, sticky, arrowPadding, disableAnchorTracking, keepMounted, collisionAvoidance, adaptiveOrigin: hasViewport ? adaptiveOrigin : void 0 }); const state = React112.useMemo(() => ({ open, side: positioning.side, align: positioning.align, anchorHidden: positioning.anchorHidden, instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); const element = usePositioner(componentProps, state, { styles: positioning.positionerStyles, transitionStatus, props: elementProps, refs: [forwardedRef, store.useStateSetter("positionerElement")], hidden: !mounted, inert: !open || trackCursorAxis === "both" || disableHoverablePopup }); return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(TooltipPositionerContext.Provider, { value: positioning, children: element }); }); if (true) TooltipPositioner.displayName = "TooltipPositioner"; // node_modules/@base-ui/react/esm/tooltip/popup/TooltipPopup.js var React113 = __toESM(require_react(), 1); var stateAttributesMapping5 = { ...popupStateMapping, ...transitionStatusMapping }; var TooltipPopup = /* @__PURE__ */ React113.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const store = useTooltipRootContext(); const { side, align } = useTooltipPositionerContext(); const open = store.useState("open"); const instantType = store.useState("instantType"); const transitionStatus = store.useState("transitionStatus"); const popupProps = store.useState("popupProps"); const floatingContext = store.useState("floatingRootContext"); const disabled2 = store.useState("disabled"); const closeDelay = store.useState("closeDelay"); useOpenChangeComplete({ open, ref: store.context.popupRef, onComplete() { if (open) { store.context.onOpenChangeComplete?.(true); } } }); useHoverFloatingInteraction(floatingContext, { enabled: !disabled2, closeDelay }); const setPopupElement = store.useStateSetter("popupElement"); const state = { open, side, align, instant: instantType, transitionStatus }; const element = useRenderElement("div", componentProps, { state, ref: [forwardedRef, store.context.popupRef, setPopupElement], props: [popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], stateAttributesMapping: stateAttributesMapping5 }); return element; }); if (true) TooltipPopup.displayName = "TooltipPopup"; // node_modules/@base-ui/react/esm/tooltip/arrow/TooltipArrow.js var React114 = __toESM(require_react(), 1); var TooltipArrow = /* @__PURE__ */ React114.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { const { render: render4, className, style, ...elementProps } = componentProps; const store = useTooltipRootContext(); const { arrowRef, side, align, arrowUncentered, arrowStyles } = useTooltipPositionerContext(); const open = store.useState("open"); const instantType = store.useState("instantType"); const state = { open, side, align, uncentered: arrowUncentered, instant: instantType }; const element = useRenderElement("div", componentProps, { state, ref: [forwardedRef, arrowRef], props: [{ style: arrowStyles, "aria-hidden": true }, elementProps], stateAttributesMapping: popupStateMapping }); return element; }); if (true) TooltipArrow.displayName = "TooltipArrow"; // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProvider.js var React115 = __toESM(require_react(), 1); var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); var TooltipProvider = function TooltipProvider2(props) { const { delay, closeDelay, timeout = 400 } = props; const contextValue = React115.useMemo(() => ({ delay, closeDelay }), [delay, closeDelay]); const delayValue = React115.useMemo(() => ({ open: delay, close: closeDelay }), [delay, closeDelay]); return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipProviderContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(FloatingDelayGroup, { delay: delayValue, timeoutMs: timeout, children: props.children }) }); }; if (true) TooltipProvider.displayName = "TooltipProvider"; // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js var React116 = __toESM(require_react(), 1); // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewportCssVars.js var TooltipViewportCssVars = /* @__PURE__ */ (function(TooltipViewportCssVars2) { TooltipViewportCssVars2["popupWidth"] = "--popup-width"; TooltipViewportCssVars2["popupHeight"] = "--popup-height"; return TooltipViewportCssVars2; })({}); // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js var stateAttributesMapping6 = { activationDirection: (value) => value ? { "data-activation-direction": value } : null }; var TooltipViewport = /* @__PURE__ */ React116.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { const { render: render4, className, style, children, ...elementProps } = componentProps; const store = useTooltipRootContext(); const positioner = useTooltipPositionerContext(); const instantType = store.useState("instantType"); const { children: childrenToRender, state: viewportState } = usePopupViewport({ store, side: positioner.side, cssVars: TooltipViewportCssVars, children }); const state = { activationDirection: viewportState.activationDirection, transitioning: viewportState.transitioning, instant: instantType }; return useRenderElement("div", componentProps, { state, ref: forwardedRef, props: [elementProps, { children: childrenToRender }], stateAttributesMapping: stateAttributesMapping6 }); }); if (true) TooltipViewport.displayName = "TooltipViewport"; // node_modules/@base-ui/react/esm/tooltip/store/TooltipHandle.js var TooltipHandle = class { /** * Internal store holding the tooltip state. * @internal */ constructor() { this.store = new TooltipStore(); } /** * Opens the tooltip and associates it with the trigger with the given ID. * The trigger must be a Tooltip.Trigger component with this handle passed as a prop. * * This method should only be called in an event handler or an effect (not during rendering). * * @param triggerId ID of the trigger to associate with the tooltip. */ open(triggerId) { const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0; if (triggerId && !triggerElement) { throw new Error(true ? `Base UI: TooltipHandle.open: No trigger found with id "${triggerId}".` : formatErrorMessage_default(81, triggerId)); } this.store.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); } /** * Closes the tooltip. */ close() { this.store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, void 0)); } /** * Indicates whether the tooltip is currently open. */ get isOpen() { return this.store.select("open"); } }; function createTooltipHandle() { return new TooltipHandle(); } // node_modules/@base-ui/react/esm/use-render/useRender.js function useRender(params) { return useRenderElement(params.defaultTagName ?? "div", params, params); } // packages/ui/build-module/text/text.mjs var import_element16 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; function getRuntime() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { return true; } } return false; } function injectStyle(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument(targetDocument) { const runtime = getRuntime(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle(hash, css) { const runtime = getRuntime(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle("0c5702ddca", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._83ed8a8da5dd50ea__text{margin:0}._14437cfb77831647__heading-2xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-medium,499);--_gcd-p-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-p-line-height:var(--wpds-typography-line-height-2xl,40px);font-size:var(--wpds-typography-font-size-2xl,32px);line-height:var(--wpds-typography-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-medium,499)}._3c78b7fa9b4072dd__heading-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-medium,499);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-md,24px)}.aa58f227716bcde2__heading-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-medium,499);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wpds-typography-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-medium,499);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-medium,499);--_gcd-p-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wpds-typography-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-regular,400);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-xl,32px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-regular,400)}.ca1aa3fc2029e958__body-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-regular,400);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-lg,15px);line-height:var(--wpds-typography-line-height-md,24px)}._131101940be12424__body-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-regular,400);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-regular,400)}._0e8d87a42c1f75fa__body-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-regular,400);--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); } var style_default = { "text": "_83ed8a8da5dd50ea__text", "heading-2xl": "_14437cfb77831647__heading-2xl", "heading-xl": "_3c78b7fa9b4072dd__heading-xl", "heading-lg": "aa58f227716bcde2__heading-lg", "heading-md": "fc4da56d8dfe52c4__heading-md", "heading-sm": "a9b78c7c82e8dff7__heading-sm", "body-xl": "_305ff559e52180d5__body-xl", "body-lg": "ca1aa3fc2029e958__body-lg", "body-md": "_131101940be12424__body-md", "body-sm": "_0e8d87a42c1f75fa__body-sm" }; if (typeof process === "undefined" || true) { registerStyle("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; var Text = (0, import_element16.forwardRef)(function Text2({ variant = "body-md", render: render4, className, ...props }, ref) { const element = useRender({ render: render4, defaultTagName: "span", ref, props: mergeProps(props, { className: clsx_default( style_default.text, global_css_defense_default.heading, global_css_defense_default.p, style_default[variant], className ) }) }); return element; }); // packages/ui/build-module/button/button.mjs var import_element17 = __toESM(require_element(), 1); var import_i18n = __toESM(require_i18n(), 1); var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); import { speak } from "@wordpress/a11y"; var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; function getRuntime2() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument2(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash2(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE2}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { return true; } } return false; } function injectStyle2(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime2(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash2(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument2(targetDocument) { const runtime = getRuntime2(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle2(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle2(hash, css) { const runtime = getRuntime2(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle2(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle2("4c317b0736", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-medium,499);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:padding-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);inset-inline-start:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}'); } var style_default2 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" }; if (typeof process === "undefined" || true) { registerStyle2("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; if (typeof process === "undefined" || true) { registerStyle2("5f8e7aa0bc", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._08e8a2e44959f892__outset-ring--focus:focus,._970d04df7376df67__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible:focus-within:has(:focus-visible),.cd83dfc2126a0846__outset-ring--focus-within:focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible:focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active:focus:not(:active),:focus-visible .ecadb9e080e2dfa5__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); } var focus_default = { "outset-ring--focus": "_08e8a2e44959f892__outset-ring--focus", "outset-ring--focus-except-active": "e25b2bdd7aa21721__outset-ring--focus-except-active", "outset-ring--focus-visible": "d0541bc9dd9dc7b6__outset-ring--focus-visible", "outset-ring--focus-within": "cd83dfc2126a0846__outset-ring--focus-within", "outset-ring--focus-within-except-active": "_970d04df7376df67__outset-ring--focus-within-except-active", "outset-ring--focus-within-visible": "c5cb3ee4bddaa8e4__outset-ring--focus-within-visible", "outset-ring--focus-parent-visible": "ecadb9e080e2dfa5__outset-ring--focus-parent-visible" }; if (typeof process === "undefined" || true) { registerStyle2("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default2 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; var Button3 = (0, import_element17.forwardRef)( function Button22({ tone = "brand", variant = "solid", size: size4 = "default", className, focusableWhenDisabled = true, disabled: disabled2, loading, loadingAnnouncement = (0, import_i18n.__)("Loading"), children, ...props }, ref) { const mergedClassName = clsx_default( global_css_defense_default2.button, resets_default["box-sizing"], focus_default["outset-ring--focus-except-active"], variant !== "unstyled" && style_default2.button, style_default2[`is-${tone}`], style_default2[`is-${variant}`], style_default2[`is-${size4}`], loading && style_default2["is-loading"], className ); (0, import_element17.useEffect)(() => { if (loading && loadingAnnouncement) { speak(loadingAnnouncement); } }, [loading, loadingAnnouncement]); return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)( Button, { ref, className: mergedClassName, focusableWhenDisabled, disabled: disabled2 ?? loading, ...props, children } ); } ); // packages/ui/build-module/button/icon.mjs var import_element19 = __toESM(require_element(), 1); // packages/ui/build-module/icon/icon.mjs var import_element18 = __toESM(require_element(), 1); var import_primitives28 = __toESM(require_primitives(), 1); var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); var Icon = (0, import_element18.forwardRef)(function Icon2({ icon, size: size4 = 24, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( import_primitives28.SVG, { ref, ...icon.props, ...restProps, width: size4, height: size4 } ); }); // packages/ui/build-module/button/icon.mjs var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; function getRuntime3() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument3(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash3(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE3}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { return true; } } return false; } function injectStyle3(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime3(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash3(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument3(targetDocument) { const runtime = getRuntime3(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle3(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle3(hash, css) { const runtime = getRuntime3(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle3(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle3("4c317b0736", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-medium,499);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:padding-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);inset-inline-start:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}'); } var style_default3 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" }; var ButtonIcon = (0, import_element19.forwardRef)( function ButtonIcon2({ className, icon, ...props }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)( Icon, { ref, icon, className: clsx_default(style_default3.icon, className), size: 24, ...props } ); } ); // packages/ui/build-module/button/index.mjs ButtonIcon.displayName = "Button.Icon"; var Button4 = Object.assign(Button3, { /** * An icon component specifically designed to work well when rendered inside * a `Button` component. */ Icon: ButtonIcon }); // packages/ui/build-module/utils/render-slot-with-children.mjs var import_element20 = __toESM(require_element(), 1); function renderSlotWithChildren(slot, defaultSlot, children) { return (0, import_element20.cloneElement)(slot ?? defaultSlot, { children }); } // packages/ui/build-module/utils/theme-provider.mjs var theme = __toESM(require_theme(), 1); // packages/ui/build-module/lock-unlock.mjs var import_private_apis = __toESM(require_private_apis(), 1); var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", "@wordpress/ui" ); // packages/ui/build-module/utils/theme-provider.mjs function getThemeProvider() { const themePackage = theme; if (themePackage.ThemeProvider) { return themePackage.ThemeProvider; } if (!themePackage.privateApis) { throw new Error( "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`." ); } return unlock( themePackage.privateApis ).ThemeProvider; } var ThemeProvider = getThemeProvider(); // packages/ui/build-module/stack/stack.mjs var import_element21 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; function getRuntime4() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument4(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash4(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE4}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { return true; } } return false; } function injectStyle4(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime4(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash4(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument4(targetDocument) { const runtime = getRuntime4(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle4(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle4(hash, css) { const runtime = getRuntime4(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle4(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle4("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}"); } var style_default4 = { "stack": "_19ce0419607e1896__stack" }; var gapTokens = { xs: "var(--wpds-dimension-gap-xs, 4px)", sm: "var(--wpds-dimension-gap-sm, 8px)", md: "var(--wpds-dimension-gap-md, 12px)", lg: "var(--wpds-dimension-gap-lg, 16px)", xl: "var(--wpds-dimension-gap-xl, 24px)", "2xl": "var(--wpds-dimension-gap-2xl, 32px)", "3xl": "var(--wpds-dimension-gap-3xl, 40px)" }; var Stack = (0, import_element21.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { const style = { gap: gap && gapTokens[gap], alignItems: align, justifyContent: justify, flexDirection: direction, flexWrap: wrap }; const element = useRender({ render: render4, ref, props: mergeProps(props, { style, className: style_default4.stack }) }); return element; }); // packages/ui/build-module/icon-button/icon-button.mjs var import_element26 = __toESM(require_element(), 1); // packages/ui/build-module/tooltip/index.mjs var tooltip_exports = {}; __export(tooltip_exports, { Popup: () => Popup, Portal: () => Portal, Positioner: () => Positioner, Provider: () => Provider, Root: () => Root, Trigger: () => Trigger }); // packages/ui/build-module/tooltip/popup.mjs var import_element24 = __toESM(require_element(), 1); // packages/ui/build-module/tooltip/portal.mjs var import_element22 = __toESM(require_element(), 1); // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash"; function getRuntime5() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument5(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash5(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE5}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) { return true; } } return false; } function injectStyle5(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime5(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash5(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument5(targetDocument) { const runtime = getRuntime5(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle5(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle5(hash, css) { const runtime = getRuntime5(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle5(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle5("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}"); } var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" }; var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; function resolveOwnerDocument() { return typeof document === "undefined" ? null : document; } function isInWordPressEnvironment() { let topWp; try { topWp = window.top?.wp; } catch { } const wp = topWp ?? window.wp; return typeof wp?.components === "object" && wp.components !== null; } var cachedSlot = null; function createSlot(ownerDocument2) { const element = ownerDocument2.createElement("div"); element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); if (wp_compat_overlay_slot_default.slot) { element.classList.add(wp_compat_overlay_slot_default.slot); } ownerDocument2.body.appendChild(element); return element; } function getWpCompatOverlaySlot() { if (typeof window === "undefined") { return void 0; } if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { return void 0; } const ownerDocument2 = resolveOwnerDocument(); if (!ownerDocument2 || !ownerDocument2.body) { return void 0; } if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { return cachedSlot; } const existing = ownerDocument2.querySelector( `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` ); if (existing instanceof HTMLDivElement) { cachedSlot = existing; return existing; } if (cachedSlot?.isConnected) { cachedSlot.remove(); } cachedSlot = createSlot(ownerDocument2); return cachedSlot; } // packages/ui/build-module/tooltip/portal.mjs var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); var Portal = (0, import_element22.forwardRef)( function TooltipPortal3({ container, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( index_parts_exports3.Portal, { container: container ?? getWpCompatOverlaySlot(), ...restProps, ref } ); } ); // packages/ui/build-module/tooltip/positioner.mjs var import_element23 = __toESM(require_element(), 1); var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash"; function getRuntime6() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument6(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash6(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE6}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) { return true; } } return false; } function injectStyle6(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime6(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash6(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument6(targetDocument) { const runtime = getRuntime6(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle6(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle6(hash, css) { const runtime = getRuntime6(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle6(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle6("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; if (typeof process === "undefined" || true) { registerStyle6("789467362f", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); } var style_default5 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; var Positioner = (0, import_element23.forwardRef)( function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( index_parts_exports3.Positioner, { ref, align, side, sideOffset, ...props, className: clsx_default( resets_default2["box-sizing"], style_default5.positioner, className ) } ); } ); // packages/ui/build-module/tooltip/popup.mjs var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash"; function getRuntime7() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument7(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash7(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE7}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) { return true; } } return false; } function injectStyle7(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime7(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash7(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument7(targetDocument) { const runtime = getRuntime7(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle7(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle7(hash, css) { const runtime = getRuntime7(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle7(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle7("789467362f", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); } var style_default6 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; var POPUP_COLOR = { background: "#1e1e1e" }; var Popup = (0, import_element24.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { const popupContent = /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( index_parts_exports3.Popup, { ref, className: clsx_default(style_default6.popup, className), ...props, children } ) }); const positionedPopup = renderSlotWithChildren( positioner, /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Positioner, {}), popupContent ); return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Portal, {}), positionedPopup); }); // packages/ui/build-module/tooltip/trigger.mjs var import_element25 = __toESM(require_element(), 1); var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); var Trigger = (0, import_element25.forwardRef)( function TooltipTrigger3(props, ref) { return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(index_parts_exports3.Trigger, { ref, ...props }); } ); // packages/ui/build-module/tooltip/root.mjs var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); function Root(props) { return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(index_parts_exports3.Root, { ...props }); } // packages/ui/build-module/tooltip/provider.mjs var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); function Provider({ ...props }) { return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(index_parts_exports3.Provider, { ...props }); } // packages/ui/build-module/icon-button/icon-button.mjs var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash"; function getRuntime8() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument8(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash8(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE8}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) { return true; } } return false; } function injectStyle8(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime8(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash8(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument8(targetDocument) { const runtime = getRuntime8(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle8(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle8(hash, css) { const runtime = getRuntime8(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle8(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle8("65cec4cf71", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{._28cfdc260e755391__icon-button{--wp-ui-button-aspect-ratio:1;--wp-ui-button-padding-inline:0;--wp-ui-button-min-width:unset}.f1c70d719989a85a__icon{margin:-1px}}}"); } var style_default7 = { "icon-button": "_28cfdc260e755391__icon-button", "icon": "f1c70d719989a85a__icon" }; var IconButton = (0, import_element26.forwardRef)( function IconButton2({ label, className, // Prevent accidental forwarding of `children` children: _children, disabled: disabled2, focusableWhenDisabled = true, icon, size: size4, shortcut, positioner, ...restProps }, ref) { const classes = clsx_default(style_default7["icon-button"], className); return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Provider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( Trigger, { ref, disabled: disabled2 && !focusableWhenDisabled, render: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( Button4, { ...restProps, size: size4, "aria-label": label, "aria-keyshortcuts": shortcut?.ariaKeyShortcut, disabled: disabled2, focusableWhenDisabled } ), className: classes, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)( Icon, { icon, size: 24, className: style_default7.icon } ) } ), /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Popup, { positioner, children: [ label, shortcut && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [ " ", /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { "aria-hidden": "true", children: shortcut.displayShortcut }) ] }) ] }) ] }) }); } ); // packages/ui/build-module/empty-state/index.mjs var empty_state_exports = {}; __export(empty_state_exports, { Actions: () => Actions, Description: () => Description, Icon: () => Icon3, Root: () => Root2, Title: () => Title, Visual: () => Visual }); // packages/ui/build-module/empty-state/root.mjs var import_element27 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash"; function getRuntime9() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument9(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash9(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE9}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) { return true; } } return false; } function injectStyle9(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime9(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash9(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument9(targetDocument) { const runtime = getRuntime9(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle9(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle9(hash, css) { const runtime = getRuntime9(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle9(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle9("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default8 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var Root2 = (0, import_element27.forwardRef)( function EmptyStateRoot({ render: render4, ...props }, ref) { const className = clsx_default(style_default8.root); const element = useRender({ defaultTagName: "div", render: render4, ref, props: mergeProps({ className }, props) }); return element; } ); // packages/ui/build-module/empty-state/visual.mjs var import_element28 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash"; function getRuntime10() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument10(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash10(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE10}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) { return true; } } return false; } function injectStyle10(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime10(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash10(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument10(targetDocument) { const runtime = getRuntime10(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle10(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle10(hash, css) { const runtime = getRuntime10(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle10(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle10("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default9 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var Visual = (0, import_element28.forwardRef)( function EmptyStateVisual({ render: render4, ...props }, ref) { const className = clsx_default(style_default9.visual); const element = useRender({ defaultTagName: "div", render: render4, ref, props: mergeProps({ className }, props) }); return element; } ); // packages/ui/build-module/empty-state/icon.mjs var import_element29 = __toESM(require_element(), 1); var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash"; function getRuntime11() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument11(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash11(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE11}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) { return true; } } return false; } function injectStyle11(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime11(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash11(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument11(targetDocument) { const runtime = getRuntime11(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle11(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle11(hash, css) { const runtime = getRuntime11(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle11(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle11("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default10 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var Icon3 = (0, import_element29.forwardRef)( function EmptyStateIcon({ icon, className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)( Visual, { ref, className: clsx_default(style_default10.icon, className), ...restProps, children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Icon, { icon }) } ); } ); // packages/ui/build-module/empty-state/title.mjs var import_element30 = __toESM(require_element(), 1); var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash"; function getRuntime12() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument12(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash12(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE12}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) { return true; } } return false; } function injectStyle12(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime12(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash12(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument12(targetDocument) { const runtime = getRuntime12(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle12(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle12(hash, css) { const runtime = getRuntime12(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle12(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle12("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default11 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var DEFAULT_TAG = /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("h2", {}); var Title = (0, import_element30.forwardRef)( function EmptyStateTitle({ render: render4 = DEFAULT_TAG, className, children, ...props }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( Text, { ref, variant: "heading-lg", render: render4, className: clsx_default(style_default11.title, className), ...props, children } ); } ); // packages/ui/build-module/empty-state/description.mjs var import_element31 = __toESM(require_element(), 1); var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash"; function getRuntime13() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument13(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash13(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE13}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) { return true; } } return false; } function injectStyle13(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime13(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash13(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument13(targetDocument) { const runtime = getRuntime13(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle13(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle13(hash, css) { const runtime = getRuntime13(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle13(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle13("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default12 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var DEFAULT_TAG2 = /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("p", {}); var Description = (0, import_element31.forwardRef)(function EmptyStateDescription({ render: render4 = DEFAULT_TAG2, className, children, ...props }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( Text, { ref, variant: "body-md", render: render4, className: clsx_default(style_default12.description, className), ...props, children } ); }); // packages/ui/build-module/empty-state/actions.mjs var import_element32 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash"; function getRuntime14() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument14(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash14(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE14}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) { return true; } } return false; } function injectStyle14(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime14(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash14(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument14(targetDocument) { const runtime = getRuntime14(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle14(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle14(hash, css) { const runtime = getRuntime14(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle14(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle14("7b60a246cc", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}}'); } var style_default13 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" }; var Actions = (0, import_element32.forwardRef)( function EmptyStateActions({ render: render4, ...props }, ref) { const className = clsx_default(style_default13.actions); const element = useRender({ defaultTagName: "div", render: render4, ref, props: mergeProps({ className }, props) }); return element; } ); // packages/ui/build-module/form/primitives/autocomplete/index.mjs var autocomplete_exports = {}; __export(autocomplete_exports, { Clear: () => Clear, Collection: () => Collection, Empty: () => Empty, Group: () => Group, GroupLabel: () => GroupLabel, Input: () => Input4, InputGroup: () => InputGroup, Item: () => Item, List: () => List, ListBody: () => ListBody, Popup: () => Popup2, Portal: () => Portal2, Positioner: () => Positioner2, Root: () => Root3, Value: () => Value }); // packages/ui/build-module/form/primitives/autocomplete/clear.mjs var import_element33 = __toESM(require_element(), 1); var import_i18n2 = __toESM(require_i18n(), 1); var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); var DEFAULT_RENDER = ({ "aria-label": ariaLabel = (0, import_i18n2.__)("Clear"), ...props }, { disabled: disabled2 }) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( IconButton, { icon: close_small_default, focusableWhenDisabled: false, disabled: disabled2, "aria-hidden": disabled2 || void 0, size: "small", variant: "minimal", tone: "neutral", label: ariaLabel, ...props } ); var Clear = (0, import_element33.forwardRef)( function Clear2({ render: render4 = DEFAULT_RENDER, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( index_parts_exports.Clear, { ref, render: render4, ...restProps } ); } ); // packages/ui/build-module/form/primitives/autocomplete/collection.mjs var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); function Collection({ children, ...restProps }) { return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(index_parts_exports.Collection, { ...restProps, children }); } // packages/ui/build-module/form/primitives/autocomplete/empty.mjs var import_element34 = __toESM(require_element(), 1); var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash"; function getRuntime15() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument15(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash15(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE15}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) { return true; } } return false; } function injectStyle15(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime15(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash15(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument15(targetDocument) { const runtime = getRuntime15(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle15(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle15(hash, css) { const runtime = getRuntime15(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle15(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle15("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var Empty = (0, import_element34.forwardRef)( function Empty2({ className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)( index_parts_exports.Empty, { className: clsx_default(item_popup_default.empty, className), ref, ...restProps } ); } ); // packages/ui/build-module/form/primitives/autocomplete/group.mjs var import_element35 = __toESM(require_element(), 1); var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash"; function getRuntime16() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument16(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash16(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE16}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) { return true; } } return false; } function injectStyle16(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime16(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash16(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument16(targetDocument) { const runtime = getRuntime16(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle16(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle16(hash, css) { const runtime = getRuntime16(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle16(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle16("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default2 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var Group = (0, import_element35.forwardRef)( function Group2({ className, children, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( index_parts_exports.Group, { className: clsx_default(item_popup_default2.group, className), ref, ...restProps, children } ); } ); // packages/ui/build-module/form/primitives/autocomplete/group-label.mjs var import_element36 = __toESM(require_element(), 1); var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash"; function getRuntime17() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument17(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash17(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE17}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) { return true; } } return false; } function injectStyle17(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime17(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash17(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument17(targetDocument) { const runtime = getRuntime17(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle17(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle17(hash, css) { const runtime = getRuntime17(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle17(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle17("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default3 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var GroupLabel = (0, import_element36.forwardRef)(function GroupLabel2({ className, children, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( Text, { variant: "heading-sm", className: clsx_default(item_popup_default3["group-label"], className), render: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(index_parts_exports.GroupLabel, { ref, ...restProps }), children } ); }); // packages/ui/build-module/form/primitives/autocomplete/input-group.mjs var import_element37 = __toESM(require_element(), 1); var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); var InputGroup = (0, import_element37.forwardRef)(function InputGroup2(props, ref) { return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(index_parts_exports.InputGroup, { ref, ...props }); }); // packages/ui/build-module/form/primitives/autocomplete/input.mjs var import_element41 = __toESM(require_element(), 1); // packages/ui/build-module/form/primitives/input/input.mjs var import_element40 = __toESM(require_element(), 1); // packages/ui/build-module/form/primitives/input-layout/input-layout.mjs var import_element38 = __toESM(require_element(), 1); var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash"; function getRuntime18() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument18(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash18(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE18}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) { return true; } } return false; } function injectStyle18(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime18(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash18(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument18(targetDocument) { const runtime = getRuntime18(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle18(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle18(hash, css) { const runtime = getRuntime18(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle18(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle18("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default3 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; if (typeof process === "undefined" || true) { registerStyle18("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default3 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; if (typeof process === "undefined" || true) { registerStyle18("bc14d8e61b", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:var(--wpds-dimension-size-lg,40px);line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:var(--wpds-dimension-size-md,32px)}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:var(--wpds-dimension-size-sm,24px)}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){background-color:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&._8097270636ca6100__is-borderless{border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}'); } var style_default14 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" }; var InputLayout = (0, import_element38.forwardRef)( function InputLayout2({ className, children, visuallyDisabled, size: size4 = "default", isBorderless, prefix, suffix, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)( "div", { ref, className: clsx_default( global_css_defense_default3.div, resets_default3["box-sizing"], style_default14["input-layout"], style_default14[`is-size-${size4}`], visuallyDisabled && style_default14["is-disabled"], isBorderless && style_default14["is-borderless"], className ), ...restProps, children: [ import_element38.Children.count(prefix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( "div", { className: style_default14["slot-wrapper"], "data-slot-type": "prefix", children: prefix } ), children, import_element38.Children.count(suffix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( "div", { className: style_default14["slot-wrapper"], "data-slot-type": "suffix", children: suffix } ) ] } ); } ); // packages/ui/build-module/form/primitives/input-layout/slot.mjs var import_element39 = __toESM(require_element(), 1); var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash"; function getRuntime19() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument19(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash19(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE19}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) { return true; } } return false; } function injectStyle19(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime19(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash19(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument19(targetDocument) { const runtime = getRuntime19(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle19(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle19(hash, css) { const runtime = getRuntime19(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle19(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle19("bc14d8e61b", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:var(--wpds-dimension-size-lg,40px);line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:var(--wpds-dimension-size-md,32px)}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:var(--wpds-dimension-size-sm,24px)}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){background-color:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&._8097270636ca6100__is-borderless{border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}'); } var style_default15 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" }; var InputLayoutSlot = (0, import_element39.forwardRef)(function InputLayoutSlot2({ padding = "default", className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( "div", { ref, className: clsx_default( style_default15["input-layout-slot"], style_default15[`is-padding-${padding}`], className ), ...restProps } ); }); InputLayoutSlot.displayName = "InputLayout.Slot"; // packages/ui/build-module/form/primitives/input-layout/index.mjs var InputLayout3 = Object.assign(InputLayout, { Slot: InputLayoutSlot }); // packages/ui/build-module/form/primitives/input/input.mjs var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash"; function getRuntime20() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument20(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash20(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE20}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) { return true; } } return false; } function injectStyle20(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime20(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash20(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument20(targetDocument) { const runtime = getRuntime20(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle20(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle20(hash, css) { const runtime = getRuntime20(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle20(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle20("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default4 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; if (typeof process === "undefined" || true) { registerStyle20("5f8e7aa0bc", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._08e8a2e44959f892__outset-ring--focus:focus,._970d04df7376df67__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible:focus-within:has(:focus-visible),.cd83dfc2126a0846__outset-ring--focus-within:focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible:focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active:focus:not(:active),:focus-visible .ecadb9e080e2dfa5__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); } var focus_default2 = { "outset-ring--focus": "_08e8a2e44959f892__outset-ring--focus", "outset-ring--focus-except-active": "e25b2bdd7aa21721__outset-ring--focus-except-active", "outset-ring--focus-visible": "d0541bc9dd9dc7b6__outset-ring--focus-visible", "outset-ring--focus-within": "cd83dfc2126a0846__outset-ring--focus-within", "outset-ring--focus-within-except-active": "_970d04df7376df67__outset-ring--focus-within-except-active", "outset-ring--focus-within-visible": "c5cb3ee4bddaa8e4__outset-ring--focus-within-visible", "outset-ring--focus-parent-visible": "ecadb9e080e2dfa5__outset-ring--focus-parent-visible" }; if (typeof process === "undefined" || true) { registerStyle20("5f69bdbcb5", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._2ae7be2fc1bb17a3__input{--_gcd-input-padding:var(--wp-ui-input-padding-block,0) var(--wp-ui-input-layout-padding-inline,0);background:transparent;border:none;color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:inherit;font-size:inherit;line-height:inherit;outline:none;padding-block:var(--wp-ui-input-padding-block,0);padding-inline:var(--wp-ui-input-layout-padding-inline,0);width:100%;&::placeholder{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&:disabled,&[aria-disabled=true]{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}&[type=email],&[type=url]{direction:ltr}}}}"); } var style_default16 = { "input": "_2ae7be2fc1bb17a3__input" }; var Input3 = (0, import_element40.forwardRef)(function Input22({ className, size: size4 = "default", prefix, suffix, style, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( InputLayout3, { className: clsx_default( focus_default2["outset-ring--focus-within"], className ), style, size: size4, visuallyDisabled: restProps.disabled, prefix, suffix, children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( Input, { ref, className: clsx_default(global_css_defense_default4.input, style_default16.input), ...restProps } ) } ); }); // packages/ui/build-module/form/primitives/autocomplete/input.mjs var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); var DEFAULT_RENDER2 = (props) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Input3, { ...props }); var Input4 = (0, import_element41.forwardRef)( function Input23({ render: render4 = DEFAULT_RENDER2, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( index_parts_exports.Input, { ref, render: render4, ...restProps } ); } ); // packages/ui/build-module/form/primitives/autocomplete/item.mjs var import_element42 = __toESM(require_element(), 1); var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash"; function getRuntime21() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument21(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash21(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE21}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) { return true; } } return false; } function injectStyle21(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime21(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash21(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument21(targetDocument) { const runtime = getRuntime21(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle21(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle21(hash, css) { const runtime = getRuntime21(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle21(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle21("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default4 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; if (typeof process === "undefined" || true) { registerStyle21("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default4 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; var Item = (0, import_element42.forwardRef)( function Item2({ className, children, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( index_parts_exports.Item, { className: clsx_default( resets_default4["box-sizing"], item_popup_default4.item, className ), ref, ...restProps, children } ); } ); // packages/ui/build-module/form/primitives/autocomplete/list.mjs var import_element43 = __toESM(require_element(), 1); var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE22 = "data-wp-hash"; function getRuntime22() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument22(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash22(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE22}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE22) === hash) { return true; } } return false; } function injectStyle22(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime22(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash22(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE22, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument22(targetDocument) { const runtime = getRuntime22(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle22(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle22(hash, css) { const runtime = getRuntime22(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle22(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle22("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default5 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var List = (0, import_element43.forwardRef)( function List2({ className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( index_parts_exports.List, { className: clsx_default(item_popup_default5.list, className), ref, ...restProps } ); } ); // packages/ui/build-module/form/primitives/autocomplete/list-body.mjs var import_element44 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE23 = "data-wp-hash"; function getRuntime23() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument23(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash23(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE23}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE23) === hash) { return true; } } return false; } function injectStyle23(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime23(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash23(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE23, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument23(targetDocument) { const runtime = getRuntime23(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle23(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle23(hash, css) { const runtime = getRuntime23(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle23(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle23("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default6 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var ListBody = (0, import_element44.forwardRef)( function ListBody2({ render: render4, ...props }, ref) { const element = useRender({ defaultTagName: "div", render: render4, ref, props: mergeProps( { className: item_popup_default6["list-scrollable-container"] }, props ) }); return element; } ); // packages/ui/build-module/form/primitives/autocomplete/popup.mjs var import_element47 = __toESM(require_element(), 1); // packages/ui/build-module/form/primitives/autocomplete/portal.mjs var import_element45 = __toESM(require_element(), 1); var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); var Portal2 = (0, import_element45.forwardRef)( function AutocompletePortal({ container, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( index_parts_exports.Portal, { container: container ?? getWpCompatOverlaySlot(), ...restProps, ref } ); } ); // packages/ui/build-module/form/primitives/autocomplete/positioner.mjs var import_element46 = __toESM(require_element(), 1); // packages/ui/build-module/form/primitives/constants.mjs var ITEM_POPUP_POSITIONER_PROPS = { align: "start", sideOffset: 8, collisionPadding: 12 }; // packages/ui/build-module/form/primitives/autocomplete/positioner.mjs var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE24 = "data-wp-hash"; function getRuntime24() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument24(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash24(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE24}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE24) === hash) { return true; } } return false; } function injectStyle24(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime24(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash24(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE24, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument24(targetDocument) { const runtime = getRuntime24(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle24(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle24(hash, css) { const runtime = getRuntime24(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle24(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle24("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default5 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; if (typeof process === "undefined" || true) { registerStyle24("e61eb95308", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._8eb0a29484225eea__positioner{z-index:var(--wp-ui-autocomplete-z-index,initial)}}}"); } var style_default17 = { "positioner": "_8eb0a29484225eea__positioner" }; var Positioner2 = (0, import_element46.forwardRef)( function AutocompletePositioner({ className, ...props }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( index_parts_exports.Positioner, { ...ITEM_POPUP_POSITIONER_PROPS, ...props, ref, className: clsx_default( resets_default5["box-sizing"], style_default17.positioner, className ) } ); } ); // packages/ui/build-module/form/primitives/autocomplete/popup.mjs var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE25 = "data-wp-hash"; function getRuntime25() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument25(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash25(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE25}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE25) === hash) { return true; } } return false; } function injectStyle25(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime25(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash25(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE25, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument25(targetDocument) { const runtime = getRuntime25(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle25(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle25(hash, css) { const runtime = getRuntime25(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle25(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle25("b5813d84e6", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;transform:translate(0);&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._234b520016b4e56f__popup{--wp-ui-popup-padding:var(--wpds-dimension-padding-xs,4px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);display:grid;grid-template-areas:"header" "main";grid-template-rows:auto minmax(0,1fr);max-height:min(var(--available-height),480px,60dvh);max-width:var(--available-width);min-width:var(--anchor-width)}.f43dc7c768d7b622__list{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:grid;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;grid-template-areas:"scrollable" "footer";grid-template-rows:minmax(0,1fr) auto;line-height:var(--wpds-typography-line-height-sm,20px)}._233cd60cdb84a2ef__list-scrollable-container{grid-area:scrollable;overflow-block:auto;overscroll-behavior:contain;scroll-padding-block:var(--wp-ui-popup-padding);&:not(:empty){padding-block:var(--wp-ui-popup-padding)}}.ec4db6f0122263e7__list-footer{grid-area:footer;padding-block:var(--wp-ui-popup-padding);._233cd60cdb84a2ef__list-scrollable-container:not(:empty)+&{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb)}}.b3c0d7f103fb10a2__group:not(:first-child){margin-block-start:var(--wpds-dimension-gap-sm,8px)}._21b59380477c306c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;min-height:var(--wpds-dimension-size-md,32px);padding-inline:var(--wpds-dimension-padding-md,12px)}._684ccb7988365b4f__item{--wp-ui-popup-item-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-popup-item-padding-block:var(--wpds-dimension-padding-xs,4px);align-items:center;border-radius:var(--wpds-border-radius-sm,2px);display:flex;gap:var(--wpds-dimension-gap-xs,4px);justify-content:flex-start;margin-inline:var(--wp-ui-popup-padding);min-height:var(--wp-ui-popup-item-height);padding-block:var(--wp-ui-popup-item-padding-block);padding-inline-end:var(--wp-ui-popup-item-padding-inline);padding-inline-start:calc(var(--wp-ui-popup-item-padding-inline) - var(--wpds-dimension-padding-xs, 4px));user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&.f181b98b0d33282a__is-size-compact{--wp-ui-popup-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px)}&._38f7faff93c61958__is-size-small{--wp-ui-popup-item-height:var(--wpds-dimension-size-sm,24px);--wp-ui-popup-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-popup-item-padding-block:2px}&:not([data-selected]){._92fbe4765dfad5ee__item-indicator-icon{opacity:0}}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:1px solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}.a3adcfd0b73ffd40__item-icon{flex-shrink:0}._06c7ff39d2f685b9__empty:not(:empty){--wp-ui-popup-empty-min-height:var(--wpds-dimension-size-lg,40px);--wp-ui-popup-empty-padding-inline:var(--wpds-dimension-padding-md,12px);align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);grid-area:main;line-height:var(--wpds-typography-line-height-sm,20px);min-height:var(--wp-ui-popup-empty-min-height);padding-inline:var(--wp-ui-popup-empty-padding-inline)}}}'); } var item_popup_default7 = { "popup": "_234b520016b4e56f__popup _380b81b8f79fb10f__dropdown-motion", "list": "f43dc7c768d7b622__list", "list-scrollable-container": "_233cd60cdb84a2ef__list-scrollable-container", "list-footer": "ec4db6f0122263e7__list-footer", "group": "b3c0d7f103fb10a2__group", "group-label": "_21b59380477c306c__group-label", "item": "_684ccb7988365b4f__item", "is-size-compact": "f181b98b0d33282a__is-size-compact", "is-size-small": "_38f7faff93c61958__is-size-small", "item-indicator-icon": "_92fbe4765dfad5ee__item-indicator-icon", "item-icon": "a3adcfd0b73ffd40__item-icon", "empty": "_06c7ff39d2f685b9__empty" }; var Popup2 = (0, import_element47.forwardRef)( function Popup22({ className, portal, positioner, ...restProps }, ref) { const popupContent = /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(ThemeProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)( index_parts_exports.Popup, { ref, className: clsx_default(item_popup_default7.popup, className), ...restProps } ) }); const positionedPopup = renderSlotWithChildren( positioner, /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Positioner2, {}), popupContent ); return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Portal2, {}), positionedPopup); } ); // packages/ui/build-module/form/primitives/autocomplete/root.mjs var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); function Root3(props) { return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(index_parts_exports.Root, { ...props }); } // packages/ui/build-module/form/primitives/autocomplete/value.mjs var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); function Value(props) { return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(index_parts_exports.Value, { ...props }); } // packages/ui/build-module/form/primitives/field/index.mjs var field_exports = {}; __export(field_exports, { Control: () => Control, Description: () => Description2, Details: () => Details, Item: () => Item3, Label: () => Label, Root: () => Root4 }); // packages/ui/build-module/form/primitives/field/root.mjs var import_element48 = __toESM(require_element(), 1); var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE26 = "data-wp-hash"; function getRuntime26() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument26(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash26(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE26}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE26) === hash) { return true; } } return false; } function injectStyle26(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime26(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash26(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE26, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument26(targetDocument) { const runtime = getRuntime26(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle26(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle26(hash, css) { const runtime = getRuntime26(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle26(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle26("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default6 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; var DEFAULT_RENDER3 = (props) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Stack, { ...props, direction: "column", gap: "sm" }); var Root4 = (0, import_element48.forwardRef)(function Root22({ className, render: render4 = DEFAULT_RENDER3, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( index_parts_exports2.Root, { ref, className: clsx_default(resets_default6["box-sizing"], className), render: render4, ...restProps } ); }); // packages/ui/build-module/form/primitives/field/item.mjs var import_element49 = __toESM(require_element(), 1); var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); var Item3 = (0, import_element49.forwardRef)(function Item22(props, ref) { return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(index_parts_exports2.Item, { ref, ...props }); }); // packages/ui/build-module/form/primitives/field/label.mjs var import_element51 = __toESM(require_element(), 1); // packages/ui/build-module/visually-hidden/visually-hidden.mjs var import_element50 = __toESM(require_element(), 1); var STYLE_HASH_ATTRIBUTE27 = "data-wp-hash"; function getRuntime27() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument27(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash27(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE27}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE27) === hash) { return true; } } return false; } function injectStyle27(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime27(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash27(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE27, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument27(targetDocument) { const runtime = getRuntime27(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle27(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle27(hash, css) { const runtime = getRuntime27(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle27(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle27("fa606a57ae", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}}"); } var style_default18 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" }; var VisuallyHidden = (0, import_element50.forwardRef)( function VisuallyHidden2({ render: render4, ...restProps }, ref) { const element = useRender({ render: render4, ref, props: mergeProps( { className: style_default18["visually-hidden"] }, restProps, { // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. "data-visually-hidden": "" } ) }); return element; } ); // packages/ui/build-module/form/primitives/field/label.mjs var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE28 = "data-wp-hash"; function getRuntime28() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument28(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash28(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE28}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE28) === hash) { return true; } } return false; } function injectStyle28(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime28(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash28(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE28, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument28(targetDocument) { const runtime = getRuntime28(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle28(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle28(hash, css) { const runtime = getRuntime28(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle28(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle28("4b9484aa9f", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); } var field_default = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; var Label = (0, import_element51.forwardRef)( function Label2({ className, hideFromVision, variant, ...restProps }, ref) { const label = /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( index_parts_exports2.Label, { ref, className: clsx_default( field_default.label, variant && field_default[`is-${variant}`], className ), ...restProps } ); if (hideFromVision) { return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(VisuallyHidden, { render: label }); } return label; } ); // packages/ui/build-module/form/primitives/field/description.mjs var import_element52 = __toESM(require_element(), 1); var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE29 = "data-wp-hash"; function getRuntime29() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument29(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash29(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE29}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE29) === hash) { return true; } } return false; } function injectStyle29(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime29(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash29(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE29, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument29(targetDocument) { const runtime = getRuntime29(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle29(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle29(hash, css) { const runtime = getRuntime29(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle29(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle29("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default5 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; if (typeof process === "undefined" || true) { registerStyle29("4b9484aa9f", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); } var field_default2 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; var Description2 = (0, import_element52.forwardRef)(function Description22({ className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( index_parts_exports2.Description, { ref, className: clsx_default( global_css_defense_default5.p, field_default2.description, className ), ...restProps } ); }); // packages/ui/build-module/form/primitives/field/details.mjs var import_element53 = __toESM(require_element(), 1); var import_i18n3 = __toESM(require_i18n(), 1); var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE30 = "data-wp-hash"; function getRuntime30() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument30(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash30(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE30}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE30) === hash) { return true; } } return false; } function injectStyle30(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime30(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash30(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE30, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument30(targetDocument) { const runtime = getRuntime30(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle30(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle30(hash, css) { const runtime = getRuntime30(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle30(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle30("4b9484aa9f", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-medium,499);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); } var field_default3 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; var Details = (0, import_element53.forwardRef)( function Details2({ className, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(index_parts_exports2.Description, {}), children: (0, import_i18n3.__)("More details follow the field.") }), /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( "div", { ref, className: clsx_default(field_default3.description, className), ...restProps } ) ] }); } ); // packages/ui/build-module/form/primitives/field/control.mjs var import_element54 = __toESM(require_element(), 1); var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1); var Control = (0, import_element54.forwardRef)( function Control2(props, ref) { return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(index_parts_exports2.Control, { ref, ...props }); } ); // packages/ui/build-module/form/input-control/input-control.mjs var import_element55 = __toESM(require_element(), 1); var import_jsx_runtime98 = __toESM(require_jsx_runtime(), 1); var InputControl = (0, import_element55.forwardRef)( function InputControl2({ className, label, description, details, hideLabelFromVision, ...restProps }, ref) { return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(field_exports.Root, { className, children: [ /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }), /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(Input3, { ref, ...restProps }), description && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(field_exports.Description, { children: description }), details && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(field_exports.Details, { children: details }) ] }); } ); // packages/ui/build-module/link/link.mjs var import_element56 = __toESM(require_element(), 1); var import_i18n4 = __toESM(require_i18n(), 1); var import_jsx_runtime99 = __toESM(require_jsx_runtime(), 1); var STYLE_HASH_ATTRIBUTE31 = "data-wp-hash"; function getRuntime31() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument31(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash31(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE31}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE31) === hash) { return true; } } return false; } function injectStyle31(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime31(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash31(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE31, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument31(targetDocument) { const runtime = getRuntime31(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle31(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle31(hash, css) { const runtime = getRuntime31(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle31(targetDocument, hash, css); } } if (typeof process === "undefined" || true) { registerStyle31("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); } var resets_default7 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; if (typeof process === "undefined" || true) { registerStyle31("5f8e7aa0bc", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._08e8a2e44959f892__outset-ring--focus:focus,._970d04df7376df67__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c5cb3ee4bddaa8e4__outset-ring--focus-within-visible:focus-within:has(:focus-visible),.cd83dfc2126a0846__outset-ring--focus-within:focus-within,.d0541bc9dd9dc7b6__outset-ring--focus-visible:focus-visible,.e25b2bdd7aa21721__outset-ring--focus-except-active:focus:not(:active),:focus-visible .ecadb9e080e2dfa5__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); } var focus_default3 = { "outset-ring--focus": "_08e8a2e44959f892__outset-ring--focus", "outset-ring--focus-except-active": "e25b2bdd7aa21721__outset-ring--focus-except-active", "outset-ring--focus-visible": "d0541bc9dd9dc7b6__outset-ring--focus-visible", "outset-ring--focus-within": "cd83dfc2126a0846__outset-ring--focus-within", "outset-ring--focus-within-except-active": "_970d04df7376df67__outset-ring--focus-within-except-active", "outset-ring--focus-within-visible": "c5cb3ee4bddaa8e4__outset-ring--focus-within-visible", "outset-ring--focus-parent-visible": "ecadb9e080e2dfa5__outset-ring--focus-parent-visible" }; if (typeof process === "undefined" || true) { registerStyle31("7e0119b657", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d4250949359b05ce__link{text-decoration-thickness:from-font;text-underline-offset:.2em}.c6055659b8e2cd2c__is-brand,.c6055659b8e2cd2c__is-brand:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9))}.c6055659b8e2cd2c__is-brand:active,.c6055659b8e2cd2c__is-brand:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}._92e0dfcaeee15b88__is-neutral,._92e0dfcaeee15b88__is-neutral:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);text-decoration-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d)}._92e0dfcaeee15b88__is-neutral:active,._92e0dfcaeee15b88__is-neutral:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}.cf122a9bf1035d42__is-unstyled{--_gcd-a-color:inherit;color:inherit;text-decoration:none}._0cb411afac4c86c7__link-icon{display:inline-block;font-weight:var(--wpds-typography-font-weight-regular,400);line-height:1;margin-inline-start:var(--wpds-dimension-padding-xs,4px);text-decoration:none}._0cb411afac4c86c7__link-icon:after{content:"\\2197"}._0cb411afac4c86c7__link-icon:dir(rtl):after{content:"\\2196"}}}'); } var style_default19 = { "link": "d4250949359b05ce__link", "is-brand": "c6055659b8e2cd2c__is-brand", "is-neutral": "_92e0dfcaeee15b88__is-neutral", "is-unstyled": "cf122a9bf1035d42__is-unstyled", "link-icon": "_0cb411afac4c86c7__link-icon" }; if (typeof process === "undefined" || true) { registerStyle31("d390e935a7", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-medium,499));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}"); } var global_css_defense_default6 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a" }; var Link = (0, import_element56.forwardRef)(function Link2({ children, variant = "default", tone = "brand", openInNewTab = false, render: render4, className, ...props }, ref) { const element = useRender({ render: render4, defaultTagName: "a", ref, props: mergeProps(props, { className: clsx_default( global_css_defense_default6.a, resets_default7["box-sizing"], focus_default3["outset-ring--focus"], variant !== "unstyled" && style_default19.link, variant !== "unstyled" && style_default19[`is-${tone}`], variant === "unstyled" && style_default19["is-unstyled"], className ), target: openInNewTab ? "_blank" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(import_jsx_runtime99.Fragment, { children: [ children, openInNewTab && /* @__PURE__ */ (0, import_jsx_runtime99.jsx)( "span", { className: style_default19["link-icon"], role: "img", "aria-label": ( /* translators: accessibility text appended to link text */ (0, import_i18n4.__)("(opens in a new tab)") ) } ) ] }) }) }); return element; }); // packages/dataviews/build-module/dataviews/index.mjs var import_element113 = __toESM(require_element(), 1); var import_compose13 = __toESM(require_compose(), 1); // packages/dataviews/build-module/components/dataviews-context/index.mjs var import_element57 = __toESM(require_element(), 1); // packages/dataviews/build-module/constants.mjs var import_i18n5 = __toESM(require_i18n(), 1); var OPERATOR_IS_ANY = "isAny"; var OPERATOR_IS_NONE = "isNone"; var OPERATOR_IS_ALL = "isAll"; var OPERATOR_IS_NOT_ALL = "isNotAll"; var OPERATOR_BETWEEN = "between"; var OPERATOR_IN_THE_PAST = "inThePast"; var OPERATOR_OVER = "over"; var OPERATOR_IS = "is"; var OPERATOR_IS_NOT = "isNot"; var OPERATOR_LESS_THAN = "lessThan"; var OPERATOR_GREATER_THAN = "greaterThan"; var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; var OPERATOR_BEFORE = "before"; var OPERATOR_AFTER = "after"; var OPERATOR_BEFORE_INC = "beforeInc"; var OPERATOR_AFTER_INC = "afterInc"; var OPERATOR_CONTAINS = "contains"; var OPERATOR_NOT_CONTAINS = "notContains"; var OPERATOR_STARTS_WITH = "startsWith"; var OPERATOR_ON = "on"; var OPERATOR_NOT_ON = "notOn"; var SORTING_DIRECTIONS = ["asc", "desc"]; var sortArrows = { asc: "\u2191", desc: "\u2193" }; var sortValues = { asc: "ascending", desc: "descending" }; var sortLabels = { asc: (0, import_i18n5.__)("Sort ascending"), desc: (0, import_i18n5.__)("Sort descending") }; var sortIcons = { asc: arrow_up_default, desc: arrow_down_default }; var LAYOUT_TABLE = "table"; var LAYOUT_GRID = "grid"; var LAYOUT_LIST = "list"; var LAYOUT_ACTIVITY = "activity"; var LAYOUT_PICKER_GRID = "pickerGrid"; var LAYOUT_PICKER_TABLE = "pickerTable"; var LAYOUT_PICKER_ACTIVITY = "pickerActivity"; // packages/dataviews/build-module/components/dataviews-context/index.mjs var DataViewsContext = (0, import_element57.createContext)({ view: { type: LAYOUT_TABLE }, onChangeView: () => { }, fields: [], data: [], paginationInfo: { totalItems: 0, totalPages: 0 }, selection: [], onChangeSelection: () => { }, setOpenedFilter: () => { }, openedFilter: null, getItemId: (item) => item.id, isItemClickable: () => true, renderItemLink: void 0, containerWidth: 0, containerRef: (0, import_element57.createRef)(), resizeObserverRef: () => { }, defaultLayouts: { list: {}, grid: {}, table: {} }, filters: [], isShowingFilter: false, setIsShowingFilter: () => { }, hasInitiallyLoaded: false, config: { perPageSizes: [] }, intersectionObserver: null }); DataViewsContext.displayName = "DataViewsContext"; var dataviews_context_default = DataViewsContext; // packages/dataviews/build-module/components/dataviews-layouts/index.mjs var import_i18n26 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs var import_i18n13 = __toESM(require_i18n(), 1); var import_components6 = __toESM(require_components(), 1); var import_element65 = __toESM(require_element(), 1); var import_keycodes = __toESM(require_keycodes(), 1); // packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs var import_components = __toESM(require_components(), 1); var import_i18n6 = __toESM(require_i18n(), 1); var import_jsx_runtime100 = __toESM(require_jsx_runtime(), 1); function DataViewsSelectionCheckbox({ selection, onChangeSelection, item, getItemId, titleField, disabled: disabled2, ...extraProps }) { const id = getItemId(item); const isInSelectionArray = selection.includes(id); const checked = !disabled2 && isInSelectionArray; const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n6.__)("(no title)"); return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( import_components.CheckboxControl, { className: "dataviews-selection-checkbox", "aria-label": selectionLabel, "aria-disabled": disabled2, checked, onChange: () => { if (disabled2) { return; } onChangeSelection( isInSelectionArray ? selection.filter((itemId) => id !== itemId) : [...selection, id] ); }, ...extraProps } ); } // packages/dataviews/build-module/components/dataviews-item-actions/index.mjs var import_components2 = __toESM(require_components(), 1); var import_i18n7 = __toESM(require_i18n(), 1); var import_element58 = __toESM(require_element(), 1); var import_data = __toESM(require_data(), 1); var import_compose = __toESM(require_compose(), 1); // packages/dataviews/build-module/lock-unlock.mjs var import_private_apis2 = __toESM(require_private_apis(), 1); var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", "@wordpress/dataviews" ); // packages/dataviews/build-module/components/dataviews-item-actions/index.mjs var import_jsx_runtime101 = __toESM(require_jsx_runtime(), 1); var { Menu, kebabCase } = unlock2(import_components2.privateApis); function ButtonTrigger({ action, onClick, items, variant }) { const label = typeof action.label === "string" ? action.label : action.label(items); return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( import_components2.Button, { disabled: !!action.disabled, accessibleWhenDisabled: true, size: "compact", variant, onClick, children: label } ); } function MenuItemTrigger({ action, onClick, items }) { const label = typeof action.label === "string" ? action.label : action.label(items); return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Menu.ItemLabel, { children: label }) }); } function ActionModal({ action, items, closeModal }) { const label = typeof action.label === "string" ? action.label : action.label(items); const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( import_components2.Modal, { title: modalHeader || label, __experimentalHideHeader: !!action.hideModalHeader, onRequestClose: closeModal, focusOnMount: action.modalFocusOnMount ?? true, size: action.modalSize || "medium", overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase( action.id )}`, children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(action.RenderModal, { items, closeModal }) } ); } function ActionsMenuGroup({ actions, item, registry, setActiveModalAction }) { const { primaryActions, regularActions } = (0, import_element58.useMemo)(() => { return actions.reduce( (acc, action) => { (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); return acc; }, { primaryActions: [], regularActions: [] } ); }, [actions]); const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( MenuItemTrigger, { action, onClick: () => { if ("RenderModal" in action) { setActiveModalAction(action); return; } action.callback([item], { registry }); }, items: [item] }, action.id )); return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(Menu.Group, { children: [ renderActionGroup(primaryActions), renderActionGroup(regularActions) ] }); } function ItemActions({ item, actions, isCompact }) { const registry = (0, import_data.useRegistry)(); const { primaryActions, eligibleActions } = (0, import_element58.useMemo)(() => { const _eligibleActions = actions.filter( (action) => !action.isEligible || action.isEligible(item) ); const _primaryActions = _eligibleActions.filter( (action) => action.isPrimary ); return { primaryActions: _primaryActions, eligibleActions: _eligibleActions }; }, [actions, item]); const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); if (isCompact) { return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( CompactItemActions, { item, actions: eligibleActions, isSmall: true, registry } ); } return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)( Stack, { direction: "row", justify: "flex-end", className: "dataviews-item-actions", style: { flexShrink: 0, width: "auto" }, children: [ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( PrimaryActions, { item, actions: primaryActions, registry } ), (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu // there if there are any actions at all. isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( CompactItemActions, { item, actions: eligibleActions, registry } ) ] } ); } function CompactItemActions({ item, actions, isSmall, registry }) { const [activeModalAction, setActiveModalAction] = (0, import_element58.useState)( null ); return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(Menu, { placement: "bottom-end", children: [ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( Menu.TriggerButton, { render: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( import_components2.Button, { size: isSmall ? "small" : "compact", icon: more_vertical_default, label: (0, import_i18n7.__)("Actions"), accessibleWhenDisabled: true, disabled: !actions.length, className: "dataviews-all-actions-button" } ) } ), /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( ActionsMenuGroup, { actions, item, registry, setActiveModalAction } ) }) ] }), !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( ActionModal, { action: activeModalAction, items: [item], closeModal: () => setActiveModalAction(null) } ) ] }); } function PrimaryActions({ item, actions, registry, buttonVariant }) { const [activeModalAction, setActiveModalAction] = (0, import_element58.useState)(null); const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<"); if (isMobileViewport) { return null; } if (!Array.isArray(actions) || actions.length === 0) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment, { children: [ actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( ButtonTrigger, { action, onClick: () => { if ("RenderModal" in action) { setActiveModalAction(action); return; } action.callback([item], { registry }); }, items: [item], variant: buttonVariant }, action.id )), !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( ActionModal, { action: activeModalAction, items: [item], closeModal: () => setActiveModalAction(null) } ) ] }); } // packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs var import_components3 = __toESM(require_components(), 1); var import_i18n9 = __toESM(require_i18n(), 1); var import_element59 = __toESM(require_element(), 1); var import_data2 = __toESM(require_data(), 1); var import_compose2 = __toESM(require_compose(), 1); // packages/dataviews/build-module/utils/get-footer-message.mjs var import_i18n8 = __toESM(require_i18n(), 1); function getFooterMessage(selectionCount, itemsCount, totalItems, onlyTotalCount = false) { if (selectionCount > 0) { return (0, import_i18n8.sprintf)( /* translators: %d: number of items. */ (0, import_i18n8._n)("%d Item selected", "%d Items selected", selectionCount), selectionCount ); } if (onlyTotalCount || totalItems <= itemsCount) { return (0, import_i18n8.sprintf)( /* translators: %d: number of items. */ (0, import_i18n8._n)("%d Item", "%d Items", totalItems), totalItems ); } return (0, import_i18n8.sprintf)( /* translators: %1$d: number of items. %2$d: total number of items. */ (0, import_i18n8._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), itemsCount, totalItems ); } // packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs var import_jsx_runtime102 = __toESM(require_jsx_runtime(), 1); function ActionWithModal({ action, items, ActionTriggerComponent }) { const [isModalOpen, setIsModalOpen] = (0, import_element59.useState)(false); const actionTriggerProps = { action, onClick: () => { setIsModalOpen(true); }, items }; return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(ActionTriggerComponent, { ...actionTriggerProps }), isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( ActionModal, { action, items, closeModal: () => setIsModalOpen(false) } ) ] }); } function useHasAPossibleBulkAction(actions, item) { return (0, import_element59.useMemo)(() => { return actions.some((action) => { return action.supportsBulk && (!action.isEligible || action.isEligible(item)); }); }, [actions, item]); } function useSomeItemHasAPossibleBulkAction(actions, data) { return (0, import_element59.useMemo)(() => { return data.some((item) => { return actions.some((action) => { return action.supportsBulk && (!action.isEligible || action.isEligible(item)); }); }); }, [actions, data]); } function BulkSelectionCheckbox({ selection, onChangeSelection, data, actions, getItemId, disableSelectAll = false }) { const selectableItems = (0, import_element59.useMemo)(() => { return data.filter((item) => { return actions.some( (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) ); }); }, [data, actions]); const selectedItems = data.filter( (item) => selection.includes(getItemId(item)) && selectableItems.includes(item) ); const hasSelection = selection.length > 0; const areAllSelected = selectedItems.length === selectableItems.length; if (disableSelectAll) { return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( import_components3.CheckboxControl, { className: "dataviews-view-table-selection-checkbox", checked: hasSelection, disabled: !hasSelection, onChange: () => { onChangeSelection([]); }, "aria-label": (0, import_i18n9.__)("Deselect all") } ); } return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( import_components3.CheckboxControl, { className: "dataviews-view-table-selection-checkbox", checked: areAllSelected, indeterminate: !areAllSelected && !!selectedItems.length, onChange: () => { if (areAllSelected) { onChangeSelection([]); } else { onChangeSelection( selectableItems.map((item) => getItemId(item)) ); } }, "aria-label": areAllSelected ? (0, import_i18n9.__)("Deselect all") : (0, import_i18n9.__)("Select all") } ); } function ActionTrigger({ action, onClick, isBusy, items }) { const label = typeof action.label === "string" ? action.label : action.label(items); const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); if (isMobile) { return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( import_components3.Button, { disabled: isBusy, accessibleWhenDisabled: true, label, icon: action.icon, size: "compact", onClick, isBusy } ); } return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( import_components3.Button, { disabled: isBusy, accessibleWhenDisabled: true, size: "compact", onClick, isBusy, children: label } ); } var EMPTY_ARRAY2 = []; function ActionButton({ action, selectedItems, actionInProgress, setActionInProgress }) { const registry = (0, import_data2.useRegistry)(); const selectedEligibleItems = (0, import_element59.useMemo)(() => { return selectedItems.filter((item) => { return !action.isEligible || action.isEligible(item); }); }, [action, selectedItems]); if ("RenderModal" in action) { return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( ActionWithModal, { action, items: selectedEligibleItems, ActionTriggerComponent: ActionTrigger }, action.id ); } return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( ActionTrigger, { action, onClick: async () => { setActionInProgress(action.id); await action.callback(selectedItems, { registry }); setActionInProgress(null); }, items: selectedEligibleItems, isBusy: actionInProgress === action.id }, action.id ); } function renderFooterContent(data, actions, getItemId, isInfiniteScroll, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo) { const message2 = getFooterMessage( selection.length, data.length, paginationInfo.totalItems, isInfiniteScroll ); return /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)( Stack, { direction: "row", className: "dataviews-bulk-actions-footer__container", gap: "md", align: "center", children: [ /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( BulkSelectionCheckbox, { selection, onChangeSelection, data, actions, getItemId, disableSelectAll: isInfiniteScroll } ), /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }), /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)( Stack, { direction: "row", className: "dataviews-bulk-actions-footer__action-buttons", gap: "xs", children: [ actionsToShow.map((action) => { return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( ActionButton, { action, selectedItems, actionInProgress, setActionInProgress }, action.id ); }), selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( import_components3.Button, { icon: close_small_default, showTooltip: true, tooltipPosition: "top", size: "compact", label: (0, import_i18n9.__)("Cancel"), disabled: !!actionInProgress, accessibleWhenDisabled: false, onClick: () => { onChangeSelection(EMPTY_ARRAY2); } } ) ] } ) ] } ); } function FooterContent({ selection, actions, onChangeSelection, data, getItemId, isInfiniteScroll, paginationInfo }) { const [actionInProgress, setActionInProgress] = (0, import_element59.useState)( null ); const footerContentRef = (0, import_element59.useRef)(void 0); const isMobile = (0, import_compose2.useViewportMatch)("medium", "<"); const bulkActions = (0, import_element59.useMemo)( () => actions.filter((action) => action.supportsBulk), [actions] ); const selectableItems = (0, import_element59.useMemo)(() => { return data.filter((item) => { return bulkActions.some( (action) => !action.isEligible || action.isEligible(item) ); }); }, [data, bulkActions]); const selectedItems = (0, import_element59.useMemo)(() => { return data.filter( (item) => selection.includes(getItemId(item)) && selectableItems.includes(item) ); }, [selection, data, getItemId, selectableItems]); const actionsToShow = (0, import_element59.useMemo)( () => actions.filter((action) => { return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some( (item) => !action.isEligible || action.isEligible(item) ); }), [actions, selectedItems, isMobile] ); if (!actionInProgress) { if (footerContentRef.current) { footerContentRef.current = void 0; } return renderFooterContent( data, actions, getItemId, isInfiniteScroll, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo ); } else if (!footerContentRef.current) { footerContentRef.current = renderFooterContent( data, actions, getItemId, isInfiniteScroll, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection, paginationInfo ); } return footerContentRef.current; } function BulkActionsFooter() { const { data, selection, actions = EMPTY_ARRAY2, onChangeSelection, getItemId, paginationInfo, view } = (0, import_element59.useContext)(dataviews_context_default); return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( FooterContent, { selection, onChangeSelection, data, actions, getItemId, isInfiniteScroll: !!view.infiniteScrollEnabled, paginationInfo } ); } // packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs var import_i18n10 = __toESM(require_i18n(), 1); var import_components4 = __toESM(require_components(), 1); var import_element60 = __toESM(require_element(), 1); // packages/dataviews/build-module/utils/get-hideable-fields.mjs function getHideableFields(view, fields) { const togglableFields = [ view?.titleField, view?.mediaField, view?.descriptionField ].filter(Boolean); return fields.filter( (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false ); } // packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs var import_jsx_runtime103 = __toESM(require_jsx_runtime(), 1); var { Menu: Menu2 } = unlock2(import_components4.privateApis); function WithMenuSeparators({ children }) { return import_element60.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(import_element60.Fragment, { children: [ i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Separator, {}), child ] }, i2)); } var _HeaderMenu = (0, import_element60.forwardRef)(function HeaderMenu({ fieldId, view, fields, onChangeView, onHide, setOpenedFilter, canMove = true, canInsertLeft = true, canInsertRight = true }, ref) { const visibleFieldIds = view.fields ?? []; const index2 = visibleFieldIds?.indexOf(fieldId); const isSorted = view.sort?.field === fieldId; let isHidable = false; let isSortable = false; let canAddFilter = false; let operators = []; const field = fields.find((f2) => f2.id === fieldId); const { setIsShowingFilter } = (0, import_element60.useContext)(dataviews_context_default); if (!field) { return null; } isHidable = field.enableHiding !== false; isSortable = field.enableSorting !== false; const header = field.header; operators = !!field.filterBy && field.filterBy?.operators || []; canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; if (!isSortable && !canMove && !isHidable && !canAddFilter) { return header; } const hiddenFields = getHideableFields(view, fields).filter( (f2) => !visibleFieldIds.includes(f2.id) ); const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; const isRtl = (0, import_i18n10.isRTL)(); return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Menu2, { children: [ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)( Menu2.TriggerButton, { render: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( import_components4.Button, { size: "compact", className: "dataviews-view-table-header-button", ref, variant: "tertiary" } ), children: [ header, view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) ] } ), /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(WithMenuSeparators, { children: [ isSortable && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map( (direction) => { const isChecked = view.sort && isSorted && view.sort.direction === direction; const value = `${fieldId}-${direction}`; return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.RadioItem, { name: "view-table-sorting", value, checked: isChecked, onChange: () => { onChangeView({ ...view, sort: { field: fieldId, direction }, showLevels: false }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] }) }, value ); } ) }), canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { prefix: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_components4.Icon, { icon: funnel_default }), onClick: () => { setOpenedFilter(fieldId); setIsShowingFilter(true); onChangeView({ ...view, page: 1, filters: [ ...view.filters || [], { field: fieldId, value: void 0, operator: operators[0] } ] }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Add filter") }) } ) }), (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Menu2.Group, { children: [ canMove && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { prefix: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_components4.Icon, { icon: arrow_left_default }), disabled: isRtl ? index2 >= visibleFieldIds.length - 1 : index2 < 1, onClick: () => { const targetIndex = isRtl ? index2 + 1 : index2 - 1; const newFields = [ ...visibleFieldIds ]; newFields.splice(index2, 1); newFields.splice( targetIndex, 0, fieldId ); onChangeView({ ...view, fields: newFields }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Move left") }) } ), canMove && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { prefix: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_components4.Icon, { icon: arrow_right_default }), disabled: isRtl ? index2 < 1 : index2 >= visibleFieldIds.length - 1, onClick: () => { const targetIndex = isRtl ? index2 - 1 : index2 + 1; const newFields = [ ...visibleFieldIds ]; newFields.splice(index2, 1); newFields.splice( targetIndex, 0, fieldId ); onChangeView({ ...view, fields: newFields }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Move right") }) } ), canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Menu2, { children: [ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Insert left") }) }), /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { const insertIndex = isRtl ? index2 + 1 : index2; return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { onClick: () => { onChangeView({ ...view, fields: [ ...visibleFieldIds.slice( 0, insertIndex ), hiddenField.id, ...visibleFieldIds.slice( insertIndex ) ] }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) }, hiddenField.id ); }) }) ] }), canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Menu2, { children: [ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Insert right") }) }), /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => { const insertIndex = isRtl ? index2 : index2 + 1; return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { onClick: () => { onChangeView({ ...view, fields: [ ...visibleFieldIds.slice( 0, insertIndex ), hiddenField.id, ...visibleFieldIds.slice( insertIndex ) ] }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: hiddenField.label }) }, hiddenField.id ); }) }) ] }), isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( Menu2.Item, { prefix: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_components4.Icon, { icon: unseen_default }), onClick: () => { onHide(field); onChangeView({ ...view, fields: visibleFieldIds.filter( (id) => id !== fieldId ) }); }, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Menu2.ItemLabel, { children: (0, import_i18n10.__)("Hide column") }) } ) ] }) ] }) }) ] }); }); var ColumnHeaderMenu = _HeaderMenu; var column_header_menu_default = ColumnHeaderMenu; // packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs var import_element61 = __toESM(require_element(), 1); var import_jsx_runtime104 = __toESM(require_jsx_runtime(), 1); function getClickableItemProps({ item, isItemClickable, onClickItem, className }) { if (!isItemClickable(item) || !onClickItem) { return { className }; } return { className: className ? `${className} ${className}--clickable` : void 0, role: "button", tabIndex: 0, onClick: (event) => { event.stopPropagation(); onClickItem(item); }, onKeyDown: (event) => { if (event.key === "Enter" || event.key === "" || event.key === " ") { event.stopPropagation(); onClickItem(item); } } }; } function ItemClickWrapper({ item, isItemClickable, onClickItem, renderItemLink, className, children, ...extraProps }) { if (!isItemClickable(item)) { return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { className, ...extraProps, children }); } if (renderItemLink) { const renderedElement = renderItemLink({ item, className: `${className} ${className}--clickable`, ...extraProps, children }); return (0, import_element61.cloneElement)(renderedElement, { onClick: (event) => { event.stopPropagation(); if (renderedElement.props.onClick) { renderedElement.props.onClick(event); } }, onKeyDown: (event) => { if (event.key === "Enter" || event.key === "" || event.key === " ") { event.stopPropagation(); if (renderedElement.props.onKeyDown) { renderedElement.props.onKeyDown(event); } } } }); } const clickProps = getClickableItemProps({ item, isItemClickable, onClickItem, className }); return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { ...clickProps, ...extraProps, children }); } // packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs var import_jsx_runtime105 = __toESM(require_jsx_runtime(), 1); function ColumnPrimary({ item, level, titleField, mediaField, descriptionField, onClickItem, renderItemLink, isItemClickable }) { return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ mediaField && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( ItemClickWrapper, { item, isItemClickable, onClickItem, renderItemLink, className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( mediaField.render, { item, field: mediaField, config: { sizes: "32px" } } ) } ), /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)( Stack, { direction: "column", align: "flex-start", className: "dataviews-view-table__primary-column-content", children: [ titleField && /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)( ItemClickWrapper, { item, isItemClickable, onClickItem, renderItemLink, className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", children: [ level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("span", { className: "dataviews-view-table__level", children: [ Array(level).fill("\u2014").join(" "), "\xA0" ] }), /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(titleField.render, { item, field: titleField }) ] } ), descriptionField && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( descriptionField.render, { item, field: descriptionField } ) ] } ) ] }); } var column_primary_default = ColumnPrimary; // packages/dataviews/build-module/components/dataviews-layouts/table/use-scroll-state.mjs var import_element62 = __toESM(require_element(), 1); var import_i18n11 = __toESM(require_i18n(), 1); var isScrolledToEnd = (element) => { if ((0, import_i18n11.isRTL)()) { const scrollLeft = Math.abs(element.scrollLeft); return scrollLeft <= 1; } return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; }; function useScrollState({ scrollContainerRef, enabledHorizontal = false }) { const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element62.useState)(false); const [isVerticallyScrolled, setIsVerticallyScrolled] = (0, import_element62.useState)(false); const handleScroll = (0, import_element62.useCallback)(() => { const scrollContainer = scrollContainerRef.current; if (!scrollContainer) { return; } if (enabledHorizontal) { setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); } setIsVerticallyScrolled(scrollContainer.scrollTop > 0); }, [scrollContainerRef, enabledHorizontal]); (0, import_element62.useEffect)(() => { if (typeof window === "undefined" || !scrollContainerRef.current) { return () => { }; } const scrollContainer = scrollContainerRef.current; handleScroll(); scrollContainer.addEventListener("scroll", handleScroll); window.addEventListener("resize", handleScroll); return () => { scrollContainer.removeEventListener("scroll", handleScroll); window.removeEventListener("resize", handleScroll); }; }, [scrollContainerRef, enabledHorizontal, handleScroll]); return { isHorizontalScrollEnd, isVerticallyScrolled }; } // packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs function getDataByGroup(data, groupByField) { return data.reduce((groups, item) => { const groupName = groupByField.getValue({ item }); if (!groups.has(groupName)) { groups.set(groupName, []); } groups.get(groupName)?.push(item); return groups; }, /* @__PURE__ */ new Map()); } // packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs var import_components5 = __toESM(require_components(), 1); var import_i18n12 = __toESM(require_i18n(), 1); var import_element63 = __toESM(require_element(), 1); var import_jsx_runtime106 = __toESM(require_jsx_runtime(), 1); function FieldItem3({ field, isVisible: isVisible2, onToggleVisibility }) { return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(import_components5.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(import_components5.Icon, { icon: check_default }) }), /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) ] }) }); } function isDefined(item) { return !!item; } function PropertiesSection({ showLabel = true }) { const { view, fields, onChangeView } = (0, import_element63.useContext)(dataviews_context_default); const regularFields = getHideableFields(view, fields); if (!regularFields?.length) { return null; } const titleField = fields.find((f2) => f2.id === view.titleField); const previewField = fields.find((f2) => f2.id === view.mediaField); const descriptionField = fields.find( (f2) => f2.id === view.descriptionField ); const lockedFields = [ { field: titleField, isVisibleFlag: "showTitle" }, { field: previewField, isVisibleFlag: "showMedia" }, { field: descriptionField, isVisibleFlag: "showDescription" } ].filter(({ field }) => isDefined(field)); const visibleFieldIds = view.fields ?? []; const visibleRegularFieldsCount = regularFields.filter( (f2) => visibleFieldIds.includes(f2.id) ).length; const visibleLockedFields = lockedFields.filter( ({ isVisibleFlag }) => ( // @ts-expect-error view[isVisibleFlag] ?? true ) ); const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ showLabel && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(import_components5.BaseControl.VisualLabel, { children: (0, import_i18n12.__)("Properties") }), /* @__PURE__ */ (0, import_jsx_runtime106.jsx)( Stack, { direction: "column", className: "dataviews-view-config__properties", children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(import_components5.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ lockedFields.map(({ field, isVisibleFlag }) => { const isVisible2 = view[isVisibleFlag] ?? true; const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)( FieldItem3, { field: fieldToRender, isVisible: isVisible2, onToggleVisibility: () => { onChangeView({ ...view, [isVisibleFlag]: !isVisible2 }); } }, field.id ); }), regularFields.map((field) => { const isVisible2 = visibleFieldIds.includes(field.id); const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)( FieldItem3, { field: fieldToRender, isVisible: isVisible2, onToggleVisibility: () => { onChangeView({ ...view, fields: isVisible2 ? visibleFieldIds.filter( (fieldId) => fieldId !== field.id ) : [...visibleFieldIds, field.id] }); } }, field.id ); }) ] }) } ) ] }); } // packages/dataviews/build-module/hooks/use-delayed-loading.mjs var import_element64 = __toESM(require_element(), 1); function useDelayedLoading(isLoading, options = { delay: 400 }) { const [showLoader, setShowLoader] = (0, import_element64.useState)(false); (0, import_element64.useEffect)(() => { if (!isLoading) { return; } const timeout = setTimeout(() => { setShowLoader(true); }, options.delay); return () => { clearTimeout(timeout); setShowLoader(false); }; }, [isLoading, options.delay]); return showLoader; } // packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs var import_jsx_runtime107 = __toESM(require_jsx_runtime(), 1); function getEffectiveAlign(explicitAlign, fieldType) { if (explicitAlign) { return explicitAlign; } if (fieldType === "integer" || fieldType === "number") { return "end"; } return void 0; } function TableColumnField({ item, fields, column, align }) { const field = fields.find((f2) => f2.id === column); if (!field) { return null; } const className = clsx_default("dataviews-view-table__cell-content-wrapper", { "dataviews-view-table__cell-align-end": align === "end", "dataviews-view-table__cell-align-center": align === "center" }); return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(field.render, { item, field }) }); } function TableRow({ hasBulkActions, item, level, actions, fields, id, view, titleField, mediaField, descriptionField, selection, getItemId, isItemClickable, onClickItem, renderItemLink, onChangeSelection, isActionsColumnSticky, posinset }) { const { paginationInfo } = (0, import_element65.useContext)(dataviews_context_default); const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); const isSelected2 = hasPossibleBulkAction && selection.includes(id); const { showTitle = true, showMedia = true, showDescription = true, infiniteScrollEnabled } = view; const isTouchDeviceRef = (0, import_element65.useRef)(false); const columns = view.fields ?? []; const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; return /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)( "tr", { className: clsx_default("dataviews-view-table__row", { "is-selected": hasPossibleBulkAction && isSelected2, "has-bulk-actions": hasPossibleBulkAction }), onTouchStart: () => { isTouchDeviceRef.current = true; }, "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, "aria-posinset": posinset, role: infiniteScrollEnabled ? "article" : void 0, onMouseDown: (event) => { const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { event?.preventDefault(); } }, onClick: (event) => { if (!hasPossibleBulkAction) { return; } const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") { onChangeSelection( selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] ); } }, children: [ hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( DataViewsSelectionCheckbox, { item, selection, onChangeSelection, getItemId, titleField, disabled: !hasPossibleBulkAction } ) }) }), hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( column_primary_default, { item, level, titleField: showTitle ? titleField : void 0, mediaField: showMedia ? mediaField : void 0, descriptionField: showDescription ? descriptionField : void 0, isItemClickable, onClickItem, renderItemLink } ) }), columns.map((column) => { const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; const field = fields.find((f2) => f2.id === column); const effectiveAlign = getEffectiveAlign(align, field?.type); return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "td", { style: { width, maxWidth, minWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( TableColumnField, { fields, item, column, align: effectiveAlign } ) }, column ); }), !!actions?.length && // Disable reason: we are not making the element interactive, // but preventing any click events from bubbling up to the // table row. This allows us to add a click handler to the row // itself (to toggle row selection) without erroneously // intercepting click events from ItemActions. /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "td", { className: clsx_default("dataviews-view-table__actions-column", { "dataviews-view-table__actions-column--sticky": true, "dataviews-view-table__actions-column--stuck": isActionsColumnSticky }), onClick: (e2) => e2.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(ItemActions, { item, actions }) } ) ] } ); } function ViewTable({ actions, data, fields, getItemId, getItemLevel, isLoading = false, onChangeView, onChangeSelection, selection, setOpenedFilter, onClickItem, isItemClickable, renderItemLink, view, className, empty }) { const { containerRef } = (0, import_element65.useContext)(dataviews_context_default); const isDelayedLoading = useDelayedLoading(isLoading); const headerMenuRefs = (0, import_element65.useRef)(/* @__PURE__ */ new Map()); const headerMenuToFocusRef = (0, import_element65.useRef)(void 0); const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element65.useState)(); const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element65.useState)(null); (0, import_element65.useEffect)(() => { if (headerMenuToFocusRef.current) { headerMenuToFocusRef.current.focus(); headerMenuToFocusRef.current = void 0; } }); const tableNoticeId = (0, import_element65.useId)(); const { isHorizontalScrollEnd, isVerticallyScrolled } = useScrollState({ scrollContainerRef: containerRef, enabledHorizontal: !!actions?.length }); const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); if (nextHeaderMenuToFocus) { headerMenuToFocusRef.current = nextHeaderMenuToFocus; setNextHeaderMenuToFocus(void 0); return; } const onHide = (field) => { const hidden = headerMenuRefs.current.get(field.id); const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; setNextHeaderMenuToFocus(fallback?.node); }; const handleHeaderContextMenu = (event) => { event.preventDefault(); event.stopPropagation(); const virtualAnchor = { getBoundingClientRect: () => ({ x: event.clientX, y: event.clientY, top: event.clientY, left: event.clientX, right: event.clientX, bottom: event.clientY, width: 0, height: 0, toJSON: () => ({}) }) }; window.requestAnimationFrame(() => { setContextMenuAnchor(virtualAnchor); }); }; const hasData = !!data?.length; const titleField = fields.find((field) => field.id === view.titleField); const mediaField = fields.find((field) => field.id === view.mediaField); const descriptionField = fields.find( (field) => field.id === view.descriptionField ); const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; const { showTitle = true, showMedia = true, showDescription = true } = view; const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; const columns = view.fields ?? []; const headerMenuRef = (column, index2) => (node) => { if (node) { headerMenuRefs.current.set(column, { node, fallback: columns[index2 > 0 ? index2 - 1 : 1] }); } else { headerMenuRefs.current.delete(column); } }; const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; const isRtl = (0, import_i18n13.isRTL)(); if (!hasData) { return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "div", { className: clsx_default("dataviews-no-results", { "is-refreshing": isDelayedLoading }), id: tableNoticeId, children: empty } ); } return /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)( "table", { className: clsx_default("dataviews-view-table", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( view.layout.density ), "has-bulk-actions": hasBulkActions, "is-refreshing": !isInfiniteScroll && isDelayedLoading }), "aria-busy": isLoading, "aria-describedby": tableNoticeId, role: isInfiniteScroll ? "feed" : void 0, inert: !isInfiniteScroll && isLoading ? "true" : void 0, children: [ /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("colgroup", { children: [ hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("col", { className: "dataviews-view-table__col-first-data" }), columns.map((column, index2) => /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "col", { className: clsx_default( `dataviews-view-table__col-${column}`, { "dataviews-view-table__col-expand": !hasPrimaryColumn && index2 === columns.length - 1 } ) }, `col-${column}` )), !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("col", { className: "dataviews-view-table__col-actions" }) ] }), contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( import_components6.Popover, { anchor: contextMenuAnchor, onClose: () => setContextMenuAnchor(null), placement: "bottom-start", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(PropertiesSection, { showLabel: false }) } ), /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "thead", { className: clsx_default({ "dataviews-view-table__thead--stuck": isVerticallyScrolled }), onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("tr", { className: "dataviews-view-table__row", children: [ hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "th", { className: "dataviews-view-table__checkbox-column", scope: "col", onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( BulkSelectionCheckbox, { selection, onChangeSelection, data, actions, getItemId } ) } ), hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( column_header_menu_default, { ref: headerMenuRef( titleField.id, 0 ), fieldId: titleField.id, view, fields, onChangeView, onHide, setOpenedFilter, canMove: false, canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true } ) }), columns.map((column, index2) => { const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; const field = fields.find( (f2) => f2.id === column ); const effectiveAlign = getEffectiveAlign( align, field?.type ); const canInsertOrMove = view.layout?.enableMoving ?? true; return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "th", { style: { width, maxWidth, minWidth, textAlign: effectiveAlign }, "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, scope: "col", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( column_header_menu_default, { ref: headerMenuRef(column, index2), fieldId: column, view, fields, onChangeView, onHide, setOpenedFilter, canMove: canInsertOrMove, canInsertLeft: canInsertOrMove, canInsertRight: canInsertOrMove } ) }, column ); }), !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "th", { className: clsx_default( "dataviews-view-table__actions-column", { "dataviews-view-table__actions-column--sticky": true, "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd } ), children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n13.__)("Actions") }) } ) ] }) } ), hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("tbody", { children: [ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( "td", { colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), className: "dataviews-view-table__group-header-cell", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n13.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n13.__)("%1$s: %2$s"), groupField.label, groupName ) } ) }), groupItems.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( TableRow, { item, level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, hasBulkActions, actions, fields, id: getItemId(item) || index2.toString(), view, titleField, mediaField, descriptionField, selection, getItemId, onChangeSelection, onClickItem, renderItemLink, isItemClickable, isActionsColumnSticky: !isHorizontalScrollEnd }, getItemId(item) )) ] }, `group-${groupName}`) ) : /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("tbody", { children: hasData && data.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime107.jsx)( TableRow, { item, level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, hasBulkActions, actions, fields, id: getItemId(item) || index2.toString(), view, titleField, mediaField, descriptionField, selection, getItemId, onChangeSelection, onClickItem, renderItemLink, isItemClickable, isActionsColumnSticky: !isHorizontalScrollEnd, posinset: isInfiniteScroll ? index2 + 1 : void 0 }, getItemId(item) )) }) ] } ), isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(import_components6.Spinner, {}) }) }) ] }); } var table_default = ViewTable; // packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs var import_components9 = __toESM(require_components(), 1); var import_i18n16 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs var import_components8 = __toESM(require_components(), 1); var import_i18n15 = __toESM(require_i18n(), 1); var import_compose3 = __toESM(require_compose(), 1); var import_keycodes2 = __toESM(require_keycodes(), 1); var import_element69 = __toESM(require_element(), 1); // packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs var import_components7 = __toESM(require_components(), 1); var import_i18n14 = __toESM(require_i18n(), 1); var import_element66 = __toESM(require_element(), 1); var import_jsx_runtime108 = __toESM(require_jsx_runtime(), 1); var imageSizes = [ { value: 120, breakpoint: 1 }, { value: 170, breakpoint: 1 }, { value: 230, breakpoint: 1 }, { value: 290, breakpoint: 1112 // at minimum image width, 4 images display at this container size }, { value: 350, breakpoint: 1636 // at minimum image width, 6 images display at this container size }, { value: 430, breakpoint: 588 // at minimum image width, 2 images display at this container size } ]; var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; function useGridColumns() { const context = (0, import_element66.useContext)(dataviews_context_default); const view = context.view; return (0, import_element66.useMemo)(() => { const containerWidth = context.containerWidth; const gap = 32; const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; const columns = Math.floor( (containerWidth + gap) / (previewSize + gap) ); return Math.max(1, columns); }, [context.containerWidth, view.layout?.previewSize]); } // packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs var import_element67 = __toESM(require_element(), 1); var import_jsx_runtime109 = __toESM(require_jsx_runtime(), 1); var GridItems = (0, import_element67.forwardRef)(({ className, previewSize, ...props }, ref) => { return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)( "div", { ref, className: clsx_default("dataviews-view-grid-items", className), style: { gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))` }, ...props } ); }); // packages/dataviews/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs var import_element68 = __toESM(require_element(), 1); function useIntersectionObserver(elementRef, posinset) { const { intersectionObserver } = (0, import_element68.useContext)(dataviews_context_default); (0, import_element68.useEffect)(() => { const element = elementRef.current; if (!element || posinset === void 0 || !intersectionObserver) { return; } intersectionObserver.observe(element); return () => { intersectionObserver.unobserve(element); }; }, [elementRef, intersectionObserver, posinset]); } function usePlaceholdersNeeded(data, isInfiniteScroll, gridColumns) { const hasData = !!data?.length; const firstItemPosition = hasData && isInfiniteScroll ? data[0].position : void 0; return firstItemPosition && gridColumns ? (firstItemPosition - 1) % gridColumns : 0; } // packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs var import_jsx_runtime110 = __toESM(require_jsx_runtime(), 1); var { Badge: WCBadge } = unlock2(import_components8.privateApis); function chunk(array, size4) { const chunks = []; for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size4) { chunks.push(array.slice(i2, i2 + size4)); } return chunks; } var GridItem = (0, import_element69.forwardRef)( function GridItem2({ view, selection, onChangeSelection, onClickItem, isItemClickable, renderItemLink, getItemId, item, actions, mediaField, titleField, descriptionField, regularFields, badgeFields, hasBulkActions, config, posinset, setsize, ...props }, forwardedRef) { const { showTitle = true, showMedia = true, showDescription = true } = view; const hasBulkAction = useHasAPossibleBulkAction(actions, item); const id = getItemId(item); const elementRef = (0, import_element69.useRef)(null); const setRefs = (0, import_element69.useCallback)( (node) => { elementRef.current = node; if (typeof forwardedRef === "function") { forwardedRef(node); } else if (forwardedRef) { forwardedRef.current = node; } }, [forwardedRef] ); useIntersectionObserver(elementRef, posinset); const instanceId = (0, import_compose3.useInstanceId)(GridItem2); const isSelected2 = selection.includes(id); const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); const rendersMediaField = showMedia && mediaField?.render; const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( mediaField.render, { item, field: mediaField, config } ) : mediaPlaceholder; const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(titleField.render, { item, field: titleField }) : null; let mediaA11yProps; let titleA11yProps; if (isItemClickable(item) && onClickItem) { if (renderedTitleField) { mediaA11yProps = { "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}` }; titleA11yProps = { id: `dataviews-view-grid__title-field-${instanceId}` }; } else { mediaA11yProps = { "aria-label": (0, import_i18n15.__)("Navigate to item") }; } } return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)( Stack, { direction: "column", ...props, ref: setRefs, "aria-setsize": setsize, "aria-posinset": posinset, className: clsx_default( props.className, "dataviews-view-grid__row__gridcell", "dataviews-view-grid__card", { "is-selected": hasBulkAction && isSelected2 } ), onClickCapture: (event) => { props.onClickCapture?.(event); if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) { event.stopPropagation(); event.preventDefault(); if (!hasBulkAction) { return; } onChangeSelection( isSelected2 ? selection.filter( (itemId) => id !== itemId ) : [...selection, id] ); } }, children: [ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( ItemClickWrapper, { item, isItemClickable, onClickItem, renderItemLink, className: clsx_default("dataviews-view-grid__media", { "dataviews-view-grid__media--placeholder": !rendersMediaField }), ...mediaA11yProps, children: renderedMediaField } ), hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( DataViewsSelectionCheckbox, { item, selection, onChangeSelection, getItemId, titleField, disabled: !hasBulkAction } ), !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( ItemActions, { item, actions, isCompact: true } ) }), showTitle && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "dataviews-view-grid__title-actions", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( ItemClickWrapper, { item, isItemClickable, onClickItem, renderItemLink, className: "dataviews-view-grid__title-field dataviews-title-field", ...titleA11yProps, title: titleField?.getValueFormatted({ item, field: titleField }) || void 0, children: renderedTitleField } ) }), /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(Stack, { direction: "column", gap: "xs", children: [ showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( descriptionField.render, { item, field: descriptionField } ), !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( Stack, { direction: "row", className: "dataviews-view-grid__badge-fields", gap: "sm", wrap: "wrap", align: "top", justify: "flex-start", children: badgeFields.map((field) => { return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( WCBadge, { className: "dataviews-view-grid__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( field.render, { item, field } ) }, field.id ); }) } ), !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( Stack, { direction: "column", className: "dataviews-view-grid__fields", gap: "xs", children: regularFields.map((field) => { return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Flex, { className: "dataviews-view-grid__field", gap: 1, justify: "flex-start", expanded: true, style: { height: "auto" }, direction: "row", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(tooltip_exports.Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( tooltip_exports.Trigger, { render: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(import_components8.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) } ), /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(tooltip_exports.Popup, { children: field.label }) ] }), /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.FlexItem, { className: "dataviews-view-grid__field-value", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( field.render, { item, field } ) } ) ] }) }, field.id ); }) } ) ] }) ] } ); } ); function CompositeGrid({ data, isInfiniteScroll, className, inert, isLoading, view, fields, selection, onChangeSelection, onClickItem, isItemClickable, renderItemLink, getItemId, actions }) { const { paginationInfo, resizeObserverRef } = (0, import_element69.useContext)(dataviews_context_default); const gridColumns = useGridColumns(); const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); const titleField = fields.find( (field) => field.id === view?.titleField ); const mediaField = fields.find( (field) => field.id === view?.mediaField ); const descriptionField = fields.find( (field) => field.id === view?.descriptionField ); const otherFields = view.fields ?? []; const { regularFields, badgeFields } = otherFields.reduce( (accumulator, fieldId) => { const field = fields.find((f2) => f2.id === fieldId); if (!field) { return accumulator; } const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; accumulator[key].push(field); return accumulator; }, { regularFields: [], badgeFields: [] } ); const size4 = "900px"; const totalRows = Math.ceil(data.length / gridColumns); const placeholdersNeeded = usePlaceholdersNeeded( data, isInfiniteScroll, gridColumns ); return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment, { // Render infinite scroll layout (no rows, feed semantics) children: [ isInfiniteScroll && /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)( import_components8.Composite, { render: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( GridItems, { className: clsx_default( "dataviews-view-grid-infinite-scroll", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && [ "compact", "comfortable" ].includes(view.layout.density) } ), previewSize: view.layout?.previewSize, "aria-busy": isLoading, ref: resizeObserverRef } ), role: "feed", focusWrap: true, inert, children: [ Array.from({ length: placeholdersNeeded }).map( (_, index2) => /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Composite.Item, { render: (props) => /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( Stack, { ...props, direction: "column", role: "article", className: "dataviews-view-grid__row__gridcell dataviews-view-grid__card dataviews-view-grid__placeholder" } ), "aria-hidden": true, tabIndex: -1 }, `placeholder-${index2}` ) ), data.map((item) => { const itemId = getItemId(item); const stablePosition = item.position; return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Composite.Item, { render: (props) => /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( GridItem, { ...props, id: itemId, role: "article", view, selection, onChangeSelection, onClickItem, isItemClickable, renderItemLink, getItemId, item, actions, mediaField, titleField, descriptionField, regularFields, badgeFields, hasBulkActions, posinset: stablePosition, setsize: paginationInfo.totalItems, config: { sizes: size4 } } ) }, itemId ); }) ] } ), // Render standard grid layout (with rows, grid semantics) !isInfiniteScroll && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Composite, { role: "grid", className: clsx_default("dataviews-view-grid", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( view.layout.density ) }), focusWrap: true, "aria-busy": isLoading, "aria-rowcount": totalRows, ref: resizeObserverRef, inert, children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Composite.Row, { render: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( "div", { role: "row", "aria-rowindex": i2 + 1, "aria-label": (0, import_i18n15.sprintf)( /* translators: %d: The row number in the grid */ (0, import_i18n15.__)("Row %d"), i2 + 1 ), className: "dataviews-view-grid__row", style: { gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )` } } ), children: row.map((item) => { const itemId = getItemId(item); return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( import_components8.Composite.Item, { render: (props) => /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( GridItem, { ...props, id: itemId, role: "gridcell", view, selection, onChangeSelection, onClickItem, isItemClickable, renderItemLink, getItemId, item, actions, mediaField, titleField, descriptionField, regularFields, badgeFields, hasBulkActions, config: { sizes: size4 } } ) }, itemId ); }) }, i2 )) } ) ] }); } // packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs var import_jsx_runtime111 = __toESM(require_jsx_runtime(), 1); function ViewGrid({ actions, data, fields, getItemId, isLoading, onChangeSelection, onClickItem, isItemClickable, renderItemLink, selection, view, className, empty }) { const isDelayedLoading = useDelayedLoading(!!isLoading); const hasData = !!data?.length; const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; if (!hasData) { return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)( "div", { className: clsx_default("dataviews-no-results", { "is-refreshing": isDelayedLoading }), children: empty } ); } const gridProps = { className: clsx_default(className, { "is-refreshing": !isInfiniteScroll && isDelayedLoading }), inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, isLoading, view, fields, selection, onChangeSelection, onClickItem, isItemClickable, renderItemLink, getItemId, actions }; return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(import_jsx_runtime111.Fragment, { // Render multiple groups. children: [ hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)( Stack, { direction: "column", gap: "sm", children: [ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n16.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n16.__)("%1$s: %2$s"), groupField.label, groupName ) }), /* @__PURE__ */ (0, import_jsx_runtime111.jsx)( CompositeGrid, { ...gridProps, data: groupItems, isInfiniteScroll: false } ) ] }, groupName ) ) }), // Render a single grid with all data. !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)( CompositeGrid, { ...gridProps, data, isInfiniteScroll: !!isInfiniteScroll } ), isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(import_components9.Spinner, {}) }) ] }); } var grid_default = ViewGrid; // packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs var import_compose4 = __toESM(require_compose(), 1); var import_components10 = __toESM(require_components(), 1); var import_element70 = __toESM(require_element(), 1); var import_i18n17 = __toESM(require_i18n(), 1); var import_data3 = __toESM(require_data(), 1); var import_jsx_runtime112 = __toESM(require_jsx_runtime(), 1); var { Menu: Menu3 } = unlock2(import_components10.privateApis); function generateItemWrapperCompositeId(idPrefix) { return `${idPrefix}-item-wrapper`; } function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { return `${idPrefix}-primary-action-${primaryActionId}`; } function generateDropdownTriggerCompositeId(idPrefix) { return `${idPrefix}-dropdown`; } function PrimaryActionGridCell({ idPrefix, primaryAction, item }) { const registry = (0, import_data3.useRegistry)(); const [isModalOpen, setIsModalOpen] = (0, import_element70.useState)(false); const compositeItemId = generatePrimaryActionCompositeId( idPrefix, primaryAction.id ); const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite.Item, { id: compositeItemId, render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Button, { disabled: !!primaryAction.disabled, accessibleWhenDisabled: true, text: label, size: "small", onClick: () => setIsModalOpen(true) } ), children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( ActionModal, { action: primaryAction, items: [item], closeModal: () => setIsModalOpen(false) } ) } ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite.Item, { id: compositeItemId, render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Button, { disabled: !!primaryAction.disabled, accessibleWhenDisabled: true, size: "small", onClick: () => { primaryAction.callback([item], { registry }); }, children: label } ) } ) }, primaryAction.id); } function ListItem({ view, actions, idPrefix, isSelected: isSelected2, item, titleField, mediaField, descriptionField, onSelect, otherFields, onDropdownTriggerKeyDown, posinset }) { const { showTitle = true, showMedia = true, showDescription = true, infiniteScrollEnabled } = view; const itemRef = (0, import_element70.useRef)(null); const labelId = `${idPrefix}-label`; const descriptionId = `${idPrefix}-description`; const registry = (0, import_data3.useRegistry)(); const [isHovered, setIsHovered] = (0, import_element70.useState)(false); const [activeModalAction, setActiveModalAction] = (0, import_element70.useState)( null ); const handleHover = ({ type }) => { const isHover = type === "mouseenter"; setIsHovered(isHover); }; const { paginationInfo } = (0, import_element70.useContext)(dataviews_context_default); (0, import_element70.useEffect)(() => { if (isSelected2) { itemRef.current?.scrollIntoView({ behavior: "auto", block: "nearest", inline: "nearest" }); } }, [isSelected2]); const { primaryAction, eligibleActions } = (0, import_element70.useMemo)(() => { const _eligibleActions = actions.filter( (action) => !action.isEligible || action.isEligible(item) ); const _primaryActions = _eligibleActions.filter( (action) => action.isPrimary ); return { primaryAction: _primaryActions[0], eligibleActions: _eligibleActions }; }, [actions, item]); const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( mediaField.render, { item, field: mediaField, config: { sizes: "52px" } } ) }) : null; const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(titleField.render, { item, field: titleField }) : null; const renderDescription = showDescription && descriptionField?.render; const hasOnlyMediaAndTitle = !!renderedMediaField && !renderDescription && !otherFields.length; const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( Stack, { direction: "row", gap: "md", className: "dataviews-view-list__item-actions", children: [ primaryAction && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( PrimaryActionGridCell, { idPrefix, primaryAction, item } ), !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)("div", { role: "gridcell", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(Menu3, { placement: "bottom-end", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( Menu3.TriggerButton, { render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite.Item, { id: generateDropdownTriggerCompositeId( idPrefix ), render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Button, { size: "small", icon: more_vertical_default, label: (0, import_i18n17.__)("Actions"), accessibleWhenDisabled: true, disabled: !actions.length, onKeyDown: onDropdownTriggerKeyDown } ) } ) } ), /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( ActionsMenuGroup, { actions: eligibleActions, item, registry, setActiveModalAction } ) }) ] }), !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( ActionModal, { action: activeModalAction, items: [item], closeModal: () => setActiveModalAction(null) } ) ] }) ] } ); return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite.Row, { ref: itemRef, render: ( /* aria-posinset breaks Composite.Row if passed to it directly. */ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( "div", { "aria-posinset": posinset, "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 } ) ), role: infiniteScrollEnabled ? "article" : "row", className: clsx_default({ "is-selected": isSelected2, "is-hovered": isHovered }), onMouseEnter: handleHover, onMouseLeave: handleHover, children: /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( Stack, { direction: "row", className: "dataviews-view-list__item-wrapper", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite.Item, { id: generateItemWrapperCompositeId(idPrefix), "aria-pressed": isSelected2, "aria-labelledby": labelId, "aria-describedby": descriptionId, className: "dataviews-view-list__item", onClick: () => onSelect(item) } ) }), /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( Stack, { direction: "row", gap: "md", justify: "start", align: hasOnlyMediaAndTitle ? "center" : "flex-start", style: { flex: 1, minWidth: 0 }, children: [ renderedMediaField, /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( Stack, { direction: "column", gap: "xs", className: "dataviews-view-list__field-wrapper", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(Stack, { direction: "row", align: "center", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( "div", { className: "dataviews-title-field dataviews-view-list__title-field", id: labelId, children: renderedTitleField } ), usedActions ] }), renderDescription && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( descriptionField.render, { item, field: descriptionField } ) }), /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( "div", { className: "dataviews-view-list__fields", id: descriptionId, children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( "div", { className: "dataviews-view-list__field", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( VisuallyHidden, { className: "dataviews-view-list__field-label", render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", {}), children: field.label } ), /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( field.render, { item, field } ) }) ] }, field.id )) } ) ] } ) ] } ) ] } ) } ); } function isDefined2(item) { return !!item; } function ViewList(props) { const { actions, data, fields, getItemId, isLoading, onChangeSelection, selection, view, className, empty } = props; const baseId = (0, import_compose4.useInstanceId)(ViewList, "view-list"); const isDelayedLoading = useDelayedLoading(!!isLoading); const selectedItem = data?.findLast( (item) => selection.includes(getItemId(item)) ); const titleField = fields.find((field) => field.id === view.titleField); const mediaField = fields.find((field) => field.id === view.mediaField); const descriptionField = fields.find( (field) => field.id === view.descriptionField ); const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); const onSelect = (item) => onChangeSelection([getItemId(item)]); const generateCompositeItemIdPrefix = (0, import_element70.useCallback)( (item) => `${baseId}-${getItemId(item)}`, [baseId, getItemId] ); const isActiveCompositeItem = (0, import_element70.useCallback)( (item, idToCheck) => { return idToCheck.startsWith( generateCompositeItemIdPrefix(item) ); }, [generateCompositeItemIdPrefix] ); const [activeCompositeId, setActiveCompositeId] = (0, import_element70.useState)(void 0); const compositeRef = (0, import_element70.useRef)(null); (0, import_element70.useEffect)(() => { if (selectedItem) { setActiveCompositeId( generateItemWrapperCompositeId( generateCompositeItemIdPrefix(selectedItem) ) ); } }, [selectedItem, generateCompositeItemIdPrefix]); const activeItemIndex = data.findIndex( (item) => isActiveCompositeItem(item, activeCompositeId ?? "") ); const previousActiveItemIndex = (0, import_compose4.usePrevious)(activeItemIndex); const isActiveIdInList = activeItemIndex !== -1; const selectCompositeItem = (0, import_element70.useCallback)( (targetIndex, generateCompositeId) => { const clampedIndex = Math.min( data.length - 1, Math.max(0, targetIndex) ); if (!data[clampedIndex]) { return; } const itemIdPrefix = generateCompositeItemIdPrefix( data[clampedIndex] ); const targetCompositeItemId = generateCompositeId(itemIdPrefix); setActiveCompositeId(targetCompositeItemId); if (compositeRef.current?.contains( compositeRef.current.ownerDocument.activeElement )) { document.getElementById(targetCompositeItemId)?.focus(); } }, [data, generateCompositeItemIdPrefix] ); (0, import_element70.useEffect)(() => { const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; if (!isActiveIdInList && wasActiveIdInList) { selectCompositeItem( previousActiveItemIndex, generateItemWrapperCompositeId ); } }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); const onDropdownTriggerKeyDown = (0, import_element70.useCallback)( (event) => { if (event.key === "ArrowDown") { event.preventDefault(); selectCompositeItem( activeItemIndex + 1, generateDropdownTriggerCompositeId ); } if (event.key === "ArrowUp") { event.preventDefault(); selectCompositeItem( activeItemIndex - 1, generateDropdownTriggerCompositeId ); } }, [selectCompositeItem, activeItemIndex] ); const hasData = !!data?.length; const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; if (!hasData) { return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( "div", { className: clsx_default("dataviews-no-results", { "is-refreshing": isDelayedLoading }), children: empty } ); } if (hasData && groupField && dataByGroup) { return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite, { ref: compositeRef, id: `${baseId}`, render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", {}), className: "dataviews-view-list__group", role: "grid", activeId: activeCompositeId, setActiveId: setActiveCompositeId, children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( Stack, { direction: "column", gap: "lg", className: clsx_default("dataviews-view-list", className), children: Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)( Stack, { direction: "column", gap: "sm", children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n17.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n17.__)("%1$s: %2$s"), groupField.label, groupName ) }), groupItems.map((item) => { const id = generateCompositeItemIdPrefix(item); return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( ListItem, { view, idPrefix: id, actions, item, isSelected: item === selectedItem, onSelect, mediaField, titleField, descriptionField, otherFields, onDropdownTriggerKeyDown }, id ); }) ] }, groupName ) ) } ) } ); } return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(import_jsx_runtime112.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( import_components10.Composite, { ref: compositeRef, id: baseId, render: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("div", {}), className: clsx_default("dataviews-view-list", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( view.layout.density ), "is-refreshing": !isInfiniteScroll && isDelayedLoading }), role: view.infiniteScrollEnabled ? "feed" : "grid", activeId: activeCompositeId, setActiveId: setActiveCompositeId, inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, children: data.map((item, index2) => { const id = generateCompositeItemIdPrefix(item); return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( ListItem, { view, idPrefix: id, actions, item, isSelected: item === selectedItem, onSelect, mediaField, titleField, descriptionField, otherFields, onDropdownTriggerKeyDown, posinset: view.infiniteScrollEnabled ? index2 + 1 : void 0 }, id ); }) } ), isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(import_components10.Spinner, {}) }) ] }); } // packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs var import_components11 = __toESM(require_components(), 1); // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs var import_i18n18 = __toESM(require_i18n(), 1); var import_element71 = __toESM(require_element(), 1); var import_jsx_runtime113 = __toESM(require_jsx_runtime(), 1); function ActivityGroup({ groupName, groupData, groupField, showLabel = true, children }) { const groupHeader = showLabel ? (0, import_element71.createInterpolateElement)( // translators: %s: The label of the field e.g. "Status". (0, import_i18n18.sprintf)((0, import_i18n18.__)("%s: <groupName />"), groupField.label).trim(), { groupName: /* @__PURE__ */ (0, import_jsx_runtime113.jsx)( groupField.render, { item: groupData[0], field: groupField } ) } ) : /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(groupField.render, { item: groupData[0], field: groupField }); return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)( Stack, { direction: "column", className: "dataviews-view-activity__group", children: [ /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), children ] }, groupName ); } // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs var import_element72 = __toESM(require_element(), 1); var import_data4 = __toESM(require_data(), 1); var import_compose5 = __toESM(require_compose(), 1); var import_jsx_runtime114 = __toESM(require_jsx_runtime(), 1); function ActivityItem(props) { const { view, actions, item, titleField, mediaField, descriptionField, otherFields, posinset, onClickItem, renderItemLink, isItemClickable } = props; const { showTitle = true, showMedia = true, showDescription = true, infiniteScrollEnabled } = view; const itemRef = (0, import_element72.useRef)(null); const registry = (0, import_data4.useRegistry)(); const { paginationInfo } = (0, import_element72.useContext)(dataviews_context_default); const { primaryActions, eligibleActions } = (0, import_element72.useMemo)(() => { const _eligibleActions = actions.filter( (action) => !action.isEligible || action.isEligible(item) ); const _primaryActions = _eligibleActions.filter( (action) => action.isPrimary ); return { primaryActions: _primaryActions, eligibleActions: _eligibleActions }; }, [actions, item]); const isMobileViewport = (0, import_compose5.useViewportMatch)("medium", "<"); const density = view.layout?.density ?? "balanced"; const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( mediaField.render, { item, field: mediaField, config: { sizes: density === "comfortable" ? "32px" : "24px" } } ) : null; const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( "span", { className: "dataviews-view-activity__item-bullet", "aria-hidden": "true" } ) }); const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(titleField.render, { item, field: titleField }) : null; const verticalGap = (0, import_element72.useMemo)(() => { switch (density) { case "comfortable": return "md"; default: return "sm"; } }, [density]); return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( "div", { ref: itemRef, role: infiniteScrollEnabled ? "article" : void 0, "aria-posinset": posinset, "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, className: clsx_default( "dataviews-view-activity__item", density === "compact" && "is-compact", density === "balanced" && "is-balanced", density === "comfortable" && "is-comfortable" ), children: /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( Stack, { direction: "column", gap: "xs", align: "center", className: "dataviews-view-activity__item-type", children: renderedMediaField } ), /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)( Stack, { direction: "column", gap: verticalGap, align: "flex-start", className: "dataviews-view-activity__item-content", children: [ renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( ItemClickWrapper, { item, isItemClickable, onClickItem, renderItemLink, className: "dataviews-view-activity__item-title", children: renderedTitleField } ), showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( descriptionField.render, { item, field: descriptionField } ) }), /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)( "div", { className: "dataviews-view-activity__item-field", children: [ /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( VisuallyHidden, { className: "dataviews-view-activity__item-field-label", render: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("span", {}), children: field.label } ), /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( field.render, { item, field } ) }) ] }, field.id )) }), !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( PrimaryActions, { item, actions: primaryActions, registry, buttonVariant: "secondary" } ) ] } ), (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu // there if there are any actions at all. isMobileViewport && // At the same time, only show the menu if there are actions to show. eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime114.jsx)( ItemActions, { item, actions: eligibleActions, isCompact: true } ) }) ] }) } ); } var activity_item_default = ActivityItem; // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs var import_react11 = __toESM(require_react(), 1); function isDefined3(item) { return !!item; } function ActivityItems(props) { const { data, fields, getItemId, view } = props; const titleField = fields.find((field) => field.id === view.titleField); const mediaField = fields.find((field) => field.id === view.mediaField); const descriptionField = fields.find( (field) => field.id === view.descriptionField ); const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); return data.map((item, index2) => { return /* @__PURE__ */ (0, import_react11.createElement)( activity_item_default, { ...props, key: getItemId(item), item, mediaField, titleField, descriptionField, otherFields, posinset: view.infiniteScrollEnabled ? index2 + 1 : void 0 } ); }); } // packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs var import_jsx_runtime115 = __toESM(require_jsx_runtime(), 1); function ViewActivity(props) { const { empty, data, fields, isLoading, view, className } = props; const isDelayedLoading = useDelayedLoading(!!isLoading); const hasData = !!data?.length; const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; if (!hasData) { return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( "div", { className: clsx_default("dataviews-no-results", { "is-refreshing": isDelayedLoading }), children: empty } ); } const isInert = !isInfiniteScroll && !!isLoading; const wrapperClassName = clsx_default("dataviews-view-activity", className, { "is-refreshing": !isInfiniteScroll && isDelayedLoading }); const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; if (hasData && groupField && dataByGroup) { return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( Stack, { direction: "column", gap: "sm", className: wrapperClassName, inert: isInert ? "true" : void 0, children: groupedEntries.map( ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( ActivityGroup, { groupName, groupData, groupField, showLabel: view.groupBy?.showLabel !== false, children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( ActivityItems, { ...props, data: groupData } ) }, groupName ) ) } ); } return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(import_jsx_runtime115.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( "div", { className: wrapperClassName, role: view.infiniteScrollEnabled ? "feed" : void 0, inert: isInert ? "true" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(ActivityItems, { ...props }) } ), isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(import_components11.Spinner, {}) }) ] }); } // packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs var import_components14 = __toESM(require_components(), 1); var import_i18n21 = __toESM(require_i18n(), 1); var import_compose6 = __toESM(require_compose(), 1); var import_element75 = __toESM(require_element(), 1); // packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs var import_components13 = __toESM(require_components(), 1); var import_data5 = __toESM(require_data(), 1); var import_element74 = __toESM(require_element(), 1); var import_i18n20 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/components/dataviews-pagination/index.mjs var import_components12 = __toESM(require_components(), 1); var import_element73 = __toESM(require_element(), 1); var import_i18n19 = __toESM(require_i18n(), 1); var import_jsx_runtime116 = __toESM(require_jsx_runtime(), 1); function DataViewsPagination() { const { view, onChangeView, paginationInfo: { totalItems = 0, totalPages } } = (0, import_element73.useContext)(dataviews_context_default); if (!totalItems || !totalPages || view.infiniteScrollEnabled) { return null; } const currentPage = view.page ?? 1; const pageSelectOptions = Array.from(Array(totalPages)).map( (_, i2) => { const page = i2 + 1; return { value: page.toString(), label: page.toString(), "aria-label": currentPage === page ? (0, import_i18n19.sprintf)( // translators: 1: current page number. 2: total number of pages. (0, import_i18n19.__)("Page %1$d of %2$d"), currentPage, totalPages ) : page.toString() }; } ); return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)( Stack, { direction: "row", className: "dataviews-pagination", justify: "end", align: "center", gap: "xl", children: [ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)( Stack, { direction: "row", justify: "flex-start", align: "center", gap: "xs", className: "dataviews-pagination__page-select", children: (0, import_element73.createInterpolateElement)( (0, import_i18n19.sprintf)( // translators: 1: Current page number, 2: Total number of pages. (0, import_i18n19._x)( "<div>Page</div>%1$s<div>of %2$d</div>", "paging" ), "<CurrentPage />", totalPages ), { div: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)("div", { "aria-hidden": true }), // @ts-expect-error — Tag injected via sprintf argument, not visible in format string. CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)( import_components12.SelectControl, { "aria-label": (0, import_i18n19.__)("Current page"), value: currentPage.toString(), options: pageSelectOptions, onChange: (newValue) => { onChangeView({ ...view, page: +newValue }); }, size: "small", variant: "minimal" } ) } ) } ), /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ /* @__PURE__ */ (0, import_jsx_runtime116.jsx)( import_components12.Button, { onClick: () => onChangeView({ ...view, page: currentPage - 1 }), disabled: currentPage === 1, accessibleWhenDisabled: true, label: (0, import_i18n19.__)("Previous page"), icon: (0, import_i18n19.isRTL)() ? next_default : previous_default, showTooltip: true, size: "compact", tooltipPosition: "top" } ), /* @__PURE__ */ (0, import_jsx_runtime116.jsx)( import_components12.Button, { onClick: () => onChangeView({ ...view, page: currentPage + 1 }), disabled: currentPage >= totalPages, accessibleWhenDisabled: true, label: (0, import_i18n19.__)("Next page"), icon: (0, import_i18n19.isRTL)() ? previous_default : next_default, showTooltip: true, size: "compact", tooltipPosition: "top" } ) ] }) ] } ); } var dataviews_pagination_default = (0, import_element73.memo)(DataViewsPagination); // packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs var import_jsx_runtime117 = __toESM(require_jsx_runtime(), 1); function useIsMultiselectPicker(actions) { return (0, import_element74.useMemo)(() => { return !!actions?.length && actions?.every((action) => action.supportsBulk); }, [actions]); } // packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs var import_jsx_runtime118 = __toESM(require_jsx_runtime(), 1); var { Badge: WCBadge2 } = unlock2(import_components14.privateApis); function GridItem3({ view, multiselect, selection, onChangeSelection, getItemId, item, mediaField, titleField, descriptionField, regularFields, badgeFields, config, posinset, setsize }) { const { showTitle = true, showMedia = true, showDescription = true } = view; const id = getItemId(item); const elementRef = (0, import_element75.useRef)(null); const isSelected2 = selection.includes(id); useIntersectionObserver(elementRef, posinset); const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( mediaField.render, { item, field: mediaField, config } ) : null; const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(titleField.render, { item, field: titleField }) : null; return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)( import_components14.Composite.Item, { ref: elementRef, "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n21.__)("(no title)") : void 0, render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Stack, { direction: "column", children, ...props }), role: "option", "aria-posinset": posinset, "aria-setsize": setsize, className: clsx_default("dataviews-view-picker-grid__card", { "is-selected": isSelected2 }), "aria-selected": isSelected2, onClick: () => { if (isSelected2) { onChangeSelection( selection.filter((itemId) => id !== itemId) ); } else { const newSelection = multiselect ? [...selection, id] : [id]; onChangeSelection(newSelection); } }, children: [ showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( DataViewsSelectionCheckbox, { item, selection, onChangeSelection, getItemId, titleField, disabled: false, "aria-hidden": true, tabIndex: -1 } ), showTitle && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( Stack, { direction: "row", justify: "space-between", className: "dataviews-view-picker-grid__title-actions", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) } ), /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(Stack, { direction: "column", gap: "xs", children: [ showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( descriptionField.render, { item, field: descriptionField } ), !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( Stack, { direction: "row", className: "dataviews-view-picker-grid__badge-fields", gap: "sm", wrap: "wrap", align: "top", justify: "flex-start", children: badgeFields.map((field) => { return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( WCBadge2, { className: "dataviews-view-picker-grid__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( field.render, { item, field } ) }, field.id ); }) } ), !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( Stack, { direction: "column", className: "dataviews-view-picker-grid__fields", gap: "xs", children: regularFields.map((field) => { return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( import_components14.Flex, { className: "dataviews-view-picker-grid__field", gap: 1, justify: "flex-start", expanded: true, style: { height: "auto" }, direction: "row", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_components14.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( import_components14.FlexItem, { className: "dataviews-view-picker-grid__field-value", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( field.render, { item, field } ) } ) ] }) }, field.id ); }) } ) ] }) ] }, id ); } function GridGroup({ groupName, groupField, showLabel = true, children }) { const headerId = (0, import_compose6.useInstanceId)( GridGroup, "dataviews-view-picker-grid-group__header" ); return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)( Stack, { direction: "column", gap: "sm", role: "group", "aria-labelledby": headerId, children: [ /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( "h3", { className: "dataviews-view-picker-grid-group__header", id: headerId, children: showLabel ? (0, import_i18n21.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n21.__)("%1$s: %2$s"), groupField.label, groupName ) : groupName } ), children ] }, groupName ); } function ViewPickerGrid({ actions, data, fields, getItemId, isLoading, onChangeSelection, selection, view, className, empty }) { const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element75.useContext)(dataviews_context_default); const titleField = fields.find( (field) => field.id === view?.titleField ); const mediaField = fields.find( (field) => field.id === view?.mediaField ); const descriptionField = fields.find( (field) => field.id === view?.descriptionField ); const otherFields = view.fields ?? []; const { regularFields, badgeFields } = otherFields.reduce( (accumulator, fieldId) => { const field = fields.find((f2) => f2.id === fieldId); if (!field) { return accumulator; } const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; accumulator[key].push(field); return accumulator; }, { regularFields: [], badgeFields: [] } ); const hasData = !!data?.length; const usedPreviewSize = view.layout?.previewSize; const isMultiselect = useIsMultiselectPicker(actions); const size4 = "900px"; const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = (view.infiniteScrollEnabled && !dataByGroup) ?? false; const currentPage = view?.page ?? 1; const perPage = view?.perPage ?? 0; const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; const gridColumns = useGridColumns(); const placeholdersNeeded = usePlaceholdersNeeded( data, isInfiniteScroll, gridColumns ); return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment, { // Render multiple groups. children: [ hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( import_components14.Composite, { virtualFocus: true, orientation: "horizontal", role: "listbox", "aria-multiselectable": isMultiselect, className: clsx_default( "dataviews-view-picker-grid", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( view.layout.density ) } ), "aria-label": itemListLabel, render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( Stack, { direction: "column", gap: "lg", children, ...props } ), children: Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( GridGroup, { groupName, groupField, showLabel: view.groupBy?.showLabel !== false, children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( GridItems, { previewSize: usedPreviewSize, style: { gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))` }, "aria-busy": isLoading, ref: resizeObserverRef, children: groupItems.map((item) => { const posInSet = item.position ?? (currentPage - 1) * perPage + data.indexOf(item) + 1; return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( GridItem3, { view, multiselect: isMultiselect, selection, onChangeSelection, getItemId, item, mediaField, titleField, descriptionField, regularFields, badgeFields, config: { sizes: size4 }, posinset: posInSet, setsize: setSize }, getItemId(item) ); }) } ) }, groupName ) ) } ), // Render a single grid with all data. hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)( import_components14.Composite, { render: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( GridItems, { className: clsx_default( "dataviews-view-picker-grid", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && [ "compact", "comfortable" ].includes(view.layout.density) } ), previewSize: usedPreviewSize, "aria-busy": isLoading, ref: resizeObserverRef } ), virtualFocus: true, orientation: "horizontal", role: "listbox", "aria-multiselectable": isMultiselect, "aria-label": itemListLabel, children: [ Array.from({ length: placeholdersNeeded }).map( (_, index2) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( import_components14.Composite.Item, { render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( Stack, { direction: "column", children, ...props } ), role: "option", "aria-hidden": true, tabIndex: -1, className: "dataviews-view-picker-grid__card dataviews-view-picker-grid__placeholder" }, `placeholder-${index2}` ) ), data.map((item) => { const posinset = item.position; return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( GridItem3, { view, multiselect: isMultiselect, selection, onChangeSelection, getItemId, item, mediaField, titleField, descriptionField, regularFields, badgeFields, config: { sizes: size4 }, posinset, setsize: setSize }, getItemId(item) ); }) ] } ), // Render empty state. !hasData && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( "div", { className: clsx_default({ "dataviews-loading": isLoading, "dataviews-no-results": !isLoading }), children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_components14.Spinner, {}) }) : empty } ), hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_components14.Spinner, {}) }) ] }); } var picker_grid_default = ViewPickerGrid; // packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs var import_i18n22 = __toESM(require_i18n(), 1); var import_components15 = __toESM(require_components(), 1); var import_element76 = __toESM(require_element(), 1); var import_jsx_runtime119 = __toESM(require_jsx_runtime(), 1); function TableColumnField2({ item, fields, column, align }) { const field = fields.find((f2) => f2.id === column); if (!field) { return null; } const className = clsx_default("dataviews-view-table__cell-content-wrapper", { "dataviews-view-table__cell-align-end": align === "end", "dataviews-view-table__cell-align-center": align === "center" }); return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(field.render, { item, field }) }); } function TableRow2({ item, fields, id, view, titleField, mediaField, descriptionField, selection, getItemId, onChangeSelection, multiselect, posinset }) { const { paginationInfo } = (0, import_element76.useContext)(dataviews_context_default); const isSelected2 = selection.includes(id); const [isHovered, setIsHovered] = (0, import_element76.useState)(false); const elementRef = (0, import_element76.useRef)(null); useIntersectionObserver(elementRef, posinset); const { showTitle = true, showMedia = true, showDescription = true, infiniteScrollEnabled } = view; const handleMouseEnter = () => { setIsHovered(true); }; const handleMouseLeave = () => { setIsHovered(false); }; const columns = view.fields ?? []; const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)( import_components15.Composite.Item, { ref: elementRef, render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "tr", { className: clsx_default("dataviews-view-table__row", { "is-selected": isSelected2, "is-hovered": isHovered }), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children, ...props } ), "aria-selected": isSelected2, "aria-setsize": paginationInfo.totalItems || void 0, "aria-posinset": posinset, role: infiniteScrollEnabled ? "article" : "option", onMouseDown: (event) => { if (event.button !== 0) { return; } event.currentTarget.parentElement?.focus({ preventScroll: true }); }, onClick: () => { if (isSelected2) { onChangeSelection( selection.filter((itemId) => id !== itemId) ); } else { const newSelection = multiselect ? [...selection, id] : [id]; onChangeSelection(newSelection); } }, children: [ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "td", { className: "dataviews-view-table__checkbox-column", role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( DataViewsSelectionCheckbox, { item, selection, onChangeSelection, getItemId, titleField, disabled: false, "aria-hidden": true, tabIndex: -1 } ) }) } ), hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( column_primary_default, { item, titleField: showTitle ? titleField : void 0, mediaField: showMedia ? mediaField : void 0, descriptionField: showDescription ? descriptionField : void 0, isItemClickable: () => false } ) } ), columns.map((column) => { const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "td", { style: { width, maxWidth, minWidth }, role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( TableColumnField2, { fields, item, column, align } ) }, column ); }) ] }, id ); } function ViewPickerTable({ actions, data, fields, getItemId, isLoading = false, onChangeView, onChangeSelection, selection, setOpenedFilter, view, className, empty }) { const headerMenuRefs = (0, import_element76.useRef)(/* @__PURE__ */ new Map()); const headerMenuToFocusRef = (0, import_element76.useRef)(void 0); const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element76.useState)(); const isMultiselect = useIsMultiselectPicker(actions) ?? false; (0, import_element76.useEffect)(() => { if (headerMenuToFocusRef.current) { headerMenuToFocusRef.current.focus(); headerMenuToFocusRef.current = void 0; } }); const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; const tableNoticeId = (0, import_element76.useId)(); if (nextHeaderMenuToFocus) { headerMenuToFocusRef.current = nextHeaderMenuToFocus; setNextHeaderMenuToFocus(void 0); return; } const onHide = (field) => { const hidden = headerMenuRefs.current.get(field.id); const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; setNextHeaderMenuToFocus(fallback?.node); }; const hasData = !!data?.length; const titleField = fields.find((field) => field.id === view.titleField); const mediaField = fields.find((field) => field.id === view.mediaField); const descriptionField = fields.find( (field) => field.id === view.descriptionField ); const { showTitle = true, showMedia = true, showDescription = true } = view; const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription; const columns = view.fields ?? []; const headerMenuRef = (column, index2) => (node) => { if (node) { headerMenuRefs.current.set(column, { node, fallback: columns[index2 > 0 ? index2 - 1 : 1] }); } else { headerMenuRefs.current.delete(column); } }; return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(import_jsx_runtime119.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)( "table", { className: clsx_default( "dataviews-view-table", "dataviews-view-picker-table", className, { [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( view.layout.density ) } ), "aria-busy": isLoading, "aria-describedby": tableNoticeId, role: isInfiniteScroll ? "feed" : "listbox", children: [ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)( "tr", { className: "dataviews-view-table__row", role: "presentation", children: [ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( BulkSelectionCheckbox, { selection, onChangeSelection, data, actions, getItemId, disableSelectAll: isInfiniteScroll } ) }), hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( column_header_menu_default, { ref: headerMenuRef( titleField.id, 0 ), fieldId: titleField.id, view, fields, onChangeView, onHide, setOpenedFilter, canMove: false } ) }), columns.map((column, index2) => { const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "th", { style: { width, maxWidth, minWidth, textAlign: align }, "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, scope: "col", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( column_header_menu_default, { ref: headerMenuRef(column, index2), fieldId: column, view, fields, onChangeView, onHide, setOpenedFilter, canMove: view.layout?.enableMoving ?? true } ) }, column ); }) ] } ) }), hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)( import_components15.Composite, { virtualFocus: true, orientation: "vertical", render: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("tbody", { role: "group" }), children: [ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "tr", { className: "dataviews-view-table__group-header-row", role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( "td", { colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, className: "dataviews-view-table__group-header-cell", role: "presentation", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n22.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n22.__)("%1$s: %2$s"), groupField.label, groupName ) } ) } ), groupItems.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( TableRow2, { item, fields, id: getItemId(item) || index2.toString(), view, titleField, mediaField, descriptionField, selection, getItemId, onChangeSelection, multiselect: isMultiselect }, getItemId(item) )) ] }, `group-${groupName}` ) ) : /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( import_components15.Composite, { render: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("tbody", { role: "presentation" }), virtualFocus: true, orientation: "vertical", children: hasData && data.map((item, index2) => { const itemId = getItemId(item); const posinset = item.position; return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( TableRow2, { item, fields, id: itemId || index2.toString(), view, titleField, mediaField, descriptionField, selection, getItemId, onChangeSelection, multiselect: isMultiselect, posinset }, itemId ); }) } ) ] } ), /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)( "div", { className: clsx_default({ "dataviews-loading": isLoading, "dataviews-no-results": !hasData && !isLoading }), id: tableNoticeId, children: [ !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_components15.Spinner, {}) }) : empty), hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_components15.Spinner, {}) }) ] } ) ] }); } var picker_table_default = ViewPickerTable; // packages/dataviews/build-module/components/dataviews-layouts/picker-activity/index.mjs var import_components16 = __toESM(require_components(), 1); var import_element77 = __toESM(require_element(), 1); var import_compose7 = __toESM(require_compose(), 1); var import_i18n23 = __toESM(require_i18n(), 1); var import_jsx_runtime120 = __toESM(require_jsx_runtime(), 1); function isDefined4(item) { return !!item; } function PickerActivityItem({ view, multiselect, selection, onChangeSelection, getItemId, item, titleField, mediaField, descriptionField, otherFields, posinset, setsize }) { const elementRef = (0, import_element77.useRef)(null); useIntersectionObserver(elementRef, posinset); const { showTitle = true, showMedia = true, showDescription = true } = view; const id = getItemId(item); const isSelected2 = selection.includes(id); const density = view.layout?.density ?? "balanced"; const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( mediaField.render, { item, field: mediaField, config: { sizes: density === "comfortable" ? "32px" : "24px" } } ) : null; const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "dataviews-view-picker-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( "span", { className: "dataviews-view-picker-activity__item-bullet", "aria-hidden": "true" } ) }); const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(titleField.render, { item, field: titleField }) : null; const renderedDescriptionField = showDescription && descriptionField?.render ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(descriptionField.render, { item, field: descriptionField }) : null; const verticalGap = (0, import_element77.useMemo)(() => { switch (density) { case "comfortable": return "md"; default: return "sm"; } }, [density]); return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( import_components16.Composite.Item, { ref: elementRef, role: "option", "aria-label": titleField ? titleField.getValue({ item }) || void 0 : void 0, "aria-posinset": posinset, "aria-setsize": setsize, "aria-selected": isSelected2, className: clsx_default( "dataviews-view-picker-activity__item", density === "compact" && "is-compact", density === "balanced" && "is-balanced", density === "comfortable" && "is-comfortable", isSelected2 && "is-selected" ), onClick: () => { if (isSelected2) { onChangeSelection( selection.filter((itemId) => id !== itemId) ); } else { const newSelection = multiselect ? [...selection, id] : [id]; onChangeSelection(newSelection); } }, render: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", {}), children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( Stack, { direction: "column", gap: "xs", align: "center", className: "dataviews-view-picker-activity__item-type", children: renderedMediaField } ), /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)( Stack, { direction: "column", gap: verticalGap, align: "flex-start", className: "dataviews-view-picker-activity__item-content", children: [ renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "dataviews-view-picker-activity__item-title", children: renderedTitleField }), renderedDescriptionField && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "dataviews-view-picker-activity__item-description", children: renderedDescriptionField }), /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("div", { className: "dataviews-view-picker-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)( "div", { className: "dataviews-view-picker-activity__item-field", children: [ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", {}), className: "dataviews-view-picker-activity__item-field-label", children: field.label } ), /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { className: "dataviews-view-picker-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( field.render, { item, field } ) }) ] }, field.id )) }) ] } ) ] }) } ); } function PickerActivityGroup({ groupName, groupField, showLabel = true, children }) { const headerId = (0, import_compose7.useInstanceId)( PickerActivityGroup, "dataviews-view-picker-activity-group__header" ); return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)( Stack, { direction: "column", role: "group", "aria-labelledby": headerId, className: "dataviews-view-picker-activity-group", children: [ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( "h3", { className: "dataviews-view-picker-activity-group__header", id: headerId, children: showLabel ? (0, import_i18n23.sprintf)( // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". (0, import_i18n23.__)("%1$s: %2$s"), groupField.label, groupName ) : groupName } ), children ] } ); } function ViewPickerActivity({ data, fields, getItemId, isLoading, onChangeSelection, selection, view, actions, className, empty }) { const { itemListLabel, paginationInfo } = (0, import_element77.useContext)(dataviews_context_default); const isMultiselect = useIsMultiselectPicker(actions); const titleField = fields.find( (field) => field.id === view?.titleField ); const mediaField = fields.find( (field) => field.id === view?.mediaField ); const descriptionField = fields.find( (field) => field.id === view?.descriptionField ); const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined4); const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; const isInfiniteScroll = (view.infiniteScrollEnabled && !dataByGroup) ?? false; const setsize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; const hasData = !!data?.length; const isGrouped = !!(groupField && dataByGroup); const renderItem = (item) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( PickerActivityItem, { view, multiselect: isMultiselect, selection, onChangeSelection, getItemId, item, titleField, mediaField, descriptionField, otherFields, posinset: item.position, setsize }, getItemId(item) ); if (!hasData) { return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( "div", { className: clsx_default({ "dataviews-loading": isLoading, "dataviews-no-results": !isLoading }), children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_components16.Spinner, {}) }) : empty } ); } return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(import_jsx_runtime120.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( import_components16.Composite, { virtualFocus: true, orientation: "vertical", role: "listbox", "aria-multiselectable": isMultiselect, "aria-label": itemListLabel, "aria-busy": isLoading, render: isGrouped ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(Stack, { direction: "column", gap: "sm" }) : void 0, className: clsx_default( "dataviews-view-picker-activity", className ), children: isGrouped && dataByGroup ? Array.from(dataByGroup.entries()).map( ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( PickerActivityGroup, { groupName, groupField, showLabel: view.groupBy?.showLabel !== false, children: groupItems.map(renderItem) }, groupName ) ) : data.map(renderItem) } ), isLoading && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_components16.Spinner, {}) }) ] }); } // packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs var import_components17 = __toESM(require_components(), 1); var import_i18n24 = __toESM(require_i18n(), 1); var import_element78 = __toESM(require_element(), 1); var import_jsx_runtime121 = __toESM(require_jsx_runtime(), 1); function DensityPicker() { const context = (0, import_element78.useContext)(dataviews_context_default); const view = context.view; return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)( import_components17.__experimentalToggleGroupControl, { size: "__unstable-large", label: (0, import_i18n24.__)("Density"), value: view.layout?.density || "balanced", onChange: (value) => { context.onChangeView({ ...view, layout: { ...view.layout, density: value } }); }, isBlock: true, children: [ /* @__PURE__ */ (0, import_jsx_runtime121.jsx)( import_components17.__experimentalToggleGroupControlOption, { value: "comfortable", label: (0, import_i18n24._x)( "Comfortable", "Density option for DataView layout" ) }, "comfortable" ), /* @__PURE__ */ (0, import_jsx_runtime121.jsx)( import_components17.__experimentalToggleGroupControlOption, { value: "balanced", label: (0, import_i18n24._x)("Balanced", "Density option for DataView layout") }, "balanced" ), /* @__PURE__ */ (0, import_jsx_runtime121.jsx)( import_components17.__experimentalToggleGroupControlOption, { value: "compact", label: (0, import_i18n24._x)("Compact", "Density option for DataView layout") }, "compact" ) ] } ); } // packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs var import_components18 = __toESM(require_components(), 1); var import_i18n25 = __toESM(require_i18n(), 1); var import_element79 = __toESM(require_element(), 1); var import_jsx_runtime122 = __toESM(require_jsx_runtime(), 1); var imageSizes2 = [ { value: 120, breakpoint: 1 }, { value: 170, breakpoint: 1 }, { value: 230, breakpoint: 1 }, { value: 290, breakpoint: 1112 // at minimum image width, 4 images display at this container size }, { value: 350, breakpoint: 1636 // at minimum image width, 6 images display at this container size }, { value: 430, breakpoint: 588 // at minimum image width, 2 images display at this container size } ]; function PreviewSizePicker() { const context = (0, import_element79.useContext)(dataviews_context_default); const view = context.view; const breakValues = imageSizes2.filter((size4) => { return context.containerWidth >= size4.breakpoint; }); const layoutPreviewSize = view.layout?.previewSize ?? 230; const previewSizeToUse = breakValues.map((size4, index2) => ({ ...size4, index: index2 })).filter((size4) => size4.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; const marks = breakValues.map((size4, index2) => { return { value: index2 }; }); return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)( import_components18.RangeControl, { __next40pxDefaultSize: true, showTooltip: false, label: (0, import_i18n25.__)("Preview size"), value: previewSizeToUse, min: 0, max: breakValues.length - 1, withInputField: false, onChange: (value = 0) => { context.onChangeView({ ...view, layout: { ...view.layout, previewSize: breakValues[value].value } }); }, step: 1, marks } ); } // packages/dataviews/build-module/components/dataviews-layouts/utils/grid-config-options.mjs var import_jsx_runtime123 = __toESM(require_jsx_runtime(), 1); function GridConfigOptions() { return /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(import_jsx_runtime123.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(DensityPicker, {}), /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(PreviewSizePicker, {}) ] }); } // packages/dataviews/build-module/components/dataviews-layouts/index.mjs var VIEW_LAYOUTS = [ { type: LAYOUT_TABLE, label: (0, import_i18n26.__)("Table"), component: table_default, icon: block_table_default, viewConfigOptions: DensityPicker }, { type: LAYOUT_GRID, label: (0, import_i18n26.__)("Grid"), component: grid_default, icon: category_default, viewConfigOptions: GridConfigOptions }, { type: LAYOUT_LIST, label: (0, import_i18n26.__)("List"), component: ViewList, icon: (0, import_i18n26.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, viewConfigOptions: DensityPicker }, { type: LAYOUT_ACTIVITY, label: (0, import_i18n26.__)("Activity"), component: ViewActivity, icon: scheduled_default, viewConfigOptions: DensityPicker }, { type: LAYOUT_PICKER_GRID, label: (0, import_i18n26.__)("Grid"), component: picker_grid_default, icon: category_default, viewConfigOptions: GridConfigOptions, isPicker: true }, { type: LAYOUT_PICKER_TABLE, label: (0, import_i18n26.__)("Table"), component: picker_table_default, icon: block_table_default, viewConfigOptions: DensityPicker, isPicker: true }, { type: LAYOUT_PICKER_ACTIVITY, label: (0, import_i18n26.__)("Activity"), component: ViewPickerActivity, icon: scheduled_default, viewConfigOptions: DensityPicker, isPicker: true } ]; // packages/dataviews/build-module/components/dataviews-filters/filters.mjs var import_element87 = __toESM(require_element(), 1); // packages/dataviews/build-module/components/dataviews-filters/filter.mjs var import_components21 = __toESM(require_components(), 1); var import_i18n29 = __toESM(require_i18n(), 1); var import_element84 = __toESM(require_element(), 1); // node_modules/@ariakit/react-components/dist/focusable/focusable-context.js var import_react12 = __toESM(require_react(), 1); var FocusableContext = (0, import_react12.createContext)(true); // node_modules/@ariakit/utils/dist/index.js function toArray(arg) { if (Array.isArray(arg)) return arg; return typeof arg !== "undefined" ? [arg] : []; } function flatten2DArray(array) { const flattened = []; for (const row of array) flattened.push(...row); return flattened; } function reverseArray(array) { return array.slice().reverse(); } var canUseDOM = checkIsBrowser(); function checkIsBrowser() { return typeof window !== "undefined" && !!window.document?.createElement; } function getDocument(node) { if (!node) return document; if ("self" in node) return node.document; return node.ownerDocument || document; } function getActiveElement(node, activeDescendant = false) { const { activeElement: activeElement2 } = getDocument(node); if (!activeElement2?.nodeName) return null; if (isFrame(activeElement2) && activeElement2.contentDocument?.body) return getActiveElement(activeElement2.contentDocument.body, activeDescendant); if (activeDescendant) { const id = activeElement2.getAttribute("aria-activedescendant"); if (id) { const element = getDocument(activeElement2).getElementById(id); if (element) return element; } } return activeElement2; } function contains2(parent, child) { return parent === child || parent.contains(child); } function isElement2(target) { return target?.nodeType === 1; } function isNode2(target) { return typeof target?.nodeType === "number"; } function isFrame(element) { return element.tagName === "IFRAME"; } function isButton(element) { const tagName = element.tagName.toLowerCase(); if (tagName === "button") return true; if (tagName === "input" && element.type) return buttonInputTypes.indexOf(element.type) !== -1; return false; } var buttonInputTypes = [ "button", "color", "file", "image", "reset", "submit" ]; function isVisible(element) { if (typeof element.checkVisibility === "function") return element.checkVisibility(); const htmlElement = element; return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; } function isTextField(element) { try { const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null; const isTextArea = element.tagName === "TEXTAREA"; return isTextInput || isTextArea || false; } catch (_error) { return false; } } function isTextbox(element) { return element.isContentEditable || isTextField(element); } function getTextboxValue(element) { if (isTextField(element)) return element.value; if (element.isContentEditable) { const range = getDocument(element).createRange(); range.selectNodeContents(element); return range.toString(); } return ""; } function getTextboxSelection(element) { let start = 0; let end = 0; if (isTextField(element)) { start = element.selectionStart || 0; end = element.selectionEnd || 0; } else if (element.isContentEditable) { const selection = getDocument(element).getSelection(); if (selection?.rangeCount && selection.anchorNode && contains2(element, selection.anchorNode) && selection.focusNode && contains2(element, selection.focusNode)) { const range = selection.getRangeAt(0); const nextRange = range.cloneRange(); nextRange.selectNodeContents(element); nextRange.setEnd(range.startContainer, range.startOffset); start = nextRange.toString().length; nextRange.setEnd(range.endContainer, range.endOffset); end = nextRange.toString().length; } } return { start, end }; } function getPopupRole(element, fallback) { const allowedPopupRoles = [ "dialog", "menu", "listbox", "tree", "grid" ]; const role = element?.getAttribute("role"); if (role && allowedPopupRoles.indexOf(role) !== -1) return role; return fallback; } function getScrollingElement(element) { if (!element) return null; const isScrollableOverflow = (overflow) => { if (overflow === "auto") return true; if (overflow === "scroll") return true; return false; }; if (element.clientHeight && element.scrollHeight > element.clientHeight) { const { overflowY } = getComputedStyle(element); if (isScrollableOverflow(overflowY)) return element; } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { const { overflowX } = getComputedStyle(element); if (isScrollableOverflow(overflowX)) return element; } return getScrollingElement(element.parentElement) || document.scrollingElement || document.body; } function setSelectionRange(element, ...args) { if (/text|search|password|tel|url/i.test(element.type)) element.setSelectionRange(...args); } function sortBasedOnDOMPosition(items, getElement) { const pairs = items.map((item, index2) => [index2, item]); let isOrderDifferent = false; pairs.sort(([indexA, a2], [indexB, b2]) => { const elementA = getElement(a2); const elementB = getElement(b2); if (elementA === elementB) return 0; if (!elementA || !elementB) return 0; if (isElementPreceding(elementA, elementB)) { if (indexA > indexB) isOrderDifferent = true; return -1; } if (indexA < indexB) isOrderDifferent = true; return 1; }); if (isOrderDifferent) return pairs.map(([_, item]) => item); return items; } function isElementPreceding(a2, b2) { return Boolean(b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING); } function isTouchDevice() { return canUseDOM && !!navigator.maxTouchPoints; } function isApple() { if (!canUseDOM) return false; return /mac|iphone|ipad|ipod/i.test(navigator.platform); } function isSafari2() { return canUseDOM && isApple() && /apple/i.test(navigator.vendor); } function isFirefox2() { return canUseDOM && /firefox\//i.test(navigator.userAgent); } function isPortalEvent(event) { const { currentTarget, target } = event; if (!currentTarget) return false; if (!isNode2(target)) return true; return !contains2(currentTarget, target); } function isSelfTarget(event) { return event.target === event.currentTarget; } function isOpeningInNewTab(event) { const element = event.currentTarget; if (!element) return false; const isAppleDevice = isApple(); if (isAppleDevice && !event.metaKey) return false; if (!isAppleDevice && !event.ctrlKey) return false; const tagName = element.tagName.toLowerCase(); if (tagName === "a") return true; if (tagName === "button" && element.type === "submit") return true; if (tagName === "input" && element.type === "submit") return true; return false; } function isDownloading(event) { const element = event.currentTarget; if (!element) return false; const tagName = element.tagName.toLowerCase(); if (!event.altKey) return false; if (tagName === "a") return true; if (tagName === "button" && element.type === "submit") return true; if (tagName === "input" && element.type === "submit") return true; return false; } function fireBlurEvent(element, eventInit) { const event = new FocusEvent("blur", eventInit); const defaultAllowed = element.dispatchEvent(event); const bubbleInit = { ...eventInit, bubbles: true }; element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); return defaultAllowed; } function fireKeyboardEvent(element, type, eventInit) { const event = new KeyboardEvent(type, eventInit); return element.dispatchEvent(event); } function fireClickEvent(element, eventInit) { const event = new MouseEvent("click", eventInit); return element.dispatchEvent(event); } function isFocusEventOutside(event, container) { const containerElement = container || event.currentTarget; const relatedTarget = event.relatedTarget; return !isNode2(relatedTarget) || !contains2(containerElement, relatedTarget); } function queueBeforeEvent(element, type, callback, timeout) { const createTimer = (callback2) => { if (timeout) { const timerId2 = setTimeout(callback2, timeout); return () => clearTimeout(timerId2); } const timerId = requestAnimationFrame(callback2); return () => cancelAnimationFrame(timerId); }; const cancelTimer = createTimer(() => { element.removeEventListener(type, callSync, true); callback(); }); const callSync = () => { cancelTimer(); callback(); }; element.addEventListener(type, callSync, { once: true, capture: true }); return cancelTimer; } function addGlobalEventListener(type, listener, options, scope = window) { const children = []; try { scope.document.addEventListener(type, listener, options); for (const frame of Array.from(scope.frames)) children.push(addGlobalEventListener(type, listener, options, frame)); } catch { } const removeEventListener = () => { try { scope.document.removeEventListener(type, listener, options); } catch { } for (const remove of children) remove(); }; return removeEventListener; } var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])"; function isFocusable(element) { if (!element.matches(selector)) return false; if (!isVisible(element)) return false; if (element.closest("[inert]")) return false; return true; } function hasFocus(element) { const activeElement2 = getActiveElement(element); if (!activeElement2) return false; if (activeElement2 === element) return true; const activeDescendant = activeElement2.getAttribute("aria-activedescendant"); if (!activeDescendant) return false; return activeDescendant === element.id; } function hasFocusWithin(element) { const activeElement2 = getActiveElement(element); if (!activeElement2) return false; if (contains2(element, activeElement2)) return true; const activeDescendant = activeElement2.getAttribute("aria-activedescendant"); if (!activeDescendant) return false; if (!("id" in element)) return false; if (activeDescendant === element.id) return true; return !!element.querySelector(`#${CSS.escape(activeDescendant)}`); } function focusIntoView(element, options) { if (!("scrollIntoView" in element)) element.focus(); else { element.focus({ preventScroll: true }); element.scrollIntoView({ block: "nearest", inline: "nearest", ...options }); } } function noop4(..._) { } function hasOwnProperty(object, prop) { if (typeof Object.hasOwn === "function") return Object.hasOwn(object, prop); return Object.prototype.hasOwnProperty.call(object, prop); } function chain(...fns) { return (...args) => { for (const fn of fns) if (typeof fn === "function") fn(...args); }; } function normalizeString(str) { return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); } function omit(object, keys) { const result = { ...object }; for (const key of keys) if (hasOwnProperty(result, key)) delete result[key]; return result; } function pick(object, paths) { const result = {}; for (const key of paths) if (hasOwnProperty(object, key)) result[key] = object[key]; return result; } function identity(value) { return value; } function invariant(condition, message2) { if (condition) return; if (typeof message2 !== "string") throw new Error("Invariant failed"); throw new Error(message2); } function getKeys(obj) { return Object.keys(obj); } function isFalsyBooleanCallback(booleanOrCallback, ...args) { const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; if (result == null) return false; return !result; } function disabledFromProps(props) { return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; } function removeUndefinedValues(obj) { const result = {}; for (const key in obj) if (obj[key] !== void 0) result[key] = obj[key]; return result; } function defaultValue(...values) { for (const value of values) if (value !== void 0) return value; } function createUndoCallback(callback) { return async () => { const redo = await callback?.(); return createUndoCallback(async () => { await redo?.(); return callback; }); }; } var UndoManager = createUndoManager(); function createUndoManager({ limit = 100 } = {}) { const undoStack = []; let redoStack = []; let currentGroup = null; const canUndo = () => undoStack.length > 0; const canRedo = () => redoStack.length > 0; const undo = async () => { if (!canUndo()) return; currentGroup = null; redoStack.push(await undoStack.pop()?.()); }; const redo = async () => { if (!canRedo()) return; currentGroup = null; undoStack.push(await redoStack.pop()?.()); }; const execute = async (callback, group) => { if (!callback) return; while (undoStack.length > limit) undoStack.shift(); const sameGroup = group === currentGroup; currentGroup = group ?? null; const nextIndex = sameGroup ? Math.max(0, undoStack.length - 1) : undoStack.length; const undoCallback = await callback(); if (!undoCallback) return; redoStack = []; const currentUndo = undoStack[nextIndex]; undoStack[nextIndex] = createUndoCallback(async () => { await undoCallback?.(); const currentRedo = await currentUndo?.(); return async () => { await currentRedo?.(); await callback?.(); }; }); }; return { canUndo, canRedo, undo, redo, execute }; } // node_modules/@ariakit/react-utils/dist/index.js var React117 = __toESM(require_react(), 1); var import_react13 = __toESM(require_react(), 1); var import_jsx_runtime124 = __toESM(require_jsx_runtime(), 1); function setRef(ref, value) { if (typeof ref === "function") ref(value); else if (ref) ref.current = value; } function isValidElementWithRef(element) { if (!element) return false; if (!(0, import_react13.isValidElement)(element)) return false; if ("ref" in element.props) return true; if ("ref" in element) return true; return false; } function getRefProperty(element) { if (!isValidElementWithRef(element)) return null; return { ...element.props }.ref || element.ref; } function mergeProps2(base, overrides) { const props = { ...base }; for (const key in overrides) { if (!hasOwnProperty(overrides, key)) continue; if (key === "className") { const prop = "className"; const baseClass = base[prop]; const overrideClass = overrides[prop]; if (baseClass && overrideClass) props[prop] = `${baseClass} ${overrideClass}`; else props[prop] = overrideClass || baseClass; continue; } if (key === "style") { const prop = "style"; props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; continue; } const overrideValue = overrides[key]; if (key.startsWith("on")) { if (typeof overrideValue !== "function") continue; const baseValue = base[key]; if (typeof baseValue === "function") { props[key] = (...args) => { overrideValue(...args); baseValue(...args); }; continue; } } props[key] = overrideValue; } return props; } var _React = { ...React117 }; var useReactId = _React.useId; var useReactDeferredValue = _React.useDeferredValue; var useReactInsertionEffect = _React.useInsertionEffect; var useSafeLayoutEffect = canUseDOM ? import_react13.useLayoutEffect : import_react13.useEffect; function useInitialValue(value) { const [initialValue] = (0, import_react13.useState)(value); return initialValue; } function useLiveRef(value) { const ref = (0, import_react13.useRef)(value); useSafeLayoutEffect(() => { ref.current = value; }); return ref; } function useEvent(callback) { const ref = (0, import_react13.useRef)(() => { throw new Error("Cannot call an event handler while rendering."); }); if (useReactInsertionEffect) useReactInsertionEffect(() => { ref.current = callback; }); else ref.current = callback; return (0, import_react13.useCallback)((...args) => ref.current?.(...args), []); } function useTransactionState(callback) { const [state, setState] = (0, import_react13.useState)(null); useSafeLayoutEffect(() => { if (state == null) return; if (!callback) return; let prevState = null; callback((prev) => { prevState = prev; return state; }); return () => { callback(prevState); }; }, [state, callback]); return [state, setState]; } function useMergeRefs(...refs) { return (0, import_react13.useMemo)(() => { if (!refs.some(Boolean)) return; return (value) => { for (const ref of refs) setRef(ref, value); }; }, refs); } function useId4(defaultId) { if (useReactId) { const reactId = useReactId(); if (defaultId) return defaultId; return reactId; } const [id, setId] = (0, import_react13.useState)(defaultId); useSafeLayoutEffect(() => { if (defaultId || id) return; setId(`id-${Math.random().toString(36).slice(2, 8)}`); }, [defaultId, id]); return defaultId || id; } function useTagName(refOrElement, type) { const stringOrUndefined = (type2) => { if (typeof type2 !== "string") return; return type2; }; const [tagName, setTagName] = (0, import_react13.useState)(() => stringOrUndefined(type)); useSafeLayoutEffect(() => { setTagName((refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement)?.tagName.toLowerCase() || stringOrUndefined(type)); }, [refOrElement, type]); return tagName; } function useAttribute(refOrElement, attributeName, defaultValue2) { const initialValue = useInitialValue(defaultValue2); const [attribute, setAttribute] = (0, import_react13.useState)(initialValue); (0, import_react13.useEffect)(() => { const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; if (!element) return; const callback = () => { const value = element.getAttribute(attributeName); setAttribute(value == null ? initialValue : value); }; const observer = new MutationObserver(callback); observer.observe(element, { attributeFilter: [attributeName] }); callback(); return () => observer.disconnect(); }, [ refOrElement, attributeName, initialValue ]); return attribute; } function useUpdateEffect(effect, deps) { const mounted = (0, import_react13.useRef)(false); (0, import_react13.useEffect)(() => { if (mounted.current) return effect(); mounted.current = true; }, deps); (0, import_react13.useEffect)(() => () => { mounted.current = false; }, []); } function useUpdateLayoutEffect(effect, deps) { const mounted = (0, import_react13.useRef)(false); useSafeLayoutEffect(() => { if (mounted.current) return effect(); mounted.current = true; }, deps); useSafeLayoutEffect(() => () => { mounted.current = false; }, []); } function useForceUpdate() { return (0, import_react13.useReducer)(() => [], []); } function useBooleanEvent(booleanOrCallback) { return useEvent(typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback); } function useWrapElement(props, callback, deps = []) { const wrapElement = (0, import_react13.useCallback)((element) => { if (props.wrapElement) element = props.wrapElement(element); return callback(element); }, [...deps, props.wrapElement]); return { ...props, wrapElement }; } function useMetadataProps(props, key, value) { const parent = props.onLoadedMetadataCapture; const onLoadedMetadataCapture = (0, import_react13.useMemo)(() => { return Object.assign(() => { }, parent, ...value !== void 0 ? [{ [key]: value }] : []); }, [ parent, key, value ]); return [parent?.[key], { onLoadedMetadataCapture }]; } var hasInstalledGlobalEventListeners = false; function useIsMouseMoving() { (0, import_react13.useEffect)(() => { if (hasInstalledGlobalEventListeners) return; addGlobalEventListener("mousemove", setMouseMoving, true); addGlobalEventListener("mousedown", resetMouseMoving, true); addGlobalEventListener("mouseup", resetMouseMoving, true); addGlobalEventListener("keydown", resetMouseMoving, true); addGlobalEventListener("scroll", resetMouseMoving, true); hasInstalledGlobalEventListeners = true; }, []); return useEvent(() => mouseMoving); } var mouseMoving = false; var previousScreenX = 0; var previousScreenY = 0; function hasMouseMovement(event) { const movementX = event.movementX || event.screenX - previousScreenX; const movementY = event.movementY || event.screenY - previousScreenY; previousScreenX = event.screenX; previousScreenY = event.screenY; return movementX || movementY || false; } function setMouseMoving(event) { if (!hasMouseMovement(event)) return; mouseMoving = true; } function resetMouseMoving() { mouseMoving = false; } function forwardRef82(render4) { const Role = React117.forwardRef((props, ref) => render4({ ...props, ref })); Role.displayName = render4.displayName || render4.name; return Role; } function memo4(Component, propsAreEqual) { return React117.memo(Component, propsAreEqual); } function createElement3(Type, props) { const { wrapElement, render: render4, ...rest } = props; const mergedRef = useMergeRefs(props.ref, getRefProperty(render4)); let element; if (React117.isValidElement(render4)) { const renderProps = { ...render4.props, ref: mergedRef }; element = React117.cloneElement(render4, mergeProps2(rest, renderProps)); } else if (render4) element = render4(rest); else element = /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Type, { ...rest }); if (wrapElement) return wrapElement(element); return element; } function createHook(useProps) { const useRole = (props = {}) => { return useProps(props); }; useRole.displayName = useProps.name; return useRole; } function createStoreContext(providers = [], scopedProviders = []) { const context = React117.createContext(void 0); const scopedContext = React117.createContext(void 0); const useContext54 = () => React117.useContext(context); const useScopedContext = (onlyScoped = false) => { const scoped = React117.useContext(scopedContext); const store = useContext54(); if (onlyScoped) return scoped; return scoped || store; }; const useProviderContext = () => { const scoped = React117.useContext(scopedContext); const store = useContext54(); if (scoped && scoped === store) return; return store; }; const ContextProvider = (props) => { return providers.reduceRight((children, Provider2) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Provider2, { ...props, children }), /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(context.Provider, { ...props })); }; const ScopedContextProvider = (props) => { return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(ContextProvider, { ...props, children: scopedProviders.reduceRight((children, Provider2) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Provider2, { ...props, children }), /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(scopedContext.Provider, { ...props })) }); }; return { context, scopedContext, useContext: useContext54, useScopedContext, useProviderContext, ContextProvider, ScopedContextProvider }; } // node_modules/@ariakit/react-components/dist/focusable/focusable.js var import_react14 = __toESM(require_react(), 1); var TagName = "div"; var accessibleWhenDisabledSymbol = /* @__PURE__ */ Symbol("accessibleWhenDisabled"); var isSafariBrowser = isSafari2(); var alwaysFocusVisibleInputTypes = [ "text", "search", "url", "tel", "email", "password", "number", "date", "month", "week", "time", "datetime", "datetime-local" ]; function isAlwaysFocusVisible(element) { const { tagName, readOnly, type } = element; if (tagName === "TEXTAREA" && !readOnly) return true; if (tagName === "SELECT" && !readOnly) return true; if (tagName === "INPUT" && !readOnly) return alwaysFocusVisibleInputTypes.includes(type); if (element.isContentEditable) return true; if (element.getAttribute("role") === "combobox" && element.dataset.name) return true; return false; } function isNativeTabbable(tagName) { if (!tagName) return true; return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; } function supportsDisabledAttribute(tagName) { if (!tagName) return true; return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; } var buttonInputTypes2 = [ "button", "color", "file", "image", "reset", "submit" ]; function needsSafariTabIndex(tagName, inputType) { if (tagName === "button") return true; if (tagName === "input" && inputType) { if (inputType === "checkbox" || inputType === "radio") return true; return buttonInputTypes2.includes(inputType); } return false; } function isNativeSubmitControl(element) { if (element.tagName === "BUTTON") { const { type } = element; return type === "submit"; } if (element.tagName === "INPUT") { const { type } = element; return type === "submit" || type === "image"; } return false; } function getTabIndex2({ focusable: focusable2, trulyDisabled, nativeTabbable, supportsDisabled, safariTabIndex, tabIndexProp }) { if (!focusable2) return tabIndexProp; if (trulyDisabled) { if (nativeTabbable && !supportsDisabled) return -1; return; } if (nativeTabbable) { if (safariTabIndex && tabIndexProp == null) return 0; return tabIndexProp; } return tabIndexProp ?? 0; } function useDisableEvent(onEvent, disabled2) { return useEvent((event) => { onEvent?.(event); if (event.defaultPrevented) return; if (disabled2) { event.stopPropagation(); event.preventDefault(); } }); } var hasInstalledGlobalEventListeners2 = false; var isKeyboardModality = true; function onGlobalMouseDown(event) { const target = event.target; if (isElement2(target) && !target.hasAttribute("data-focus-visible")) isKeyboardModality = false; } function onGlobalKeyDown(event) { if (event.metaKey) return; if (event.ctrlKey) return; if (event.altKey) return; isKeyboardModality = true; } var useFocusable = createHook(function useFocusable2({ focusable: focusable2 = true, accessibleWhenDisabled, autoFocus, onFocusVisible, ...props }) { const ref = (0, import_react14.useRef)(null); const [parentAccessibleWhenDisabled, metadataProps] = useMetadataProps(props, accessibleWhenDisabledSymbol, accessibleWhenDisabled); accessibleWhenDisabled ??= parentAccessibleWhenDisabled; (0, import_react14.useEffect)(() => { if (!focusable2) return; if (hasInstalledGlobalEventListeners2) return; addGlobalEventListener("mousedown", onGlobalMouseDown, true); addGlobalEventListener("keydown", onGlobalKeyDown, true); hasInstalledGlobalEventListeners2 = true; }, [focusable2]); const disabled2 = focusable2 && disabledFromProps(props); const trulyDisabled = disabled2 && !accessibleWhenDisabled; const [focusVisible, setFocusVisible] = (0, import_react14.useState)(false); const focusVisibleRef = (0, import_react14.useRef)(false); const nativeSubmitObserverCleanupRef = (0, import_react14.useRef)(null); const cleanupFocusVisible = useEvent((element) => { nativeSubmitObserverCleanupRef.current?.(); nativeSubmitObserverCleanupRef.current = null; focusVisibleRef.current = false; element?.removeAttribute("data-focus-visible"); }); (0, import_react14.useEffect)(() => { if (!focusable2) return; if (!trulyDisabled) return; cleanupFocusVisible(ref.current); if (focusVisible) setFocusVisible(false); }, [ focusable2, trulyDisabled, focusVisible, cleanupFocusVisible ]); (0, import_react14.useEffect)(() => { if (!focusable2) return; if (!focusVisible) return; const element = ref.current; if (!element) return; if (typeof IntersectionObserver === "undefined") return; const observer = new IntersectionObserver(() => { if (!isFocusable(element)) { focusVisibleRef.current = false; setFocusVisible(false); } }); observer.observe(element); return () => observer.disconnect(); }, [focusable2, focusVisible]); (0, import_react14.useEffect)(() => { return () => nativeSubmitObserverCleanupRef.current?.(); }, []); const onKeyPressCapture = useDisableEvent(props.onKeyPressCapture, disabled2); const onMouseDownCapture = useDisableEvent(props.onMouseDownCapture, disabled2); const onClickCapture = useDisableEvent(props.onClickCapture, disabled2); const handleFocusVisible = (event, currentTarget) => { if (currentTarget) event.currentTarget = currentTarget; if (!focusable2) return; const element = event.currentTarget; if (!element) return; if (!hasFocus(element)) return; onFocusVisible?.(event); if (event.defaultPrevented) return; element.dataset.focusVisible = "true"; focusVisibleRef.current = true; if (isNativeSubmitControl(element)) { nativeSubmitObserverCleanupRef.current?.(); nativeSubmitObserverCleanupRef.current = null; if (typeof IntersectionObserver !== "undefined") { const observer = new IntersectionObserver(() => { if (isFocusable(element)) return; cleanupFocusVisible(element); }); observer.observe(element); nativeSubmitObserverCleanupRef.current = () => observer.disconnect(); } return; } setFocusVisible(true); }; const onKeyDownCaptureProp = props.onKeyDownCapture; const onKeyDownCapture = useEvent((event) => { onKeyDownCaptureProp?.(event); if (event.defaultPrevented) return; if (!focusable2) return; if (focusVisible) return; if (focusVisibleRef.current) return; if (event.metaKey) return; if (event.altKey) return; if (event.ctrlKey) return; if (!isSelfTarget(event)) return; const element = event.currentTarget; const applyFocusVisible = () => handleFocusVisible(event, element); queueBeforeEvent(element, "focusout", applyFocusVisible); }); const onFocusCaptureProp = props.onFocusCapture; const onFocusCapture = useEvent((event) => { onFocusCaptureProp?.(event); if (event.defaultPrevented) return; if (!focusable2) return; if (!isSelfTarget(event)) { setFocusVisible(false); return; } const element = event.currentTarget; const applyFocusVisible = () => handleFocusVisible(event, element); if (isKeyboardModality || isAlwaysFocusVisible(event.target)) queueBeforeEvent(event.target, "focusout", applyFocusVisible); else setFocusVisible(false); }); const onBlurProp = props.onBlur; const onBlur = useEvent((event) => { onBlurProp?.(event); if (!focusable2) return; if (!isFocusEventOutside(event)) return; cleanupFocusVisible(event.currentTarget); setFocusVisible(false); }); const autoFocusOnShow = (0, import_react14.useContext)(FocusableContext); const autoFocusRef = useEvent((element) => { if (!focusable2) return; if (!autoFocus) return; if (!element) return; if (!autoFocusOnShow) return; queueMicrotask(() => { if (hasFocus(element)) return; if (!isFocusable(element)) return; element.focus(); }); }); const tagName = useTagName(ref); const nativeTabbable = focusable2 && isNativeTabbable(tagName); const supportsDisabled = focusable2 && supportsDisabledAttribute(tagName); const [safariTabIndex, setSafariTabIndex] = (0, import_react14.useState)(false); if (isSafariBrowser) (0, import_react14.useEffect)(() => { if (!focusable2) return; const element = ref.current; if (!element) return; const tag = element.tagName.toLowerCase(); const type = element.type; setSafariTabIndex(needsSafariTabIndex(tag, type)); }, [focusable2]); const styleProp = props.style; const style = (0, import_react14.useMemo)(() => { if (trulyDisabled) return { pointerEvents: "none", ...styleProp }; return styleProp; }, [trulyDisabled, styleProp]); props = { "data-focus-visible": focusable2 && focusVisible || void 0, "data-autofocus": autoFocus || void 0, "aria-disabled": disabled2 || void 0, ...props, ...metadataProps, ref: useMergeRefs(ref, autoFocusRef, props.ref), style, tabIndex: getTabIndex2({ focusable: focusable2, trulyDisabled, nativeTabbable, supportsDisabled, safariTabIndex, tabIndexProp: props.tabIndex }), disabled: supportsDisabled && trulyDisabled ? true : void 0, contentEditable: disabled2 ? void 0 : props.contentEditable, onKeyPressCapture, onClickCapture, onMouseDownCapture, onKeyDownCapture, onFocusCapture, onBlur }; return removeUndefinedValues(props); }); var Focusable = forwardRef82(function Focusable2(props) { return createElement3(TagName, useFocusable(props)); }); // node_modules/@ariakit/react-components/dist/command/command.js var import_react15 = __toESM(require_react(), 1); var TagName2 = "button"; function isNativeClick(event) { if (!event.isTrusted) return false; const element = event.currentTarget; if (event.key === "Enter") return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; if (event.key === " ") return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; return false; } var symbol = /* @__PURE__ */ Symbol("command"); var useCommand = createHook(function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { const ref = (0, import_react15.useRef)(null); const [isNativeButton, setIsNativeButton] = (0, import_react15.useState)(false); (0, import_react15.useEffect)(() => { if (!ref.current) return; setIsNativeButton(isButton(ref.current)); }, []); const [active, setActive] = (0, import_react15.useState)(false); const activeRef = (0, import_react15.useRef)(false); const disabled2 = disabledFromProps(props); const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); const onKeyDownProp = props.onKeyDown; const onKeyDown = useEvent((event) => { onKeyDownProp?.(event); const element = event.currentTarget; if (event.defaultPrevented) return; if (isDuplicate) return; if (disabled2) return; if (!isSelfTarget(event)) return; if (isTextField(element)) return; if (element.isContentEditable) return; const isEnter = clickOnEnter && event.key === "Enter"; const isSpace = clickOnSpace && event.key === " "; const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; const shouldPreventSpace = event.key === " " && !clickOnSpace; if (shouldPreventEnter || shouldPreventSpace) { event.preventDefault(); return; } if (isEnter || isSpace) { const nativeClick = isNativeClick(event); if (isEnter) { if (!nativeClick) { event.preventDefault(); const { view, ...eventInit } = event; const click = () => fireClickEvent(element, eventInit); if (isFirefox2()) queueBeforeEvent(element, "keyup", click); else queueMicrotask(click); } } else if (isSpace) { activeRef.current = true; if (!nativeClick) { event.preventDefault(); setActive(true); } } } }); const onKeyUpProp = props.onKeyUp; const onKeyUp = useEvent((event) => { onKeyUpProp?.(event); if (event.defaultPrevented) return; if (isDuplicate) return; if (disabled2) return; if (event.metaKey) return; const isSpace = clickOnSpace && event.key === " "; if (activeRef.current && isSpace) { activeRef.current = false; if (!isNativeClick(event)) { event.preventDefault(); setActive(false); const element = event.currentTarget; const { view, ...eventInit } = event; queueMicrotask(() => fireClickEvent(element, eventInit)); } } }); props = { "data-active": active || void 0, type: isNativeButton ? "button" : void 0, ...metadataProps, ...props, ref: useMergeRefs(ref, props.ref), onKeyDown, onKeyUp }; props = useFocusable(props); return props; }); var Command = forwardRef82(function Command2(props) { return createElement3(TagName2, useCommand(props)); }); // node_modules/@ariakit/react-components/dist/collection/collection-context.js var ctx = createStoreContext(); var useCollectionContext = ctx.useContext; var useCollectionScopedContext = ctx.useScopedContext; var useCollectionProviderContext = ctx.useProviderContext; var CollectionContextProvider = ctx.ContextProvider; var CollectionScopedContextProvider = ctx.ScopedContextProvider; // node_modules/@ariakit/react-components/dist/collection/collection-item.js var import_react16 = __toESM(require_react(), 1); var TagName3 = "div"; var useCollectionItem = createHook(function useCollectionItem2({ store, shouldRegisterItem = true, getItem = identity, element, ...props }) { const context = useCollectionContext(); store = store || context; const id = useId4(props.id); const ref = (0, import_react16.useRef)(element); (0, import_react16.useEffect)(() => { const element2 = ref.current; if (!id) return; if (!element2) return; if (!shouldRegisterItem) return; const item = getItem({ id, element: element2 }); return store?.renderItem(item); }, [ id, shouldRegisterItem, getItem, store ]); props = { ...props, ref: useMergeRefs(ref, props.ref) }; return removeUndefinedValues(props); }); var CollectionItem = forwardRef82(function CollectionItem2(props) { return createElement3(TagName3, useCollectionItem(props)); }); // node_modules/@ariakit/react-components/dist/composite/composite-context.js var import_react17 = __toESM(require_react(), 1); var ctx2 = createStoreContext([CollectionContextProvider], [CollectionScopedContextProvider]); var useCompositeContext = ctx2.useContext; var useCompositeScopedContext = ctx2.useScopedContext; var useCompositeProviderContext = ctx2.useProviderContext; var CompositeContextProvider = ctx2.ContextProvider; var CompositeScopedContextProvider = ctx2.ScopedContextProvider; var CompositeItemContext = (0, import_react17.createContext)(void 0); var CompositeRowContext = (0, import_react17.createContext)(void 0); // node_modules/@ariakit/react-components/dist/composite/utils.js function findFirstEnabledItem(items, excludeId) { return items.find((item) => { if (excludeId) return !item.disabled && item.id !== excludeId; return !item.disabled; }); } function getEnabledItem(store, id) { if (!id) return null; return store.item(id) || null; } function groupItemsByRows(items) { const rows = []; for (const item of items) { const row = rows.find((currentRow) => currentRow[0]?.rowId === item.rowId); if (row) row.push(item); else rows.push([item]); } return rows; } function selectTextField(element, collapseToEnd = false) { if (isTextField(element)) element.setSelectionRange(collapseToEnd ? element.value.length : 0, element.value.length); else if (element.isContentEditable) { const selection = getDocument(element).getSelection(); selection?.selectAllChildren(element); if (collapseToEnd) selection?.collapseToEnd(); } } var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); function focusSilently(element) { element[FOCUS_SILENTLY] = true; element.focus({ preventScroll: true }); } function silentlyFocused(element) { const isSilentlyFocused = element[FOCUS_SILENTLY]; delete element[FOCUS_SILENTLY]; return isSilentlyFocused; } function isItem(store, element, exclude) { if (!element) return false; if (element === exclude) return false; const item = store.item(element.id); if (!item) return false; if (exclude && item.element === exclude) return false; return true; } // node_modules/@ariakit/react-components/dist/composite/composite-item.js var import_react18 = __toESM(require_react(), 1); var import_jsx_runtime125 = __toESM(require_jsx_runtime(), 1); // node_modules/@ariakit/store/dist/index.js function getInternal(store, key) { const internals = store.__unstableInternals; invariant(internals, "Invalid store"); return internals[key]; } function hasUpdatedKey(keys, updatedKey) { if (!keys) return true; for (const currentKey of keys) if (updatedKey instanceof Set) { if (updatedKey.has(currentKey)) return true; } else if (currentKey === updatedKey) return true; return false; } function addKeyedListener(map, keys, listener) { if (!keys) return; for (const key of keys) { let listeners = map.get(key); if (!listeners) { listeners = /* @__PURE__ */ new Set(); map.set(key, listeners); } listeners.add(listener); } } function deleteKeyedListener(map, keys, listener) { if (!map) return; if (!keys) return; for (const key of keys) { const listeners = map.get(key); if (!listeners) continue; listeners.delete(listener); if (!listeners.size) map.delete(key); } } function createStore(initialState, ...stores) { let state = initialState; let prevStateBatch = state; let destroy = noop4; let batchPending = false; let inDispatch = false; let updatedKeys = /* @__PURE__ */ new Set(); const instances = /* @__PURE__ */ new Set(); const setups = /* @__PURE__ */ new Set(); const syncListenerGroup = { listeners: /* @__PURE__ */ new Set(), disposables: /* @__PURE__ */ new Map(), listenerKeys: /* @__PURE__ */ new WeakMap() }; const batchListenerGroup = { listeners: /* @__PURE__ */ new Set(), disposables: /* @__PURE__ */ new Map(), listenerKeys: /* @__PURE__ */ new WeakMap() }; const storeSetup = (callback) => { setups.add(callback); return () => setups.delete(callback); }; const storeInit = () => { const initializedInstances = instances.size; const instance = /* @__PURE__ */ Symbol(); instances.add(instance); const maybeDestroy = () => { instances.delete(instance); if (instances.size) return; destroy(); }; if (initializedInstances) return maybeDestroy; const stateKeys = getKeys(state); const desyncs = []; for (const store of stores) { const storeState = store?.getState?.(); if (!storeState) continue; const keys = stateKeys.filter((key) => hasOwnProperty(storeState, key)); if (!keys.length) continue; if (stores.length === 1 || keys.length === stateKeys.length) { for (const key of keys) desyncs.push(sync(store, [key], (state2) => { setState(key, state2[key], true); })); continue; } let didSyncInitialState = false; desyncs.push(sync(store, keys, (state2, prevState) => { for (const key of keys) { if (didSyncInitialState && state2[key] === prevState[key]) continue; setState(key, state2[key], true); } didSyncInitialState = true; })); } const teardowns = []; for (const setup2 of setups) teardowns.push(setup2()); const cleanups = stores.map(init); destroy = chain(...desyncs, ...teardowns, ...cleanups); return maybeDestroy; }; const deleteListenerIndexes = (group, listener, keys) => { if (keys === void 0) return; if (keys) deleteKeyedListener(group.listenersByKey, keys, listener); else group.allKeysListeners?.delete(listener); }; const registerListener = (keys, listener, group = syncListenerGroup) => { const listenerKeysValue = keys ? [...keys] : null; if (group.listeners.has(listener)) deleteListenerIndexes(group, listener, group.listenerKeys.get(listener)); group.listeners.add(listener); if (listenerKeysValue) { group.listenersByKey ??= /* @__PURE__ */ new Map(); addKeyedListener(group.listenersByKey, listenerKeysValue, listener); } else { group.allKeysListeners ??= /* @__PURE__ */ new Set(); group.allKeysListeners.add(listener); } group.listenerKeys.set(listener, listenerKeysValue); return () => { group.disposables.get(listener)?.(); group.disposables.delete(listener); const currentKeys = group.listenerKeys.get(listener); deleteListenerIndexes(group, listener, listenerKeysValue); if (currentKeys !== listenerKeysValue) deleteListenerIndexes(group, listener, currentKeys); group.listenerKeys.delete(listener); group.listeners.delete(listener); }; }; const storeSubscribe = (keys, listener) => registerListener(keys, listener); const reconcileInitialCleanup = (group, listener, cleanup) => { if (cleanup) group.disposables.set(listener, cleanup); else group.disposables.delete(listener); }; const storeSync = (keys, listener) => { reconcileInitialCleanup(syncListenerGroup, listener, listener(state, state)); return registerListener(keys, listener); }; const storeBatch = (keys, listener) => { if (!batchListenerGroup.listeners.size && !inDispatch) prevStateBatch = state; reconcileInitialCleanup(batchListenerGroup, listener, listener(state, prevStateBatch)); return registerListener(keys, listener, batchListenerGroup); }; const storePick = (keys) => createStore(pick(state, keys), finalStore); const storeOmit = (keys) => createStore(omit(state, keys), finalStore); const getState = () => state; const runListeners = (group, prevState, updatedKey) => { const { disposables } = group; if (!(updatedKey instanceof Set) && !group.allKeysListeners?.size) { const keyedListeners = group.listenersByKey?.get(updatedKey); if (!keyedListeners) return; for (const listener of keyedListeners) { const cleanup = disposables.size ? disposables.get(listener) : void 0; if (cleanup) cleanup(); const result = listener(state, prevState); if (result) disposables.set(listener, result); else if (cleanup) disposables.delete(listener); } return; } const allKeysListeners = group.allKeysListeners; for (const listener of group.listeners) { if (!allKeysListeners?.has(listener)) { if (!hasUpdatedKey(group.listenerKeys.get(listener), updatedKey)) continue; } const cleanup = disposables.size ? disposables.get(listener) : void 0; if (cleanup) cleanup(); const result = listener(state, prevState); if (result) disposables.set(listener, result); else if (cleanup) disposables.delete(listener); } }; const setState = (key, value, fromStores = false) => { if (!hasOwnProperty(state, key)) return; const currentValue = state[key]; const nextValue = typeof value === "function" ? value(currentValue) : value; if (nextValue === currentValue) return; if (!fromStores && stores.length) for (const store of stores) store?.setState?.(key, nextValue); const prevState = state; state = { ...state, [key]: nextValue }; const wasInDispatch = inDispatch; inDispatch = true; try { runListeners(syncListenerGroup, prevState, key); } finally { inDispatch = wasInDispatch; } if (!batchListenerGroup.listeners.size) { if (!inDispatch) prevStateBatch = state; return; } updatedKeys.add(key); if (batchPending) return; batchPending = true; queueMicrotask(() => { batchPending = false; const snapshot = state; const updatedKeysSnapshot = updatedKeys; updatedKeys = /* @__PURE__ */ new Set(); const prevStateBatchBefore = prevStateBatch; runListeners(batchListenerGroup, prevStateBatchBefore, updatedKeysSnapshot); if (prevStateBatch === prevStateBatchBefore) prevStateBatch = snapshot; }); }; const finalStore = { getState, setState, __unstableInternals: { setup: storeSetup, init: storeInit, subscribe: storeSubscribe, sync: storeSync, batch: storeBatch, pick: storePick, omit: storeOmit } }; return finalStore; } function setup(store, ...args) { if (!store) return; return getInternal(store, "setup")(...args); } function init(store, ...args) { if (!store) return; return getInternal(store, "init")(...args); } function subscribe(store, ...args) { if (!store) return; return getInternal(store, "subscribe")(...args); } function sync(store, ...args) { if (!store) return; return getInternal(store, "sync")(...args); } function batch(store, ...args) { if (!store) return; return getInternal(store, "batch")(...args); } function omit2(store, ...args) { if (!store) return; return getInternal(store, "omit")(...args); } function pick2(store, ...args) { if (!store) return; return getInternal(store, "pick")(...args); } function mergeStore(...stores) { const initialState = {}; for (const store2 of stores) { const nextState = store2?.getState?.(); if (nextState) Object.assign(initialState, nextState); } const store = createStore(initialState, ...stores); return Object.assign({}, ...stores, store); } function throwOnConflictingProps(props, store) { if (false) return; if (!store) return; const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { const stateKey = key.replace("default", ""); return `${stateKey[0]?.toLowerCase() || ""}${stateKey.slice(1)}`; }); if (!defaultKeys.length) return; const storeState = store.getState(); if (!defaultKeys.filter((key) => hasOwnProperty(storeState, key)).length) return; throw new Error(`Passing a store prop in conjunction with a default state is not supported. const store = useSelectStore(); <SelectProvider store={store} defaultValue="Apple" /> ^ ^ Instead, pass the default state to the topmost store: const store = useSelectStore({ defaultValue: "Apple" }); <SelectProvider store={store} /> See https://github.com/ariakit/ariakit/pull/2745 for more details. If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit `); } // node_modules/@ariakit/react-store/dist/index.js var React118 = __toESM(require_react(), 1); var import_shim2 = __toESM(require_shim(), 1); var noopSubscribe = () => () => { }; function useStoreState(store, keyOrSelector = identity) { const storeSubscribe = React118.useCallback((callback) => { if (!store) return noopSubscribe(); return subscribe(store, null, callback); }, [store]); const getSnapshot = () => { const key = typeof keyOrSelector === "string" ? keyOrSelector : null; const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null; const state = store?.getState(); if (selector2) return selector2(state); if (!state) return; if (!key) return; if (!hasOwnProperty(state, key)) return; return state[key]; }; return (0, import_shim2.useSyncExternalStore)(storeSubscribe, getSnapshot, getSnapshot); } function useStoreStateObject(store, object) { const objRef = React118.useRef({}); const storeSubscribe = React118.useCallback((callback) => { if (!store) return noopSubscribe(); return subscribe(store, null, callback); }, [store]); const getSnapshot = () => { const state = store?.getState(); let updated = false; const obj = objRef.current; for (const prop in object) { const keyOrSelector = object[prop]; if (typeof keyOrSelector === "function") { const value = keyOrSelector(state); if (value !== obj[prop]) { obj[prop] = value; updated = true; } } if (typeof keyOrSelector === "string") { if (!state) continue; if (!hasOwnProperty(state, keyOrSelector)) continue; const value = state[keyOrSelector]; if (value !== obj[prop]) { obj[prop] = value; updated = true; } } } if (updated) objRef.current = { ...obj }; return objRef.current; }; return (0, import_shim2.useSyncExternalStore)(storeSubscribe, getSnapshot, getSnapshot); } function useStoreProps(store, props, key, setKey) { const value = hasOwnProperty(props, key) ? props[key] : void 0; const propsRef = useLiveRef({ value, setValue: setKey ? props[setKey] : void 0 }); useSafeLayoutEffect(() => { return sync(store, [key], (state, prev) => { const { value: value2, setValue } = propsRef.current; if (!setValue) return; if (state[key] === prev[key]) return; if (state[key] === value2) return; setValue(state[key]); }); }, [store, key]); useSafeLayoutEffect(() => { if (value === void 0) return; store.setState(key, value); return batch(store, [key], () => { if (value === void 0) return; store.setState(key, value); }); }); } function useStore2(createStore2, props) { const [store, setStore] = React118.useState(() => createStore2(props)); useSafeLayoutEffect(() => init(store), [store]); const useState50 = React118.useCallback((keyOrSelector) => useStoreState(store, keyOrSelector), [store]); return [React118.useMemo(() => ({ ...store, useState: useState50 }), [store, useState50]), useEvent(() => { setStore((store2) => createStore2({ ...props, ...store2.getState() })); })]; } // node_modules/@ariakit/react-components/dist/composite/composite-item.js var TagName4 = "button"; function isEditableElement(element) { if (isTextbox(element)) return true; return element.tagName === "INPUT" && !isButton(element); } function getNextPageOffset(scrollingElement, pageUp = false) { const height = scrollingElement.clientHeight; const { top } = scrollingElement.getBoundingClientRect(); const pageSize = Math.max(height * 0.875, height - 40) * 1.5; const pageOffset = pageUp ? height - pageSize + top : pageSize + top; if (scrollingElement.tagName === "HTML") return pageOffset + scrollingElement.scrollTop; return pageOffset; } function getItemOffset(itemElement, pageUp = false) { const { top } = itemElement.getBoundingClientRect(); if (pageUp) return top + itemElement.clientHeight; return top; } function findNextPageItemId(element, store, next, pageUp = false) { if (!store) return; if (!next) return; const { renderedItems } = store.getState(); const scrollingElement = getScrollingElement(element); if (!scrollingElement) return; const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); let id; let prevDifference; for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { const previousId = id; id = next(i2); if (!id) break; if (id === previousId) continue; const itemElement = getEnabledItem(store, id)?.element; if (!itemElement) continue; const difference = getItemOffset(itemElement, pageUp) - nextPageOffset; const absDifference = Math.abs(difference); if (pageUp && difference <= 0 || !pageUp && difference >= 0) { if (prevDifference !== void 0 && prevDifference < absDifference) id = previousId; break; } prevDifference = absDifference; } return id; } function targetIsAnotherItem(event, store) { if (isSelfTarget(event)) return false; return isItem(store, event.target); } var useCompositeItem = createHook(function useCompositeItem2({ store, rowId: rowIdProp, preventScrollOnKeyDown = false, moveOnKeyPress = true, tabbable: tabbable2 = false, getItem: getItemProp, "aria-setsize": ariaSetSizeProp, "aria-posinset": ariaPosInSetProp, ...props }) { const context = useCompositeScopedContext(); store = store || context; const id = useId4(props.id); const ref = (0, import_react18.useRef)(null); const row = (0, import_react18.useContext)(CompositeRowContext); const trulyDisabled = disabledFromProps(props) && !props.accessibleWhenDisabled; const { rowId, baseElement, isActiveItem, ariaSetSize, ariaPosInSet, isTabbable: isTabbable2 } = useStoreStateObject(store, { rowId(state) { if (rowIdProp) return rowIdProp; if (!state) return; if (!row?.baseElement) return; if (row.baseElement !== state.baseElement) return; return row.id; }, baseElement(state) { return state?.baseElement || void 0; }, isActiveItem(state) { return !!state && state.activeId === id; }, ariaSetSize(state) { if (ariaSetSizeProp != null) return ariaSetSizeProp; if (!state) return; if (!row?.ariaSetSize) return; if (row.baseElement !== state.baseElement) return; return row.ariaSetSize; }, ariaPosInSet(state) { if (ariaPosInSetProp != null) return ariaPosInSetProp; if (!state) return; if (!row?.ariaPosInSet) return; if (row.baseElement !== state.baseElement) return; const itemsInRow = state.renderedItems.filter((item) => item.rowId === rowId); return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); }, isTabbable(state) { if (!state?.renderedItems.length) return true; if (state.virtualFocus) return false; if (tabbable2) return true; if (state.activeId === null) return false; const item = store?.item(state.activeId); if (item?.disabled) return true; if (!item?.element) return true; return state.activeId === id; } }); const getItem = (0, import_react18.useCallback)((item) => { const nextItem = { ...item, id: id || item.id, rowId, disabled: trulyDisabled, children: item.element?.textContent }; if (getItemProp) return getItemProp(nextItem); return nextItem; }, [ id, rowId, trulyDisabled, getItemProp ]); const onFocusProp = props.onFocus; const hasFocusedComposite = (0, import_react18.useRef)(false); const onFocus = useEvent((event) => { onFocusProp?.(event); if (event.defaultPrevented) return; if (isPortalEvent(event)) return; if (!id) return; if (!store) return; if (targetIsAnotherItem(event, store)) return; const { virtualFocus, baseElement: baseElement2 } = store.getState(); store.setActiveId(id); if (isTextbox(event.currentTarget)) selectTextField(event.currentTarget); if (!virtualFocus) return; if (!isSelfTarget(event)) return; if (isEditableElement(event.currentTarget)) return; if (!baseElement2?.isConnected) return; if (isSafari2() && event.currentTarget.hasAttribute("data-autofocus")) event.currentTarget.scrollIntoView({ block: "nearest", inline: "nearest" }); hasFocusedComposite.current = true; if (event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget)) focusSilently(baseElement2); else baseElement2.focus(); }); const onBlurCaptureProp = props.onBlurCapture; const onBlurCapture = useEvent((event) => { onBlurCaptureProp?.(event); if (event.defaultPrevented) return; if (store?.getState()?.virtualFocus && hasFocusedComposite.current) { hasFocusedComposite.current = false; event.preventDefault(); event.stopPropagation(); } }); const onKeyDownProp = props.onKeyDown; const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); const onKeyDown = useEvent((event) => { onKeyDownProp?.(event); if (event.defaultPrevented) return; if (!isSelfTarget(event)) return; if (!store) return; const { currentTarget } = event; const state = store.getState(); const isGrid2 = !!store.item(id)?.rowId; const isVertical = state.orientation !== "horizontal"; const isHorizontal = state.orientation !== "vertical"; const canHomeEnd = () => { if (isGrid2) return true; if (isHorizontal) return true; if (!state.baseElement) return true; if (!isTextField(state.baseElement)) return true; return false; }; const action = { ArrowUp: (isGrid2 || isVertical) && store.up, ArrowRight: (isGrid2 || isHorizontal) && store.next, ArrowDown: (isGrid2 || isVertical) && store.down, ArrowLeft: (isGrid2 || isHorizontal) && store.previous, Home: () => { if (!canHomeEnd()) return; if (!isGrid2 || event.ctrlKey) return store?.first(); return store?.previous(-1); }, End: () => { if (!canHomeEnd()) return; if (!isGrid2 || event.ctrlKey) return store?.last(); return store?.next(-1); }, PageUp: () => { return findNextPageItemId(currentTarget, store, store?.up, true); }, PageDown: () => { return findNextPageItemId(currentTarget, store, store?.down); } }[event.key]; if (action) { if (isTextbox(currentTarget)) { const selection = getTextboxSelection(currentTarget); const isLeft = isHorizontal && event.key === "ArrowLeft"; const isRight = isHorizontal && event.key === "ArrowRight"; const isUp = isVertical && event.key === "ArrowUp"; const isDown = isVertical && event.key === "ArrowDown"; if (isRight || isDown) { const { length: valueLength } = getTextboxValue(currentTarget); if (selection.end !== valueLength) return; } else if ((isLeft || isUp) && selection.start !== 0) return; } const nextId = action(); if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { if (!moveOnKeyPressProp(event)) return; event.preventDefault(); store.move(nextId); } } }); const providerValue = (0, import_react18.useMemo)(() => ({ id, baseElement }), [id, baseElement]); props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }), [providerValue]); props = { "data-active-item": isActiveItem || void 0, ...props, id, ref: useMergeRefs(ref, props.ref), tabIndex: isTabbable2 ? props.tabIndex : -1, onFocus, onBlurCapture, onKeyDown }; props = useCommand(props); props = useCollectionItem({ store, ...props, getItem, shouldRegisterItem: id ? props.shouldRegisterItem : false }); return removeUndefinedValues({ ...props, "aria-setsize": ariaSetSize, "aria-posinset": ariaPosInSet }); }); var CompositeItem = memo4(forwardRef82(function CompositeItem2(props) { return createElement3(TagName4, useCompositeItem(props)); })); // node_modules/@ariakit/react-components/dist/composite/composite.js var import_react19 = __toESM(require_react(), 1); var import_jsx_runtime126 = __toESM(require_jsx_runtime(), 1); var TagName5 = "div"; function isGrid(items) { return items.some((item) => !!item.rowId); } function isPrintableKey(event) { const target = event.target; if (target && !isTextField(target)) return false; return event.key.length === 1 && !event.ctrlKey && !event.metaKey; } function isModifierKey(event) { return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; } function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { return useEvent((event) => { onKeyboardEvent?.(event); if (event.defaultPrevented) return; if (event.isPropagationStopped()) return; if (!isSelfTarget(event)) return; if (isModifierKey(event)) return; if (isPrintableKey(event)) return; const activeElement2 = getEnabledItem(store, store.getState().activeId)?.element; if (!activeElement2) return; const { view, ...eventInit } = event; if (activeElement2 !== previousElementRef?.current) activeElement2.focus(); if (!fireKeyboardEvent(activeElement2, event.type, eventInit)) event.preventDefault(); if (event.currentTarget.contains(activeElement2)) event.stopPropagation(); }); } function findFirstEnabledItemInTheLastRow(items) { return findFirstEnabledItem(flatten2DArray(reverseArray(groupItemsByRows(items)))); } function withBaseScrollPreserved(store, callback) { const { virtualFocus, baseElement } = store.getState(); if (!virtualFocus || !baseElement || !isTextField(baseElement)) { callback(); return; } const savedScrollLeft = baseElement.scrollLeft; const savedScrollTop = baseElement.scrollTop; callback(); baseElement.scrollLeft = savedScrollLeft; baseElement.scrollTop = savedScrollTop; } function useScheduleFocus(store) { const [scheduled, setScheduled] = (0, import_react19.useState)(false); const schedule = (0, import_react19.useCallback)(() => setScheduled(true), []); const activeItem = useStoreState(store, (state) => getEnabledItem(store, state.activeId)); (0, import_react19.useEffect)(() => { const activeElement2 = activeItem?.element; if (!scheduled) return; if (!activeElement2) return; setScheduled(false); withBaseScrollPreserved(store, () => { activeElement2.focus({ preventScroll: true }); }); }, [ store, activeItem, scheduled ]); return schedule; } var useComposite = createHook(function useComposite2({ store, composite = true, focusOnMove = composite, moveOnKeyPress = true, ...props }) { const context = useCompositeProviderContext(); store = store || context; invariant(store, "Composite must receive a `store` prop or be wrapped in a CompositeProvider component."); const ref = (0, import_react19.useRef)(null); const previousElementRef = (0, import_react19.useRef)(null); const scheduleFocus = useScheduleFocus(store); const moves = useStoreState(store, "moves"); const [, setBaseElement] = useTransactionState(composite ? store.setBaseElement : null); (0, import_react19.useEffect)(() => { if (!store) return; if (!moves) return; if (!composite) return; if (!focusOnMove) return; const { activeId: activeId2 } = store.getState(); const itemElement = getEnabledItem(store, activeId2)?.element; if (!itemElement) return; withBaseScrollPreserved(store, () => focusIntoView(itemElement)); }, [ store, moves, composite, focusOnMove ]); useSafeLayoutEffect(() => { if (!store) return; if (!moves) return; if (!composite) return; const { baseElement, activeId: activeId2 } = store.getState(); if (!(activeId2 === null)) return; if (!baseElement) return; const previousElement = previousElementRef.current; previousElementRef.current = null; if (previousElement) fireBlurEvent(previousElement, { relatedTarget: baseElement }); if (!hasFocus(baseElement)) baseElement.focus(); }, [ store, moves, composite ]); const activeId = useStoreState(store, "activeId"); const virtualFocus = useStoreState(store, "virtualFocus"); useSafeLayoutEffect(() => { if (!store) return; if (!composite) return; if (!virtualFocus) return; const previousElement = previousElementRef.current; previousElementRef.current = null; if (!previousElement) return; const relatedTarget = getEnabledItem(store, activeId)?.element || getActiveElement(previousElement); if (relatedTarget === previousElement) return; fireBlurEvent(previousElement, { relatedTarget }); }, [ store, activeId, virtualFocus, composite ]); const onKeyDownCapture = useKeyboardEventProxy(store, props.onKeyDownCapture, previousElementRef); const onKeyUpCapture = useKeyboardEventProxy(store, props.onKeyUpCapture, previousElementRef); const onFocusCaptureProp = props.onFocusCapture; const onFocusCapture = useEvent((event) => { onFocusCaptureProp?.(event); if (event.defaultPrevented) return; if (!store) return; const { virtualFocus: virtualFocus2 } = store.getState(); if (!virtualFocus2) return; const previousActiveElement = event.relatedTarget; const isSilentlyFocused = silentlyFocused(event.currentTarget); if (isSelfTarget(event) && isSilentlyFocused) { event.stopPropagation(); previousElementRef.current = previousActiveElement; } }); const onFocusProp = props.onFocus; const onFocus = useEvent((event) => { onFocusProp?.(event); if (event.defaultPrevented) return; if (!composite) return; if (!store) return; const { relatedTarget } = event; const { virtualFocus: virtualFocus2 } = store.getState(); if (virtualFocus2) { if (isSelfTarget(event) && !isItem(store, relatedTarget)) queueMicrotask(scheduleFocus); } else if (isSelfTarget(event)) store.setActiveId(null); }); const onBlurCaptureProp = props.onBlurCapture; const onBlurCapture = useEvent((event) => { onBlurCaptureProp?.(event); if (event.defaultPrevented) return; if (!store) return; const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState(); if (!virtualFocus2) return; const activeElement2 = getEnabledItem(store, activeId2)?.element; const nextActiveElement = event.relatedTarget; const nextActiveElementIsItem = isItem(store, nextActiveElement); const previousElement = previousElementRef.current; previousElementRef.current = null; if (isSelfTarget(event) && nextActiveElementIsItem) { if (nextActiveElement === activeElement2) { if (previousElement && previousElement !== nextActiveElement) fireBlurEvent(previousElement, event); } else if (activeElement2) fireBlurEvent(activeElement2, event); else if (previousElement) fireBlurEvent(previousElement, event); event.stopPropagation(); } else if (!isItem(store, event.target) && activeElement2) fireBlurEvent(activeElement2, event); }); const onKeyDownProp = props.onKeyDown; const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); const onKeyDown = useEvent((event) => { onKeyDownProp?.(event); if (event.nativeEvent.isComposing) return; if (event.defaultPrevented) return; if (!store) return; if (!isSelfTarget(event)) return; const { orientation, renderedItems, activeId: activeId2 } = store.getState(); if (getEnabledItem(store, activeId2)?.element?.isConnected) return; const isVertical = orientation !== "horizontal"; const isHorizontal = orientation !== "vertical"; const grid = isGrid(renderedItems); if ((event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End") && isTextField(event.currentTarget)) return; const up = () => { if (grid) return findFirstEnabledItemInTheLastRow(renderedItems)?.id; return store?.last(); }; const action = { ArrowUp: (grid || isVertical) && up, ArrowRight: (grid || isHorizontal) && store.first, ArrowDown: (grid || isVertical) && store.first, ArrowLeft: (grid || isHorizontal) && store.last, Home: store.first, End: store.last, PageUp: store.first, PageDown: store.last }[event.key]; if (action) { const id = action(); if (id !== void 0) { if (!moveOnKeyPressProp(event)) return; event.preventDefault(); store.move(id); } } }); props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(CompositeScopedContextProvider, { value: store, children: element }), [store]); props = { "aria-activedescendant": useStoreState(store, (state) => { if (!store) return; if (!composite) return; if (!state.virtualFocus) return; return getEnabledItem(store, state.activeId)?.id; }), ...props, ref: useMergeRefs(ref, setBaseElement, props.ref), onKeyDownCapture, onKeyUpCapture, onFocusCapture, onFocus, onBlurCapture, onKeyDown }; props = useFocusable({ focusable: useStoreState(store, (state) => composite && (state.virtualFocus || state.activeId === null)), ...props }); return props; }); var Composite6 = forwardRef82(function Composite7(props) { return createElement3(TagName5, useComposite(props)); }); // node_modules/@ariakit/react-components/dist/disclosure/disclosure-context.js var ctx3 = createStoreContext(); var useDisclosureContext = ctx3.useContext; var useDisclosureScopedContext = ctx3.useScopedContext; var useDisclosureProviderContext = ctx3.useProviderContext; var DisclosureContextProvider = ctx3.ContextProvider; var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; // node_modules/@ariakit/react-components/dist/dialog/dialog-context.js var import_react20 = __toESM(require_react(), 1); var ctx4 = createStoreContext([DisclosureContextProvider], [DisclosureScopedContextProvider]); var useDialogContext = ctx4.useContext; var useDialogScopedContext = ctx4.useScopedContext; var useDialogProviderContext = ctx4.useProviderContext; var DialogContextProvider = ctx4.ContextProvider; var DialogScopedContextProvider = ctx4.ScopedContextProvider; var DialogHeadingContext = (0, import_react20.createContext)(void 0); var DialogDescriptionContext = (0, import_react20.createContext)(void 0); // node_modules/@ariakit/react-components/dist/disclosure/disclosure-content.js var import_react21 = __toESM(require_react(), 1); var import_jsx_runtime127 = __toESM(require_jsx_runtime(), 1); var import_react_dom4 = __toESM(require_react_dom(), 1); var TagName6 = "div"; function afterTimeout(timeoutMs, cb) { const timeoutId = setTimeout(cb, timeoutMs); return () => clearTimeout(timeoutId); } function afterPaint(cb) { let raf = requestAnimationFrame(() => { raf = requestAnimationFrame(cb); }); return () => cancelAnimationFrame(raf); } function parseCSSTime(...times) { return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => { const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3; const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier; if (currentTime > longestTime) return currentTime; return longestTime; }, 0); } function isHidden(mounted, hidden, alwaysVisible) { return !alwaysVisible && hidden !== false && (!mounted || !!hidden); } var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, ...props }) { const context = useDisclosureProviderContext(); store = store || context; invariant(store, "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."); const ref = (0, import_react21.useRef)(null); const id = useId4(props.id); const [transition, setTransition] = (0, import_react21.useState)(null); const open = useStoreState(store, "open"); const mounted = useStoreState(store, "mounted"); const animated = useStoreState(store, "animated"); const contentElement = useStoreState(store, "contentElement"); const otherElement = useStoreState(store.disclosure, "contentElement"); const hasClosedRef = (0, import_react21.useRef)(false); useSafeLayoutEffect(() => { if (!ref.current) return; store?.setContentElement(ref.current); }, [store]); useSafeLayoutEffect(() => { let previousAnimated; store?.setState("animated", (animated2) => { previousAnimated = animated2; return true; }); return () => { if (previousAnimated === void 0) return; store?.setState("animated", previousAnimated); }; }, [store]); useSafeLayoutEffect(() => { if (!animated) { if (!open) { hasClosedRef.current = true; setTransition(null); } else if (hasClosedRef.current) { hasClosedRef.current = false; setTransition("enter"); } return; } if (!contentElement?.isConnected) { setTransition(null); return; } return afterPaint(() => { setTransition(open ? "enter" : mounted ? "leave" : null); }); }, [ animated, contentElement, open, mounted ]); useSafeLayoutEffect(() => { if (!store) return; if (!animated) return; if (!transition) return; if (!contentElement) return; const stopAnimation = () => store?.setState("animating", false); const stopAnimationSync = () => (0, import_react_dom4.flushSync)(stopAnimation); if (transition === "leave" && open) return; if (transition === "enter" && !open) return; if (typeof animated === "number") return afterTimeout(animated, stopAnimationSync); const { transitionDuration, animationDuration, transitionDelay, animationDelay } = getComputedStyle(contentElement); const { transitionDuration: transitionDuration2 = "0", animationDuration: animationDuration2 = "0", transitionDelay: transitionDelay2 = "0", animationDelay: animationDelay2 = "0" } = otherElement ? getComputedStyle(otherElement) : {}; const timeout = parseCSSTime(transitionDelay, animationDelay, transitionDelay2, animationDelay2) + parseCSSTime(transitionDuration, animationDuration, transitionDuration2, animationDuration2); if (!timeout) { if (transition === "enter") store.setState("animated", false); stopAnimation(); return; } return afterTimeout(Math.max(timeout - 1e3 / 60, 0), stopAnimationSync); }, [ store, animated, contentElement, otherElement, open, transition ]); props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(DialogScopedContextProvider, { value: store, children: element }), [store]); const hidden = isHidden(mounted, props.hidden, alwaysVisible); const styleProp = props.style; const style = (0, import_react21.useMemo)(() => { if (hidden) return { ...styleProp, display: "none" }; return styleProp; }, [hidden, styleProp]); props = { "data-open": open || void 0, "data-enter": transition === "enter" || void 0, "data-leave": transition === "leave" || void 0, hidden, ...props, id, ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref), style }; return removeUndefinedValues(props); }); var DisclosureContentImpl = forwardRef82(function DisclosureContentImpl2(props) { return createElement3(TagName6, useDisclosureContent(props)); }); var DisclosureContent = forwardRef82(function DisclosureContent2({ unmountOnHide, ...props }) { const context = useDisclosureProviderContext(); if (useStoreState(props.store || context, (state) => !unmountOnHide || state?.mounted) === false) return null; return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(DisclosureContentImpl, { ...props }); }); // node_modules/@ariakit/components/dist/disclosure/disclosure-store.js function createDisclosureStore(props = {}) { const store = mergeStore(props.store, omit2(props.disclosure, ["contentElement", "disclosureElement"])); throwOnConflictingProps(props, store); const syncState = store?.getState(); const open = defaultValue(props.open, syncState?.open, props.defaultOpen, false); const animated = defaultValue(props.animated, syncState?.animated, false); const disclosure = createStore({ open, animated, animating: !!animated && open, mounted: open, contentElement: defaultValue(syncState?.contentElement, null), disclosureElement: defaultValue(syncState?.disclosureElement, null) }, store); setup(disclosure, () => sync(disclosure, ["animated", "animating"], (state) => { if (state.animated) return; disclosure.setState("animating", false); })); setup(disclosure, () => subscribe(disclosure, ["open"], () => { if (!disclosure.getState().animated) return; disclosure.setState("animating", true); })); setup(disclosure, () => sync(disclosure, ["open", "animating"], (state) => { disclosure.setState("mounted", state.open || state.animating); })); return { ...disclosure, disclosure: props.disclosure, setOpen: (value) => disclosure.setState("open", value), show: () => disclosure.setState("open", true), hide: () => disclosure.setState("open", false), toggle: () => disclosure.setState("open", (open2) => !open2), stopAnimation: () => disclosure.setState("animating", false), setContentElement: (value) => disclosure.setState("contentElement", value), setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) }; } // node_modules/@ariakit/react-components/dist/disclosure/disclosure-store.js function useDisclosureStoreProps(store, update2, props) { useUpdateEffect(update2, [props.store, props.disclosure]); useStoreProps(store, props, "open", "setOpen"); useStoreProps(store, props, "mounted", "setMounted"); useStoreProps(store, props, "animated"); return Object.assign(store, { disclosure: props.disclosure }); } // node_modules/@ariakit/react-components/dist/popover/popover-context.js var ctx5 = createStoreContext([DialogContextProvider], [DialogScopedContextProvider]); var usePopoverContext = ctx5.useContext; var usePopoverScopedContext = ctx5.useScopedContext; var usePopoverProviderContext = ctx5.useProviderContext; var PopoverContextProvider = ctx5.ContextProvider; var PopoverScopedContextProvider = ctx5.ScopedContextProvider; // node_modules/@ariakit/react-components/dist/combobox/combobox-context.js var import_react22 = __toESM(require_react(), 1); var ComboboxListRoleContext = (0, import_react22.createContext)(void 0); var ctx6 = createStoreContext([PopoverContextProvider, CompositeContextProvider], [PopoverScopedContextProvider, CompositeScopedContextProvider]); var useComboboxContext = ctx6.useContext; var useComboboxScopedContext = ctx6.useScopedContext; var useComboboxProviderContext = ctx6.useProviderContext; var ComboboxContextProvider = ctx6.ContextProvider; var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; var ComboboxItemValueContext = (0, import_react22.createContext)(void 0); var ComboboxItemCheckedContext = (0, import_react22.createContext)(false); // node_modules/@ariakit/components/dist/collection/collection-store.js function getCommonParent(items) { const firstItem = items.find((item) => !!item.element); const lastElement = [...items].reverse().find((item) => !!item.element)?.element; let parentElement = firstItem?.element?.parentElement; if (!lastElement) return getDocument(parentElement).body; while (parentElement) { if (parentElement.contains(lastElement)) return parentElement; parentElement = parentElement.parentElement; } return getDocument(parentElement).body; } function getPrivateStore(store) { return store?.__unstablePrivateStore; } function createCollectionStore(props = {}) { throwOnConflictingProps(props, props.store); const syncState = props.store?.getState(); const items = defaultValue(props.items, syncState?.items, props.defaultItems, []); const itemsMap = new Map(items.map((item) => [item.id, item])); const initialState = { items, renderedItems: defaultValue(syncState?.renderedItems, []) }; const syncPrivateStore = getPrivateStore(props.store); const privateStore = createStore({ items, renderedItems: initialState.renderedItems }, syncPrivateStore); const collection = createStore(initialState, props.store); const sortItems = (renderedItems) => { const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); privateStore.setState("renderedItems", sortedItems); collection.setState("renderedItems", sortedItems); }; setup(collection, () => init(privateStore)); setup(privateStore, () => { return batch(privateStore, ["items"], (state) => { collection.setState("items", state.items); }); }); setup(privateStore, () => { return batch(privateStore, ["renderedItems"], (state) => { let firstRun = true; let raf = requestAnimationFrame(() => { const { renderedItems } = collection.getState(); if (state.renderedItems === renderedItems) return; sortItems(state.renderedItems); }); if (typeof IntersectionObserver !== "function") return () => cancelAnimationFrame(raf); const ioCallback = () => { if (firstRun) { firstRun = false; return; } cancelAnimationFrame(raf); raf = requestAnimationFrame(() => sortItems(state.renderedItems)); }; const root = getCommonParent(state.renderedItems); const observer = new IntersectionObserver(ioCallback, { root }); for (const item of state.renderedItems) { if (!item.element) continue; observer.observe(item.element); } return () => { cancelAnimationFrame(raf); observer.disconnect(); }; }); }); const mergeItem = (item, setItems, canDeleteFromMap = false) => { let prevItem; setItems((items2) => { const index2 = items2.findIndex(({ id }) => id === item.id); const nextItems = items2.slice(); if (index2 !== -1) { prevItem = items2[index2]; const nextItem = { ...prevItem, ...item }; nextItems[index2] = nextItem; itemsMap.set(item.id, nextItem); } else { nextItems.push(item); itemsMap.set(item.id, item); } return nextItems; }); const unmergeItem = () => { setItems((items2) => { if (!prevItem) { if (canDeleteFromMap) itemsMap.delete(item.id); return items2.filter(({ id }) => id !== item.id); } const index2 = items2.findIndex(({ id }) => id === item.id); if (index2 === -1) return items2; const nextItems = items2.slice(); nextItems[index2] = prevItem; itemsMap.set(item.id, prevItem); return nextItems; }); }; return unmergeItem; }; const registerItem = (item) => mergeItem(item, (getItems) => privateStore.setState("items", getItems), true); return { ...collection, registerItem, renderItem: (item) => chain(registerItem(item), mergeItem(item, (getItems) => privateStore.setState("renderedItems", getItems))), item: (id) => { if (!id) return null; let item = itemsMap.get(id); if (!item) { const { items: items2 } = privateStore.getState(); item = items2.find((item2) => item2.id === id); if (item) itemsMap.set(id, item); } return item || null; }, __unstablePrivateStore: privateStore }; } // node_modules/@ariakit/react-components/dist/collection/collection-store.js function useCollectionStoreProps(store, update2, props) { useUpdateEffect(update2, [props.store]); useStoreProps(store, props, "items", "setItems"); return store; } // node_modules/@ariakit/components/dist/composite/composite-store.js var NULL_ITEM = { id: null }; function findFirstEnabledItem2(items, excludeId) { return items.find((item) => { if (excludeId) return !item.disabled && item.id !== excludeId; return !item.disabled; }); } function getEnabledItems(items, excludeId) { return items.filter((item) => { if (excludeId) return !item.disabled && item.id !== excludeId; return !item.disabled; }); } function getItemsInRow(items, rowId) { return items.filter((item) => item.rowId === rowId); } function flipItems(items, activeId, shouldInsertNullItem = false) { const index2 = items.findIndex((item) => item.id === activeId); return [ ...items.slice(index2 + 1), ...shouldInsertNullItem ? [NULL_ITEM] : [], ...items.slice(0, index2) ]; } function groupItemsByRows2(items) { const rows = []; for (const item of items) { const row = rows.find((currentRow) => currentRow[0]?.rowId === item.rowId); if (row) row.push(item); else rows.push([item]); } return rows; } function getMaxRowLength(array) { let maxLength = 0; for (const { length } of array) if (length > maxLength) maxLength = length; return maxLength; } function createEmptyItem(rowId) { return { id: "__EMPTY_ITEM__", disabled: true, rowId }; } function normalizeRows(rows, activeId, focusShift) { const maxLength = getMaxRowLength(rows); for (const row of rows) for (let i2 = 0; i2 < maxLength; i2 += 1) { const item = row[i2]; if (!item || focusShift && item.disabled) { const previousItem = i2 === 0 && focusShift ? findFirstEnabledItem2(row) : row[i2 - 1]; row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem?.rowId); } } return rows; } function verticalizeItems(items) { const rows = groupItemsByRows2(items); const maxLength = getMaxRowLength(rows); const verticalized = []; for (let i2 = 0; i2 < maxLength; i2 += 1) for (const row of rows) { const item = row[i2]; if (item) verticalized.push({ ...item, rowId: item.rowId ? `${i2}` : void 0 }); } return verticalized; } function createCompositeStore(props = {}) { const syncState = props.store?.getState(); const collection = createCollectionStore(props); const activeId = defaultValue(props.activeId, syncState?.activeId, props.defaultActiveId); const composite = createStore({ ...collection.getState(), id: defaultValue(props.id, syncState?.id) ?? `id-${Math.random().toString(36).slice(2, 8)}`, activeId, baseElement: defaultValue(syncState?.baseElement, null), includesBaseElement: defaultValue(props.includesBaseElement, syncState?.includesBaseElement, activeId === null), moves: defaultValue(syncState?.moves, 0), orientation: defaultValue(props.orientation, syncState?.orientation, "both"), rtl: defaultValue(props.rtl, syncState?.rtl, false), virtualFocus: defaultValue(props.virtualFocus, syncState?.virtualFocus, false), focusLoop: defaultValue(props.focusLoop, syncState?.focusLoop, false), focusWrap: defaultValue(props.focusWrap, syncState?.focusWrap, false), focusShift: defaultValue(props.focusShift, syncState?.focusShift, false) }, collection, props.store); setup(composite, () => sync(composite, ["renderedItems", "activeId"], (state) => { composite.setState("activeId", (activeId2) => { if (activeId2 !== void 0) return activeId2; return findFirstEnabledItem2(state.renderedItems)?.id; }); })); const getNextId = (direction = "next", options = {}) => { const defaultState = composite.getState(); const { skip = 0, activeId: activeId2 = defaultState.activeId, focusShift = defaultState.focusShift, focusLoop = defaultState.focusLoop, focusWrap = defaultState.focusWrap, includesBaseElement = defaultState.includesBaseElement, renderedItems = defaultState.renderedItems, rtl = defaultState.rtl } = options; const isVerticalDirection = direction === "up" || direction === "down"; const isNextDirection = direction === "next" || direction === "down"; const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; const canShift = focusShift && !skip; let items = !isVerticalDirection ? renderedItems : flatten2DArray(normalizeRows(groupItemsByRows2(renderedItems), activeId2, canShift)); items = canReverse ? reverseArray(items) : items; items = isVerticalDirection ? verticalizeItems(items) : items; if (activeId2 == null) return findFirstEnabledItem2(items)?.id; const activeItem = items.find((item) => item.id === activeId2); if (!activeItem) return findFirstEnabledItem2(items)?.id; const isGrid2 = items.some((item) => item.rowId); const activeIndex = items.indexOf(activeItem); const nextItems = items.slice(activeIndex + 1); const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); if (skip) { const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); return (nextEnabledItemsInRow.slice(skip)[0] || nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1])?.id; } const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false; if (canLoop) return findFirstEnabledItem2(flipItems(canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId), activeId2, hasNullItem), activeId2)?.id; if (canWrap) { const nextItem2 = findFirstEnabledItem2(hasNullItem ? nextItemsInRow : nextItems, activeId2); return hasNullItem ? nextItem2?.id || null : nextItem2?.id; } const nextItem = findFirstEnabledItem2(nextItemsInRow, activeId2); if (!nextItem && hasNullItem) return null; return nextItem?.id; }; return { ...collection, ...composite, setBaseElement: (element) => composite.setState("baseElement", element), setActiveId: (id) => composite.setState("activeId", id), move: (id) => { if (id === void 0) return; composite.setState("activeId", id); composite.setState("moves", (moves) => moves + 1); }, first: () => findFirstEnabledItem2(composite.getState().renderedItems)?.id, last: () => findFirstEnabledItem2(reverseArray(composite.getState().renderedItems))?.id, next: (options) => { if (options !== void 0 && typeof options === "number") options = { skip: options }; return getNextId("next", options); }, previous: (options) => { if (options !== void 0 && typeof options === "number") options = { skip: options }; return getNextId("previous", options); }, down: (options) => { if (options !== void 0 && typeof options === "number") options = { skip: options }; return getNextId("down", options); }, up: (options) => { if (options !== void 0 && typeof options === "number") options = { skip: options }; return getNextId("up", options); } }; } // node_modules/@ariakit/react-components/dist/composite/composite-store.js function useCompositeStoreOptions(props) { return { id: useId4(props.id), ...props }; } function useCompositeStoreProps(store, update2, props) { store = useCollectionStoreProps(store, update2, props); useStoreProps(store, props, "activeId", "setActiveId"); useStoreProps(store, props, "includesBaseElement"); useStoreProps(store, props, "virtualFocus"); useStoreProps(store, props, "orientation"); useStoreProps(store, props, "rtl"); useStoreProps(store, props, "focusLoop"); useStoreProps(store, props, "focusWrap"); useStoreProps(store, props, "focusShift"); return store; } // node_modules/@ariakit/components/dist/dialog/dialog-store.js function createDialogStore(props = {}) { return createDisclosureStore(props); } // node_modules/@ariakit/react-components/dist/dialog/dialog-store.js function useDialogStoreProps(store, update2, props) { return useDisclosureStoreProps(store, update2, props); } // node_modules/@ariakit/components/dist/popover/popover-store.js function createPopoverStore({ popover: otherPopover, ...props } = {}) { const store = mergeStore(props.store, omit2(otherPopover, [ "arrowElement", "anchorElement", "contentElement", "popoverElement", "disclosureElement" ])); throwOnConflictingProps(props, store); const syncState = store?.getState(); const dialog = createDialogStore({ ...props, store }); const placement = defaultValue(props.placement, syncState?.placement, "bottom"); const popover = createStore({ ...dialog.getState(), placement, currentPlacement: placement, anchorElement: defaultValue(syncState?.anchorElement, null), popoverElement: defaultValue(syncState?.popoverElement, null), arrowElement: defaultValue(syncState?.arrowElement, null), rendered: /* @__PURE__ */ Symbol("rendered") }, dialog, store); return { ...dialog, ...popover, setAnchorElement: (element) => popover.setState("anchorElement", element), setPopoverElement: (element) => popover.setState("popoverElement", element), setArrowElement: (element) => popover.setState("arrowElement", element), render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) }; } // node_modules/@ariakit/react-components/dist/popover/popover-store.js function usePopoverStoreProps(store, update2, props) { useUpdateEffect(update2, [props.popover]); useStoreProps(store, props, "placement"); return useDialogStoreProps(store, update2, props); } // node_modules/@ariakit/react-components/dist/popover/popover-anchor.js var TagName7 = "div"; var usePopoverAnchor = createHook(function usePopoverAnchor2({ store, ...props }) { const context = usePopoverProviderContext(); store = store || context; props = { ...props, ref: useMergeRefs(store?.setAnchorElement, props.ref) }; return props; }); var PopoverAnchor = forwardRef82(function PopoverAnchor2(props) { return createElement3(TagName7, usePopoverAnchor(props)); }); // node_modules/@ariakit/react-components/dist/composite/composite-hover.js var import_react23 = __toESM(require_react(), 1); var TagName8 = "div"; function hoveringInside(event) { const nextElement = event.relatedTarget; if (!isElement2(nextElement)) return false; return contains2(event.currentTarget, nextElement); } var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); function movingToAnotherItem(event) { const { relatedTarget } = event; if (!isElement2(relatedTarget)) return false; let dest = relatedTarget; do { if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; dest = dest.parentElement; } while (dest); return false; } var useCompositeHover = createHook(function useCompositeHover2({ store, focusOnHover = true, blurOnHoverEnd = !!focusOnHover, ...props }) { const context = useCompositeScopedContext(); store = store || context; invariant(store, "CompositeHover must be wrapped in a Composite component."); const isMouseMoving = useIsMouseMoving(); const onMouseMoveProp = props.onMouseMove; const focusOnHoverProp = useBooleanEvent(focusOnHover); const onMouseMove = useEvent((event) => { onMouseMoveProp?.(event); if (event.defaultPrevented) return; if (!isMouseMoving()) return; if (!focusOnHoverProp(event)) return; if (!hasFocusWithin(event.currentTarget)) { const baseElement = store?.getState().baseElement; if (baseElement && !hasFocus(baseElement)) baseElement.focus(); } store?.setActiveId(event.currentTarget.id); }); const onMouseLeaveProp = props.onMouseLeave; const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); const onMouseLeave = useEvent((event) => { onMouseLeaveProp?.(event); if (event.defaultPrevented) return; if (!isMouseMoving()) return; if (hoveringInside(event)) return; if (movingToAnotherItem(event)) return; if (!focusOnHoverProp(event)) return; if (!blurOnHoverEndProp(event)) return; store?.setActiveId(null); store?.getState().baseElement?.focus(); }); const ref = (0, import_react23.useCallback)((element) => { if (!element) return; element[symbol2] = true; }, []); props = { ...props, ref: useMergeRefs(ref, props.ref), onMouseMove, onMouseLeave }; return removeUndefinedValues(props); }); var CompositeHover = memo4(forwardRef82(function CompositeHover2(props) { return createElement3(TagName8, useCompositeHover(props)); })); // node_modules/@ariakit/react-components/dist/combobox/combobox.js var import_react24 = __toESM(require_react(), 1); var TagName9 = "input"; function isFirstItemAutoSelected(items, activeValue, autoSelect) { if (!autoSelect) return false; return items.find((item) => !item.disabled && item.value)?.value === activeValue; } function hasCompletionString(value, activeValue) { if (!activeValue) return false; if (value == null) return false; value = normalizeString(value); return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0; } function isInputEvent(event) { return event.type === "input"; } function isAriaAutoCompleteValue(value) { return value === "inline" || value === "list" || value === "both" || value === "none"; } function getDefaultAutoSelectId(items) { return items.find((item) => { if (item.disabled) return false; return item.element?.getAttribute("role") !== "tab"; })?.id; } var useCombobox = createHook(function useCombobox2({ store, focusable: focusable2 = true, autoSelect: autoSelectProp = false, getAutoSelectId, setValueOnChange, showMinLength = 0, showOnChange, showOnMouseDown, showOnClick = showOnMouseDown, showOnKeyDown, showOnKeyPress = showOnKeyDown, blurActiveItemOnClick, setValueOnClick = true, moveOnKeyPress = true, autoComplete = "list", ...props }) { const context = useComboboxProviderContext(); store = store || context; invariant(store, "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component."); const ref = (0, import_react24.useRef)(null); const [valueUpdated, forceValueUpdate] = useForceUpdate(); const canAutoSelectRef = (0, import_react24.useRef)(false); const composingRef = (0, import_react24.useRef)(false); const autoSelect = useStoreState(store, (state) => state.virtualFocus && autoSelectProp); const inline4 = autoComplete === "inline" || autoComplete === "both"; const [canInline, setCanInline] = (0, import_react24.useState)(inline4); useUpdateLayoutEffect(() => { if (!inline4) return; setCanInline(true); }, [inline4]); const storeValue = useStoreState(store, "value"); const prevSelectedValueRef = (0, import_react24.useRef)(void 0); (0, import_react24.useEffect)(() => { return sync(store, ["selectedValue", "activeId"], (_, prev) => { prevSelectedValueRef.current = prev.selectedValue; }); }, [store]); const inlineActiveValue = useStoreState(store, (state) => { if (!inline4) return; if (!canInline) return; if (state.activeValue && Array.isArray(state.selectedValue)) { if (state.selectedValue.includes(state.activeValue)) return; if (prevSelectedValueRef.current?.includes(state.activeValue)) return; } return state.activeValue; }); const items = useStoreState(store, "renderedItems"); const open = useStoreState(store, "open"); const contentElement = useStoreState(store, "contentElement"); const value = (0, import_react24.useMemo)(() => { if (!inline4) return storeValue; if (!canInline) return storeValue; if (isFirstItemAutoSelected(items, inlineActiveValue, autoSelect)) { if (hasCompletionString(storeValue, inlineActiveValue)) return storeValue + (inlineActiveValue?.slice(storeValue.length) || ""); return storeValue; } return inlineActiveValue || storeValue; }, [ inline4, canInline, items, inlineActiveValue, autoSelect, storeValue ]); (0, import_react24.useEffect)(() => { const element = ref.current; if (!element) return; const onCompositeItemMove = () => setCanInline(true); element.addEventListener("combobox-item-move", onCompositeItemMove); return () => { element.removeEventListener("combobox-item-move", onCompositeItemMove); }; }, []); (0, import_react24.useEffect)(() => { if (!inline4) return; if (!canInline) return; if (!inlineActiveValue) return; if (!isFirstItemAutoSelected(items, inlineActiveValue, autoSelect)) return; if (!hasCompletionString(storeValue, inlineActiveValue)) return; let cleanup = noop4; queueMicrotask(() => { const element = ref.current; if (!element) return; const { start: prevStart, end: prevEnd } = getTextboxSelection(element); const nextStart = storeValue.length; const nextEnd = inlineActiveValue.length; setSelectionRange(element, nextStart, nextEnd); cleanup = () => { if (!hasFocus(element)) return; const { start, end } = getTextboxSelection(element); if (start !== nextStart) return; if (end !== nextEnd) return; setSelectionRange(element, prevStart, prevEnd); }; }); return () => cleanup(); }, [ valueUpdated, inline4, canInline, inlineActiveValue, items, autoSelect, storeValue ]); const scrollingElementRef = (0, import_react24.useRef)(null); const getAutoSelectIdProp = useEvent(getAutoSelectId); const autoSelectIdRef = (0, import_react24.useRef)(null); const autoSelectMovedRef = (0, import_react24.useRef)(void 0); const userScrolledRef = (0, import_react24.useRef)(false); const isAutoScrollingRef = (0, import_react24.useRef)(false); (0, import_react24.useEffect)(() => { if (!open) return; if (!contentElement) return; const scrollingElement = getScrollingElement(contentElement); if (!scrollingElement) return; scrollingElementRef.current = scrollingElement; const onUserScroll = () => { canAutoSelectRef.current = false; userScrolledRef.current = true; }; const onScroll = () => { if (!isAutoScrollingRef.current) userScrolledRef.current = true; if (!store) return; if (!canAutoSelectRef.current) return; const { activeId } = store.getState(); if (activeId === null) return; if (activeId === autoSelectIdRef.current) return; canAutoSelectRef.current = false; }; const options = { passive: true, capture: true }; scrollingElement.addEventListener("wheel", onUserScroll, options); scrollingElement.addEventListener("touchmove", onUserScroll, options); scrollingElement.addEventListener("scroll", onScroll, options); return () => { scrollingElement.removeEventListener("wheel", onUserScroll, true); scrollingElement.removeEventListener("touchmove", onUserScroll, true); scrollingElement.removeEventListener("scroll", onScroll, true); }; }, [ open, contentElement, store ]); useSafeLayoutEffect(() => { userScrolledRef.current = false; if (!storeValue) return; if (composingRef.current) return; canAutoSelectRef.current = true; }, [storeValue]); useSafeLayoutEffect(() => { if (autoSelect !== "always" && open) return; canAutoSelectRef.current = open; }, [autoSelect, open]); useSafeLayoutEffect(() => { if (open) return; autoSelectMovedRef.current = void 0; }, [open]); const resetValueOnSelect = useStoreState(store, "resetValueOnSelect"); useUpdateEffect(() => { const canAutoSelect = canAutoSelectRef.current; if (!store) return; if (!open) return; if (!canAutoSelect && (!resetValueOnSelect || userScrolledRef.current)) return; const { baseElement, contentElement: contentElement2, activeId } = store.getState(); if (baseElement && !hasFocus(baseElement)) return; if (contentElement2?.hasAttribute("data-placing")) { const observer = new MutationObserver(forceValueUpdate); observer.observe(contentElement2, { attributeFilter: ["data-placing"] }); return () => observer.disconnect(); } if (autoSelect && canAutoSelect) { const userAutoSelectId = getAutoSelectIdProp(items); const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : getDefaultAutoSelectId(items) ?? store.first(); autoSelectIdRef.current = autoSelectId; const nextActiveId = autoSelectId ?? null; const nextActiveValue = store.item(nextActiveId)?.value; const moved = autoSelectMovedRef.current; if (nextActiveId !== activeId || moved?.id !== nextActiveId || moved?.value !== nextActiveValue) { autoSelectMovedRef.current = { id: nextActiveId, value: nextActiveValue }; store.move(nextActiveId); } else store.setState("activeValue", nextActiveValue); } else { const element = store.item(activeId || store.first())?.element; if (element && "scrollIntoView" in element) { isAutoScrollingRef.current = true; element.scrollIntoView({ block: "nearest", inline: "nearest" }); requestAnimationFrame(() => { isAutoScrollingRef.current = false; }); } } }, [ store, open, valueUpdated, storeValue, autoSelect, resetValueOnSelect, getAutoSelectIdProp, items ]); (0, import_react24.useEffect)(() => { if (!inline4) return; const combobox = ref.current; if (!combobox) return; const elements = [combobox, contentElement].filter((value2) => !!value2); const onBlur2 = (event) => { if (elements.every((el) => isFocusEventOutside(event, el))) store?.setValue(value); }; for (const element of elements) element.addEventListener("focusout", onBlur2); return () => { for (const element of elements) element.removeEventListener("focusout", onBlur2); }; }, [ inline4, contentElement, store, value ]); const canShow = (event) => { return event.currentTarget.value.length >= showMinLength; }; const onChangeProp = props.onChange; const showOnChangeProp = useBooleanEvent(showOnChange ?? canShow); const setValueOnChangeProp = useBooleanEvent(setValueOnChange ?? !store.tag); const onChange = useEvent((event) => { onChangeProp?.(event); if (event.defaultPrevented) return; if (!store) return; const currentTarget = event.currentTarget; const { value: value2, selectionStart, selectionEnd } = currentTarget; const nativeEvent = event.nativeEvent; canAutoSelectRef.current = true; if (isInputEvent(nativeEvent)) { if (nativeEvent.isComposing) { canAutoSelectRef.current = false; composingRef.current = true; } if (inline4) { const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; const caretAtEnd = selectionStart === value2.length; setCanInline(textInserted && caretAtEnd); } } if (setValueOnChangeProp(event)) { const isSameValue = value2 === store.getState().value; store.setValue(value2); queueMicrotask(() => { setSelectionRange(currentTarget, selectionStart, selectionEnd); }); if (inline4 && autoSelect && isSameValue) forceValueUpdate(); } if (showOnChangeProp(event)) store.show(); if (!autoSelect || !canAutoSelectRef.current) store.setActiveId(null); }); const onCompositionEndProp = props.onCompositionEnd; const onCompositionEnd = useEvent((event) => { canAutoSelectRef.current = true; composingRef.current = false; onCompositionEndProp?.(event); if (event.defaultPrevented) return; if (!autoSelect) return; forceValueUpdate(); }); const onMouseDownProp = props.onMouseDown; const blurActiveItemOnClickProp = useBooleanEvent(blurActiveItemOnClick ?? (() => store.getState().includesBaseElement)); const setValueOnClickProp = useBooleanEvent(setValueOnClick); const showOnClickProp = useBooleanEvent(showOnClick ?? canShow); const onMouseDown = useEvent((event) => { onMouseDownProp?.(event); if (event.defaultPrevented) return; if (event.button) return; if (event.ctrlKey) return; if (!store) return; if (blurActiveItemOnClickProp(event)) store.setActiveId(null); if (setValueOnClickProp(event)) store.setValue(value); if (showOnClickProp(event)) queueBeforeEvent(event.currentTarget, "mouseup", store.show); }); const onKeyDownProp = props.onKeyDown; const showOnKeyPressProp = useBooleanEvent(showOnKeyPress ?? canShow); const onKeyDown = useEvent((event) => { onKeyDownProp?.(event); if (!event.repeat) canAutoSelectRef.current = false; if (event.defaultPrevented) return; if (!store) return; const { open: open2 } = store.getState(); if (open2 && event.key === "Enter") { event.preventDefault(); return; } if (event.ctrlKey) return; if (event.altKey) return; if (event.shiftKey) return; if (event.metaKey) return; if (open2) return; if (event.key === "ArrowUp" || event.key === "ArrowDown") { if (showOnKeyPressProp(event)) { event.preventDefault(); store.show(); } } }); const onBlurProp = props.onBlur; const onBlur = useEvent((event) => { canAutoSelectRef.current = false; onBlurProp?.(event); if (event.defaultPrevented) return; }); const id = useId4(props.id); const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; const isActiveItem = useStoreState(store, (state) => state.activeId === null); props = { role: "combobox", "aria-autocomplete": ariaAutoComplete, "aria-haspopup": getPopupRole(contentElement, "listbox"), "aria-expanded": open, "aria-controls": contentElement?.id, "data-active-item": isActiveItem || void 0, value, ...props, id, ref: useMergeRefs(ref, props.ref), onChange, onCompositionEnd, onMouseDown, onKeyDown, onBlur }; props = useComposite({ store, focusable: focusable2, ...props, moveOnKeyPress: (event) => { if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; if (inline4) setCanInline(true); return true; } }); props = usePopoverAnchor({ store, ...props }); return { autoComplete: "off", ...props }; }); var Combobox = forwardRef82(function Combobox2(props) { return createElement3(TagName9, useCombobox(props)); }); // node_modules/@ariakit/react-components/dist/combobox/combobox-item.js var import_react25 = __toESM(require_react(), 1); var import_jsx_runtime128 = __toESM(require_jsx_runtime(), 1); var TagName10 = "div"; function isSelected(storeValue, itemValue) { if (itemValue == null) return; if (storeValue == null) return false; if (Array.isArray(storeValue)) return storeValue.includes(itemValue); return storeValue === itemValue; } function getItemRole(popupRole) { return { menu: "menuitem", listbox: "option", tree: "treeitem" }[popupRole] ?? "option"; } var useComboboxItem = createHook(function useComboboxItem2({ store, value, hideOnClick, setValueOnClick, selectValueOnClick = true, resetValueOnSelect, focusOnHover = false, moveOnKeyPress = true, getItem: getItemProp, ...props }) { const context = useComboboxScopedContext(); store = store || context; invariant(store, "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component."); const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, { resetValueOnSelectState: "resetValueOnSelect", multiSelectable(state) { return Array.isArray(state.selectedValue); }, selected(state) { return isSelected(state.selectedValue, value); } }); const getItem = (0, import_react25.useCallback)((item) => { const nextItem = { ...item, value }; if (getItemProp) return getItemProp(nextItem); return nextItem; }, [value, getItemProp]); setValueOnClick = setValueOnClick ?? !multiSelectable; hideOnClick = hideOnClick ?? (value != null && !multiSelectable); const onClickProp = props.onClick; const setValueOnClickProp = useBooleanEvent(setValueOnClick); const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); const resetValueOnSelectProp = useBooleanEvent(resetValueOnSelect ?? resetValueOnSelectState ?? multiSelectable); const hideOnClickProp = useBooleanEvent(hideOnClick); const onClick = useEvent((event) => { onClickProp?.(event); if (event.defaultPrevented) return; if (isDownloading(event)) return; if (isOpeningInNewTab(event)) return; if (value != null) { if (selectValueOnClickProp(event)) { if (resetValueOnSelectProp(event)) store?.resetValue(); store?.setSelectedValue((prevValue) => { if (!Array.isArray(prevValue)) return value; if (prevValue.includes(value)) return prevValue.filter((v2) => v2 !== value); return [...prevValue, value]; }); } if (setValueOnClickProp(event)) store?.setValue(value); } if (hideOnClickProp(event)) store?.hide(); }); const onKeyDownProp = props.onKeyDown; const onKeyDown = useEvent((event) => { onKeyDownProp?.(event); if (event.defaultPrevented) return; const baseElement = store?.getState().baseElement; if (!baseElement) return; if (hasFocus(baseElement)) return; if (event.key.length === 1 || event.key === "Backspace" || event.key === "Delete") { queueMicrotask(() => baseElement.focus()); if (isTextField(baseElement)) store?.setValue(baseElement.value); } }); if (multiSelectable && selected != null) props = { "aria-selected": selected, ...props }; props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(ComboboxItemCheckedContext.Provider, { value: selected ?? false, children: element }) }), [value, selected]); props = { role: getItemRole((0, import_react25.useContext)(ComboboxListRoleContext)), children: value, ...props, onClick, onKeyDown }; const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); props = useCompositeItem({ store, ...props, getItem, moveOnKeyPress: (event) => { if (!moveOnKeyPressProp(event)) return false; const moveEvent = new Event("combobox-item-move"); store?.getState().baseElement?.dispatchEvent(moveEvent); return true; } }); props = useCompositeHover({ store, focusOnHover, ...props }); return props; }); var ComboboxItem3 = memo4(forwardRef82(function ComboboxItem4(props) { return createElement3(TagName10, useComboboxItem(props)); })); // node_modules/@ariakit/react-components/dist/combobox/combobox-item-value.js var import_react26 = __toESM(require_react(), 1); var import_jsx_runtime129 = __toESM(require_jsx_runtime(), 1); var TagName11 = "span"; function normalizeValue(value) { return normalizeString(value).toLowerCase(); } function getOffsets(string, values) { const offsets = []; for (const value of values) { let pos = 0; const length = value.length; while (string.indexOf(value, pos) !== -1) { const index2 = string.indexOf(value, pos); if (index2 !== -1) offsets.push([index2, length]); pos = index2 + 1; } } return offsets; } function filterOverlappingOffsets(offsets) { return offsets.filter(([offset4, length], i2, arr) => { return !arr.some(([o2, l2], j2) => j2 !== i2 && o2 <= offset4 && o2 + l2 >= offset4 + length); }); } function sortOffsets(offsets) { return offsets.sort(([a2], [b2]) => a2 - b2); } function splitValue(itemValue, userValue) { if (!itemValue) return itemValue; if (!userValue) return itemValue; const userValues = toArray(userValue).filter(Boolean).map(normalizeValue); const parts = []; const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { "data-autocomplete-value": autocomplete ? "" : void 0, "data-user-value": autocomplete ? void 0 : "", children: value }, parts.length); const offsets = sortOffsets(filterOverlappingOffsets(getOffsets(normalizeValue(itemValue), new Set(userValues)))); const firstEntry = offsets[0]; if (!firstEntry) { parts.push(span(itemValue, true)); return parts; } const [firstOffset] = firstEntry; [itemValue.slice(0, firstOffset), ...offsets.flatMap(([offset4, length], i2) => { const value = itemValue.slice(offset4, offset4 + length); const nextOffset = offsets[i2 + 1]?.[0]; return [value, itemValue.slice(offset4 + length, nextOffset)]; })].forEach((value, i2) => { if (!value) return; parts.push(span(value, i2 % 2 === 0)); }); return parts; } var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { const context = useComboboxScopedContext(); store = store || context; const itemContext = (0, import_react26.useContext)(ComboboxItemValueContext); const itemValue = value ?? itemContext; const inputValue = useStoreState(store, (state) => userValue ?? state?.value); props = { children: (0, import_react26.useMemo)(() => { if (!itemValue) return; if (!inputValue) return itemValue; return splitValue(itemValue, inputValue); }, [itemValue, inputValue]), ...props }; return removeUndefinedValues(props); }); var ComboboxItemValue = forwardRef82(function ComboboxItemValue2(props) { return createElement3(TagName11, useComboboxItemValue(props)); }); // node_modules/@ariakit/react-components/dist/combobox/combobox-label.js var TagName12 = "label"; var useComboboxLabel = createHook(function useComboboxLabel2({ store, ...props }) { const context = useComboboxProviderContext(); store = store || context; invariant(store, "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component."); props = { htmlFor: useStoreState(store, (state) => state.baseElement?.id), ...props }; return removeUndefinedValues(props); }); var ComboboxLabel = memo4(forwardRef82(function ComboboxLabel2(props) { return createElement3(TagName12, useComboboxLabel(props)); })); // node_modules/@ariakit/react-components/dist/combobox/combobox-list.js var import_react27 = __toESM(require_react(), 1); var import_jsx_runtime130 = __toESM(require_jsx_runtime(), 1); var TagName13 = "div"; var useComboboxList = createHook(function useComboboxList2({ store, alwaysVisible, ...props }) { const scopedContext = useComboboxScopedContext(true); const context = useComboboxContext(); store = store || context; const scopedContextSameStore = !!store && store === scopedContext; invariant(store, "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component."); const ref = (0, import_react27.useRef)(null); const id = useId4(props.id); const mounted = useStoreState(store, "mounted"); const hidden = isHidden(mounted, props.hidden, alwaysVisible); const style = hidden ? { ...props.style, display: "none" } : props.style; const multiSelectable = useStoreState(store, (state) => Array.isArray(state.selectedValue)); const role = useAttribute(ref, "role", props.role); const ariaMultiSelectable = role === "listbox" || role === "tree" || role === "grid" ? multiSelectable || void 0 : void 0; const [hasListboxInside, setHasListboxInside] = (0, import_react27.useState)(false); const contentElement = useStoreState(store, "contentElement"); useSafeLayoutEffect(() => { if (!mounted) return; const element = ref.current; if (!element) return; if (contentElement !== element) return; const callback = () => { setHasListboxInside(!!element.querySelector("[role='listbox']")); }; const observer = new MutationObserver(callback); observer.observe(element, { subtree: true, childList: true, attributeFilter: ["role"] }); callback(); return () => observer.disconnect(); }, [mounted, contentElement]); if (!hasListboxInside) props = { role: "listbox", "aria-multiselectable": ariaMultiSelectable, ...props }; props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }), [store, role]); const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; props = { hidden, ...props, id, ref: useMergeRefs(setContentElement, ref, props.ref), style }; return removeUndefinedValues(props); }); var ComboboxList3 = forwardRef82(function ComboboxList4(props) { return createElement3(TagName13, useComboboxList(props)); }); // node_modules/@ariakit/react-components/dist/tag/tag-context.js var import_react28 = __toESM(require_react(), 1); var TagValueContext = (0, import_react28.createContext)(null); var TagRemoveIdContext = (0, import_react28.createContext)(null); var ctx7 = createStoreContext([CompositeContextProvider], [CompositeScopedContextProvider]); var useTagContext = ctx7.useContext; var useTagScopedContext = ctx7.useScopedContext; var useTagProviderContext = ctx7.useProviderContext; var TagContextProvider = ctx7.ContextProvider; var TagScopedContextProvider = ctx7.ScopedContextProvider; // node_modules/@ariakit/components/dist/combobox/combobox-store.js var isTouchSafari = isSafari2() && isTouchDevice(); function createComboboxStore({ tag, ...props } = {}) { const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); throwOnConflictingProps(props, store); const tagState = tag?.getState(); const syncState = store?.getState(); const activeId = defaultValue(props.activeId, syncState?.activeId, props.defaultActiveId, null); const composite = createCompositeStore({ ...props, activeId, includesBaseElement: defaultValue(props.includesBaseElement, syncState?.includesBaseElement, true), orientation: defaultValue(props.orientation, syncState?.orientation, "vertical"), focusLoop: defaultValue(props.focusLoop, syncState?.focusLoop, true), focusWrap: defaultValue(props.focusWrap, syncState?.focusWrap, true), virtualFocus: defaultValue(props.virtualFocus, syncState?.virtualFocus, true) }); const popover = createPopoverStore({ ...props, placement: defaultValue(props.placement, syncState?.placement, "bottom-start") }); const value = defaultValue(props.value, syncState?.value, props.defaultValue, ""); const selectedValue = defaultValue(props.selectedValue, syncState?.selectedValue, tagState?.values, props.defaultSelectedValue, ""); const multiSelectable = Array.isArray(selectedValue); const initialState = { ...composite.getState(), ...popover.getState(), value, selectedValue, resetValueOnSelect: defaultValue(props.resetValueOnSelect, syncState?.resetValueOnSelect, multiSelectable), resetValueOnHide: defaultValue(props.resetValueOnHide, syncState?.resetValueOnHide, multiSelectable && !tag), activeValue: syncState?.activeValue }; const combobox = createStore(initialState, composite, popover, store); if (isTouchSafari) setup(combobox, () => sync(combobox, ["virtualFocus"], () => { combobox.setState("virtualFocus", false); })); setup(combobox, () => { if (!tag) return; return chain(sync(combobox, ["selectedValue"], (state) => { if (!Array.isArray(state.selectedValue)) return; tag.setValues(state.selectedValue); }), sync(tag, ["values"], (state) => { combobox.setState("selectedValue", state.values); })); }); setup(combobox, () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { if (!state.resetValueOnHide) return; if (state.mounted) return; combobox.setState("value", value); })); setup(combobox, () => sync(combobox, ["open"], (state) => { if (state.open) return; combobox.setState("activeId", activeId); combobox.setState("moves", 0); })); setup(combobox, () => sync(combobox, ["moves", "activeId"], (state, prevState) => { if (state.moves === prevState.moves) combobox.setState("activeValue", void 0); })); setup(combobox, () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { if (state.moves === prev.moves) return; const { activeId: activeId2 } = combobox.getState(); const activeItem = composite.item(activeId2); combobox.setState("activeValue", activeItem?.value); })); return { ...popover, ...composite, ...combobox, tag, setValue: (value2) => combobox.setState("value", value2), resetValue: () => combobox.setState("value", initialState.value), setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2) }; } // node_modules/@ariakit/react-components/dist/combobox/combobox-store.js function useComboboxStoreOptions(props) { const tag = useTagContext(); props = { ...props, tag: props.tag !== void 0 ? props.tag : tag }; return useCompositeStoreOptions(props); } function useComboboxStoreProps(store, update2, props) { useUpdateEffect(update2, [props.tag]); useStoreProps(store, props, "value", "setValue"); useStoreProps(store, props, "selectedValue", "setSelectedValue"); useStoreProps(store, props, "resetValueOnHide"); useStoreProps(store, props, "resetValueOnSelect"); return Object.assign(useCompositeStoreProps(usePopoverStoreProps(store, update2, props), update2, props), { tag: props.tag }); } function useComboboxStore(props = {}) { props = useComboboxStoreOptions(props); const [store, update2] = useStore2(createComboboxStore, props); return useComboboxStoreProps(store, update2, props); } // node_modules/@ariakit/react-components/dist/combobox/combobox-provider.js var import_jsx_runtime131 = __toESM(require_jsx_runtime(), 1); function ComboboxProvider(props = {}) { return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(ComboboxContextProvider, { value: useComboboxStore(props), children: props.children }); } // packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs var import_remove_accents = __toESM(require_remove_accents(), 1); var import_compose8 = __toESM(require_compose(), 1); var import_i18n27 = __toESM(require_i18n(), 1); var import_element81 = __toESM(require_element(), 1); var import_components19 = __toESM(require_components(), 1); // packages/dataviews/build-module/components/dataviews-filters/utils.mjs var EMPTY_ARRAY3 = []; var getCurrentValue = (filterDefinition, currentFilter) => { if (filterDefinition.singleSelection) { return currentFilter?.value; } if (Array.isArray(currentFilter?.value)) { return currentFilter.value; } if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { return [currentFilter.value]; } return EMPTY_ARRAY3; }; // packages/dataviews/build-module/hooks/use-elements.mjs var import_element80 = __toESM(require_element(), 1); var EMPTY_ARRAY4 = []; function useElements({ elements, getElements }) { const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; const [records, setRecords] = (0, import_element80.useState)(staticElements); const [isLoading, setIsLoading] = (0, import_element80.useState)(false); (0, import_element80.useEffect)(() => { if (!getElements) { setRecords(staticElements); return; } let cancelled = false; setIsLoading(true); getElements().then((fetchedElements) => { if (!cancelled) { const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; setRecords(dynamicElements); } }).catch(() => { if (!cancelled) { setRecords(staticElements); } }).finally(() => { if (!cancelled) { setIsLoading(false); } }); return () => { cancelled = true; }; }, [getElements, staticElements]); return { elements: records, isLoading }; } // packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs var import_jsx_runtime132 = __toESM(require_jsx_runtime(), 1); function normalizeSearchInput(input = "") { return (0, import_remove_accents.default)(input.trim().toLowerCase()); } var getNewValue = (filterDefinition, currentFilter, value) => { if (filterDefinition.singleSelection) { return value; } if (Array.isArray(currentFilter?.value)) { return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; } return [value]; }; function generateFilterElementCompositeItemId(prefix, filterElementValue) { return `${prefix}-${filterElementValue}`; } var MultiSelectionOption = ({ selected }) => { return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( "span", { className: clsx_default( "dataviews-filters__search-widget-listitem-multi-selection", { "is-selected": selected } ), children: selected && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_components19.Icon, { icon: check_default }) } ); }; var SingleSelectionOption = ({ selected }) => { return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( "span", { className: clsx_default( "dataviews-filters__search-widget-listitem-single-selection", { "is-selected": selected } ) } ); }; function ListBox({ view, filter, onChangeView }) { const baseId = (0, import_compose8.useInstanceId)(ListBox, "dataviews-filter-list-box"); const [activeCompositeId, setActiveCompositeId] = (0, import_element81.useState)( // When there are one or less operators, the first item is set as active // (by setting the initial `activeId` to `undefined`). // With 2 or more operators, the focus is moved on the operators control // (by setting the initial `activeId` to `null`), meaning that there won't // be an active item initially. Focus is then managed via the // `onFocusVisible` callback. filter.operators?.length === 1 ? void 0 : null ); const currentFilter = view.filters?.find( (f2) => f2.field === filter.field ); const currentValue = getCurrentValue(filter, currentFilter); return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( import_components19.Composite, { virtualFocus: true, focusLoop: true, activeId: activeCompositeId, setActiveId: setActiveCompositeId, role: "listbox", className: "dataviews-filters__search-widget-listbox", "aria-label": (0, import_i18n27.sprintf)( /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ (0, import_i18n27.__)("List of: %1$s"), filter.name ), onFocusVisible: () => { if (!activeCompositeId && filter.elements.length) { setActiveCompositeId( generateFilterElementCompositeItemId( baseId, filter.elements[0].value ) ); } }, render: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_components19.Composite.Typeahead, {}), children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)( import_components19.Composite.Hover, { render: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( import_components19.Composite.Item, { id: generateFilterElementCompositeItemId( baseId, element.value ), render: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( "div", { "aria-label": element.label, role: "option", className: "dataviews-filters__search-widget-listitem" } ), onClick: () => { const newFilters = currentFilter ? [ ...(view.filters ?? []).map( (_filter) => { if (_filter.field === filter.field) { return { ..._filter, operator: currentFilter.operator || filter.operators[0], value: getNewValue( filter, currentFilter, element.value ) }; } return _filter; } ) ] : [ ...view.filters ?? [], { field: filter.field, operator: filter.operators[0], value: getNewValue( filter, currentFilter, element.value ) } ]; onChangeView({ ...view, page: 1, filters: newFilters }); } } ), children: [ filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( SingleSelectionOption, { selected: currentValue === element.value } ), !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( MultiSelectionOption, { selected: currentValue.includes(element.value) } ), /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( "span", { className: "dataviews-filters__search-widget-listitem-value", title: element.label, children: element.label } ) ] }, element.value )) } ); } function ComboboxList22({ view, filter, onChangeView }) { const [searchValue, setSearchValue] = (0, import_element81.useState)(""); const deferredSearchValue = (0, import_element81.useDeferredValue)(searchValue); const currentFilter = view.filters?.find( (_filter) => _filter.field === filter.field ); const currentValue = getCurrentValue(filter, currentFilter); const matches = (0, import_element81.useMemo)(() => { const normalizedSearch = normalizeSearchInput(deferredSearchValue); return filter.elements.filter( (item) => normalizeSearchInput(item.label).includes(normalizedSearch) ); }, [filter.elements, deferredSearchValue]); return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)( ComboboxProvider, { selectedValue: currentValue, setSelectedValue: (value) => { const newFilters = currentFilter ? [ ...(view.filters ?? []).map((_filter) => { if (_filter.field === filter.field) { return { ..._filter, operator: currentFilter.operator || filter.operators[0], value }; } return _filter; }) ] : [ ...view.filters ?? [], { field: filter.field, operator: filter.operators[0], value } ]; onChangeView({ ...view, page: 1, filters: newFilters }); }, setValue: setSearchValue, children: [ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(ComboboxLabel, {}), children: (0, import_i18n27.__)("Search items") }), /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( Combobox, { autoSelect: "always", placeholder: (0, import_i18n27.__)("Search"), className: "dataviews-filters__search-widget-filter-combobox__input" } ), /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_components19.Icon, { icon: search_default }) }) ] }), /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)( ComboboxList3, { className: "dataviews-filters__search-widget-filter-combobox-list", alwaysVisible: true, children: [ matches.map((element) => { return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)( ComboboxItem3, { resetValueOnSelect: false, value: element.value, className: "dataviews-filters__search-widget-listitem", hideOnClick: false, setValueOnClick: false, focusOnHover: true, children: [ filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( SingleSelectionOption, { selected: currentValue === element.value } ), !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( MultiSelectionOption, { selected: currentValue.includes( element.value ) } ), /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)( "span", { className: "dataviews-filters__search-widget-listitem-value", title: element.label, children: [ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( ComboboxItemValue, { className: "dataviews-filters__search-widget-filter-combobox-item-value", value: element.label } ), !!element.description && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) ] } ) ] }, element.value ); }), !matches.length && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("p", { children: (0, import_i18n27.__)("No results found") }) ] } ) ] } ); } function SearchWidget(props) { const { elements, isLoading } = useElements({ elements: props.filter.elements, getElements: props.filter.getElements }); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_components19.Spinner, {}) }); } if (elements.length === 0) { return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n27.__)("No elements found") }); } const Widget = elements.length > 10 ? ComboboxList22 : ListBox; return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); } // packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs var import_es6 = __toESM(require_es6(), 1); var import_compose9 = __toESM(require_compose(), 1); var import_element82 = __toESM(require_element(), 1); var import_components20 = __toESM(require_components(), 1); var import_jsx_runtime133 = __toESM(require_jsx_runtime(), 1); function InputWidget({ filter, view, onChangeView, fields }) { const currentFilter = view.filters?.find( (f2) => f2.field === filter.field ); const currentValue = getCurrentValue(filter, currentFilter); const field = (0, import_element82.useMemo)(() => { const currentField = fields.find((f2) => f2.id === filter.field); if (currentField) { return { ...currentField, // Deactivate validation for filters. isValid: {}, // Filter controls are always enabled. isDisabled: () => false, // Filter controls are always visible. isVisible: () => true, // Configure getValue/setValue as if Item was a plain object. getValue: ({ item }) => item[currentField.id], setValue: ({ value }) => ({ [currentField.id]: value }) }; } return currentField; }, [fields, filter.field]); const data = (0, import_element82.useMemo)(() => { return (view.filters ?? []).reduce( (acc, activeFilter) => { acc[activeFilter.field] = activeFilter.value; return acc; }, {} ); }, [view.filters]); const handleChange = (0, import_compose9.useEvent)((updatedData) => { if (!field || !currentFilter) { return; } const nextValue = field.getValue({ item: updatedData }); if ((0, import_es6.default)(nextValue, currentValue)) { return; } onChangeView({ ...view, filters: (view.filters ?? []).map( (_filter) => _filter.field === filter.field ? { ..._filter, operator: currentFilter.operator || filter.operators[0], // Consider empty strings as undefined: // // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records // - empty string as value means "search empty string": returns only the records that have an empty string as value // // In practice, this means the filter will not be able to find an empty string as the value. value: nextValue === "" ? void 0 : nextValue } : _filter ) }); }); if (!field || !field.Edit || !currentFilter) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( import_components20.Flex, { className: "dataviews-filters__user-input-widget", gap: 2.5, direction: "column", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( field.Edit, { hideLabelFromVision: true, data, field, operator: currentFilter.operator, onChange: handleChange } ) } ); } // node_modules/date-fns/constants.js var daysInYear = 365.2425; var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; var minTime = -maxTime; var millisecondsInWeek = 6048e5; var millisecondsInDay = 864e5; var secondsInHour = 3600; var secondsInDay = secondsInHour * 24; var secondsInWeek = secondsInDay * 7; var secondsInYear = secondsInDay * daysInYear; var secondsInMonth = secondsInYear / 12; var secondsInQuarter = secondsInMonth * 3; var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); // node_modules/date-fns/constructFrom.js function constructFrom(date, value) { if (typeof date === "function") return date(value); if (date && typeof date === "object" && constructFromSymbol in date) return date[constructFromSymbol](value); if (date instanceof Date) return new date.constructor(value); return new Date(value); } // node_modules/date-fns/toDate.js function toDate(argument, context) { return constructFrom(context || argument, argument); } // node_modules/date-fns/addDays.js function addDays(date, amount, options) { const _date = toDate(date, options?.in); if (isNaN(amount)) return constructFrom(options?.in || date, NaN); if (!amount) return _date; _date.setDate(_date.getDate() + amount); return _date; } // node_modules/date-fns/addMonths.js function addMonths(date, amount, options) { const _date = toDate(date, options?.in); if (isNaN(amount)) return constructFrom(options?.in || date, NaN); if (!amount) { return _date; } const dayOfMonth = _date.getDate(); const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); const daysInMonth = endOfDesiredMonth.getDate(); if (dayOfMonth >= daysInMonth) { return endOfDesiredMonth; } else { _date.setFullYear( endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth ); return _date; } } // node_modules/date-fns/_lib/defaultOptions.js var defaultOptions = {}; function getDefaultOptions() { return defaultOptions; } // node_modules/date-fns/startOfWeek.js function startOfWeek(date, options) { const defaultOptions2 = getDefaultOptions(); const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; const _date = toDate(date, options?.in); const day = _date.getDay(); const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; _date.setDate(_date.getDate() - diff); _date.setHours(0, 0, 0, 0); return _date; } // node_modules/date-fns/startOfISOWeek.js function startOfISOWeek(date, options) { return startOfWeek(date, { ...options, weekStartsOn: 1 }); } // node_modules/date-fns/getISOWeekYear.js function getISOWeekYear(date, options) { const _date = toDate(date, options?.in); const year = _date.getFullYear(); const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); if (_date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (_date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js function getTimezoneOffsetInMilliseconds(date) { const _date = toDate(date); const utcDate = new Date( Date.UTC( _date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds() ) ); utcDate.setUTCFullYear(_date.getFullYear()); return +date - +utcDate; } // node_modules/date-fns/_lib/normalizeDates.js function normalizeDates(context, ...dates) { const normalize = constructFrom.bind( null, context || dates.find((date) => typeof date === "object") ); return dates.map(normalize); } // node_modules/date-fns/startOfDay.js function startOfDay(date, options) { const _date = toDate(date, options?.in); _date.setHours(0, 0, 0, 0); return _date; } // node_modules/date-fns/differenceInCalendarDays.js function differenceInCalendarDays(laterDate, earlierDate, options) { const [laterDate_, earlierDate_] = normalizeDates( options?.in, laterDate, earlierDate ); const laterStartOfDay = startOfDay(laterDate_); const earlierStartOfDay = startOfDay(earlierDate_); const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); } // node_modules/date-fns/startOfISOWeekYear.js function startOfISOWeekYear(date, options) { const year = getISOWeekYear(date, options); const fourthOfJanuary = constructFrom(options?.in || date, 0); fourthOfJanuary.setFullYear(year, 0, 4); fourthOfJanuary.setHours(0, 0, 0, 0); return startOfISOWeek(fourthOfJanuary); } // node_modules/date-fns/addWeeks.js function addWeeks(date, amount, options) { return addDays(date, amount * 7, options); } // node_modules/date-fns/addYears.js function addYears(date, amount, options) { return addMonths(date, amount * 12, options); } // node_modules/date-fns/isDate.js function isDate(value) { return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; } // node_modules/date-fns/isValid.js function isValid(date) { return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); } // node_modules/date-fns/startOfMonth.js function startOfMonth(date, options) { const _date = toDate(date, options?.in); _date.setDate(1); _date.setHours(0, 0, 0, 0); return _date; } // node_modules/date-fns/startOfYear.js function startOfYear(date, options) { const date_ = toDate(date, options?.in); date_.setFullYear(date_.getFullYear(), 0, 1); date_.setHours(0, 0, 0, 0); return date_; } // node_modules/date-fns/locale/en-US/_lib/formatDistance.js var formatDistanceLocale = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, xSeconds: { one: "1 second", other: "{{count}} seconds" }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, xMinutes: { one: "1 minute", other: "{{count}} minutes" }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, xHours: { one: "1 hour", other: "{{count}} hours" }, xDays: { one: "1 day", other: "{{count}} days" }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, xWeeks: { one: "1 week", other: "{{count}} weeks" }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, xMonths: { one: "1 month", other: "{{count}} months" }, aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, xYears: { one: "1 year", other: "{{count}} years" }, overXYears: { one: "over 1 year", other: "over {{count}} years" }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } }; var formatDistance = (token, count, options) => { let result; const tokenValue = formatDistanceLocale[token]; if (typeof tokenValue === "string") { result = tokenValue; } else if (count === 1) { result = tokenValue.one; } else { result = tokenValue.other.replace("{{count}}", count.toString()); } if (options?.addSuffix) { if (options.comparison && options.comparison > 0) { return "in " + result; } else { return result + " ago"; } } return result; }; // node_modules/date-fns/locale/_lib/buildFormatLongFn.js function buildFormatLongFn(args) { return (options = {}) => { const width = options.width ? String(options.width) : args.defaultWidth; const format7 = args.formats[width] || args.formats[args.defaultWidth]; return format7; }; } // node_modules/date-fns/locale/en-US/_lib/formatLong.js var dateFormats = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy" }; var timeFormats = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }; var dateTimeFormats = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}" }; var formatLong = { date: buildFormatLongFn({ formats: dateFormats, defaultWidth: "full" }), time: buildFormatLongFn({ formats: timeFormats, defaultWidth: "full" }), dateTime: buildFormatLongFn({ formats: dateTimeFormats, defaultWidth: "full" }) }; // node_modules/date-fns/locale/en-US/_lib/formatRelative.js var formatRelativeLocale = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P" }; var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; // node_modules/date-fns/locale/_lib/buildLocalizeFn.js function buildLocalizeFn(args) { return (value, options) => { const context = options?.context ? String(options.context) : "standalone"; let valuesArray; if (context === "formatting" && args.formattingValues) { const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; const width = options?.width ? String(options.width) : defaultWidth; valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; } else { const defaultWidth = args.defaultWidth; const width = options?.width ? String(options.width) : args.defaultWidth; valuesArray = args.values[width] || args.values[defaultWidth]; } const index2 = args.argumentCallback ? args.argumentCallback(value) : value; return valuesArray[index2]; }; } // node_modules/date-fns/locale/en-US/_lib/localize.js var eraValues = { narrow: ["B", "A"], abbreviated: ["BC", "AD"], wide: ["Before Christ", "Anno Domini"] }; var quarterValues = { narrow: ["1", "2", "3", "4"], abbreviated: ["Q1", "Q2", "Q3", "Q4"], wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] }; var monthValues = { narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], abbreviated: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], wide: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] }; var dayValues = { narrow: ["S", "M", "T", "W", "T", "F", "S"], short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], wide: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] }; var dayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" } }; var formattingDayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" } }; var ordinalNumber = (dirtyNumber, _options) => { const number = Number(dirtyNumber); const rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + "st"; case 2: return number + "nd"; case 3: return number + "rd"; } } return number + "th"; }; var localize = { ordinalNumber, era: buildLocalizeFn({ values: eraValues, defaultWidth: "wide" }), quarter: buildLocalizeFn({ values: quarterValues, defaultWidth: "wide", argumentCallback: (quarter) => quarter - 1 }), month: buildLocalizeFn({ values: monthValues, defaultWidth: "wide" }), day: buildLocalizeFn({ values: dayValues, defaultWidth: "wide" }), dayPeriod: buildLocalizeFn({ values: dayPeriodValues, defaultWidth: "wide", formattingValues: formattingDayPeriodValues, defaultFormattingWidth: "wide" }) }; // node_modules/date-fns/locale/_lib/buildMatchFn.js function buildMatchFn(args) { return (string, options = {}) => { const width = options.width; const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; const matchResult = string.match(matchPattern); if (!matchResult) { return null; } const matchedString = matchResult[0]; const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( // [TODO] -- I challenge you to fix the type findKey(parsePatterns, (pattern) => pattern.test(matchedString)) ); let value; value = args.valueCallback ? args.valueCallback(key) : key; value = options.valueCallback ? ( // [TODO] -- I challenge you to fix the type options.valueCallback(value) ) : value; const rest = string.slice(matchedString.length); return { value, rest }; }; } function findKey(object, predicate) { for (const key in object) { if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { return key; } } return void 0; } function findIndex(array, predicate) { for (let key = 0; key < array.length; key++) { if (predicate(array[key])) { return key; } } return void 0; } // node_modules/date-fns/locale/_lib/buildMatchPatternFn.js function buildMatchPatternFn(args) { return (string, options = {}) => { const matchResult = string.match(args.matchPattern); if (!matchResult) return null; const matchedString = matchResult[0]; const parseResult = string.match(args.parsePattern); if (!parseResult) return null; let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; value = options.valueCallback ? options.valueCallback(value) : value; const rest = string.slice(matchedString.length); return { value, rest }; }; } // node_modules/date-fns/locale/en-US/_lib/match.js var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; var parseOrdinalNumberPattern = /\d+/i; var matchEraPatterns = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }; var parseEraPatterns = { any: [/^b/i, /^(a|c)/i] }; var matchQuarterPatterns = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }; var parseQuarterPatterns = { any: [/1/i, /2/i, /3/i, /4/i] }; var matchMonthPatterns = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }; var parseMonthPatterns = { narrow: [ /^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i ], any: [ /^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i ] }; var matchDayPatterns = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }; var parseDayPatterns = { narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] }; var matchDayPeriodPatterns = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }; var parseDayPeriodPatterns = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }; var match = { ordinalNumber: buildMatchPatternFn({ matchPattern: matchOrdinalNumberPattern, parsePattern: parseOrdinalNumberPattern, valueCallback: (value) => parseInt(value, 10) }), era: buildMatchFn({ matchPatterns: matchEraPatterns, defaultMatchWidth: "wide", parsePatterns: parseEraPatterns, defaultParseWidth: "any" }), quarter: buildMatchFn({ matchPatterns: matchQuarterPatterns, defaultMatchWidth: "wide", parsePatterns: parseQuarterPatterns, defaultParseWidth: "any", valueCallback: (index2) => index2 + 1 }), month: buildMatchFn({ matchPatterns: matchMonthPatterns, defaultMatchWidth: "wide", parsePatterns: parseMonthPatterns, defaultParseWidth: "any" }), day: buildMatchFn({ matchPatterns: matchDayPatterns, defaultMatchWidth: "wide", parsePatterns: parseDayPatterns, defaultParseWidth: "any" }), dayPeriod: buildMatchFn({ matchPatterns: matchDayPeriodPatterns, defaultMatchWidth: "any", parsePatterns: parseDayPeriodPatterns, defaultParseWidth: "any" }) }; // node_modules/date-fns/locale/en-US.js var enUS = { code: "en-US", formatDistance, formatLong, formatRelative, localize, match, options: { weekStartsOn: 0, firstWeekContainsDate: 1 } }; // node_modules/date-fns/getDayOfYear.js function getDayOfYear(date, options) { const _date = toDate(date, options?.in); const diff = differenceInCalendarDays(_date, startOfYear(_date)); const dayOfYear = diff + 1; return dayOfYear; } // node_modules/date-fns/getISOWeek.js function getISOWeek(date, options) { const _date = toDate(date, options?.in); const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); return Math.round(diff / millisecondsInWeek) + 1; } // node_modules/date-fns/getWeekYear.js function getWeekYear(date, options) { const _date = toDate(date, options?.in); const year = _date.getFullYear(); const defaultOptions2 = getDefaultOptions(); const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; const firstWeekOfNextYear = constructFrom(options?.in || date, 0); firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setHours(0, 0, 0, 0); const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); const firstWeekOfThisYear = constructFrom(options?.in || date, 0); firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setHours(0, 0, 0, 0); const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); if (+_date >= +startOfNextYear) { return year + 1; } else if (+_date >= +startOfThisYear) { return year; } else { return year - 1; } } // node_modules/date-fns/startOfWeekYear.js function startOfWeekYear(date, options) { const defaultOptions2 = getDefaultOptions(); const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; const year = getWeekYear(date, options); const firstWeek = constructFrom(options?.in || date, 0); firstWeek.setFullYear(year, 0, firstWeekContainsDate); firstWeek.setHours(0, 0, 0, 0); const _date = startOfWeek(firstWeek, options); return _date; } // node_modules/date-fns/getWeek.js function getWeek(date, options) { const _date = toDate(date, options?.in); const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); return Math.round(diff / millisecondsInWeek) + 1; } // node_modules/date-fns/_lib/addLeadingZeros.js function addLeadingZeros(number, targetLength) { const sign = number < 0 ? "-" : ""; const output = Math.abs(number).toString().padStart(targetLength, "0"); return sign + output; } // node_modules/date-fns/_lib/format/lightFormatters.js var lightFormatters = { // Year y(date, token) { const signedYear = date.getFullYear(); const year = signedYear > 0 ? signedYear : 1 - signedYear; return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); }, // Month M(date, token) { const month = date.getMonth(); return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); }, // Day of the month d(date, token) { return addLeadingZeros(date.getDate(), token.length); }, // AM or PM a(date, token) { const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return dayPeriodEnumValue.toUpperCase(); case "aaa": return dayPeriodEnumValue; case "aaaaa": return dayPeriodEnumValue[0]; case "aaaa": default: return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; } }, // Hour [1-12] h(date, token) { return addLeadingZeros(date.getHours() % 12 || 12, token.length); }, // Hour [0-23] H(date, token) { return addLeadingZeros(date.getHours(), token.length); }, // Minute m(date, token) { return addLeadingZeros(date.getMinutes(), token.length); }, // Second s(date, token) { return addLeadingZeros(date.getSeconds(), token.length); }, // Fraction of second S(date, token) { const numberOfDigits = token.length; const milliseconds = date.getMilliseconds(); const fractionalSeconds = Math.trunc( milliseconds * Math.pow(10, numberOfDigits - 3) ); return addLeadingZeros(fractionalSeconds, token.length); } }; // node_modules/date-fns/_lib/format/formatters.js var dayPeriodEnum = { am: "am", pm: "pm", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }; var formatters = { // Era G: function(date, token, localize2) { const era = date.getFullYear() > 0 ? 1 : 0; switch (token) { // AD, BC case "G": case "GG": case "GGG": return localize2.era(era, { width: "abbreviated" }); // A, B case "GGGGG": return localize2.era(era, { width: "narrow" }); // Anno Domini, Before Christ case "GGGG": default: return localize2.era(era, { width: "wide" }); } }, // Year y: function(date, token, localize2) { if (token === "yo") { const signedYear = date.getFullYear(); const year = signedYear > 0 ? signedYear : 1 - signedYear; return localize2.ordinalNumber(year, { unit: "year" }); } return lightFormatters.y(date, token); }, // Local week-numbering year Y: function(date, token, localize2, options) { const signedWeekYear = getWeekYear(date, options); const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; if (token === "YY") { const twoDigitYear = weekYear % 100; return addLeadingZeros(twoDigitYear, 2); } if (token === "Yo") { return localize2.ordinalNumber(weekYear, { unit: "year" }); } return addLeadingZeros(weekYear, token.length); }, // ISO week-numbering year R: function(date, token) { const isoWeekYear = getISOWeekYear(date); return addLeadingZeros(isoWeekYear, token.length); }, // Extended year. This is a single number designating the year of this calendar system. // The main difference between `y` and `u` localizers are B.C. years: // | Year | `y` | `u` | // |------|-----|-----| // | AC 1 | 1 | 1 | // | BC 1 | 1 | 0 | // | BC 2 | 2 | -1 | // Also `yy` always returns the last two digits of a year, // while `uu` pads single digit years to 2 characters and returns other years unchanged. u: function(date, token) { const year = date.getFullYear(); return addLeadingZeros(year, token.length); }, // Quarter Q: function(date, token, localize2) { const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case "Q": return String(quarter); // 01, 02, 03, 04 case "QQ": return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case "Qo": return localize2.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 case "QQQ": return localize2.quarter(quarter, { width: "abbreviated", context: "formatting" }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case "QQQQQ": return localize2.quarter(quarter, { width: "narrow", context: "formatting" }); // 1st quarter, 2nd quarter, ... case "QQQQ": default: return localize2.quarter(quarter, { width: "wide", context: "formatting" }); } }, // Stand-alone quarter q: function(date, token, localize2) { const quarter = Math.ceil((date.getMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case "q": return String(quarter); // 01, 02, 03, 04 case "qq": return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case "qo": return localize2.ordinalNumber(quarter, { unit: "quarter" }); // Q1, Q2, Q3, Q4 case "qqq": return localize2.quarter(quarter, { width: "abbreviated", context: "standalone" }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case "qqqqq": return localize2.quarter(quarter, { width: "narrow", context: "standalone" }); // 1st quarter, 2nd quarter, ... case "qqqq": default: return localize2.quarter(quarter, { width: "wide", context: "standalone" }); } }, // Month M: function(date, token, localize2) { const month = date.getMonth(); switch (token) { case "M": case "MM": return lightFormatters.M(date, token); // 1st, 2nd, ..., 12th case "Mo": return localize2.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec case "MMM": return localize2.month(month, { width: "abbreviated", context: "formatting" }); // J, F, ..., D case "MMMMM": return localize2.month(month, { width: "narrow", context: "formatting" }); // January, February, ..., December case "MMMM": default: return localize2.month(month, { width: "wide", context: "formatting" }); } }, // Stand-alone month L: function(date, token, localize2) { const month = date.getMonth(); switch (token) { // 1, 2, ..., 12 case "L": return String(month + 1); // 01, 02, ..., 12 case "LL": return addLeadingZeros(month + 1, 2); // 1st, 2nd, ..., 12th case "Lo": return localize2.ordinalNumber(month + 1, { unit: "month" }); // Jan, Feb, ..., Dec case "LLL": return localize2.month(month, { width: "abbreviated", context: "standalone" }); // J, F, ..., D case "LLLLL": return localize2.month(month, { width: "narrow", context: "standalone" }); // January, February, ..., December case "LLLL": default: return localize2.month(month, { width: "wide", context: "standalone" }); } }, // Local week of year w: function(date, token, localize2, options) { const week = getWeek(date, options); if (token === "wo") { return localize2.ordinalNumber(week, { unit: "week" }); } return addLeadingZeros(week, token.length); }, // ISO week of year I: function(date, token, localize2) { const isoWeek = getISOWeek(date); if (token === "Io") { return localize2.ordinalNumber(isoWeek, { unit: "week" }); } return addLeadingZeros(isoWeek, token.length); }, // Day of the month d: function(date, token, localize2) { if (token === "do") { return localize2.ordinalNumber(date.getDate(), { unit: "date" }); } return lightFormatters.d(date, token); }, // Day of year D: function(date, token, localize2) { const dayOfYear = getDayOfYear(date); if (token === "Do") { return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); } return addLeadingZeros(dayOfYear, token.length); }, // Day of week E: function(date, token, localize2) { const dayOfWeek = date.getDay(); switch (token) { // Tue case "E": case "EE": case "EEE": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); // T case "EEEEE": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); // Tu case "EEEEEE": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); // Tuesday case "EEEE": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, // Local day of week e: function(date, token, localize2, options) { const dayOfWeek = date.getDay(); const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (Nth day of week with current locale or weekStartsOn) case "e": return String(localDayOfWeek); // Padded numerical value case "ee": return addLeadingZeros(localDayOfWeek, 2); // 1st, 2nd, ..., 7th case "eo": return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); case "eee": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); // T case "eeeee": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); // Tu case "eeeeee": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); // Tuesday case "eeee": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, // Stand-alone local day of week c: function(date, token, localize2, options) { const dayOfWeek = date.getDay(); const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (same as in `e`) case "c": return String(localDayOfWeek); // Padded numerical value case "cc": return addLeadingZeros(localDayOfWeek, token.length); // 1st, 2nd, ..., 7th case "co": return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); case "ccc": return localize2.day(dayOfWeek, { width: "abbreviated", context: "standalone" }); // T case "ccccc": return localize2.day(dayOfWeek, { width: "narrow", context: "standalone" }); // Tu case "cccccc": return localize2.day(dayOfWeek, { width: "short", context: "standalone" }); // Tuesday case "cccc": default: return localize2.day(dayOfWeek, { width: "wide", context: "standalone" }); } }, // ISO day of week i: function(date, token, localize2) { const dayOfWeek = date.getDay(); const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; switch (token) { // 2 case "i": return String(isoDayOfWeek); // 02 case "ii": return addLeadingZeros(isoDayOfWeek, token.length); // 2nd case "io": return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); // Tue case "iii": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); // T case "iiiii": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); // Tu case "iiiiii": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); // Tuesday case "iiii": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, // AM or PM a: function(date, token, localize2) { const hours = date.getHours(); const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "aaa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "aaaaa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "aaaa": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, // AM, PM, midnight, noon b: function(date, token, localize2) { const hours = date.getHours(); let dayPeriodEnumValue; if (hours === 12) { dayPeriodEnumValue = dayPeriodEnum.noon; } else if (hours === 0) { dayPeriodEnumValue = dayPeriodEnum.midnight; } else { dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; } switch (token) { case "b": case "bb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "bbb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "bbbbb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "bbbb": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, // in the morning, in the afternoon, in the evening, at night B: function(date, token, localize2) { const hours = date.getHours(); let dayPeriodEnumValue; if (hours >= 17) { dayPeriodEnumValue = dayPeriodEnum.evening; } else if (hours >= 12) { dayPeriodEnumValue = dayPeriodEnum.afternoon; } else if (hours >= 4) { dayPeriodEnumValue = dayPeriodEnum.morning; } else { dayPeriodEnumValue = dayPeriodEnum.night; } switch (token) { case "B": case "BB": case "BBB": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "BBBBB": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "BBBB": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, // Hour [1-12] h: function(date, token, localize2) { if (token === "ho") { let hours = date.getHours() % 12; if (hours === 0) hours = 12; return localize2.ordinalNumber(hours, { unit: "hour" }); } return lightFormatters.h(date, token); }, // Hour [0-23] H: function(date, token, localize2) { if (token === "Ho") { return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); } return lightFormatters.H(date, token); }, // Hour [0-11] K: function(date, token, localize2) { const hours = date.getHours() % 12; if (token === "Ko") { return localize2.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, // Hour [1-24] k: function(date, token, localize2) { let hours = date.getHours(); if (hours === 0) hours = 24; if (token === "ko") { return localize2.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, // Minute m: function(date, token, localize2) { if (token === "mo") { return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); } return lightFormatters.m(date, token); }, // Second s: function(date, token, localize2) { if (token === "so") { return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); } return lightFormatters.s(date, token); }, // Fraction of second S: function(date, token) { return lightFormatters.S(date, token); }, // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) X: function(date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); if (timezoneOffset === 0) { return "Z"; } switch (token) { // Hours and optional minutes case "X": return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XX` case "XXXX": case "XX": return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XXX` case "XXXXX": case "XXX": // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ":"); } }, // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) x: function(date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Hours and optional minutes case "x": return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xx` case "xxxx": case "xx": return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xxx` case "xxxxx": case "xxx": // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ":"); } }, // Timezone (GMT) O: function(date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short case "O": case "OO": case "OOO": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long case "OOOO": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, // Timezone (specific non-location) z: function(date, token, _localize) { const timezoneOffset = date.getTimezoneOffset(); switch (token) { // Short case "z": case "zz": case "zzz": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); // Long case "zzzz": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, // Seconds timestamp t: function(date, token, _localize) { const timestamp = Math.trunc(+date / 1e3); return addLeadingZeros(timestamp, token.length); }, // Milliseconds timestamp T: function(date, token, _localize) { return addLeadingZeros(+date, token.length); } }; function formatTimezoneShort(offset4, delimiter = "") { const sign = offset4 > 0 ? "-" : "+"; const absOffset = Math.abs(offset4); const hours = Math.trunc(absOffset / 60); const minutes = absOffset % 60; if (minutes === 0) { return sign + String(hours); } return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); } function formatTimezoneWithOptionalMinutes(offset4, delimiter) { if (offset4 % 60 === 0) { const sign = offset4 > 0 ? "-" : "+"; return sign + addLeadingZeros(Math.abs(offset4) / 60, 2); } return formatTimezone(offset4, delimiter); } function formatTimezone(offset4, delimiter = "") { const sign = offset4 > 0 ? "-" : "+"; const absOffset = Math.abs(offset4); const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); const minutes = addLeadingZeros(absOffset % 60, 2); return sign + hours + delimiter + minutes; } // node_modules/date-fns/_lib/format/longFormatters.js var dateLongFormatter = (pattern, formatLong2) => { switch (pattern) { case "P": return formatLong2.date({ width: "short" }); case "PP": return formatLong2.date({ width: "medium" }); case "PPP": return formatLong2.date({ width: "long" }); case "PPPP": default: return formatLong2.date({ width: "full" }); } }; var timeLongFormatter = (pattern, formatLong2) => { switch (pattern) { case "p": return formatLong2.time({ width: "short" }); case "pp": return formatLong2.time({ width: "medium" }); case "ppp": return formatLong2.time({ width: "long" }); case "pppp": default: return formatLong2.time({ width: "full" }); } }; var dateTimeLongFormatter = (pattern, formatLong2) => { const matchResult = pattern.match(/(P+)(p+)?/) || []; const datePattern = matchResult[1]; const timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong2); } let dateTimeFormat; switch (datePattern) { case "P": dateTimeFormat = formatLong2.dateTime({ width: "short" }); break; case "PP": dateTimeFormat = formatLong2.dateTime({ width: "medium" }); break; case "PPP": dateTimeFormat = formatLong2.dateTime({ width: "long" }); break; case "PPPP": default: dateTimeFormat = formatLong2.dateTime({ width: "full" }); break; } return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); }; var longFormatters = { p: timeLongFormatter, P: dateTimeLongFormatter }; // node_modules/date-fns/_lib/protectedTokens.js var dayOfYearTokenRE = /^D+$/; var weekYearTokenRE = /^Y+$/; var throwTokens = ["D", "DD", "YY", "YYYY"]; function isProtectedDayOfYearToken(token) { return dayOfYearTokenRE.test(token); } function isProtectedWeekYearToken(token) { return weekYearTokenRE.test(token); } function warnOrThrowProtectedError(token, format7, input) { const _message = message(token, format7, input); console.warn(_message); if (throwTokens.includes(token)) throw new RangeError(_message); } function message(token, format7, input) { const subject = token[0] === "Y" ? "years" : "days of the month"; return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format7}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; } // node_modules/date-fns/format.js var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; var escapedStringRegExp = /^'([^]*?)'?$/; var doubleQuoteRegExp = /''/g; var unescapedLatinCharacterRegExp = /[a-zA-Z]/; function format(date, formatStr, options) { const defaultOptions2 = getDefaultOptions(); const locale = options?.locale ?? defaultOptions2.locale ?? enUS; const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; const originalDate = toDate(date, options?.in); if (!isValid(originalDate)) { throw new RangeError("Invalid time value"); } let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { const firstCharacter = substring[0]; if (firstCharacter === "p" || firstCharacter === "P") { const longFormatter = longFormatters[firstCharacter]; return longFormatter(substring, locale.formatLong); } return substring; }).join("").match(formattingTokensRegExp).map((substring) => { if (substring === "''") { return { isToken: false, value: "'" }; } const firstCharacter = substring[0]; if (firstCharacter === "'") { return { isToken: false, value: cleanEscapedString(substring) }; } if (formatters[firstCharacter]) { return { isToken: true, value: substring }; } if (firstCharacter.match(unescapedLatinCharacterRegExp)) { throw new RangeError( "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" ); } return { isToken: false, value: substring }; }); if (locale.localize.preprocessor) { parts = locale.localize.preprocessor(originalDate, parts); } const formatterOptions = { firstWeekContainsDate, weekStartsOn, locale }; return parts.map((part) => { if (!part.isToken) return part.value; const token = part.value; if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { warnOrThrowProtectedError(token, formatStr, String(date)); } const formatter = formatters[token[0]]; return formatter(originalDate, token, locale.localize, formatterOptions); }).join(""); } function cleanEscapedString(input) { const matched = input.match(escapedStringRegExp); if (!matched) { return input; } return matched[1].replace(doubleQuoteRegExp, "'"); } // node_modules/date-fns/subDays.js function subDays(date, amount, options) { return addDays(date, -amount, options); } // node_modules/date-fns/subMonths.js function subMonths(date, amount, options) { return addMonths(date, -amount, options); } // node_modules/date-fns/subWeeks.js function subWeeks(date, amount, options) { return addWeeks(date, -amount, options); } // node_modules/date-fns/subYears.js function subYears(date, amount, options) { return addYears(date, -amount, options); } // packages/dataviews/build-module/utils/operators.mjs var import_i18n28 = __toESM(require_i18n(), 1); var import_element83 = __toESM(require_element(), 1); var import_date = __toESM(require_date(), 1); var import_jsx_runtime134 = __toESM(require_jsx_runtime(), 1); var filterTextWrappers = { Name: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), Value: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) }; function getRelativeDate(value, unit) { switch (unit) { case "days": return subDays(/* @__PURE__ */ new Date(), value); case "weeks": return subWeeks(/* @__PURE__ */ new Date(), value); case "months": return subMonths(/* @__PURE__ */ new Date(), value); case "years": return subYears(/* @__PURE__ */ new Date(), value); default: return /* @__PURE__ */ new Date(); } } var isNoneOperatorDefinition = { /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Is none of"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ (0, import_i18n28.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"), filter.name, activeElements.map((element) => element.label).join(", ") ), filterTextWrappers ), filter: ((item, field, filterValue) => { if (!filterValue?.length) { return true; } const fieldValue = field.getValue({ item }); if (Array.isArray(fieldValue)) { return !filterValue.some( (fv) => fieldValue.includes(fv) ); } else if (typeof fieldValue === "string") { return !filterValue.includes(fieldValue); } return false; }), selection: "multi" }; var OPERATORS = [ { name: OPERATOR_IS_ANY, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Includes"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ (0, import_i18n28.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"), filter.name, activeElements.map((element) => element.label).join(", ") ), filterTextWrappers ), filter(item, field, filterValue) { if (!filterValue?.length) { return true; } const fieldValue = field.getValue({ item }); if (Array.isArray(fieldValue)) { return filterValue.some( (fv) => fieldValue.includes(fv) ); } else if (typeof fieldValue === "string") { return filterValue.includes(fieldValue); } return false; }, selection: "multi" }, { name: OPERATOR_IS_NONE, ...isNoneOperatorDefinition }, { name: OPERATOR_IS_ALL, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Includes all"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ (0, import_i18n28.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"), filter.name, activeElements.map((element) => element.label).join(", ") ), filterTextWrappers ), filter(item, field, filterValue) { if (!filterValue?.length) { return true; } return filterValue.every((value) => { return field.getValue({ item })?.includes(value); }); }, selection: "multi" }, { name: OPERATOR_IS_NOT_ALL, ...isNoneOperatorDefinition }, { name: OPERATOR_BETWEEN, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Between (inc)"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */ (0, import_i18n28.__)( "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>" ), filter.name, activeElements[0].label[0], activeElements[0].label[1] ), filterTextWrappers ), filter(item, field, filterValue) { if (!Array.isArray(filterValue) || filterValue.length !== 2 || filterValue[0] === void 0 || filterValue[1] === void 0) { return true; } const fieldValue = field.getValue({ item }); if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; } return false; }, selection: "custom" }, { name: OPERATOR_IN_THE_PAST, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("In the past"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ (0, import_i18n28.__)( "<Name>%1$s is in the past: </Name><Value>%2$s</Value>" ), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}` ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue?.value === void 0 || filterValue?.unit === void 0) { return true; } const targetDate = getRelativeDate( filterValue.value, filterValue.unit ); const fieldValue = (0, import_date.getDate)(field.getValue({ item })); return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); }, selection: "custom" }, { name: OPERATOR_OVER, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Over"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ (0, import_i18n28.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}` ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue?.value === void 0 || filterValue?.unit === void 0) { return true; } const targetDate = getRelativeDate( filterValue.value, filterValue.unit ); const fieldValue = (0, import_date.getDate)(field.getValue({ item })); return fieldValue < targetDate; }, selection: "custom" }, { name: OPERATOR_IS, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Is"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { return filterValue === field.getValue({ item }) || filterValue === void 0; }, selection: "single" }, { name: OPERATOR_IS_NOT, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Is not"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { return filterValue !== field.getValue({ item }); }, selection: "single" }, { name: OPERATOR_LESS_THAN, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Less than"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ (0, import_i18n28.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return fieldValue < filterValue; }, selection: "single" }, { name: OPERATOR_GREATER_THAN, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Greater than"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ (0, import_i18n28.__)( "<Name>%1$s is greater than: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return fieldValue > filterValue; }, selection: "single" }, { name: OPERATOR_LESS_THAN_OR_EQUAL, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Less than or equal"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ (0, import_i18n28.__)( "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return fieldValue <= filterValue; }, selection: "single" }, { name: OPERATOR_GREATER_THAN_OR_EQUAL, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Greater than or equal"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ (0, import_i18n28.__)( "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return fieldValue >= filterValue; }, selection: "single" }, { name: OPERATOR_BEFORE, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Before"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ (0, import_i18n28.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return fieldDate < filterDate; }, selection: "single" }, { name: OPERATOR_AFTER, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("After"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ (0, import_i18n28.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return fieldDate > filterDate; }, selection: "single" }, { name: OPERATOR_BEFORE_INC, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Before (inc)"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ (0, import_i18n28.__)( "<Name>%1$s is on or before: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return fieldDate <= filterDate; }, selection: "single" }, { name: OPERATOR_AFTER_INC, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("After (inc)"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ (0, import_i18n28.__)( "<Name>%1$s is on or after: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return fieldDate >= filterDate; }, selection: "single" }, { name: OPERATOR_CONTAINS, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Contains"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ (0, import_i18n28.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); }, selection: "single" }, { name: OPERATOR_NOT_CONTAINS, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Doesn't contain"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ (0, import_i18n28.__)( "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>" ), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); }, selection: "single" }, { name: OPERATOR_STARTS_WITH, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Starts with"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ (0, import_i18n28.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const fieldValue = field.getValue({ item }); return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); }, selection: "single" }, { name: OPERATOR_ON, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("On"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return filterDate.getTime() === fieldDate.getTime(); }, selection: "single" }, { name: OPERATOR_NOT_ON, /* translators: DataViews operator name */ label: (0, import_i18n28.__)("Not on"), filterText: (filter, activeElements) => (0, import_element83.createInterpolateElement)( (0, import_i18n28.sprintf)( /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label ), filterTextWrappers ), filter(item, field, filterValue) { if (filterValue === void 0) { return true; } const filterDate = (0, import_date.getDate)(filterValue); const fieldDate = (0, import_date.getDate)(field.getValue({ item })); return filterDate.getTime() !== fieldDate.getTime(); }, selection: "single" } ]; var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); var getAllOperatorNames = () => OPERATORS.map((op) => op.name); var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( (op) => op.name === name ); var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); // packages/dataviews/build-module/components/dataviews-filters/filter.mjs var import_jsx_runtime135 = __toESM(require_jsx_runtime(), 1); var ENTER = "Enter"; var SPACE = " "; var FilterText = ({ activeElements, filterInView, filter }) => { if (activeElements === void 0 || activeElements.length === 0) { return filter.name; } const operator = getOperatorByName(filterInView?.operator); if (operator !== void 0) { return operator.filterText(filter, activeElements); } return (0, import_i18n29.sprintf)( /* translators: 1: Filter name e.g.: "Unknown status for Author". */ (0, import_i18n29.__)("Unknown status for %1$s"), filter.name ); }; function OperatorSelector({ filter, view, onChangeView }) { const operatorOptions = filter.operators?.map((operator) => ({ value: operator, label: getOperatorByName(operator)?.label || operator })); const currentFilter = view.filters?.find( (_filter) => _filter.field === filter.field ); const value = currentFilter?.operator || filter.operators[0]; return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)( Stack, { direction: "row", gap: "sm", justify: "flex-start", className: "dataviews-filters__summary-operators-container", align: "center", children: [ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(import_components21.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( import_components21.SelectControl, { className: "dataviews-filters__summary-operators-filter-select", label: (0, import_i18n29.__)("Conditions"), value, options: operatorOptions, onChange: (newValue) => { const newOperator = newValue; const currentOperator = currentFilter?.operator; const newFilters = currentFilter ? [ ...(view.filters ?? []).map( (_filter) => { if (_filter.field === filter.field) { const currentOpSelectionModel = getOperatorByName( currentOperator )?.selection; const newOpSelectionModel = getOperatorByName( newOperator )?.selection; const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ currentOpSelectionModel, newOpSelectionModel ].includes("custom"); return { ..._filter, value: shouldResetValue ? void 0 : _filter.value, operator: newOperator }; } return _filter; } ) ] : [ ...view.filters ?? [], { field: filter.field, operator: newOperator, value: void 0 } ]; onChangeView({ ...view, page: 1, filters: newFilters }); }, size: "small", variant: "minimal", hideLabelFromVision: true } ) ] } ); } function Filter({ addFilterRef, openedFilter, fields, ...commonProps }) { const toggleRef = (0, import_element84.useRef)(null); const { filter, view, onChangeView } = commonProps; const filterInView = view.filters?.find( (f2) => f2.field === filter.field ); let activeElements = []; const field = (0, import_element84.useMemo)(() => { const currentField = fields.find((f2) => f2.id === filter.field); if (currentField) { return { ...currentField, // Configure getValue as if Item was a plain object. // See related input-widget.tsx getValue: ({ item }) => item[currentField.id] }; } return currentField; }, [fields, filter.field]); const { elements } = useElements({ elements: filter.elements, getElements: filter.getElements }); if (elements.length > 0) { activeElements = elements.filter((element) => { if (filter.singleSelection) { return element.value === filterInView?.value; } return filterInView?.value?.includes(element.value); }); } else if (Array.isArray(filterInView?.value)) { const label = filterInView.value.map((v2) => { const formattedValue = field?.getValueFormatted({ item: { [field.id]: v2 }, field }); return formattedValue || String(v2); }); activeElements = [ { value: filterInView.value, // @ts-ignore label } ]; } else if (typeof filterInView?.value === "object") { activeElements = [ { value: filterInView.value, label: filterInView.value } ]; } else if (filterInView?.value !== void 0) { const label = field !== void 0 ? field.getValueFormatted({ item: { [field.id]: filterInView.value }, field }) : String(filterInView.value); activeElements = [ { value: filterInView.value, label } ]; } const isPrimary = filter.isPrimary; const isLocked = filterInView?.isLocked; const hasValues = !isLocked && filterInView?.value !== void 0; const canResetOrRemove = !isLocked && (!isPrimary || hasValues); const resetOrRemoveLabel = isPrimary ? (0, import_i18n29.__)("Reset") : (0, import_i18n29.__)("Remove"); return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( import_components21.Dropdown, { defaultOpen: openedFilter === filter.field, contentClassName: "dataviews-filters__summary-popover", popoverProps: { placement: "bottom-start", role: "dialog" }, onClose: () => { toggleRef.current?.focus(); }, renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(tooltip_exports.Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( tooltip_exports.Trigger, { render: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( "div", { className: clsx_default( "dataviews-filters__summary-chip", { "has-reset": canResetOrRemove, "has-values": hasValues, "is-not-clickable": isLocked } ), role: "button", tabIndex: isLocked ? -1 : 0, onClick: () => { if (!isLocked) { onToggle(); } }, onKeyDown: (event) => { if (!isLocked && [ENTER, SPACE].includes( event.key )) { onToggle(); event.preventDefault(); } }, "aria-disabled": isLocked, "aria-pressed": isOpen, "aria-expanded": isOpen, ref: toggleRef, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( FilterText, { activeElements, filterInView, filter } ) } ) } ), /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(tooltip_exports.Popup, { children: (0, import_i18n29.sprintf)( /* translators: 1: Filter name. */ (0, import_i18n29.__)("Filter by: %1$s"), filter.name.toLowerCase() ) }) ] }), canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(tooltip_exports.Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( tooltip_exports.Trigger, { render: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( "button", { className: clsx_default( "dataviews-filters__summary-chip-remove", { "has-values": hasValues } ), "aria-label": resetOrRemoveLabel, onClick: () => { onChangeView({ ...view, page: 1, filters: view.filters?.filter( (_filter) => _filter.field !== filter.field ) }); if (!isPrimary) { addFilterRef.current?.focus(); } else { toggleRef.current?.focus(); } }, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(import_components21.Icon, { icon: close_small_default }) } ) } ), /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(tooltip_exports.Popup, { children: resetOrRemoveLabel }) ] }) ] }), renderContent: () => { return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(OperatorSelector, { ...commonProps }), commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( SearchWidget, { ...commonProps, filter: { ...commonProps.filter, elements } } ) : /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(InputWidget, { ...commonProps, fields }) ] }); } } ); } // packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs var import_components22 = __toESM(require_components(), 1); var import_i18n30 = __toESM(require_i18n(), 1); var import_element85 = __toESM(require_element(), 1); var import_jsx_runtime136 = __toESM(require_jsx_runtime(), 1); var { Menu: Menu4 } = unlock2(import_components22.privateApis); function AddFilterMenu({ filters, view, onChangeView, setOpenedFilter, triggerProps }) { const inactiveFilters = filters.filter((filter) => !filter.isVisible); return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(Menu4, { children: [ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Menu4.TriggerButton, { ...triggerProps }), /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => { return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( Menu4.Item, { onClick: () => { setOpenedFilter(filter.field); onChangeView({ ...view, page: 1, filters: [ ...view.filters || [], { field: filter.field, value: void 0, operator: filter.operators[0] } ] }); }, children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Menu4.ItemLabel, { children: filter.name }) }, filter.field ); }) }) ] }); } function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { return null; } const inactiveFilters = filters.filter((filter) => !filter.isVisible); return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( AddFilterMenu, { triggerProps: { render: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( import_components22.Button, { accessibleWhenDisabled: true, size: "compact", className: "dataviews-filters-button", variant: "tertiary", disabled: !inactiveFilters.length, ref } ), children: (0, import_i18n30.__)("Add filter") }, ...{ filters, view, onChangeView, setOpenedFilter } } ); } var add_filter_default = (0, import_element85.forwardRef)(AddFilter); // packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs var import_components23 = __toESM(require_components(), 1); var import_i18n31 = __toESM(require_i18n(), 1); var import_jsx_runtime137 = __toESM(require_jsx_runtime(), 1); function ResetFilter({ filters, view, onChangeView }) { const isPrimary = (field) => filters.some( (_filter) => _filter.field === field && _filter.isPrimary ); const isDisabled = !view.search && !view.filters?.some( (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) ); return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( import_components23.Button, { disabled: isDisabled, accessibleWhenDisabled: true, size: "compact", variant: "tertiary", className: "dataviews-filters__reset-button", onClick: () => { onChangeView({ ...view, page: 1, search: "", filters: view.filters?.filter((f2) => !!f2.isLocked) || [] }); }, children: (0, import_i18n31.__)("Reset") } ); } // packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs var import_element86 = __toESM(require_element(), 1); function useFilters(fields, view) { return (0, import_element86.useMemo)(() => { const filters = []; fields.forEach((field) => { if (field.filterBy === false || !field.hasElements && !field.Edit) { return; } const operators = field.filterBy.operators; const isPrimary = !!field.filterBy?.isPrimary; const isLocked = view.filters?.some( (f2) => f2.field === field.id && !!f2.isLocked ) ?? false; filters.push({ field: field.id, name: field.label, elements: field.elements, getElements: field.getElements, hasElements: field.hasElements, singleSelection: operators.some( (op) => isSingleSelectionOperator(op) ), operators, isVisible: isLocked || isPrimary || !!view.filters?.some( (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) ), isPrimary, isLocked }); }); filters.sort((a2, b2) => { if (a2.isLocked && !b2.isLocked) { return -1; } if (!a2.isLocked && b2.isLocked) { return 1; } if (a2.isPrimary && !b2.isPrimary) { return -1; } if (!a2.isPrimary && b2.isPrimary) { return 1; } return a2.name.localeCompare(b2.name); }); return filters; }, [fields, view]); } var use_filters_default = useFilters; // packages/dataviews/build-module/components/dataviews-filters/filters.mjs var import_jsx_runtime138 = __toESM(require_jsx_runtime(), 1); function Filters({ className }) { const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element87.useContext)(dataviews_context_default); const addFilterRef = (0, import_element87.useRef)(null); const filters = use_filters_default(fields, view); const addFilter = /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( add_filter_default, { filters, view, onChangeView, ref: addFilterRef, setOpenedFilter }, "add-filter" ); const visibleFilters = filters.filter((filter) => filter.isVisible); if (visibleFilters.length === 0) { return null; } const filterComponents = [ ...visibleFilters.map((filter) => { return /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( Filter, { filter, view, fields, onChangeView, addFilterRef, openedFilter }, filter.field ); }), addFilter ]; filterComponents.push( /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( ResetFilter, { filters, view, onChangeView }, "reset-filters" ) ); return /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( Stack, { direction: "row", justify: "flex-start", gap: "sm", style: { width: "fit-content" }, wrap: "wrap", className, children: filterComponents } ); } var filters_default = (0, import_element87.memo)(Filters); // packages/dataviews/build-module/components/dataviews-filters/toggle.mjs var import_element88 = __toESM(require_element(), 1); var import_components24 = __toESM(require_components(), 1); var import_i18n32 = __toESM(require_i18n(), 1); var import_jsx_runtime139 = __toESM(require_jsx_runtime(), 1); function FiltersToggle() { const { filters, view, onChangeView, setOpenedFilter, isShowingFilter, setIsShowingFilter } = (0, import_element88.useContext)(dataviews_context_default); const buttonRef = (0, import_element88.useRef)(null); const onChangeViewWithFilterVisibility = (0, import_element88.useCallback)( (_view) => { onChangeView(_view); setIsShowingFilter(true); }, [onChangeView, setIsShowingFilter] ); if (filters.length === 0) { return null; } const hasVisibleFilters = filters.some((filter) => filter.isVisible); const addFilterButtonProps = { label: (0, import_i18n32.__)("Add filter"), "aria-expanded": false, isPressed: false }; const toggleFiltersButtonProps = { label: (0, import_i18n32._x)("Filter", "verb"), "aria-expanded": isShowingFilter, isPressed: isShowingFilter, onClick: () => { if (!isShowingFilter) { setOpenedFilter(null); } setIsShowingFilter(!isShowingFilter); } }; const hasPrimaryOrLockedFilters = filters.some( (filter) => filter.isPrimary || filter.isLocked ); const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime139.jsx)( import_components24.Button, { ref: buttonRef, className: "dataviews-filters__visibility-toggle", size: "compact", icon: funnel_default, disabled: hasPrimaryOrLockedFilters, accessibleWhenDisabled: true, ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps } ); return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)( AddFilterMenu, { filters, view, onChangeView: onChangeViewWithFilterVisibility, setOpenedFilter, triggerProps: { render: buttonComponent } } ) : /* @__PURE__ */ (0, import_jsx_runtime139.jsx)( FilterVisibilityToggle, { buttonRef, filtersCount: view.filters?.length, children: buttonComponent } ) }); } function FilterVisibilityToggle({ buttonRef, filtersCount, children }) { (0, import_element88.useEffect)( () => () => { buttonRef.current?.focus(); }, [buttonRef] ); return /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)(import_jsx_runtime139.Fragment, { children: [ children, !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) ] }); } var toggle_default = FiltersToggle; // packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs var import_element89 = __toESM(require_element(), 1); var import_jsx_runtime140 = __toESM(require_jsx_runtime(), 1); function FiltersToggled(props) { const { isShowingFilter } = (0, import_element89.useContext)(dataviews_context_default); if (!isShowingFilter) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(filters_default, { ...props }); } var filters_toggled_default = FiltersToggled; // packages/dataviews/build-module/components/dataviews-layout/index.mjs var import_element90 = __toESM(require_element(), 1); var import_components25 = __toESM(require_components(), 1); var import_i18n33 = __toESM(require_i18n(), 1); var import_jsx_runtime141 = __toESM(require_jsx_runtime(), 1); function DataViewsLayout({ className }) { const { actions = [], data, fields, getItemId, getItemLevel, hasInitiallyLoaded, isLoading, view, onChangeView, selection, onChangeSelection, setOpenedFilter, onClickItem, isItemClickable, renderItemLink, defaultLayouts, containerRef, empty = /* @__PURE__ */ (0, import_jsx_runtime141.jsx)("p", { children: (0, import_i18n33.__)("No results") }) } = (0, import_element90.useContext)(dataviews_context_default); const isDelayedInitialLoading = useDelayedLoading(!hasInitiallyLoaded, { delay: 200 }); if (!hasInitiallyLoaded) { if (!isDelayedInitialLoading) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime141.jsx)("div", { className: "dataviews-loading", children: /* @__PURE__ */ (0, import_jsx_runtime141.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(import_components25.Spinner, {}) }) }); } const ViewComponent = VIEW_LAYOUTS.find( (v2) => v2.type === view.type && defaultLayouts[v2.type] )?.component; return /* @__PURE__ */ (0, import_jsx_runtime141.jsx)("div", { className: "dataviews-layout__container", ref: containerRef, children: /* @__PURE__ */ (0, import_jsx_runtime141.jsx)( ViewComponent, { className, actions, data, fields, getItemId, getItemLevel, isLoading, onChangeView, onChangeSelection, selection, setOpenedFilter, onClickItem, renderItemLink, isItemClickable, view, empty } ) }); } // packages/dataviews/build-module/components/dataviews-footer/index.mjs var import_element91 = __toESM(require_element(), 1); var import_jsx_runtime142 = __toESM(require_jsx_runtime(), 1); var EMPTY_ARRAY5 = []; function DataViewsFooter() { const { view, paginationInfo: { totalItems = 0, totalPages }, data, actions = EMPTY_ARRAY5, isLoading, hasInitiallyLoaded } = (0, import_element91.useContext)(dataviews_context_default); const isRefreshing = !!isLoading && hasInitiallyLoaded && !!data?.length; const isDelayedRefreshing = useDelayedLoading(!!isRefreshing); const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type); if (!isRefreshing && (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions)) { return null; } return (!!totalItems || isRefreshing) && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)( "div", { className: "dataviews-footer", inert: isRefreshing ? "true" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)( Stack, { direction: "row", justify: "end", align: "center", className: clsx_default("dataviews-footer__content", { "is-refreshing": isDelayedRefreshing }), gap: "sm", children: [ hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(BulkActionsFooter, {}), /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(dataviews_pagination_default, {}) ] } ) } ); } // packages/dataviews/build-module/components/dataviews-search/index.mjs var import_i18n34 = __toESM(require_i18n(), 1); var import_element92 = __toESM(require_element(), 1); var import_components26 = __toESM(require_components(), 1); var import_compose10 = __toESM(require_compose(), 1); var import_jsx_runtime143 = __toESM(require_jsx_runtime(), 1); var DataViewsSearch = (0, import_element92.memo)(function Search({ label }) { const { view, onChangeView } = (0, import_element92.useContext)(dataviews_context_default); const [search, setSearch, debouncedSearch] = (0, import_compose10.useDebouncedInput)( view.search ); (0, import_element92.useEffect)(() => { if (view.search !== debouncedSearch) { setSearch(view.search ?? ""); } }, [view.search, setSearch]); const onChangeViewRef = (0, import_element92.useRef)(onChangeView); const viewRef = (0, import_element92.useRef)(view); (0, import_element92.useEffect)(() => { onChangeViewRef.current = onChangeView; viewRef.current = view; }, [onChangeView, view]); (0, import_element92.useEffect)(() => { if (debouncedSearch !== viewRef.current?.search) { onChangeViewRef.current({ ...viewRef.current, page: view.page ? 1 : void 0, startPosition: view.startPosition ? 1 : void 0, search: debouncedSearch }); } }, [debouncedSearch]); const searchLabel = label || (0, import_i18n34.__)("Search"); return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)( import_components26.SearchControl, { className: "dataviews-search", onChange: setSearch, value: search, label: searchLabel, placeholder: searchLabel, size: "compact" } ); }); var dataviews_search_default = DataViewsSearch; // packages/dataviews/build-module/components/dataviews-view-config/index.mjs var import_components27 = __toESM(require_components(), 1); var import_i18n35 = __toESM(require_i18n(), 1); var import_element93 = __toESM(require_element(), 1); var import_warning = __toESM(require_warning(), 1); var import_compose11 = __toESM(require_compose(), 1); var import_jsx_runtime144 = __toESM(require_jsx_runtime(), 1); var { Menu: Menu5 } = unlock2(import_components27.privateApis); var DATAVIEWS_CONFIG_POPOVER_PROPS = { className: "dataviews-config__popover", placement: "bottom-end", offset: 9 }; function ViewTypeMenu() { const { view, onChangeView, defaultLayouts } = (0, import_element93.useContext)(dataviews_context_default); const availableLayouts = Object.keys(defaultLayouts); if (availableLayouts.length <= 1) { return null; } const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); return /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(Menu5, { children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( Menu5.TriggerButton, { render: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.Button, { size: "compact", icon: activeView?.icon, label: (0, import_i18n35.__)("Layout") } ) } ), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => { const config = VIEW_LAYOUTS.find( (v2) => v2.type === layout ); if (!config) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( Menu5.RadioItem, { value: layout, name: "view-actions-available-view", checked: layout === view.type, hideOnClick: true, onChange: (e2) => { switch (e2.target.value) { case "list": case "grid": case "table": case "pickerGrid": case "pickerTable": case "pickerActivity": case "activity": const viewWithoutLayout = { ...view }; if ("layout" in viewWithoutLayout) { delete viewWithoutLayout.layout; } return onChangeView({ ...viewWithoutLayout, type: e2.target.value, ...defaultLayouts[e2.target.value] }); } (0, import_warning.default)("Invalid dataview"); }, children: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(Menu5.ItemLabel, { children: config.label }) }, layout ); }) }) ] }); } function SortFieldControl() { const { view, fields, onChangeView } = (0, import_element93.useContext)(dataviews_context_default); const orderOptions = (0, import_element93.useMemo)(() => { const sortableFields = fields.filter( (field) => field.enableSorting !== false ); return sortableFields.map((field) => { return { label: field.label, value: field.id }; }); }, [fields]); return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.SelectControl, { __next40pxDefaultSize: true, label: (0, import_i18n35.__)("Sort by"), value: view.sort?.field, options: orderOptions, onChange: (value) => { onChangeView({ ...view, sort: { direction: view?.sort?.direction || "desc", field: value }, showLevels: false }); } } ); } function SortDirectionControl() { const { view, fields, onChangeView } = (0, import_element93.useContext)(dataviews_context_default); const sortableFields = fields.filter( (field) => field.enableSorting !== false ); if (sortableFields.length === 0) { return null; } let value = view.sort?.direction; if (!value && view.sort?.field) { value = "desc"; } return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalToggleGroupControl, { className: "dataviews-view-config__sort-direction", __next40pxDefaultSize: true, isBlock: true, label: (0, import_i18n35.__)("Order"), value, onChange: (newDirection) => { if (newDirection === "asc" || newDirection === "desc") { onChangeView({ ...view, sort: { direction: newDirection, field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. fields.find( (field) => field.enableSorting !== false )?.id || "" }, showLevels: false }); return; } (0, import_warning.default)("Invalid direction"); }, children: SORTING_DIRECTIONS.map((direction) => { return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalToggleGroupControlOptionIcon, { value: direction, icon: sortIcons[direction], label: sortLabels[direction] }, direction ); }) } ); } function ItemsPerPageControl() { const { view, config, onChangeView } = (0, import_element93.useContext)(dataviews_context_default); const { infiniteScrollEnabled } = view; if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalToggleGroupControl, { __next40pxDefaultSize: true, isBlock: true, label: (0, import_i18n35.__)("Items per page"), value: view.perPage || 10, disabled: !view?.sort?.field, onChange: (newItemsPerPage) => { const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); onChangeView({ ...view, perPage: newItemsPerPageNumber, page: 1 }); }, children: config.perPageSizes.map((value) => { return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalToggleGroupControlOption, { value, label: value.toString() }, value ); }) } ); } function ResetViewButton() { const { onReset } = (0, import_element93.useContext)(dataviews_context_default); if (onReset === void 0) { return null; } const isDisabled = onReset === false; return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.Button, { variant: "tertiary", size: "compact", disabled: isDisabled, accessibleWhenDisabled: true, className: "dataviews-view-config__reset-button", onClick: () => { if (typeof onReset === "function") { onReset(); } }, children: (0, import_i18n35.__)("Reset view") } ); } function DataviewsViewConfigDropdown() { const { view, onReset } = (0, import_element93.useContext)(dataviews_context_default); const popoverId = (0, import_compose11.useInstanceId)( _DataViewsViewConfig, "dataviews-view-config-dropdown" ); const activeLayout = VIEW_LAYOUTS.find( (layout) => layout.type === view.type ); const isModified = typeof onReset === "function"; return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.Dropdown, { expandOnMobile: true, popoverProps: { ...DATAVIEWS_CONFIG_POPOVER_PROPS, id: popoverId }, renderToggle: ({ onToggle, isOpen }) => { return /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.Button, { size: "compact", icon: cog_default, label: (0, import_i18n35._x)( "View options", "View is used as a noun" ), onClick: onToggle, "aria-expanded": isOpen ? "true" : "false", "aria-controls": popoverId } ), isModified && /* @__PURE__ */ (0, import_jsx_runtime144.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) ] }); }, renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalDropdownContentWrapper, { paddingSize: "medium", className: "dataviews-config__popover-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)( Stack, { direction: "column", className: "dataviews-view-config", gap: "xl", children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)( Stack, { direction: "row", justify: "space-between", align: "center", className: "dataviews-view-config__header", children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)( import_components27.__experimentalHeading, { level: 2, className: "dataviews-settings-section__title", children: (0, import_i18n35.__)("Appearance") } ), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(ResetViewButton, {}) ] } ), /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(Stack, { direction: "column", gap: "lg", children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)( Stack, { direction: "row", gap: "sm", className: "dataviews-view-config__sort-controls", children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SortFieldControl, {}), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SortDirectionControl, {}) ] } ), !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(activeLayout.viewConfigOptions, {}), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(ItemsPerPageControl, {}), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(PropertiesSection, {}) ] }) ] } ) } ) } ); } function _DataViewsViewConfig() { return /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(import_jsx_runtime144.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(ViewTypeMenu, {}), /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(DataviewsViewConfigDropdown, {}) ] }); } var DataViewsViewConfig = (0, import_element93.memo)(_DataViewsViewConfig); var dataviews_view_config_default = DataViewsViewConfig; // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs var import_components28 = __toESM(require_components(), 1); var import_element94 = __toESM(require_element(), 1); // packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs function getCustomValidity(isValid2, validity) { let customValidity; if (isValid2?.required && validity?.required) { customValidity = validity?.required?.message ? validity.required : void 0; } else if (isValid2?.pattern && validity?.pattern) { customValidity = validity.pattern; } else if (isValid2?.min && validity?.min) { customValidity = validity.min; } else if (isValid2?.max && validity?.max) { customValidity = validity.max; } else if (isValid2?.minLength && validity?.minLength) { customValidity = validity.minLength; } else if (isValid2?.maxLength && validity?.maxLength) { customValidity = validity.maxLength; } else if (isValid2?.elements && validity?.elements) { customValidity = validity.elements; } else if (validity?.custom) { customValidity = validity.custom; } return customValidity; } // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs var import_jsx_runtime145 = __toESM(require_jsx_runtime(), 1); var { ValidatedCheckboxControl } = unlock2(import_components28.privateApis); function Checkbox({ field, onChange, data, hideLabelFromVision, markWhenOptional, validity }) { const { getValue, setValue, label, description, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const onChangeControl = (0, import_element94.useCallback)(() => { onChange( setValue({ item: data, value: !getValue({ item: data }) }) ); }, [data, getValue, onChange, setValue]); return /* @__PURE__ */ (0, import_jsx_runtime145.jsx)( ValidatedCheckboxControl, { required: !!field.isValid?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), hidden: hideLabelFromVision, label, help: description, checked: getValue({ item: data }), onChange: onChangeControl, disabled: disabled2 } ); } // packages/dataviews/build-module/components/dataform-controls/combobox.mjs var import_components29 = __toESM(require_components(), 1); var import_element95 = __toESM(require_element(), 1); var import_jsx_runtime146 = __toESM(require_jsx_runtime(), 1); var { ValidatedComboboxControl } = unlock2(import_components29.privateApis); function Combobox3({ data, field, onChange, hideLabelFromVision, validity }) { const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; const value = getValue({ item: data }) ?? ""; const onChangeControl = (0, import_element95.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), [data, onChange, setValue] ); const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(import_components29.Spinner, {}); } return /* @__PURE__ */ (0, import_jsx_runtime146.jsx)( ValidatedComboboxControl, { required: !!field.isValid?.required, customValidity: getCustomValidity(isValid2, validity), label, value, help: description, placeholder, options: elements, onChange: onChangeControl, hideLabelFromVision, allowReset: true, expandOnFocus: true } ); } // packages/dataviews/build-module/components/dataform-controls/datetime.mjs var import_components31 = __toESM(require_components(), 1); var import_element98 = __toESM(require_element(), 1); var import_i18n37 = __toESM(require_i18n(), 1); var import_date3 = __toESM(require_date(), 1); // packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs var import_components30 = __toESM(require_components(), 1); var import_element96 = __toESM(require_element(), 1); var import_i18n36 = __toESM(require_i18n(), 1); var import_jsx_runtime147 = __toESM(require_jsx_runtime(), 1); var TIME_UNITS_OPTIONS = { [OPERATOR_IN_THE_PAST]: [ { value: "days", label: (0, import_i18n36.__)("Days") }, { value: "weeks", label: (0, import_i18n36.__)("Weeks") }, { value: "months", label: (0, import_i18n36.__)("Months") }, { value: "years", label: (0, import_i18n36.__)("Years") } ], [OPERATOR_OVER]: [ { value: "days", label: (0, import_i18n36.__)("Days ago") }, { value: "weeks", label: (0, import_i18n36.__)("Weeks ago") }, { value: "months", label: (0, import_i18n36.__)("Months ago") }, { value: "years", label: (0, import_i18n36.__)("Years ago") } ] }; function RelativeDateControl({ className, data, field, onChange, hideLabelFromVision, operator }) { const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; const { id, label, description, getValue, setValue } = field; const disabled2 = field.isDisabled({ item: data, field }); const fieldValue = getValue({ item: data }); const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; const onChangeValue = (0, import_element96.useCallback)( (newValue) => onChange( setValue({ item: data, value: { value: Number(newValue), unit } }) ), [onChange, setValue, data, unit] ); const onChangeUnit = (0, import_element96.useCallback)( (newUnit) => onChange( setValue({ item: data, value: { value: relValue, unit: newUnit } }) ), [onChange, setValue, data, relValue] ); return /* @__PURE__ */ (0, import_jsx_runtime147.jsx)( import_components30.BaseControl, { id, className: clsx_default(className, "dataviews-controls__relative-date"), label, hideLabelFromVision, help: description, children: /* @__PURE__ */ (0, import_jsx_runtime147.jsxs)(Stack, { direction: "row", gap: "sm", children: [ /* @__PURE__ */ (0, import_jsx_runtime147.jsx)( import_components30.__experimentalNumberControl, { __next40pxDefaultSize: true, className: "dataviews-controls__relative-date-number", spinControls: "none", min: 1, step: 1, value: relValue, onChange: onChangeValue, disabled: disabled2 } ), /* @__PURE__ */ (0, import_jsx_runtime147.jsx)( import_components30.SelectControl, { className: "dataviews-controls__relative-date-unit", __next40pxDefaultSize: true, label: (0, import_i18n36.__)("Unit"), value: unit, options, onChange: onChangeUnit, hideLabelFromVision: true, disabled: disabled2 } ) ] }) } ); } // packages/dataviews/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs var import_element97 = __toESM(require_element(), 1); function useDisabledDateMatchers(isValid2, parseDateFn) { const minConstraint = typeof isValid2.min?.constraint === "string" ? isValid2.min.constraint : void 0; const maxConstraint = typeof isValid2.max?.constraint === "string" ? isValid2.max.constraint : void 0; const disabledMatchers = (0, import_element97.useMemo)(() => { const matchers = []; if (minConstraint) { const minDate = parseDateFn(minConstraint); if (minDate) { matchers.push({ before: minDate }); } } if (maxConstraint) { const maxDate = parseDateFn(maxConstraint); if (maxDate) { matchers.push({ after: maxDate }); } } return matchers.length > 0 ? matchers : void 0; }, [minConstraint, maxConstraint, parseDateFn]); return { minConstraint, maxConstraint, disabledMatchers }; } // packages/dataviews/build-module/field-types/utils/parse-date-time.mjs var import_date2 = __toESM(require_date(), 1); function parseDateTime(dateTimeString) { if (!dateTimeString) { return null; } const parsed = (0, import_date2.getDate)(dateTimeString); return parsed && isValid(parsed) ? parsed : null; } // packages/dataviews/build-module/components/dataform-controls/datetime.mjs var import_jsx_runtime148 = __toESM(require_jsx_runtime(), 1); var { DateCalendar, ValidatedInputControl } = unlock2(import_components31.privateApis); var formatDateTime = (value) => { if (!value) { return ""; } return (0, import_date3.dateI18n)("Y-m-d\\TH:i", (0, import_date3.getDate)(value)); }; function CalendarDateTimeControl({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, config }) { const { compact } = config || {}; const { id, label, description, setValue, getValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const fieldValue = getValue({ item: data }); const value = typeof fieldValue === "string" ? fieldValue : void 0; const [calendarMonth, setCalendarMonth] = (0, import_element98.useState)(() => { const parsedDate = parseDateTime(value); return parsedDate || /* @__PURE__ */ new Date(); }); const inputControlRef = (0, import_element98.useRef)(null); const validationTimeoutRef = (0, import_element98.useRef)(void 0); const previousFocusRef = (0, import_element98.useRef)(null); const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDateTime); const onChangeCallback = (0, import_element98.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); (0, import_element98.useEffect)(() => { return () => { if (validationTimeoutRef.current) { clearTimeout(validationTimeoutRef.current); } }; }, []); const onSelectDate = (0, import_element98.useCallback)( (newDate) => { let dateTimeValue; if (newDate) { const wpDate = (0, import_date3.dateI18n)("Y-m-d", newDate); let wpTime; if (value) { wpTime = (0, import_date3.dateI18n)("H:i", (0, import_date3.getDate)(value)); } else { wpTime = (0, import_date3.dateI18n)("H:i", newDate); } const finalDateTime = (0, import_date3.getDate)(`${wpDate}T${wpTime}`); dateTimeValue = finalDateTime.toISOString(); onChangeCallback(dateTimeValue); if (validationTimeoutRef.current) { clearTimeout(validationTimeoutRef.current); } } else { onChangeCallback(void 0); } previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement; validationTimeoutRef.current = setTimeout(() => { if (inputControlRef.current) { inputControlRef.current.focus(); inputControlRef.current.blur(); onChangeCallback(dateTimeValue); if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) { previousFocusRef.current.focus(); } } }, 0); }, [onChangeCallback, value] ); const handleManualDateTimeChange = (0, import_element98.useCallback)( (newValue) => { if (newValue) { const dateTime = (0, import_date3.getDate)(newValue); onChangeCallback(dateTime.toISOString()); const parsedDate = parseDateTime(dateTime.toISOString()); if (parsedDate) { setCalendarMonth(parsedDate); } } else { onChangeCallback(void 0); } }, [onChangeCallback] ); const { format: fieldFormat } = field; const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek; const { timezone: { string: timezoneString } } = (0, import_date3.getSettings)(); let displayLabel = label; if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { displayLabel = `${label} (${(0, import_i18n37.__)("Required")})`; } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { displayLabel = `${label} (${(0, import_i18n37.__)("Optional")})`; } return /* @__PURE__ */ (0, import_jsx_runtime148.jsx)( import_components31.BaseControl, { id, label: displayLabel, help: description, hideLabelFromVision, children: /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(Stack, { direction: "column", gap: "lg", children: [ /* @__PURE__ */ (0, import_jsx_runtime148.jsx)( ValidatedInputControl, { ref: inputControlRef, __next40pxDefaultSize: true, required: !!isValid2?.required, customValidity: getCustomValidity(isValid2, validity), type: "datetime-local", label: (0, import_i18n37.__)("Date time"), hideLabelFromVision: true, value: formatDateTime(value), onChange: handleManualDateTimeChange, disabled: disabled2, min: minConstraint ? formatDateTime(minConstraint) : void 0, max: maxConstraint ? formatDateTime(maxConstraint) : void 0 } ), !compact && /* @__PURE__ */ (0, import_jsx_runtime148.jsx)( DateCalendar, { style: { width: "100%" }, selected: value ? parseDateTime(value) || void 0 : void 0, onSelect: onSelectDate, month: calendarMonth, onMonthChange: setCalendarMonth, timeZone: timezoneString || void 0, weekStartsOn, disabled: disabled2 || disabledMatchers } ) ] }) } ); } function DateTime({ data, field, onChange, hideLabelFromVision, markWhenOptional, operator, validity, config }) { if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { return /* @__PURE__ */ (0, import_jsx_runtime148.jsx)( RelativeDateControl, { className: "dataviews-controls__datetime", data, field, onChange, hideLabelFromVision, operator } ); } return /* @__PURE__ */ (0, import_jsx_runtime148.jsx)( CalendarDateTimeControl, { data, field, onChange, hideLabelFromVision, markWhenOptional, validity, config } ); } // packages/dataviews/build-module/components/dataform-controls/date.mjs var import_components32 = __toESM(require_components(), 1); var import_element99 = __toESM(require_element(), 1); var import_i18n38 = __toESM(require_i18n(), 1); var import_date4 = __toESM(require_date(), 1); var import_jsx_runtime149 = __toESM(require_jsx_runtime(), 1); var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock2(import_components32.privateApis); var DATE_PRESETS = [ { id: "today", label: (0, import_i18n38.__)("Today"), getValue: () => (0, import_date4.getDate)(null) }, { id: "yesterday", label: (0, import_i18n38.__)("Yesterday"), getValue: () => { const today = (0, import_date4.getDate)(null); return subDays(today, 1); } }, { id: "past-week", label: (0, import_i18n38.__)("Past week"), getValue: () => { const today = (0, import_date4.getDate)(null); return subDays(today, 7); } }, { id: "past-month", label: (0, import_i18n38.__)("Past month"), getValue: () => { const today = (0, import_date4.getDate)(null); return subMonths(today, 1); } } ]; var DATE_RANGE_PRESETS = [ { id: "last-7-days", label: (0, import_i18n38.__)("Last 7 days"), getValue: () => { const today = (0, import_date4.getDate)(null); return [subDays(today, 7), today]; } }, { id: "last-30-days", label: (0, import_i18n38.__)("Last 30 days"), getValue: () => { const today = (0, import_date4.getDate)(null); return [subDays(today, 30), today]; } }, { id: "month-to-date", label: (0, import_i18n38.__)("Month to date"), getValue: () => { const today = (0, import_date4.getDate)(null); return [startOfMonth(today), today]; } }, { id: "last-year", label: (0, import_i18n38.__)("Last year"), getValue: () => { const today = (0, import_date4.getDate)(null); return [subYears(today, 1), today]; } }, { id: "year-to-date", label: (0, import_i18n38.__)("Year to date"), getValue: () => { const today = (0, import_date4.getDate)(null); return [startOfYear(today), today]; } } ]; var parseDate = (dateString) => { if (!dateString) { return null; } const parsed = (0, import_date4.getDate)(dateString); return parsed && isValid(parsed) ? parsed : null; }; var formatDate = (date) => { if (!date) { return ""; } return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); }; function ValidatedDateControl({ field, validity, inputRefs, isTouched, setIsTouched, children }) { const { isValid: isValid2 } = field; const [customValidity, setCustomValidity] = (0, import_element99.useState)(void 0); const validateRefs = (0, import_element99.useCallback)(() => { const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; for (const ref of refs) { const input = ref.current; if (input && !input.validity.valid) { setCustomValidity({ type: "invalid", message: input.validationMessage }); return; } } setCustomValidity(void 0); }, [inputRefs]); (0, import_element99.useEffect)(() => { const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; const result = validity ? getCustomValidity(isValid2, validity) : void 0; for (const ref of refs) { const input = ref.current; if (input) { input.setCustomValidity( result?.type === "invalid" && result.message ? result.message : "" ); } } }, [inputRefs, isValid2, validity]); (0, import_element99.useEffect)(() => { const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; const handleInvalid = (event) => { event.preventDefault(); setIsTouched(true); }; for (const ref of refs) { ref.current?.addEventListener("invalid", handleInvalid); } return () => { for (const ref of refs) { ref.current?.removeEventListener("invalid", handleInvalid); } }; }, [inputRefs, setIsTouched]); (0, import_element99.useEffect)(() => { if (!isTouched) { return; } const result = validity ? getCustomValidity(isValid2, validity) : void 0; if (result) { setCustomValidity(result); } else { validateRefs(); } }, [isTouched, isValid2, validity, validateRefs]); const onBlur = (event) => { if (isTouched) { return; } if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { setIsTouched(true); } }; return /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)("div", { onBlur, children: [ children, /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)( "p", { className: clsx_default( "components-validated-control__indicator", customValidity.type === "invalid" ? "is-invalid" : void 0 ), children: [ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.Icon, { className: "components-validated-control__indicator-icon", icon: error_default, size: 16, fill: "currentColor" } ), customValidity.message ] } ) }) ] }); } function CalendarDateControl({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { id, label, description, setValue, getValue, isValid: isValid2, format: fieldFormat } = field; const disabled2 = field.isDisabled({ item: data, field }); const [selectedPresetId, setSelectedPresetId] = (0, import_element99.useState)( null ); const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; const fieldValue = getValue({ item: data }); const value = typeof fieldValue === "string" ? fieldValue : void 0; const [calendarMonth, setCalendarMonth] = (0, import_element99.useState)(() => { const parsedDate = parseDate(value); return parsedDate || /* @__PURE__ */ new Date(); }); const [isTouched, setIsTouched] = (0, import_element99.useState)(false); const validityTargetRef = (0, import_element99.useRef)(null); const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate); const onChangeCallback = (0, import_element99.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); const onSelectDate = (0, import_element99.useCallback)( (newDate) => { const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0; onChangeCallback(dateValue); setSelectedPresetId(null); setIsTouched(true); }, [onChangeCallback] ); const handlePresetClick = (0, import_element99.useCallback)( (preset) => { const presetDate = preset.getValue(); const dateValue = formatDate(presetDate); setCalendarMonth(presetDate); onChangeCallback(dateValue); setSelectedPresetId(preset.id); setIsTouched(true); }, [onChangeCallback] ); const handleManualDateChange = (0, import_element99.useCallback)( (newValue) => { onChangeCallback(newValue); if (newValue) { const parsedDate = parseDate(newValue); if (parsedDate) { setCalendarMonth(parsedDate); } } setSelectedPresetId(null); setIsTouched(true); }, [onChangeCallback] ); const { timezone: { string: timezoneString } } = (0, import_date4.getSettings)(); let displayLabel = label; if (isValid2?.required && !markWhenOptional) { displayLabel = `${label} (${(0, import_i18n38.__)("Required")})`; } else if (!isValid2?.required && markWhenOptional) { displayLabel = `${label} (${(0, import_i18n38.__)("Optional")})`; } return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( ValidatedDateControl, { field, validity, inputRefs: validityTargetRef, isTouched, setIsTouched, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.BaseControl, { id, className: "dataviews-controls__date", label: displayLabel, help: description, hideLabelFromVision, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)(Stack, { direction: "column", gap: "lg", children: [ /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)( Stack, { direction: "row", gap: "sm", wrap: "wrap", justify: "flex-start", children: [ DATE_PRESETS.map((preset) => { const isSelected2 = selectedPresetId === preset.id; return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.Button, { className: "dataviews-controls__date-preset", variant: "tertiary", isPressed: isSelected2, size: "small", disabled: disabled2, accessibleWhenDisabled: true, onClick: () => handlePresetClick(preset), children: preset.label }, preset.id ); }), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.Button, { className: "dataviews-controls__date-preset", variant: "tertiary", isPressed: !selectedPresetId, size: "small", disabled: !!selectedPresetId || disabled2, accessibleWhenDisabled: true, children: (0, import_i18n38.__)("Custom") } ) ] } ), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.__experimentalInputControl, { __next40pxDefaultSize: true, ref: validityTargetRef, type: "date", label: (0, import_i18n38.__)("Date"), hideLabelFromVision: true, value, onChange: handleManualDateChange, required: !!field.isValid?.required, disabled: disabled2, min: minConstraint, max: maxConstraint } ), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( DateCalendar2, { style: { width: "100%" }, selected: value ? parseDate(value) || void 0 : void 0, onSelect: onSelectDate, month: calendarMonth, onMonthChange: setCalendarMonth, timeZone: timezoneString || void 0, weekStartsOn, disabled: disabled2 || disabledMatchers, disableNavigation: disabled2 } ) ] }) } ) } ); } function CalendarDateRangeControl({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { id, label, description, getValue, setValue, isValid: isValid2, format: fieldFormat } = field; const disabled2 = field.isDisabled({ item: data, field }); let value; const fieldValue = getValue({ item: data }); if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { value = fieldValue; } const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date4.getSettings)().l10n.startOfWeek; const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate); const onChangeCallback = (0, import_element99.useCallback)( (newValue) => { onChange( setValue({ item: data, value: newValue }) ); }, [data, onChange, setValue] ); const [selectedPresetId, setSelectedPresetId] = (0, import_element99.useState)( null ); const selectedRange = (0, import_element99.useMemo)(() => { if (!value) { return { from: void 0, to: void 0 }; } const [from, to] = value; return { from: parseDate(from) || void 0, to: parseDate(to) || void 0 }; }, [value]); const [calendarMonth, setCalendarMonth] = (0, import_element99.useState)(() => { return selectedRange.from || /* @__PURE__ */ new Date(); }); const [isTouched, setIsTouched] = (0, import_element99.useState)(false); const fromInputRef = (0, import_element99.useRef)(null); const toInputRef = (0, import_element99.useRef)(null); const updateDateRange = (0, import_element99.useCallback)( (fromDate, toDate2) => { if (fromDate && toDate2) { onChangeCallback([ formatDate(fromDate), formatDate(toDate2) ]); } else if (!fromDate && !toDate2) { onChangeCallback(void 0); } }, [onChangeCallback] ); const onSelectCalendarRange = (0, import_element99.useCallback)( (newRange) => { updateDateRange(newRange?.from, newRange?.to); setSelectedPresetId(null); setIsTouched(true); }, [updateDateRange] ); const handlePresetClick = (0, import_element99.useCallback)( (preset) => { const [startDate, endDate] = preset.getValue(); setCalendarMonth(startDate); updateDateRange(startDate, endDate); setSelectedPresetId(preset.id); setIsTouched(true); }, [updateDateRange] ); const handleManualDateChange = (0, import_element99.useCallback)( (fromOrTo, newValue) => { const [currentFrom, currentTo] = value || [ void 0, void 0 ]; const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; const updatedTo = fromOrTo === "to" ? newValue : currentTo; updateDateRange(updatedFrom, updatedTo); if (newValue) { const parsedDate = parseDate(newValue); if (parsedDate) { setCalendarMonth(parsedDate); } } setSelectedPresetId(null); setIsTouched(true); }, [value, updateDateRange] ); const { timezone } = (0, import_date4.getSettings)(); let displayLabel = label; if (field.isValid?.required && !markWhenOptional) { displayLabel = `${label} (${(0, import_i18n38.__)("Required")})`; } else if (!field.isValid?.required && markWhenOptional) { displayLabel = `${label} (${(0, import_i18n38.__)("Optional")})`; } return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( ValidatedDateControl, { field, validity, inputRefs: [fromInputRef, toInputRef], isTouched, setIsTouched, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.BaseControl, { id, className: "dataviews-controls__date", label: displayLabel, help: description, hideLabelFromVision, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)(Stack, { direction: "column", gap: "lg", children: [ /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)( Stack, { direction: "row", gap: "sm", wrap: "wrap", justify: "flex-start", children: [ DATE_RANGE_PRESETS.map((preset) => { const isSelected2 = selectedPresetId === preset.id; return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.Button, { className: "dataviews-controls__date-preset", variant: "tertiary", isPressed: isSelected2, size: "small", disabled: disabled2, accessibleWhenDisabled: true, onClick: () => handlePresetClick(preset), children: preset.label }, preset.id ); }), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.Button, { className: "dataviews-controls__date-preset", variant: "tertiary", isPressed: !selectedPresetId, size: "small", accessibleWhenDisabled: true, disabled: !!selectedPresetId || disabled2, children: (0, import_i18n38.__)("Custom") } ) ] } ), /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)( Stack, { direction: "row", gap: "sm", justify: "space-between", className: "dataviews-controls__date-range-inputs", children: [ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.__experimentalInputControl, { __next40pxDefaultSize: true, ref: fromInputRef, type: "date", label: (0, import_i18n38.__)("From"), hideLabelFromVision: true, value: value?.[0], onChange: (newValue) => handleManualDateChange("from", newValue), required: !!field.isValid?.required, disabled: disabled2, min: minConstraint, max: maxConstraint } ), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( import_components32.__experimentalInputControl, { __next40pxDefaultSize: true, ref: toInputRef, type: "date", label: (0, import_i18n38.__)("To"), hideLabelFromVision: true, value: value?.[1], onChange: (newValue) => handleManualDateChange("to", newValue), required: !!field.isValid?.required, disabled: disabled2, min: minConstraint, max: maxConstraint } ) ] } ), /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( DateRangeCalendar, { style: { width: "100%" }, selected: selectedRange, onSelect: onSelectCalendarRange, month: calendarMonth, onMonthChange: setCalendarMonth, timeZone: timezone.string || void 0, weekStartsOn, disabled: disabled2 || disabledMatchers } ) ] }) } ) } ); } function DateControl({ data, field, onChange, hideLabelFromVision, markWhenOptional, operator, validity }) { if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( RelativeDateControl, { className: "dataviews-controls__date", data, field, onChange, hideLabelFromVision, operator } ); } if (operator === OPERATOR_BETWEEN) { return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( CalendarDateRangeControl, { data, field, onChange, hideLabelFromVision, markWhenOptional, validity } ); } return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)( CalendarDateControl, { data, field, onChange, hideLabelFromVision, markWhenOptional, validity } ); } // packages/dataviews/build-module/components/dataform-controls/select.mjs var import_components33 = __toESM(require_components(), 1); var import_element100 = __toESM(require_element(), 1); var import_jsx_runtime150 = __toESM(require_jsx_runtime(), 1); var { ValidatedSelectControl } = unlock2(import_components33.privateApis); function Select({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { type, label, description, getValue, setValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const isMultiple = type === "array"; const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); const onChangeControl = (0, import_element100.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(import_components33.Spinner, {}); } return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)( ValidatedSelectControl, { required: !!field.isValid?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, value, help: description, options: elements, onChange: onChangeControl, __next40pxDefaultSize: true, hideLabelFromVision, multiple: isMultiple, disabled: disabled2 } ); } // packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs var import_jsx_runtime151 = __toESM(require_jsx_runtime(), 1); var ELEMENTS_THRESHOLD = 10; function AdaptiveSelect(props) { const { field } = props; const { elements } = useElements({ elements: field.elements, getElements: field.getElements }); if (elements.length >= ELEMENTS_THRESHOLD) { return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(Combobox3, { ...props }); } return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(Select, { ...props }); } // packages/dataviews/build-module/components/dataform-controls/email.mjs var import_components35 = __toESM(require_components(), 1); // packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs var import_components34 = __toESM(require_components(), 1); var import_element101 = __toESM(require_element(), 1); var import_jsx_runtime152 = __toESM(require_jsx_runtime(), 1); var { ValidatedInputControl: ValidatedInputControl2 } = unlock2(import_components34.privateApis); function ValidatedText({ data, field, onChange, hideLabelFromVision, markWhenOptional, type, prefix, suffix, validity }) { const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; const value = getValue({ item: data }); const disabled2 = field.isDisabled({ item: data, field }); const onChangeControl = (0, import_element101.useCallback)( (newValue) => onChange( setValue({ item: data, value: newValue }) ), [data, setValue, onChange] ); return /* @__PURE__ */ (0, import_jsx_runtime152.jsx)( ValidatedInputControl2, { required: !!isValid2.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, placeholder, value: value ?? "", help: description, onChange: onChangeControl, hideLabelFromVision, type, prefix, suffix, disabled: disabled2, pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, __next40pxDefaultSize: true } ); } // packages/dataviews/build-module/components/dataform-controls/email.mjs var import_jsx_runtime153 = __toESM(require_jsx_runtime(), 1); function Email({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { return /* @__PURE__ */ (0, import_jsx_runtime153.jsx)( ValidatedText, { ...{ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, type: "email", prefix: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)(import_components35.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)(import_components35.Icon, { icon: envelope_default }) }) } } ); } // packages/dataviews/build-module/components/dataform-controls/telephone.mjs var import_components36 = __toESM(require_components(), 1); var import_jsx_runtime154 = __toESM(require_jsx_runtime(), 1); function Telephone({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { return /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( ValidatedText, { ...{ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, type: "tel", prefix: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_components36.Icon, { icon: mobile_default }) }) } } ); } // packages/dataviews/build-module/components/dataform-controls/url.mjs var import_components37 = __toESM(require_components(), 1); var import_jsx_runtime155 = __toESM(require_jsx_runtime(), 1); function Url({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { return /* @__PURE__ */ (0, import_jsx_runtime155.jsx)( ValidatedText, { ...{ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, type: "url", prefix: /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(import_components37.Icon, { icon: link_default }) }) } } ); } // packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs var import_components38 = __toESM(require_components(), 1); var import_element102 = __toESM(require_element(), 1); var import_i18n39 = __toESM(require_i18n(), 1); var import_jsx_runtime156 = __toESM(require_jsx_runtime(), 1); var { ValidatedNumberControl } = unlock2(import_components38.privateApis); function toNumberOrEmpty(value) { if (value === "" || value === void 0) { return ""; } const number = Number(value); return Number.isFinite(number) ? number : ""; } function BetweenControls({ value, onChange, hideLabelFromVision, step }) { const [min2 = "", max2 = ""] = value; const onChangeMin = (0, import_element102.useCallback)( (newValue) => onChange([toNumberOrEmpty(newValue), max2]), [onChange, max2] ); const onChangeMax = (0, import_element102.useCallback)( (newValue) => onChange([min2, toNumberOrEmpty(newValue)]), [onChange, min2] ); return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( import_components38.BaseControl, { help: (0, import_i18n39.__)("The max. value must be greater than the min. value."), children: /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)(import_components38.Flex, { direction: "row", gap: 4, children: [ /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( import_components38.__experimentalNumberControl, { label: (0, import_i18n39.__)("Min."), value: min2, max: max2 ? Number(max2) - step : void 0, onChange: onChangeMin, __next40pxDefaultSize: true, hideLabelFromVision, step } ), /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( import_components38.__experimentalNumberControl, { label: (0, import_i18n39.__)("Max."), value: max2, min: min2 ? Number(min2) + step : void 0, onChange: onChangeMax, __next40pxDefaultSize: true, hideLabelFromVision, step } ) ] }) } ); } function ValidatedNumber({ data, field, onChange, hideLabelFromVision, markWhenOptional, operator, validity }) { const decimals = field.format?.decimals ?? 0; const step = Math.pow(10, Math.abs(decimals) * -1); const { label, description, getValue, setValue, isValid: isValid2 } = field; const value = getValue({ item: data }) ?? ""; const disabled2 = field.isDisabled({ item: data, field }); const onChangeControl = (0, import_element102.useCallback)( (newValue) => { onChange( setValue({ item: data, // Do not convert an empty string or undefined to a number, // otherwise there's a mismatch between the UI control (empty) // and the data relied by onChange (0). value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) }) ); }, [data, onChange, setValue] ); const onChangeBetweenControls = (0, import_element102.useCallback)( (newValue) => { onChange( setValue({ item: data, value: newValue }) ); }, [data, onChange, setValue] ); if (operator === OPERATOR_BETWEEN) { let valueBetween = ["", ""]; if (Array.isArray(value) && value.length === 2 && value.every( (element) => typeof element === "number" || element === "" )) { valueBetween = value; } return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( BetweenControls, { value: valueBetween, onChange: onChangeBetweenControls, hideLabelFromVision, step } ); } return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( ValidatedNumberControl, { required: !!isValid2.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, help: description, value, onChange: onChangeControl, __next40pxDefaultSize: true, hideLabelFromVision, step, min: isValid2.min ? isValid2.min.constraint : void 0, max: isValid2.max ? isValid2.max.constraint : void 0, disabled: disabled2 } ); } // packages/dataviews/build-module/components/dataform-controls/integer.mjs var import_jsx_runtime157 = __toESM(require_jsx_runtime(), 1); function Integer(props) { return /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(ValidatedNumber, { ...props }); } // packages/dataviews/build-module/components/dataform-controls/number.mjs var import_jsx_runtime158 = __toESM(require_jsx_runtime(), 1); function Number2(props) { return /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(ValidatedNumber, { ...props }); } // packages/dataviews/build-module/components/dataform-controls/radio.mjs var import_components39 = __toESM(require_components(), 1); var import_element103 = __toESM(require_element(), 1); var import_jsx_runtime159 = __toESM(require_jsx_runtime(), 1); var { ValidatedRadioControl } = unlock2(import_components39.privateApis); function Radio({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { label, description, getValue, setValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); const value = getValue({ item: data }); const onChangeControl = (0, import_element103.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_components39.Spinner, {}); } return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)( ValidatedRadioControl, { required: !!field.isValid?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, help: description, onChange: onChangeControl, options: elements, selected: value, hideLabelFromVision, disabled: disabled2 } ); } // packages/dataviews/build-module/components/dataform-controls/text.mjs var import_element104 = __toESM(require_element(), 1); var import_jsx_runtime160 = __toESM(require_jsx_runtime(), 1); function Text3({ data, field, onChange, hideLabelFromVision, markWhenOptional, config, validity }) { const { prefix, suffix } = config || {}; return /* @__PURE__ */ (0, import_jsx_runtime160.jsx)( ValidatedText, { ...{ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, prefix: prefix ? (0, import_element104.createElement)(prefix) : void 0, suffix: suffix ? (0, import_element104.createElement)(suffix) : void 0 } } ); } // packages/dataviews/build-module/components/dataform-controls/toggle.mjs var import_components40 = __toESM(require_components(), 1); var import_element105 = __toESM(require_element(), 1); var import_jsx_runtime161 = __toESM(require_jsx_runtime(), 1); var { ValidatedToggleControl } = unlock2(import_components40.privateApis); function Toggle({ field, onChange, data, hideLabelFromVision, markWhenOptional, validity }) { const { label, description, getValue, setValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const onChangeControl = (0, import_element105.useCallback)(() => { onChange( setValue({ item: data, value: !getValue({ item: data }) }) ); }, [onChange, setValue, data, getValue]); return /* @__PURE__ */ (0, import_jsx_runtime161.jsx)( ValidatedToggleControl, { required: !!isValid2.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), hidden: hideLabelFromVision, label, help: description, checked: getValue({ item: data }), onChange: onChangeControl, disabled: disabled2 } ); } // packages/dataviews/build-module/components/dataform-controls/textarea.mjs var import_components41 = __toESM(require_components(), 1); var import_element106 = __toESM(require_element(), 1); var import_jsx_runtime162 = __toESM(require_jsx_runtime(), 1); var { ValidatedTextareaControl } = unlock2(import_components41.privateApis); function Textarea({ data, field, onChange, hideLabelFromVision, markWhenOptional, config, validity }) { const { rows = 4 } = config || {}; const disabled2 = field.isDisabled({ item: data, field }); const { label, placeholder, description, setValue, isValid: isValid2 } = field; const value = field.getValue({ item: data }); const onChangeControl = (0, import_element106.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( ValidatedTextareaControl, { required: !!isValid2.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, placeholder, value: value ?? "", help: description, onChange: onChangeControl, rows, disabled: disabled2, minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, __next40pxDefaultSize: true, hideLabelFromVision } ); } // packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs var import_components42 = __toESM(require_components(), 1); var import_element107 = __toESM(require_element(), 1); var import_jsx_runtime163 = __toESM(require_jsx_runtime(), 1); var { ValidatedToggleGroupControl } = unlock2(import_components42.privateApis); function ToggleGroup({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { getValue, setValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const value = getValue({ item: data }); const onChangeControl = (0, import_element107.useCallback)( (newValue) => onChange(setValue({ item: data, value: newValue })), [data, onChange, setValue] ); const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(import_components42.Spinner, {}); } if (elements.length === 0) { return null; } const selectedOption = elements.find((el) => el.value === value); return /* @__PURE__ */ (0, import_jsx_runtime163.jsx)( ValidatedToggleGroupControl, { required: !!field.isValid?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), __next40pxDefaultSize: true, isBlock: true, label: field.label, help: selectedOption?.description || field.description, onChange: onChangeControl, value, hideLabelFromVision, children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime163.jsx)( import_components42.__experimentalToggleGroupControlOption, { label: el.label, value: el.value, disabled: disabled2 }, el.value )) } ); } // packages/dataviews/build-module/components/dataform-controls/array.mjs var import_components43 = __toESM(require_components(), 1); var import_element108 = __toESM(require_element(), 1); var import_jsx_runtime164 = __toESM(require_jsx_runtime(), 1); var { ValidatedFormTokenField } = unlock2(import_components43.privateApis); function ArrayControl({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; const value = getValue({ item: data }); const disabled2 = field.isDisabled({ item: data, field }); const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); const arrayValueAsElements = (0, import_element108.useMemo)( () => Array.isArray(value) ? value.map((token) => { const element = elements?.find( (suggestion) => suggestion.value === token ); return element || { value: token, label: token }; }) : [], [value, elements] ); const onChangeControl = (0, import_element108.useCallback)( (tokens) => { const valueTokens = tokens.map((token) => { if (typeof token === "object" && "value" in token) { return token.value; } return token; }); onChange(setValue({ item: data, value: valueTokens })); }, [onChange, setValue, data] ); if (isLoading) { return /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(import_components43.Spinner, {}); } return /* @__PURE__ */ (0, import_jsx_runtime164.jsx)( ValidatedFormTokenField, { required: !!isValid2?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label: hideLabelFromVision ? void 0 : label, value: arrayValueAsElements, onChange: onChangeControl, placeholder, suggestions: elements?.map((element) => element.value), disabled: disabled2, __experimentalValidateInput: (token) => { if (field.isValid?.elements && elements) { return elements.some( (element) => element.value === token || element.label === token ); } return true; }, __experimentalExpandOnFocus: elements && elements.length > 0, help: description ?? (field.isValid?.elements ? "" : void 0), displayTransform: (token) => { if (typeof token === "object" && "label" in token) { return token.label; } if (typeof token === "string" && elements) { const element = elements.find( (el) => el.value === token ); return element?.label || token; } return token; }, __experimentalRenderItem: ({ item }) => { if (typeof item === "string" && elements) { const element = elements.find( (el) => el.value === item ); return /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("span", { children: element?.label || item }); } return /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("span", { children: item }); } } ); } // node_modules/colord/index.mjs var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; var t = function(r3) { return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; }; var n = function(r3, t2, n2) { return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; }; var e = function(r3, t2, n2) { return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; }; var u = function(r3) { return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; }; var a = function(r3) { return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; }; var o = function(r3) { return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; }; var i = /^#([0-9a-f]{3,8})$/i; var s = function(r3) { var t2 = r3.toString(16); return t2.length < 2 ? "0" + t2 : t2; }; var h = function(r3) { var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0; return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; }; var b = function(r3) { var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6; return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 }; }; var g = function(r3) { return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; }; var d = function(r3) { return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; }; var f = function(r3) { return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a })); var t2, n2, e2; }; var c = function(r3) { return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a }; var t2, n2, e2, u2; }; var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; var y = { string: [[function(r3) { var t2 = i.exec(r3); return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; }, "hex"], [function(r3) { var t2 = v.exec(r3) || m.exec(r3); return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null; }, "rgb"], [function(t2) { var n2 = l.exec(t2) || p.exec(t2); if (!n2) return null; var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); return f(a2); }, "hsl"]], object: [[function(r3) { var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; }, "rgb"], [function(r3) { var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; if (!t(n2) || !t(e2) || !t(u2)) return null; var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); return f(i2); }, "hsl"], [function(r3) { var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; if (!t(n2) || !t(a2) || !t(o2)) return null; var h2 = (function(r4) { return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); return b(h2); }, "hsv"]] }; var N = function(r3, t2) { for (var n2 = 0; n2 < t2.length; n2++) { var e2 = t2[n2][0](r3); if (e2) return [e2, t2[n2][1]]; } return [null, void 0]; }; var x = function(r3) { return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; }; var M = function(r3, t2) { var n2 = c(r3); return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; }; var H = function(r3) { return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; }; var $ = function(r3, t2) { var n2 = c(r3); return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; }; var j = (function() { function r3(r4) { this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; } return r3.prototype.isValid = function() { return null !== this.parsed; }, r3.prototype.brightness = function() { return n(H(this.rgba), 2); }, r3.prototype.isDark = function() { return H(this.rgba) < 0.5; }, r3.prototype.isLight = function() { return H(this.rgba) >= 0.5; }, r3.prototype.toHex = function() { return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2; var r4, t2, e2, u2, a2, i2; }, r3.prototype.toRgb = function() { return o(this.rgba); }, r3.prototype.toRgbString = function() { return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")"; var r4, t2, n2, e2, u2; }, r3.prototype.toHsl = function() { return d(c(this.rgba)); }, r3.prototype.toHslString = function() { return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)"; var r4, t2, n2, e2, u2; }, r3.prototype.toHsv = function() { return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; var r4; }, r3.prototype.invert = function() { return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); var r4; }, r3.prototype.saturate = function(r4) { return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); }, r3.prototype.desaturate = function(r4) { return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); }, r3.prototype.grayscale = function() { return w(M(this.rgba, -1)); }, r3.prototype.lighten = function(r4) { return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); }, r3.prototype.darken = function(r4) { return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); }, r3.prototype.rotate = function(r4) { return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); }, r3.prototype.alpha = function(r4) { return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); var t2; }, r3.prototype.hue = function(r4) { var t2 = c(this.rgba); return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); }, r3.prototype.isEqual = function(r4) { return this.toHex() === w(r4).toHex(); }, r3; })(); var w = function(r3) { return r3 instanceof j ? r3 : new j(r3); }; // packages/dataviews/build-module/components/dataform-controls/color.mjs var import_components44 = __toESM(require_components(), 1); var import_element109 = __toESM(require_element(), 1); var import_i18n40 = __toESM(require_i18n(), 1); var import_jsx_runtime165 = __toESM(require_jsx_runtime(), 1); var { ValidatedInputControl: ValidatedInputControl3 } = unlock2(import_components44.privateApis); var ColorPickerDropdown = ({ color, onColorChange, disabled: disabled2 }) => { const validColor = color && w(color).isValid() ? color : "#ffffff"; return /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( import_components44.Dropdown, { className: "dataviews-controls__color-picker-dropdown", popoverProps: { resize: false }, renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( import_components44.Button, { onClick: onToggle, "aria-label": (0, import_i18n40.__)("Open color picker"), size: "small", disabled: disabled2, accessibleWhenDisabled: true, icon: () => /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(import_components44.ColorIndicator, { colorValue: validColor }) } ), renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(import_components44.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( import_components44.ColorPicker, { color: validColor, onChange: onColorChange, enableAlpha: true } ) }) } ); }; function Color({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const { label, placeholder, description, setValue, isValid: isValid2 } = field; const disabled2 = field.isDisabled({ item: data, field }); const value = field.getValue({ item: data }) || ""; const handleColorChange = (0, import_element109.useCallback)( (newColor) => { onChange(setValue({ item: data, value: newColor })); }, [data, onChange, setValue] ); const handleInputChange = (0, import_element109.useCallback)( (newValue) => { onChange(setValue({ item: data, value: newValue || "" })); }, [data, onChange, setValue] ); return /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( ValidatedInputControl3, { required: !!field.isValid?.required, markWhenOptional, customValidity: getCustomValidity(isValid2, validity), label, placeholder, value, help: description, onChange: handleInputChange, hideLabelFromVision, type: "text", disabled: disabled2, prefix: /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(import_components44.__experimentalInputControlPrefixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( ColorPickerDropdown, { color: value, onColorChange: handleColorChange, disabled: disabled2 } ) }) } ); } // packages/dataviews/build-module/components/dataform-controls/password.mjs var import_components45 = __toESM(require_components(), 1); var import_element110 = __toESM(require_element(), 1); var import_i18n41 = __toESM(require_i18n(), 1); var import_jsx_runtime166 = __toESM(require_jsx_runtime(), 1); function Password({ data, field, onChange, hideLabelFromVision, markWhenOptional, validity }) { const [isVisible2, setIsVisible] = (0, import_element110.useState)(false); const disabled2 = field.isDisabled({ item: data, field }); const toggleVisibility = (0, import_element110.useCallback)(() => { setIsVisible((prev) => !prev); }, []); return /* @__PURE__ */ (0, import_jsx_runtime166.jsx)( ValidatedText, { ...{ data, field, onChange, hideLabelFromVision, markWhenOptional, validity, type: isVisible2 ? "text" : "password", suffix: /* @__PURE__ */ (0, import_jsx_runtime166.jsx)(import_components45.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime166.jsx)( import_components45.Button, { icon: isVisible2 ? unseen_default : seen_default, onClick: toggleVisibility, size: "small", label: isVisible2 ? (0, import_i18n41.__)("Hide password") : (0, import_i18n41.__)("Show password"), disabled: disabled2, accessibleWhenDisabled: true } ) }) } } ); } // packages/dataviews/build-module/field-types/utils/has-elements.mjs function hasElements(field) { return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; } // packages/dataviews/build-module/components/dataform-controls/index.mjs var import_jsx_runtime167 = __toESM(require_jsx_runtime(), 1); var FORM_CONTROLS = { adaptiveSelect: AdaptiveSelect, array: ArrayControl, checkbox: Checkbox, color: Color, combobox: Combobox3, datetime: DateTime, date: DateControl, email: Email, telephone: Telephone, url: Url, integer: Integer, number: Number2, password: Password, radio: Radio, select: Select, text: Text3, toggle: Toggle, textarea: Textarea, toggleGroup: ToggleGroup }; function isEditConfig(value) { return value && typeof value === "object" && typeof value.control === "string"; } function createConfiguredControl(config) { const { control, ...controlConfig } = config; const BaseControlType = getControlByType(control); if (BaseControlType === null) { return null; } return function ConfiguredControl(props) { return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(BaseControlType, { ...props, config: controlConfig }); }; } function getControl(field, fallback) { if (typeof field.Edit === "function") { return field.Edit; } if (typeof field.Edit === "string") { return getControlByType(field.Edit); } if (isEditConfig(field.Edit)) { return createConfiguredControl(field.Edit); } if (hasElements(field) && field.type !== "array") { return getControlByType("adaptiveSelect"); } if (fallback === null) { return null; } return getControlByType(fallback); } function getControlByType(type) { if (Object.keys(FORM_CONTROLS).includes(type)) { return FORM_CONTROLS[type]; } return null; } // packages/dataviews/build-module/field-types/utils/get-filter-by.mjs function getFilterBy(field, defaultOperators, validOperators) { if (field.filterBy === false) { return false; } const operators = field.filterBy?.operators?.filter( (op) => validOperators.includes(op) ) ?? defaultOperators; if (operators.length === 0) { return false; } return { isPrimary: !!field.filterBy?.isPrimary, operators }; } var get_filter_by_default = getFilterBy; // packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs var getValueFromId = (id) => ({ item }) => { const path = id.split("."); let value = item; for (const segment of path) { if (value.hasOwnProperty(segment)) { value = value[segment]; } else { value = void 0; } } return value; }; var get_value_from_id_default = getValueFromId; // packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs var setValueFromId = (id) => ({ value }) => { const path = id.split("."); const result = {}; let current = result; for (const segment of path.slice(0, -1)) { current[segment] = {}; current = current[segment]; } current[path.at(-1)] = value; return result; }; var set_value_from_id_default = setValueFromId; // packages/dataviews/build-module/field-types/email.mjs var import_i18n42 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/field-types/utils/render-from-elements.mjs function RenderFromElements({ item, field }) { const { elements, isLoading } = useElements({ elements: field.elements, getElements: field.getElements }); const value = field.getValue({ item }); if (isLoading) { return value; } if (elements.length === 0) { return value; } return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); } // packages/dataviews/build-module/field-types/utils/render-default.mjs var import_jsx_runtime168 = __toESM(require_jsx_runtime(), 1); function render({ item, field }) { if (field.hasElements) { return /* @__PURE__ */ (0, import_jsx_runtime168.jsx)(RenderFromElements, { item, field }); } return field.getValueFormatted({ item, field }); } // packages/dataviews/build-module/field-types/utils/sort-text.mjs var sort_text_default = (a2, b2, direction) => { return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); }; // packages/dataviews/build-module/field-types/utils/is-valid-required.mjs function isValidRequired(item, field) { const value = field.getValue({ item }); return ![void 0, "", null].includes(value); } // packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs function isValidMinLength(item, field) { if (typeof field.isValid.minLength?.constraint !== "number") { return false; } const value = field.getValue({ item }); if ([void 0, "", null].includes(value)) { return true; } return String(value).length >= field.isValid.minLength.constraint; } // packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs function isValidMaxLength(item, field) { if (typeof field.isValid.maxLength?.constraint !== "number") { return false; } const value = field.getValue({ item }); if ([void 0, "", null].includes(value)) { return true; } return String(value).length <= field.isValid.maxLength.constraint; } // packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs function isValidPattern(item, field) { if (field.isValid.pattern?.constraint === void 0) { return true; } try { const regexp = new RegExp(field.isValid.pattern.constraint); const value = field.getValue({ item }); if ([void 0, "", null].includes(value)) { return true; } return regexp.test(String(value)); } catch { return false; } } // packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs function isValidElements(item, field) { const elements = field.elements ?? []; const validValues = elements.map((el) => el.value); if (validValues.length === 0) { return true; } const value = field.getValue({ item }); return [].concat(value).every((v2) => validValues.includes(v2)); } // packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs function getValueFormatted({ item, field }) { return field.getValue({ item }); } var get_value_formatted_default_default = getValueFormatted; // packages/dataviews/build-module/field-types/email.mjs var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; function isValidCustom(item, field) { const value = field.getValue({ item }); if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { return (0, import_i18n42.__)("Value must be a valid email address."); } return null; } var email_default = { type: "email", render, Edit: "email", sort: sort_text_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, // Multiple selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, pattern: isValidPattern, minLength: isValidMinLength, maxLength: isValidMaxLength, elements: isValidElements, custom: isValidCustom } }; // packages/dataviews/build-module/field-types/integer.mjs var import_i18n43 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/field-types/utils/sort-number.mjs var sort_number_default = (a2, b2, direction) => { return direction === "asc" ? a2 - b2 : b2 - a2; }; // packages/dataviews/build-module/field-types/utils/is-valid-min.mjs function isValidMin(item, field) { if (typeof field.isValid.min?.constraint !== "number") { return false; } const value = field.getValue({ item }); if ([void 0, "", null].includes(value)) { return true; } return Number(value) >= field.isValid.min.constraint; } // packages/dataviews/build-module/field-types/utils/is-valid-max.mjs function isValidMax(item, field) { if (typeof field.isValid.max?.constraint !== "number") { return false; } const value = field.getValue({ item }); if ([void 0, "", null].includes(value)) { return true; } return Number(value) <= field.isValid.max.constraint; } // packages/dataviews/build-module/field-types/integer.mjs var format2 = { separatorThousand: "," }; function getValueFormatted2({ item, field }) { let value = field.getValue({ item }); if (value === null || value === void 0) { return ""; } value = Number(value); if (!Number.isFinite(value)) { return String(value); } let formatInteger; if (field.type !== "integer") { formatInteger = format2; } else { formatInteger = field.format; } const { separatorThousand } = formatInteger; const integerValue = Math.trunc(value); if (!separatorThousand) { return String(integerValue); } return String(integerValue).replace( /\B(?=(\d{3})+(?!\d))/g, separatorThousand ); } function isValidCustom2(item, field) { const value = field.getValue({ item }); if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { return (0, import_i18n43.__)("Value must be an integer."); } return null; } var integer_default = { type: "integer", render, Edit: "integer", sort: sort_number_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_BETWEEN ], validOperators: [ // Single-selection OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_BETWEEN, // Multiple-selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: format2, getValueFormatted: getValueFormatted2, validate: { required: isValidRequired, min: isValidMin, max: isValidMax, elements: isValidElements, custom: isValidCustom2 } }; // packages/dataviews/build-module/field-types/number.mjs var import_i18n44 = __toESM(require_i18n(), 1); var format3 = { separatorThousand: ",", separatorDecimal: ".", decimals: 2 }; function getValueFormatted3({ item, field }) { let value = field.getValue({ item }); if (value === null || value === void 0) { return ""; } value = Number(value); if (!Number.isFinite(value)) { return String(value); } let formatNumber; if (field.type !== "number") { formatNumber = format3; } else { formatNumber = field.format; } const { separatorThousand, separatorDecimal, decimals } = formatNumber; const fixedValue = value.toFixed(decimals); const [integerPart, decimalPart] = fixedValue.split("."); const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; } function isEmpty(value) { return value === "" || value === void 0 || value === null; } function isValidCustom3(item, field) { const value = field.getValue({ item }); if (!isEmpty(value) && !Number.isFinite(value)) { return (0, import_i18n44.__)("Value must be a number."); } return null; } var number_default = { type: "number", render, Edit: "number", sort: sort_number_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_BETWEEN ], validOperators: [ // Single-selection OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_BETWEEN, // Multiple-selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: format3, getValueFormatted: getValueFormatted3, validate: { required: isValidRequired, min: isValidMin, max: isValidMax, elements: isValidElements, custom: isValidCustom3 } }; // packages/dataviews/build-module/field-types/text.mjs var text_default = { type: "text", render, Edit: "text", sort: sort_text_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ // Single selection OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, // Multiple selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, pattern: isValidPattern, minLength: isValidMinLength, maxLength: isValidMaxLength, elements: isValidElements } }; // packages/dataviews/build-module/field-types/datetime.mjs var import_date7 = __toESM(require_date(), 1); // packages/dataviews/build-module/field-types/utils/is-valid-date-boundary.mjs var import_date6 = __toESM(require_date(), 1); function parseDateLike(value) { if (!value) { return null; } if (!isValid(new Date(value))) { return null; } const parsed = (0, import_date6.getDate)(value); return parsed && isValid(parsed) ? parsed : null; } function validateDateLikeBoundary(item, field, boundary) { const constraint = field.isValid[boundary]?.constraint; if (typeof constraint !== "string") { return false; } const value = field.getValue({ item }); const boundaryValue = Array.isArray(value) ? value[boundary === "min" ? 0 : value.length - 1] : value; if (boundaryValue === void 0 || boundaryValue === null || boundaryValue === "") { return true; } const parsedConstraint = parseDateLike(constraint); const parsedValue = parseDateLike(String(boundaryValue)); return !!parsedConstraint && !!parsedValue && (boundary === "min" ? parsedValue.getTime() >= parsedConstraint.getTime() : parsedValue.getTime() <= parsedConstraint.getTime()); } function isValidMinDate(item, field) { return validateDateLikeBoundary(item, field, "min"); } function isValidMaxDate(item, field) { return validateDateLikeBoundary(item, field, "max"); } // packages/dataviews/build-module/field-types/datetime.mjs var format4 = { datetime: (0, import_date7.getSettings)().formats.datetime, weekStartsOn: (0, import_date7.getSettings)().l10n.startOfWeek }; function getValueFormatted4({ item, field }) { const value = field.getValue({ item }); if (["", void 0, null].includes(value)) { return ""; } let formatDatetime; if (field.type !== "datetime") { formatDatetime = format4; } else { formatDatetime = field.format; } return (0, import_date7.dateI18n)(formatDatetime.datetime, (0, import_date7.getDate)(value)); } var sort = (a2, b2, direction) => { const timeA = new Date(a2).getTime(); const timeB = new Date(b2).getTime(); return direction === "asc" ? timeA - timeB : timeB - timeA; }; var datetime_default = { type: "datetime", render, Edit: "datetime", sort, enableSorting: true, enableGlobalSearch: false, defaultOperators: [ OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_IN_THE_PAST, OPERATOR_OVER ], validOperators: [ OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_IN_THE_PAST, OPERATOR_OVER ], format: format4, getValueFormatted: getValueFormatted4, validate: { required: isValidRequired, elements: isValidElements, min: isValidMinDate, max: isValidMaxDate } }; // packages/dataviews/build-module/field-types/date.mjs var import_date8 = __toESM(require_date(), 1); var format5 = { date: (0, import_date8.getSettings)().formats.date, weekStartsOn: (0, import_date8.getSettings)().l10n.startOfWeek }; function getValueFormatted5({ item, field }) { const value = field.getValue({ item }); if (["", void 0, null].includes(value)) { return ""; } let formatDate2; if (field.type !== "date") { formatDate2 = format5; } else { formatDate2 = field.format; } return (0, import_date8.dateI18n)(formatDate2.date, (0, import_date8.getDate)(value)); } var sort2 = (a2, b2, direction) => { const timeA = new Date(a2).getTime(); const timeB = new Date(b2).getTime(); return direction === "asc" ? timeA - timeB : timeB - timeA; }; var date_default = { type: "date", render, Edit: "date", sort: sort2, enableSorting: true, enableGlobalSearch: false, defaultOperators: [ OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_IN_THE_PAST, OPERATOR_OVER, OPERATOR_BETWEEN ], validOperators: [ OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_IN_THE_PAST, OPERATOR_OVER, OPERATOR_BETWEEN ], format: format5, getValueFormatted: getValueFormatted5, validate: { required: isValidRequired, elements: isValidElements, min: isValidMinDate, max: isValidMaxDate } }; // packages/dataviews/build-module/field-types/boolean.mjs var import_i18n45 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs function isValidRequiredForBool(item, field) { const value = field.getValue({ item }); return value === true; } // packages/dataviews/build-module/field-types/boolean.mjs function getValueFormatted6({ item, field }) { const value = field.getValue({ item }); if (value === true) { return (0, import_i18n45.__)("True"); } if (value === false) { return (0, import_i18n45.__)("False"); } return ""; } function isValidCustom4(item, field) { const value = field.getValue({ item }); if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { return (0, import_i18n45.__)("Value must be true, false, or undefined"); } return null; } var sort3 = (a2, b2, direction) => { const boolA = Boolean(a2); const boolB = Boolean(b2); if (boolA === boolB) { return 0; } if (direction === "asc") { return boolA ? 1 : -1; } return boolA ? -1 : 1; }; var boolean_default = { type: "boolean", render, Edit: "checkbox", sort: sort3, validate: { required: isValidRequiredForBool, elements: isValidElements, custom: isValidCustom4 }, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], format: {}, getValueFormatted: getValueFormatted6 }; // packages/dataviews/build-module/field-types/media.mjs var media_default = { type: "media", render: () => null, Edit: null, sort: () => 0, enableSorting: false, enableGlobalSearch: false, defaultOperators: [], validOperators: [], format: {}, getValueFormatted: get_value_formatted_default_default, // cannot validate any constraint, so // the only available validation for the field author // would be providing a custom validator. validate: {} }; // packages/dataviews/build-module/field-types/array.mjs var import_i18n46 = __toESM(require_i18n(), 1); // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs function isValidRequiredForArray(item, field) { const value = field.getValue({ item }); return Array.isArray(value) && value.length > 0 && value.every( (element) => ![void 0, "", null].includes(element) ); } // packages/dataviews/build-module/field-types/array.mjs function getValueFormatted7({ item, field }) { const value = field.getValue({ item }); const arr = Array.isArray(value) ? value : []; return arr.join(", "); } function render2({ item, field }) { return getValueFormatted7({ item, field }); } function isValidCustom5(item, field) { const value = field.getValue({ item }); if (![void 0, "", null].includes(value) && !Array.isArray(value)) { return (0, import_i18n46.__)("Value must be an array."); } if (!value.every((v2) => typeof v2 === "string")) { return (0, import_i18n46.__)("Every value must be a string."); } return null; } var sort4 = (a2, b2, direction) => { const arrA = Array.isArray(a2) ? a2 : []; const arrB = Array.isArray(b2) ? b2 : []; if (arrA.length !== arrB.length) { return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; } const joinedA = arrA.join(","); const joinedB = arrB.join(","); return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); }; var array_default = { type: "array", render: render2, Edit: "array", sort: sort4, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: {}, getValueFormatted: getValueFormatted7, validate: { required: isValidRequiredForArray, elements: isValidElements, custom: isValidCustom5 } }; // packages/dataviews/build-module/field-types/password.mjs function getValueFormatted8({ item, field }) { return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; } var password_default = { type: "password", render, Edit: "password", sort: () => 0, // Passwords should not be sortable for security reasons enableSorting: false, enableGlobalSearch: false, defaultOperators: [], validOperators: [], format: {}, getValueFormatted: getValueFormatted8, validate: { required: isValidRequired, pattern: isValidPattern, minLength: isValidMinLength, maxLength: isValidMaxLength, elements: isValidElements } }; // packages/dataviews/build-module/field-types/telephone.mjs var telephone_default = { type: "telephone", render, Edit: "telephone", sort: sort_text_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, // Multiple selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, pattern: isValidPattern, minLength: isValidMinLength, maxLength: isValidMaxLength, elements: isValidElements } }; // packages/dataviews/build-module/field-types/color.mjs var import_i18n47 = __toESM(require_i18n(), 1); var import_jsx_runtime169 = __toESM(require_jsx_runtime(), 1); function render3({ item, field }) { if (field.hasElements) { return /* @__PURE__ */ (0, import_jsx_runtime169.jsx)(RenderFromElements, { item, field }); } const value = get_value_formatted_default_default({ item, field }); if (!value || !w(value).isValid()) { return value; } return /* @__PURE__ */ (0, import_jsx_runtime169.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ /* @__PURE__ */ (0, import_jsx_runtime169.jsx)( "div", { style: { width: "16px", height: "16px", borderRadius: "50%", backgroundColor: value, border: "1px solid #ddd", flexShrink: 0 } } ), /* @__PURE__ */ (0, import_jsx_runtime169.jsx)("span", { children: value }) ] }); } function isValidCustom6(item, field) { const value = field.getValue({ item }); if (![void 0, "", null].includes(value) && !w(value).isValid()) { return (0, import_i18n47.__)("Value must be a valid color."); } return null; } var sort5 = (a2, b2, direction) => { const colorA = w(a2); const colorB = w(b2); if (!colorA.isValid() && !colorB.isValid()) { return 0; } if (!colorA.isValid()) { return direction === "asc" ? 1 : -1; } if (!colorB.isValid()) { return direction === "asc" ? -1 : 1; } const hslA = colorA.toHsl(); const hslB = colorB.toHsl(); if (hslA.h !== hslB.h) { return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; } if (hslA.s !== hslB.s) { return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; } return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; }; var color_default = { type: "color", render: render3, Edit: "color", sort: sort5, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_IS_ANY, OPERATOR_IS_NONE ], format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, elements: isValidElements, custom: isValidCustom6 } }; // packages/dataviews/build-module/field-types/url.mjs var url_default = { type: "url", render, Edit: "url", sort: sort_text_default, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], validOperators: [ OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, // Multiple selection OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL ], format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, pattern: isValidPattern, minLength: isValidMinLength, maxLength: isValidMaxLength, elements: isValidElements } }; // packages/dataviews/build-module/field-types/no-type.mjs var sort6 = (a2, b2, direction) => { if (typeof a2 === "number" && typeof b2 === "number") { return sort_number_default(a2, b2, direction); } return sort_text_default(a2, b2, direction); }; var no_type_default = { // type: no type for this one render, Edit: null, sort: sort6, enableSorting: true, enableGlobalSearch: false, defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], validOperators: getAllOperatorNames(), format: {}, getValueFormatted: get_value_formatted_default_default, validate: { required: isValidRequired, elements: isValidElements } }; // packages/dataviews/build-module/field-types/utils/get-is-valid.mjs function supportsNumericRangeConstraint(type) { return type === "integer" || type === "number"; } function supportsDateRangeConstraint(type) { return type === "date" || type === "datetime"; } function normalizeRangeRule(value, fieldType, key) { const validator = fieldType.validate[key]; if (validator && (typeof value === "number" && supportsNumericRangeConstraint(fieldType.type) || typeof value === "string" && supportsDateRangeConstraint(fieldType.type))) { return { constraint: value, validate: validator }; } return void 0; } function getIsValid(field, fieldType) { const rules = field.isValid; let required; if (rules?.required === true && fieldType.validate.required !== void 0) { required = { constraint: true, validate: fieldType.validate.required }; } let elements; if ((rules?.elements === true || // elements is enabled unless the field opts-out rules?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { elements = { constraint: true, validate: fieldType.validate.elements }; } const min2 = normalizeRangeRule(rules?.min, fieldType, "min"); const max2 = normalizeRangeRule(rules?.max, fieldType, "max"); const minLengthValue = rules?.minLength; let minLength; if (typeof minLengthValue === "number" && fieldType.validate.minLength !== void 0) { minLength = { constraint: minLengthValue, validate: fieldType.validate.minLength }; } const maxLengthValue = rules?.maxLength; let maxLength; if (typeof maxLengthValue === "number" && fieldType.validate.maxLength !== void 0) { maxLength = { constraint: maxLengthValue, validate: fieldType.validate.maxLength }; } const patternValue = rules?.pattern; let pattern; if (patternValue !== void 0 && fieldType.validate.pattern !== void 0) { pattern = { constraint: patternValue, validate: fieldType.validate.pattern }; } const custom = rules?.custom ?? fieldType.validate.custom; return { required, elements, min: min2, max: max2, minLength, maxLength, pattern, custom }; } // packages/dataviews/build-module/field-types/utils/get-filter.mjs function getFilter2(fieldType) { return fieldType.validOperators.reduce((accumulator, operator) => { const operatorObj = getOperatorByName(operator); if (operatorObj?.filter) { accumulator[operator] = operatorObj.filter; } return accumulator; }, {}); } // packages/dataviews/build-module/field-types/utils/get-format.mjs function getFormat(field, fieldType) { return { ...fieldType.format, ...field.format }; } var get_format_default = getFormat; // packages/dataviews/build-module/field-types/index.mjs function getFieldTypeByName(type) { const found = [ email_default, integer_default, number_default, text_default, datetime_default, date_default, boolean_default, media_default, array_default, password_default, telephone_default, color_default, url_default ].find((fieldType) => fieldType?.type === type); if (!!found) { return found; } return no_type_default; } function normalizeFields(fields) { return fields.map((field) => { const fieldType = getFieldTypeByName(field.type); const getValue = field.getValue || get_value_from_id_default(field.id); const sort7 = function(a2, b2, direction) { const aValue = getValue({ item: a2 }); const bValue = getValue({ item: b2 }); return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); }; return { id: field.id, label: field.label || field.id, header: field.header || field.label || field.id, description: field.description, placeholder: field.placeholder, getValue, setValue: field.setValue || set_value_from_id_default(field.id), elements: field.elements, getElements: field.getElements, hasElements: hasElements(field), isVisible: field.isVisible, isDisabled: typeof field.isDisabled === "function" ? field.isDisabled : () => !!field.isDisabled, enableHiding: field.enableHiding ?? true, readOnly: field.readOnly ?? false, // The type provides defaults for the following props type: fieldType.type, render: field.render ?? fieldType.render, Edit: getControl(field, fieldType.Edit), sort: sort7, enableSorting: field.enableSorting ?? fieldType.enableSorting, enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, isValid: getIsValid(field, fieldType), filterBy: get_filter_by_default( field, fieldType.defaultOperators, fieldType.validOperators ), filter: getFilter2(fieldType), format: get_format_default(field, fieldType), getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted }; }); } // packages/dataviews/build-module/hooks/use-data.mjs var import_element111 = __toESM(require_element(), 1); function useData({ view, data: shownData, getItemId, isLoading, paginationInfo, selection }) { const isInfiniteScrollEnabled = view.infiniteScrollEnabled; const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element111.useState)( !isLoading ); (0, import_element111.useEffect)(() => { if (!isLoading) { setHasInitiallyLoaded(true); } }, [isLoading]); const previousDataRef = (0, import_element111.useRef)(shownData); const previousPaginationInfoRef = (0, import_element111.useRef)(paginationInfo); (0, import_element111.useEffect)(() => { if (!isLoading) { previousDataRef.current = shownData; previousPaginationInfoRef.current = paginationInfo; } }, [shownData, isLoading, paginationInfo]); const [visibleEntries, setVisibleEntries] = (0, import_element111.useState)([]); const positionMapRef = (0, import_element111.useRef)(/* @__PURE__ */ new Map()); const allLoadedRecordsRef = (0, import_element111.useRef)([]); const prevViewParamsRef = (0, import_element111.useRef)({ search: void 0, filters: void 0, perPage: void 0 }); const scrollDirectionRef = (0, import_element111.useRef)(void 0); const prevStartPositionRef = (0, import_element111.useRef)(void 0); const hasInitializedRef = (0, import_element111.useRef)(false); const allLoadedRecords = (0, import_element111.useMemo)(() => { if (view.startPosition !== void 0 && prevStartPositionRef.current !== void 0) { if (view.startPosition < prevStartPositionRef.current) { scrollDirectionRef.current = "up"; } else if (view.startPosition > prevStartPositionRef.current) { scrollDirectionRef.current = "down"; } } prevStartPositionRef.current = view.startPosition; const currentFiltersKey = JSON.stringify(view.filters ?? []); const prevFiltersKey = prevViewParamsRef.current.filters; const shouldReset = !hasInitializedRef.current || !view.infiniteScrollEnabled || view.search !== prevViewParamsRef.current.search || currentFiltersKey !== prevFiltersKey || view.perPage !== prevViewParamsRef.current.perPage; hasInitializedRef.current = true; prevViewParamsRef.current = { search: view.search, filters: currentFiltersKey, perPage: view.perPage }; if (shouldReset) { positionMapRef.current.clear(); scrollDirectionRef.current = void 0; const startPosition = view.search ? 1 : view.startPosition ?? 1; const records = shownData.map((record, index2) => { const position = startPosition + index2; positionMapRef.current.set(getItemId(record), position); return { ...record, position }; }); allLoadedRecordsRef.current = records; return records; } const prev = allLoadedRecordsRef.current; const shownDataIds = new Set(shownData.map(getItemId)); const scrollDirection = scrollDirectionRef.current; const basePosition = view.search ? 1 : view.startPosition ?? 1; const newRecords = shownData.map((record, index2) => { const itemId = getItemId(record); const position = view.infiniteScrollEnabled ? basePosition + index2 : void 0; if (position !== void 0) { positionMapRef.current.set(itemId, position); } return { ...record, position }; }); if (newRecords.length === 0) { return prev; } const prevWithoutDuplicates = prev.filter( (record) => !shownDataIds.has(getItemId(record)) ); const allRecords = scrollDirection === "up" ? [...newRecords, ...prevWithoutDuplicates] : [...prevWithoutDuplicates, ...newRecords]; allRecords.sort((a2, b2) => { const posA = a2.position; const posB = b2.position; return posA - posB; }); let result = allRecords; if (visibleEntries.length > 0) { const visibleMin = Math.min(...visibleEntries); const visibleMax = Math.max(...visibleEntries); const buffer = 20; const recordPositions = allRecords.map( (r3) => r3.position ); const minRecordPos = Math.min(...recordPositions); const maxRecordPos = Math.max(...recordPositions); const hasOverlap = !(maxRecordPos < visibleMin - buffer || minRecordPos > visibleMax + buffer); if (hasOverlap) { result = allRecords.filter((record) => { const itemId = getItemId(record); const isSelected2 = selection?.includes(itemId); if (isSelected2) { return true; } const itemPosition = record.position; if (scrollDirection === "up") { return itemPosition <= visibleMax + buffer; } else if (scrollDirection === "down") { return itemPosition >= visibleMin - buffer; } return itemPosition >= visibleMin - buffer && itemPosition <= visibleMax + buffer; }); } } allLoadedRecordsRef.current = result; return result; }, [ shownData, view.search, view.filters, view.perPage, view.startPosition, view.infiniteScrollEnabled, visibleEntries, selection, getItemId ]); if (!isInfiniteScrollEnabled) { const dataToReturn = isLoading && previousDataRef.current?.length ? previousDataRef.current : shownData; return { data: dataToReturn.map((item) => ({ ...item, position: void 0 })), paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, hasInitiallyLoaded, setVisibleEntries: void 0 }; } return { data: allLoadedRecords, paginationInfo, hasInitiallyLoaded, setVisibleEntries }; } // packages/dataviews/build-module/hooks/use-infinite-scroll.mjs var import_element112 = __toESM(require_element(), 1); var import_compose12 = __toESM(require_compose(), 1); function captureAnchorElement(container, anchorElementRef, direction) { const containerRect = container.getBoundingClientRect(); const centerY = containerRect.top + containerRect.height / 2; const items = Array.from(container.querySelectorAll("[aria-posinset]")); if (items.length === 0) { return false; } const bestAnchor = items.reduce((best, item) => { const itemRect = item.getBoundingClientRect(); const itemCenterY = itemRect.top + itemRect.height / 2; const distance = Math.abs(itemCenterY - centerY); const bestRect = best.getBoundingClientRect(); const bestCenterY = bestRect.top + bestRect.height / 2; const bestDistance = Math.abs(bestCenterY - centerY); return distance < bestDistance ? item : best; }); const posinset = Number(bestAnchor.getAttribute("aria-posinset")); const anchorRect = bestAnchor.getBoundingClientRect(); anchorElementRef.current = { posinset, viewportOffset: anchorRect.top - containerRect.top, direction }; return true; } function useInfiniteScroll({ view, onChangeView, isLoading, paginationInfo, containerRef, setVisibleEntries }) { const anchorElementRef = (0, import_element112.useRef)(null); const viewRef = (0, import_element112.useRef)(view); const isLoadingRef = (0, import_element112.useRef)(isLoading); const onChangeViewRef = (0, import_element112.useRef)(onChangeView); const totalItemsRef = (0, import_element112.useRef)(paginationInfo.totalItems); (0, import_element112.useLayoutEffect)(() => { viewRef.current = view; isLoadingRef.current = isLoading; onChangeViewRef.current = onChangeView; totalItemsRef.current = paginationInfo.totalItems; }, [view, isLoading, onChangeView, paginationInfo.totalItems]); const intersectionObserverCallback = (0, import_element112.useCallback)( (entries) => { if (!setVisibleEntries) { return; } setVisibleEntries((prev) => { const newVisibleEntries = new Set(prev); let hasChanged = false; entries.forEach((entry) => { const posInSet = Number( entry.target?.attributes?.getNamedItem( "aria-posinset" )?.value ); if (isNaN(posInSet)) { return; } if (entry.isIntersecting) { if (!newVisibleEntries.has(posInSet)) { newVisibleEntries.add(posInSet); hasChanged = true; } } else if (newVisibleEntries.has(posInSet)) { newVisibleEntries.delete(posInSet); hasChanged = true; } }); return hasChanged ? Array.from(newVisibleEntries).sort() : prev; }); }, [setVisibleEntries] ); (0, import_element112.useLayoutEffect)(() => { const container = containerRef.current; const anchor = anchorElementRef.current; if (!container || !view.infiniteScrollEnabled || !anchor || isLoading) { return; } const anchorElement = container.querySelector( `[aria-posinset="${anchor.posinset}"]` ); if (anchorElement) { const containerRect = container.getBoundingClientRect(); const anchorRect = anchorElement.getBoundingClientRect(); const currentOffset = anchorRect.top - containerRect.top; const scrollAdjustment = currentOffset - anchor.viewportOffset; if (Math.abs(scrollAdjustment) > 1) { container.scrollTop += scrollAdjustment; } } anchorElementRef.current = null; }, [containerRef, isLoading, view.infiniteScrollEnabled]); const intersectionObserverRef = (0, import_element112.useRef)( null ); (0, import_element112.useEffect)(() => { if (!view.infiniteScrollEnabled || !intersectionObserverCallback) { if (intersectionObserverRef.current) { intersectionObserverRef.current.disconnect(); intersectionObserverRef.current = null; } return; } intersectionObserverRef.current = new IntersectionObserver( intersectionObserverCallback, { root: null, rootMargin: "0px", threshold: 0.1 } ); return () => { if (intersectionObserverRef.current) { intersectionObserverRef.current.disconnect(); intersectionObserverRef.current = null; } }; }, [view.infiniteScrollEnabled, intersectionObserverCallback]); (0, import_element112.useEffect)(() => { if (!view.infiniteScrollEnabled || !containerRef.current) { return; } let lastScrollTop = 0; const BOTTOM_THRESHOLD = 600; const TOP_THRESHOLD = 800; const handleScroll = (0, import_compose12.throttle)((event) => { const currentView = viewRef.current; const totalItems = totalItemsRef.current; const target = event.target; const scrollTop = target.scrollTop; const scrollHeight = target.scrollHeight; const clientHeight = target.clientHeight; const scrollDirection = scrollTop > lastScrollTop ? "down" : "up"; lastScrollTop = scrollTop; if (isLoadingRef.current) { return; } const currentStartPosition = currentView.startPosition || 1; const batchSize = currentView.perPage || 10; const currentEndPosition = Math.min( currentStartPosition + batchSize, totalItems ); if (scrollDirection === "down" && scrollTop + clientHeight >= scrollHeight - BOTTOM_THRESHOLD) { if (currentEndPosition < totalItems) { const newStartPosition = currentEndPosition; captureAnchorElement(target, anchorElementRef, "down"); onChangeViewRef.current({ ...currentView, startPosition: newStartPosition }); } } if (scrollDirection === "up" && scrollTop <= TOP_THRESHOLD) { if (currentStartPosition > 1) { const calculatedStartPosition = currentStartPosition - batchSize; const newStartPosition = calculatedStartPosition < 6 ? 1 : calculatedStartPosition; captureAnchorElement(target, anchorElementRef, "up"); onChangeViewRef.current({ ...currentView, startPosition: newStartPosition }); } } }, 50); const container = containerRef.current; container.addEventListener("scroll", handleScroll); return () => { container.removeEventListener("scroll", handleScroll); handleScroll.cancel(); }; }, [containerRef, view.infiniteScrollEnabled]); return { intersectionObserver: intersectionObserverRef.current }; } // packages/dataviews/build-module/dataviews/index.mjs var import_jsx_runtime170 = __toESM(require_jsx_runtime(), 1); var defaultGetItemId = (item) => item.id; var defaultIsItemClickable = () => true; var EMPTY_ARRAY6 = []; var DEFAULT_LAYOUTS = { table: {}, grid: {}, list: {} }; var dataViewsLayouts = VIEW_LAYOUTS.filter( (viewLayout) => !viewLayout.isPicker ); function DefaultUI({ header, search = true, searchLabel = void 0 }) { const { view } = (0, import_element113.useContext)(dataviews_context_default); const isInfiniteScroll = view.infiniteScrollEnabled; return /* @__PURE__ */ (0, import_jsx_runtime170.jsxs)(import_jsx_runtime170.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime170.jsxs)( Stack, { direction: "row", align: "top", justify: "space-between", className: clsx_default("dataviews__view-actions", { "dataviews__view-actions--infinite-scroll": isInfiniteScroll }), gap: "xs", children: [ /* @__PURE__ */ (0, import_jsx_runtime170.jsxs)( Stack, { direction: "row", justify: "start", gap: "sm", className: "dataviews__search", children: [ search && /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(dataviews_search_default, { label: searchLabel }), /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(toggle_default, {}) ] } ), /* @__PURE__ */ (0, import_jsx_runtime170.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(dataviews_view_config_default, {}), header ] }) ] } ), /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(DataViewsLayout, {}), /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(DataViewsFooter, {}) ] }); } function DataViews({ view, onChangeView, fields, search = true, searchLabel = void 0, actions = EMPTY_ARRAY6, data, getItemId = defaultGetItemId, getItemLevel, isLoading = false, paginationInfo, defaultLayouts: defaultLayoutsProperty = DEFAULT_LAYOUTS, selection: selectionProperty, onChangeSelection, onClickItem, renderItemLink, isItemClickable = defaultIsItemClickable, header, children, config = { perPageSizes: [10, 20, 50, 100] }, empty, onReset }) { const [selectionState, setSelectionState] = (0, import_element113.useState)([]); const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0; const selection = isUncontrolled ? selectionState : selectionProperty; const { data: displayData, paginationInfo: displayPaginationInfo, hasInitiallyLoaded, setVisibleEntries } = useData({ view, data, getItemId, isLoading, selection, paginationInfo }); const containerRef = (0, import_element113.useRef)(null); const [containerWidth, setContainerWidth] = (0, import_element113.useState)(0); const resizeObserverRef = (0, import_compose13.useResizeObserver)( (resizeObserverEntries) => { setContainerWidth( resizeObserverEntries[0].borderBoxSize[0].inlineSize ); }, { box: "border-box" } ); const [openedFilter, setOpenedFilter] = (0, import_element113.useState)(null); function setSelectionWithChange(value) { const newValue = typeof value === "function" ? value(selection) : value; if (isUncontrolled) { setSelectionState(newValue); } if (onChangeSelection) { onChangeSelection(newValue); } } const _fields = (0, import_element113.useMemo)(() => normalizeFields(fields), [fields]); const _selection = (0, import_element113.useMemo)(() => { if (view.infiniteScrollEnabled) { return selection; } return selection.filter( (id) => data.some((item) => getItemId(item) === id) ); }, [selection, data, getItemId, view.infiniteScrollEnabled]); const filters = use_filters_default(_fields, view); const hasPrimaryOrLockedFilters = (0, import_element113.useMemo)( () => (filters || []).some( (filter) => filter.isPrimary || filter.isLocked ), [filters] ); const [isShowingFilter, setIsShowingFilter] = (0, import_element113.useState)( hasPrimaryOrLockedFilters ); const { intersectionObserver } = useInfiniteScroll({ view, onChangeView, isLoading, paginationInfo, containerRef, setVisibleEntries }); (0, import_element113.useEffect)(() => { if (hasPrimaryOrLockedFilters && !isShowingFilter) { setIsShowingFilter(true); } }, [hasPrimaryOrLockedFilters, isShowingFilter]); const defaultLayouts = (0, import_element113.useMemo)( () => Object.fromEntries( Object.entries(defaultLayoutsProperty).filter(([layoutType]) => { return dataViewsLayouts.some( (viewLayout) => viewLayout.type === layoutType ); }).map(([key, value]) => [ key, value === true ? {} : value ]) ), [defaultLayoutsProperty] ); if (!defaultLayouts[view.type]) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime170.jsx)( dataviews_context_default.Provider, { value: { view, onChangeView, fields: _fields, actions, data: displayData, isLoading, paginationInfo: displayPaginationInfo, selection: _selection, onChangeSelection: setSelectionWithChange, openedFilter, setOpenedFilter, getItemId, getItemLevel, isItemClickable, onClickItem, renderItemLink, containerWidth, containerRef, resizeObserverRef, defaultLayouts, filters, isShowingFilter, setIsShowingFilter, config, empty, hasInitiallyLoaded, onReset, intersectionObserver }, children: /* @__PURE__ */ (0, import_jsx_runtime170.jsx)("div", { className: "dataviews-wrapper", children: children ?? /* @__PURE__ */ (0, import_jsx_runtime170.jsx)( DefaultUI, { header, search, searchLabel } ) }) } ); } var DataViewsSubComponents = DataViews; DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter; DataViewsSubComponents.Filters = filters_default; DataViewsSubComponents.FiltersToggled = filters_toggled_default; DataViewsSubComponents.FiltersToggle = toggle_default; DataViewsSubComponents.Layout = DataViewsLayout; DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu; DataViewsSubComponents.Pagination = DataViewsPagination; DataViewsSubComponents.Search = dataviews_search_default; DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown; DataViewsSubComponents.Footer = DataViewsFooter; var dataviews_default = DataViewsSubComponents; // widgets/events/components/events-list/events-list.tsx var import_date10 = __toESM(require_date()); var import_element114 = __toESM(require_element()); var import_i18n48 = __toESM(require_i18n()); // packages/style-runtime/src/index.ts var STYLE_HASH_ATTRIBUTE32 = "data-wp-hash"; function getRuntime32() { const globalScope = globalThis; if (globalScope.__wpStyleRuntime) { return globalScope.__wpStyleRuntime; } globalScope.__wpStyleRuntime = { documents: /* @__PURE__ */ new Map(), styles: /* @__PURE__ */ new Map(), injectedStyles: /* @__PURE__ */ new WeakMap() }; if (typeof document !== "undefined") { registerDocument32(document); } return globalScope.__wpStyleRuntime; } function documentContainsStyleHash32(targetDocument, hash) { if (!targetDocument.head) { return false; } for (const style of targetDocument.head.querySelectorAll( `style[${STYLE_HASH_ATTRIBUTE32}]` )) { if (style.getAttribute(STYLE_HASH_ATTRIBUTE32) === hash) { return true; } } return false; } function injectStyle32(targetDocument, hash, css) { if (!targetDocument.head) { return; } const runtime = getRuntime32(); let injectedStyles = runtime.injectedStyles.get(targetDocument); if (!injectedStyles) { injectedStyles = /* @__PURE__ */ new Set(); runtime.injectedStyles.set(targetDocument, injectedStyles); } if (injectedStyles.has(hash)) { return; } if (documentContainsStyleHash32(targetDocument, hash)) { injectedStyles.add(hash); return; } const style = targetDocument.createElement("style"); style.setAttribute(STYLE_HASH_ATTRIBUTE32, hash); style.appendChild(targetDocument.createTextNode(css)); targetDocument.head.appendChild(style); injectedStyles.add(hash); } function registerDocument32(targetDocument) { const runtime = getRuntime32(); runtime.documents.set( targetDocument, (runtime.documents.get(targetDocument) ?? 0) + 1 ); for (const [hash, css] of runtime.styles) { injectStyle32(targetDocument, hash, css); } return () => { const count = runtime.documents.get(targetDocument); if (count === void 0) { return; } if (count <= 1) { runtime.documents.delete(targetDocument); return; } runtime.documents.set(targetDocument, count - 1); }; } function registerStyle32(hash, css) { const runtime = getRuntime32(); runtime.styles.set(hash, css); for (const targetDocument of runtime.documents.keys()) { injectStyle32(targetDocument, hash, css); } } // widgets/events/components/events-list/events-list.module.css if (typeof process === "undefined" || true) { registerStyle32("333cf105cc", ".b193ea4f98c12441__listArea,.fae84950ff6b687a__root{flex:1;min-height:0;min-width:0;overflow:hidden}.f2470afe387696bb__eventIcon{background-color:var(--wpds-color-background-track-neutral-weak,#f0f0f0);color:var(--wpds-color-foreground-content-neutral-weak,#707070);height:100%}.e97858c521f8ff5d__titleLink{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._767c9a42070266bb__meta{color:var(--wpds-color-foreground-content-neutral-weak,#707070)}.a8c460f12aae4f63__emptyState{margin-block:var(--wpds-dimension-padding-2xl,24px)}.b0e50a045a1f92c2__eventNone{color:var(--wpds-color-foreground-content-neutral-weak,#707070);flex-shrink:0;padding-block:var(--wpds-dimension-padding-md,12px);padding-inline:var(--wpds-dimension-padding-2xl,24px)}"); } var events_list_default = { "root": "fae84950ff6b687a__root", "listArea": "b193ea4f98c12441__listArea", "eventIcon": "f2470afe387696bb__eventIcon", "titleLink": "e97858c521f8ff5d__titleLink", "meta": "_767c9a42070266bb__meta", "emptyState": "a8c460f12aae4f63__emptyState", "eventNone": "b0e50a045a1f92c2__eventNone" }; // widgets/events/components/events-list/events-list.tsx var import_jsx_runtime171 = __toESM(require_jsx_runtime()); var DEFAULT_LAYOUTS2 = { list: {} }; var INITIAL_VIEW = { type: "list", page: 1, perPage: 5, search: "", filters: [], fields: [], titleField: "title", descriptionField: "description", mediaField: "icon", showMedia: true, layout: { density: "compact" } }; function formatEventType(type) { if (type === "wordcamp") { return "WordCamp"; } if (type === "meetup") { return (0, import_i18n48.__)("Meetup"); } return type.charAt(0).toUpperCase() + type.slice(1); } function getFlippedTimeZoneOffset(startTimestamp) { return new Date(startTimestamp).getTimezoneOffset() * -1; } function getTimeZone(startTimestamp) { const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; if (typeof timeZone === "undefined") { return getFlippedTimeZoneOffset(startTimestamp); } return timeZone; } function getFormattedDate(startDate, endDate, timeZone) { let formattedDate; const singleDayEvent = (0, import_i18n48.__)("l, M j, Y"); const multipleDayEvent = (0, import_i18n48.__)("%1$s %2$d\u2013%3$d, %4$d"); const multipleMonthEvent = (0, import_i18n48.__)("%1$s %2$d \u2013 %3$s %4$d, %5$d"); if (!endDate || (0, import_date10.format)("Y-m-d", startDate) === (0, import_date10.format)("Y-m-d", endDate)) { formattedDate = (0, import_date10.dateI18n)(singleDayEvent, startDate, timeZone); } else if ((0, import_date10.format)("Y-m", startDate) === (0, import_date10.format)("Y-m", endDate)) { formattedDate = (0, import_i18n48.sprintf)( multipleDayEvent, (0, import_date10.dateI18n)( (0, import_i18n48._x)("F", "upcoming events month format"), startDate, timeZone ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("j", "upcoming events day format"), startDate, timeZone ) ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("j", "upcoming events day format"), endDate, timeZone ) ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("Y", "upcoming events year format"), endDate, timeZone ) ) ); } else { formattedDate = (0, import_i18n48.sprintf)( multipleMonthEvent, (0, import_date10.dateI18n)( (0, import_i18n48._x)("F", "upcoming events month format"), startDate, timeZone ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("j", "upcoming events day format"), startDate, timeZone ) ), (0, import_date10.dateI18n)( (0, import_i18n48._x)("F", "upcoming events month format"), endDate, timeZone ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("j", "upcoming events day format"), endDate, timeZone ) ), Number( (0, import_date10.dateI18n)( (0, import_i18n48._x)("Y", "upcoming events year format"), endDate, timeZone ) ) ); } return formattedDate; } function toEventListItem(event) { const startDate = event.start_unix_timestamp ? event.start_unix_timestamp * 1e3 : Date.parse(event.date); const endDate = event.end_unix_timestamp ? event.end_unix_timestamp * 1e3 : void 0; const timeZone = getTimeZone(startDate); const formattedDate = Number.isNaN(startDate) ? event.user_formatted_date || (0, import_date10.dateI18n)("M j, Y", event.date) : getFormattedDate(startDate, endDate, timeZone); const meta = [ event.type !== "online" ? formatEventType(event.type) : null, event.location.description, formattedDate, event.user_formatted_time ].filter(Boolean); return { id: event.url, title: event.title, url: event.url, type: event.type, description: meta.join(" \xB7 "), iconType: event.type === "wordcamp" ? "wordcamp" : "default" }; } function EventIcon({ item }) { return /* @__PURE__ */ (0, import_jsx_runtime171.jsx)( Stack, { className: events_list_default.eventIcon, direction: "column", align: "center", justify: "center", children: /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Icon, { icon: item.iconType === "wordcamp" ? wordpress_default : people_default }) } ); } function EventTitle({ item }) { return /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Link, { href: item.url, openInNewTab: true, className: events_list_default.titleLink, children: item.title }); } function EventMeta({ item }) { return /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Text, { variant: "body-sm", className: events_list_default.meta, children: item.description }); } function EventsList({ events, showEmptyState, location, isLoading = false }) { const [view, setView] = (0, import_element114.useState)(INITIAL_VIEW); const items = (0, import_element114.useMemo)(() => events.map(toEventListItem), [events]); const fields = (0, import_element114.useMemo)( () => [ { id: "title", label: (0, import_i18n48.__)("Title"), enableSorting: false, enableHiding: false, render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(EventTitle, { item }) }, { id: "description", label: (0, import_i18n48.__)("Details"), enableSorting: false, enableHiding: false, render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(EventMeta, { item }) }, { id: "icon", label: (0, import_i18n48.__)("Type"), enableSorting: false, enableHiding: false, render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(EventIcon, { item }) } ], [] ); const organizeUrl = (0, import_i18n48.__)( "https://make.wordpress.org/community/organize-event-landing-page/" ); const locationLabel = location?.trim(); const emptyTitle = () => { if (locationLabel) { return (0, import_i18n48.sprintf)((0, import_i18n48.__)("No events near %s"), locationLabel); } return (0, import_i18n48.__)("No events near you"); }; const empty = showEmptyState ? /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Stack, { align: "center", justify: "center", className: events_list_default.emptyState, children: /* @__PURE__ */ (0, import_jsx_runtime171.jsxs)(empty_state_exports.Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(empty_state_exports.Icon, { icon: calendar_default }), /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(empty_state_exports.Title, { children: emptyTitle() }), /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(empty_state_exports.Description, { children: (0, import_element114.createInterpolateElement)( (0, import_i18n48.__)("<a>Help organize the next one!</a>"), { a: /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Link, { href: organizeUrl, openInNewTab: true }) } ) }) ] }) }) : void 0; return /* @__PURE__ */ (0, import_jsx_runtime171.jsxs)(Stack, { className: events_list_default.root, direction: "column", children: [ /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Stack, { className: events_list_default.listArea, direction: "column", children: /* @__PURE__ */ (0, import_jsx_runtime171.jsx)( dataviews_default, { data: items, fields, view, onChangeView: setView, getItemId: (item) => item.id, isLoading, paginationInfo: { totalItems: items.length, totalPages: 1 }, defaultLayouts: DEFAULT_LAYOUTS2, empty, children: /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(dataviews_default.Layout, {}) } ) }), events.length > 0 && events.length <= 2 && /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Text, { variant: "body-sm", className: events_list_default.eventNone, children: (0, import_element114.createInterpolateElement)( (0, import_i18n48.__)( "Want more events? <a>Help organize the next one!</a>" ), { a: /* @__PURE__ */ (0, import_jsx_runtime171.jsx)(Link, { href: organizeUrl, openInNewTab: true }) } ) }) ] }); } // widgets/events/components/location-setting-control/location-setting-control.tsx var import_element116 = __toESM(require_element()); // widgets/events/components/location-picker/location-picker.tsx var import_element115 = __toESM(require_element()); var import_i18n49 = __toESM(require_i18n()); // widgets/events/components/location-picker/location-picker.module.css if (typeof process === "undefined" || true) { registerStyle32("278b6f4aa5", "._6c0e74a3d3d754d1__locationInput{flex:1;min-inline-size:120px}"); } var location_picker_default = { "locationInput": "_6c0e74a3d3d754d1__locationInput" }; // widgets/events/components/location-picker/location-picker.tsx var import_jsx_runtime172 = __toESM(require_jsx_runtime()); var DRAFT_DEBOUNCE_MS = 300; function LocationPicker({ onSubmit = () => { }, seedInput = "", hideLabelFromVision = true, selectButton = true, onChange }) { const locationInputId = (0, import_element115.useId)(); const [locationInput, setLocationInput] = (0, import_element115.useState)(seedInput); const [locationOptions, setLocationOptions] = (0, import_element115.useState)([]); const [isLocatingCity, setIsLocatingCity] = (0, import_element115.useState)(false); const draftTimeoutRef = (0, import_element115.useRef)( null ); (0, import_element115.useEffect)(() => { if (!selectButton || seedInput) { setLocationInput(seedInput); } }, [selectButton, seedInput]); const clearDraftTimeout = (0, import_element115.useCallback)(() => { if (draftTimeoutRef.current) { clearTimeout(draftTimeoutRef.current); draftTimeoutRef.current = null; } }, []); const tryPublishDraft = (0, import_element115.useCallback)(() => { if (selectButton || !onChange) { return; } const draft = locationInput.trim(); const saved = seedInput.trim(); if (draft === saved) { return; } onChange(locationInput); }, [selectButton, locationInput, onChange, seedInput]); const scheduleDraftPublish = (0, import_element115.useCallback)(() => { if (selectButton || !onChange) { return; } clearDraftTimeout(); draftTimeoutRef.current = setTimeout(() => { draftTimeoutRef.current = null; tryPublishDraft(); }, DRAFT_DEBOUNCE_MS); }, [clearDraftTimeout, selectButton, onChange, tryPublishDraft]); (0, import_element115.useEffect)(() => { if (selectButton || !onChange) { clearDraftTimeout(); return; } scheduleDraftPublish(); return clearDraftTimeout; }, [clearDraftTimeout, selectButton, onChange, scheduleDraftPublish]); const flushDraftPublish = (0, import_element115.useCallback)(() => { clearDraftTimeout(); tryPublishDraft(); }, [clearDraftTimeout, tryPublishDraft]); const fillCityFromGeolocation = async () => { if (!navigator.geolocation || isLocatingCity) { return; } setIsLocatingCity(true); try { const position = await new Promise( (resolve, reject) => { navigator.geolocation.getCurrentPosition(resolve, reject, { enableHighAccuracy: false, timeout: 1e4 }); } ); const { latitude, longitude } = position.coords; const response = await fetch( `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${latitude}&lon=${longitude}` ); const data = await response.json(); const city = data.address?.city ?? data.address?.town ?? data.address?.village ?? data.address?.municipality; if (city) { setLocationInput(city); } } catch { } finally { setIsLocatingCity(false); } }; (0, import_element115.useEffect)(() => { const query = locationInput.trim(); if (query.length < 2) { setLocationOptions([]); return; } const controller = new AbortController(); const timeoutId = setTimeout(async () => { try { const params = new URLSearchParams({ q: query, featureType: "city", format: "jsonv2", addressdetails: "1", limit: "8" }); const response = await fetch( `https://nominatim.openstreetmap.org/search?${params}`, { signal: controller.signal } ); const data = await response.json(); const seen = /* @__PURE__ */ new Set(); const nextOptions = data.map((place) => { const city = place.address?.city ?? place.address?.town ?? place.address?.village ?? place.address?.municipality; const country = place.address?.country; if (!city) { return null; } const label = country ? `${city}, ${country}` : city; if (seen.has(label.toLowerCase())) { return null; } seen.add(label.toLowerCase()); return { id: String(place.place_id), value: label }; }).filter(Boolean); setLocationOptions(nextOptions); } catch (error2) { if (error2 instanceof Error && error2.name === "AbortError") { return; } setLocationOptions([]); } }, 200); return () => { clearTimeout(timeoutId); controller.abort(); }; }, [locationInput]); return /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( "form", { onSubmit: (e2) => { e2.preventDefault(); if (selectButton) { onSubmit(locationInput); } }, children: /* @__PURE__ */ (0, import_jsx_runtime172.jsxs)(Stack, { direction: "row", align: "start", wrap: "wrap", gap: "sm", children: [ /* @__PURE__ */ (0, import_jsx_runtime172.jsxs)( autocomplete_exports.Root, { items: locationOptions, value: locationInput, onValueChange: setLocationInput, children: [ /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( autocomplete_exports.Input, { id: locationInputId, className: location_picker_default.locationInput, render: /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( InputControl, { autoComplete: "off", label: (0, import_i18n49.__)("City"), hideLabelFromVision, size: "compact", description: (0, import_i18n49.__)( "Select a city to view upcoming events." ), onValueChange: () => { }, onBlur: !selectButton ? flushDraftPublish : void 0, suffix: /* @__PURE__ */ (0, import_jsx_runtime172.jsxs)(InputLayout3.Slot, { padding: "minimal", children: [ /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(autocomplete_exports.Clear, {}), /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( IconButton, { icon: map_marker_default, label: (0, import_i18n49.__)( "Use current location" ), onClick: fillCityFromGeolocation, disabled: isLocatingCity, size: "small", variant: "minimal" } ) ] }) } ), placeholder: (0, import_i18n49.__)("City, like Tokyo\u2026") } ), locationOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(autocomplete_exports.Popup, { children: /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(autocomplete_exports.List, { children: /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(autocomplete_exports.ListBody, { children: /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(autocomplete_exports.Collection, { children: (item) => /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( autocomplete_exports.Item, { value: item, children: item.value }, item.id ) }) }) }) }) ] } ), selectButton && /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( Button4, { variant: "outline", size: "compact", type: "submit", disabled: !locationInput.trim(), children: (0, import_i18n49.__)("Select") } ) ] }) } ); } // widgets/events/components/location-setting-control/location-setting-control.tsx var import_jsx_runtime173 = __toESM(require_jsx_runtime()); // widgets/events/style.module.css if (typeof process === "undefined" || true) { registerStyle32("476db0671a", "._8eae235c5e84e11a__container{block-size:100%;min-height:200px}.a8467f8a7e71416b__locationPickerInWidget{flex-grow:1;padding:var(--wpds-dimension-padding-2xl,24px)}.dc172eb76cf854ff__footer{border-block-start:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);padding-block:var(--wpds-dimension-padding-lg,16px);padding-inline:var(--wpds-dimension-padding-2xl,24px)}.ade19735a03e752d__footerLocation{margin-inline-start:auto}._424d657e76911af4__locationSummary,._8035a0c4b6216adf__statusText{color:var(--wpds-color-foreground-content-neutral-weak,#707070)}._8035a0c4b6216adf__statusText{margin:0;padding-inline:var(--wpds-dimension-padding-2xl,24px)}"); } var style_default20 = { "container": "_8eae235c5e84e11a__container", "locationPickerInWidget": "a8467f8a7e71416b__locationPickerInWidget", "footer": "dc172eb76cf854ff__footer", "footerLocation": "ade19735a03e752d__footerLocation", "locationSummary": "_424d657e76911af4__locationSummary", "statusText": "_8035a0c4b6216adf__statusText" }; // widgets/events/render.tsx var import_jsx_runtime174 = __toESM(require_jsx_runtime()); var EVENTS_API = "https://api.wordpress.org/events/1.0/"; function EventsListSection({ events, loading, error: error2, showEmptyState, location }) { if (error2) { return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("p", { className: style_default20.statusText, children: (0, import_i18n50.__)("An error occurred. Please try again.") }); } return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( EventsList, { events, showEmptyState, location, isLoading: loading } ); } function WordPressEvents({ attributes = {}, setAttributes }) { const userLocale = (0, import_data6.useSelect)( (select) => select(import_core_data.store).getCurrentUser()?.locale ?? "en_US", [] ); const persistedLocation = typeof attributes.location === "string" ? attributes.location.trim() : ""; const [activeLocation, setActiveLocation] = (0, import_element117.useState)(persistedLocation); const [locationLabel, setLocationLabel] = (0, import_element117.useState)(""); (0, import_element117.useEffect)(() => { setActiveLocation(persistedLocation); }, [persistedLocation]); const [events, setEvents] = (0, import_element117.useState)([]); const [eventsLoading, setEventsLoading] = (0, import_element117.useState)(false); const [eventsError, setEventsError] = (0, import_element117.useState)(false); const hasSelectedLocation = Boolean(activeLocation.trim()); (0, import_element117.useEffect)(() => { if (!hasSelectedLocation) { setLocationLabel(""); return; } const controller = new AbortController(); setEventsLoading(true); setEventsError(false); setLocationLabel(""); const params = new URLSearchParams({ number: "5", locale: userLocale, location: activeLocation }); fetch(`${EVENTS_API}?${params}`, { signal: controller.signal }).then((r3) => r3.json()).then((data) => { setEvents(data.events ?? []); if (data.location?.description) { setLocationLabel(data.location.description); } setEventsLoading(false); }).catch((err) => { if (err.name !== "AbortError") { setEventsError(true); setEventsLoading(false); } }); return () => controller.abort(); }, [activeLocation, hasSelectedLocation, userLocale]); return /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)( Stack, { direction: "column", justify: "space-between", className: style_default20.container, children: [ !hasSelectedLocation && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Stack, { className: style_default20.locationPickerInWidget, direction: "column", align: "center", justify: "center", children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( LocationPicker, { onSubmit: (location) => { const next = location.trim(); setActiveLocation(next); setAttributes?.({ location: next }); }, seedInput: activeLocation, hideLabelFromVision: true } ) } ), hasSelectedLocation && eventsLoading && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Stack, { className: style_default20.locationPickerInWidget, direction: "column", align: "center", justify: "center", children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(import_components46.Spinner, {}) } ), hasSelectedLocation && !eventsLoading && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( EventsListSection, { events, loading: eventsLoading, error: eventsError, showEmptyState: true, location: locationLabel || activeLocation } ), /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("div", { className: style_default20.footer, children: /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(Stack, { direction: "row", align: "center", gap: "sm", wrap: "wrap", children: [ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Link, { href: "https://make.wordpress.org/community/meetups-landing-page", openInNewTab: true, children: (0, import_i18n50.__)("Meetups") } ), /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Link, { href: "https://central.wordcamp.org/schedule/", openInNewTab: true, children: (0, import_i18n50.__)("WordCamps") } ), locationLabel && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("div", { className: style_default20.footerLocation, children: /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(tooltip_exports.Root, { children: [ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( tooltip_exports.Trigger, { "aria-label": (0, import_i18n50.__)("Change from settings."), render: /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)( Stack, { direction: "row", align: "center", gap: "xs", children: [ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Icon, { icon: map_marker_default, size: 16 } ), /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( Text, { variant: "body-sm", className: style_default20.locationSummary, children: locationLabel } ) ] } ) } ), /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(tooltip_exports.Popup, { children: (0, import_i18n50.__)("Change from settings.") }) ] }) }) ] }) }) ] } ); } export { WordPressEvents as default }; /*! Bundled license information: use-sync-external-store/cjs/use-sync-external-store-shim.development.js: (** * @license React * use-sync-external-store-shim.development.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: (** * @license React * use-sync-external-store-shim/with-selector.development.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) */
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium171.web-hosting.com
Server IP: 162.0.209.115
PHP Version: 8.0.30
Server Software: LiteSpeed
System: Linux premium171.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 71.28 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: aircyknj
User ID (UID): 2056
Group ID (GID): 2052
Script Owner UID: 2056
Current Dir Owner: 2056