Sha256: 225527559f555fa491fd111687f75a0baaa7783145b1d100f973de00cf78f0ab
Contents?: true
Size: 1.78 KB
Versions: 60
Compression:
Stored size: 1.78 KB
Contents
import { useClickOutside } from 'stimulus-use'; import SyncedBooleanAttributesController from '../synced_boolean_attributes_controller/synced_boolean_attributes_controller'; class ToggleableController extends SyncedBooleanAttributesController { constructor() { super(...arguments); this.outletUpdate = this.toggle; } connect() { this.syncElementAttributes(); useClickOutside(this, { dispatchEvent: this.closeOnOutsideClickValue && this.stateValue }); } toggle(event, updateTo = {}) { var _a; const v = (_a = updateTo.data) !== null && _a !== void 0 ? _a : !this.stateValue; this.updateAttributesForElement(this.element, v); this.stateValue = v; this.sendToOutlets(event, Object.assign(Object.assign({}, updateTo), { data: v })); } on(event) { this.toggle(event, { data: true }); } off(event) { this.toggle(event, { data: false }); } clickOutside(event) { if (this.closeOnOutsideClickValue && this.stateValue) { this.toggle(event, { data: false }); } } getValueForElement(element) { if (element !== this.element) { return null; } return this.stateValue; } getElementsToSync() { return [this.element]; } getState() { return this.stateValue; } get event_key_postfix() { return this.stateValue ? 'on' : 'off'; } } ToggleableController.outlets = SyncedBooleanAttributesController.outlets; ToggleableController.values = Object.assign(Object.assign({}, SyncedBooleanAttributesController.values), { state: { type: Boolean, default: false, }, closeOnOutsideClick: { type: Boolean, default: false, } }); export default ToggleableController;
Version data entries
60 entries across 60 versions & 1 rubygems