From 2348409e0a6af49c133b0438578b4f8c6423b3d1 Mon Sep 17 00:00:00 2001 From: Florian Hotze Date: Wed, 18 Sep 2024 17:39:01 +0200 Subject: [PATCH] [items] Item: Add increaseValueTo/decreaseValueTo methods (#371) Closes #369. Also: - Make `Item::getToggleState` method private. - Adjust `Item::getToggleState`/`Item::sendToggleCommand` method to `Item.type` changes from a previous PR - Use brightness value of Color Items for `Item::numericState`. --------- Signed-off-by: Florian Hotze --- README.md | 3 + src/items/items.js | 88 ++++++++++++++++--- types/items/items.d.ts | 22 +++-- types/items/items.d.ts.map | 2 +- types/items/metadata/itemchannellink.d.ts | 4 +- types/items/metadata/itemchannellink.d.ts.map | 2 +- types/items/metadata/metadata.d.ts | 4 +- types/items/metadata/metadata.d.ts.map | 2 +- types/quantity.d.ts | 8 +- types/quantity.d.ts.map | 2 +- types/rules/operation-builder.d.ts | 4 +- types/rules/operation-builder.d.ts.map | 2 +- types/triggers.d.ts | 4 +- types/triggers.d.ts.map | 2 +- 14 files changed, 116 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 3918eff41..a00d95d5b 100644 --- a/README.md +++ b/README.md @@ -406,6 +406,9 @@ Calling `getItem(...)` or `...` returns an `Item` object with the following prop - .removeMetadata(namespace) ⇒ `object|null` - .sendCommand(value): `value` can be a string, a [`time.ZonedDateTime`](#time) or a [`Quantity`](#quantity) - .sendCommandIfDifferent(value) ⇒ `boolean`: `value` can be a string, a [`time.ZonedDateTime`](#time) or a [`Quantity`](#quantity) + - .sendIncreaseCommand(value) ⇒ `boolean`: `value` can be a number, or a [`Quantity`](#quantity) + - .sendDecreaseCommand(value) ⇒ `boolean`: `value` can be a number, or a [`Quantity`](#quantity) + - .sendToggleCommand(): Sends a command to flip the Item's state (e.g. if it is 'ON' an 'OFF' command is sent). - .postUpdate(value): `value` can be a string, a [`time.ZonedDateTime`](#time) or a [`Quantity`](#quantity) - .addGroups(...groupNamesOrItems) - .removeGroups(...groupNamesOrItems) diff --git a/src/items/items.js b/src/items/items.js index 0b1097413..b30eb664c 100644 --- a/src/items/items.js +++ b/src/items/items.js @@ -10,7 +10,7 @@ const log = require('../log')('items'); const { _toOpenhabPrimitiveType, _isQuantity, _isItem } = require('../helpers'); const { getQuantity, QuantityError } = require('../quantity'); -const { UnDefType, OnOffType, events, itemRegistry } = require('@runtime'); +const { OnOffType, PercentType, UnDefType, events, itemRegistry } = require('@runtime'); const metadata = require('./metadata/metadata'); const ItemPersistence = require('./item-persistence'); @@ -124,7 +124,9 @@ class Item { * @type {number|null} */ get numericState () { - const numericState = parseFloat(this.rawState.toString()); + let state = this.rawState.toString(); + if (this.type === 'Color') state = this.rawItem.getStateAs(PercentType).toString(); + const numericState = parseFloat(state); return isNaN(numericState) ? null : numericState; } @@ -247,7 +249,7 @@ class Item { sendCommandIfDifferent (value) { // value and current state both are Quantity and have equal value if (_isQuantity(value) && this.quantityState !== null) { - if (this.quantityState.equal(value)) { + if (value.equal(this.quantityState)) { return false; } } @@ -271,20 +273,79 @@ class Item { } /** - * Calculates the toggled state of this Item. For Items like Color and - * Dimmer, getStateAs(OnOffType) is used and the toggle calculated off - * of that. + * Increase the value of this Item to the given value by sending a command, but only if the current state is less than that value. + * + * @param {number|Quantity|HostState} value the value of the command to send, such as 'ON' + * @return {boolean} true if the command was sent, false otherwise + */ + sendIncreaseCommand (value) { + // value and current state both are Quantity and value is less than or equal current state + if (_isQuantity(value) && this.quantityState !== null) { + if (value.lessThanOrEqual(this.quantityState)) { + log.debug('sendIncreaseCommand: Ignoring command {} for Item {} with state {}', value, this.name, this.state); + return false; + } + } + + // value and current state are both numeric and value is less than or equal current state + if (typeof value === 'number' && this.numericState !== null) { + if (value <= this.numericState) { + log.debug('sendIncreaseCommand: Ignoring command {} for Item {} with state {}', value, this.name, this.state); + return false; + } + } + + // else send the command + log.debug('sendIncreaseCommand: Sending command {} to Item {} with state {}', value, this.name, this.state); + this.sendCommand(value); + return true; + } + + /** + * Decreases the value of this Item to the given value by sending a command, but only if the current state is greater than that value. + * + * @param {number|Quantity|HostState} value the value of the command to send, such as 'ON' + * @return {boolean} true if the command was sent, false otherwise + */ + sendDecreaseCommand (value) { + // value and current state both are Quantity and value is greater than or equal current state + if (_isQuantity(value) && this.quantityState !== null) { + if (value.greaterThanOrEqual(this.quantityState)) { + log.debug('sendDecreaseCommand: Ignoring command {} for Item {} with state {}', value, this.name, this.state); + return false; + } + } + + // value and current state are both numeric and value is greater than or equal current state + if (typeof value === 'number' && this.numericState !== null) { + if (value >= this.numericState) { + log.debug('sendDecreaseCommand: Ignoring command {} for Item {} with state {}', value, this.name, this.state); + return false; + } + } + + // else send the command + log.debug('sendDecreaseCommand: Sending command {} to Item {} with state {}', value, this.name, this.state); + this.sendCommand(value); + return true; + } + + /** + * Calculates the toggled state of this Item. + * For Items like Color and Dimmer, getStateAs(OnOffType) is used and the toggle calculated of that. + * + * @private * @returns the toggled state (e.g. 'OFF' if the Item is 'ON') * @throws error if the Item is uninitialized or is a type that doesn't make sense to toggle */ - getToggleState () { + #getToggleState () { if (this.isUninitialized) { throw Error('Cannot toggle uninitialized Items'); } switch (this.type) { - case 'PlayerItem' : + case 'Player' : return this.state === 'PAUSE' ? 'PLAY' : 'PAUSE'; - case 'ContactItem' : + case 'Contact' : return this.state === 'OPEN' ? 'CLOSED' : 'OPEN'; default: { const oldState = this.rawItem.getStateAs(OnOffType); @@ -298,15 +359,14 @@ class Item { } /** - * Sends a command to flip the Item's state (e.g. if it is 'ON' an 'OFF' - * command is sent). + * Sends a command to flip the Item's state (e.g. if it is 'ON' an 'OFF' command is sent). * @throws error if the Item is uninitialized or a type that cannot be toggled or commanded */ sendToggleCommand () { - if (this.type === 'ContactItem') { + if (this.type === 'Contact') { throw Error('Cannot command Contact Items'); } - this.sendCommand(this.getToggleState()); + this.sendCommand(this.#getToggleState()); } /** @@ -315,7 +375,7 @@ class Item { * @throws error if the Item is uninitialized or a type that cannot be toggled */ postToggleUpdate () { - this.postUpdate(this.getToggleState()); + this.postUpdate(this.#getToggleState()); } /** diff --git a/types/items/items.d.ts b/types/items/items.d.ts index e130236d3..c75d4fba6 100644 --- a/types/items/items.d.ts +++ b/types/items/items.d.ts @@ -254,16 +254,21 @@ export class Item { */ sendCommandIfDifferent(value: string | number | time.ZonedDateTime | Quantity | HostState): boolean; /** - * Calculates the toggled state of this Item. For Items like Color and - * Dimmer, getStateAs(OnOffType) is used and the toggle calculated off - * of that. - * @returns the toggled state (e.g. 'OFF' if the Item is 'ON') - * @throws error if the Item is uninitialized or is a type that doesn't make sense to toggle + * Increase the value of this Item to the given value by sending a command, but only if the current state is less than that value. + * + * @param {number|Quantity|HostState} value the value of the command to send, such as 'ON' + * @return {boolean} true if the command was sent, false otherwise + */ + sendIncreaseCommand(value: number | Quantity | HostState): boolean; + /** + * Decreases the value of this Item to the given value by sending a command, but only if the current state is greater than that value. + * + * @param {number|Quantity|HostState} value the value of the command to send, such as 'ON' + * @return {boolean} true if the command was sent, false otherwise */ - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendDecreaseCommand(value: number | Quantity | HostState): boolean; /** - * Sends a command to flip the Item's state (e.g. if it is 'ON' an 'OFF' - * command is sent). + * Sends a command to flip the Item's state (e.g. if it is 'ON' an 'OFF' command is sent). * @throws error if the Item is uninitialized or a type that cannot be toggled or commanded */ sendToggleCommand(): void; @@ -312,6 +317,7 @@ export class Item { */ removeTags(...tagNames: string[]): void; toString(): any; + #private; } import metadata = require("./metadata/metadata"); import TimeSeries = require("./time-series"); diff --git a/types/items/items.d.ts.map b/types/items/items.d.ts.map index 35698ed69..66bec64c0 100644 --- a/types/items/items.d.ts.map +++ b/types/items/items.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../src/items/items.js"],"names":[],"mappings":";;;;;;;UAwBc,MAAM;;;;UACN,MAAM;;;;YACN,MAAM;;;;eACN,MAAM;;;;aACN,MAAM,EAAE;;;;WACR,MAAM,EAAE;;;;eACR,MAAM,MAAO;;;;;;;;iBAEb,MAAM;;;;;;;;;;uBAYP,OAAO,aAAa,EAAE,QAAQ;AA2jB3C;;;;;GAKG;AACH,gCAHW,MAAM,GACJ,MAAM,CAIa;AA/DhC;;;;;GAKG;AACH,iCAHW,MAAM,GACJ,OAAO,CASnB;AAED;;;;;;GAMG;AACH,8BAJW,MAAM,kBACN,OAAO,GACL,IAAI,CAYhB;AAED;;;;;GAKG;AACH,4BAFa,IAAI,EAAE,CAIlB;AAzJD;;;;;;;;;;;GAWG;AACH,oCALW,UAAU,GACR,IAAI,CA+BhB;AAoHD;;;;;;GAMG;AACH,2CAHW,MAAM,EAAE,GACN,IAAI,EAAE,CAIlB;AA7ED;;;;;;;;;;;;;;GAcG;AACH,wCALW,UAAU,GACR,IAAI,GAAC,IAAI,CAWrB;AApED;;;;;;GAMG;AACH,2CAHW,MAAM,GAAC,IAAI,GACT,IAAI,GAAC,IAAI,CAuCrB;AA/dD;;;;GAIG;AACH;IACE;;;;OAIG;IACH,+BAqBC;IAjBC;;;OAGG;IACH,kBAAsB;IAEtB;;;OAGG;IACH,aAFU,eAAe,CAEsB;IAE/C;;;OAGG;IACH,WAFU,aAAa,CAE6B;IAGtD;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,2BAGC;IAED;;;OAGG;IACH,oDAWC;IAED;;;OAGG;IACH,0BAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,0BAEC;IAED;;;OAGG;IACH,+BASC;IAED;;;;;;;;;;;;;OAaG;IACH,wBAHW,MAAM,GACJ;QAAE,SAAS,EAAE,YAAY,CAAA;KAAE,GAAC,YAAY,GAAC,IAAI,CAIzD;IAED;;;;;;;;OAQG;IACH,2BALW,MAAM,SACN,MAAM,kBACN,MAAM,GACJ;QAAC,aAAa,MAAI;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,GAAC,IAAI,CAIlD;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,GACJ,YAAY,GAAC,IAAI,CAI7B;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,QAM7D;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,GACjD,OAAO,CA2BnB;IAED;;;;;;OAMG;IACH,sEAkBC;IAED;;;;OAIG;IACH,0BAKC;IAED;;;;OAIG;IACH,yBAEC;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,QAM7D;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,6CAIC;IAED;;;OAGG;IACH,gDAMC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,qBAFc,MAAM,UAKnB;IAED;;;OAGG;IACH,wBAFc,MAAM,UAOnB;IAED,gBAEC;CACF;;;;;;yBAhWY,OAAO,eAAe,EAAE,aAAa"} \ No newline at end of file +{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../src/items/items.js"],"names":[],"mappings":";;;;;;;UAwBc,MAAM;;;;UACN,MAAM;;;;YACN,MAAM;;;;eACN,MAAM;;;;aACN,MAAM,EAAE;;;;WACR,MAAM,EAAE;;;;eACR,MAAM,MAAO;;;;;;;;iBAEb,MAAM;;;;;;;;;;uBAYP,OAAO,aAAa,EAAE,QAAQ;AAunB3C;;;;;GAKG;AACH,gCAHW,MAAM,GACJ,MAAM,CAIa;AA/DhC;;;;;GAKG;AACH,iCAHW,MAAM,GACJ,OAAO,CASnB;AAED;;;;;;GAMG;AACH,8BAJW,MAAM,kBACN,OAAO,GACL,IAAI,CAYhB;AAED;;;;;GAKG;AACH,4BAFa,IAAI,EAAE,CAIlB;AAzJD;;;;;;;;;;;GAWG;AACH,oCALW,UAAU,GACR,IAAI,CA+BhB;AAoHD;;;;;;GAMG;AACH,2CAHW,MAAM,EAAE,GACN,IAAI,EAAE,CAIlB;AA7ED;;;;;;;;;;;;;;GAcG;AACH,wCALW,UAAU,GACR,IAAI,GAAC,IAAI,CAWrB;AApED;;;;;;GAMG;AACH,2CAHW,MAAM,GAAC,IAAI,GACT,IAAI,GAAC,IAAI,CAuCrB;AA3hBD;;;;GAIG;AACH;IACE;;;;OAIG;IACH,+BAqBC;IAjBC;;;OAGG;IACH,kBAAsB;IAEtB;;;OAGG;IACH,aAFU,eAAe,CAEsB;IAE/C;;;OAGG;IACH,WAFU,aAAa,CAE6B;IAGtD;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,2BAKC;IAED;;;OAGG;IACH,oDAWC;IAED;;;OAGG;IACH,0BAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,0BAEC;IAED;;;OAGG;IACH,+BASC;IAED;;;;;;;;;;;;;OAaG;IACH,wBAHW,MAAM,GACJ;QAAE,SAAS,EAAE,YAAY,CAAA;KAAE,GAAC,YAAY,GAAC,IAAI,CAIzD;IAED;;;;;;;;OAQG;IACH,2BALW,MAAM,SACN,MAAM,kBACN,MAAM,GACJ;QAAC,aAAa,MAAI;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,GAAC,IAAI,CAIlD;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,GACJ,YAAY,GAAC,IAAI,CAI7B;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,QAM7D;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,GACjD,OAAO,CA2BnB;IAED;;;;;OAKG;IACH,2BAHW,MAAM,GAAC,QAAQ,YAAU,GACxB,OAAO,CAuBlB;IAED;;;;;OAKG;IACH,2BAHW,MAAM,GAAC,QAAQ,YAAU,GACxB,OAAO,CAuBlB;IA8BD;;;OAGG;IACH,0BAKC;IAED;;;;OAIG;IACH,yBAEC;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,GAAC,MAAM,GAAC,KAAK,aAAa,GAAC,QAAQ,YAAU,QAM7D;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,6CAIC;IAED;;;OAGG;IACH,gDAMC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,qBAFc,MAAM,UAKnB;IAED;;;OAGG;IACH,wBAFc,MAAM,UAOnB;IAED,gBAEC;;CACF;;;;;;yBA5ZY,OAAO,eAAe,EAAE,aAAa"} \ No newline at end of file diff --git a/types/items/metadata/itemchannellink.d.ts b/types/items/metadata/itemchannellink.d.ts index a93833bc5..f5f45d220 100644 --- a/types/items/metadata/itemchannellink.d.ts +++ b/types/items/metadata/itemchannellink.d.ts @@ -31,7 +31,9 @@ export type Item = { }; sendCommand(value: any): void; sendCommandIfDifferent(value: any): boolean; - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendIncreaseCommand(value: any): boolean; + sendDecreaseCommand(value: any): boolean; + "__#5@#getToggleState"(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; sendToggleCommand(): void; postToggleUpdate(): void; postUpdate(value: any): void; diff --git a/types/items/metadata/itemchannellink.d.ts.map b/types/items/metadata/itemchannellink.d.ts.map index a49fe3aa9..6768e8df8 100644 --- a/types/items/metadata/itemchannellink.d.ts.map +++ b/types/items/metadata/itemchannellink.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"itemchannellink.d.ts","sourceRoot":"","sources":["../../../src/items/metadata/itemchannellink.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA;;;;;;;GAOG;AACH,+CAJW,IAAI,GAAC,MAAM,cACX,MAAM;cACO,MAAM;;gBAAgC,MAAM;EAYnE;AA2CD;;;;;;;;GAQG;AACH,mDALW,IAAI,GAAC,MAAM,cACX,MAAM,SACN,MAAM;cACO,MAAM;mBAAiB,MAAM;gBAAc,MAAM;EAWxE;AAED;;;;;;;GAOG;AACH,kDAJW,IAAI,GAAC,MAAM,cACX,MAAM;cACO,MAAM;mBAAiB,MAAM;gBAAc,MAAM;EAYxE;AAED;;;;;;GAMG;AACH,6CAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,kDAFa,MAAM,CAIlB"} \ No newline at end of file +{"version":3,"file":"itemchannellink.d.ts","sourceRoot":"","sources":["../../../src/items/metadata/itemchannellink.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA;;;;;;;GAOG;AACH,+CAJW,IAAI,GAAC,MAAM,cACX,MAAM;cACO,MAAM;;gBAAgC,MAAM;EAYnE;AA2CD;;;;;;;;GAQG;AACH,mDALW,IAAI,GAAC,MAAM,cACX,MAAM,SACN,MAAM;cACO,MAAM;mBAAiB,MAAM;gBAAc,MAAM;EAWxE;AAED;;;;;;;GAOG;AACH,kDAJW,IAAI,GAAC,MAAM,cACX,MAAM;cACO,MAAM;mBAAiB,MAAM;gBAAc,MAAM;EAYxE;AAED;;;;;;GAMG;AACH,6CAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,kDAFa,MAAM,CAIlB"} \ No newline at end of file diff --git a/types/items/metadata/metadata.d.ts b/types/items/metadata/metadata.d.ts index b0fe146f7..0ee9463b3 100644 --- a/types/items/metadata/metadata.d.ts +++ b/types/items/metadata/metadata.d.ts @@ -22,7 +22,9 @@ export type Item = { removeMetadata(namespace?: string): ItemMetadata; sendCommand(value: any): void; sendCommandIfDifferent(value: any): boolean; - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendIncreaseCommand(value: any): boolean; + sendDecreaseCommand(value: any): boolean; + "__#5@#getToggleState"(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; sendToggleCommand(): void; postToggleUpdate(): void; postUpdate(value: any): void; diff --git a/types/items/metadata/metadata.d.ts.map b/types/items/metadata/metadata.d.ts.map index dc6449e78..5461daa25 100644 --- a/types/items/metadata/metadata.d.ts.map +++ b/types/items/metadata/metadata.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/items/metadata/metadata.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA;;;;;;;;;;;;;;;GAeG;AACH,wCAJW,IAAI,GAAC,MAAM,cACX,MAAM,GACJ;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,GAAC,YAAY,GAAC,IAAI,CAMzD;AAED;;;;;;;;;;GAUG;AACH,4CANW,IAAI,GAAC,MAAM,aAA4D,MAAM,SAE7E,MAAM,kBACN,MAAM,GACJ,YAAY,GAAC,IAAI,CAQ7B;AAED;;;;;;;;GAQG;AACH,2CAJW,IAAI,GAAC,MAAM,cACX,MAAM,GACJ,YAAY,GAAC,IAAI,CAa7B;AAzHD;;;;;GAKG;AACH;IACE;;OAEG;IACH,8BAWC;IAVC;;;OAGG;IACH,OAFU,MAAM,CAEmB;IACnC;;;OAGG;IACH,eAFU,MAAM,CAEyD;CAE5E"} \ No newline at end of file +{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/items/metadata/metadata.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA;;;;;;;;;;;;;;;GAeG;AACH,wCAJW,IAAI,GAAC,MAAM,cACX,MAAM,GACJ;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,GAAC,YAAY,GAAC,IAAI,CAMzD;AAED;;;;;;;;;;GAUG;AACH,4CANW,IAAI,GAAC,MAAM,aAA4D,MAAM,SAE7E,MAAM,kBACN,MAAM,GACJ,YAAY,GAAC,IAAI,CAQ7B;AAED;;;;;;;;GAQG;AACH,2CAJW,IAAI,GAAC,MAAM,cACX,MAAM,GACJ,YAAY,GAAC,IAAI,CAa7B;AAzHD;;;;;GAKG;AACH;IACE;;OAEG;IACH,8BAWC;IAVC;;;OAGG;IACH,OAFU,MAAM,CAEmB;IACnC;;;OAGG;IACH,eAFU,MAAM,CAEyD;CAE5E"} \ No newline at end of file diff --git a/types/quantity.d.ts b/types/quantity.d.ts index 5898c6aef..d62b301cd 100644 --- a/types/quantity.d.ts +++ b/types/quantity.d.ts @@ -1,6 +1,10 @@ export type Item = { rawItem: HostItem; persistence: import("./items/item-persistence"); + /** + * QuantityError is thrown when {@link Quantity} creation or operation fails. + * It is used to wrap the underlying Java Exceptions and add some additional information and a JS stacktrace to it. + */ semantics: import("./items/item-semantics"); readonly type: string; readonly name: string; @@ -31,7 +35,9 @@ export type Item = { }; sendCommand(value: any): void; sendCommandIfDifferent(value: any): boolean; - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendIncreaseCommand(value: any): boolean; + sendDecreaseCommand(value: any): boolean; + "__#5@#getToggleState"(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; sendToggleCommand(): void; postToggleUpdate(): void; postUpdate(value: any): void; diff --git a/types/quantity.d.ts.map b/types/quantity.d.ts.map index 80349afcf..804fdc37a 100644 --- a/types/quantity.d.ts.map +++ b/types/quantity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../src/quantity.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqSA;;;;;;;;GAQG;AACH,mCALW,IAAI,GAAC,MAAM,GAAC,QAAQ,MAAa,GAC/B,QAAQ,CAMpB;AAvND;;;;;;;GAOG;AACH;IACE;;OAEG;IACH,mBAFW,IAAI,GAAC,MAAM,GAAC,QAAQ,MAAa,EAgB3C;IAZG;;;OAGG;IACH,mBAAuB;IAU3B;;;OAGG;IACH,wBAEC;IAED;;;OAGG;IACH,mBAGC;IAED;;;OAGG;IACH,qBAIC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,kBAEC;IAED;;;;;OAKG;IACH,WAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,QAAQ,CAKpB;IAED;;;;;;;;;OASG;IACH,cAHW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,QAAQ,CAKpB;IAED;;;;;;;;;OASG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,QAAQ,CAKpB;IAED;;;;;OAKG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,QAAQ,CAKpB;IAED;;;;;;OAMG;IACH,aAJW,MAAM,GACJ,QAAQ,GAAC,IAAI,CAezB;IAED;;;;;OAKG;IACH,aAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,mBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,0BAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,uBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED,gBAEC;CACF;AAxND;;;GAGG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAKhB;CACF;AA9CD;;;;;;;;GAQG;AACH,kCAPW,IAAI,GAAC,MAAM,GAAC,QAAQ,aACpB,MAAM,OA6BhB;AAjED;;;GAGG;AAEH;;;;;;;;GAQG;AACH,8CANW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,oBAAuB,CAsBnC"} \ No newline at end of file +{"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../src/quantity.js"],"names":[],"mappings":";;;IA2EA;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuNH;;;;;;;;GAQG;AACH,mCALW,IAAI,GAAC,MAAM,GAAC,QAAQ,MAAa,GAC/B,QAAQ,CAMpB;AAvND;;;;;;;GAOG;AACH;IACE;;OAEG;IACH,mBAFW,IAAI,GAAC,MAAM,GAAC,QAAQ,MAAa,EAgB3C;IAZG;;;OAGG;IACH,mBAAuB;IAU3B;;;OAGG;IACH,wBAEC;IAED;;;OAGG;IACH,mBAGC;IAED;;;OAGG;IACH,qBAIC;IAED;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,kBAEC;IAED;;;;;OAKG;IACH,WAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,QAAQ,CAKpB;IAED;;;;;;;;;OASG;IACH,cAHW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,QAAQ,CAKpB;IAED;;;;;;;;;OASG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,QAAQ,CAKpB;IAED;;;;;OAKG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,QAAQ,CAKpB;IAED;;;;;;OAMG;IACH,aAJW,MAAM,GACJ,QAAQ,GAAC,IAAI,CAezB;IAED;;;;;OAKG;IACH,aAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,mBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,0BAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,gBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED;;;;;OAKG;IACH,uBAHW,IAAI,GAAC,MAAM,GAAC,QAAQ,GAClB,OAAO,CAKnB;IAED,gBAEC;CACF;AAxND;;;GAGG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAKhB;CACF;AA9CD;;;;;;;;GAQG;AACH,kCAPW,IAAI,GAAC,MAAM,GAAC,QAAQ,aACpB,MAAM,OA6BhB;AAjED;;;GAGG;AAEH;;;;;;;;GAQG;AACH,8CANW,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,QAAQ,GACzB,oBAAuB,CAsBnC"} \ No newline at end of file diff --git a/types/rules/operation-builder.d.ts b/types/rules/operation-builder.d.ts index f417d5aae..3de7748fa 100644 --- a/types/rules/operation-builder.d.ts +++ b/types/rules/operation-builder.d.ts @@ -31,7 +31,9 @@ export type Item = { }; sendCommand(value: any): void; sendCommandIfDifferent(value: any): boolean; - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendIncreaseCommand(value: any): boolean; + sendDecreaseCommand(value: any): boolean; + "__#5@#getToggleState"(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; sendToggleCommand(): void; postToggleUpdate(): void; postUpdate(value: any): void; diff --git a/types/rules/operation-builder.d.ts.map b/types/rules/operation-builder.d.ts.map index 246e35dd1..0ec1163b2 100644 --- a/types/rules/operation-builder.d.ts.map +++ b/types/rules/operation-builder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"operation-builder.d.ts","sourceRoot":"","sources":["../../src/rules/operation-builder.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6SA;;;;;;GAMG;AACH;IACE,+FAWC;IATC,eAAe;IACf,kBAA0B;IAExB,YAA4B;IAC5B,cAA6C;IAOjD;;;;;SAKK;IACL,sBAHa,IAAI,EAAE,GAAG,MAAM,EAAE,GACf,4BAA4B,CAK1C;IAFC,8BAA8E;IAIhF;;;;;SAKK;IACL,mBAHa,IAAI,GAAG,MAAM,GACX,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,gBAFe,4BAA4B,CAK1C;IAFC,UAAgB;IAIlB,eAAe;IACf,aAYC;IAED,eAAe;IACf,kBAEC;IAED,eAAe;IACf,iBAMC;CACF;AA0CD;;;;;;GAMG;AACH;IACE,iFAeC;IATC,eAAe;IACf,oCAA2D;IAC3D,eAAe;IACf,oBAA4F;IAE5F,eAAe;IACf,kBAAmD;IACnD,eAAe;IACf,iBAA8E;IAGhF,eAAe;IACf,sBAYC;IAED,eAAe;IACf,qBAMC;IAED,eAAe;IACf,mBAEC;IADC,6BAAsD;IAGxD,oBAIC;CACF;AAnGD;;;;;;GAMG;AACH;IAGI,eAAe;IACf,aAAgB;IAChB,uBAAuB;IACvB,iBAGC;IACD,uBAAuB;IACvB,cAGC;IACD,eAAe;IACf,aAAuE;IACvE,eAAe;IACf,kBAA2B;IAC3B,eAAe;IACf,iBAAmG;IAGrG;;;;SAIK;IACL,YAFe,4BAA4B,CAI1C;CACF;AApOD;;;;;;GAMG;AACH;IACE;;;;;SAKK;IACL,yCAHa,OAAO,EAMnB;IADC,cAAgB;IAGlB;;;;;SAKK;IACL,mBAHa,MAAM,GACJ,kBAAkB,CAKhC;IAFC,kBAAyB;IAI3B;;;;;SAKK;IACL,iBAHa,MAAM,GACJ,kBAAkB,CAKhC;IAFC,gBAAuB;IAIzB;;;SAGK;IACL,OAFe,kBAAkB,CAMhC;IAFC,uBAAgB;IAIlB;;;;;SAKK;IACL,aA2BC;IAED;;;;;SAKK;IACL,kBAEC;IAED;;;;;SAKK;IACL,iBAEC;CACF;AAxSD;;;GAGG;AAEH;;;GAGG;AACH;IACE,mCAKC;IAJC,eAAe;IACf,iBAAuB;IACvB,eAAe;IACf,YAAa;IAGf,eAAe;IACf,mBAIC;IAED,eAAe;IACf,cAMC;IAED;;;;;;;SAOK;IACL,aALa,MAAM,gBACN,MAAM,SACN,aAAa,OACb,MAAM,QAOlB;IAED;;;;;SAKK;IACL,eAHa,MAAM,GACJ,gBAAgB,CAK9B;IAFC,cAAkB;IAIpB;;;;;QAKI;IACJ,cAHY,MAAM,GACJ,4BAA4B,CAKzC;IAED;;;;;SAKK;IACL,mBAHa,MAAM,GACJ,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,WAFe,4BAA4B,CAK1C;IAED;;;;;SAKK;IACL,cAFe,eAAe,CAK7B;IAED;;;;;;SAMK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;;;SAMK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;;SAKK;IACL,aAFe,kBAAkB,CAKhC;IAED;;;;;SAKK;IACL,oBAFe,kBAAkB,CAKhC;CACF;AAED;;;GAGG;AACH;IACE,mCAEC;IADC,sBAAwC;IAG1C;;;;;SAKK;IACL,eAHa,MAAM,GACJ,gBAAgB,CAK9B;IAFC,cAAkB;IAIpB;;;;;;;SAOK;IACL,aALa,MAAM,gBACN,MAAM,SACN,aAAa,OACb,MAAM,QAIlB;CACF"} \ No newline at end of file +{"version":3,"file":"operation-builder.d.ts","sourceRoot":"","sources":["../../src/rules/operation-builder.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6SA;;;;;;GAMG;AACH;IACE,+FAWC;IATC,eAAe;IACf,kBAA0B;IAExB,YAA4B;IAC5B,cAA6C;IAOjD;;;;;SAKK;IACL,sBAHa,IAAI,EAAE,GAAG,MAAM,EAAE,GACf,4BAA4B,CAK1C;IAFC,8BAA8E;IAIhF;;;;;SAKK;IACL,mBAHa,IAAI,GAAG,MAAM,GACX,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,gBAFe,4BAA4B,CAK1C;IAFC,UAAgB;IAIlB,eAAe;IACf,aAYC;IAED,eAAe;IACf,kBAEC;IAED,eAAe;IACf,iBAMC;CACF;AA0CD;;;;;;GAMG;AACH;IACE,iFAeC;IATC,eAAe;IACf,oCAA2D;IAC3D,eAAe;IACf,oBAA4F;IAE5F,eAAe;IACf,kBAAmD;IACnD,eAAe;IACf,iBAA8E;IAGhF,eAAe;IACf,sBAYC;IAED,eAAe;IACf,qBAMC;IAED,eAAe;IACf,mBAEC;IADC,6BAAsD;IAGxD,oBAIC;CACF;AAnGD;;;;;;GAMG;AACH;IAGI,eAAe;IACf,aAAgB;IAChB,uBAAuB;IACvB,iBAGC;IACD,uBAAuB;IACvB,cAGC;IACD,eAAe;IACf,aAAuE;IACvE,eAAe;IACf,kBAA2B;IAC3B,eAAe;IACf,iBAAmG;IAGrG;;;;SAIK;IACL,YAFe,4BAA4B,CAI1C;CACF;AApOD;;;;;;GAMG;AACH;IACE;;;;;SAKK;IACL,yCAHa,OAAO,EAMnB;IADC,cAAgB;IAGlB;;;;;SAKK;IACL,mBAHa,MAAM,GACJ,kBAAkB,CAKhC;IAFC,kBAAyB;IAI3B;;;;;SAKK;IACL,iBAHa,MAAM,GACJ,kBAAkB,CAKhC;IAFC,gBAAuB;IAIzB;;;SAGK;IACL,OAFe,kBAAkB,CAMhC;IAFC,uBAAgB;IAIlB;;;;;SAKK;IACL,aA2BC;IAED;;;;;SAKK;IACL,kBAEC;IAED;;;;;SAKK;IACL,iBAEC;CACF;AAxSD;;;GAGG;AAEH;;;GAGG;AACH;IACE,mCAKC;IAJC,eAAe;IACf,iBAAuB;IACvB,eAAe;IACf,YAAa;IAGf,eAAe;IACf,mBAIC;IAED,eAAe;IACf,cAMC;IAED;;;;;;;SAOK;IACL,aALa,MAAM,gBACN,MAAM,SACN,aAAa,OACb,MAAM,QAOlB;IAED;;;;;SAKK;IACL,eAHa,MAAM,GACJ,gBAAgB,CAK9B;IAFC,cAAkB;IAIpB;;;;;QAKI;IACJ,cAHY,MAAM,GACJ,4BAA4B,CAKzC;IAED;;;;;SAKK;IACL,mBAHa,MAAM,GACJ,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;SAIK;IACL,WAFe,4BAA4B,CAK1C;IAED;;;;;SAKK;IACL,cAFe,eAAe,CAK7B;IAED;;;;;;SAMK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;;;SAMK;IACL,UAFe,4BAA4B,CAK1C;IAED;;;;;SAKK;IACL,aAFe,kBAAkB,CAKhC;IAED;;;;;SAKK;IACL,oBAFe,kBAAkB,CAKhC;CACF;AAED;;;GAGG;AACH;IACE,mCAEC;IADC,sBAAwC;IAG1C;;;;;SAKK;IACL,eAHa,MAAM,GACJ,gBAAgB,CAK9B;IAFC,cAAkB;IAIpB;;;;;;;SAOK;IACL,aALa,MAAM,gBACN,MAAM,SACN,aAAa,OACb,MAAM,QAIlB;CACF"} \ No newline at end of file diff --git a/types/triggers.d.ts b/types/triggers.d.ts index e5d093d25..6e5944295 100644 --- a/types/triggers.d.ts +++ b/types/triggers.d.ts @@ -31,7 +31,9 @@ export type Item = { }; sendCommand(value: any): void; sendCommandIfDifferent(value: any): boolean; - getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; + sendIncreaseCommand(value: any): boolean; + sendDecreaseCommand(value: any): boolean; + "__#5@#getToggleState"(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF"; sendToggleCommand(): void; postToggleUpdate(): void; postUpdate(value: any): void; diff --git a/types/triggers.d.ts.map b/types/triggers.d.ts.map index f81a8ef27..bdd2aa93c 100644 --- a/types/triggers.d.ts.map +++ b/types/triggers.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../src/triggers.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;;;;;;;;;;;GAWG;AACH,6CALW,MAAM,SACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;;;;GAcG;AACH,mDALW,IAAI,GAAC,MAAM,aACX,MAAM,aACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;GAWG;AACH,mDAJW,IAAI,GAAC,MAAM,UACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,+CAJW,IAAI,GAAC,MAAM,YACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,qDALW,IAAI,GAAC,MAAM,aACX,MAAM,aACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;GAUG;AACH,qDAJW,IAAI,GAAC,MAAM,UACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;GAUG;AACH,iDAJW,IAAI,GAAC,MAAM,YACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;GAUG;AACH,mDAJW,MAAM,WACN,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,mDALW,MAAM,WACN,MAAM,mBACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;;;GAaG;AACH,oDAHW,MAAM,GAAC,MAAM,gBACb,MAAM,eAKb;AAEJ;;;;;;;;;GASG;AACH,+CAHW,MAAM,gBACN,MAAM,eAKb;AA2CJ;;;;;;;;;;;;;;;;;GAiBG;AACH,gDALW,MAAM,eACN,MAAM,cACN,MAAM,GAAC,MAAM,EAAE,gBACf,MAAM,eAQb;AAjEJ;;;;;;;;;GASG;AACH,uCAHW,MAAM,gBACN,MAAM,eAKb;AAEJ;;;;;;;;;;;GAWG;AACH,4CALW,IAAI,GAAC,MAAM,aACX,OAAO,WACP,MAAM,gBACN,MAAM,eAchB;AA4BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,0CAPW,MAAM,YACN,MAAM,iBACN,MAAM,iBACN,MAAM,kBACN,MAAM,gBACN,MAAM,eASb;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,sCAhBW,MAAM,gBACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,mBACN,MAAM,aACN,MAAM,gBACN,MAAM,qBACN,MAAM,qBACN,MAAM,mBACN,MAAM,mBACN,MAAM,mBACN,MAAM,uBACN,MAAM,gBACN,MAAM,eAkBb"} \ No newline at end of file +{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../src/triggers.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;;;;;;;;;;;GAWG;AACH,6CALW,MAAM,SACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;;;;GAcG;AACH,mDALW,IAAI,GAAC,MAAM,aACX,MAAM,aACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;GAWG;AACH,mDAJW,IAAI,GAAC,MAAM,UACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,+CAJW,IAAI,GAAC,MAAM,YACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,qDALW,IAAI,GAAC,MAAM,aACX,MAAM,aACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;GAUG;AACH,qDAJW,IAAI,GAAC,MAAM,UACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;GAUG;AACH,iDAJW,IAAI,GAAC,MAAM,YACX,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;GAUG;AACH,mDAJW,MAAM,WACN,MAAM,gBACN,MAAM,eAMb;AAEJ;;;;;;;;;;;GAWG;AACH,mDALW,MAAM,WACN,MAAM,mBACN,MAAM,gBACN,MAAM,eAOb;AAEJ;;;;;;;;;;;;;GAaG;AACH,oDAHW,MAAM,GAAC,MAAM,gBACb,MAAM,eAKb;AAEJ;;;;;;;;;GASG;AACH,+CAHW,MAAM,gBACN,MAAM,eAKb;AA2CJ;;;;;;;;;;;;;;;;;GAiBG;AACH,gDALW,MAAM,eACN,MAAM,cACN,MAAM,GAAC,MAAM,EAAE,gBACf,MAAM,eAQb;AAjEJ;;;;;;;;;GASG;AACH,uCAHW,MAAM,gBACN,MAAM,eAKb;AAEJ;;;;;;;;;;;GAWG;AACH,4CALW,IAAI,GAAC,MAAM,aACX,OAAO,WACP,MAAM,gBACN,MAAM,eAchB;AA4BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,0CAPW,MAAM,YACN,MAAM,iBACN,MAAM,iBACN,MAAM,kBACN,MAAM,gBACN,MAAM,eASb;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,sCAhBW,MAAM,gBACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,mBACN,MAAM,aACN,MAAM,gBACN,MAAM,qBACN,MAAM,qBACN,MAAM,mBACN,MAAM,mBACN,MAAM,mBACN,MAAM,uBACN,MAAM,gBACN,MAAM,eAkBb"} \ No newline at end of file