UNPKG

hswidget

Version:
60 lines 6.79 kB
import m from "mithril"; import { EnabledWidget } from './Widget'; import { OnOffButton } from "./Button"; export class OptionButtons extends EnabledWidget { setButton(buttonIndex, newValue) { if (this.enabled) { this.transition(buttonIndex, newValue, this.stateAccess); this.onclick(buttonIndex, newValue, this.stateAccess.map(s => s.getValue())); } } oninit(node) { const s = node.state; s.stateAccess = []; s.onclick = node.attrs.onclick; s.transition = node.attrs.transition ?? OptionButtons.transitions.none; s.setAccessFn = (stateful, buttonIndex) => s.stateAccess[buttonIndex] = stateful; if (node.attrs.remoteSet) { node.attrs.remoteSet((buttonIndex, newValue) => s.setButton.bind(s)(buttonIndex, newValue)); } } view(node) { const s = node.state; const a = node.attrs; this.enable(!node.attrs.disable); return m(`.hs_option_buttons`, this.attrs(a, { style: `grid-template-columns: repeat(${node?.children?.length ?? 0}, 1fr);` }), node.children.map((c, buttonIndex) => m(OnOffButton, { class: `index${buttonIndex}`, initial: Array.isArray(a.initial) ? a.initial[buttonIndex] : (a.initial === buttonIndex ? 1 : 0), onclick: (newValue) => s.setButton.bind(s)(buttonIndex, newValue), stateAccess: (stateful) => s.setAccessFn(stateful, buttonIndex), }, c))); } } OptionButtons.transitions = { none: (buttonIndex, newValue, states) => states.map(s => s.getValue()), radio: (buttonIndex, newValue, states) => states.map((s, i) => s.setValue(i === buttonIndex ? 1 : 0)) }; export class RadioButtons extends OptionButtons { oninit(node) { node.attrs.initial = node.attrs.initial || 0; node.attrs.transition = OptionButtons.transitions.radio; super.oninit(node); } view(node) { node.attrs.class = ['hs_radio_buttons', node.attrs.class].join(' '); return super.view(node); } } export class IconButtons extends EnabledWidget { view(node) { this.enable(!node.attrs.disable); return m(OptionButtons, this.attrs(node.attrs, { class: 'hs_icon_buttons', buttonConstraints: node.attrs.radioMode ? OptionButtons.transitions.radio : OptionButtons.transitions.none, onclick: node.attrs.onclick }), node.children); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3B0aW9uYnV0dG9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9PcHRpb25idXR0b25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDQSxPQUFPLENBQUMsTUFBcUIsU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQTZCLE1BQWEsVUFBVSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTyxVQUFVLENBQUM7QUErQ3hDLE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBYTtJQWdCNUMsU0FBUyxDQUFDLFdBQWtCLEVBQUUsUUFBZTtRQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDaEY7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQW9DO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxRQUFpQixFQUFFLFdBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2pH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