@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.
Files changed (54) hide show
  1. package/README.md +4 -1
  2. package/__tests__/assetMedia.test.js +242 -0
  3. package/__tests__/componentsManifest.test.js +41 -0
  4. package/blank/font.js +1 -1
  5. package/blank/index.js +8 -8
  6. package/components/Atoms/AssetPicture.js +34 -0
  7. package/components/Atoms/Audio.js +38 -0
  8. package/components/Atoms/Block.js +29 -0
  9. package/components/Atoms/Box.js +37 -0
  10. package/components/Atoms/Form.js +5 -0
  11. package/components/Atoms/Grid.js +37 -0
  12. package/components/Atoms/Hgroup.js +75 -0
  13. package/components/Atoms/Iframe.js +8 -0
  14. package/components/Atoms/Img.js +33 -0
  15. package/components/Atoms/InteractiveComponent.js +65 -0
  16. package/components/Atoms/Picture.js +34 -0
  17. package/components/Atoms/Shape/index.js +3 -0
  18. package/components/Atoms/Shape.js +249 -0
  19. package/components/Atoms/Svg.js +78 -0
  20. package/components/Atoms/Text.js +45 -0
  21. package/components/Atoms/Theme.js +20 -0
  22. package/components/Atoms/Video.js +45 -0
  23. package/components/Avatar.js +10 -0
  24. package/components/Button.js +72 -0
  25. package/components/Dialog.js +69 -0
  26. package/components/Dropdown.js +153 -0
  27. package/components/Icon/index.js +236 -0
  28. package/components/Icon/style.js +8 -0
  29. package/components/Input/Checkbox.js +54 -0
  30. package/components/Input/Input.js +37 -0
  31. package/components/Input/NumberInput.js +25 -0
  32. package/components/Input/Radio.js +31 -0
  33. package/components/Input/Textarea.js +47 -0
  34. package/components/Input/Toggle.js +36 -0
  35. package/components/Link.js +166 -0
  36. package/components/Notification.js +43 -0
  37. package/components/Range.js +106 -0
  38. package/components/Select.js +33 -0
  39. package/components/Tooltip/index.js +133 -0
  40. package/components/Tooltip/style.js +12 -0
  41. package/components/index.js +91 -0
  42. package/default/font.js +1 -1
  43. package/default/index.js +2 -2
  44. package/designSystem/color.js +70 -0
  45. package/designSystem/font.js +21 -0
  46. package/designSystem/icons.js +69 -0
  47. package/designSystem/index.js +45 -0
  48. package/designSystem/media.js +31 -0
  49. package/designSystem/spacing.js +6 -0
  50. package/designSystem/theme.js +247 -0
  51. package/designSystem/timing.js +8 -0
  52. package/designSystem/typography.js +9 -0
  53. package/index.js +15 -0
  54. 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,12 @@
1
+ 'use strict'
2
+
3
+ export default {
4
+ textAlign: 'center',
5
+ padding: '1.2em',
6
+ caption: {
7
+ whiteSpace: 'nowrap'
8
+ },
9
+ span: {
10
+ opacity: '.5'
11
+ }
12
+ }
@@ -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
@@ -6,7 +6,7 @@ export const font = {
6
6
  }]
7
7
  }
8
8
 
9
- export const font_family = {
9
+ export const fontFamily = {
10
10
  system: {
11
11
  value: ['"Helvetica Neue"', 'Helvetica', 'Arial'],
12
12
  type: 'sans-serif',
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, font_family } from './font.js'
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
- font_family,
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
+ }