diff --git a/packages/core/src/components/app/app.tsx b/packages/core/src/components/app/app.tsx index 7533a3183c..2b759c76b8 100644 --- a/packages/core/src/components/app/app.tsx +++ b/packages/core/src/components/app/app.tsx @@ -1,10 +1,5 @@ -<<<<<<< HEAD -import { Element, Component, Listen, Prop } from '@stencil/core'; -import { Nav, NavContainer } from '../../navigation/nav-interfaces'; -======= import { Component, Element, Listen, Prop } from '@stencil/core'; -import { Nav, NavContainer, OverlayPortal } from '../../navigation/nav-interfaces'; ->>>>>>> fffa9b54606f47336abfbb232405186787180b12 +import { Nav, NavContainer } from '../../navigation/nav-interfaces'; import { Config } from '../..'; import { App } from './app-interfaces'; import { isReady } from '../../utils/helpers'; diff --git a/packages/core/src/components/range/range-knob.tsx b/packages/core/src/components/range/range-knob.tsx new file mode 100644 index 0000000000..52849f5ccf --- /dev/null +++ b/packages/core/src/components/range/range-knob.tsx @@ -0,0 +1,74 @@ +import { Component, Event, EventEmitter, Listen, Prop } from '@stencil/core'; + +@Component({ + tag: `ion-range-knob` +}) +export class RangeKnob { + @Prop() pressed: boolean; + @Prop() pin: boolean; + @Prop() min: number; + @Prop() max: number; + @Prop() val: number; + @Prop() disabled: boolean; + @Prop() labelId: string; + @Prop() knob: string; + @Prop() ratio: number; + + @Event() ionIncrease: EventEmitter; + @Event() ionDecrease: EventEmitter; + + @Listen('keydown') + handleKeyBoard(ev: KeyboardEvent) { + const keyCode = ev.keyCode; + if (keyCode === KEY_LEFT || keyCode === KEY_DOWN) { + this.ionDecrease.emit({isIncrease: false, knob: this.knob}); + ev.preventDefault(); + ev.stopPropagation(); + } else if (keyCode === KEY_RIGHT || keyCode === KEY_UP) { + this.ionIncrease.emit({isIncrease: true, knob: this.knob}); + ev.preventDefault(); + ev.stopPropagation(); + } + } + + leftPos(val: number) { + return `${val * 100}%`; + } + + hostData() { + return { + class: { + 'range-knob-pressed': this.pressed, + 'range-knob-min': this.val === this.min || this.val === undefined, + 'range-knob-max': this.val === this.max + }, + style: { + 'left': this.leftPos(this.ratio) + }, + attrs: { + 'role': 'slider', + 'tabindex': this.disabled ? -1 : 0, + 'aria-valuemin': this.min, + 'aria-valuemax': this.max, + 'aria-disabled': this.disabled, + 'aria-labelledby': this.labelId, + 'aria-valuenow': this.val + } + }; + } + + render() { + if (this.pin) { + return [ + , +