@symbo.ls/atoms 3.5.1 → 3.6.1
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/Box.js +0 -13
- package/Iframe.js +1 -15
- package/Img.js +3 -5
- package/Picture.js +5 -4
- package/Video.js +0 -14
- package/package.json +8 -7
- package/Collection.js +0 -228
- package/Media copy.js +0 -216
- package/Media.js +0 -280
package/Box.js
CHANGED
|
@@ -17,19 +17,6 @@ export const Box = {
|
|
|
17
17
|
|
|
18
18
|
boxSizing: 'border-box',
|
|
19
19
|
|
|
20
|
-
attr: {
|
|
21
|
-
id: el => el.call('isString', el.props.id) && el.props.id,
|
|
22
|
-
title: el => el.call('isString', el.props.title) && el.props.title,
|
|
23
|
-
contentEditable: el => el.props.contentEditable || el.props.contenteditable,
|
|
24
|
-
dir: el => el.props.dir,
|
|
25
|
-
draggable: el => el.props.draggable,
|
|
26
|
-
hidden: el => el.props.hidden,
|
|
27
|
-
lang: el => el.props.lang,
|
|
28
|
-
spellcheck: el => el.props.spellcheck,
|
|
29
|
-
tabindex: el => el.props.tabindex,
|
|
30
|
-
translate: el => el.props.translate
|
|
31
|
-
},
|
|
32
|
-
|
|
33
20
|
onBeforeClassAssign
|
|
34
21
|
}
|
|
35
22
|
|
package/Iframe.js
CHANGED
|
@@ -4,19 +4,5 @@ export const Iframe = {
|
|
|
4
4
|
tag: 'iframe',
|
|
5
5
|
position: 'relative',
|
|
6
6
|
minWidth: 'H',
|
|
7
|
-
minHeight: 'H'
|
|
8
|
-
|
|
9
|
-
attr: {
|
|
10
|
-
src: (el, s) => {
|
|
11
|
-
let src = el.call('exec', el.props.src, el)
|
|
12
|
-
|
|
13
|
-
if (!src) return
|
|
14
|
-
|
|
15
|
-
if (el.call('isString', src) && src.includes('{{')) {
|
|
16
|
-
src = el.call('replaceLiteralsWithObjectFields', src)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return src
|
|
20
|
-
}
|
|
21
|
-
}
|
|
7
|
+
minHeight: 'H'
|
|
22
8
|
}
|
package/Img.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
import { resolvePropValue } from 'attrs-in-props'
|
|
4
|
+
|
|
3
5
|
export const Img = {
|
|
4
6
|
tag: 'img',
|
|
5
7
|
|
|
6
8
|
attr: {
|
|
7
9
|
src: (el) => {
|
|
8
10
|
const { props, context } = el
|
|
9
|
-
let src = (props.preSrc || '') + el
|
|
10
|
-
|
|
11
|
-
if (el.call('isString', src) && src.includes('{{')) {
|
|
12
|
-
src = el.call('replaceLiteralsWithObjectFields', src)
|
|
13
|
-
}
|
|
11
|
+
let src = (props.preSrc || '') + resolvePropValue(el, props.src)
|
|
14
12
|
|
|
15
13
|
let isUrl
|
|
16
14
|
try { isUrl = new URL(src) } catch (e) { }
|
package/Picture.js
CHANGED
|
@@ -7,6 +7,7 @@ export const Picture = {
|
|
|
7
7
|
tag: 'picture',
|
|
8
8
|
|
|
9
9
|
childExtends: {
|
|
10
|
+
deps: { getSystemGlobalTheme },
|
|
10
11
|
tag: 'source',
|
|
11
12
|
attr: {
|
|
12
13
|
media: (element) => {
|
|
@@ -20,14 +21,14 @@ export const Picture = {
|
|
|
20
21
|
return '(max-width: 0px)'
|
|
21
22
|
|
|
22
23
|
return MEDIA[mediaName]
|
|
23
|
-
}
|
|
24
|
+
}
|
|
24
25
|
}
|
|
25
26
|
},
|
|
26
27
|
|
|
27
|
-
Img:
|
|
28
|
+
Img: {
|
|
28
29
|
width: 'inherit',
|
|
29
30
|
ignoreChildExtends: true,
|
|
30
31
|
height: 'inherit',
|
|
31
|
-
src:
|
|
32
|
-
}
|
|
32
|
+
src: (element, state) => element.parent.src || state.src
|
|
33
|
+
}
|
|
33
34
|
}
|
package/Video.js
CHANGED
|
@@ -7,19 +7,5 @@ export const Video = {
|
|
|
7
7
|
|
|
8
8
|
childExtends: {
|
|
9
9
|
tag: 'source'
|
|
10
|
-
},
|
|
11
|
-
|
|
12
|
-
attr: {
|
|
13
|
-
src: (el, s) => {
|
|
14
|
-
let src = el.call('exec', el.props.src, el)
|
|
15
|
-
|
|
16
|
-
if (!src) return
|
|
17
|
-
|
|
18
|
-
if (el.call('isString', src) && src.includes('{{')) {
|
|
19
|
-
src = el.call('replaceLiteralsWithObjectFields', src)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return src
|
|
23
|
-
}
|
|
24
10
|
}
|
|
25
11
|
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@symbo.ls/atoms",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"gitHead": "9fc1b79b41cdc725ca6b24aec64920a599634681",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@domql/state": "^3.
|
|
9
|
-
"@domql/utils": "^3.
|
|
10
|
-
"
|
|
11
|
-
"@symbo.ls/scratch": "^3.5.1"
|
|
8
|
+
"@domql/state": "^3.6.1",
|
|
9
|
+
"@domql/utils": "^3.6.1",
|
|
10
|
+
"@symbo.ls/scratch": "^3.6.1"
|
|
12
11
|
},
|
|
13
12
|
"source": "index.js",
|
|
14
13
|
"devDependencies": {
|
|
@@ -18,8 +17,10 @@
|
|
|
18
17
|
"module": "index.js",
|
|
19
18
|
"exports": {
|
|
20
19
|
".": {
|
|
21
|
-
"import": "./index.js"
|
|
22
|
-
"default": "./index.js"
|
|
20
|
+
"import": "./index.js"
|
|
23
21
|
}
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
24
25
|
}
|
|
25
26
|
}
|
package/Collection.js
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
import { isState, getChildStateInKey } from '@domql/state'
|
|
4
|
-
import {
|
|
5
|
-
isString,
|
|
6
|
-
isNumber,
|
|
7
|
-
isNot,
|
|
8
|
-
isArray,
|
|
9
|
-
isObject,
|
|
10
|
-
isObjectLike,
|
|
11
|
-
exec,
|
|
12
|
-
deepClone,
|
|
13
|
-
addAdditionalExtend
|
|
14
|
-
} from '@domql/utils'
|
|
15
|
-
|
|
16
|
-
export const Collection = {
|
|
17
|
-
define: {
|
|
18
|
-
$collection: async (param, el, state) => {
|
|
19
|
-
const { __ref: ref } = el
|
|
20
|
-
const {
|
|
21
|
-
children: childrenProps,
|
|
22
|
-
childrenAs,
|
|
23
|
-
childExtends
|
|
24
|
-
} = el.props || {}
|
|
25
|
-
const children = childrenProps && (await exec(childrenProps, el, state))
|
|
26
|
-
|
|
27
|
-
const childrenAsDefault = childrenAs || 'props'
|
|
28
|
-
|
|
29
|
-
if (children) {
|
|
30
|
-
if (isObject(children)) {
|
|
31
|
-
if (children.$$typeof) return el.call('renderReact', children, el)
|
|
32
|
-
param = deepClone(children)
|
|
33
|
-
param = Object.keys(param).map(v => {
|
|
34
|
-
const val = param[v]
|
|
35
|
-
return addAdditionalExtend(v, val)
|
|
36
|
-
})
|
|
37
|
-
} else if (isArray(children)) {
|
|
38
|
-
param = deepClone(children)
|
|
39
|
-
if (childrenAsDefault && childrenAsDefault !== 'element') {
|
|
40
|
-
param = param.map(v => ({
|
|
41
|
-
...(childExtends && { extends: childExtends }),
|
|
42
|
-
[childrenAsDefault]: isObjectLike(v)
|
|
43
|
-
? v
|
|
44
|
-
: childrenAsDefault === 'state'
|
|
45
|
-
? { value: v }
|
|
46
|
-
: { text: v }
|
|
47
|
-
}))
|
|
48
|
-
}
|
|
49
|
-
} else if (isString(children) || isNumber(children)) {
|
|
50
|
-
el.removeContent()
|
|
51
|
-
el.content = { text: param }
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!param) return
|
|
57
|
-
|
|
58
|
-
const filterReact = param.filter(v => !v.$$typeof)
|
|
59
|
-
if (filterReact.length !== param.length) {
|
|
60
|
-
const extractedReactComponents = param.filter(v => v.$$typeof)
|
|
61
|
-
el.call('renderReact', extractedReactComponents, el)
|
|
62
|
-
}
|
|
63
|
-
param = filterReact
|
|
64
|
-
|
|
65
|
-
if (isString(param)) {
|
|
66
|
-
if (param === 'state') param = state.parse()
|
|
67
|
-
else param = getChildStateInKey(param, state)
|
|
68
|
-
}
|
|
69
|
-
if (isState(param)) param = param.parse()
|
|
70
|
-
if (isNot(param)('array', 'object')) return
|
|
71
|
-
|
|
72
|
-
param = deepClone(param)
|
|
73
|
-
|
|
74
|
-
if (ref.__collectionCache) {
|
|
75
|
-
const equals =
|
|
76
|
-
JSON.stringify(param) === JSON.stringify(ref.__collectionCache)
|
|
77
|
-
if (equals) {
|
|
78
|
-
ref.__noCollectionDifference = true
|
|
79
|
-
return
|
|
80
|
-
} else {
|
|
81
|
-
ref.__collectionCache = deepClone(param)
|
|
82
|
-
delete ref.__noCollectionDifference
|
|
83
|
-
}
|
|
84
|
-
} else {
|
|
85
|
-
ref.__collectionCache = deepClone(param)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const obj = {
|
|
89
|
-
tag: 'fragment',
|
|
90
|
-
ignoreChildProps: true,
|
|
91
|
-
childProps: el.props && el.props.childProps
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
for (const key in param) {
|
|
95
|
-
const value = param[key]
|
|
96
|
-
if (value) obj[key] = isObjectLike(value) ? value : { value }
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
el.removeContent()
|
|
100
|
-
el.content = obj
|
|
101
|
-
|
|
102
|
-
// return deepClone(param)
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
$setCollection: async (param, el, state) => {
|
|
106
|
-
if (!param) return
|
|
107
|
-
|
|
108
|
-
if (isString(param)) {
|
|
109
|
-
if (param === 'state') param = state.parse()
|
|
110
|
-
else param = getChildStateInKey(param, state)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const data = (
|
|
114
|
-
isArray(param) ? param : isObject(param) ? Object.values(param) : []
|
|
115
|
-
).map(item => (!isObjectLike(item) ? { value: item } : item))
|
|
116
|
-
|
|
117
|
-
if (data.length) {
|
|
118
|
-
const t = setTimeout(() => {
|
|
119
|
-
el.set(
|
|
120
|
-
{ tag: 'fragment', ...data },
|
|
121
|
-
{ preventDefineUpdate: '$setCollection' }
|
|
122
|
-
)
|
|
123
|
-
clearTimeout(t)
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return data
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
$stateCollection: async (param, el, state, ctx) => {
|
|
131
|
-
const { children, childrenAs } = el.props || {}
|
|
132
|
-
if (!param || children || childrenAs) return
|
|
133
|
-
|
|
134
|
-
if (isString(param)) {
|
|
135
|
-
if (param === 'state') param = state.parse()
|
|
136
|
-
else param = getChildStateInKey(param, state)
|
|
137
|
-
}
|
|
138
|
-
if (isState(param)) param = param.parse()
|
|
139
|
-
if (isNot(param)('array', 'object')) return
|
|
140
|
-
|
|
141
|
-
const { __ref: ref } = el
|
|
142
|
-
param = deepClone(param)
|
|
143
|
-
|
|
144
|
-
if (ref.__stateCollectionCache) {
|
|
145
|
-
const equals =
|
|
146
|
-
JSON.stringify(param) === JSON.stringify(ref.__stateCollectionCache)
|
|
147
|
-
if (equals) {
|
|
148
|
-
ref.__noCollectionDifference = true
|
|
149
|
-
return
|
|
150
|
-
} else {
|
|
151
|
-
ref.__stateCollectionCache = deepClone(param)
|
|
152
|
-
delete ref.__noCollectionDifference
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
ref.__stateCollectionCache = deepClone(param)
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const obj = {
|
|
159
|
-
tag: 'fragment',
|
|
160
|
-
ignoreChildProps: true,
|
|
161
|
-
childProps: el.props && el.props.childProps
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
for (const key in param) {
|
|
165
|
-
const value = param[key]
|
|
166
|
-
if (value) obj[key] = { state: isObjectLike(value) ? value : { value } }
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
el.removeContent()
|
|
170
|
-
el.content = obj
|
|
171
|
-
|
|
172
|
-
// return deepClone(param)
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
$propsCollection: async (param, el, state) => {
|
|
176
|
-
const { children, childrenAs } = el.props || {}
|
|
177
|
-
if (!param || children || childrenAs) return
|
|
178
|
-
|
|
179
|
-
if (isString(param)) {
|
|
180
|
-
if (param === 'state') param = state.parse()
|
|
181
|
-
else param = getChildStateInKey(param, state)
|
|
182
|
-
}
|
|
183
|
-
if (isState(param)) param = param.parse()
|
|
184
|
-
if (isNot(param)('array', 'object')) return
|
|
185
|
-
|
|
186
|
-
const { __ref: ref } = el
|
|
187
|
-
param = deepClone(param)
|
|
188
|
-
|
|
189
|
-
if (ref.__propsCollectionCache) {
|
|
190
|
-
const equals =
|
|
191
|
-
JSON.stringify(param) === JSON.stringify(ref.__propsCollectionCache) // eslint-disable-line
|
|
192
|
-
if (equals) {
|
|
193
|
-
ref.__noCollectionDifference = true
|
|
194
|
-
return
|
|
195
|
-
} else {
|
|
196
|
-
ref.__propsCollectionCache = deepClone(param)
|
|
197
|
-
delete ref.__noCollectionDifference
|
|
198
|
-
}
|
|
199
|
-
} else {
|
|
200
|
-
ref.__propsCollectionCache = deepClone(param)
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
const obj = {
|
|
204
|
-
tag: 'fragment',
|
|
205
|
-
ignoreChildProps: true,
|
|
206
|
-
childProps: el.props && el.props.childProps
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
for (const key in param) {
|
|
210
|
-
const value = param[key]
|
|
211
|
-
if (value) obj[key] = { props: isObjectLike(value) ? value : { value } }
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
el.removeContent()
|
|
215
|
-
el.content = obj
|
|
216
|
-
|
|
217
|
-
// const set = () => {
|
|
218
|
-
// el.set(obj, { preventDefineUpdate: '$propsCollection' })
|
|
219
|
-
// }
|
|
220
|
-
|
|
221
|
-
// if (el.props && el.props.lazyLoad) {
|
|
222
|
-
// window.requestAnimationFrame(set)
|
|
223
|
-
// } else set()
|
|
224
|
-
|
|
225
|
-
// return deepClone(param)
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
package/Media copy.js
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
import { merge, isArray, overwriteDeep, overwriteShallow } from '@domql/utils'
|
|
4
|
-
import { getSystemGlobalTheme } from './Theme'
|
|
5
|
-
|
|
6
|
-
export const keySetters = {
|
|
7
|
-
'@': (key, props, result, element, isSubtree) => applyMediaProps(
|
|
8
|
-
key, props, isSubtree ? result : (result && result.media), element
|
|
9
|
-
),
|
|
10
|
-
':': (key, props, result, element, isSubtree) => applySelectorProps(
|
|
11
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
12
|
-
),
|
|
13
|
-
'[': (key, props, result, element, isSubtree) => applySelectorProps(
|
|
14
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
15
|
-
),
|
|
16
|
-
'*': (key, props, result, element, isSubtree) => applySelectorProps(
|
|
17
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
18
|
-
),
|
|
19
|
-
'+': (key, props, result, element, isSubtree) => applySelectorProps(
|
|
20
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
21
|
-
),
|
|
22
|
-
'~': (key, props, result, element, isSubtree) => applySelectorProps(
|
|
23
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
24
|
-
),
|
|
25
|
-
'&': (key, props, result, element, isSubtree) => applyAndProps(
|
|
26
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
27
|
-
),
|
|
28
|
-
'>': (key, props, result, element, isSubtree) => applyAndProps(
|
|
29
|
-
key, props, isSubtree ? result : (result && result.selector), element
|
|
30
|
-
),
|
|
31
|
-
$: (key, props, result, element, isSubtree) => applyCaseProps(
|
|
32
|
-
key, props, isSubtree ? result : (result && result.case), element
|
|
33
|
-
),
|
|
34
|
-
'-': (key, props, result, element, isSubtree) => applyVariableProps(
|
|
35
|
-
key, props, isSubtree ? result : (result && result.variable), element
|
|
36
|
-
),
|
|
37
|
-
'.': (key, props, result, element, isSubtree) => applyConditionalCaseProps(
|
|
38
|
-
key, props, isSubtree ? result : (result && result.case), element
|
|
39
|
-
),
|
|
40
|
-
'!': (key, props, result, element, isSubtree) => applyConditionalFalsyProps(
|
|
41
|
-
key, props, isSubtree ? result : (result && result.case), element
|
|
42
|
-
)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const execClass = (key, props, result, element) => {
|
|
46
|
-
const { class: className } = element
|
|
47
|
-
const classnameExec = className[key]
|
|
48
|
-
|
|
49
|
-
if (typeof classnameExec !== 'function') return
|
|
50
|
-
|
|
51
|
-
let classExec = classnameExec({
|
|
52
|
-
props,
|
|
53
|
-
context: element.context,
|
|
54
|
-
state: element.state,
|
|
55
|
-
deps: element.deps
|
|
56
|
-
}, element.state, element.context)
|
|
57
|
-
|
|
58
|
-
if (isArray(classExec)) classExec = classExec.reduce((a, c) => merge(a, c), {})
|
|
59
|
-
|
|
60
|
-
for (const finalProp in classExec) {
|
|
61
|
-
result[finalProp] = classExec[finalProp]
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return classExec
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const convertPropsToClass = (props, result, element) => {
|
|
68
|
-
const propsClassObj = {}
|
|
69
|
-
|
|
70
|
-
for (const key in props) {
|
|
71
|
-
const setter = keySetters[key.slice(0, 1)]
|
|
72
|
-
if (setter) {
|
|
73
|
-
setter(key, props[key], propsClassObj, element, true)
|
|
74
|
-
continue
|
|
75
|
-
} else {
|
|
76
|
-
execClass(key, props, propsClassObj, element)
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return propsClassObj
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const applyMediaProps = (key, props, result, element) => {
|
|
84
|
-
const { context } = element
|
|
85
|
-
if (!context.designSystem || !context.designSystem.MEDIA) return
|
|
86
|
-
const globalTheme = getSystemGlobalTheme(element)
|
|
87
|
-
const { MEDIA } = context.designSystem
|
|
88
|
-
const mediaValue = MEDIA[key.slice(1)]
|
|
89
|
-
const generatedClass = convertPropsToClass(props, result, element)
|
|
90
|
-
|
|
91
|
-
const name = key.slice(1)
|
|
92
|
-
const isTheme = ['dark', 'light'].includes(name)
|
|
93
|
-
const matchesGlobal = name === globalTheme
|
|
94
|
-
|
|
95
|
-
if (globalTheme && isTheme) {
|
|
96
|
-
if (matchesGlobal) return merge(result, generatedClass)
|
|
97
|
-
return
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const printValue = '@media ' + (mediaValue === 'print' ? `${mediaValue}` : `screen and ${mediaValue}`)
|
|
101
|
-
const mediaKey = mediaValue ? printValue : key
|
|
102
|
-
result[mediaKey] = generatedClass
|
|
103
|
-
return result[mediaKey]
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const applyAndProps = (key, props, result, element) => {
|
|
107
|
-
result[key] = convertPropsToClass(props, result, element)
|
|
108
|
-
return result[key]
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const applySelectorProps = (key, props, result, element) => {
|
|
112
|
-
const selectorKey = `&${key}`
|
|
113
|
-
result[selectorKey] = convertPropsToClass(props, result, element)
|
|
114
|
-
return result[selectorKey]
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const applyCaseProps = (key, props, result, element) => {
|
|
118
|
-
const { CASES } = element.context && element.context.designSystem
|
|
119
|
-
const caseKey = key.slice(1)
|
|
120
|
-
const isPropTrue = element.props[caseKey]
|
|
121
|
-
if (!CASES[caseKey] && !isPropTrue) return
|
|
122
|
-
return merge(result, convertPropsToClass(props, result, element))
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const applyVariableProps = (key, props, result, element) => {
|
|
126
|
-
result[key] = props
|
|
127
|
-
return result
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const applyConditionalCaseProps = (key, props, result, element) => {
|
|
131
|
-
const caseKey = key.slice(1)
|
|
132
|
-
const isPropTrue = element.props[caseKey] === true || element.state[caseKey] || element[caseKey]
|
|
133
|
-
if (!isPropTrue) return // remove classname if not here
|
|
134
|
-
return overwriteDeep(result, convertPropsToClass(props, result, element))
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const applyConditionalFalsyProps = (key, props, result, element) => {
|
|
138
|
-
const caseKey = key.slice(1)
|
|
139
|
-
const isPropTrue = element.props[caseKey] === true || element.state[caseKey] || element[caseKey]
|
|
140
|
-
if (!isPropTrue) return overwriteDeep(result, convertPropsToClass(props, result, element))
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const applyTrueProps = (props, result, element) => merge(result, convertPropsToClass(props, result, element))
|
|
144
|
-
|
|
145
|
-
const getSetter = (key, element) => {
|
|
146
|
-
const { props } = element
|
|
147
|
-
const setter = keySetters[key.slice(0, 1)]
|
|
148
|
-
|
|
149
|
-
if (setter) setter(key, props[key], CLASS_NAMES, element)
|
|
150
|
-
else if (key === 'true') applyTrueProps(props[key], CLASS_NAMES, element)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const beforeClassAssign = (element, s) => {
|
|
154
|
-
const { props, class: className, context } = element
|
|
155
|
-
|
|
156
|
-
const CLASS_NAMES = {
|
|
157
|
-
media: {},
|
|
158
|
-
selector: {},
|
|
159
|
-
case: {},
|
|
160
|
-
variable: {}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (!context) return
|
|
164
|
-
const globalTheme = context.designSystem.globalTheme
|
|
165
|
-
|
|
166
|
-
for (const key in props) {
|
|
167
|
-
const setter = keySetters[key.slice(0, 1)]
|
|
168
|
-
if (globalTheme) {
|
|
169
|
-
if (key === 'theme' && !props.themeModifier) {
|
|
170
|
-
props.update({
|
|
171
|
-
themeModifier: globalTheme
|
|
172
|
-
}, {
|
|
173
|
-
preventListeners: true,
|
|
174
|
-
preventRecursive: true,
|
|
175
|
-
isForced: true,
|
|
176
|
-
preventDefineUpdate: true
|
|
177
|
-
})
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
if (setter) setter(key, props[key], CLASS_NAMES, element)
|
|
181
|
-
else if (key === 'true') applyTrueProps(props[key], CLASS_NAMES, element)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// override props
|
|
185
|
-
// if (props['^']) {
|
|
186
|
-
// for (const key in props['^']) {
|
|
187
|
-
// execClass(key, props, CLASS_NAMES, element)
|
|
188
|
-
// }
|
|
189
|
-
// }
|
|
190
|
-
|
|
191
|
-
const parentProps = element.parent && element.parent.props
|
|
192
|
-
if (parentProps && parentProps.spacingRatio && parentProps.inheritSpacingRatio) {
|
|
193
|
-
element.setProps({
|
|
194
|
-
spacingRatio: parentProps.spacingRatio,
|
|
195
|
-
inheritSpacingRatio: true
|
|
196
|
-
}, {
|
|
197
|
-
preventListeners: true,
|
|
198
|
-
preventRecursive: true,
|
|
199
|
-
isForced: true,
|
|
200
|
-
preventDefineUpdate: true
|
|
201
|
-
})
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
overwriteShallow(className, CLASS_NAMES)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export const Media = {
|
|
208
|
-
class: {
|
|
209
|
-
case: (el, s) => {
|
|
210
|
-
return {
|
|
211
|
-
//
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
on: { beforeClassAssign }
|
|
216
|
-
}
|
package/Media.js
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
import { merge, isArray, overwriteDeep, overwriteShallow } from '@domql/utils'
|
|
4
|
-
import { getSystemGlobalTheme } from './Theme.js'
|
|
5
|
-
|
|
6
|
-
export const keySetters = {
|
|
7
|
-
'@': (key, props, result, element, isSubtree) =>
|
|
8
|
-
applyMediaProps(
|
|
9
|
-
key,
|
|
10
|
-
props,
|
|
11
|
-
isSubtree ? result : result && result.media,
|
|
12
|
-
element
|
|
13
|
-
),
|
|
14
|
-
':': (key, props, result, element, isSubtree) =>
|
|
15
|
-
applySelectorProps(
|
|
16
|
-
key,
|
|
17
|
-
props,
|
|
18
|
-
isSubtree ? result : result && result.selector,
|
|
19
|
-
element
|
|
20
|
-
),
|
|
21
|
-
'[': (key, props, result, element, isSubtree) =>
|
|
22
|
-
applySelectorProps(
|
|
23
|
-
key,
|
|
24
|
-
props,
|
|
25
|
-
isSubtree ? result : result && result.selector,
|
|
26
|
-
element
|
|
27
|
-
),
|
|
28
|
-
'*': (key, props, result, element, isSubtree) =>
|
|
29
|
-
applySelectorProps(
|
|
30
|
-
key,
|
|
31
|
-
props,
|
|
32
|
-
isSubtree ? result : result && result.selector,
|
|
33
|
-
element
|
|
34
|
-
),
|
|
35
|
-
'+': (key, props, result, element, isSubtree) =>
|
|
36
|
-
applySelectorProps(
|
|
37
|
-
key,
|
|
38
|
-
props,
|
|
39
|
-
isSubtree ? result : result && result.selector,
|
|
40
|
-
element
|
|
41
|
-
),
|
|
42
|
-
'~': (key, props, result, element, isSubtree) =>
|
|
43
|
-
applySelectorProps(
|
|
44
|
-
key,
|
|
45
|
-
props,
|
|
46
|
-
isSubtree ? result : result && result.selector,
|
|
47
|
-
element
|
|
48
|
-
),
|
|
49
|
-
'&': (key, props, result, element, isSubtree) =>
|
|
50
|
-
applyAndProps(
|
|
51
|
-
key,
|
|
52
|
-
props,
|
|
53
|
-
isSubtree ? result : result && result.selector,
|
|
54
|
-
element
|
|
55
|
-
),
|
|
56
|
-
'>': (key, props, result, element, isSubtree) =>
|
|
57
|
-
applyAndProps(
|
|
58
|
-
key,
|
|
59
|
-
props,
|
|
60
|
-
isSubtree ? result : result && result.selector,
|
|
61
|
-
element
|
|
62
|
-
),
|
|
63
|
-
$: (key, props, result, element, isSubtree) =>
|
|
64
|
-
applyCaseProps(
|
|
65
|
-
key,
|
|
66
|
-
props,
|
|
67
|
-
isSubtree ? result : result && result.case,
|
|
68
|
-
element
|
|
69
|
-
),
|
|
70
|
-
'-': (key, props, result, element, isSubtree) =>
|
|
71
|
-
applyVariableProps(
|
|
72
|
-
key,
|
|
73
|
-
props,
|
|
74
|
-
isSubtree ? result : result && result.variable,
|
|
75
|
-
element
|
|
76
|
-
),
|
|
77
|
-
'.': (key, props, result, element, isSubtree) =>
|
|
78
|
-
applyConditionalCaseProps(
|
|
79
|
-
key,
|
|
80
|
-
props,
|
|
81
|
-
isSubtree ? result : result && result.case,
|
|
82
|
-
element
|
|
83
|
-
),
|
|
84
|
-
'!': (key, props, result, element, isSubtree) =>
|
|
85
|
-
applyConditionalFalsyProps(
|
|
86
|
-
key,
|
|
87
|
-
props,
|
|
88
|
-
isSubtree ? result : result && result.case,
|
|
89
|
-
element
|
|
90
|
-
)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const execClass = (key, props, result, element) => {
|
|
94
|
-
const { class: className } = element
|
|
95
|
-
const classnameExec = className[key]
|
|
96
|
-
|
|
97
|
-
if (typeof classnameExec !== 'function') return
|
|
98
|
-
|
|
99
|
-
let classExec = classnameExec(
|
|
100
|
-
{
|
|
101
|
-
props,
|
|
102
|
-
context: element.context,
|
|
103
|
-
state: element.state,
|
|
104
|
-
deps: element.deps
|
|
105
|
-
},
|
|
106
|
-
element.state,
|
|
107
|
-
element.context
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
if (isArray(classExec))
|
|
111
|
-
classExec = classExec.reduce((a, c) => merge(a, c), {})
|
|
112
|
-
|
|
113
|
-
for (const finalProp in classExec) {
|
|
114
|
-
result[finalProp] = classExec[finalProp]
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return classExec
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const convertPropsToClass = (props, result, element) => {
|
|
121
|
-
const propsClassObj = {}
|
|
122
|
-
|
|
123
|
-
for (const key in props) {
|
|
124
|
-
const setter = keySetters[key.slice(0, 1)]
|
|
125
|
-
if (setter) {
|
|
126
|
-
setter(key, props[key], propsClassObj, element, true)
|
|
127
|
-
continue
|
|
128
|
-
} else {
|
|
129
|
-
execClass(key, props, propsClassObj, element)
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return propsClassObj
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const applyMediaProps = (key, props, result, element) => {
|
|
137
|
-
const { context } = element
|
|
138
|
-
if (!context.designSystem || !context.designSystem.MEDIA) return
|
|
139
|
-
const globalTheme = getSystemGlobalTheme(element)
|
|
140
|
-
const { MEDIA } = context.designSystem
|
|
141
|
-
const mediaValue = MEDIA[key.slice(1)]
|
|
142
|
-
const generatedClass = convertPropsToClass(props, result, element)
|
|
143
|
-
|
|
144
|
-
const name = key.slice(1)
|
|
145
|
-
const isTheme = ['dark', 'light'].includes(name)
|
|
146
|
-
const matchesGlobal = name === globalTheme
|
|
147
|
-
|
|
148
|
-
if (globalTheme && isTheme) {
|
|
149
|
-
if (matchesGlobal) return merge(result, generatedClass)
|
|
150
|
-
return
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const printValue =
|
|
154
|
-
'@media ' +
|
|
155
|
-
(mediaValue === 'print' ? `${mediaValue}` : `screen and ${mediaValue}`)
|
|
156
|
-
const mediaKey = mediaValue ? printValue : key
|
|
157
|
-
result[mediaKey] = generatedClass
|
|
158
|
-
return result[mediaKey]
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const applyAndProps = (key, props, result, element) => {
|
|
162
|
-
result[key] = convertPropsToClass(props, result, element)
|
|
163
|
-
return result[key]
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const applySelectorProps = (key, props, result, element) => {
|
|
167
|
-
const selectorKey = `&${key}`
|
|
168
|
-
result[selectorKey] = convertPropsToClass(props, result, element)
|
|
169
|
-
return result[selectorKey]
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const applyCaseProps = (key, props, result, element) => {
|
|
173
|
-
const { CASES } = element.context && element.context.designSystem
|
|
174
|
-
const caseKey = key.slice(1)
|
|
175
|
-
const isPropTrue = element.props[caseKey]
|
|
176
|
-
if (!CASES[caseKey] && !isPropTrue) return
|
|
177
|
-
return merge(result, convertPropsToClass(props, result, element))
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const applyVariableProps = (key, props, result, element) => {
|
|
181
|
-
result[key] = props
|
|
182
|
-
return result
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
const applyConditionalCaseProps = (key, props, result, element) => {
|
|
186
|
-
const caseKey = key.slice(1)
|
|
187
|
-
const isPropTrue =
|
|
188
|
-
element.props[caseKey] === true ||
|
|
189
|
-
element.state[caseKey] ||
|
|
190
|
-
element[caseKey]
|
|
191
|
-
if (!isPropTrue) return // remove classname if not here
|
|
192
|
-
return overwriteDeep(result, convertPropsToClass(props, result, element))
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const applyConditionalFalsyProps = (key, props, result, element) => {
|
|
196
|
-
const caseKey = key.slice(1)
|
|
197
|
-
const isPropTrue =
|
|
198
|
-
element.props[caseKey] === true ||
|
|
199
|
-
element.state[caseKey] ||
|
|
200
|
-
element[caseKey]
|
|
201
|
-
if (!isPropTrue)
|
|
202
|
-
return overwriteDeep(result, convertPropsToClass(props, result, element))
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
const applyTrueProps = (props, result, element) =>
|
|
206
|
-
merge(result, convertPropsToClass(props, result, element))
|
|
207
|
-
|
|
208
|
-
export const beforeClassAssign = (element, s, ctx) => {
|
|
209
|
-
const { props, class: className, context } = element
|
|
210
|
-
|
|
211
|
-
const CLASS_NAMES = {
|
|
212
|
-
media: {},
|
|
213
|
-
selector: {},
|
|
214
|
-
case: {},
|
|
215
|
-
variable: {}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (!context) return
|
|
219
|
-
const globalTheme = context.designSystem.globalTheme
|
|
220
|
-
|
|
221
|
-
for (const key in props) {
|
|
222
|
-
const setter = keySetters[key.slice(0, 1)]
|
|
223
|
-
if (globalTheme) {
|
|
224
|
-
if (key === 'theme' && !props.themeModifier) {
|
|
225
|
-
props.themeModifier = globalTheme
|
|
226
|
-
// props.update(
|
|
227
|
-
// {
|
|
228
|
-
// themeModifier: globalTheme
|
|
229
|
-
// },
|
|
230
|
-
// {
|
|
231
|
-
// preventListeners: true,
|
|
232
|
-
// preventRecursive: true,
|
|
233
|
-
// isForced: true,
|
|
234
|
-
// preventDefineUpdate: true
|
|
235
|
-
// }
|
|
236
|
-
// )
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
if (setter) setter(key, props[key], CLASS_NAMES, element)
|
|
240
|
-
else if (key === 'class') {
|
|
241
|
-
const value = element.props.class
|
|
242
|
-
if (!element.call('isString', value)) return
|
|
243
|
-
const classArr = value.split(' ')
|
|
244
|
-
const scratchClasses = ctx.designSystem.CLASS
|
|
245
|
-
CLASS_NAMES.class = classArr.reduce((accumulator, current) => {
|
|
246
|
-
const scratchClass = scratchClasses[current]
|
|
247
|
-
return merge(accumulator, scratchClass)
|
|
248
|
-
}, {})
|
|
249
|
-
} else if (key === 'true') applyTrueProps(props[key], CLASS_NAMES, element)
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// override props
|
|
253
|
-
// if (props['^']) {
|
|
254
|
-
// for (const key in props['^']) {
|
|
255
|
-
// execClass(key, props, CLASS_NAMES, element)
|
|
256
|
-
// }
|
|
257
|
-
// }
|
|
258
|
-
|
|
259
|
-
const parentProps = element.parent && element.parent.props
|
|
260
|
-
if (
|
|
261
|
-
parentProps &&
|
|
262
|
-
parentProps.spacingRatio &&
|
|
263
|
-
parentProps.inheritSpacingRatio
|
|
264
|
-
) {
|
|
265
|
-
element.setProps(
|
|
266
|
-
{
|
|
267
|
-
spacingRatio: parentProps.spacingRatio,
|
|
268
|
-
inheritSpacingRatio: true
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
preventListeners: true,
|
|
272
|
-
preventRecursive: true,
|
|
273
|
-
isForced: true,
|
|
274
|
-
preventDefineUpdate: true
|
|
275
|
-
}
|
|
276
|
-
)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
overwriteShallow(className, CLASS_NAMES)
|
|
280
|
-
}
|