UNPKG

adwaveui

Version:

Interactive Web Components inspired by the Gtk Adwaita theme.

299 lines (297 loc) 14.9 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/components/slider/slider.tsx import { jsx as _jsx, jsxs as _jsxs } from "jsxte/jsx-runtime"; import { Slider } from "adwavecss"; import { Attribute, CustomElement } from "jsxte-wc"; import { BaseElement } from "../../base-elements.mjs"; import "../../index.style.mjs"; import { cls } from "../../utils/cls.mjs"; import { CustomPointerEvent } from "../../utils/events.mjs"; import { changeWithStep, clamp, toPrecision } from "../../utils/math.mjs"; import { stopEvent } from "../../utils/prevent-default.mjs"; import { createRef } from "../../utils/ref.mjs"; import "./slider.style.mjs"; var __esDecorate = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } __name(accept, "accept"); var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function(f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = function(thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var preventDefault = /* @__PURE__ */ __name((e) => { e.preventDefault(); return false; }, "preventDefault"); var SliderChangeEvent = class extends CustomEvent { static { __name(this, "SliderChangeEvent"); } constructor(value) { super("change", { bubbles: true, cancelable: true, detail: { value } }); } }; var ADWaveSliderElement = (() => { let _classDecorators = [CustomElement("adw-slider")]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = BaseElement; let _value_decorators; let _value_initializers = []; let _value_extraInitializers = []; let _min_decorators; let _min_initializers = []; let _min_extraInitializers = []; let _max_decorators; let _max_initializers = []; let _max_extraInitializers = []; let _step_decorators; let _step_initializers = []; let _step_extraInitializers = []; let _precision_decorators; let _precision_initializers = []; let _precision_extraInitializers = []; let _disabled_decorators; let _disabled_initializers = []; let _disabled_extraInitializers = []; let _name_decorators; let _name_initializers = []; let _name_extraInitializers = []; let _form_decorators; let _form_initializers = []; let _form_extraInitializers = []; var ADWaveSliderElement2 = class extends _classSuper { static { __name(this, "ADWaveSliderElement"); } static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _value_decorators = [Attribute({ type: "number", nullable: false, default: 0 })]; _min_decorators = [Attribute({ type: "number", nullable: false, default: 0 })]; _max_decorators = [Attribute({ type: "number", nullable: false, default: 100 })]; _step_decorators = [Attribute({ type: "number", nullable: false, default: 1 })]; _precision_decorators = [Attribute({ type: "number", nullable: false, default: 4 })]; _disabled_decorators = [Attribute({ type: "boolean", nullable: false, default: false })]; _name_decorators = [Attribute({ nullable: true })]; _form_decorators = [Attribute({ nullable: true })]; __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "value" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.value, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.value = value; }, "set") }, metadata: _metadata }, _value_initializers, _value_extraInitializers); __esDecorate(this, null, _min_decorators, { kind: "accessor", name: "min", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "min" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.min, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.min = value; }, "set") }, metadata: _metadata }, _min_initializers, _min_extraInitializers); __esDecorate(this, null, _max_decorators, { kind: "accessor", name: "max", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "max" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.max, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.max = value; }, "set") }, metadata: _metadata }, _max_initializers, _max_extraInitializers); __esDecorate(this, null, _step_decorators, { kind: "accessor", name: "step", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "step" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.step, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.step = value; }, "set") }, metadata: _metadata }, _step_initializers, _step_extraInitializers); __esDecorate(this, null, _precision_decorators, { kind: "accessor", name: "precision", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "precision" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.precision, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.precision = value; }, "set") }, metadata: _metadata }, _precision_initializers, _precision_extraInitializers); __esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "disabled" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.disabled, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.disabled = value; }, "set") }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers); __esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "name" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.name, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.name = value; }, "set") }, metadata: _metadata }, _name_initializers, _name_extraInitializers); __esDecorate(this, null, _form_decorators, { kind: "accessor", name: "form", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "form" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.form, "get"), set: /* @__PURE__ */ __name((obj, value) => { obj.form = value; }, "set") }, metadata: _metadata }, _form_initializers, _form_extraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); ADWaveSliderElement2 = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); } #value_accessor_storage; get value() { return this.#value_accessor_storage; } set value(value) { this.#value_accessor_storage = value; } #min_accessor_storage; get min() { return this.#min_accessor_storage; } set min(value) { this.#min_accessor_storage = value; } #max_accessor_storage; get max() { return this.#max_accessor_storage; } set max(value) { this.#max_accessor_storage = value; } #step_accessor_storage; get step() { return this.#step_accessor_storage; } set step(value) { this.#step_accessor_storage = value; } #precision_accessor_storage; get precision() { return this.#precision_accessor_storage; } set precision(value) { this.#precision_accessor_storage = value; } #disabled_accessor_storage; get disabled() { return this.#disabled_accessor_storage; } set disabled(value) { this.#disabled_accessor_storage = value; } #name_accessor_storage; get name() { return this.#name_accessor_storage; } set name(value) { this.#name_accessor_storage = value; } #form_accessor_storage; get form() { return this.#form_accessor_storage; } set form(value) { this.#form_accessor_storage = value; } constructor() { super(); this.#value_accessor_storage = __runInitializers(this, _value_initializers, 0); this.#min_accessor_storage = (__runInitializers(this, _value_extraInitializers), __runInitializers(this, _min_initializers, 0)); this.#max_accessor_storage = (__runInitializers(this, _min_extraInitializers), __runInitializers(this, _max_initializers, 100)); this.#step_accessor_storage = (__runInitializers(this, _max_extraInitializers), __runInitializers(this, _step_initializers, 1)); this.#precision_accessor_storage = (__runInitializers(this, _step_extraInitializers), __runInitializers(this, _precision_initializers, 4)); this.#disabled_accessor_storage = (__runInitializers(this, _precision_extraInitializers), __runInitializers(this, _disabled_initializers, false)); this.#name_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _name_initializers, null)); this.#form_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _form_initializers, null)); this.progress = (__runInitializers(this, _form_extraInitializers), createRef()); this.thumb = createRef(); this.isPressed = false; this.handlePointerDown = (e) => { e.stopPropagation(); const shouldContinue = this.dispatchEvent(new CustomPointerEvent("pointerdown", {}, e)); if (!shouldContinue || this.disabled) return; if (e.pointerType === "mouse" && e.button !== 0) return; this.isPressed = true; this.handlePointerEventMove(e); return false; }; this.handlePointerEventUp = (e) => { e.stopPropagation(); this.isPressed = false; }; this.handlePointerEventMove = (e) => { e.stopPropagation(); if (this.disabled) return; if (this.isPressed) { const { left, width } = this.getBoundingClientRect(); const percent = (e.clientX - left) / width; const tmpValue = changeWithStep(this.value, toPrecision(this.min + percent * (this.max - this.min), this.precision), this.step); this.setValue(tmpValue); } }; this.handleKeyDown = (e) => { if (this.disabled) return; switch (e.key) { case "ArrowLeft": this.setValue(this.value - this.step); break; case "ArrowRight": this.setValue(this.value + this.step); break; } }; this.effect(() => { if (document) { window.addEventListener("pointerup", this.handlePointerEventUp); window.addEventListener("pointermove", this.handlePointerEventMove); } return () => { window.removeEventListener("pointerup", this.handlePointerEventUp); window.removeEventListener("pointermove", this.handlePointerEventMove); }; }, () => []); this.effect(() => { this.moveThumb(this.value); }, (s) => [s.value]); this.effect(({ isFirstMount }) => { if (isFirstMount) return; this.dispatchEvent(new SliderChangeEvent(this.value)); }, (s) => [s.value]); } setValue(newValue) { const value = clamp(newValue, this.min, this.max); if (this.value === value) return; this.value = value; } moveThumb(value) { const percent = (value - this.min) / (this.max - this.min) * 100; this.progress.current.style.right = `${100 - percent}%`; this.thumb.current.style.left = `calc(${percent}% - 0.3em)`; } render() { return _jsxs("div", { draggable: "false", class: cls({ [Slider.slider]: true, [Slider.disabled]: this.disabled }), onpointerdown: this.handlePointerDown, onpointermove: preventDefault, ondrag: preventDefault, onkeydown: this.handleKeyDown, tabindex: "0", role: "slider", "aria-valuemin": this.min.toString(), "aria-valuemax": this.max.toString(), "aria-valuenow": this.value.toString(), "aria-disabled": this.disabled ? "true" : "false", children: [_jsx("div", { draggable: "false", class: Slider.track, onpointermove: preventDefault, ondrag: preventDefault }), _jsx("div", { ref: this.progress, draggable: "false", class: Slider.progress, onpointermove: preventDefault, ondrag: preventDefault }), _jsx("div", { ref: this.thumb, draggable: "false", class: Slider.thumb, onpointermove: preventDefault, ondrag: preventDefault }), _jsx("input", { type: "range", class: "_adw_hidden", disabled: this.disabled, name: this.name ?? void 0, form: this.form ?? void 0, min: this.min, max: this.max, step: this.step.toString(), value: this.value.toString(), onchange: stopEvent, "aria-hidden": "true" })] }); } }; return ADWaveSliderElement2 = _classThis; })(); export { ADWaveSliderElement };