@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 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.call('exec', props.src, 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: ({ props }) => ({
28
+ Img: {
28
29
  width: 'inherit',
29
30
  ignoreChildExtends: true,
30
31
  height: 'inherit',
31
- src: props.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.5.1",
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.5.1",
9
- "@domql/utils": "^3.5.1",
10
- "smbls": "^3.5.1",
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
- }