Initial commit

This commit is contained in:
2025-03-07 19:22:02 +01:00
commit 4a98255d83
55743 changed files with 5280367 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
MENU_ENTER_EVENT: function() {
return _useOnMenuEnter.MENU_ENTER_EVENT;
},
dispatchMenuEnterEvent: function() {
return _useOnMenuEnter.dispatchMenuEnterEvent;
},
useOnMenuMouseEnter: function() {
return _useOnMenuEnter.useOnMenuMouseEnter;
}
});
const _useOnMenuEnter = require("./useOnMenuEnter");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["export { MENU_ENTER_EVENT, dispatchMenuEnterEvent, useOnMenuMouseEnter } from './useOnMenuEnter';\n"],"names":["MENU_ENTER_EVENT","dispatchMenuEnterEvent","useOnMenuMouseEnter"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAASA,gBAAgB;eAAhBA,gCAAgB;;IAAEC,sBAAsB;eAAtBA,sCAAsB;;IAAEC,mBAAmB;eAAnBA,mCAAmB;;;gCAAQ"}
+18
View File
@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useIsSubmenu", {
enumerable: true,
get: function() {
return useIsSubmenu;
}
});
const _reactcontextselector = require("@fluentui/react-context-selector");
const _menuContext = require("../contexts/menuContext");
const _menuListContext = require("../contexts/menuListContext");
function useIsSubmenu() {
const menuContextValue = (0, _menuContext.useMenuContext_unstable)((context)=>context.isSubmenu);
const hasMenuListContext = (0, _reactcontextselector.useHasParentContext)(_menuListContext.MenuListContext);
return menuContextValue || hasMenuListContext;
}
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/useIsSubmenu.ts"],"sourcesContent":["import { useHasParentContext } from '@fluentui/react-context-selector';\nimport { useMenuContext_unstable } from '../contexts/menuContext';\nimport { MenuListContext } from '../contexts/menuListContext';\n\n/**\n * A component can be a part of a submenu whether its menu context `isSubmenu` flag is true\n * or whether it is a part of a `MenuList`\n *\n * A simple hook to check box contexts easily\n *\n * @returns whether the component is part of a submenu\n */\nexport function useIsSubmenu() {\n const menuContextValue = useMenuContext_unstable(context => context.isSubmenu);\n const hasMenuListContext = useHasParentContext(MenuListContext);\n\n return menuContextValue || hasMenuListContext;\n}\n"],"names":["useIsSubmenu","menuContextValue","useMenuContext_unstable","context","isSubmenu","hasMenuListContext","useHasParentContext","MenuListContext"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":";;;;+BAYgBA;;;eAAAA;;;sCAZoB;6BACI;iCACR;AAUzB,SAASA;IACd,MAAMC,mBAAmBC,IAAAA,oCAAAA,EAAwBC,CAAAA,UAAWA,QAAQC,SAAS;IAC7E,MAAMC,qBAAqBC,IAAAA,yCAAAA,EAAoBC,gCAAAA;IAE/C,OAAON,oBAAoBI;AAC7B"}
+65
View File
@@ -0,0 +1,65 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
MENU_ENTER_EVENT: function() {
return MENU_ENTER_EVENT;
},
dispatchMenuEnterEvent: function() {
return dispatchMenuEnterEvent;
},
useOnMenuMouseEnter: function() {
return useOnMenuMouseEnter;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const _reactutilities = require("@fluentui/react-utilities");
const MENU_ENTER_EVENT = 'fuimenuenter';
const useOnMenuMouseEnter = (options)=>{
const { refs, callback, element, disabled } = options;
// Keep mouse event here because this is essentially a custom 'mouseenter' event
const listener = (0, _reactutilities.useEventCallback)((ev)=>{
const popoverRef = refs[0];
const someMenuPopover = ev.target;
var _popoverRef_current;
// someMenu is a child -> will always be contained because of vParents
// someMenu is a parent -> will always not be contained because no vParent
// someMenu is the current popover -> it will contain itself
const isOutsidePopover = !(0, _reactutilities.elementContains)((_popoverRef_current = popoverRef.current) !== null && _popoverRef_current !== void 0 ? _popoverRef_current : null, someMenuPopover);
if (isOutsidePopover && !disabled) {
callback(ev);
}
});
_react.useEffect(()=>{
// eslint-disable-next-line eqeqeq
if (element == null) {
return;
}
if (!disabled) {
element.addEventListener(MENU_ENTER_EVENT, listener);
}
return ()=>{
element.removeEventListener(MENU_ENTER_EVENT, listener);
};
}, [
listener,
element,
disabled
]);
};
const dispatchMenuEnterEvent = (el, nativeEvent)=>{
el.dispatchEvent(new CustomEvent(MENU_ENTER_EVENT, {
bubbles: true,
detail: {
nativeEvent
}
}));
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/useOnMenuEnter.ts"],"sourcesContent":["import * as React from 'react';\nimport { useEventCallback, elementContains } from '@fluentui/react-utilities';\nimport type { UseOnClickOrScrollOutsideOptions } from '@fluentui/react-utilities';\n\n/**\n * Name of the custom event\n */\nexport const MENU_ENTER_EVENT = 'fuimenuenter';\n\n/**\n * This hook works similarly to @see useOnClickOutside\n *\n * Problem: Trying to behave the same as system menus:\n * When the mouse leaves a stack of nested menus the stack should not dismiss.\n * However if the mouse leaves a stack of menus and enters a parent menu all its children menu should dismiss.\n *\n * We don't use the native mouseenter event because it would trigger too many times in the document\n * Instead, dispatch custom DOM event from the menu so that it can bubble\n * Each nested menu can use the listener to check if the event is from a child or parent menu\n */\nexport const useOnMenuMouseEnter = (options: UseOnClickOrScrollOutsideOptions) => {\n const { refs, callback, element, disabled } = options;\n\n // Keep mouse event here because this is essentially a custom 'mouseenter' event\n const listener = useEventCallback((ev: MouseEvent) => {\n const popoverRef = refs[0];\n const someMenuPopover = ev.target as HTMLElement;\n\n // someMenu is a child -> will always be contained because of vParents\n // someMenu is a parent -> will always not be contained because no vParent\n // someMenu is the current popover -> it will contain itself\n const isOutsidePopover = !elementContains(popoverRef.current ?? null, someMenuPopover);\n if (isOutsidePopover && !disabled) {\n callback(ev);\n }\n });\n\n React.useEffect(() => {\n // eslint-disable-next-line eqeqeq\n if (element == null) {\n return;\n }\n\n /**\n * Because `addEventListener` type override falls back to 2nd definition (evt name is unknown string literal)\n * evt is being typed as a base class of MouseEvent -> `Event`.\n * This type is used to override `listener` calls to make TS happy\n */\n\n type ListenerOverride = (evt: Event) => void;\n\n if (!disabled) {\n element.addEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n }\n\n return () => {\n element.removeEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n };\n }, [listener, element, disabled]);\n};\n\n/**\n * Dispatches the custom MouseEvent enter event. Similar to calling `el.click()`\n * @param el - element for the event target\n * @param nativeEvent - the native mouse event this is mapped to\n */\nexport const dispatchMenuEnterEvent = (el: HTMLElement, nativeEvent: MouseEvent) => {\n el.dispatchEvent(new CustomEvent(MENU_ENTER_EVENT, { bubbles: true, detail: { nativeEvent } }));\n};\n"],"names":["MENU_ENTER_EVENT","dispatchMenuEnterEvent","useOnMenuMouseEnter","options","refs","callback","element","disabled","listener","useEventCallback","ev","popoverRef","someMenuPopover","target","isOutsidePopover","elementContains","current","React","useEffect","addEventListener","removeEventListener","el","nativeEvent","dispatchEvent","CustomEvent","bubbles","detail"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAOaA,gBAAAA;eAAAA;;IA2DAC,sBAAAA;eAAAA;;IA9CAC,mBAAAA;eAAAA;;;;iEApBU;gCAC2B;AAM3C,MAAMF,mBAAmB;AAazB,MAAME,sBAAsB,CAACC;IAClC,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGJ;IAE9C,gFAAgF;IAChF,MAAMK,WAAWC,IAAAA,gCAAAA,EAAiB,CAACC;QACjC,MAAMC,aAAaP,IAAI,CAAC,EAAE;QAC1B,MAAMQ,kBAAkBF,GAAGG,MAAM;YAKSF;QAH1C,sEAAsE;QACtE,0EAA0E;QAC1E,4DAA4D;QAC5D,MAAMG,mBAAmB,CAACC,IAAAA,+BAAAA,EAAgBJ,CAAAA,sBAAAA,WAAWK,OAAO,AAAPA,MAAO,QAAlBL,wBAAAA,KAAAA,IAAAA,sBAAsB,MAAMC;QACtE,IAAIE,oBAAoB,CAACP,UAAU;YACjCF,SAASK;QACX;IACF;IAEAO,OAAMC,SAAS,CAAC;QACd,kCAAkC;QAClC,IAAIZ,WAAW,MAAM;YACnB;QACF;QAUA,IAAI,CAACC,UAAU;YACbD,QAAQa,gBAAgB,CAACnB,kBAAkBQ;QAC7C;QAEA,OAAO;YACLF,QAAQc,mBAAmB,CAACpB,kBAAkBQ;QAChD;IACF,GAAG;QAACA;QAAUF;QAASC;KAAS;AAClC;AAOO,MAAMN,yBAAyB,CAACoB,IAAiBC;IACtDD,GAAGE,aAAa,CAAC,IAAIC,YAAYxB,kBAAkB;QAAEyB,SAAS;QAAMC,QAAQ;YAAEJ;QAAY;IAAE;AAC9F"}