Reference

export interface MenuItemDefinition {
  /** Text which will be displayed in a menu item. Always required */
  text: string;
  /** Url which will be navigated to if a menu item is clicked.  Note that if  clickHandlerType is MenuClickProcessor, then this behaviour can be overrided by assigning a handler to MenuClickProcessor.dataClickEventer */
  url?: string;
  /** Title which will be displayed near a menu item when it is hovered */
  title?: string;
  /** Passed to MenuClickProcessor.dataClickEventer handler.  Can be used to easily identify which menu item was clicked */
  id?: string;
  /** Passed to MenuClickProcessor.dataClickEventer handler.  Can hold data specific to this menu item that is used by handler */
  data?: string;
  /** Specifies the type of click handler to use.
   * If undefined, then, if url is defined, the clickHandlerType is set to AnchorTag, otherwise it is set to MenuClickProcessor.*/
  clickHandlerType?: ClickHandlerType;
  /** Specifies menu items in a sub menu attached to this menu item.  Note that only top level menu items can have children */
  children?: readonly MenuItemDefinition[];
}

export type ClickHandlerType = 'anchorTag' | 'menuClickProcessor';

Settings

Note that narrow also covers devices which do not support hover (eg. Mobile and tablets not using stylus)

export interface MainMenuSettings {
  // MainMenu

  /** font-family applied to MainMenu. @defaultValue inherit */
  mainMenuFontFamily?: string;
  /** margin applied to MainMenu. @defaultValue 0 */
  mainMenuMargin?: string;
  /** padding applied to MainMenu. @defaultValue 0 */
  mainMenuPadding?: string;
  /** font-size applied to the MainMenu when wide.  Will be inherited by MenuItem elements. @defaultValue 1.2em */
  wideMainMenuFontSize?: string;
  /** background-color applied to MainMenu when wide. @defaultValue #d0dae0 */
  wideMainMenuBackgroundColor?: string;
  /** gap applied to MainMenu when wide. @defaultValue 0.8em */
  wideMainMenuFlexGap?: string;
  /** font-size applied to the MainMenu when wide.  Will be inherited by wide Main MenuItem elements. @defaultValue 1.2rem */
  narrowMainMenuFontSize?: string;
  /** background-color applied to MainMenu when narrow. @defaultValue #cddee8 */
  narrowMainMenuBackgroundColor?: string;
  /** max-width applied to MainMenu when narrow. @defaultValue 15em */
  narrowMainMenuMaxWidth?: string;
  /** top applied to MainMenu when narrow. Set to 100% to place below anchor positioned element. @defaultValue 0 */
  narrowMainMenuTop?: string;
  /** left applied to MainMenu when narrow. @defaultValue undefined */
  narrowMainMenuLeft?: string;
  /** right applied to MainMenu when narrow. @defaultValue 0 */
  narrowMainMenuRight?: string;
  /** gap applied to MainMenu when narrow. @defaultValue 0.18em */
  narrowMainMenuFlexGap?: string;
  /** box-shadow applied to MainMenu when narrow. @defaultValue 0 .1em .4em black */
  narrowMainMenuBoxShadow?: string;

  // ExpandableItem

  /** background-color applied to expand-control element within ExpandableItem. @defaultValue #bcc3c8 */
  expandControlBackgroundColor?: string;
  /** color applied to the not expanded Icon expand-control element within ExpandableItem. @defaultValue #bcc3c8 */
  notExpandedIconColor?: string;
  /** color applied to the expanded Icon expand-control element within ExpandableItem. @defaultValue #bcc3c8 */
  expandedIconColor?: string;
  /** font-family applied to wide SubMenu. @defaultValue inherit */
  wideSubMenuFontFamily?: string;
  /** font-size applied to the wide SubMenu.  Will be inherited by wide sub MenuItem elements. @defaultValue 90% */
  wideSubMenuFontSize?: string;
  /** background-color applied to SubMenu within ExpandableItem when wide. @defaultValue #d0dae0 */
  wideSubMenuBackgroundColor?: string;
  /** box-shadow applied to SubMenu within ExpandableItem when wide. @defaultValue 0.14em 0.14em 0.14em #2f3340 */
  wideSubMenuBoxShadow?: string;
  /** gap applied to SubMenu within ExpandableItem when wide. @defaultValue 0.18em */
  wideSubMenuFlexGap?: string;
  /** margin applied to SubMenu within ExpandableItem when wide. @defaultValue 0 */
  wideSubMenuMargin?: string;
  /** padding applied to SubMenu within ExpandableItem when wide. @defaultValue 0.2em 0.2em 0.1em 0.2em */
  wideSubMenuPadding?: string;
  /** font-family applied to narrow SubMenu. @defaultValue inherit */
  narrowSubMenuFontFamily?: string;
  /** font-size applied to the narrow SubMenu.  Will be inherited by narrow sub MenuItem elements. @defaultValue 90% */
  narrowSubMenuFontSize?: string;
  /** padding applied to MenuItem under ExpandableItem when narrow. Does not apply to MenuItems under SubMenu @defaultValue 0 0.2em 0 0.8rem */
  narrowMenuItemPadding?: string;
  /** gap applied to SubMenu within ExpandableItem when narrow. @defaultValue 0.18em */
  narrowSubMenuFlexGap?: string;
  /** margin applied to SubMenu within ExpandableItem when narrow. @defaultValue -0.18rem 0 0 0 */
  narrowSubMenuMargin?: string;
  /** padding applied to SubMenu within ExpandableItem when narrow. @defaultValue 0.36rem 0 0 0 */
  narrowSubMenuPadding?: string;
  /** padding applied to MenuItems within SubMenu within ExpandableItem when narrow. @defaultValue 0 0 0 1.8rem */
  narrowSubMenuMenuItemPadding?: string;
  /** background-color applied to SubMenu within ExpandableItem when narrow. @defaultValue #bcc3c8 */
  narrowSubMenuBackgroundColor?: string;

  // MenuItem

  /** text-decoration applied to MenuItem. @defaultValue none */
  menuItemTextDecoration?: string;
  /** color applied to MenuItem. @defaultValue #021426 */
  menuItemColor?: string;
  /** margin applied to MenuItem. @defaultValue 0 */
  menuItemMargin?: string;
  /** padding applied to MenuItem. @defaultValue 0 */
  menuItemPadding?: string;
  /** background-color applied to MenuItem when hovered. @defaultValue #97c7e7 */
  menuItemHoverBackgroundColor?: string;
}

HamburgerSettings

export interface HamburgerSettings {
  /** font-size applied to the MainMenu element and Hamburger when narrow.  Will be inherited by MenuItem elements. @defaultValue 1.8rem */
  narrowMainMenuFontSize?: string;

  /** top applied to Hamburger when active. @defaultValue 0 */
  activeTop?: string;
  /** left applied to Hamburger when active. @defaultValue undefined */
  activeLeft?: string;
  /** right applied to Hamburger when active. @defaultValue 0 */
  activeRight?: string;
  /** width applied to Hamburger. @defaultValue 1.8em */
  width?: string;
  /** height applied to Hamburger. @defaultValue 0.8em */
  height?: string;
  /** pointer applied to Hamburger. @defaultValue pointer */
  pointer?: string;

  /** top applied to Hamburger's top line. @defaultValue 0.1em */
  topLineTop?: string;
  // topLineWidth?: string; // will always be the same as hamburger width
  /** height applied to Hamburger's top line. @defaultValue 0.2em */
  topLineHeight?: string;
  /** background-color applied to Hamburger's top line. @defaultValue #3a62e5 */
  topLineBackgroundColor?: string;
  /** transition applied to Hamburger's top line. @defaultValue all 0.3s ease-in-out */
  topLineTransition?: string;

  /** bottom applied to Hamburger's bottom line. @defaultValue 0.1em */
  bottomLineBottom?: string;
  /** width applied to Hamburger's bottom line. @defaultValue 1.4em */
  bottomLineWidth?: string;
  /** height applied to Hamburger's bottom line. @defaultValue 0.2em */
  bottomLineHeight?: string;
  /** background-color applied to Hamburger's bottom line. @defaultValue #3a62e5 */
  bottomLineBackgroundColor?: string;
  /** transition applied to Hamburger's bottom line. @defaultValue transform 0.3s ease-in-out */
  bottomLineTransition?: string;
}
/** Processes menu item clicks.  Only access this class via MenuClickProcessor.get() as only a single instance can exist (singleton) */
export class MenuClickProcessor {
  /** Assign a handler to customise the behaviour of click events */
  dataClickEventer: MenuClickProcessor.DataClickEventer | undefined;
  /** MainMenu component root element */
  get mainMenuElement(): Element;
  /** Hamburger component root element. Click events is used to activate and deactive main menu */
  get hamburgerElement(): Element;
  /** Returns true if MenuClickProcessor handles the elements click event.  This includes root hamburger element and expand-control elements and their children nodes */
  isClickHandledEventTarget(eventTarget: EventTarget): boolean;
  /** Undisplays the Main Menu and deactivates the Hamburger if the Hamburger is active */
  deactivateNarrow(): void;
}

export namespace MenuClickProcessor {
  /** Get singleton instance of MenuClickProcessor. If it does not already exist, it is created. */
  export function get(): MenuClickProcessor;

  /** Returns true if click event was handled. Otherwise event was not handled and processor will attempt to navigate to URL */
  export type DataClickEventer = (
    this: void,
    /** The HTML element which generated the click event */
    element: HTMLElement,
    /** The `id` value from the menu item's corresponding MenuItemDefinition. Can be used to easily identify which menu item was clicked. */
    id: string | undefined,
    /** The `data` value from the menu item's corresponding MenuItemDefinition. Data specific to this menu item which can be used in the dataClickEventer handler. */
    data: string | undefined,
    /** The `url` value from the menu item's corresponding MenuItemDefinition. A click on a menu item will navigate to this URL unless overridden in the dataClickEventer handler. */
    url: string | undefined,
  ) => boolean;

  /** Class name used to specify hamburger is active */
  export const hamburgerActiveClassName = 'active';
  /** Class name used to specify Main Menu is displayed */
  export const mainMenuDisplayedClassName = 'displayed';
  /** Class name used to specify an expandable item (item with menu item and sub menu) has its sub menu expanded */
  export const expandableItemExpandedClassName = 'expanded';
}