@rhtml/custom-attributes 0.0.112 → 0.0.115
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.
- package/README.md +35 -2
- package/dist/attribute.d.ts +15 -0
- package/dist/attribute.js +30 -0
- package/dist/attribute.js.map +1 -0
- package/dist/custom-registry.d.ts +18 -0
- package/dist/custom-registry.js +155 -0
- package/dist/custom-registry.js.map +1 -0
- package/dist/decorators/index.d.ts +21 -0
- package/dist/decorators/index.js +56 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/helpers/index.d.ts +2 -0
- package/dist/helpers/index.js +36 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +6 -89
- package/dist/index.js +20 -310
- package/dist/index.js.map +1 -1
- package/dist/media-attribute.d.ts +23 -0
- package/dist/media-attribute.js +69 -0
- package/dist/media-attribute.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +2 -11
- package/src/attribute.ts +35 -0
- package/src/custom-registry.ts +171 -0
- package/src/decorators/index.ts +56 -0
- package/src/helpers/index.ts +35 -0
- package/src/index.ts +6 -388
- package/src/media-attribute.ts +90 -0
- package/src/types.ts +34 -0
- package/.eslintrc.js +0 -26
- package/.prettierrc +0 -4
- package/jest.config.js +0 -16
package/README.md
CHANGED
|
@@ -317,7 +317,7 @@ Extending `MediaQueryAttribute` will help you to track values from specific reso
|
|
|
317
317
|
|
|
318
318
|
```typescript
|
|
319
319
|
import {
|
|
320
|
-
|
|
320
|
+
MediaQueryEvent,
|
|
321
321
|
ExitMediaQueryAttributes,
|
|
322
322
|
MediaQueryAttribute,
|
|
323
323
|
Modifier
|
|
@@ -331,6 +331,8 @@ interface Styles {
|
|
|
331
331
|
selector: 'color'
|
|
332
332
|
})
|
|
333
333
|
export class Color extends MediaQueryAttribute<Styles> {
|
|
334
|
+
private prevValue: string;
|
|
335
|
+
|
|
334
336
|
OnInit() {
|
|
335
337
|
this.modify();
|
|
336
338
|
/* Executing media matcher init */
|
|
@@ -347,7 +349,7 @@ export class Color extends MediaQueryAttribute<Styles> {
|
|
|
347
349
|
this.modify();
|
|
348
350
|
}
|
|
349
351
|
|
|
350
|
-
OnEnterMediaQuery([event, attribute]:
|
|
352
|
+
OnEnterMediaQuery([event, attribute]: MediaQueryEvent) {
|
|
351
353
|
console.log(event, attribute.value);
|
|
352
354
|
this.prevValue = this.value;
|
|
353
355
|
this.value = attribute.value ?? this.value;
|
|
@@ -396,3 +398,34 @@ export class Color extends MediaQueryAttribute<Styles> {
|
|
|
396
398
|
| gt-sm | screen and (min-width: 960px) |
|
|
397
399
|
| gt-md | screen and (min-width: 1280px) |
|
|
398
400
|
| gt-lg | screen and (min-width: 1920px) |
|
|
401
|
+
|
|
402
|
+
#### Defining custom MutationObserver which is attached on the element used by the Attribute
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
import { Attribute, Modifier } from '@rhtml/custom-attributes';
|
|
406
|
+
|
|
407
|
+
@Modifier({
|
|
408
|
+
selector: 'color',
|
|
409
|
+
observe: {
|
|
410
|
+
childList: true,
|
|
411
|
+
subtree: true,
|
|
412
|
+
attributes: true,
|
|
413
|
+
attributeFilter: ['my-attribute']
|
|
414
|
+
}
|
|
415
|
+
})
|
|
416
|
+
export class Color extends Attribute {
|
|
417
|
+
OnChange(records: MutationRecord[]) {
|
|
418
|
+
console.log(records);
|
|
419
|
+
const attributeValue = this.element.getAttribute('my-attribute');
|
|
420
|
+
console.log(attributeValue); // 'test'
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
```html
|
|
426
|
+
<div color="red" my-attribute="test">
|
|
427
|
+
My element
|
|
428
|
+
</div>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
If we change `my-attribute` value we will trigger `OnChange` which will give us mutation records
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ModifierOptions } from './types';
|
|
2
|
+
export declare abstract class Attribute<T = Record<string, unknown>> {
|
|
3
|
+
static options: ModifierOptions;
|
|
4
|
+
element?: HTMLElement;
|
|
5
|
+
value?: string;
|
|
6
|
+
selector?: string;
|
|
7
|
+
parent?: HTMLElement;
|
|
8
|
+
observer?: MutationObserver;
|
|
9
|
+
setStyles(keys: T): (div: HTMLElement | Element | HTMLDivElement) => void;
|
|
10
|
+
OnInit(): void;
|
|
11
|
+
OnDestroy(): void;
|
|
12
|
+
OnUpdate(_oldValue: string, _newValue: string): void;
|
|
13
|
+
OnUpdateAttribute(_name: string, _value: string): void;
|
|
14
|
+
OnChange(_records: MutationRecord[]): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Attribute = void 0;
|
|
4
|
+
/* */
|
|
5
|
+
class Attribute {
|
|
6
|
+
setStyles(keys) {
|
|
7
|
+
return (div) => {
|
|
8
|
+
for (const [key, value] of Object.entries(keys)) {
|
|
9
|
+
div['style'][key] = value;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
OnInit() {
|
|
14
|
+
/* */
|
|
15
|
+
}
|
|
16
|
+
OnDestroy() {
|
|
17
|
+
/* */
|
|
18
|
+
}
|
|
19
|
+
OnUpdate(_oldValue, _newValue) {
|
|
20
|
+
/* */
|
|
21
|
+
}
|
|
22
|
+
OnUpdateAttribute(_name, _value) {
|
|
23
|
+
/* */
|
|
24
|
+
}
|
|
25
|
+
OnChange(_records) {
|
|
26
|
+
/* */
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Attribute = Attribute;
|
|
30
|
+
//# sourceMappingURL=attribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute.js","sourceRoot":"","sources":["../src/attribute.ts"],"names":[],"mappings":";;;AAGA,MAAM;AACN,MAAsB,SAAS;IAO7B,SAAS,CAAC,IAAO;QACf,OAAO,CAAC,GAA2C,EAAE,EAAE;YACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC/C,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC3B;QACH,CAAC,CAAC;IACJ,CAAC;IACD,MAAM;QACJ,KAAK;IACP,CAAC;IACD,SAAS;QACP,KAAK;IACP,CAAC;IACD,QAAQ,CAAC,SAAiB,EAAE,SAAiB;QAC3C,KAAK;IACP,CAAC;IACD,iBAAiB,CAAC,KAAa,EAAE,MAAc;QAC7C,KAAK;IACP,CAAC;IAED,QAAQ,CAAC,QAA0B;QACjC,KAAK;IACP,CAAC;CACF;AA9BD,8BA8BC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Attribute } from './attribute';
|
|
2
|
+
import { Constructor } from './types';
|
|
3
|
+
export declare class CustomAttributeRegistry {
|
|
4
|
+
private parent;
|
|
5
|
+
private _attrMap;
|
|
6
|
+
private _elementMap;
|
|
7
|
+
private observer;
|
|
8
|
+
constructor(parent: HTMLElement);
|
|
9
|
+
define(attrName: string, Constructor: Constructor<Attribute>): void;
|
|
10
|
+
get(element: HTMLElement, attrName: string): Attribute<Record<string, unknown>>;
|
|
11
|
+
private getConstructor;
|
|
12
|
+
private observe;
|
|
13
|
+
unsubscribe(): void;
|
|
14
|
+
private upgradeAttribute;
|
|
15
|
+
private upgradeElement;
|
|
16
|
+
private downgrade;
|
|
17
|
+
private found;
|
|
18
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomAttributeRegistry = void 0;
|
|
4
|
+
const helpers_1 = require("./helpers");
|
|
5
|
+
class CustomAttributeRegistry {
|
|
6
|
+
constructor(parent) {
|
|
7
|
+
this.parent = parent;
|
|
8
|
+
this._attrMap = new Map();
|
|
9
|
+
this._elementMap = new Map();
|
|
10
|
+
if (!parent) {
|
|
11
|
+
throw new Error('Must be given a parent element');
|
|
12
|
+
}
|
|
13
|
+
this.observe();
|
|
14
|
+
}
|
|
15
|
+
define(attrName, Constructor) {
|
|
16
|
+
this._attrMap.set(attrName.toLowerCase(), Constructor);
|
|
17
|
+
this.upgradeAttribute(attrName);
|
|
18
|
+
}
|
|
19
|
+
get(element, attrName) {
|
|
20
|
+
const map = this._elementMap.get(element);
|
|
21
|
+
if (!map)
|
|
22
|
+
return;
|
|
23
|
+
return map.get(attrName.toLowerCase());
|
|
24
|
+
}
|
|
25
|
+
getConstructor(attrName) {
|
|
26
|
+
return this._attrMap.get(attrName.toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
observe() {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
this.observer = new MutationObserver((mutations) => {
|
|
31
|
+
for (const mutation of mutations) {
|
|
32
|
+
if (mutation.type === 'attributes') {
|
|
33
|
+
const attr = this.getConstructor(mutation.attributeName);
|
|
34
|
+
if (attr) {
|
|
35
|
+
this.found(mutation.attributeName, mutation.target, mutation.oldValue);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
for (const node of mutation.removedNodes) {
|
|
40
|
+
this.downgrade(node);
|
|
41
|
+
}
|
|
42
|
+
for (const node of mutation.addedNodes) {
|
|
43
|
+
this.upgradeElement(node);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this.observer.observe((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a['shadowRoot']) !== null && _b !== void 0 ? _b : this.parent, {
|
|
49
|
+
childList: true,
|
|
50
|
+
subtree: true,
|
|
51
|
+
attributes: true,
|
|
52
|
+
attributeOldValue: true,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
unsubscribe() {
|
|
56
|
+
var _a;
|
|
57
|
+
(_a = this.observer) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
58
|
+
const values = [...this._elementMap.values()];
|
|
59
|
+
for (const elModifiers of values) {
|
|
60
|
+
const modifiers = [...elModifiers.values()];
|
|
61
|
+
for (const modifier of modifiers) {
|
|
62
|
+
modifier.OnDestroy();
|
|
63
|
+
if (modifier.observer) {
|
|
64
|
+
modifier.observer.disconnect();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
elModifiers.clear();
|
|
68
|
+
}
|
|
69
|
+
this._elementMap.clear();
|
|
70
|
+
}
|
|
71
|
+
upgradeAttribute(attrName, doc) {
|
|
72
|
+
const parent = doc || this.parent;
|
|
73
|
+
const matches = parent.querySelectorAll('[' + attrName + ']');
|
|
74
|
+
for (const match of [...matches]) {
|
|
75
|
+
this.found(attrName, match);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
upgradeElement(element) {
|
|
79
|
+
if (element.nodeType !== 1) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const attr of element.attributes) {
|
|
83
|
+
if (this.getConstructor(attr.name)) {
|
|
84
|
+
this.found(attr.name, element);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const [attr] of this._attrMap) {
|
|
88
|
+
this.upgradeAttribute(attr, element);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
downgrade(element) {
|
|
92
|
+
const map = this._elementMap.get(element);
|
|
93
|
+
if (!map) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const [, instance] of map) {
|
|
97
|
+
if (instance.OnDestroy) {
|
|
98
|
+
instance.OnDestroy();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this._elementMap.delete(element);
|
|
102
|
+
}
|
|
103
|
+
found(attributeName, el, oldVal) {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
let map = this._elementMap.get(el);
|
|
106
|
+
if (!map) {
|
|
107
|
+
map = new Map();
|
|
108
|
+
this._elementMap.set(el, map);
|
|
109
|
+
}
|
|
110
|
+
let modifier = map.get(attributeName);
|
|
111
|
+
const attribute = el.getAttribute(attributeName);
|
|
112
|
+
if (!modifier) {
|
|
113
|
+
const Modifier = this.getConstructor(attributeName);
|
|
114
|
+
modifier = new Modifier();
|
|
115
|
+
if ((_b = (_a = Modifier.options) === null || _a === void 0 ? void 0 : _a.observedAttributes) === null || _b === void 0 ? void 0 : _b.length) {
|
|
116
|
+
for (const observedAttribute of Modifier.options.observedAttributes) {
|
|
117
|
+
(0, helpers_1.observe)(modifier, observedAttribute);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
modifier.element = el;
|
|
121
|
+
modifier.selector = attributeName;
|
|
122
|
+
modifier.value = attribute || modifier.value;
|
|
123
|
+
modifier.parent = this.parent;
|
|
124
|
+
if (modifier.OnInit) {
|
|
125
|
+
modifier.OnInit();
|
|
126
|
+
}
|
|
127
|
+
if (Modifier.options.observe) {
|
|
128
|
+
modifier.observer = new MutationObserver((records) => modifier.OnChange(records));
|
|
129
|
+
modifier.observer.observe(modifier.element, Modifier.options.observe);
|
|
130
|
+
}
|
|
131
|
+
map.set(attributeName, modifier);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (attribute == null && !!modifier.value) {
|
|
135
|
+
modifier.value = attribute;
|
|
136
|
+
if (modifier.OnDestroy) {
|
|
137
|
+
modifier.OnDestroy();
|
|
138
|
+
}
|
|
139
|
+
if (modifier.observer) {
|
|
140
|
+
modifier.observer.disconnect();
|
|
141
|
+
}
|
|
142
|
+
map.delete(attributeName);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (attribute !== modifier.value) {
|
|
146
|
+
modifier.value = attribute;
|
|
147
|
+
if (modifier.OnUpdate) {
|
|
148
|
+
modifier.OnUpdate(oldVal, attribute);
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.CustomAttributeRegistry = CustomAttributeRegistry;
|
|
155
|
+
//# sourceMappingURL=custom-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-registry.js","sourceRoot":"","sources":["../src/custom-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InputOptions, ModifierOptions } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Decorator @Input
|
|
4
|
+
* Used to get attribute from element
|
|
5
|
+
*/
|
|
6
|
+
export declare const Input: (options?: InputOptions) => (target: any, memberName: string) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Decorator @Modifier
|
|
9
|
+
* Accepts parameter options with selector and registry
|
|
10
|
+
*/
|
|
11
|
+
export declare const Modifier: (options: ModifierOptions) => (target: any) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Decorator @CustomAttribute
|
|
14
|
+
* Accepts parameter options with selector and registry
|
|
15
|
+
*/
|
|
16
|
+
export declare const CustomAttribute: (options: ModifierOptions) => (target: any) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Decorator @Directive
|
|
19
|
+
* Accepts parameter options with selector and registry
|
|
20
|
+
*/
|
|
21
|
+
export declare const Directive: (options: ModifierOptions) => (target: any) => void;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Directive = exports.CustomAttribute = exports.Modifier = exports.Input = void 0;
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
5
|
+
/**
|
|
6
|
+
* Decorator @Input
|
|
7
|
+
* Used to get attribute from element
|
|
8
|
+
*/
|
|
9
|
+
const Input = (options) => (target, memberName) => {
|
|
10
|
+
const OnInit = target.OnInit || helpers_1.noop;
|
|
11
|
+
Object.defineProperty(target, 'OnInit', {
|
|
12
|
+
value() {
|
|
13
|
+
var _a;
|
|
14
|
+
let originalValue = this[memberName];
|
|
15
|
+
const element = (_a = this.element) !== null && _a !== void 0 ? _a : this;
|
|
16
|
+
Object.defineProperty(this, memberName, {
|
|
17
|
+
get: function () {
|
|
18
|
+
originalValue = element.getAttribute(memberName.toLowerCase());
|
|
19
|
+
return originalValue;
|
|
20
|
+
},
|
|
21
|
+
set(value) {
|
|
22
|
+
element.setAttribute(memberName.toLowerCase(), value);
|
|
23
|
+
originalValue = value;
|
|
24
|
+
},
|
|
25
|
+
configurable: true,
|
|
26
|
+
});
|
|
27
|
+
return OnInit.call(this);
|
|
28
|
+
},
|
|
29
|
+
configurable: true,
|
|
30
|
+
});
|
|
31
|
+
if (options === null || options === void 0 ? void 0 : options.observe) {
|
|
32
|
+
(0, helpers_1.observe)(target, memberName);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.Input = Input;
|
|
36
|
+
/**
|
|
37
|
+
* Decorator @Modifier
|
|
38
|
+
* Accepts parameter options with selector and registry
|
|
39
|
+
*/
|
|
40
|
+
const Modifier = (options) => {
|
|
41
|
+
return (target) => {
|
|
42
|
+
target['options'] = options;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
exports.Modifier = Modifier;
|
|
46
|
+
/**
|
|
47
|
+
* Decorator @CustomAttribute
|
|
48
|
+
* Accepts parameter options with selector and registry
|
|
49
|
+
*/
|
|
50
|
+
exports.CustomAttribute = exports.Modifier;
|
|
51
|
+
/**
|
|
52
|
+
* Decorator @Directive
|
|
53
|
+
* Accepts parameter options with selector and registry
|
|
54
|
+
*/
|
|
55
|
+
exports.Directive = exports.Modifier;
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,wCAA2C;AAG3C;;;GAGG;AACI,MAAM,KAAK,GAChB,CAAC,OAAsB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,UAAkB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,cAAI,CAAC;IACrC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;QACtC,KAAK;;YACH,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAErC,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;gBACtC,GAAG,EAAE;oBACH,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC/D,OAAO,aAAa,CAAC;gBACvB,CAAC;gBACD,GAAG,CAAC,KAAK;oBACP,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtD,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;gBACD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE;QACpB,IAAA,iBAAO,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAC7B;AACH,CAAC,CAAC;AA3BS,QAAA,KAAK,SA2Bd;AAEJ;;;GAGG;AACI,MAAM,QAAQ,GAAG,CAAC,OAAwB,EAAE,EAAE;IACnD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,QAAQ,YAInB;AAEF;;;GAGG;AACU,QAAA,eAAe,GAAG,gBAAQ,CAAC;AACxC;;;GAGG;AACU,QAAA,SAAS,GAAG,gBAAQ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.observe = exports.noop = void 0;
|
|
4
|
+
const noop = function () {
|
|
5
|
+
/* */
|
|
6
|
+
};
|
|
7
|
+
exports.noop = noop;
|
|
8
|
+
const observe = (target, memberName) => {
|
|
9
|
+
const prototype = target.constructor.prototype;
|
|
10
|
+
const OnInit = prototype.OnInit || exports.noop;
|
|
11
|
+
const OnDestroy = prototype.OnDestroy || exports.noop;
|
|
12
|
+
const OnUpdateAttribute = prototype.OnUpdateAttribute || exports.noop;
|
|
13
|
+
let observer;
|
|
14
|
+
prototype.OnInit = function () {
|
|
15
|
+
var _a;
|
|
16
|
+
const element = (_a = this.element) !== null && _a !== void 0 ? _a : this;
|
|
17
|
+
if (observer) {
|
|
18
|
+
observer.disconnect();
|
|
19
|
+
}
|
|
20
|
+
observer = new MutationObserver(() => {
|
|
21
|
+
OnUpdateAttribute.call(this, memberName, element.getAttribute(memberName));
|
|
22
|
+
target[memberName] = element.getAttribute(memberName);
|
|
23
|
+
});
|
|
24
|
+
observer.observe(element, {
|
|
25
|
+
attributeFilter: [memberName],
|
|
26
|
+
attributes: true,
|
|
27
|
+
});
|
|
28
|
+
return OnInit.call(this);
|
|
29
|
+
};
|
|
30
|
+
prototype.OnDestroy = function () {
|
|
31
|
+
observer.disconnect();
|
|
32
|
+
return OnDestroy.call(this);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
exports.observe = observe;
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;AAAO,MAAM,IAAI,GAAG;IAClB,MAAM;AACR,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf;AAEK,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,UAAkB,EAAE,EAAE;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,YAAI,CAAC;IACxC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,YAAI,CAAC;IAC9C,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,IAAI,YAAI,CAAC;IAE9D,IAAI,QAA0B,CAAC;IAC/B,SAAS,CAAC,MAAM,GAAG;;QACjB,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC;QACrC,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,UAAU,EAAE,CAAC;SACvB;QACD,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACnC,iBAAiB,CAAC,IAAI,CACpB,IAAI,EACJ,UAAU,EACV,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CACjC,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;YACxB,eAAe,EAAE,CAAC,UAAU,CAAC;YAC7B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,GAAG;QACpB,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,OAAO,WA8BlB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,89 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
registry?(this: HTMLElement): CustomAttributeRegistry;
|
|
8
|
-
observedAttributes?: string[];
|
|
9
|
-
}
|
|
10
|
-
interface InputOptions {
|
|
11
|
-
/**
|
|
12
|
-
* If enabled will trigger OnUpdate method on the Attribute
|
|
13
|
-
* */
|
|
14
|
-
observe: true;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Decorator @Input
|
|
18
|
-
* Used to get attribute from element
|
|
19
|
-
*/
|
|
20
|
-
export declare const Input: (options?: InputOptions) => (target: any, memberName: string) => void;
|
|
21
|
-
/**
|
|
22
|
-
* Decorator @Modifier
|
|
23
|
-
* Accepts parameter options with selector and registry
|
|
24
|
-
*/
|
|
25
|
-
export declare const Modifier: (options: ModifierOptions) => (target: Function) => void;
|
|
26
|
-
/**
|
|
27
|
-
* Decorator @CustomAttribute
|
|
28
|
-
* Accepts parameter options with selector and registry
|
|
29
|
-
*/
|
|
30
|
-
export declare const CustomAttribute: (options: ModifierOptions) => (target: Function) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Decorator @Directive
|
|
33
|
-
* Accepts parameter options with selector and registry
|
|
34
|
-
*/
|
|
35
|
-
export declare const Directive: (options: ModifierOptions) => (target: Function) => void;
|
|
36
|
-
export declare abstract class Attribute<T = {}> {
|
|
37
|
-
static options: ModifierOptions;
|
|
38
|
-
element?: HTMLElement;
|
|
39
|
-
value?: string;
|
|
40
|
-
selector?: string;
|
|
41
|
-
parent?: HTMLElement;
|
|
42
|
-
setStyles(keys: T): (div: HTMLElement | Element | HTMLDivElement) => void;
|
|
43
|
-
OnInit(): void;
|
|
44
|
-
OnDestroy(): void;
|
|
45
|
-
OnUpdate(_oldValue: string, _newValue: string): void;
|
|
46
|
-
OnUpdateAttribute(_name: string, _value: string): void;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Media query Attribute
|
|
50
|
-
* for performance reasons it is key value pair
|
|
51
|
-
*/
|
|
52
|
-
export declare const MediaMatchers: Map<string, string>;
|
|
53
|
-
declare type MediaEvent = MediaQueryList | MediaQueryListEvent;
|
|
54
|
-
export declare type EnterMediaQueryAttributes = [MediaEvent, Attr];
|
|
55
|
-
export declare type ExitMediaQueryAttributes = [MediaEvent, string];
|
|
56
|
-
export interface OnUpdateMediaQuery {
|
|
57
|
-
OnEnterMediaQuery(tuple: [MediaEvent, Attr]): void;
|
|
58
|
-
OnExitMediaQuery(tuple: [MediaEvent, string]): void;
|
|
59
|
-
}
|
|
60
|
-
export declare const Breakpoints: string[];
|
|
61
|
-
export declare const createFiltersFromSelector: (selector: string) => string[];
|
|
62
|
-
export declare abstract class MediaQueryAttribute<T> extends Attribute<T> implements OnUpdateMediaQuery {
|
|
63
|
-
prevValue: string;
|
|
64
|
-
originalValue: string;
|
|
65
|
-
private matchers;
|
|
66
|
-
private cachedAttributes;
|
|
67
|
-
listener: (event: MediaQueryList | MediaQueryListEvent) => void;
|
|
68
|
-
OnInit(): void;
|
|
69
|
-
OnDestroy(): void;
|
|
70
|
-
abstract OnEnterMediaQuery(tuple: [MediaEvent, Attr]): void;
|
|
71
|
-
abstract OnExitMediaQuery(tuple: [MediaEvent, string]): void;
|
|
72
|
-
}
|
|
73
|
-
export declare class CustomAttributeRegistry {
|
|
74
|
-
private parent;
|
|
75
|
-
private _attrMap;
|
|
76
|
-
private _elementMap;
|
|
77
|
-
private observer;
|
|
78
|
-
constructor(parent: HTMLElement);
|
|
79
|
-
define(attrName: string, Constructor: Constructor<Attribute>): void;
|
|
80
|
-
get(element: HTMLElement, attrName: string): Attribute<{}>;
|
|
81
|
-
private getConstructor;
|
|
82
|
-
private observe;
|
|
83
|
-
unsubscribe(): void;
|
|
84
|
-
private upgradeAttribute;
|
|
85
|
-
private upgradeElement;
|
|
86
|
-
private downgrade;
|
|
87
|
-
private found;
|
|
88
|
-
}
|
|
89
|
-
export {};
|
|
1
|
+
export * from './attribute';
|
|
2
|
+
export * from './custom-registry';
|
|
3
|
+
export * from './decorators';
|
|
4
|
+
export * from './helpers';
|
|
5
|
+
export * from './media-attribute';
|
|
6
|
+
export * from './types';
|