@symbo.ls/default-config 3.8.9 → 3.14.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/README.md +4 -1
- package/__tests__/assetMedia.test.js +242 -0
- package/__tests__/componentsManifest.test.js +41 -0
- package/blank/font.js +1 -1
- package/blank/index.js +8 -8
- package/components/Atoms/AssetPicture.js +34 -0
- package/components/Atoms/Audio.js +38 -0
- package/components/Atoms/Block.js +29 -0
- package/components/Atoms/Box.js +37 -0
- package/components/Atoms/Form.js +5 -0
- package/components/Atoms/Grid.js +37 -0
- package/components/Atoms/Hgroup.js +75 -0
- package/components/Atoms/Iframe.js +8 -0
- package/components/Atoms/Img.js +33 -0
- package/components/Atoms/InteractiveComponent.js +65 -0
- package/components/Atoms/Picture.js +34 -0
- package/components/Atoms/Shape/index.js +3 -0
- package/components/Atoms/Shape.js +249 -0
- package/components/Atoms/Svg.js +78 -0
- package/components/Atoms/Text.js +45 -0
- package/components/Atoms/Theme.js +20 -0
- package/components/Atoms/Video.js +45 -0
- package/components/Avatar.js +10 -0
- package/components/Button.js +72 -0
- package/components/Dialog.js +69 -0
- package/components/Dropdown.js +153 -0
- package/components/Icon/index.js +236 -0
- package/components/Icon/style.js +8 -0
- package/components/Input/Checkbox.js +54 -0
- package/components/Input/Input.js +37 -0
- package/components/Input/NumberInput.js +25 -0
- package/components/Input/Radio.js +31 -0
- package/components/Input/Textarea.js +47 -0
- package/components/Input/Toggle.js +36 -0
- package/components/Link.js +166 -0
- package/components/Notification.js +43 -0
- package/components/Range.js +106 -0
- package/components/Select.js +33 -0
- package/components/Tooltip/index.js +133 -0
- package/components/Tooltip/style.js +12 -0
- package/components/index.js +91 -0
- package/default/font.js +1 -1
- package/default/index.js +2 -2
- package/designSystem/color.js +70 -0
- package/designSystem/font.js +21 -0
- package/designSystem/icons.js +69 -0
- package/designSystem/index.js +45 -0
- package/designSystem/media.js +31 -0
- package/designSystem/spacing.js +6 -0
- package/designSystem/theme.js +247 -0
- package/designSystem/timing.js +8 -0
- package/designSystem/typography.js +9 -0
- package/index.js +15 -0
- package/package.json +4 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { router as defaultRouter } from '@symbo.ls/router'
|
|
4
|
+
import { resolvePropValue } from 'attrs-in-props'
|
|
5
|
+
|
|
6
|
+
// SPA-by-default click handler. `Link` mixes this in below so internal hrefs
|
|
7
|
+
// route through the smbls router instead of triggering a full page reload.
|
|
8
|
+
// External schemes (http(s), mailto:, tel:, etc.) fall through to the browser.
|
|
9
|
+
const routerOnClick = (event, el, s) => {
|
|
10
|
+
const { context: ctx } = el
|
|
11
|
+
const { href: h, scrollToTop, stopPropagation } = el
|
|
12
|
+
let href = el.call('exec', h, el)
|
|
13
|
+
|
|
14
|
+
if (el.call('isString', href) && href.includes('{{')) {
|
|
15
|
+
href = el.call('replaceLiteralsWithObjectFields', href)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (stopPropagation) event.stopPropagation()
|
|
19
|
+
if (!href) return
|
|
20
|
+
const { utils, snippets, functions, routerOptions } = ctx
|
|
21
|
+
const root = el.__ref.root
|
|
22
|
+
const linkIsExternal =
|
|
23
|
+
href.startsWith('http://') ||
|
|
24
|
+
href.startsWith('https://') ||
|
|
25
|
+
href.startsWith('mailto:') ||
|
|
26
|
+
href.startsWith('tel:') ||
|
|
27
|
+
href.startsWith('sketch:') ||
|
|
28
|
+
href.startsWith('whatsapp:') ||
|
|
29
|
+
href.startsWith('sms:') ||
|
|
30
|
+
href.startsWith('skype:') ||
|
|
31
|
+
href.startsWith('viber:') ||
|
|
32
|
+
href.startsWith('callto:') ||
|
|
33
|
+
href.startsWith('facetime:') ||
|
|
34
|
+
href.startsWith('facetime-audio:') ||
|
|
35
|
+
href.startsWith('geo:') ||
|
|
36
|
+
href.startsWith('maps:')
|
|
37
|
+
if (href && !linkIsExternal) {
|
|
38
|
+
event.preventDefault()
|
|
39
|
+
try {
|
|
40
|
+
let targetEl = root
|
|
41
|
+
if (routerOptions && routerOptions.customRouterElement) {
|
|
42
|
+
const parts = Array.isArray(routerOptions.customRouterElement)
|
|
43
|
+
? routerOptions.customRouterElement
|
|
44
|
+
: routerOptions.customRouterElement.split('.')
|
|
45
|
+
let resolved = root
|
|
46
|
+
for (const part of parts) {
|
|
47
|
+
if (!resolved || !resolved[part]) { resolved = null; break }
|
|
48
|
+
resolved = resolved[part]
|
|
49
|
+
}
|
|
50
|
+
if (resolved) {
|
|
51
|
+
targetEl = resolved
|
|
52
|
+
if (root.routes) targetEl.routes = root.routes
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
;(functions.router || snippets.router || utils.router || defaultRouter)(
|
|
56
|
+
href,
|
|
57
|
+
targetEl,
|
|
58
|
+
{},
|
|
59
|
+
{
|
|
60
|
+
scrollToOptions: { behaviour: 'instant' },
|
|
61
|
+
scrollToTop: el.call('isDefined', scrollToTop) ? scrollToTop : true,
|
|
62
|
+
...routerOptions,
|
|
63
|
+
...el.routerOptions
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.warn(e)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const Link = {
|
|
73
|
+
extends: 'Focusable',
|
|
74
|
+
tag: 'a',
|
|
75
|
+
|
|
76
|
+
aria: {},
|
|
77
|
+
fontWeight: 'bold',
|
|
78
|
+
textDecoration: 'none',
|
|
79
|
+
color: 'currentColor',
|
|
80
|
+
draggable: false,
|
|
81
|
+
|
|
82
|
+
attr: {
|
|
83
|
+
href: (el) => {
|
|
84
|
+
return resolvePropValue(el, el.href) ||
|
|
85
|
+
resolvePropValue(el, el.call('exec', el, el).href)
|
|
86
|
+
},
|
|
87
|
+
'aria-label': (el) => (el.aria ? el.aria.label : el.text)
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
onClick: routerOnClick
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export const A = {
|
|
94
|
+
extends: 'Link'
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Kept for backwards compatibility — `Link` already has the router onClick
|
|
98
|
+
// built in, so `RouterLink` and `RouteLink` are now thin aliases.
|
|
99
|
+
export const RouterLink = {
|
|
100
|
+
onClick: (event, el, s) => {
|
|
101
|
+
const { context: ctx } = el
|
|
102
|
+
const { href: h, scrollToTop, stopPropagation } = el
|
|
103
|
+
let href = el.call('exec', h, el)
|
|
104
|
+
|
|
105
|
+
if (el.call('isString', href) && href.includes('{{')) {
|
|
106
|
+
href = el.call('replaceLiteralsWithObjectFields', href)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (stopPropagation) event.stopPropagation()
|
|
110
|
+
if (!href) return
|
|
111
|
+
const { utils, snippets, functions, routerOptions } = ctx
|
|
112
|
+
const root = el.__ref.root
|
|
113
|
+
const linkIsExternal =
|
|
114
|
+
href.startsWith('http://') ||
|
|
115
|
+
href.startsWith('https://') ||
|
|
116
|
+
href.startsWith('mailto:') ||
|
|
117
|
+
href.startsWith('tel:') ||
|
|
118
|
+
href.startsWith('sketch:') ||
|
|
119
|
+
href.startsWith('whatsapp:') ||
|
|
120
|
+
href.startsWith('sms:') ||
|
|
121
|
+
href.startsWith('skype:') ||
|
|
122
|
+
href.startsWith('viber:') ||
|
|
123
|
+
href.startsWith('callto:') ||
|
|
124
|
+
href.startsWith('facetime:') ||
|
|
125
|
+
href.startsWith('facetime-audio:') ||
|
|
126
|
+
href.startsWith('geo:') ||
|
|
127
|
+
href.startsWith('maps:')
|
|
128
|
+
if (href && !linkIsExternal) {
|
|
129
|
+
event.preventDefault()
|
|
130
|
+
try {
|
|
131
|
+
let targetEl = root
|
|
132
|
+
if (routerOptions && routerOptions.customRouterElement) {
|
|
133
|
+
const parts = Array.isArray(routerOptions.customRouterElement)
|
|
134
|
+
? routerOptions.customRouterElement
|
|
135
|
+
: routerOptions.customRouterElement.split('.')
|
|
136
|
+
let resolved = root
|
|
137
|
+
for (const part of parts) {
|
|
138
|
+
if (!resolved || !resolved[part]) { resolved = null; break }
|
|
139
|
+
resolved = resolved[part]
|
|
140
|
+
}
|
|
141
|
+
if (resolved) {
|
|
142
|
+
targetEl = resolved
|
|
143
|
+
if (root.routes) targetEl.routes = root.routes
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
;(functions.router || snippets.router || utils.router || defaultRouter)(
|
|
147
|
+
href,
|
|
148
|
+
targetEl,
|
|
149
|
+
{},
|
|
150
|
+
{
|
|
151
|
+
scrollToOptions: { behaviour: 'instant' },
|
|
152
|
+
scrollToTop: el.call('isDefined', scrollToTop) ? scrollToTop : true,
|
|
153
|
+
...routerOptions,
|
|
154
|
+
...el.routerOptions
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
} catch (e) {
|
|
158
|
+
console.warn(e)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export const RouteLink = {
|
|
165
|
+
extends: [Link, RouterLink]
|
|
166
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
export const Notification = {
|
|
4
|
+
display: 'flex',
|
|
5
|
+
theme: 'alert',
|
|
6
|
+
padding: 'Z1 B Z A',
|
|
7
|
+
round: 'A A A Y2',
|
|
8
|
+
gap: 'X2',
|
|
9
|
+
cursor: 'pointer',
|
|
10
|
+
align: 'flex-start center',
|
|
11
|
+
|
|
12
|
+
IconText: {
|
|
13
|
+
Icon: {
|
|
14
|
+
name: 'info outline'
|
|
15
|
+
},
|
|
16
|
+
Text: {
|
|
17
|
+
':empty': { hide: true }
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
Hgroup: {
|
|
22
|
+
extends: ['Flex', 'Hgroup'],
|
|
23
|
+
flow: 'y',
|
|
24
|
+
align: 'flex-start',
|
|
25
|
+
gap: 'X2',
|
|
26
|
+
|
|
27
|
+
H: {
|
|
28
|
+
tag: 'h6',
|
|
29
|
+
margin: '0',
|
|
30
|
+
fontWeight: '600',
|
|
31
|
+
lineHeight: '1em',
|
|
32
|
+
text: 'Notification',
|
|
33
|
+
':empty': { hide: true }
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
P: {
|
|
37
|
+
fontSize: 'Z',
|
|
38
|
+
margin: '0',
|
|
39
|
+
text: 'is not always a distraction',
|
|
40
|
+
':empty': { hide: true }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { opacify } from '@symbo.ls/scratch'
|
|
4
|
+
|
|
5
|
+
export const Range = {
|
|
6
|
+
tag: 'input',
|
|
7
|
+
|
|
8
|
+
appearance: 'none',
|
|
9
|
+
width: '100%',
|
|
10
|
+
height: '2px',
|
|
11
|
+
outline: 'none',
|
|
12
|
+
flex: 1,
|
|
13
|
+
|
|
14
|
+
onInput: (ev, el, s) => {
|
|
15
|
+
if (el.call('isFunction', el.onInput)) {
|
|
16
|
+
el.onInput(ev, el, s)
|
|
17
|
+
} else {
|
|
18
|
+
s.update({ value: parseFloat(el.node.value) })
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
onChange: (ev, el, s) => {
|
|
22
|
+
if (el.call('isFunction', el.onChange)) {
|
|
23
|
+
el.onChange(ev, el, s)
|
|
24
|
+
} else {
|
|
25
|
+
s.update({ value: parseFloat(el.node.value) })
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
'::-webkit-slider-thumb': {
|
|
30
|
+
boxSizing: 'content-box',
|
|
31
|
+
width: '8px',
|
|
32
|
+
height: '8px',
|
|
33
|
+
borderWidth: '2px',
|
|
34
|
+
borderStyle: 'solid',
|
|
35
|
+
borderRadius: '100%',
|
|
36
|
+
opacity: '.8',
|
|
37
|
+
appearance: 'none'
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
'::-webkit-slider-runnable-track': {},
|
|
41
|
+
|
|
42
|
+
'@dark': {
|
|
43
|
+
background: 'white.2',
|
|
44
|
+
|
|
45
|
+
'::-webkit-slider-thumb': {
|
|
46
|
+
background: '#232526',
|
|
47
|
+
borderColor: opacify('#454646', 0.75)
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
':hover': {
|
|
51
|
+
'::-webkit-slider-thumb': {
|
|
52
|
+
borderColor: opacify('#fff', 0.35)
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
':focus': {
|
|
57
|
+
'::-webkit-slider-thumb': {
|
|
58
|
+
borderColor: '#3C6AC0'
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
'@light': {
|
|
64
|
+
background: 'gray9',
|
|
65
|
+
|
|
66
|
+
'::-webkit-slider-thumb': {
|
|
67
|
+
background: 'white',
|
|
68
|
+
borderColor: 'gray9'
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
':hover': {
|
|
72
|
+
'::-webkit-slider-thumb': {
|
|
73
|
+
borderColor: 'gray7'
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
':focus': {
|
|
78
|
+
'::-webkit-slider-thumb': {
|
|
79
|
+
borderColor: 'blue'
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
deps: {
|
|
85
|
+
returnPropertyValue: (el, property, def) => {
|
|
86
|
+
const val = el.call('exec', el[property], el)
|
|
87
|
+
const r = el.call('isFunction', val)
|
|
88
|
+
? val(el, el.state)
|
|
89
|
+
: val !== undefined
|
|
90
|
+
? val
|
|
91
|
+
: def !== undefined
|
|
92
|
+
? def
|
|
93
|
+
: 0
|
|
94
|
+
return r + ''
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
attr: {
|
|
99
|
+
type: 'range',
|
|
100
|
+
value: (el, s) =>
|
|
101
|
+
el.call('exec', s.value || el.value || el.defaultValue, el),
|
|
102
|
+
min: (el, s) => el.deps.returnPropertyValue(el, 'min', 0),
|
|
103
|
+
max: (el, s) => el.deps.returnPropertyValue(el, 'max', 100),
|
|
104
|
+
step: (el, s) => el.deps.returnPropertyValue(el, 'step', 1)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
export const Select = {
|
|
4
|
+
extends: 'Focusable',
|
|
5
|
+
tag: 'select',
|
|
6
|
+
|
|
7
|
+
fontSize: 'A',
|
|
8
|
+
border: 'none',
|
|
9
|
+
boxSizing: 'border-box',
|
|
10
|
+
theme: 'field',
|
|
11
|
+
cursor: 'pointer',
|
|
12
|
+
childProps: {
|
|
13
|
+
tag: 'option',
|
|
14
|
+
attr: {
|
|
15
|
+
value: (el) => el.value,
|
|
16
|
+
selected: (el) => el.selected,
|
|
17
|
+
disabled: (el) => el.disabled
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
attr: {
|
|
22
|
+
name: (el) => el.name,
|
|
23
|
+
disabled: (el) => el.disabled,
|
|
24
|
+
value: el => {
|
|
25
|
+
if (!el.value) return
|
|
26
|
+
const val = el.call('exec', el.value, el)
|
|
27
|
+
if (el.call('isString', val) && val.includes('{{')) {
|
|
28
|
+
return el.call('replaceLiteralsWithObjectFields', val)
|
|
29
|
+
}
|
|
30
|
+
return val
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { isDefined } from '@symbo.ls/utils'
|
|
4
|
+
|
|
5
|
+
export const Tooltip = {
|
|
6
|
+
display: 'flex',
|
|
7
|
+
|
|
8
|
+
theme: 'dialog',
|
|
9
|
+
background: 'black',
|
|
10
|
+
flow: 'column',
|
|
11
|
+
shape: 'tooltip',
|
|
12
|
+
shapeDirection: 'left',
|
|
13
|
+
padding: 'Z1 A',
|
|
14
|
+
round: 'Y2',
|
|
15
|
+
width: 'fit-content',
|
|
16
|
+
minWidth: 'D2',
|
|
17
|
+
maxWidth: 'F2',
|
|
18
|
+
gap: 'X',
|
|
19
|
+
textAlign: 'center',
|
|
20
|
+
attr: { tooltip: true },
|
|
21
|
+
|
|
22
|
+
Title: {
|
|
23
|
+
// FA106: canonical signature is `(el, s)` — destructure-from-object is
|
|
24
|
+
// banned because frank's audit flags it and it's inconsistent with
|
|
25
|
+
// every other reactive prop in the codebase. The `({ parent }) =>`
|
|
26
|
+
// shape happens to work at runtime (the destructure pulls `parent`
|
|
27
|
+
// out of `el`) but breaks on any project that runs frank-audit.
|
|
28
|
+
if: (el) => isDefined(el.parent.title) || el.parent.title,
|
|
29
|
+
width: 'fit-content',
|
|
30
|
+
fontWeight: 500,
|
|
31
|
+
color: 'gray12',
|
|
32
|
+
text: (el) => el.parent.title
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
P: {
|
|
36
|
+
if: (el, s) =>
|
|
37
|
+
el.call('isDefined', el.call('exec', el.parent.description, el)) ||
|
|
38
|
+
el.text,
|
|
39
|
+
width: 'fit-content',
|
|
40
|
+
fontSize: 'Z2',
|
|
41
|
+
margin: '0',
|
|
42
|
+
color: 'gray6',
|
|
43
|
+
fontWeight: '400',
|
|
44
|
+
text: (el, s) => el.call('exec', el.parent.description, el)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const TooltipHidden = {
|
|
49
|
+
extends: 'Tooltip',
|
|
50
|
+
|
|
51
|
+
position: 'absolute',
|
|
52
|
+
pointerEvents: 'none',
|
|
53
|
+
opacity: '0',
|
|
54
|
+
visibility: 'hidden',
|
|
55
|
+
transition:
|
|
56
|
+
'C defaultBezier opacity, C defaultBezier visibility, B defaultBezier transform',
|
|
57
|
+
|
|
58
|
+
onInit: (el) => {
|
|
59
|
+
const result = !el.shapeDirection || el.shapeDirection === 'top'
|
|
60
|
+
? {
|
|
61
|
+
top: '112%',
|
|
62
|
+
left: '50%',
|
|
63
|
+
transform: 'translate3d(-50%,10%,0)',
|
|
64
|
+
|
|
65
|
+
'.isActive': {
|
|
66
|
+
transform: 'translate3d(-50%,0,0)',
|
|
67
|
+
opacity: 1,
|
|
68
|
+
visibility: 'visible'
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
: el.shapeDirection === 'right'
|
|
72
|
+
? {
|
|
73
|
+
transform: 'translate3d(10%,-50%,0)',
|
|
74
|
+
left: '112%',
|
|
75
|
+
top: '50%',
|
|
76
|
+
|
|
77
|
+
'.isActive': {
|
|
78
|
+
transform: 'translate3d(0%,-50%,0)',
|
|
79
|
+
opacity: 1,
|
|
80
|
+
visibility: 'visible'
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
: el.shapeDirection === 'bottom'
|
|
84
|
+
? {
|
|
85
|
+
transform: 'translate3d(-50%,-10%,0)',
|
|
86
|
+
bottom: '112%',
|
|
87
|
+
left: '50%',
|
|
88
|
+
|
|
89
|
+
'.isActive': {
|
|
90
|
+
transform: 'translate3d(-50%,0,0)',
|
|
91
|
+
opacity: 1,
|
|
92
|
+
visibility: 'visible'
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
: el.shapeDirection === 'left'
|
|
96
|
+
? {
|
|
97
|
+
transform: 'translate3d(10%,-50%,0)',
|
|
98
|
+
right: '112%',
|
|
99
|
+
top: '50%',
|
|
100
|
+
|
|
101
|
+
'.isActive': {
|
|
102
|
+
transform: 'translate3d(0%,-50%,0)',
|
|
103
|
+
opacity: 1,
|
|
104
|
+
visibility: 'visible'
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
: {}
|
|
108
|
+
Object.assign(el, result)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const TooltipParent = {
|
|
113
|
+
position: 'relative',
|
|
114
|
+
zIndex: 999,
|
|
115
|
+
|
|
116
|
+
onInit: (el) => {
|
|
117
|
+
const { Tooltip, TooltipHidden } = el
|
|
118
|
+
const TooltipElem = Tooltip || TooltipHidden
|
|
119
|
+
if (!TooltipElem) return
|
|
120
|
+
const TooltipActive =
|
|
121
|
+
TooltipElem && TooltipElem['.isActive']
|
|
122
|
+
Object.assign(el, {
|
|
123
|
+
':hover, &:focus-visible': {
|
|
124
|
+
zIndex: 1000,
|
|
125
|
+
'& [tooltip]': TooltipActive || {
|
|
126
|
+
transform: 'translate3d(-50%, 0, 0)',
|
|
127
|
+
opacity: 1,
|
|
128
|
+
visibility: 'visible'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// Atoms
|
|
4
|
+
import * as _Block from './Atoms/Block.js'
|
|
5
|
+
import * as _Img from './Atoms/Img.js'
|
|
6
|
+
import * as _Form from './Atoms/Form.js'
|
|
7
|
+
import * as _Iframe from './Atoms/Iframe.js'
|
|
8
|
+
import * as _InteractiveComponent from './Atoms/InteractiveComponent.js'
|
|
9
|
+
import * as _Picture from './Atoms/Picture.js'
|
|
10
|
+
import * as _AssetPicture from './Atoms/AssetPicture.js'
|
|
11
|
+
import * as _Svg from './Atoms/Svg.js'
|
|
12
|
+
import * as _Shape from './Atoms/Shape.js'
|
|
13
|
+
import * as _Video from './Atoms/Video.js'
|
|
14
|
+
import * as _Audio from './Atoms/Audio.js'
|
|
15
|
+
import * as _Theme from './Atoms/Theme.js'
|
|
16
|
+
import * as _Text from './Atoms/Text.js'
|
|
17
|
+
import * as _Box from './Atoms/Box.js'
|
|
18
|
+
import * as _Hgroup from './Atoms/Hgroup.js'
|
|
19
|
+
|
|
20
|
+
// Input
|
|
21
|
+
import * as _Input from './Input/Input.js'
|
|
22
|
+
import * as _NumberInput from './Input/NumberInput.js'
|
|
23
|
+
import * as _Checkbox from './Input/Checkbox.js'
|
|
24
|
+
import * as _Radio from './Input/Radio.js'
|
|
25
|
+
import * as _Toggle from './Input/Toggle.js'
|
|
26
|
+
import * as _Textarea from './Input/Textarea.js'
|
|
27
|
+
|
|
28
|
+
// Components
|
|
29
|
+
import * as _Icon from './Icon/index.js'
|
|
30
|
+
import * as _Link from './Link.js'
|
|
31
|
+
import * as _Select from './Select.js'
|
|
32
|
+
import * as _Button from './Button.js'
|
|
33
|
+
import * as _Dialog from './Dialog.js'
|
|
34
|
+
import * as _Tooltip from './Tooltip/index.js'
|
|
35
|
+
import * as _Avatar from './Avatar.js'
|
|
36
|
+
import * as _Range from './Range.js'
|
|
37
|
+
import * as _Dropdown from './Dropdown.js'
|
|
38
|
+
import * as _Notification from './Notification.js'
|
|
39
|
+
|
|
40
|
+
// Re-export named exports for direct consumers (e.g.
|
|
41
|
+
// `import { Box } from '@symbo.ls/default-config/components'`).
|
|
42
|
+
export * from './Atoms/Block.js'
|
|
43
|
+
export * from './Atoms/Img.js'
|
|
44
|
+
export * from './Atoms/Form.js'
|
|
45
|
+
export * from './Atoms/Iframe.js'
|
|
46
|
+
export * from './Atoms/InteractiveComponent.js'
|
|
47
|
+
export * from './Atoms/Picture.js'
|
|
48
|
+
export * from './Atoms/AssetPicture.js'
|
|
49
|
+
export * from './Atoms/Svg.js'
|
|
50
|
+
export * from './Atoms/Shape.js'
|
|
51
|
+
export * from './Atoms/Video.js'
|
|
52
|
+
export * from './Atoms/Audio.js'
|
|
53
|
+
export * from './Atoms/Theme.js'
|
|
54
|
+
export * from './Atoms/Text.js'
|
|
55
|
+
export * from './Atoms/Box.js'
|
|
56
|
+
export * from './Atoms/Hgroup.js'
|
|
57
|
+
|
|
58
|
+
export * from './Input/Input.js'
|
|
59
|
+
export * from './Input/NumberInput.js'
|
|
60
|
+
export * from './Input/Checkbox.js'
|
|
61
|
+
export * from './Input/Radio.js'
|
|
62
|
+
export * from './Input/Toggle.js'
|
|
63
|
+
export * from './Input/Textarea.js'
|
|
64
|
+
|
|
65
|
+
export * from './Icon/index.js'
|
|
66
|
+
export * from './Link.js'
|
|
67
|
+
export * from './Select.js'
|
|
68
|
+
export * from './Button.js'
|
|
69
|
+
export * from './Dialog.js'
|
|
70
|
+
export * from './Tooltip/index.js'
|
|
71
|
+
export * from './Avatar.js'
|
|
72
|
+
export * from './Range.js'
|
|
73
|
+
export * from './Dropdown.js'
|
|
74
|
+
export * from './Notification.js'
|
|
75
|
+
|
|
76
|
+
// FT-FRAMEWORK-1: explicit components manifest. Built by spreading every
|
|
77
|
+
// atom/component module's named exports into one plain object. Parcel
|
|
78
|
+
// (under smbls's `sideEffects: false`) sometimes pruned exports off the
|
|
79
|
+
// `import * as uikit from '...'` namespace that prepare.js iterated, so
|
|
80
|
+
// consumer projects saw atoms missing from `context.components`. This
|
|
81
|
+
// dict is bundler-agnostic — it's a regular object literal whose
|
|
82
|
+
// references are statically locked into the module by `Object.assign`.
|
|
83
|
+
export const COMPONENTS = Object.assign(
|
|
84
|
+
{},
|
|
85
|
+
_Block, _Img, _Form, _Iframe, _InteractiveComponent,
|
|
86
|
+
_Picture, _AssetPicture, _Svg, _Shape, _Video, _Audio,
|
|
87
|
+
_Theme, _Text, _Box, _Hgroup,
|
|
88
|
+
_Input, _NumberInput, _Checkbox, _Radio, _Toggle, _Textarea,
|
|
89
|
+
_Icon, _Link, _Select, _Button, _Dialog, _Tooltip,
|
|
90
|
+
_Avatar, _Range, _Dropdown, _Notification
|
|
91
|
+
)
|
package/default/font.js
CHANGED
package/default/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { color, gradient } from './color.js'
|
|
|
4
4
|
import { theme } from './theme.js'
|
|
5
5
|
import { typography } from './typography.js'
|
|
6
6
|
import { spacing } from './spacing.js'
|
|
7
|
-
import { font,
|
|
7
|
+
import { font, fontFamily } from './font.js'
|
|
8
8
|
import { icons } from './icons.js'
|
|
9
9
|
import { media } from './media.js'
|
|
10
10
|
import { timing } from './timing.js'
|
|
@@ -17,7 +17,7 @@ export const DEFAULT_CONFIG = {
|
|
|
17
17
|
typography,
|
|
18
18
|
spacing,
|
|
19
19
|
font,
|
|
20
|
-
|
|
20
|
+
fontFamily,
|
|
21
21
|
timing,
|
|
22
22
|
icons,
|
|
23
23
|
media,
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
export const color = {
|
|
4
|
+
blue: '#213eb0',
|
|
5
|
+
green: '#389d34',
|
|
6
|
+
red: '#e15c55',
|
|
7
|
+
yellow: '#EDCB38',
|
|
8
|
+
orange: '#e97c16',
|
|
9
|
+
transparent: 'rgba(0, 0, 0, 0)',
|
|
10
|
+
black: 'black',
|
|
11
|
+
gray: '#4e4e50',
|
|
12
|
+
white: 'white',
|
|
13
|
+
title: [
|
|
14
|
+
'--gray 1 -168',
|
|
15
|
+
'--gray 1 +168'
|
|
16
|
+
],
|
|
17
|
+
caption: [
|
|
18
|
+
'--gray 1 -68',
|
|
19
|
+
'--gray 1 +68'
|
|
20
|
+
],
|
|
21
|
+
paragraph: [
|
|
22
|
+
'--gray 1 -42',
|
|
23
|
+
'--gray 1 +42'
|
|
24
|
+
],
|
|
25
|
+
disabled: [
|
|
26
|
+
'--gray 1 -26',
|
|
27
|
+
'--gray 1 +26'
|
|
28
|
+
],
|
|
29
|
+
line: [
|
|
30
|
+
'--gray 1 -16',
|
|
31
|
+
'--gray 1 +16'
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const gradient = {
|
|
36
|
+
'gradient-blue-light': `linear-gradient(to right,
|
|
37
|
+
rgba(4, 116, 242, 1),
|
|
38
|
+
rgba(0, 48, 103, 1)
|
|
39
|
+
)`,
|
|
40
|
+
'gradient-blue-dark': `linear-gradient(to right,
|
|
41
|
+
#0474F2,
|
|
42
|
+
#003067
|
|
43
|
+
)`,
|
|
44
|
+
|
|
45
|
+
'gradient-dark': `linear-gradient(0deg,
|
|
46
|
+
rgba(0,0,0,0.06) 0%,
|
|
47
|
+
rgba(0,0,0,0.07) 100%
|
|
48
|
+
)`,
|
|
49
|
+
'gradient-dark-active': `linear-gradient(0deg,
|
|
50
|
+
rgba(0,0,0,0.09) 0%,
|
|
51
|
+
rgba(0,0,0,0.1) 100%
|
|
52
|
+
)`,
|
|
53
|
+
'gradient-light': `linear-gradient(
|
|
54
|
+
0deg,
|
|
55
|
+
rgba(255,255,255,0.05) 0%,
|
|
56
|
+
rgba(255,255,255,0.06) 100%
|
|
57
|
+
)`,
|
|
58
|
+
'gradient-light-active': `linear-gradient(
|
|
59
|
+
0deg,
|
|
60
|
+
rgba(255,255,255,0.09) 0%,
|
|
61
|
+
rgba(255,255,255,0.10) 100%
|
|
62
|
+
)`,
|
|
63
|
+
'gradient-colorful': `linear-gradient(60deg,
|
|
64
|
+
#00A2E7 0%,
|
|
65
|
+
#185DF3 31%,
|
|
66
|
+
#1E54F0 36%,
|
|
67
|
+
#8B4CCA 69%,
|
|
68
|
+
#C66894 100%
|
|
69
|
+
)`
|
|
70
|
+
}
|