slicejs-web-framework 1.0.17 → 1.0.19
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/package.json +1 -1
- package/src/Components/AppComponents/TheBuildMethod/TheBuildMethod.css +205 -31
- package/src/Components/AppComponents/TheBuildMethod/TheBuildMethod.html +57 -38
- package/src/Components/AppComponents/TheSliceTeam/TheSliceTeam.css +190 -5
- package/src/Components/AppComponents/TheSliceTeam/TheSliceTeam.html +16 -4
- package/src/Components/AppComponents/TheSliceTeam/TheSliceTeam.js +67 -85
- package/src/Themes/Slice.css +35 -35
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
slice-the-build-method {
|
|
2
2
|
font-family: var(--font-family);
|
|
3
3
|
color: var(--font-primary-color);
|
|
4
|
+
display: block;
|
|
4
5
|
}
|
|
5
6
|
|
|
6
7
|
slice-the-build-method .build-method-container {
|
|
@@ -9,107 +10,266 @@ slice-the-build-method .build-method-container {
|
|
|
9
10
|
padding: 20px;
|
|
10
11
|
}
|
|
11
12
|
|
|
13
|
+
slice-the-build-method .build-method-header {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
margin-bottom: 1.5rem;
|
|
17
|
+
}
|
|
18
|
+
|
|
12
19
|
slice-the-build-method h1 {
|
|
13
20
|
font-size: 2.2rem;
|
|
14
|
-
margin-bottom: 1.5rem;
|
|
15
21
|
color: var(--primary-color);
|
|
16
22
|
border-bottom: 2px solid var(--secondary-background-color);
|
|
17
23
|
padding-bottom: 0.5rem;
|
|
24
|
+
margin-right: 1rem;
|
|
25
|
+
margin-bottom: 0;
|
|
26
|
+
flex-grow: 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
slice-the-build-method .build-method-badge {
|
|
30
|
+
background-color: var(--primary-color);
|
|
31
|
+
color: var(--primary-color-contrast);
|
|
32
|
+
padding: 6px 12px;
|
|
33
|
+
border-radius: 20px;
|
|
34
|
+
font-size: 0.9rem;
|
|
35
|
+
font-weight: bold;
|
|
18
36
|
}
|
|
19
37
|
|
|
20
38
|
slice-the-build-method h2 {
|
|
21
39
|
font-size: 1.8rem;
|
|
22
|
-
margin-top:
|
|
23
|
-
margin-bottom:
|
|
40
|
+
margin-top: 2.5rem;
|
|
41
|
+
margin-bottom: 1.2rem;
|
|
24
42
|
color: var(--primary-color);
|
|
43
|
+
position: relative;
|
|
44
|
+
padding-left: 1rem;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
slice-the-build-method h2:before {
|
|
48
|
+
content: "";
|
|
49
|
+
position: absolute;
|
|
50
|
+
left: 0;
|
|
51
|
+
height: 100%;
|
|
52
|
+
width: 4px;
|
|
53
|
+
background-color: var(--primary-color);
|
|
54
|
+
border-radius: 4px;
|
|
25
55
|
}
|
|
26
56
|
|
|
27
57
|
slice-the-build-method h3 {
|
|
28
58
|
font-size: 1.5rem;
|
|
29
|
-
margin-top: 1.
|
|
30
|
-
margin-bottom:
|
|
59
|
+
margin-top: 1.8rem;
|
|
60
|
+
margin-bottom: 1rem;
|
|
31
61
|
color: var(--font-primary-color);
|
|
32
62
|
}
|
|
33
63
|
|
|
34
64
|
slice-the-build-method p {
|
|
35
|
-
margin-bottom:
|
|
36
|
-
line-height: 1.
|
|
65
|
+
margin-bottom: 1.2rem;
|
|
66
|
+
line-height: 1.7;
|
|
37
67
|
text-align: justify;
|
|
68
|
+
font-size: 1.05rem;
|
|
38
69
|
}
|
|
39
70
|
|
|
40
71
|
slice-the-build-method code {
|
|
41
72
|
font-family: monospace;
|
|
42
73
|
background-color: var(--secondary-background-color);
|
|
43
|
-
padding:
|
|
74
|
+
padding: 3px 6px;
|
|
44
75
|
border-radius: 4px;
|
|
45
|
-
font-size: 0.
|
|
76
|
+
font-size: 0.95em;
|
|
77
|
+
color: var(--primary-color);
|
|
46
78
|
}
|
|
47
79
|
|
|
48
80
|
slice-the-build-method .syntax-box {
|
|
49
81
|
background-color: var(--secondary-background-color);
|
|
50
|
-
padding:
|
|
82
|
+
padding: 20px;
|
|
51
83
|
border-radius: var(--border-radius-slice);
|
|
52
84
|
margin: 20px 0;
|
|
53
85
|
overflow-x: auto;
|
|
86
|
+
border-left: 4px solid var(--primary-color);
|
|
87
|
+
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1);
|
|
88
|
+
transition: transform 0.2s ease;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
slice-the-build-method .syntax-box:hover {
|
|
92
|
+
transform: translateY(-2px);
|
|
54
93
|
}
|
|
55
94
|
|
|
56
95
|
slice-the-build-method .syntax-box code {
|
|
57
|
-
font-size: 1.
|
|
96
|
+
font-size: 1.2em;
|
|
58
97
|
background: none;
|
|
59
98
|
}
|
|
60
99
|
|
|
61
|
-
slice-the-build-method .parameters-
|
|
62
|
-
slice-the-build-method .
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
100
|
+
slice-the-build-method .parameters-section,
|
|
101
|
+
slice-the-build-method .return-section {
|
|
102
|
+
background-color: var(--primary-background-color);
|
|
103
|
+
padding: 15px 20px;
|
|
104
|
+
border-radius: var(--border-radius-slice);
|
|
105
|
+
margin: 15px 0;
|
|
106
|
+
border: 1px solid var(--secondary-background-color);
|
|
67
107
|
}
|
|
68
108
|
|
|
69
|
-
slice-the-build-method .parameters-list
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
109
|
+
slice-the-build-method .parameters-list {
|
|
110
|
+
list-style: none;
|
|
111
|
+
margin: 0;
|
|
112
|
+
padding: 0;
|
|
73
113
|
}
|
|
74
114
|
|
|
115
|
+
slice-the-build-method .parameters-list li {
|
|
116
|
+
display: grid;
|
|
117
|
+
grid-template-columns: 1fr 1fr 3fr;
|
|
118
|
+
gap: 15px;
|
|
119
|
+
margin-bottom: 12px;
|
|
120
|
+
padding-bottom: 12px;
|
|
121
|
+
border-bottom: 1px solid var(--secondary-background-color);
|
|
122
|
+
}
|
|
75
123
|
|
|
76
|
-
slice-the-build-method .
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
padding-
|
|
124
|
+
slice-the-build-method .parameters-list li:last-child {
|
|
125
|
+
border-bottom: none;
|
|
126
|
+
margin-bottom: 0;
|
|
127
|
+
padding-bottom: 0;
|
|
80
128
|
}
|
|
81
129
|
|
|
82
|
-
slice-the-build-method .
|
|
130
|
+
slice-the-build-method .param-name {
|
|
83
131
|
font-weight: bold;
|
|
84
|
-
|
|
132
|
+
color: var(--primary-color);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
slice-the-build-method .param-type {
|
|
136
|
+
font-style: italic;
|
|
137
|
+
color: var(--font-secondary-color);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
slice-the-build-method .example-card {
|
|
141
|
+
background-color: var(--primary-background-color);
|
|
142
|
+
border-radius: var(--border-radius-slice);
|
|
143
|
+
padding: 20px;
|
|
144
|
+
margin-bottom: 30px;
|
|
145
|
+
border: 1px solid var(--secondary-background-color);
|
|
146
|
+
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
|
|
147
|
+
transition: box-shadow 0.3s ease;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
slice-the-build-method .example-card:hover {
|
|
151
|
+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
slice-the-build-method .example-card h3 {
|
|
155
|
+
margin-top: 0;
|
|
85
156
|
color: var(--primary-color);
|
|
86
157
|
}
|
|
87
158
|
|
|
88
159
|
slice-the-build-method .method-examples div[class$="-container"] {
|
|
89
|
-
margin-
|
|
160
|
+
margin-top: 1rem;
|
|
90
161
|
border-radius: var(--border-radius-slice);
|
|
91
162
|
overflow: hidden;
|
|
92
163
|
}
|
|
93
164
|
|
|
165
|
+
slice-the-build-method .lifecycle-diagram {
|
|
166
|
+
background-color: var(--primary-background-color);
|
|
167
|
+
border-radius: var(--border-radius-slice);
|
|
168
|
+
padding: 20px;
|
|
169
|
+
border: 1px solid var(--secondary-background-color);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
slice-the-build-method .lifecycle-steps {
|
|
173
|
+
list-style: none;
|
|
174
|
+
margin: 0;
|
|
175
|
+
padding: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
slice-the-build-method .lifecycle-steps li {
|
|
179
|
+
display: flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
margin-bottom: 15px;
|
|
182
|
+
padding-bottom: 15px;
|
|
183
|
+
border-bottom: 1px dashed var(--secondary-background-color);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
slice-the-build-method .lifecycle-steps li:last-child {
|
|
187
|
+
margin-bottom: 0;
|
|
188
|
+
padding-bottom: 0;
|
|
189
|
+
border-bottom: none;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
slice-the-build-method .step-number {
|
|
193
|
+
display: flex;
|
|
194
|
+
align-items: center;
|
|
195
|
+
justify-content: center;
|
|
196
|
+
width: 30px;
|
|
197
|
+
height: 30px;
|
|
198
|
+
background-color: var(--primary-color);
|
|
199
|
+
color: var(--primary-color-contrast);
|
|
200
|
+
border-radius: 50%;
|
|
201
|
+
margin-right: 15px;
|
|
202
|
+
font-weight: bold;
|
|
203
|
+
flex-shrink: 0;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
slice-the-build-method .step-content {
|
|
207
|
+
flex-grow: 1;
|
|
208
|
+
line-height: 1.5;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
slice-the-build-method .best-practices-container {
|
|
212
|
+
background-color: var(--primary-background-color);
|
|
213
|
+
border-radius: var(--border-radius-slice);
|
|
214
|
+
padding: 20px;
|
|
215
|
+
border: 1px solid var(--secondary-background-color);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
slice-the-build-method .best-practices-list {
|
|
219
|
+
list-style: none;
|
|
220
|
+
margin: 0;
|
|
221
|
+
padding: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
slice-the-build-method .best-practices-list li {
|
|
225
|
+
display: flex;
|
|
226
|
+
align-items: flex-start;
|
|
227
|
+
margin-bottom: 15px;
|
|
228
|
+
line-height: 1.6;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
slice-the-build-method .best-practices-list li:last-child {
|
|
232
|
+
margin-bottom: 0;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
slice-the-build-method .practice-icon {
|
|
236
|
+
display: inline-block;
|
|
237
|
+
margin-right: 10px;
|
|
238
|
+
color: var(--success-color);
|
|
239
|
+
font-weight: bold;
|
|
240
|
+
font-size: 1.2rem;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
slice-the-build-method .method-introduction,
|
|
94
244
|
slice-the-build-method .method-syntax,
|
|
95
245
|
slice-the-build-method .method-examples,
|
|
96
246
|
slice-the-build-method .method-lifecycle,
|
|
97
247
|
slice-the-build-method .method-best-practices {
|
|
98
|
-
margin-bottom:
|
|
248
|
+
margin-bottom: 3.5rem;
|
|
99
249
|
}
|
|
100
250
|
|
|
101
251
|
slice-the-build-method section {
|
|
102
|
-
padding-top:
|
|
252
|
+
padding-top: 15px;
|
|
103
253
|
}
|
|
104
254
|
|
|
105
255
|
@media only screen and (max-width: 770px) {
|
|
106
256
|
slice-the-build-method .build-method-container {
|
|
107
257
|
max-width: 100%;
|
|
108
|
-
padding:
|
|
258
|
+
padding: 15px;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
slice-the-build-method .build-method-header {
|
|
262
|
+
flex-direction: column;
|
|
263
|
+
align-items: flex-start;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
slice-the-build-method .build-method-badge {
|
|
267
|
+
margin-top: 10px;
|
|
109
268
|
}
|
|
110
269
|
|
|
111
270
|
slice-the-build-method h1 {
|
|
112
271
|
font-size: 1.8rem;
|
|
272
|
+
margin-right: 0;
|
|
113
273
|
}
|
|
114
274
|
|
|
115
275
|
slice-the-build-method h2 {
|
|
@@ -119,4 +279,18 @@ slice-the-build-method section {
|
|
|
119
279
|
slice-the-build-method h3 {
|
|
120
280
|
font-size: 1.3rem;
|
|
121
281
|
}
|
|
282
|
+
|
|
283
|
+
slice-the-build-method .parameters-list li {
|
|
284
|
+
grid-template-columns: 1fr;
|
|
285
|
+
gap: 5px;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
slice-the-build-method .lifecycle-steps li {
|
|
289
|
+
flex-direction: column;
|
|
290
|
+
align-items: flex-start;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
slice-the-build-method .step-number {
|
|
294
|
+
margin-bottom: 10px;
|
|
295
|
+
}
|
|
122
296
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<div class="build-method-container">
|
|
2
|
-
<
|
|
2
|
+
<div class="build-method-header">
|
|
3
|
+
<h1 id="build-method">The Build Method</h1>
|
|
4
|
+
<div class="build-method-badge">Core API</div>
|
|
5
|
+
</div>
|
|
3
6
|
|
|
4
7
|
<section class="method-introduction">
|
|
5
8
|
<p>
|
|
@@ -12,59 +15,75 @@
|
|
|
12
15
|
<div class="syntax-box">
|
|
13
16
|
<code>await slice.build(componentName, props);</code>
|
|
14
17
|
</div>
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
<div class="parameters-section">
|
|
19
|
+
<h3>Parameters</h3>
|
|
20
|
+
<ul class="parameters-list">
|
|
21
|
+
<li><div class="param-name">componentName</div><div class="param-type">string</div><div class="param-description">The name of the component to build as registered in components.js</div></li>
|
|
22
|
+
<li><div class="param-name">props</div><div class="param-type">object</div><div class="param-description">(Optional) An object containing properties to set on the component</div></li>
|
|
23
|
+
</ul>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="return-section">
|
|
26
|
+
<h3>Return Value</h3>
|
|
27
|
+
<p>A Promise that resolves to the constructed component instance, or null if construction fails.</p>
|
|
28
|
+
</div>
|
|
22
29
|
</section>
|
|
23
30
|
|
|
24
31
|
<section class="method-examples">
|
|
25
32
|
<h2 id="examples">Examples</h2>
|
|
26
33
|
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
<div class="example-card">
|
|
35
|
+
<h3 id="basic-usage">Basic Usage</h3>
|
|
36
|
+
<p>Creating a simple button component and adding it to the DOM:</p>
|
|
37
|
+
<div class="basic-example-container"></div>
|
|
38
|
+
</div>
|
|
30
39
|
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
40
|
+
<div class="example-card">
|
|
41
|
+
<h3 id="advanced-props">Advanced Properties</h3>
|
|
42
|
+
<p>Building a component with more complex properties:</p>
|
|
43
|
+
<div class="advanced-example-container"></div>
|
|
44
|
+
</div>
|
|
34
45
|
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
<div class="example-card">
|
|
47
|
+
<h3 id="nested-components">Building Nested Components</h3>
|
|
48
|
+
<p>Creating a structure of components that contain other components:</p>
|
|
49
|
+
<div class="nested-components-container"></div>
|
|
50
|
+
</div>
|
|
38
51
|
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
52
|
+
<div class="example-card">
|
|
53
|
+
<h3 id="error-handling">Error Handling</h3>
|
|
54
|
+
<p>Proper error handling when building components:</p>
|
|
55
|
+
<div class="error-handling-container"></div>
|
|
56
|
+
</div>
|
|
42
57
|
</section>
|
|
43
58
|
|
|
44
59
|
<section class="method-lifecycle">
|
|
45
60
|
<h2 id="build-lifecycle">Build Lifecycle</h2>
|
|
46
61
|
<p>When <code>slice.build()</code> is called, the following steps occur:</p>
|
|
47
|
-
<
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
<div class="lifecycle-diagram">
|
|
63
|
+
<ol class="lifecycle-steps">
|
|
64
|
+
<li><div class="step-number">1</div><div class="step-content">Verify that the component exists in the component registry</div></li>
|
|
65
|
+
<li><div class="step-number">2</div><div class="step-content">Load the component's template (HTML) if not already cached</div></li>
|
|
66
|
+
<li><div class="step-number">3</div><div class="step-content">Load the component's class (JS) if not already cached</div></li>
|
|
67
|
+
<li><div class="step-number">4</div><div class="step-content">Load the component's styles (CSS) if not already cached</div></li>
|
|
68
|
+
<li><div class="step-number">5</div><div class="step-content">Create an instance of the component with the provided properties</div></li>
|
|
69
|
+
<li><div class="step-number">6</div><div class="step-content">Call the component's <code>init()</code> method if it exists</div></li>
|
|
70
|
+
<li><div class="step-number">7</div><div class="step-content">Attach debug mode if enabled in configuration</div></li>
|
|
71
|
+
<li><div class="step-number">8</div><div class="step-content">Register the component in the controller's active components registry</div></li>
|
|
72
|
+
<li><div class="step-number">9</div><div class="step-content">Return the fully initialized component instance</div></li>
|
|
73
|
+
</ol>
|
|
74
|
+
</div>
|
|
58
75
|
</section>
|
|
59
76
|
|
|
60
77
|
<section class="method-best-practices">
|
|
61
78
|
<h2 id="best-practices">Best Practices</h2>
|
|
62
|
-
<
|
|
63
|
-
<
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
<div class="best-practices-container">
|
|
80
|
+
<ul class="best-practices-list">
|
|
81
|
+
<li><span class="practice-icon">✓</span> Always use <code>await</code> with <code>slice.build()</code> since it returns a Promise</li>
|
|
82
|
+
<li><span class="practice-icon">✓</span> Provide a unique <code>sliceId</code> for components that need to be referenced later</li>
|
|
83
|
+
<li><span class="practice-icon">✓</span> Implement proper error handling around component building</li>
|
|
84
|
+
<li><span class="practice-icon">✓</span> Use the component's <code>init()</code> method for additional setup rather than the constructor</li>
|
|
85
|
+
<li><span class="practice-icon">✓</span> Remember that component properties are set after construction but before initialization</li>
|
|
86
|
+
</ul>
|
|
87
|
+
</div>
|
|
69
88
|
</section>
|
|
70
89
|
</div>
|
|
@@ -1,23 +1,208 @@
|
|
|
1
1
|
.slice_team {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: center;
|
|
5
|
+
width: 100%;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.slice_team_hero {
|
|
9
|
+
position: relative;
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 300px;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
align-items: center;
|
|
16
|
+
margin-top: 60px;
|
|
17
|
+
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
|
18
|
+
color: var(--primary-color-contrast);
|
|
19
|
+
text-align: center;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.hero_overlay {
|
|
24
|
+
position: absolute;
|
|
25
|
+
top: 0;
|
|
26
|
+
left: 0;
|
|
27
|
+
width: 100%;
|
|
28
|
+
height: 100%;
|
|
29
|
+
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
|
30
|
+
opacity: 0.3;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.slice_team_hero h1 {
|
|
34
|
+
font-size: 2.5rem;
|
|
35
|
+
margin-bottom: 1rem;
|
|
36
|
+
z-index: 1;
|
|
37
|
+
text-shadow: 0 2px 4px rgba(0,0,0,0.2);
|
|
38
|
+
animation: fadeIn 1s ease-in-out;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.slice_team_hero p {
|
|
42
|
+
font-size: 1.2rem;
|
|
43
|
+
z-index: 1;
|
|
44
|
+
max-width: 600px;
|
|
45
|
+
animation: fadeIn 1s ease-in-out 0.3s both;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.slice_team_content {
|
|
2
49
|
display: flex;
|
|
3
50
|
flex-direction: column;
|
|
4
51
|
align-items: center;
|
|
5
52
|
padding: 2rem;
|
|
6
|
-
margin-top: 80px; /* Ajusta este valor según la altura de tu navbar */
|
|
7
53
|
width: 100%;
|
|
54
|
+
max-width: 1200px;
|
|
8
55
|
}
|
|
9
56
|
|
|
10
57
|
.slice_team_title {
|
|
11
58
|
font-size: 2rem;
|
|
12
59
|
color: var(--font-primary-color);
|
|
13
|
-
margin
|
|
60
|
+
margin: 2rem 0;
|
|
14
61
|
text-align: center;
|
|
62
|
+
position: relative;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.slice_team_title::after {
|
|
66
|
+
content: '';
|
|
67
|
+
position: absolute;
|
|
68
|
+
width: 50px;
|
|
69
|
+
height: 3px;
|
|
70
|
+
background-color: var(--primary-color);
|
|
71
|
+
bottom: -10px;
|
|
72
|
+
left: 50%;
|
|
73
|
+
transform: translateX(-50%);
|
|
15
74
|
}
|
|
16
75
|
|
|
17
76
|
.slice_team_container {
|
|
18
77
|
display: flex;
|
|
19
|
-
flex-direction: column;
|
|
20
|
-
align-items: center;
|
|
21
|
-
gap:
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 2rem;
|
|
81
|
+
width: 100%;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
slice-team-card {
|
|
85
|
+
opacity: 0;
|
|
86
|
+
animation: fadeInUp 0.8s ease-out forwards;
|
|
87
|
+
animation-delay: calc(var(--animation-order, 0) * 0.2s);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.slice_special_thanks {
|
|
91
|
+
margin: 4rem 0;
|
|
92
|
+
padding: 2rem;
|
|
93
|
+
background-color: var(--secondary-background-color);
|
|
94
|
+
border-radius: 10px;
|
|
95
|
+
width: 90%;
|
|
96
|
+
max-width: 800px;
|
|
97
|
+
box-shadow: 0 8px 20px rgba(0,0,0,0.1);
|
|
98
|
+
transform: translateY(20px);
|
|
99
|
+
opacity: 0;
|
|
100
|
+
animation: fadeInUp 0.8s ease-out forwards;
|
|
101
|
+
animation-delay: 0.6s;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.special_thanks_content {
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.special_thanks_content h3 {
|
|
109
|
+
font-size: 1.8rem;
|
|
110
|
+
color: var(--primary-color);
|
|
111
|
+
margin-bottom: 1.5rem;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.special_thanks_content p {
|
|
115
|
+
color: var(--font-primary-color);
|
|
116
|
+
line-height: 1.7;
|
|
117
|
+
text-align: center;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.special_thanks_content strong {
|
|
121
|
+
color: var(--primary-color);
|
|
122
|
+
font-weight: bold;
|
|
123
|
+
position: relative;
|
|
124
|
+
display: inline-block;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.special_thanks_content strong::after {
|
|
128
|
+
content: '';
|
|
129
|
+
position: absolute;
|
|
22
130
|
width: 100%;
|
|
131
|
+
height: 2px;
|
|
132
|
+
background-color: var(--primary-color);
|
|
133
|
+
bottom: -2px;
|
|
134
|
+
left: 0;
|
|
135
|
+
transform: scaleX(0);
|
|
136
|
+
transform-origin: left;
|
|
137
|
+
transition: transform 0.3s ease;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.special_thanks_content:hover strong::after {
|
|
141
|
+
transform: scaleX(1);
|
|
23
142
|
}
|
|
143
|
+
|
|
144
|
+
.slice_team_footer {
|
|
145
|
+
margin-top: 2rem;
|
|
146
|
+
text-align: center;
|
|
147
|
+
padding: 1rem;
|
|
148
|
+
width: 100%;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.slice_team_footer a {
|
|
152
|
+
color: var(--primary-color);
|
|
153
|
+
text-decoration: none;
|
|
154
|
+
font-weight: bold;
|
|
155
|
+
transition: color 0.3s ease;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.slice_team_footer a:hover {
|
|
159
|
+
text-decoration: underline;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@keyframes fadeIn {
|
|
163
|
+
from {
|
|
164
|
+
opacity: 0;
|
|
165
|
+
}
|
|
166
|
+
to {
|
|
167
|
+
opacity: 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@keyframes fadeInUp {
|
|
172
|
+
from {
|
|
173
|
+
opacity: 0;
|
|
174
|
+
transform: translateY(30px);
|
|
175
|
+
}
|
|
176
|
+
to {
|
|
177
|
+
opacity: 1;
|
|
178
|
+
transform: translateY(0);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* Responsive styling */
|
|
183
|
+
@media only screen and (min-width: 768px) {
|
|
184
|
+
.slice_team_container {
|
|
185
|
+
flex-direction: row;
|
|
186
|
+
flex-wrap: wrap;
|
|
187
|
+
justify-content: center;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
slice-team-card {
|
|
191
|
+
width: 45%;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@media only screen and (max-width: 767px) {
|
|
196
|
+
.slice_team_hero {
|
|
197
|
+
height: 250px;
|
|
198
|
+
padding: 1rem;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.slice_team_hero h1 {
|
|
202
|
+
font-size: 2rem;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.slice_special_thanks {
|
|
206
|
+
padding: 1.5rem;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
<div class="slice_team">
|
|
2
|
+
<div class="slice_team_hero">
|
|
3
|
+
<div class="hero_overlay"></div>
|
|
4
|
+
<h1>The Minds Behind Slice.js</h1>
|
|
5
|
+
<p>Meet the passionate developers who created this framework</p>
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div class="slice_team_content">
|
|
2
9
|
<h2 class="slice_team_title">Our Team</h2>
|
|
3
10
|
<div class="slice_team_container"></div>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
11
|
+
|
|
12
|
+
<div class="slice_special_thanks"></div>
|
|
13
|
+
|
|
14
|
+
<div class="slice_team_footer">
|
|
15
|
+
<p>Want to contribute? Join us on <a href="https://github.com/VKneider/slice.js" target="_blank">GitHub</a></p>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
@@ -5,99 +5,66 @@ export default class TheSliceTeam extends HTMLElement {
|
|
|
5
5
|
|
|
6
6
|
this.$container = this.querySelector('.slice_team_container');
|
|
7
7
|
this.$title = this.querySelector('.slice_team_title');
|
|
8
|
+
this.$specialThanks = this.querySelector('.slice_special_thanks');
|
|
8
9
|
|
|
9
10
|
slice.controller.setComponentProps(this, props);
|
|
10
11
|
this.debuggerProps = ['members'];
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
async init() {
|
|
15
|
+
const navBar = await slice.build('Navbar', {
|
|
16
|
+
position: 'fixed',
|
|
17
|
+
logo: {
|
|
18
|
+
src: '/images/Slice.js-logo.png',
|
|
19
|
+
path: '/',
|
|
20
|
+
},
|
|
21
|
+
items: [
|
|
22
|
+
{ text: 'Home', path: '/' },
|
|
23
|
+
{ text: 'Documentation', path: '/Documentation' },
|
|
24
|
+
{ text: 'Playground', path: '/Playground' },
|
|
25
|
+
{ text: 'Our Team', path: '/Team' }
|
|
26
|
+
],
|
|
27
|
+
buttons: [{
|
|
28
|
+
value: 'Change Theme',
|
|
29
|
+
onClickCallback: async () => {
|
|
30
|
+
let theme = slice.stylesManager.themeManager.currentTheme;
|
|
31
|
+
if (theme === 'Slice') await slice.setTheme('Light');
|
|
32
|
+
else if (theme === 'Light') await slice.setTheme('Dark');
|
|
33
|
+
else if (theme === 'Dark') await slice.setTheme('Slice');
|
|
34
|
+
},
|
|
35
|
+
}],
|
|
36
|
+
});
|
|
14
37
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const navBar = await slice.build('Navbar', {
|
|
18
|
-
position: 'fixed',
|
|
19
|
-
logo: {
|
|
20
|
-
src: '/images/Slice.js-logo.png',
|
|
21
|
-
path: '/',
|
|
22
|
-
},
|
|
23
|
-
items: [
|
|
24
|
-
{
|
|
25
|
-
text: 'Home',
|
|
26
|
-
path: '/',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
text: 'Documentation',
|
|
30
|
-
path: '/Documentation',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
text: 'Playground',
|
|
34
|
-
path: '/Playground',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
text: 'Our Team',
|
|
38
|
-
path: '/Team',
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
],
|
|
42
|
-
buttons: [
|
|
43
|
-
{
|
|
44
|
-
value: 'Change Theme',
|
|
45
|
-
// color:
|
|
46
|
-
onClickCallback: async () => {
|
|
47
|
-
|
|
48
|
-
let theme = slice.stylesManager.themeManager.currentTheme;
|
|
49
|
-
if (theme === 'Slice') {
|
|
50
|
-
await slice.setTheme('Light');
|
|
51
|
-
//theme = 'Light';
|
|
52
|
-
} else if (theme === 'Light') {
|
|
53
|
-
await slice.setTheme('Dark');
|
|
54
|
-
//theme = 'Dark';
|
|
55
|
-
} else if (theme === 'Dark') {
|
|
56
|
-
await slice.setTheme('Slice');
|
|
57
|
-
//theme = 'Slice';
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.appendChild(navBar);
|
|
66
|
-
|
|
67
|
-
const Victor = {
|
|
68
|
-
name: "Victor Kneider",
|
|
69
|
-
role: "Founder. Lead Developer. Software Architect.",
|
|
70
|
-
image:"https://avatars.githubusercontent.com/u/103617388?v=4",
|
|
71
|
-
description: "Computer Engineer passionate and ethusiast about technology and Component-Based Development. He is the creator of Slice.js and the main developer of the project.",
|
|
72
|
-
links: [
|
|
73
|
-
{label: "Github", href: "https://github.com/VKneider" },
|
|
74
|
-
{label: "Linkedin", href:"https://www.linkedin.com/in/vkneider/"}
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const Julio = {
|
|
84
|
-
name: "Julio Graterol",
|
|
85
|
-
role: "Frontend Developer. Visual Components Library Creator and Designer",
|
|
86
|
-
image:"https://avatars.githubusercontent.com/u/99130732?v=4",
|
|
87
|
-
//julio is a frontend developer and designer, he is the creator of the visual components library and the designer of the Slice.js logo and website.
|
|
88
|
-
description: "Frontend Developer and Designer. He is the creator of the Visual Components Library and the designer of the Slice.js logo and website.",
|
|
89
|
-
links: [
|
|
90
|
-
{label: "Github", href: "https://github.com/juliograterol"},
|
|
91
|
-
{label: "Linkedin", href:"https://www.linkedin.com/in/julio-graterol-187589289/"}
|
|
92
|
-
]
|
|
93
|
-
|
|
38
|
+
this.appendChild(navBar);
|
|
94
39
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
40
|
+
// Team members data
|
|
41
|
+
const Victor = {
|
|
42
|
+
name: "Victor Kneider",
|
|
43
|
+
role: "Founder. Lead Developer. Software Architect.",
|
|
44
|
+
image: "https://avatars.githubusercontent.com/u/103617388?v=4",
|
|
45
|
+
description: "Computer Engineer and the principal creator of Slice.js. Victor architected the core framework, developed the structural components, implemented the router system, and designed the component lifecycle. He also created the documentation and maintains the repository, laying the groundwork for the entire framework ecosystem.",
|
|
46
|
+
links: [
|
|
47
|
+
{label: "Github", href: "https://github.com/VKneider" },
|
|
48
|
+
{label: "Linkedin", href: "https://www.linkedin.com/in/vkneider/"}
|
|
49
|
+
]
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const Julio = {
|
|
53
|
+
name: "Julio Graterol",
|
|
54
|
+
role: "Frontend Developer. Visual Components Library Creator and Designer",
|
|
55
|
+
image: "https://avatars.githubusercontent.com/u/99130732?v=4",
|
|
56
|
+
description: "Frontend Developer and Designer. He is the creator of the Visual Components Library and the designer of the Slice.js logo and website.",
|
|
57
|
+
links: [
|
|
58
|
+
{label: "Github", href: "https://github.com/juliograterol"},
|
|
59
|
+
{label: "Linkedin", href: "https://www.linkedin.com/in/julio-graterol-187589289/"}
|
|
60
|
+
]
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const members = [Victor, Julio];
|
|
64
|
+
await this.addMembers(members);
|
|
100
65
|
|
|
66
|
+
// Add special thanks section with animation
|
|
67
|
+
this.renderSpecialThanks();
|
|
101
68
|
}
|
|
102
69
|
|
|
103
70
|
async addMembers(members) {
|
|
@@ -117,6 +84,21 @@ export default class TheSliceTeam extends HTMLElement {
|
|
|
117
84
|
this.$container.appendChild(card);
|
|
118
85
|
}
|
|
119
86
|
|
|
87
|
+
renderSpecialThanks() {
|
|
88
|
+
const specialThanksContent = document.createElement('div');
|
|
89
|
+
specialThanksContent.className = 'special_thanks_content';
|
|
90
|
+
specialThanksContent.innerHTML = `
|
|
91
|
+
<h3>Special Thanks</h3>
|
|
92
|
+
<p>
|
|
93
|
+
Victor Kneider would like to express his deepest gratitude to <strong>Jubert Pérez</strong>
|
|
94
|
+
for being a constant source of motivation, support, and encouragement throughout
|
|
95
|
+
the development of the Slice.js framework. Your belief in this project and guidance
|
|
96
|
+
have been invaluable to its creation.
|
|
97
|
+
</p>
|
|
98
|
+
`;
|
|
99
|
+
this.$specialThanks.appendChild(specialThanksContent);
|
|
100
|
+
}
|
|
101
|
+
|
|
120
102
|
get members() {
|
|
121
103
|
return this._members;
|
|
122
104
|
}
|
|
@@ -126,4 +108,4 @@ export default class TheSliceTeam extends HTMLElement {
|
|
|
126
108
|
}
|
|
127
109
|
}
|
|
128
110
|
|
|
129
|
-
window.customElements.define('slice-team', TheSliceTeam);
|
|
111
|
+
window.customElements.define('slice-team', TheSliceTeam);
|
package/src/Themes/Slice.css
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
:root {
|
|
2
2
|
/* Tipografía */
|
|
3
|
-
--font-primary-color: #
|
|
4
|
-
--font-secondary-color: #
|
|
5
|
-
|
|
6
|
-
/** Primary -
|
|
7
|
-
--primary-color: #
|
|
8
|
-
--primary-color-rgb:
|
|
9
|
-
--primary-background-color: #
|
|
10
|
-
--primary-color-contrast: #ffffff;
|
|
11
|
-
--primary-color-shade: #
|
|
12
|
-
|
|
13
|
-
/** Secondary -
|
|
14
|
-
--secondary-color: #
|
|
15
|
-
--secondary-color-rgb:
|
|
16
|
-
--secondary-background-color: #
|
|
17
|
-
--secondary-color-contrast: #
|
|
18
|
-
|
|
19
|
-
/** Tertiary -
|
|
20
|
-
--tertiary-background-color: #
|
|
21
|
-
|
|
22
|
-
/** Success - Verde
|
|
23
|
-
--success-color: #
|
|
3
|
+
--font-primary-color: #2E1A47; /* Uva oscuro, elegante para lectura */
|
|
4
|
+
--font-secondary-color: #7D3AC1; /* Uva brillante para títulos y resaltes */
|
|
5
|
+
|
|
6
|
+
/** Primary - Uva intenso **/
|
|
7
|
+
--primary-color: #7D3AC1;
|
|
8
|
+
--primary-color-rgb: 125, 58, 193;
|
|
9
|
+
--primary-background-color: #F8F4FF; /* Lila muy claro como fondo principal */
|
|
10
|
+
--primary-color-contrast: #ffffff;
|
|
11
|
+
--primary-color-shade: #4E2279;
|
|
12
|
+
|
|
13
|
+
/** Secondary - Lima vibrante **/
|
|
14
|
+
--secondary-color: #C6FF00; /* Amarillo lima brillante, capta la atención */
|
|
15
|
+
--secondary-color-rgb: 198, 255, 0;
|
|
16
|
+
--secondary-background-color: #F9FFE1;
|
|
17
|
+
--secondary-color-contrast: #2E2E2E;
|
|
18
|
+
|
|
19
|
+
/** Tertiary - Turquesa suave **/
|
|
20
|
+
--tertiary-background-color: #D0F4F2; /* Fondo suave, fresco y moderno */
|
|
21
|
+
|
|
22
|
+
/** Success - Verde esmeralda claro **/
|
|
23
|
+
--success-color: #00B894;
|
|
24
24
|
--success-contrast: #ffffff;
|
|
25
25
|
|
|
26
|
-
/** Warning - Amarillo
|
|
27
|
-
--warning-color: #
|
|
28
|
-
--warning-contrast: #
|
|
26
|
+
/** Warning - Amarillo más tradicional pero suave **/
|
|
27
|
+
--warning-color: #FFD54F;
|
|
28
|
+
--warning-contrast: #3E2723;
|
|
29
29
|
|
|
30
|
-
/** Danger -
|
|
31
|
-
--danger-color: #
|
|
30
|
+
/** Danger - Coral vibrante (sin caer en rojo tradicional) **/
|
|
31
|
+
--danger-color: #FF6F61;
|
|
32
32
|
--danger-contrast: #ffffff;
|
|
33
33
|
|
|
34
|
-
/** Medium - Gris
|
|
35
|
-
--medium-color: #
|
|
34
|
+
/** Medium - Gris lavanda para texto secundario **/
|
|
35
|
+
--medium-color: #A89FB5;
|
|
36
36
|
--medium-contrast: #000000;
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
--disabled-color: #
|
|
38
|
+
/** Disabled - Gris pastel lavanda **/
|
|
39
|
+
--disabled-color: #E6E0F1;
|
|
40
40
|
|
|
41
|
-
/** Accent -
|
|
42
|
-
--accent-color: #
|
|
41
|
+
/** Accent - Turquesa brillante para detalles elegantes **/
|
|
42
|
+
--accent-color: #00CFC1;
|
|
43
43
|
|
|
44
|
-
/* Sombras
|
|
45
|
-
--box-shadow-primary: 0px 4px
|
|
46
|
-
--box-shadow-secondary: 0px 3px 8px rgba(
|
|
44
|
+
/* Sombras */
|
|
45
|
+
--box-shadow-primary: 0px 4px 12px rgba(125, 58, 193, 0.15);
|
|
46
|
+
--box-shadow-secondary: 0px 3px 8px rgba(198, 255, 0, 0.1);
|
|
47
47
|
}
|