Skip to content

Instantly share code, notes, and snippets.

@rossjha
Last active August 23, 2022 20:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rossjha/83ae36851e36713ac9fde1d08ebae1f8 to your computer and use it in GitHub Desktop.
Save rossjha/83ae36851e36713ac9fde1d08ebae1f8 to your computer and use it in GitHub Desktop.
Range Web Component
import Component from '@glimmer/component';
import { action } from '@ember/object';
export default class extends Component {
get _value() {
return this.args.value;
}
get valueAsPercentage() {
const { min, max, value } = this.args;
return (value - min) / (max - min) * 100;
}
@action setValue(evt) {
const { min, max } = this.args;
const { x, target } = evt;
const track = target.getBoundingClientRect();
const value = (x - track.x) / track.width * (max-min) + min
this.args.doSetValue(value);
}
}
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
export default class ApplicationController extends Controller {
@tracked value = 100;
@action setValue(value) {
this.value = value;
}
}
@import "https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css";
body{
background: #F9FAFB;
}
<main class="container mx-auto my-8 bg-gray-50">
<div class="w-3/6 p-6">
<InputRange
@min={{50}}
@max={{150}}
@value={{this.value}}
@doSetValue={{this.setValue}}
/>
</div>
{{outlet}}
</main>
<div class="Input-Range relative h-4" ...attributes>
<div class="track bg-white border w-full p-1 absolute" {{on "click" this.setValue}}></div>
<div class="value bg-blue-500 w-full p-1 absolute pointer-events-none" style="width:{{this.valueAsPercentage}}%;"></div>
<div class="thumb bg-blue-500 w-4 h-4 rounded-full absolute" style="left: {{this.valueAsPercentage}}%; transform: translateX(-50%) translateY(-4px);"></div>
</div>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-data": "3.18.0",
"ember-truth-helpers": "3.0.0",
"ember-modifier": "3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment