Initial commit with files

Still need to fix the imports
This commit is contained in:
Ryan Gossiaux
2021-12-13 17:13:47 -08:00
parent 42aba8a158
commit db9ec57065
56 changed files with 4034 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
<script lang="ts" context="module">
export interface PopoverGroupContext {
registerPopover(registerbag: PopoverRegisterBag): void;
unregisterPopover(registerbag: PopoverRegisterBag): void;
isFocusWithinPopoverGroup(): boolean;
closeOthers(buttonId: string): void;
}
</script>
<script lang="ts">
import { PopoverRegisterBag } from "./Popover.svelte";
import { setContext } from "svelte";
let groupRef: HTMLDivElement | undefined;
let popovers: PopoverRegisterBag[] = [];
function unregisterPopover(registerBag: PopoverRegisterBag) {
popovers = popovers.filter((bag) => bag != registerBag);
}
function registerPopover(registerBag: PopoverRegisterBag) {
popovers = [...popovers, registerBag];
return () => {
unregisterPopover(registerBag);
};
}
function isFocusWithinPopoverGroup() {
let element = document.activeElement as HTMLElement;
if (groupRef?.contains(element)) return true;
// Check if the focus is in one of the button or panel elements. This is important in case you are rendering inside a Portal.
return popovers.some((bag) => {
return (
document.getElementById(bag.buttonId)?.contains(element) ||
document.getElementById(bag.panelId)?.contains(element)
);
});
}
function closeOthers(buttonId: string) {
for (let popover of popovers) {
if (popover.buttonId !== buttonId) popover.close();
}
}
setContext("PopoverGroup", {
unregisterPopover,
registerPopover,
isFocusWithinPopoverGroup,
closeOthers,
});
</script>
<div {...$$restProps} bind:this={groupRef}>
<slot />
</div>