@mantou/gem 1.7.12 → 2.0.0-alpha.0
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/LICENSE +21 -0
- package/README.md +1 -1
- package/dist/gem.es.js +2010 -1765
- package/dist/gem.umd.js +52 -53
- package/elements/base/dialog.d.ts +0 -11
- package/elements/base/dialog.d.ts.map +1 -1
- package/elements/base/dialog.js +93 -66
- package/elements/base/dialog.js.map +1 -1
- package/elements/base/gesture.d.ts +1 -2
- package/elements/base/gesture.d.ts.map +1 -1
- package/elements/base/gesture.js +157 -96
- package/elements/base/gesture.js.map +1 -1
- package/elements/base/link.d.ts +5 -5
- package/elements/base/link.d.ts.map +1 -1
- package/elements/base/link.js +249 -145
- package/elements/base/link.js.map +1 -1
- package/elements/base/modal-factory.d.ts +145 -139
- package/elements/base/modal-factory.d.ts.map +1 -1
- package/elements/base/modal-factory.js +84 -25
- package/elements/base/modal-factory.js.map +1 -1
- package/elements/base/reflect.d.ts +0 -1
- package/elements/base/reflect.d.ts.map +1 -1
- package/elements/base/reflect.js +83 -38
- package/elements/base/reflect.js.map +1 -1
- package/elements/base/route.d.ts +12 -24
- package/elements/base/route.d.ts.map +1 -1
- package/elements/base/route.js +263 -164
- package/elements/base/route.js.map +1 -1
- package/elements/base/title.d.ts +3 -11
- package/elements/base/title.d.ts.map +1 -1
- package/elements/base/title.js +110 -59
- package/elements/base/title.js.map +1 -1
- package/elements/base/unsafe.d.ts +0 -1
- package/elements/base/unsafe.d.ts.map +1 -1
- package/elements/base/unsafe.js +82 -33
- package/elements/base/unsafe.js.map +1 -1
- package/elements/base/use.d.ts.map +1 -1
- package/elements/base/use.js +95 -47
- package/elements/base/use.js.map +1 -1
- package/helper/i18n.d.ts +4 -9
- package/helper/i18n.d.ts.map +1 -1
- package/helper/i18n.js +69 -65
- package/helper/i18n.js.map +1 -1
- package/helper/logger.js +10 -9
- package/helper/logger.js.map +1 -1
- package/helper/react-shim.d.ts +15 -0
- package/helper/react-shim.d.ts.map +1 -0
- package/helper/react-shim.js +56 -0
- package/helper/react-shim.js.map +1 -0
- package/helper/react-utils.d.ts +15 -0
- package/helper/react-utils.d.ts.map +1 -0
- package/helper/react-utils.js +50 -0
- package/helper/react-utils.js.map +1 -0
- package/helper/request.d.ts +4 -4
- package/helper/request.d.ts.map +1 -1
- package/helper/request.js +1 -1
- package/helper/request.js.map +1 -1
- package/helper/ssr-shim.d.ts.map +1 -1
- package/helper/ssr-shim.js +8 -1
- package/helper/ssr-shim.js.map +1 -1
- package/helper/theme.d.ts +14 -21
- package/helper/theme.d.ts.map +1 -1
- package/helper/theme.js +55 -38
- package/helper/theme.js.map +1 -1
- package/index.d.ts +4 -3
- package/index.d.ts.map +1 -1
- package/index.js +5 -3
- package/index.js.map +1 -1
- package/lib/decorators.d.ts +74 -42
- package/lib/decorators.d.ts.map +1 -1
- package/lib/decorators.js +324 -84
- package/lib/decorators.js.map +1 -1
- package/lib/directives.d.ts +4 -0
- package/lib/directives.d.ts.map +1 -0
- package/lib/directives.js +5 -0
- package/lib/directives.js.map +1 -0
- package/lib/element.d.ts +112 -110
- package/lib/element.d.ts.map +1 -1
- package/lib/element.js +431 -468
- package/lib/element.js.map +1 -1
- package/lib/history.d.ts +4 -0
- package/lib/history.d.ts.map +1 -1
- package/lib/history.js +12 -13
- package/lib/history.js.map +1 -1
- package/lib/store.d.ts +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +4 -5
- package/lib/store.js.map +1 -1
- package/lib/utils.d.ts +3 -43
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +61 -235
- package/lib/utils.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.d.ts.map +1 -1
- package/lib/version.js +2 -1
- package/lib/version.js.map +1 -1
- package/package.json +12 -11
- package/src/dist.ts +3 -2
- package/src/elements/base/dialog.ts +10 -20
- package/src/elements/base/gesture.ts +16 -14
- package/src/elements/base/link.ts +65 -44
- package/src/elements/base/modal-factory.ts +14 -14
- package/src/elements/base/reflect.ts +24 -32
- package/src/elements/base/route.ts +55 -68
- package/src/elements/base/title.ts +25 -42
- package/src/elements/base/unsafe.ts +12 -21
- package/src/elements/base/use.ts +17 -13
- package/src/helper/i18n.ts +20 -14
- package/src/helper/react-utils.ts +66 -0
- package/src/helper/ssr-shim.ts +8 -1
- package/src/helper/theme.ts +72 -45
- package/src/index.ts +6 -4
- package/src/lib/decorators.ts +394 -93
- package/src/lib/directives.ts +6 -0
- package/src/lib/element.ts +473 -500
- package/src/lib/history.ts +4 -3
- package/src/lib/store.ts +2 -1
- package/src/lib/utils.ts +12 -191
- package/src/lib/version.ts +2 -1
- package/src/test/elements/link.test.ts +1 -1
- package/src/test/elements/title.test.ts +1 -0
- package/src/test/gem-element/advance.test.ts +72 -49
- package/src/test/gem-element/basic.test.ts +37 -50
- package/src/test/gem-element/decorators.test.ts +22 -21
- package/src/test/gem-element/multi.test.ts +5 -5
- package/src/test/utils.test.ts +15 -45
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { fixture, expect, nextFrame } from '@open-wc/testing';
|
|
2
2
|
|
|
3
|
-
import { GemElement, html } from '../../lib/element';
|
|
3
|
+
import { createCSSSheet, createState, GemElement, html } from '../../lib/element';
|
|
4
4
|
import { createStore, updateStore } from '../../lib/store';
|
|
5
|
-
import {
|
|
5
|
+
import { css } from '../../lib/utils';
|
|
6
|
+
import {
|
|
7
|
+
adoptedStyle,
|
|
8
|
+
attribute,
|
|
9
|
+
boolattribute,
|
|
10
|
+
connectStore,
|
|
11
|
+
customElement,
|
|
12
|
+
numattribute,
|
|
13
|
+
property,
|
|
14
|
+
shadow,
|
|
15
|
+
} from '../../lib/decorators';
|
|
6
16
|
|
|
7
17
|
const store = createStore({
|
|
8
18
|
a: 1,
|
|
@@ -14,47 +24,40 @@ const styles = createCSSSheet(css`
|
|
|
14
24
|
}
|
|
15
25
|
`);
|
|
16
26
|
|
|
27
|
+
@connectStore(store)
|
|
28
|
+
@adoptedStyle(styles)
|
|
29
|
+
@customElement('gem-demo')
|
|
30
|
+
@shadow()
|
|
17
31
|
class GemDemo extends GemElement {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
static booleanAttributes = new Set(['disabled']);
|
|
24
|
-
static numberAttributes = new Set(['count']);
|
|
32
|
+
@attribute longAttr: string;
|
|
33
|
+
@attribute attr: string;
|
|
34
|
+
@boolattribute disabled: boolean;
|
|
35
|
+
@numattribute count: number;
|
|
36
|
+
@property prop = { value: '' };
|
|
25
37
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
prop = { value: '' };
|
|
29
|
-
static observedProperties = ['prop'];
|
|
30
|
-
|
|
31
|
-
static adoptedStyleSheets = [styles];
|
|
32
|
-
state = { value: '' };
|
|
38
|
+
#state = createState({ value: '' });
|
|
33
39
|
|
|
34
40
|
renderCount = 0;
|
|
35
41
|
|
|
36
42
|
render() {
|
|
37
|
-
const { attr, disabled, count, prop
|
|
43
|
+
const { attr, disabled, count, prop } = this;
|
|
44
|
+
const { value } = this.#state;
|
|
38
45
|
this.renderCount++;
|
|
39
|
-
return html`attr: ${attr}, disabled: ${disabled}, count: ${count}, prop: ${prop.value}, state: ${
|
|
46
|
+
return html`attr: ${attr}, disabled: ${disabled}, count: ${count}, prop: ${prop.value}, state: ${value}`;
|
|
40
47
|
}
|
|
41
48
|
}
|
|
42
49
|
|
|
43
|
-
customElements.define('gem-demo', GemDemo);
|
|
44
|
-
|
|
45
|
-
class DeferGemElement extends GemElement {
|
|
46
|
-
/** @attr */ attr: string | null;
|
|
47
|
-
static observedAttributes = ['attr'];
|
|
48
|
-
prop: { value: string };
|
|
49
|
-
}
|
|
50
|
-
|
|
51
50
|
describe('基本 gem element 测试', () => {
|
|
52
51
|
it('后定义元素', async () => {
|
|
53
52
|
const el: DeferGemElement = await fixture(html`
|
|
54
53
|
<defer-gem-demo attr="attr" .prop=${{ value: 'prop' }}></defer-gem-demo>
|
|
55
54
|
`);
|
|
56
55
|
expect(el.prop.value).to.equal('prop');
|
|
57
|
-
|
|
56
|
+
@customElement('defer-gem-demo')
|
|
57
|
+
class DeferGemElement extends GemElement {
|
|
58
|
+
@attribute attr: string;
|
|
59
|
+
@property prop: { value: string };
|
|
60
|
+
}
|
|
58
61
|
await nextFrame();
|
|
59
62
|
expect(el.prop.value).to.equal('prop');
|
|
60
63
|
expect(el.attr).to.equal('attr');
|
|
@@ -63,11 +66,6 @@ describe('基本 gem element 测试', () => {
|
|
|
63
66
|
const el = await fixture(html`<gem-demo attr="attr" .prop=${{ value: 'prop' }}></gem-demo>`);
|
|
64
67
|
expect(window.getComputedStyle(el).backgroundColor).to.equal('rgb(255, 0, 0)');
|
|
65
68
|
});
|
|
66
|
-
it('closestElement 方法', async () => {
|
|
67
|
-
const el: GemDemo = await fixture(html`<gem-demo attr="attr" .prop=${{ value: 'prop' }}></gem-demo>`);
|
|
68
|
-
expect(el.closestElement('body')).to.equal(document.body);
|
|
69
|
-
expect(el.closestElement(HTMLBodyElement)).to.equal(document.body);
|
|
70
|
-
});
|
|
71
69
|
it('渲染 gem element', async () => {
|
|
72
70
|
const el: GemDemo = await fixture(html`<gem-demo attr="attr" .prop=${{ value: 'prop' }}></gem-demo>`);
|
|
73
71
|
expect(el).shadowDom.to.equal('attr: attr, disabled: false, count: 0, prop: prop, state: ');
|
|
@@ -78,13 +76,6 @@ describe('基本 gem element 测试', () => {
|
|
|
78
76
|
expect(el.renderCount).to.equal(2);
|
|
79
77
|
});
|
|
80
78
|
it('读取 attr', async () => {
|
|
81
|
-
class G extends GemElement {
|
|
82
|
-
static observedAttributes = ['attr'];
|
|
83
|
-
attr!: string;
|
|
84
|
-
test = expect(this.attr).to.equal('attr');
|
|
85
|
-
}
|
|
86
|
-
customElements.define('temp-field-read-attr', G);
|
|
87
|
-
await fixture(html`<temp-field-read-attr attr="attr"></temp-field-read-attr>`);
|
|
88
79
|
const el: GemDemo = await fixture(html`
|
|
89
80
|
<gem-demo attr="attr" ?disabled=${true} count=${1} long-attr="hi"></gem-demo>
|
|
90
81
|
`);
|
|
@@ -102,6 +93,7 @@ describe('基本 gem element 测试', () => {
|
|
|
102
93
|
el.disabled = true;
|
|
103
94
|
el.count = 2;
|
|
104
95
|
await Promise.resolve();
|
|
96
|
+
// 相同值不触发更新
|
|
105
97
|
el.attr = 'value';
|
|
106
98
|
el.disabled = true;
|
|
107
99
|
el.count = 2;
|
|
@@ -111,19 +103,14 @@ describe('基本 gem element 测试', () => {
|
|
|
111
103
|
expect(el.disabled).to.equal(true);
|
|
112
104
|
expect(el.count).to.equal(2);
|
|
113
105
|
expect(el).shadowDom.to.equal('attr: value, disabled: true, count: 2, prop: , state: ');
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
107
|
+
// @ts-ignore
|
|
114
108
|
el.attr = null;
|
|
115
109
|
await Promise.resolve();
|
|
116
110
|
expect(el.hasAttribute('attr')).to.equal(false);
|
|
117
111
|
});
|
|
118
112
|
|
|
119
113
|
it('读取 prop', async () => {
|
|
120
|
-
class G extends GemElement {
|
|
121
|
-
static observedPropertys = ['prop'];
|
|
122
|
-
prop!: any;
|
|
123
|
-
test = expect(this.prop).to.equal(undefined);
|
|
124
|
-
}
|
|
125
|
-
customElements.define('temp-field-read-prop', G);
|
|
126
|
-
await fixture(html`<temp-field-read-prop .prop=${{ value: 'prop' }}></temp-field-read-prop>`);
|
|
127
114
|
const el: GemDemo = await fixture(html`<gem-demo .prop=${{ value: 'prop' }}></gem-demo>`);
|
|
128
115
|
expect(el.prop).to.deep.equal({ value: 'prop' });
|
|
129
116
|
});
|
|
@@ -143,12 +130,12 @@ describe('基本 gem element 测试', () => {
|
|
|
143
130
|
it('修改 state', async () => {
|
|
144
131
|
const el: GemDemo = await fixture(html`<gem-demo></gem-demo>`);
|
|
145
132
|
expect(el.renderCount).to.equal(1);
|
|
146
|
-
el.
|
|
147
|
-
el.
|
|
148
|
-
el.
|
|
133
|
+
el.internals.stateList[0]({ value: 'asfasdf' });
|
|
134
|
+
el.internals.stateList[0]({ value: 'state' });
|
|
135
|
+
el.internals.stateList[0]({ value: 'state' });
|
|
149
136
|
await Promise.resolve();
|
|
150
137
|
expect(el.renderCount).to.equal(2);
|
|
151
|
-
expect(el.
|
|
138
|
+
expect({ ...el.internals.stateList[0] }).to.deep.equal({ value: 'state' });
|
|
152
139
|
expect(el).shadowDom.to.equal('attr: , disabled: false, count: 0, prop: , state: state');
|
|
153
140
|
});
|
|
154
141
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { fixture, expect } from '@open-wc/testing';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { Metadata } from '../../lib/element';
|
|
4
|
+
import { createCSSSheet, GemElement, html, createRef } from '../../lib/element';
|
|
4
5
|
import { createStore, updateStore } from '../../lib/store';
|
|
5
|
-
import {
|
|
6
|
+
import { css } from '../../lib/utils';
|
|
7
|
+
import type { Emitter } from '../../lib/decorators';
|
|
6
8
|
import {
|
|
7
9
|
attribute,
|
|
8
10
|
property,
|
|
@@ -12,12 +14,10 @@ import {
|
|
|
12
14
|
emitter,
|
|
13
15
|
boolattribute,
|
|
14
16
|
numattribute,
|
|
15
|
-
Emitter,
|
|
16
17
|
part,
|
|
17
|
-
RefObject,
|
|
18
|
-
refobject,
|
|
19
18
|
slot,
|
|
20
19
|
state,
|
|
20
|
+
shadow,
|
|
21
21
|
} from '../../lib/decorators';
|
|
22
22
|
|
|
23
23
|
const store = createStore({
|
|
@@ -33,7 +33,12 @@ const styles = createCSSSheet(css`
|
|
|
33
33
|
@connectStore(store)
|
|
34
34
|
@adoptedStyle(styles)
|
|
35
35
|
@customElement('decorator-gem-demo')
|
|
36
|
+
@shadow()
|
|
36
37
|
class DecoratorGemElement extends GemElement {
|
|
38
|
+
// 测试同名
|
|
39
|
+
@part static sayHi: string;
|
|
40
|
+
@slot static rankAttr: string;
|
|
41
|
+
|
|
37
42
|
@emitter sayHi: Emitter;
|
|
38
43
|
@attribute rankAttr: string;
|
|
39
44
|
@boolattribute rankDisabled: boolean;
|
|
@@ -41,8 +46,8 @@ class DecoratorGemElement extends GemElement {
|
|
|
41
46
|
@property propData = { value: '' };
|
|
42
47
|
@state openState: boolean;
|
|
43
48
|
@part headerPart: string;
|
|
44
|
-
@refobject inputRef: RefObject<HTMLElement>;
|
|
45
49
|
@slot bodySlot: string;
|
|
50
|
+
inputRef = createRef<HTMLElement>();
|
|
46
51
|
renderCount = 0;
|
|
47
52
|
render() {
|
|
48
53
|
this.renderCount++;
|
|
@@ -56,10 +61,6 @@ describe('装饰器', () => {
|
|
|
56
61
|
const el = new DecoratorGemElement();
|
|
57
62
|
expect(el.propData).to.eql({ value: '' });
|
|
58
63
|
expect(el.getAttribute('rank-attr')).to.equal(null);
|
|
59
|
-
// v2 BUG
|
|
60
|
-
expect(el.rankAttr).to.equal('');
|
|
61
|
-
el.connectedCallback();
|
|
62
|
-
expect(el.getAttribute('rank-attr')).to.equal(null);
|
|
63
64
|
expect(el.rankAttr).to.equal('');
|
|
64
65
|
|
|
65
66
|
el.rankAttr = 'attr';
|
|
@@ -82,23 +83,23 @@ describe('装饰器', () => {
|
|
|
82
83
|
`);
|
|
83
84
|
updateStore(store, { a: 1 });
|
|
84
85
|
await Promise.resolve();
|
|
85
|
-
|
|
86
|
-
expect(
|
|
87
|
-
expect(
|
|
88
|
-
expect(
|
|
89
|
-
expect(
|
|
90
|
-
expect(
|
|
91
|
-
expect(
|
|
92
|
-
expect(
|
|
93
|
-
expect(DecoratorGemElement.
|
|
94
|
-
expect(DecoratorGemElement.
|
|
86
|
+
const metadata: Metadata = Reflect.get(DecoratorGemElement, Symbol.metadata);
|
|
87
|
+
expect(metadata.observedStores).to.eql([{ a: 1 }]);
|
|
88
|
+
expect(metadata.observedAttributes).to.eql(['rank-attr', 'rank-disabled', 'rank-count']);
|
|
89
|
+
expect(metadata.definedEvents).to.eql(['say-hi']);
|
|
90
|
+
expect(metadata.definedCSSStates).to.eql(['open-state']);
|
|
91
|
+
expect(metadata.definedParts).to.eql(['say-hi', 'header-part']);
|
|
92
|
+
expect(metadata.definedSlots).to.eql(['rank-attr', 'body-slot']);
|
|
93
|
+
expect(metadata.observedProperties).to.eql(['propData']);
|
|
94
|
+
expect(DecoratorGemElement.sayHi).to.equal('say-hi');
|
|
95
|
+
expect(DecoratorGemElement.rankAttr).to.equal('rank-attr');
|
|
95
96
|
expect(el.rankAttr).to.equal('attr');
|
|
96
97
|
expect(el.rankDisabled).to.equal(true);
|
|
97
98
|
expect(el.rankCount).to.equal(2);
|
|
98
99
|
expect(el.propData).to.eql({ value: 'prop' });
|
|
99
100
|
expect(el.openState).to.equal(false);
|
|
100
101
|
expect(el.headerPart).to.equal('header-part');
|
|
101
|
-
expect(el.inputRef.ref.startsWith('
|
|
102
|
+
expect(el.inputRef.ref.startsWith('ref-')).to.equal(true);
|
|
102
103
|
expect(el.bodySlot).to.equal('body-slot');
|
|
103
104
|
expect(el).shadowDom.to.equal('attr: attr, disabled: true, count: 2, prop: prop');
|
|
104
105
|
updateStore(store, { a: 3 });
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { expect, fixture } from '@open-wc/testing';
|
|
2
2
|
|
|
3
|
-
import { attribute, customElement, property
|
|
4
|
-
import { GemElement, html } from '../../lib/element';
|
|
3
|
+
import { attribute, customElement, property } from '../../lib/decorators';
|
|
4
|
+
import { GemElement, html, createRef } from '../../lib/element';
|
|
5
5
|
|
|
6
6
|
@customElement('app-children')
|
|
7
7
|
export class Children extends GemElement {
|
|
8
|
-
@refobject inputRef: RefObject<HTMLInputElement>;
|
|
9
8
|
@property value?: { value: number };
|
|
10
9
|
@attribute attr: string;
|
|
10
|
+
inputRef = createRef<HTMLInputElement>();
|
|
11
11
|
|
|
12
12
|
render() {
|
|
13
13
|
return html`<input ref=${this.inputRef.ref} />`;
|
|
@@ -16,8 +16,8 @@ export class Children extends GemElement {
|
|
|
16
16
|
|
|
17
17
|
@customElement('app-root')
|
|
18
18
|
export class App extends GemElement {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
childrenRef1 = createRef<Children>();
|
|
20
|
+
childrenRef2 = createRef<Children>();
|
|
21
21
|
render() {
|
|
22
22
|
return html`
|
|
23
23
|
<app-children ref=${this.childrenRef1.ref} .value=${{ value: 1 }} attr="1"></app-children>
|
package/src/test/utils.test.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { expect } from '@open-wc/testing';
|
|
2
2
|
|
|
3
|
+
import { createCSSSheet, SheetToken } from '../lib/element';
|
|
3
4
|
import {
|
|
4
5
|
LinkedList,
|
|
5
6
|
QueryString,
|
|
6
7
|
css,
|
|
7
8
|
raw,
|
|
8
|
-
createCSSSheet,
|
|
9
9
|
styled,
|
|
10
|
-
SheetToken,
|
|
11
10
|
styleMap,
|
|
12
11
|
classMap,
|
|
13
12
|
exportPartsMap,
|
|
@@ -84,13 +83,17 @@ describe('utils 测试', () => {
|
|
|
84
83
|
});
|
|
85
84
|
it('createCSSSheet', () => {
|
|
86
85
|
const cssSheet = createCSSSheet(css`
|
|
87
|
-
|
|
86
|
+
div {
|
|
88
87
|
background: red;
|
|
89
88
|
}
|
|
90
89
|
`);
|
|
91
|
-
const rules = cssSheet[SheetToken].cssRules;
|
|
92
|
-
expect(rules.item(0).selectorText).to.equal('
|
|
90
|
+
const rules = cssSheet[SheetToken].getStyle().cssRules;
|
|
91
|
+
expect(rules.item(0).selectorText).to.equal('div');
|
|
93
92
|
expect(rules.item(0).style.background).to.equal('red');
|
|
93
|
+
const bodyStyleSheet = cssSheet[SheetToken].getStyle(document.body);
|
|
94
|
+
expect(bodyStyleSheet.cssRules.item(0).cssText.startsWith('@scope (body)')).to.true;
|
|
95
|
+
expect(bodyStyleSheet).to.equal(bodyStyleSheet);
|
|
96
|
+
expect(bodyStyleSheet).not.to.equal(cssSheet[SheetToken].getStyle(document.documentElement));
|
|
94
97
|
});
|
|
95
98
|
it('raw/css', () => {
|
|
96
99
|
const title: any = undefined;
|
|
@@ -99,30 +102,21 @@ describe('utils 测试', () => {
|
|
|
99
102
|
});
|
|
100
103
|
it('styled', () => {
|
|
101
104
|
const cssSheet = createCSSSheet({
|
|
105
|
+
$: styled.class``,
|
|
102
106
|
scroll: styled.class`
|
|
103
107
|
background: red;
|
|
104
108
|
&:hover * {
|
|
105
109
|
background: blue;
|
|
106
110
|
}
|
|
107
111
|
`,
|
|
108
|
-
wrap: styled.id`
|
|
109
|
-
position: fixed;
|
|
110
|
-
animation: 3s infinite alternate slideIn;
|
|
111
|
-
`,
|
|
112
|
-
slideIn: styled.keyframes`
|
|
113
|
-
from {
|
|
114
|
-
transform: translateX(0%);
|
|
115
|
-
}
|
|
116
|
-
`,
|
|
117
112
|
});
|
|
118
113
|
expect(cssSheet.scroll.startsWith('scroll')).to.true;
|
|
119
|
-
const rules = cssSheet[SheetToken].cssRules;
|
|
120
|
-
expect(rules.item(0).selectorText.
|
|
121
|
-
expect(rules.item(
|
|
122
|
-
expect(rules.item(
|
|
123
|
-
expect(rules.item(
|
|
124
|
-
expect(rules.item(1).
|
|
125
|
-
expect((rules.item(2) as any).name).to.equal('slideIn');
|
|
114
|
+
const rules = cssSheet[SheetToken].getStyle().cssRules;
|
|
115
|
+
expect(rules.item(0).selectorText).to.equal(':scope, :host');
|
|
116
|
+
expect(rules.item(1).selectorText.startsWith('.scroll')).to.true;
|
|
117
|
+
expect(rules.item(1).style.background).to.equal('red');
|
|
118
|
+
expect(rules.item(1).cssRules.item(0).selectorText).to.equal('&:hover *');
|
|
119
|
+
expect(rules.item(1).cssRules.item(0).style.background).to.equal('blue');
|
|
126
120
|
});
|
|
127
121
|
it('styleMap/classMap/exportPartsMap', () => {
|
|
128
122
|
expect(styleMap({ '--x': '1px', fontSize: '14px', content: `'*'` })).to.equal(
|
|
@@ -132,28 +126,4 @@ describe('utils 测试', () => {
|
|
|
132
126
|
expect(exportPartsMap({ foo: 'bar', content: 'content', false: false })).to.equal(`,foo:bar,content,`);
|
|
133
127
|
expect(exportPartsMap({ foo: 'bar', content: true })).to.equal(`,foo:bar,content,`);
|
|
134
128
|
});
|
|
135
|
-
// it('createCSSAnimation', () => {
|
|
136
|
-
// expect(createCSSAnimation([{ opacity: 0 }])).to.equal('100%{;opacity:0;}');
|
|
137
|
-
// expect(createCSSAnimation([{ opacity: 1 }, { opacity: 0 }])).to.equal('0%{;opacity:1;}100%{;opacity:0;}');
|
|
138
|
-
// expect(createCSSAnimation([{ opacity: 1 }, { opacity: 0.1, offset: 0.7 }, { opacity: 0 }])).to.equal(
|
|
139
|
-
// '0%{;opacity:1;}70%{;opacity:0.1;}100%{;opacity:0;}',
|
|
140
|
-
// );
|
|
141
|
-
// expect(createCSSAnimation({ opacity: [0] })).to.equal('100%{;opacity:0;}');
|
|
142
|
-
// expect(createCSSAnimation({ opacity: [1, 0] })).to.equal('0%{;opacity:1;}100%{;opacity:0;}');
|
|
143
|
-
// expect(createCSSAnimation({ opacity: [1, 0], offset: [0, 0.7] })).to.equal(
|
|
144
|
-
// '0%{;opacity:1;}70%{;opacity:0;}100%{;}',
|
|
145
|
-
// );
|
|
146
|
-
// expect(createCSSAnimation({ opacity: [1, 0], backgroundColor: ['red', 'yellow', 'green'] })).to.equal(
|
|
147
|
-
// '0%{;opacity:1;background-color:red;}100%{;opacity:0;background-color:green;}50%{;background-color:yellow;}',
|
|
148
|
-
// );
|
|
149
|
-
// expect(
|
|
150
|
-
// createCSSAnimation({
|
|
151
|
-
// opacity: [1, 0],
|
|
152
|
-
// backgroundColor: ['red', 'yellow', 'green'],
|
|
153
|
-
// offset: [0, 0.7],
|
|
154
|
-
// }),
|
|
155
|
-
// ).to.equal(
|
|
156
|
-
// '0%{;opacity:1;background-color:red;}70%{;opacity:0;background-color:yellow;}100%{;background-color:green;}',
|
|
157
|
-
// );
|
|
158
|
-
// });
|
|
159
129
|
});
|