export interface DomElementProperties { isForm: boolean; withinForm: boolean; isTrap: boolean; withinTrap: boolean; isZone: boolean; withinZone: boolean; withinZoneWithinForm: boolean; currentZone: HTMLElement; currentTrap: HTMLElement; currentForm: HTMLElement; } /** * DOM class * @dynamic */ export declare class Dom { static getElementProperties(element: HTMLElement, properties?: DomElementProperties): DomElementProperties; static allowCustomArrowKeyFunctionality(properties: DomElementProperties): boolean; static allowCustomHomeEndKeyFunctionality(element: HTMLElement, properties: DomElementProperties): boolean; /** * gets all body elements on the page */ static getAllBodys(): HTMLElement[]; /** * Gets a CSS property value * @param element The Element * @param property - The CSS property name * @returns The value of the CSS property (type depends on property retrieved) */ static getStyle(element: HTMLElement, property: string): any; /** * Gets the classes applied to an element * @param element The Element * @returns The classes currently applied to the element */ static getClasses(element: HTMLElement): any; /** * Determines is an element is disabled via the 'disabled' attribute * @param element The element to start from. */ static isDisabled(element: HTMLElement): boolean; /** * Determines is an element is hidden via css with "display: none" * @param element The element to start from. */ static isNotDisplayed(element: HTMLElement): boolean; /** * Determines is an element is hidden via css with "visibility: hidden" * @param element The element to start from. */ static isHidden(element: HTMLElement): boolean; /** * Returns the first element in the current elements ancestory that is focusable. * * 'Focusable' is defined as the following: * - input, select, textarea, button, object * - anchor with href * - have a non-negative tab index * * An element is not focusable if any of the following is true (even if it meets a condition above) * - negative tab index * - disabled * - display: none * - visibility: hidden * * @param element The element to start from. * @return true if focus possible */ static isFocusable(element: HTMLElement, includeNegativeTabIndex?: boolean): boolean; /** * Returns true if the element could be focusable. * * An element that can be focused is the following: * - input, select, textarea, button, object * - anchor with href * - have a non-negative tab index * * This method will determine if the element has one of these conditions even if the the element * is not displayed, visible, enabled, or having a positive z-index. * * @param element The element to start from. * @return true if focus possible. */ static isFocusPossible(element: HTMLElement, includeNegativeTabIndex?: boolean): boolean; private static checkFocusableConditions; /** * Returns the first element in the current elements ancestry that is focusable. * Will return the element itself if it is focusable * @param element The element to start from. * @return the first focusable ancestor of the element */ static getFocusableAncestor(element: HTMLElement): HTMLElement; /** * find an element in a particular position with a specific condition relative to input element * Does a DFS for this element relative the ancestor zone of input element * @param element The current element * @param condition The function to check the kind of element we are looking for * @param position The ElementPosition of the desired element relative to input element */ static findElementFromAncestorZoneDFS(element: HTMLElement, condition: (element: HTMLElement) => boolean, position: ElementPosition): HTMLElement; /** * find an element in a particular position with a specific condition relative to input element * Does a DFS for this element relative the ancestor trap of input element * @param element The current element * @param condition The function to check the kind of element we are looking for * @param position The ElementPosition of the desired element relative to input element */ static findElementFromAncestorTrapDFS(element: HTMLElement, condition: (element: HTMLElement) => boolean, position: ElementPosition): HTMLElement; /** * find an element in a particular position with a specific condition relative to input element * Does a DFS for this element relative the root of the graph * @param element The current element * @param condition The function to check the kind of element we are looking for * @param position The ElementPosition of the desired element relative to input element */ static findElementFromRootDFS(element: HTMLElement, condition: (element: HTMLElement) => boolean, position: ElementPosition): HTMLElement; /** * find an element in a particular position with a specific condition relative to input element * Does a DFS for this element relative the input element * @param element The current element * @param condition The function to check the kind of element we are looking for * @param position The ElementPosition of the desired element relative to input element */ static findChildElementDFS(element: HTMLElement, condition: (element: HTMLElement) => boolean, position: ElementPosition): HTMLElement; /** * gets a element from a list of elements in the position relative to the current element * @param elements the list of elements * @param currentElement the current element * @param position the ElementPosition we want relative to the current element */ static getElement(elements: HTMLElement[], currentElement: HTMLElement, position: ElementPosition): HTMLElement; static getAllElements(element: HTMLElement, condition: (element: HTMLElement) => boolean): HTMLElement[]; /** * gets the first element that meets a condition * @param rootElement the element we start with * @param condition the condition we want to find an element meeting * @param stopLookingCondition a condition used to stop looking down a certain path * (ie stop looking down a particular path once we hit a zone) * @param includeRootElement a condition to include the root element in the search */ static getFirstElement(rootElement: HTMLElement, condition: (element: HTMLElement) => boolean, stopLookingCondition?: (element: HTMLElement) => boolean, includeRootElement?: boolean): HTMLElement; /** * finds all elements starting at the input element that meet the given condition * @param rootElement the element from which to start the depth first search * @param condition the function that determines whether the desired condition has been met * @param stopLookingCondition a condition used to stop looking down a certain path * @param includeRootElement a condition to include the root element in the search */ private static searchAllElements; /** * returns the root of the DOM graph */ static getRootElement(): HTMLElement; /** * Finds the next zone * @param element the current zone or an element in the current zone */ static getNextZone(element: HTMLElement): HTMLElement; /** * gets the first focusable element in the next zone * if a zone has no focusable elements, it is skipped * @param element the current element */ static getNextZoneElement(element: HTMLElement): HTMLElement; /** * Finds the previous zone * @param element the current zone or an element in the current zone */ static getPreviousZone(element: HTMLElement): HTMLElement; /** * gets the first focusable element in the previous zone * if a zone has no focusable elements, it is skipped * @param element the current element * @param originalElement the element from which we begin the search. Set automatically if unset by user */ static getPreviousZoneElement(element: HTMLElement, originalElement?: HTMLElement): HTMLElement; /** * gets the first ancestor that is disabled * @param element the element */ static getAncestor(element: HTMLElement, condition: MsftSme.Func1): HTMLElement; private static getParentIframe; /** * gets all ancestors that match a given condition * @param element the element */ static getAllAncestors(element: HTMLElement, condition: MsftSme.Func1): HTMLElement[]; /** * gets the zone that the current element is in * @param element the element */ static getAncestorZone(element: HTMLElement): HTMLElement; /** * determine if an element is in a trap, if so return the trap element * @param element HTML element to check */ static getAncestorTrap(element: HTMLElement): HTMLElement; /** * gets the ancestor form of an element * @param element the element */ static getAncestorForm(element: HTMLElement): HTMLElement; /** * Find ancestors that are disabled, hidden, or not displayed * @param element the element */ static getDisabledHiddenOrNotDisplayedAncestor(element: HTMLElement): HTMLElement; /** * gets the first ancestor that is disabled * @param element the element */ static getDisabledAncestor(element: HTMLElement): HTMLElement; /** * returns ancestor table of current element * @param element the current element */ static getAncestorTable(element: HTMLElement): HTMLElement; /** * gets the next child zone of the current zone * @param element the current zone or an element in the current zone */ static getDescendentZone(element: HTMLElement): HTMLElement; /** * gets the first focusable descendent of the current element * @param element the current element */ static getFirstFocusableDescendent(element: HTMLElement): HTMLElement; /** * gets the last element in a zone * @param element the element */ static getLastElementInZone(element: HTMLElement): HTMLElement; /** * gets the first element in a zone * @param element the element */ static getFirstElementInZone(element: HTMLElement): HTMLElement; /** * gets the next focusable element in the current zone * @param element the current element */ static getNextFocusableElement(element: HTMLElement): HTMLElement; /** * gets the previous focusable element in the current zone * @param element the current element */ static getPreviousFocusableElement(element: HTMLElement): HTMLElement; /** * gets the ancestor of an element that has overflow * @param element the current element */ static getOverflowAncestor(element: HTMLElement): HTMLElement; /** * gets the ancestor of an element that meets the specified condition * @param element the current element * @param condition the function that will check if element meets the desired condition */ static getSpecificAncestor(element: HTMLElement, condition: (element: HTMLElement) => boolean): HTMLElement; /** * gets the next focusable element in the current trap * @param element the current element */ static getNextFocusableElementInTrap(element: HTMLElement): HTMLElement; /** * gets the previous focusable element in the current trap * @param element the current element */ static getPreviousFocusableElementInTrap(element: HTMLElement): HTMLElement; /** * true if given element is a body element * @param element the element */ static isBody(element: HTMLElement): boolean; /** * true if the given element is a zone * @param element the element */ static isZone(element: HTMLElement): boolean; /** * true if the element is a focusable element that is not a zone * @param element the element */ static isFocusableNonZone(element: HTMLElement): boolean; /** * true if the element is an input, select, or textarea without a form parent * @param element the element */ static isInputWithoutForm(element: HTMLElement): boolean; /** * true if the element has a role that qualifies as a zone * @param element the element */ static hasZoneRole(element: HTMLElement): boolean; /** * true if the element has class="sme-focus-zone" * @param element the element */ static isSmeFocusZone(element: HTMLElement): boolean; /** * true if the element has a tag that is a zone * @param element the element */ static hasZoneTag(element: HTMLElement): boolean; /** * true if element has role 'tablist' * @param element the html element */ static isTablist(element: HTMLElement): boolean; /** * Returns true if element is active * An element is active if it aria-selected attribute is set as true or has active or sme-active classes * @param element the html element */ static isActiveOrSelected(element: HTMLHtmlElement): boolean; /** * Returns first active or selected descendant or null if none is found * @param element the html element */ static getFirstActiveOrSelectedDescendant(element: HTMLElement): HTMLElement | null; /** * true if the element is a growl with a child * @param element the element */ static isGrowlWithChild(element: HTMLElement): boolean; /** * true if element is focusable element within a form * @param element the element */ static isFocusableFormElement(element: HTMLElement): boolean; /** * true is element is within a zone that is within a form * @param element the element */ static isInZoneWithinForm(element: HTMLElement): boolean; /** * true is element is within a trap that is within a form * @param element the element */ static isInTrapWithinForm(element: HTMLElement): boolean; /** * true if the given element is a trap * @param element the element */ static isTrap(element: HTMLElement): boolean; /** * return true if element is a form * @param element the element */ static isForm(element: HTMLElement): boolean; /** * return true if we are inside a search box that has its own arrow key controls * @param element the element * @param isRightArrow the right arrow was clicked */ static useArrowKeysWithinSearchbox(element: HTMLElement, isRightArrow: boolean): boolean; /** * true if given element is a search box * @param element the element */ static isSearchBox(element: HTMLElement): boolean; /** * true if given element is a textbox in a combobox * @param element the element */ static isTextBoxInComboBox(element: HTMLElement): boolean; /** * returns the next row in the current table * @param element the current element */ static getNextRowInTable(element: HTMLElement): HTMLElement; /** * returns the previous row in the current table * @param element the current element */ static getPreviousRowInTable(element: HTMLElement): HTMLElement; /** * returns true if the current element is a table row * @param element the current element */ static isTableRow(element: HTMLElement): boolean; /** * returns true if the current element is a table cell * @param element the current element */ static isTableCell(element: HTMLElement): boolean; /** * returns true if the current element is inside a table cell * @param element the current element */ static isInTableCell(element: HTMLElement): boolean; /** * Gets the first action bar on the screen. * @param element The HTML element. * @returns The first action bar on the screen. */ static getFirstActionBar(element: HTMLElement): HTMLElement; /** * Gets the next action bar on the screen. * @param element The HTML element. * @returns The first action bar on the screen. */ static getNextActionBar(element: HTMLElement): HTMLElement; /** * Gets a specified action bar. * @param element The HTML element. * @param position The position of the desired action bar. * @returns The specified action bar, if possible. */ static getActionBar(element: HTMLElement, position: ElementPosition): HTMLElement; /** * Determines if the HTML element is inside of an action bar. * @param element The HTML element. * @returns True if the HTML element is in an action bar and false if not. */ static isInActionBar(element: HTMLElement): boolean; /** * Determines if the HTML element is an action bar. * @param element The HTML element. * @returns True if the element is an action bar and false if not. */ static isActionBar(element: HTMLElement): boolean; /** * Determines if we should treat enter as click for a certain element * @param element The HTML element to check */ static shouldTreatEnterAsClick(element: HTMLElement): boolean; /** * Check tab list aria-selected with active status */ static checkActiveTab(): void; /** * Update tab aria-selected status * @param element The HTML element. * @param isActive The HTML element is active or inactive. */ static updateAriaSelect(currentElement: HTMLElement, isActive: boolean): void; /** * @param element Element whose focus origin we are trying to determine * @returns The element to focus on */ static getFocusOrigin(element: HTMLElement): HTMLElement; } /** * describes the position of the desired element in a list of elements */ export declare enum ElementPosition { First = 0, Previous = 1, Next = 2, Last = 3 }