@onetype/framework 2.0.22 → 2.0.25
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/addons/core/assets/back/functions/import.js +24 -0
- package/docs/architecture.md +58 -10
- package/docs/frontend.md +29 -12
- package/lib/items/elements/form/button/button.js +106 -0
- package/lib/items/elements/form/button/styles/base.css +176 -0
- package/lib/items/elements/form/button/styles/sizes.css +78 -0
- package/lib/items/elements/form/button/styles/variants.css +421 -0
- package/lib/items/elements/form/checkbox/checkbox.js +58 -0
- package/lib/items/elements/form/checkbox/styles/base.css +52 -0
- package/lib/items/elements/form/checkbox/styles/sizes.css +39 -0
- package/lib/items/elements/form/checkbox/styles/variants.css +121 -0
- package/lib/items/elements/form/field/field.css +96 -0
- package/lib/items/elements/form/field/field.js +40 -0
- package/lib/items/elements/form/input/input.css +111 -0
- package/lib/items/elements/form/input/input.js +79 -0
- package/lib/items/elements/form/input/styles/base.css +26 -0
- package/lib/items/elements/form/input/styles/sizes.css +15 -0
- package/lib/items/elements/form/input/styles/variants.css +98 -0
- package/lib/items/elements/form/radio/radio.js +58 -0
- package/lib/items/elements/form/radio/styles/base.css +48 -0
- package/lib/items/elements/form/radio/styles/sizes.css +36 -0
- package/lib/items/elements/form/radio/styles/variants.css +121 -0
- package/lib/items/elements/form/rating/rating.css +95 -0
- package/lib/items/elements/form/rating/rating.js +89 -0
- package/lib/items/elements/form/section/section.css +129 -0
- package/lib/items/elements/form/section/section.js +40 -0
- package/lib/items/elements/form/slider/slider.css +244 -0
- package/lib/items/elements/form/slider/slider.js +70 -0
- package/lib/items/elements/form/textarea/textarea.css +117 -0
- package/lib/items/elements/form/textarea/textarea.js +70 -0
- package/lib/items/elements/global/card/card.css +57 -0
- package/lib/items/elements/global/card/card.js +48 -0
- package/lib/items/elements/global/code/code.css +66 -0
- package/lib/items/elements/global/code/code.js +40 -0
- package/lib/items/elements/global/faq/faq.css +76 -0
- package/lib/items/elements/global/faq/faq.js +44 -0
- package/lib/items/elements/global/heading/heading.css +106 -0
- package/lib/items/elements/global/heading/heading.js +52 -0
- package/lib/items/elements/global/markdown/markdown.css +248 -0
- package/lib/items/elements/global/markdown/markdown.js +23 -0
- package/lib/items/elements/global/notice/notice.css +91 -0
- package/lib/items/elements/global/notice/notice.js +35 -0
- package/lib/items/elements/global/parameters/params.css +69 -0
- package/lib/items/elements/global/parameters/params.js +32 -0
- package/lib/items/elements/global/tabs/tabs.css +47 -0
- package/lib/items/elements/global/tabs/tabs.js +32 -0
- package/lib/items/elements/global/tags/tags.css +42 -0
- package/lib/items/elements/global/tags/tags.js +46 -0
- package/lib/items/elements/sections/footer/footer.css +205 -0
- package/lib/items/elements/sections/footer/footer.js +109 -0
- package/lib/items/elements/sections/hero/hero.css +100 -0
- package/lib/items/elements/sections/hero/hero.js +54 -0
- package/lib/items/elements/sections/navbar/navbar.css +80 -0
- package/lib/items/elements/sections/navbar/navbar.js +42 -0
- package/lib/items/elements/sections/stats/stats.css +34 -0
- package/lib/items/elements/sections/stats/stats.js +74 -0
- package/lib/items/elements/status/code/code.css +48 -0
- package/lib/items/elements/status/code/code.js +44 -0
- package/lib/items/elements/status/empty/empty.css +59 -0
- package/lib/items/elements/status/empty/empty.js +43 -0
- package/lib/items/elements/status/error/error.css +55 -0
- package/lib/items/elements/status/error/error.js +55 -0
- package/lib/items/elements/status/loading/loading.css +62 -0
- package/lib/items/elements/status/loading/loading.js +31 -0
- package/lib/load.js +83 -5
- package/lib/src/classes/addon/class.js +1 -1
- package/lib/src/classes/addon/mixins/store.js +8 -8
- package/lib/src/mixins/assets.js +65 -0
- package/lib/src/onetype.js +4 -0
- package/lib/styles/classes/layout.css +36 -0
- package/lib/styles/classes/spacing.css +96 -0
- package/lib/styles/queries.css +6 -0
- package/lib/styles/reset.css +169 -0
- package/lib/styles/variables.css +71 -0
- package/package.json +3 -3
- package/addons/core/clients/LICENSE.txt +0 -40
- package/addons/core/clients/README.md +0 -123
- package/addons/core/database/README.md +0 -276
- package/addons/render/assets/back/README.md +0 -1
- package/addons/render/assets/back/functions/import.js +0 -45
- package/addons/render/items/js/#register/addon.js +0 -14
- package/addons/render/items/js/functions/count.js +0 -9
- package/addons/render/items/js/functions/get.js +0 -34
- package/addons/render/items/js/functions/groups.js +0 -16
- package/addons/render/items/js/functions/render.js +0 -44
- package/addons/render/items/js/item/catch/add.js +0 -18
- package/test/front/test.js +0 -56
- package/test.js +0 -55
- /package/addons/{render → core}/assets/back/addon.js +0 -0
- /package/addons/{render → core}/assets/back/functions/css.js +0 -0
- /package/addons/{render → core}/assets/back/functions/js.js +0 -0
- /package/addons/{render → core}/assets/back/functions/scan/directories.js +0 -0
- /package/addons/{render → core}/assets/back/functions/scan/files.js +0 -0
- /package/addons/{render → core}/assets/back/functions/utils/read.js +0 -0
- /package/addons/{render → core}/assets/back/functions/utils/transform.js +0 -0
- /package/addons/{render → core}/assets/back/items/commands/css.js +0 -0
- /package/addons/{render → core}/assets/back/items/commands/js.js +0 -0
- /package/addons/{render → core}/assets/back/items/html/css.js +0 -0
- /package/addons/{render → core}/assets/back/items/html/js.js +0 -0
- /package/addons/{render → core}/assets/back/load.js +0 -0
- /package/addons/core/database/front/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/modals/front/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/overlays/front/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/popups/js/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/toasts/{#register/addon.js → addon.js} +0 -0
- /package/addons/float/tooltips/{#register/addon.js → addon.js} +0 -0
- /package/addons/render/transforms/{front/js/#register/addon.js → addon.js} +0 -0
- /package/addons/render/transforms/{front/js/functions → functions}/load/assets.js +0 -0
- /package/addons/render/transforms/{front/js/items → items}/directives/transform.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/accordion}/accordion.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/area.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bar.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/bubble.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/doughnut.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/line.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/pie.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/radar.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms}/chart/scatter.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codeflask}/codeflask.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/codemirror}/codemirror.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/comparison}/comparison.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/heatmap}/heatmap.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/interact}/interact.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/particles}/particles.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/sparkline}/sparkline.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/swiper}/swiper.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/tabs}/tabs.js +0 -0
- /package/{addons/render/transforms/front/js/items/self → lib/items/transforms/typed}/typed.js +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
.e-71d10544
|
|
2
|
+
{
|
|
3
|
+
display: flex;
|
|
4
|
+
width: 100%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.e-71d10544 > .holder
|
|
8
|
+
{
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
width: 100%;
|
|
12
|
+
border-top: 1px solid var(--ot-bg-2-border);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Inner */
|
|
16
|
+
|
|
17
|
+
.e-71d10544 > .holder > .inner
|
|
18
|
+
{
|
|
19
|
+
display: flex;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
gap: var(--ot-spacing-l);
|
|
22
|
+
max-width: 1200px;
|
|
23
|
+
width: 100%;
|
|
24
|
+
margin: 0 auto;
|
|
25
|
+
padding: 60px 32px 40px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Brand */
|
|
29
|
+
|
|
30
|
+
.e-71d10544 > .holder > .inner > .brand
|
|
31
|
+
{
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: var(--ot-spacing-s);
|
|
35
|
+
max-width: 320px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.e-71d10544 > .holder > .inner > .brand > .logo
|
|
39
|
+
{
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
text-decoration: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.e-71d10544 > .holder > .inner > .brand > .logo > .logo-icon
|
|
46
|
+
{
|
|
47
|
+
height: 20px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.e-71d10544 > .holder > .inner > .brand > .tagline
|
|
51
|
+
{
|
|
52
|
+
font-size: var(--ot-size-m);
|
|
53
|
+
color: var(--ot-text-2);
|
|
54
|
+
line-height: 1.6;
|
|
55
|
+
margin: var(--ot-spacing-x) 0 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Columns */
|
|
59
|
+
|
|
60
|
+
.e-71d10544 > .holder > .inner > .columns
|
|
61
|
+
{
|
|
62
|
+
display: flex;
|
|
63
|
+
gap: 80px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.e-71d10544 > .holder > .inner > .columns > .column
|
|
67
|
+
{
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
gap: var(--ot-spacing-s);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.e-71d10544 > .holder > .inner > .columns > .column > .column-title
|
|
74
|
+
{
|
|
75
|
+
font-size: var(--ot-size-s);
|
|
76
|
+
font-weight: 600;
|
|
77
|
+
color: var(--ot-text-1);
|
|
78
|
+
text-transform: uppercase;
|
|
79
|
+
letter-spacing: 0.5px;
|
|
80
|
+
margin: 0 0 var(--ot-spacing-x) 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.e-71d10544 > .holder > .inner > .columns > .column > .link
|
|
84
|
+
{
|
|
85
|
+
font-size: var(--ot-size-m);
|
|
86
|
+
color: var(--ot-text-2);
|
|
87
|
+
text-decoration: none;
|
|
88
|
+
transition: color 0.15s ease;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.e-71d10544 > .holder > .inner > .columns > .column > .link:hover
|
|
92
|
+
{
|
|
93
|
+
color: var(--ot-text-1);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Integrations */
|
|
97
|
+
|
|
98
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations
|
|
99
|
+
{
|
|
100
|
+
display: flex;
|
|
101
|
+
flex-direction: column;
|
|
102
|
+
gap: var(--ot-spacing-s);
|
|
103
|
+
margin-top: var(--ot-spacing-s);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-label
|
|
107
|
+
{
|
|
108
|
+
font-size: var(--ot-size-s);
|
|
109
|
+
font-weight: 600;
|
|
110
|
+
color: var(--ot-text-2);
|
|
111
|
+
text-transform: uppercase;
|
|
112
|
+
letter-spacing: 0.5px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list
|
|
116
|
+
{
|
|
117
|
+
display: flex;
|
|
118
|
+
align-items: center;
|
|
119
|
+
flex-wrap: wrap;
|
|
120
|
+
gap: 6px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list > .integration
|
|
124
|
+
{
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 6px;
|
|
128
|
+
padding: 4px 10px;
|
|
129
|
+
border-radius: 6px;
|
|
130
|
+
background: var(--ot-bg-2);
|
|
131
|
+
border: 1px solid var(--ot-bg-2-border);
|
|
132
|
+
font-size: var(--ot-size-s);
|
|
133
|
+
color: var(--ot-text-2);
|
|
134
|
+
text-decoration: none;
|
|
135
|
+
transition: color 0.15s ease, border-color 0.15s ease;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list > .integration > i
|
|
139
|
+
{
|
|
140
|
+
font-size: 14px;
|
|
141
|
+
color: var(--ot-text-2);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list > .integration.more
|
|
145
|
+
{
|
|
146
|
+
color: var(--ot-brand);
|
|
147
|
+
cursor: pointer;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list > .integration.more > i
|
|
151
|
+
{
|
|
152
|
+
color: var(--ot-brand);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.e-71d10544 > .holder > .inner > .brand > .integrations > .integrations-list > .integration.more:hover
|
|
156
|
+
{
|
|
157
|
+
border-color: var(--ot-brand);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Badges */
|
|
161
|
+
|
|
162
|
+
.e-71d10544 > .holder > .badges
|
|
163
|
+
{
|
|
164
|
+
display: flex;
|
|
165
|
+
align-items: center;
|
|
166
|
+
justify-content: center;
|
|
167
|
+
flex-wrap: wrap;
|
|
168
|
+
gap: var(--ot-spacing-m);
|
|
169
|
+
width: 100%;
|
|
170
|
+
padding: var(--ot-spacing-m) 32px;
|
|
171
|
+
border-top: 1px solid var(--ot-bg-2-border);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.e-71d10544 > .holder > .badges > .badge
|
|
175
|
+
{
|
|
176
|
+
display: flex;
|
|
177
|
+
align-items: center;
|
|
178
|
+
gap: 6px;
|
|
179
|
+
font-size: var(--ot-size-s);
|
|
180
|
+
color: var(--ot-text-2);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.e-71d10544 > .holder > .badges > .badge > i
|
|
184
|
+
{
|
|
185
|
+
font-size: 16px;
|
|
186
|
+
color: var(--ot-brand);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Bottom */
|
|
190
|
+
|
|
191
|
+
.e-71d10544 > .holder > .bottom
|
|
192
|
+
{
|
|
193
|
+
display: flex;
|
|
194
|
+
align-items: center;
|
|
195
|
+
justify-content: center;
|
|
196
|
+
width: 100%;
|
|
197
|
+
padding: var(--ot-spacing-m) 32px;
|
|
198
|
+
border-top: 1px solid var(--ot-bg-2-border);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.e-71d10544 > .holder > .bottom > .copyright
|
|
202
|
+
{
|
|
203
|
+
font-size: var(--ot-size-s);
|
|
204
|
+
color: var(--ot-text-2);
|
|
205
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
onetype.AddonReady('elements', (elements) =>
|
|
2
|
+
{
|
|
3
|
+
elements.ItemAdd({
|
|
4
|
+
id: 'sections-footer',
|
|
5
|
+
icon: 'dock_to_bottom',
|
|
6
|
+
name: 'Footer',
|
|
7
|
+
description: 'Site footer with logo, link columns, integrations, trust badges, and copyright.',
|
|
8
|
+
category: 'Section',
|
|
9
|
+
author: 'OneType',
|
|
10
|
+
config: {
|
|
11
|
+
columns: {
|
|
12
|
+
type: 'array',
|
|
13
|
+
value: [
|
|
14
|
+
{
|
|
15
|
+
title: 'Product',
|
|
16
|
+
links: [
|
|
17
|
+
{ label: 'Transforms', href: '/#transforms' },
|
|
18
|
+
{ label: 'Features', href: '/#features' },
|
|
19
|
+
{ label: 'Pricing', href: '/pricing' },
|
|
20
|
+
{ label: 'Changelog', href: '/changelog' }
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
title: 'Resources',
|
|
25
|
+
links: [
|
|
26
|
+
{ label: 'Documentation', href: 'https://docs.onetype.ai/transforms' },
|
|
27
|
+
{ label: 'GitHub', href: 'https://github.com/nicely-gg/transforms' },
|
|
28
|
+
{ label: 'npm', href: 'https://www.npmjs.com/package/@nicely-gg/transforms' },
|
|
29
|
+
{ label: 'Contact', href: 'https://onetype.ai/contact' }
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: 'Legal',
|
|
34
|
+
links: [
|
|
35
|
+
{ label: 'Terms of Service', href: 'https://onetype.ai/legal/terms' },
|
|
36
|
+
{ label: 'Privacy Policy', href: 'https://onetype.ai/legal/privacy' },
|
|
37
|
+
{ label: 'Cookie Policy', href: 'https://onetype.ai/legal/cookies' },
|
|
38
|
+
{ label: 'Developer Agreement', href: 'https://onetype.ai/legal/developer' },
|
|
39
|
+
{ label: 'Data Processing', href: 'https://onetype.ai/legal/dpa' },
|
|
40
|
+
{ label: 'Acceptable Use', href: 'https://onetype.ai/legal/aup' },
|
|
41
|
+
{ label: 'Subprocessors', href: 'https://onetype.ai/legal/subprocessors' }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
platforms: {
|
|
47
|
+
type: 'array',
|
|
48
|
+
value: [
|
|
49
|
+
{ icon: 'language', label: 'Any HTML' },
|
|
50
|
+
{ icon: 'web', label: 'Webflow' },
|
|
51
|
+
{ icon: 'design_services', label: 'Framer' },
|
|
52
|
+
{ icon: 'article', label: 'WordPress' },
|
|
53
|
+
{ icon: 'shopping_cart', label: 'Shopify' },
|
|
54
|
+
{ icon: 'storefront', label: 'Squarespace' }
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
badges: {
|
|
58
|
+
type: 'array',
|
|
59
|
+
value: [
|
|
60
|
+
{ icon: 'code_off', label: 'Zero Dependencies' },
|
|
61
|
+
{ icon: 'speed', label: 'Lazy Loaded' },
|
|
62
|
+
{ icon: 'devices', label: 'All Platforms' },
|
|
63
|
+
{ icon: 'open_in_new', label: 'Open Source Core' },
|
|
64
|
+
{ icon: 'verified', label: 'Web Components' }
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
render: function()
|
|
69
|
+
{
|
|
70
|
+
this.year = new Date().getFullYear();
|
|
71
|
+
|
|
72
|
+
return `
|
|
73
|
+
<footer class="holder">
|
|
74
|
+
<div class="inner">
|
|
75
|
+
<div class="brand">
|
|
76
|
+
<a class="logo" href="/">
|
|
77
|
+
<img class="logo-icon" src="https://global.divhunt.com/bd8ffd2fc9cf3a7e81b3326ac63a7cfe_4406.svg" alt="OneType" />
|
|
78
|
+
</a>
|
|
79
|
+
<p class="tagline">Custom HTML tags that become interactive components. One script, one tag — works on any platform.</p>
|
|
80
|
+
<div class="integrations">
|
|
81
|
+
<div class="integrations-list">
|
|
82
|
+
<div ot-for="item in platforms" class="integration">
|
|
83
|
+
<i>{{ item.icon }}</i>
|
|
84
|
+
<span>{{ item.label }}</span>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
<div class="columns">
|
|
90
|
+
<div ot-for="col in columns" class="column">
|
|
91
|
+
<h4 class="column-title">{{ col.title }}</h4>
|
|
92
|
+
<a ot-for="link in col.links" class="link" :href="link.href">{{ link.label }}</a>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="badges">
|
|
97
|
+
<div ot-for="badge in badges" class="badge">
|
|
98
|
+
<i>{{ badge.icon }}</i>
|
|
99
|
+
<span>{{ badge.label }}</span>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="bottom">
|
|
103
|
+
<span class="copyright">© {{ year }} OneType. All rights reserved.</span>
|
|
104
|
+
</div>
|
|
105
|
+
</footer>
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
.e-59eb0a1d
|
|
2
|
+
{
|
|
3
|
+
display: flex;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.e-59eb0a1d > .holder
|
|
7
|
+
{
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
align-items: center;
|
|
11
|
+
width: 100%;
|
|
12
|
+
padding: 80px var(--ot-spacing-m) 60px;
|
|
13
|
+
text-align: center;
|
|
14
|
+
gap: var(--ot-spacing-m);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Badge */
|
|
18
|
+
|
|
19
|
+
.e-59eb0a1d > .holder > .badge
|
|
20
|
+
{
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: 6px;
|
|
24
|
+
padding: 6px 14px;
|
|
25
|
+
border-radius: 100px;
|
|
26
|
+
border: 1px solid var(--ot-bg-2-border);
|
|
27
|
+
background: var(--ot-bg-2);
|
|
28
|
+
font-size: var(--ot-size-s);
|
|
29
|
+
font-weight: 500;
|
|
30
|
+
color: var(--ot-text-2);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.e-59eb0a1d > .holder > .badge > i
|
|
34
|
+
{
|
|
35
|
+
font-size: 14px;
|
|
36
|
+
color: var(--ot-brand);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Title */
|
|
40
|
+
|
|
41
|
+
.e-59eb0a1d > .holder > .title
|
|
42
|
+
{
|
|
43
|
+
font-size: 52px;
|
|
44
|
+
font-weight: 800;
|
|
45
|
+
line-height: 1.1;
|
|
46
|
+
color: var(--ot-text-1);
|
|
47
|
+
letter-spacing: -1px;
|
|
48
|
+
margin: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.e-59eb0a1d > .holder > .title > .highlight
|
|
52
|
+
{
|
|
53
|
+
color: var(--ot-brand);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Description */
|
|
57
|
+
|
|
58
|
+
.e-59eb0a1d > .holder > .description
|
|
59
|
+
{
|
|
60
|
+
max-width: 480px;
|
|
61
|
+
font-size: var(--ot-size-m);
|
|
62
|
+
line-height: 1.6;
|
|
63
|
+
color: var(--ot-text-2);
|
|
64
|
+
margin: 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Buttons */
|
|
68
|
+
|
|
69
|
+
.e-59eb0a1d > .holder > .buttons
|
|
70
|
+
{
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: var(--ot-spacing-s);
|
|
74
|
+
margin-top: var(--ot-spacing-s);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Trust */
|
|
78
|
+
|
|
79
|
+
.e-59eb0a1d > .holder > .trust
|
|
80
|
+
{
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: var(--ot-spacing-m);
|
|
84
|
+
margin-top: var(--ot-spacing-x);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.e-59eb0a1d > .holder > .trust > .trust-item
|
|
88
|
+
{
|
|
89
|
+
display: flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
gap: 4px;
|
|
92
|
+
font-size: var(--ot-size-s);
|
|
93
|
+
color: var(--ot-text-2);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.e-59eb0a1d > .holder > .trust > .trust-item > i
|
|
97
|
+
{
|
|
98
|
+
font-size: 14px;
|
|
99
|
+
color: var(--ot-green);
|
|
100
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
onetype.AddonReady('elements', (elements) =>
|
|
2
|
+
{
|
|
3
|
+
elements.ItemAdd({
|
|
4
|
+
id: 'sections-hero',
|
|
5
|
+
icon: 'star',
|
|
6
|
+
name: 'Hero',
|
|
7
|
+
description: 'Hero section with badge, heading, description, and CTA buttons.',
|
|
8
|
+
category: 'Component',
|
|
9
|
+
author: 'OneType',
|
|
10
|
+
config: {
|
|
11
|
+
badge: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
value: 'Interactive HTML Components'
|
|
14
|
+
},
|
|
15
|
+
title: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
value: 'One tag.'
|
|
18
|
+
},
|
|
19
|
+
highlight: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
value: 'Zero config.'
|
|
22
|
+
},
|
|
23
|
+
description: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
value: 'Drop a custom HTML tag, get an interactive component. Swiper, tabs, accordion, modal — works on any platform. No build tools, no JavaScript required.'
|
|
26
|
+
},
|
|
27
|
+
buttons: {
|
|
28
|
+
type: 'array',
|
|
29
|
+
value: [
|
|
30
|
+
{ text: 'Get Started', icon: 'arrow_forward', href: '#get-started', variant: 'brand' },
|
|
31
|
+
{ text: 'View on GitHub', icon: 'code', href: 'https://github.com/nicely-gg/transforms', variant: 'ghost border' }
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
render: function()
|
|
36
|
+
{
|
|
37
|
+
return `
|
|
38
|
+
<div class="holder">
|
|
39
|
+
<div ot-if="badge" class="badge"><i>widgets</i> {{ badge }}</div>
|
|
40
|
+
<h1 class="title">{{ title }}<br><span class="highlight">{{ highlight }}</span></h1>
|
|
41
|
+
<p ot-if="description" class="description">{{ description }}</p>
|
|
42
|
+
<div ot-if="buttons.length" class="buttons">
|
|
43
|
+
<e-button ot-for="btn in buttons" :text="btn.text" :icon="btn.icon" :href="btn.href" :variant="[btn.variant, 'size-m']"></e-button>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="trust">
|
|
46
|
+
<span class="trust-item"><i>check_circle</i> Works everywhere</span>
|
|
47
|
+
<span class="trust-item"><i>check_circle</i> Zero dependencies</span>
|
|
48
|
+
<span class="trust-item"><i>check_circle</i> Free tier available</span>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
.e-7eb56bb9
|
|
2
|
+
{
|
|
3
|
+
display: flex;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.e-7eb56bb9 > .holder
|
|
7
|
+
{
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 48px;
|
|
12
|
+
padding: 0 var(--ot-spacing-m);
|
|
13
|
+
background: var(--ot-bg-1);
|
|
14
|
+
border-bottom: 1px solid var(--ot-bg-2-border);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Logo */
|
|
18
|
+
|
|
19
|
+
.e-7eb56bb9 > .holder > .logo
|
|
20
|
+
{
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: var(--ot-spacing-s);
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
color: var(--ot-text-1);
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.e-7eb56bb9 > .holder > .logo > .logo-icon
|
|
30
|
+
{
|
|
31
|
+
height: 16px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/* Tabs */
|
|
36
|
+
|
|
37
|
+
.e-7eb56bb9 > .holder > .tabs
|
|
38
|
+
{
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: var(--ot-spacing-x);
|
|
42
|
+
margin-left: var(--ot-spacing-l);
|
|
43
|
+
height: 100%;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.e-7eb56bb9 > .holder .tab
|
|
47
|
+
{
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
height: 100%;
|
|
51
|
+
gap: 6px;
|
|
52
|
+
padding: 0 var(--ot-spacing-s);
|
|
53
|
+
text-decoration: none;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
transition: color 0.2s ease, background 0.2s ease;
|
|
56
|
+
font-weight: 500;
|
|
57
|
+
color: var(--ot-text-2);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.e-7eb56bb9 > .holder .tab > i
|
|
61
|
+
{
|
|
62
|
+
font-size: 16px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.e-7eb56bb9 > .holder .tab:hover
|
|
66
|
+
{
|
|
67
|
+
color: var(--ot-text-1);
|
|
68
|
+
background: var(--ot-bg-2);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Right */
|
|
72
|
+
|
|
73
|
+
.e-7eb56bb9 > .holder > .right
|
|
74
|
+
{
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: var(--ot-spacing-s);
|
|
78
|
+
margin-left: auto;
|
|
79
|
+
height: 100%;
|
|
80
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
onetype.AddonReady('elements', (elements) =>
|
|
2
|
+
{
|
|
3
|
+
elements.ItemAdd({
|
|
4
|
+
id: 'sections-navbar',
|
|
5
|
+
icon: 'menu',
|
|
6
|
+
name: 'Navbar',
|
|
7
|
+
description: 'Top navigation bar with logo and links.',
|
|
8
|
+
category: 'Section',
|
|
9
|
+
author: 'OneType',
|
|
10
|
+
config: {
|
|
11
|
+
items: {
|
|
12
|
+
type: 'array',
|
|
13
|
+
value: [
|
|
14
|
+
{ icon: 'widgets', label: 'Transforms', href: '/transforms', position: 'left' },
|
|
15
|
+
{ icon: 'payments', label: 'Pricing', href: '/pricing', position: 'left' },
|
|
16
|
+
{ icon: 'menu_book', label: 'Docs', href: 'https://docs.onetype.ai/transforms', position: 'left' },
|
|
17
|
+
{ icon: 'code', label: 'GitHub', href: 'https://github.com/nicely-gg/transforms', position: 'right' },
|
|
18
|
+
{ icon: 'arrow_forward', label: 'Get Started', href: '/get-started', position: 'right' }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
render: function()
|
|
23
|
+
{
|
|
24
|
+
this.left = this.items.filter(i => i.position === 'left');
|
|
25
|
+
this.right = this.items.filter(i => i.position === 'right');
|
|
26
|
+
|
|
27
|
+
return `
|
|
28
|
+
<nav class="holder">
|
|
29
|
+
<a class="logo" href="/">
|
|
30
|
+
<img class="logo-icon" src="https://global.divhunt.com/bd8ffd2fc9cf3a7e81b3326ac63a7cfe_4406.svg" alt="OneType" />
|
|
31
|
+
</a>
|
|
32
|
+
<div class="tabs">
|
|
33
|
+
<a ot-for="item in left" class="tab" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="right">
|
|
36
|
+
<a ot-for="item in right" class="tab" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
37
|
+
</div>
|
|
38
|
+
</nav>
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.e-1d2b5bd6
|
|
2
|
+
{
|
|
3
|
+
display: flex;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.e-1d2b5bd6 > .holder
|
|
7
|
+
{
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
justify-content: center;
|
|
11
|
+
gap: var(--ot-spacing-l);
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.e-1d2b5bd6 > .holder > .item
|
|
16
|
+
{
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: var(--ot-spacing-x);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.e-1d2b5bd6 > .holder > .item > .value
|
|
24
|
+
{
|
|
25
|
+
font-size: var(--ot-size-l);
|
|
26
|
+
font-weight: 700;
|
|
27
|
+
color: var(--ot-brand);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.e-1d2b5bd6 > .holder > .item > .label
|
|
31
|
+
{
|
|
32
|
+
font-size: var(--ot-size-s);
|
|
33
|
+
color: var(--ot-text-2);
|
|
34
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
onetype.AddonReady('elements', (elements) =>
|
|
2
|
+
{
|
|
3
|
+
elements.ItemAdd({
|
|
4
|
+
id: 'sections-stats',
|
|
5
|
+
icon: 'bar_chart',
|
|
6
|
+
name: 'Stats',
|
|
7
|
+
description: 'Animated statistics row.',
|
|
8
|
+
category: 'Component',
|
|
9
|
+
author: 'OneType',
|
|
10
|
+
config: {
|
|
11
|
+
items: {
|
|
12
|
+
type: 'array',
|
|
13
|
+
value: [
|
|
14
|
+
{ value: 30, suffix: '+', label: 'Actions' },
|
|
15
|
+
{ value: 8, suffix: '+', label: 'Integrations' },
|
|
16
|
+
{ value: 100000, suffix: '+', label: 'Executions' },
|
|
17
|
+
{ value: 1500, suffix: '+', label: 'Users' }
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
render: function()
|
|
22
|
+
{
|
|
23
|
+
this.counts = this.items.map(() => 0);
|
|
24
|
+
|
|
25
|
+
this.animate = () =>
|
|
26
|
+
{
|
|
27
|
+
const duration = 1500;
|
|
28
|
+
const start = performance.now();
|
|
29
|
+
|
|
30
|
+
const step = (now) =>
|
|
31
|
+
{
|
|
32
|
+
const progress = Math.min((now - start) / duration, 1);
|
|
33
|
+
const ease = 1 - Math.pow(1 - progress, 3);
|
|
34
|
+
|
|
35
|
+
this.items.forEach((item, i) =>
|
|
36
|
+
{
|
|
37
|
+
this.counts[i] = Math.round(ease * item.value);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
this.Update();
|
|
41
|
+
|
|
42
|
+
if(progress < 1)
|
|
43
|
+
{
|
|
44
|
+
requestAnimationFrame(step);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
requestAnimationFrame(step);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
this.format = (num) =>
|
|
52
|
+
{
|
|
53
|
+
return num.toLocaleString('en-US');
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
this.display = (index) =>
|
|
57
|
+
{
|
|
58
|
+
const item = this.items[index];
|
|
59
|
+
return (item.prefix || '') + this.format(this.counts[index]) + (item.suffix || '');
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
setTimeout(() => this.animate(), 200);
|
|
63
|
+
|
|
64
|
+
return `
|
|
65
|
+
<div class="holder">
|
|
66
|
+
<div ot-for="item, index in items" class="item">
|
|
67
|
+
<span class="value">{{ display(index) }}</span>
|
|
68
|
+
<span class="label">{{ item.label }}</span>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|