@rhtml/decorators 0.0.110 → 0.0.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export declare const HostBinding: <T>(binding: string) => (target: any, memberName: string) => void;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // type Class = 'class';
3
+ // type Style = 'style';
4
+ // type Type = Style | Class;
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HostBinding = void 0;
7
+ // type Styles = keyof CSSStyleDeclaration;
8
+ // type Binding<T = Type> = T extends Style ? `${T}.${Styles}` : `${Class}.${string}`;
9
+ exports.HostBinding = (binding /* Binding<T> */) => (target, memberName) => {
10
+ const [type, key] = binding.split('.');
11
+ const OnInit = target['OnInit'] ||
12
+ function () {
13
+ /* */
14
+ };
15
+ const apply = (value) => (element) => {
16
+ if (type === 'style') {
17
+ if (!value) {
18
+ element.style[key] = null;
19
+ }
20
+ else {
21
+ element.style[key] = value;
22
+ }
23
+ }
24
+ if (type === 'class') {
25
+ if (!value) {
26
+ element.classList.remove(key);
27
+ }
28
+ else {
29
+ element.classList.add(key);
30
+ }
31
+ }
32
+ };
33
+ Object.defineProperty(target, 'OnInit', {
34
+ value: function (...args) {
35
+ var _a;
36
+ let currentValue = this[memberName];
37
+ const element = (_a = this.element) !== null && _a !== void 0 ? _a : this;
38
+ Object.defineProperty(target, memberName, {
39
+ get: function () {
40
+ return currentValue;
41
+ },
42
+ set: function (value) {
43
+ apply(value)(element);
44
+ currentValue = value;
45
+ },
46
+ configurable: true
47
+ });
48
+ if (currentValue) {
49
+ apply(currentValue)(element);
50
+ }
51
+ return OnInit.apply(this, args);
52
+ },
53
+ configurable: true,
54
+ writable: true
55
+ });
56
+ };
57
+ //# sourceMappingURL=host-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-binding.js","sourceRoot":"","sources":["../src/host-binding.ts"],"names":[],"mappings":";AAAA,wBAAwB;AACxB,wBAAwB;AACxB,6BAA6B;;;AAE7B,2CAA2C;AAE3C,sFAAsF;AAEzE,QAAA,WAAW,GAAG,CAAI,OAAe,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAClE,MAAM,EACN,UAAkB,EAClB,EAAE;IACF,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,MAAM,GACV,MAAM,CAAC,QAAQ,CAAC;QAChB;YACE,MAAM;QACR,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,OAAoB,EAAE,EAAE;QACxD,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aAC3B;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC5B;SACF;QACD,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC/B;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC5B;SACF;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;QACtC,KAAK,EAAE,UAAS,GAAG,IAAe;;YAChC,IAAI,YAAY,GAAW,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,OAAO,SAAgB,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC;YAElD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;gBACxC,GAAG,EAAE;oBACH,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,GAAG,EAAE,UAAS,KAAK;oBACjB,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;oBACtB,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;gBACD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,IAAI,YAAY,EAAE;gBAChB,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;aAC9B;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './host-listener';
2
+ export * from './host-binding';
package/dist/index.js CHANGED
@@ -11,4 +11,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./host-listener"), exports);
14
+ __exportStar(require("./host-binding"), exports);
14
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgC;AAChC,iDAA+B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhtml/decorators",
3
- "version": "0.0.110",
3
+ "version": "0.0.111",
4
4
  "description": "Reactive HyperText Markup Language",
5
5
  "scripts": {
6
6
  "start": "npx parcel ./examples/index.html --out-dir build/examples",
@@ -0,0 +1,60 @@
1
+ // type Class = 'class';
2
+ // type Style = 'style';
3
+ // type Type = Style | Class;
4
+
5
+ // type Styles = keyof CSSStyleDeclaration;
6
+
7
+ // type Binding<T = Type> = T extends Style ? `${T}.${Styles}` : `${Class}.${string}`;
8
+
9
+ export const HostBinding = <T>(binding: string /* Binding<T> */) => (
10
+ target,
11
+ memberName: string
12
+ ) => {
13
+ const [type, key] = binding.split('.');
14
+
15
+ const OnInit =
16
+ target['OnInit'] ||
17
+ function() {
18
+ /* */
19
+ };
20
+ const apply = (value: string) => (element: HTMLElement) => {
21
+ if (type === 'style') {
22
+ if (!value) {
23
+ element.style[key] = null;
24
+ } else {
25
+ element.style[key] = value;
26
+ }
27
+ }
28
+ if (type === 'class') {
29
+ if (!value) {
30
+ element.classList.remove(key);
31
+ } else {
32
+ element.classList.add(key);
33
+ }
34
+ }
35
+ };
36
+
37
+ Object.defineProperty(target, 'OnInit', {
38
+ value: function(...args: unknown[]) {
39
+ let currentValue: string = this[memberName];
40
+ const element: HTMLElement = this.element ?? this;
41
+
42
+ Object.defineProperty(target, memberName, {
43
+ get: function() {
44
+ return currentValue;
45
+ },
46
+ set: function(value) {
47
+ apply(value)(element);
48
+ currentValue = value;
49
+ },
50
+ configurable: true
51
+ });
52
+ if (currentValue) {
53
+ apply(currentValue)(element);
54
+ }
55
+ return OnInit.apply(this, args);
56
+ },
57
+ configurable: true,
58
+ writable: true
59
+ });
60
+ };
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './host-listener';
2
+ export * from './host-binding';