Skip to content

Commit

Permalink
style: format
Browse files Browse the repository at this point in the history
  • Loading branch information
jer3m01 committed May 15, 2024
1 parent 16b5756 commit 44d1da6
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 63 deletions.
3 changes: 1 addition & 2 deletions packages/core/src/menubar/menubar-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import { ParentProps, createUniqueId, splitProps } from "solid-js";
import { MenuRoot, MenuRootOptions } from "../menu";
import { useMenubarContext } from "./menubar-context";

export interface MenubarMenuOptions extends MenuRootOptions {
}
export interface MenubarMenuOptions extends MenuRootOptions {}

export interface MenubarMenuProps extends ParentProps<MenubarMenuOptions> {}

Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/menubar/menubar-root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import {
} from "@kobalte/utils";
import {
Accessor,
Setter,
ValidComponent,
createEffect,
createMemo,
createSignal,
createUniqueId,
onCleanup,
splitProps,
Setter,
} from "solid-js";
import { isServer } from "solid-js/web";

Expand Down Expand Up @@ -113,7 +113,7 @@ export function MenubarRoot<T extends ValidComponent = "div">(
value: () => local.autoFocusMenu,
defaultValue: () => false,
onChange: local.onAutoFocusMenuChange,
})
});

const context: MenubarContextValue = {
dataset,
Expand Down
18 changes: 9 additions & 9 deletions packages/core/src/navigation-menu/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ import {
type SeparatorRootProps as NavigationMenuSeparatorProps,
type SeparatorRootRenderProps as NavigationMenuSeparatorRenderProps,
} from "../separator";
import {
NavigationMenuContent as Content,
type NavigationMenuContentCommonProps,
type NavigationMenuContentOptions,
type NavigationMenuContentProps,
type NavigationMenuContentRenderProps,
} from "./navigation-menu-content";
import {
NavigationMenuMenu as Menu,
type NavigationMenuMenuOptions,
Expand All @@ -93,18 +100,11 @@ import {
} from "./navigation-menu-root";
import {
NavigationMenuTrigger as Trigger,
type NavigationMenuTriggerOptions,
type NavigationMenuTriggerCommonProps,
type NavigationMenuTriggerRenderProps,
type NavigationMenuTriggerOptions,
type NavigationMenuTriggerProps,
type NavigationMenuTriggerRenderProps,
} from "./navigation-menu-trigger";
import {
NavigationMenuContent as Content,
type NavigationMenuContentCommonProps,
type NavigationMenuContentOptions,
type NavigationMenuContentProps,
type NavigationMenuContentRenderProps,
} from "./navigation-menu-content";

export type {
NavigationMenuRootOptions,
Expand Down
39 changes: 26 additions & 13 deletions packages/core/src/navigation-menu/navigation-menu-content.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
import { callHandler } from "@kobalte/utils";
import { Component, ValidComponent, splitProps, JSX } from "solid-js";
import { Component, JSX, ValidComponent, splitProps } from "solid-js";

import { MenuContent, MenuContentCommonProps, MenuContentOptions, MenuContentRenderProps } from "../menu";
import {
MenuContent,
MenuContentCommonProps,
MenuContentOptions,
MenuContentRenderProps,
} from "../menu";
import { useMenuContext } from "../menu/menu-context";
import { PolymorphicProps } from "../polymorphic";
import { useNavigationMenuContext } from "./navigation-menu-context";
import { useMenuContext } from "../menu/menu-context";
export interface NavigationMenuContentOptions extends MenuContentOptions {}

export interface NavigationMenuContentCommonProps extends MenuContentCommonProps {
export interface NavigationMenuContentCommonProps
extends MenuContentCommonProps {
onPointerEnter: JSX.EventHandlerUnion<HTMLElement, PointerEvent>;
onPointerLeave: JSX.EventHandlerUnion<HTMLElement, PointerEvent>;
}

export interface NavigationMenuContentRenderProps extends MenuContentRenderProps, NavigationMenuContentCommonProps {}
export interface NavigationMenuContentRenderProps
extends MenuContentRenderProps,
NavigationMenuContentCommonProps {}

export type NavigationMenuContentProps = NavigationMenuContentOptions &
Partial<NavigationMenuContentCommonProps>;
Expand All @@ -22,9 +30,12 @@ export function NavigationMenuContent<T extends ValidComponent = "div">(
) {
const context = useNavigationMenuContext();
const menuContext = useMenuContext();

const [local, others] = splitProps(props as NavigationMenuContentProps, ["onPointerEnter", "onPointerLeave"]);


const [local, others] = splitProps(props as NavigationMenuContentProps, [
"onPointerEnter",
"onPointerLeave",
]);

const onPointerEnter: JSX.EventHandlerUnion<HTMLElement, PointerEvent> = (
e,
) => {
Expand All @@ -37,18 +48,20 @@ export function NavigationMenuContent<T extends ValidComponent = "div">(
e,
) => {
callHandler(e, local.onPointerLeave);

context.startLeaveTimer();

menuContext.close(true);
};

return (
<MenuContent<
Component<Omit<NavigationMenuContentRenderProps, keyof MenuContentRenderProps>>
Component<
Omit<NavigationMenuContentRenderProps, keyof MenuContentRenderProps>
>
>
onPointerEnter={onPointerEnter}
onPointerLeave={onPointerLeave}
onPointerEnter={onPointerEnter}
onPointerLeave={onPointerLeave}
{...others}
/>
);
Expand Down
5 changes: 3 additions & 2 deletions packages/core/src/navigation-menu/navigation-menu-context.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Accessor, createContext, Setter, useContext } from "solid-js";
import { Accessor, Setter, createContext, useContext } from "solid-js";

export interface NavigationMenuContextValue {
delayDuration: Accessor<number>;
Expand All @@ -9,7 +9,8 @@ export interface NavigationMenuContextValue {
cancelLeaveTimer: () => void;
}

export const NavigationMenuContext = createContext<NavigationMenuContextValue>();
export const NavigationMenuContext =
createContext<NavigationMenuContextValue>();

export function useOptionalNavigationMenuContext() {
return useContext(NavigationMenuContext);
Expand Down
3 changes: 1 addition & 2 deletions packages/core/src/navigation-menu/navigation-menu-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import { MenubarMenuOptions, MenubarMenuProps } from "../menubar";
import { MenubarMenu } from "../menubar/menubar-menu";
import { useNavigationMenuContext } from "./navigation-menu-context";

export interface NavigationMenuMenuOptions extends MenubarMenuOptions {
}
export interface NavigationMenuMenuOptions extends MenubarMenuOptions {}

export interface NavigationMenuMenuProps extends MenubarMenuProps {}

Expand Down
51 changes: 34 additions & 17 deletions packages/core/src/navigation-menu/navigation-menu-root.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,41 @@
import { callHandler, mergeDefaultProps } from "@kobalte/utils";
import { ValidComponent, splitProps, Component, createSignal, JSX } from "solid-js";
import { MenubarRootCommonProps, MenubarRootOptions, MenubarRootRenderProps } from "../menubar";
import {
Component,
JSX,
ValidComponent,
createSignal,
splitProps,
} from "solid-js";
import {
MenubarRootCommonProps,
MenubarRootOptions,
MenubarRootRenderProps,
} from "../menubar";
import { MenubarRoot } from "../menubar/menubar-root";

import { PolymorphicProps } from "../polymorphic";
import { NavigationMenuContext, NavigationMenuContextValue } from "./navigation-menu-context";
import {
NavigationMenuContext,
NavigationMenuContextValue,
} from "./navigation-menu-context";

export interface NavigationMenuRootOptions extends MenubarRootOptions {
/**
* Delay before the menu opens on hover (default 200).
*/
* Delay before the menu opens on hover (default 200).
*/
delayDuration?: number;

/**
* Open immediately if hovered again within delay (default 300).
*/
* Open immediately if hovered again within delay (default 300).
*/
skipDelayDuration?: number;
}

export interface NavigationMenuRootCommonProps extends MenubarRootCommonProps {
}
export interface NavigationMenuRootCommonProps extends MenubarRootCommonProps {}

export interface NavigationMenuRootRenderProps extends NavigationMenuRootCommonProps, MenubarRootRenderProps {
}
export interface NavigationMenuRootRenderProps
extends NavigationMenuRootCommonProps,
MenubarRootRenderProps {}

export type NavigationMenuRootProps = NavigationMenuRootOptions &
Partial<NavigationMenuRootCommonProps>;
Expand All @@ -45,11 +58,11 @@ export function NavigationMenuRoot<T extends ValidComponent = "div">(
"delayDuration",
"skipDelayDuration",
]);

const [autoFocusMenu, setAutoFocusMenu] = createSignal(false);

let timeoutId: number | undefined;

const context: NavigationMenuContextValue = {
delayDuration: () => local.delayDuration,
skipDelayDuration: () => local.skipDelayDuration,
Expand All @@ -67,9 +80,13 @@ export function NavigationMenuRoot<T extends ValidComponent = "div">(

return (
<NavigationMenuContext.Provider value={context}>
<MenubarRoot<Component<Omit<NavigationMenuRootRenderProps, keyof MenubarRootRenderProps>>>
<MenubarRoot<
Component<
Omit<NavigationMenuRootRenderProps, keyof MenubarRootRenderProps>
>
>
autoFocusMenu={autoFocusMenu()}
onAutoFocusMenuChange={setAutoFocusMenu}
onAutoFocusMenuChange={setAutoFocusMenu}
{...others}
/>
</NavigationMenuContext.Provider>
Expand Down
47 changes: 31 additions & 16 deletions packages/core/src/navigation-menu/navigation-menu-trigger.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { callHandler } from "@kobalte/utils";
import { Component, JSX, splitProps, ValidComponent } from "solid-js";
import { Component, JSX, ValidComponent, splitProps } from "solid-js";

import {
MenuTrigger,
Expand All @@ -9,20 +9,21 @@ import {
MenuTriggerRenderProps,
} from "../menu";
import { useMenuContext, useOptionalMenuContext } from "../menu/menu-context";
import { useMenubarContext } from "../menubar/menubar-context";
import { PolymorphicProps } from "../polymorphic";
import { useNavigationMenuContext } from "./navigation-menu-context";
import { useMenubarContext } from "../menubar/menubar-context";

export interface NavigationMenuTriggerOptions extends MenuTriggerOptions {}

export interface NavigationMenuTriggerCommonProps extends MenuTriggerCommonProps {
export interface NavigationMenuTriggerCommonProps
extends MenuTriggerCommonProps {
onPointerEnter: JSX.EventHandlerUnion<HTMLElement, PointerEvent>;
onPointerLeave: JSX.EventHandlerUnion<HTMLElement, PointerEvent>;
}

export interface NavigationMenuTriggerRenderProps
extends NavigationMenuTriggerCommonProps, MenuTriggerRenderProps {
}
extends NavigationMenuTriggerCommonProps,
MenuTriggerRenderProps {}

export type NavigationMenuTriggerProps = NavigationMenuTriggerOptions &
Partial<NavigationMenuTriggerCommonProps>;
Expand All @@ -33,27 +34,30 @@ export type NavigationMenuTriggerProps = NavigationMenuTriggerOptions &
export function NavigationMenuTrigger<T extends ValidComponent = "button">(
props: PolymorphicProps<T, NavigationMenuTriggerProps>,
) {
const context = useNavigationMenuContext();\
const context = useNavigationMenuContext();
const menuContext = useMenuContext();

const [local, others] = splitProps(props as NavigationMenuTriggerProps, ["onPointerEnter", "onPointerLeave", "onClick"]);


const [local, others] = splitProps(props as NavigationMenuTriggerProps, [
"onPointerEnter",
"onPointerLeave",
"onClick",
]);

let timeoutId: number | undefined;

const onClick: JSX.EventHandlerUnion<HTMLElement, MouseEvent> = (e) => {
callHandler(e, local.onClick);

if (timeoutId) clearTimeout(timeoutId);
};



const onPointerEnter: JSX.EventHandlerUnion<HTMLElement, PointerEvent> = (
e,
) => {
callHandler(e, local.onPointerEnter);

context.cancelLeaveTimer();

timeoutId = window.setTimeout(() => {
menuContext.open(true);
context.setAutoFocusMenu(true);
Expand All @@ -64,10 +68,21 @@ export function NavigationMenuTrigger<T extends ValidComponent = "button">(
e,
) => {
callHandler(e, local.onPointerLeave);

context.startLeaveTimer();
if (timeoutId) clearTimeout(timeoutId);
};

return <MenuTrigger<Component<Omit<NavigationMenuTriggerRenderProps, keyof MenuTriggerRenderProps>>> onClick={onClick} onPointerEnter={onPointerEnter} onPointerLeave={onPointerLeave} {...others} />;
return (
<MenuTrigger<
Component<
Omit<NavigationMenuTriggerRenderProps, keyof MenuTriggerRenderProps>
>
>
onClick={onClick}
onPointerEnter={onPointerEnter}
onPointerLeave={onPointerLeave}
{...others}
/>
);
}

0 comments on commit 44d1da6

Please sign in to comment.