Skip to main content

Class: TouchList

Defined in: src/garminsdk/components/list/TouchList.tsx:19

A touchscreen list which can be scrolled by clicking and dragging the mouse.

Extends

Constructors

Constructor

new TouchList(props): TouchList

Defined in: src/sdk/components/FSComponent.ts:73

Creates an instance of a DisplayComponent.

Parameters

ParameterTypeDescription
propsTouchListPropsThe propertis of the component.

Returns

TouchList

Inherited from

ScrollList.constructor

Properties

_animationTargetScrollPos

protected readonly _animationTargetScrollPos: Subject<undefined | number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:185

Inherited from

ScrollList._animationTargetScrollPos


_firstVisibleIndex

protected readonly _firstVisibleIndex: MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:202

Inherited from

ScrollList._firstVisibleIndex


_itemsPerPage

protected readonly _itemsPerPage: undefined | Subject<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:75

Inherited from

ScrollList._itemsPerPage


_lengthPx

protected readonly _lengthPx: Subscribable<number> | MappedSubscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:103

Inherited from

ScrollList._lengthPx


_listItemLengthWithMarginPx

protected readonly _listItemLengthWithMarginPx: MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:84

Inherited from

ScrollList._listItemLengthWithMarginPx


_maxScrollPos

protected readonly _maxScrollPos: MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:129

Inherited from

ScrollList._maxScrollPos


_renderWindow

protected readonly _renderWindow: Vec2Subject

Defined in: src/garminsdk/components/list/ScrollList.tsx:234

Inherited from

ScrollList._renderWindow


_scrollPos

protected readonly _scrollPos: Subject<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:142

Inherited from

ScrollList._scrollPos


_totalLengthPx

protected readonly _totalLengthPx: MappedSubject<[number, number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:92

Inherited from

ScrollList._totalLengthPx


animateFunc()

protected readonly animateFunc: () => void

Defined in: src/garminsdk/components/list/ScrollList.tsx:241

Called once per animation frame while we are animating.

Returns

void

Inherited from

ScrollList.animateFunc


animationTargetScrollPos

readonly animationTargetScrollPos: Subscribable<undefined | number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:190

The scroll position targeted by this list's current scrolling animation, in pixels, or undefined if scrolling is not currently animated or the animation has no defined target scroll position.

Inherited from

ScrollList.animationTargetScrollPos


childrenNode?

protected optional childrenNode: VNode

Defined in: src/garminsdk/components/list/ScrollList.tsx:58

Inherited from

ScrollList.childrenNode


context?

optional context: [] = undefined

Defined in: src/sdk/components/FSComponent.ts:64

The context on this component, if any.

Inherited from

ScrollList.context


contextType?

readonly optional contextType: readonly [] = undefined

Defined in: src/sdk/components/FSComponent.ts:67

The type of context for this component, if any.

Inherited from

ScrollList.contextType


cssClassSub?

protected optional cssClassSub: Subscription | Subscription[]

Defined in: src/garminsdk/components/list/ScrollList.tsx:257

Inherited from

ScrollList.cssClassSub


deltaTimeSeconds

protected deltaTimeSeconds: number = 0

Defined in: src/garminsdk/components/list/ScrollList.tsx:246

Inherited from

ScrollList.deltaTimeSeconds


firstVisibleIndex

readonly firstVisibleIndex: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:210

Inherited from

ScrollList.firstVisibleIndex


goToAnimationTargetPos

protected goToAnimationTargetPos: boolean = false

Defined in: src/garminsdk/components/list/ScrollList.tsx:252

Inherited from

ScrollList.goToAnimationTargetPos


instrumentMouseLeaveSub

protected readonly instrumentMouseLeaveSub: undefined | Subscription

Defined in: src/garminsdk/components/list/TouchList.tsx:24


interval?

protected optional interval: number

Defined in: src/garminsdk/components/list/ScrollList.tsx:253

Inherited from

ScrollList.interval


isAnimating

protected isAnimating: boolean = false

Defined in: src/garminsdk/components/list/ScrollList.tsx:243

Inherited from

ScrollList.isAnimating


isMouseDown

protected readonly isMouseDown: Subject<boolean>

Defined in: src/garminsdk/components/list/TouchList.tsx:22


itemCount

protected readonly itemCount: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:70

Inherited from

ScrollList.itemCount


itemsContainerRef

protected readonly itemsContainerRef: NodeReference<HTMLDivElement>

Defined in: src/garminsdk/components/list/ScrollList.tsx:62

Inherited from

ScrollList.itemsContainerRef


itemsPerPage

readonly itemsPerPage: undefined | Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:80

The number of visible list items per page displayed by this list, or undefined if the number of items per page is not prescribed.

Inherited from

ScrollList.itemsPerPage


itemsPerPageProp

protected readonly itemsPerPageProp: undefined | Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:66

Inherited from

ScrollList.itemsPerPageProp


lastMousePosition

protected lastMousePosition: undefined | number = undefined

Defined in: src/garminsdk/components/list/TouchList.tsx:27


lastTimeSeconds

protected lastTimeSeconds: number = 0

Defined in: src/garminsdk/components/list/ScrollList.tsx:245

Inherited from

ScrollList.lastTimeSeconds


lengthPx

readonly lengthPx: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:116

The visible length of this list, in pixels, along its scroll axis.

Inherited from

ScrollList.lengthPx


listItemLengthPx

protected readonly listItemLengthPx: Subject<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:68

Inherited from

ScrollList.listItemLengthPx


listItemLengthPxProp

protected readonly listItemLengthPxProp: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:64

Inherited from

ScrollList.listItemLengthPxProp


listItemLengthWithMarginPx

readonly listItemLengthWithMarginPx: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:90

The length, in pixels, of one item in this list plus its margin along this list's scroll axis.

Inherited from

ScrollList.listItemLengthWithMarginPx


listItemParamSubs

protected readonly listItemParamSubs: Subscription[] = []

Defined in: src/garminsdk/components/list/ScrollList.tsx:255

Inherited from

ScrollList.listItemParamSubs


listItemSpacingPx

protected readonly listItemSpacingPx: Subject<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:69

Inherited from

ScrollList.listItemSpacingPx


listItemSpacingPxProp

protected readonly listItemSpacingPxProp: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:65

Inherited from

ScrollList.listItemSpacingPxProp


maxOverscrollPx

protected readonly maxOverscrollPx: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:140

How many pixels we will allow overscrolling before stopping.

Inherited from

ScrollList.maxOverscrollPx


maxRenderedItemCount

protected readonly maxRenderedItemCount: undefined | MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:212

Inherited from

ScrollList.maxRenderedItemCount


maxScrollPos

readonly maxScrollPos: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:137

This list's maximum allowed scroll position, in pixels. Does not include overscroll.

Inherited from

ScrollList.maxScrollPos


maxTimeInOverscrollSeconds

protected maxTimeInOverscrollSeconds: number = 0.5

Defined in: src/garminsdk/components/list/ScrollList.tsx:249

How long to wait while overscrolled before snapping back.

Inherited from

ScrollList.maxTimeInOverscrollSeconds


onMouseDownCaptureFunc()

protected readonly onMouseDownCaptureFunc: (e) => void

Defined in: src/garminsdk/components/list/TouchList.tsx:29

User has clicked on the list, so now we want to listen for the mouse moving so we can scroll the list with the mouse.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseDownFunc()

protected readonly onMouseDownFunc: (e) => void

Defined in: src/garminsdk/components/list/TouchList.tsx:30

User has clicked on the list, so now we want to listen for the mouse moving so we can scroll the list with the mouse.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseMoveFunc()

protected readonly onMouseMoveFunc: (e) => void

Defined in: src/garminsdk/components/list/TouchList.tsx:32

Responds to mousemove events on this list while the user is dragging.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseUpFunc()

protected readonly onMouseUpFunc: () => void

Defined in: src/garminsdk/components/list/TouchList.tsx:31

Responds to mouseup events on this list after the user has started dragging.

Returns

void


pageLength

protected readonly pageLength: MappedSubscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:119

The length of one page, in pixels, along this list's scroll axis.

Inherited from

ScrollList.pageLength


props

props: TouchListProps & ComponentProps

Defined in: src/sdk/components/FSComponent.ts:61

The properties of the component.

Inherited from

ScrollList.props


renderWindow

readonly renderWindow: Subscribable<Readonly<Omit<Float64Array, "set" | "sort" | "copyWithin">>>

Defined in: src/garminsdk/components/list/ScrollList.tsx:239

The window of rendered list items, as [startIndex, endIndex], where startIndex is the index of the first rendered item, inclusive, and endIndex is the index of the last rendered item, exclusive.

Inherited from

ScrollList.renderWindow


renderWindowStartIndex

protected readonly renderWindowStartIndex: Subject<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:220

Inherited from

ScrollList.renderWindowStartIndex


renderWindowStartPos

protected readonly renderWindowStartPos: MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:221

Inherited from

ScrollList.renderWindowStartPos


rootRef

protected readonly rootRef: NodeReference<HTMLDivElement>

Defined in: src/garminsdk/components/list/ScrollList.tsx:60

Inherited from

ScrollList.rootRef


scrollAxis

readonly scrollAxis: "x" | "y"

Defined in: src/garminsdk/components/list/ScrollList.tsx:73

The axis along which this list scrolls.

Inherited from

ScrollList.scrollAxis


scrollBarLengthFraction

readonly scrollBarLengthFraction: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:177

The fraction of this list's visible length compared to the total length of all items in this list plus their margins along this list's scroll axis.

Inherited from

ScrollList.scrollBarLengthFraction


scrollPos

readonly scrollPos: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:147

This list's current scroll position, in pixels. The scroll position is zero when the list is scrolled to the beginning (without overscroll) and increases as the list is scrolled toward the end.

Inherited from

ScrollList.scrollPos


scrollPosFraction

readonly scrollPosFraction: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:153

This list's current scroll position, normalized such that 0 represents when the list is scrolled to the beginning (without overscroll) and 1 represents when the list is scrolled to the end (without overscroll).

Inherited from

ScrollList.scrollPosFraction


snappingTransitionSpeed

protected snappingTransitionSpeed: number = 200

Defined in: src/garminsdk/components/list/ScrollList.tsx:251

Once at or below this velocity, we pick that target Y to snap to.

Inherited from

ScrollList.snappingTransitionSpeed


snapToItem

protected readonly snapToItem: boolean

Defined in: src/garminsdk/components/list/ScrollList.tsx:82

Inherited from

ScrollList.snapToItem


targetScrollPos

readonly targetScrollPos: MappedSubject<[undefined | number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:196

This list's current target scroll position, in pixels. The target scroll position is equal to the current animation target if it is defined; otherwise it is equal to the current scroll position.

Inherited from

ScrollList.targetScrollPos


timeInOverscrollSeconds

protected timeInOverscrollSeconds: number = 0

Defined in: src/garminsdk/components/list/ScrollList.tsx:247

Inherited from

ScrollList.timeInOverscrollSeconds


totalLengthPx

readonly totalLengthPx: Subscribable<number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:101

The total length, in pixels, of all items in this list plus their margins along this list's scroll axis.

Inherited from

ScrollList.totalLengthPx


translatableRef

protected readonly translatableRef: NodeReference<HTMLDivElement>

Defined in: src/garminsdk/components/list/ScrollList.tsx:61

Inherited from

ScrollList.translatableRef


trueScrollPos

protected readonly trueScrollPos: MappedSubject<[number, number], number>

Defined in: src/garminsdk/components/list/ScrollList.tsx:228

This list's current scroll position adjusted for the render window.

Inherited from

ScrollList.trueScrollPos


velocity

protected velocity: number = 0

Defined in: src/garminsdk/components/list/ScrollList.tsx:244

Inherited from

ScrollList.velocity


RESERVED_CLASSES

protected readonly static RESERVED_CLASSES: string[]

Defined in: src/garminsdk/components/list/TouchList.tsx:20

Overrides

ScrollList.RESERVED_CLASSES

Methods

animate()

protected animate(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:488

Called once per animation frame while we are animating.

Returns

void

Inherited from

ScrollList.animate


animateSnapback()

protected animateSnapback(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:557

Animates scrolling back when overscrolled.

Returns

void

Inherited from

ScrollList.animateSnapback


animateSnapping()

protected animateSnapping(deltaTimeSeconds): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:588

If we have a target Y position to stop scrolling at, animate towards a smooth stop right at that point.

Parameters

ParameterTypeDescription
deltaTimeSecondsnumberSeconds since last animation frame.

Returns

void

Inherited from

ScrollList.animateSnapping


animateVelocity()

protected animateVelocity(deltaTimeSeconds): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:532

Applies the velocity to the scroll position, which gives it the "flick" effect. Also slows the velocity down overtime.

Parameters

ParameterTypeDescription
deltaTimeSecondsnumberSeconds since last animation frame.

Returns

void

Inherited from

ScrollList.animateVelocity


changeRenderWindow()

protected changeRenderWindow(scrollPos, renderCount, itemLength, windowLength): void

Defined in: src/garminsdk/components/list/TouchList.tsx:100

Changes this list's item render window.

Parameters

ParameterTypeDescription
scrollPosnumberThe scroll position on which to center the new render window, in pixels.
renderCountnumberThe number of items to render in the new window.
itemLengthnumberThe length of each item to render, including margin, in pixels.
windowLengthnumberThe length of the render window, in pixels.

Returns

void

Overrides

ScrollList.changeRenderWindow


destroy()

destroy(): void

Defined in: src/garminsdk/components/list/TouchList.tsx:193

Returns

void

Inherit Doc

Overrides

ScrollList.destroy


ensureScrollIsInBounds()

protected ensureScrollIsInBounds(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:766

Checks if the list is scrolled past the maximum limit, and if so, snaps the list back to the limit.

Returns

void

Inherited from

ScrollList.ensureScrollIsInBounds


executeScrollTo()

protected executeScrollTo(pos, animate): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:449

Executes a scroll to a specifed position.

Parameters

ParameterTypeDescription
posnumberThe position to which to scroll.
animatebooleanWhether to animate the scroll.

Returns

void

Inherited from

ScrollList.executeScrollTo


getContainerRef()

getContainerRef(): HTMLDivElement

Defined in: src/garminsdk/components/list/ScrollList.tsx:306

Returns a reference to the element where the list items should be added.

Returns

HTMLDivElement

A reference to the element where the list items should be added.

Inherited from

ScrollList.getContainerRef


getContext()

protected getContext(context): never

Defined in: src/sdk/components/FSComponent.ts:106

Gets a context data subscription from the context collection.

Parameters

ParameterTypeDescription
contextneverThe context to get the subscription for.

Returns

never

The requested context.

Throws

An error if no data for the specified context type could be found.

Inherited from

ScrollList.getContext


getDampening()

protected getDampening(direction): number

Defined in: src/garminsdk/components/list/ScrollList.tsx:782

Returns a number used to dampen the mouse movement when overscrolled.

Parameters

ParameterTypeDescription
directionnumberWhat direction os the mouse moving in.

Returns

number

a number used to dampen the mouse movement when overscrolled.

Inherited from

ScrollList.getDampening


getOverscrollPx()

protected getOverscrollPx(): number

Defined in: src/garminsdk/components/list/ScrollList.tsx:814

Gets the distance by which this list is currently overscrolled, in pixels along the scroll axis.

Returns

number

The distance by which this list is currently overscrolled, in pixels along the scroll axis.

Inherited from

ScrollList.getOverscrollPx


getReservedCssClasses()

protected getReservedCssClasses(): readonly string[]

Defined in: src/garminsdk/components/list/TouchList.tsx:188

Gets an array of this list's reserved CSS classes.

Returns

readonly string[]

An array of this list's reserved CSS classes.

Overrides

ScrollList.getReservedCssClasses


isOverscrolled()

protected isOverscrolled(): boolean

Defined in: src/garminsdk/components/list/ScrollList.tsx:828

Returns whether this list is currently overscrolled.

Returns

boolean

Whether this list is currently overscrolled.

Inherited from

ScrollList.isOverscrolled


onAfterRender()

onAfterRender(): void

Defined in: src/garminsdk/components/list/TouchList.tsx:35

Returns

void

Inherit Doc

Overrides

ScrollList.onAfterRender


onBeforeRender()

onBeforeRender(): void

Defined in: src/sdk/components/FSComponent.ts:80

A callback that is called before the component is rendered.

Returns

void

Inherited from

ScrollList.onBeforeRender


onListItemParamChanged()

protected onListItemParamChanged(pipeTo, value): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:694

Responds to when one of this list's item parameters changes when the list supports snapping to items.

Parameters

ParameterTypeDescription
pipeToMutableSubscribable<number>The mutable subscribable to which to pipe the new parameter value.
valuenumberThe new parameter value.

Returns

void

Inherited from

ScrollList.onListItemParamChanged


onMouseDown()

protected onMouseDown(e): void

Defined in: src/garminsdk/components/list/TouchList.tsx:130

User has clicked on the list, so now we want to listen for the mouse moving so we can scroll the list with the mouse.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseDownCapture()

protected onMouseDownCapture(e): void

Defined in: src/garminsdk/components/list/TouchList.tsx:113

User has clicked on the list, so now we want to listen for the mouse moving so we can scroll the list with the mouse.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseMove()

protected onMouseMove(e): void

Defined in: src/garminsdk/components/list/TouchList.tsx:160

Responds to mousemove events on this list while the user is dragging.

Parameters

ParameterTypeDescription
eMouseEventThe mouse event.

Returns

void


onMouseUp()

protected onMouseUp(): void

Defined in: src/garminsdk/components/list/TouchList.tsx:143

Responds to mouseup events on this list after the user has started dragging.

Returns

void


pageBack()

pageBack(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:313

Scrolls backward by one full page length.

Returns

void

Inherited from

ScrollList.pageBack


pageForward()

pageForward(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:328

Scrolls forward by one full page length.

Returns

void

Inherited from

ScrollList.pageForward


pickNearestSnapToPos()

protected pickNearestSnapToPos(pos): number

Defined in: src/garminsdk/components/list/ScrollList.tsx:685

Picks the scroll position, in pixels, of the snap-to target that is nearest to a given scroll position.

Parameters

ParameterTypeDescription
posnumberThe scroll position, in pixels, for which to find the nearest snap-to target.

Returns

number

The scroll position, in pixels, of the snap-to target that is nearest to the specified scroll position.

Inherited from

ScrollList.pickNearestSnapToPos


render()

render(): VNode

Defined in: src/garminsdk/components/list/ScrollList.tsx:833

Returns

VNode

Inherit Doc

Inherited from

ScrollList.render


scrollToIndex()

scrollToIndex(index, position, animate): void

Defined in: src/garminsdk/components/list/TouchList.tsx:69

Scrolls until the item at a specified index is in view. The operation will be aborted if the list is currently being dragged by the user.

Parameters

ParameterTypeDescription
indexnumberThe index of the item to which to scroll.
positionnumberThe position to place the target item at the end of the scroll. Position 0 is the top/left-most visible slot, position 1 is the next slot, and so on. Values greater than or equal to the number of visible items per page will be clamped. Negative values will be interpreted as counting backwards from the bottom/right-most visible slot starting with -1. Ignored if this list does not support snapping to list items.
animatebooleanWhether to animate the scroll.

Returns

void

Overrides

ScrollList.scrollToIndex


scrollToIndexWithMargin()

scrollToIndexWithMargin(index, margin, animate): void

Defined in: src/garminsdk/components/list/TouchList.tsx:90

Scrolls the minimum possible distance until the item at a specified index is in view with a given margin from the edges of the visible list. The operation will be aborted if the list is currently being dragged by the user.

Parameters

ParameterTypeDescription
indexnumberThe index of the item to which to scroll.
marginnumberThe margin from the edges of the visible list to respect when scrolling to the target item. In other words, the scrolling operation will attempt to place the target item at least as far from the edges of the visible list as the specified margin. If this list supports snapping to items, then the margin should be expressed as an item count. If this list does not support snapping to items, then the margin should be expressed as pixels. The margin will be clamped between zero and the largest possible value such that an item can be placed within the visible list while respecting the margin value on both sides.
animatebooleanWhether to animate the scroll.

Returns

void

Overrides

ScrollList.scrollToIndexWithMargin


startAnimating()

protected startAnimating(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:466

Reset the animation vars and start the animation, if not already started.

Returns

void

Inherited from

ScrollList.startAnimating


stopAnimating()

protected stopAnimating(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:478

Stop the animation.

Returns

void

Inherited from

ScrollList.stopAnimating


updateRenderWindow()

protected updateRenderWindow(): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:709

Updates this list's item render window.

Returns

void

Inherited from

ScrollList.updateRenderWindow


updateTransformX()

protected updateTransformX(scrollPos): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:751

Updates this list's item container's x-transform based on the current true scroll position.

Parameters

ParameterTypeDescription
scrollPosnumberThe current true scroll position, in pixels.

Returns

void

Inherited from

ScrollList.updateTransformX


updateTransformY()

protected updateTransformY(scrollPos): void

Defined in: src/garminsdk/components/list/ScrollList.tsx:759

Updates this list's item container's y-transform based on the current true scroll position.

Parameters

ParameterTypeDescription
scrollPosnumberThe current true scroll position, in pixels.

Returns

void

Inherited from

ScrollList.updateTransformY