@onetype/framework 2.0.41 → 2.0.42

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 (119) hide show
  1. package/addons/ai/agents/addon.js +23 -0
  2. package/addons/ai/agents/functions/parse.js +129 -0
  3. package/addons/ai/agents/item/functions/run.js +218 -0
  4. package/addons/ai/agents/load.js +8 -0
  5. package/addons/ai/orchestrator/addon.js +25 -0
  6. package/addons/ai/orchestrator/item/functions/run.js +277 -0
  7. package/addons/ai/orchestrator/item/functions/state/agent.js +41 -0
  8. package/addons/ai/orchestrator/item/functions/state/conclusion.js +27 -0
  9. package/addons/ai/orchestrator/item/functions/state/done.js +40 -0
  10. package/addons/ai/orchestrator/item/functions/state/execute.js +16 -0
  11. package/addons/ai/orchestrator/item/functions/state/goal.js +34 -0
  12. package/addons/ai/orchestrator/item/functions/state/input.js +55 -0
  13. package/addons/ai/orchestrator/item/functions/state/summary.js +26 -0
  14. package/addons/ai/orchestrator/items/agents/achievable.js +37 -0
  15. package/addons/ai/orchestrator/items/agents/agent.js +46 -0
  16. package/addons/ai/orchestrator/items/agents/conclusion.js +41 -0
  17. package/addons/ai/orchestrator/items/agents/done.js +40 -0
  18. package/addons/ai/orchestrator/items/agents/goal.js +58 -0
  19. package/addons/ai/orchestrator/items/agents/input.js +34 -0
  20. package/addons/ai/orchestrator/items/agents/planner.js +30 -0
  21. package/addons/ai/orchestrator/items/agents/summary.js +29 -0
  22. package/addons/ai/orchestrator/items/chat.js +10 -0
  23. package/addons/ai/orchestrator/load.js +25 -0
  24. package/addons/ai/providers/addon.js +16 -0
  25. package/addons/ai/providers/functions/default.js +14 -0
  26. package/addons/ai/providers/item/functions/request.js +62 -0
  27. package/addons/ai/providers/items/nue.js +98 -0
  28. package/addons/ai/providers/load.js +10 -0
  29. package/addons/render/elements/front/functions/runtime.js +25 -0
  30. package/lib/browser.js +1 -24
  31. package/lib/items/directives/160-slot.js +1 -1
  32. package/lib/items/directives/500-click-outside.js +43 -43
  33. package/lib/items/elements/ai/chat/chat.css +710 -0
  34. package/lib/items/elements/ai/chat/chat.js +429 -0
  35. package/lib/items/elements/cards/pricing/pricing.css +174 -0
  36. package/lib/items/elements/{sections → cards}/pricing/pricing.js +30 -11
  37. package/lib/items/elements/form/button/button.css +250 -0
  38. package/lib/items/elements/form/button/button.js +15 -20
  39. package/lib/items/elements/form/checkbox/checkbox.css +109 -0
  40. package/lib/items/elements/form/checkbox/checkbox.js +58 -54
  41. package/lib/items/elements/form/color/color.css +128 -0
  42. package/lib/items/elements/form/color/color.js +100 -0
  43. package/lib/items/elements/form/date/date.css +84 -0
  44. package/lib/items/elements/form/date/date.js +69 -0
  45. package/lib/items/elements/form/field/field.css +33 -57
  46. package/lib/items/elements/form/field/field.js +4 -4
  47. package/lib/items/elements/form/input/input.css +59 -84
  48. package/lib/items/elements/form/input/input.js +84 -75
  49. package/lib/items/elements/form/radio/radio.css +118 -0
  50. package/lib/items/elements/form/radio/radio.js +58 -54
  51. package/lib/items/elements/form/rating/rating.css +28 -66
  52. package/lib/items/elements/form/rating/rating.js +17 -21
  53. package/lib/items/elements/form/section/section.css +30 -73
  54. package/lib/items/elements/form/section/section.js +5 -5
  55. package/lib/items/elements/form/select/select.css +186 -0
  56. package/lib/items/elements/form/select/select.js +165 -0
  57. package/lib/items/elements/form/slider/slider.css +55 -176
  58. package/lib/items/elements/form/slider/slider.js +14 -10
  59. package/lib/items/elements/form/tags/tags.css +152 -0
  60. package/lib/items/elements/form/tags/tags.js +166 -0
  61. package/lib/items/elements/form/textarea/textarea.css +55 -92
  62. package/lib/items/elements/form/textarea/textarea.js +74 -66
  63. package/lib/items/elements/form/toggle/toggle.css +101 -0
  64. package/lib/items/elements/form/toggle/toggle.js +67 -0
  65. package/lib/items/elements/global/code/code.css +39 -8
  66. package/lib/items/elements/global/code/code.js +7 -2
  67. package/lib/items/elements/global/faq/faq.css +38 -16
  68. package/lib/items/elements/global/faq/faq.js +14 -2
  69. package/lib/items/elements/global/heading/heading.css +37 -14
  70. package/lib/items/elements/global/heading/heading.js +9 -4
  71. package/lib/items/elements/global/markdown/markdown.css +22 -15
  72. package/lib/items/elements/global/markdown/markdown.js +4 -4
  73. package/lib/items/elements/global/menu/menu.css +173 -0
  74. package/lib/items/elements/global/menu/menu.js +103 -0
  75. package/lib/items/elements/global/notice/notice.css +27 -61
  76. package/lib/items/elements/global/notice/notice.js +4 -4
  77. package/lib/items/elements/global/parameters/parameters.css +33 -14
  78. package/lib/items/elements/global/parameters/parameters.js +15 -6
  79. package/lib/items/elements/global/tags/tags.css +18 -5
  80. package/lib/items/elements/global/tags/tags.js +10 -2
  81. package/lib/items/elements/navigation/navbar/navbar.css +39 -17
  82. package/lib/items/elements/navigation/navbar/navbar.js +19 -9
  83. package/lib/items/elements/navigation/sidebar/sidebar.css +25 -39
  84. package/lib/items/elements/navigation/sidebar/sidebar.js +28 -6
  85. package/lib/items/elements/navigation/tabs/tabs.css +35 -16
  86. package/lib/items/elements/navigation/tabs/tabs.js +16 -2
  87. package/lib/items/elements/status/code/code.css +21 -12
  88. package/lib/items/elements/status/empty/empty.css +22 -17
  89. package/lib/items/elements/status/empty/empty.js +1 -1
  90. package/lib/items/elements/status/error/error.css +22 -12
  91. package/lib/items/elements/status/error/error.js +1 -1
  92. package/lib/items/elements/status/loading/loading.css +24 -14
  93. package/lib/items/elements/status/loading/loading.js +4 -4
  94. package/lib/load.js +14 -6
  95. package/lib/styles/reset.css +1 -1
  96. package/lists.md +586 -0
  97. package/orchestrator.md +288 -0
  98. package/package.json +9 -3
  99. package/lib/items/elements/form/button/styles/base.css +0 -176
  100. package/lib/items/elements/form/button/styles/sizes.css +0 -78
  101. package/lib/items/elements/form/button/styles/variants.css +0 -421
  102. package/lib/items/elements/form/checkbox/styles/base.css +0 -52
  103. package/lib/items/elements/form/checkbox/styles/sizes.css +0 -39
  104. package/lib/items/elements/form/checkbox/styles/variants.css +0 -121
  105. package/lib/items/elements/form/input/styles/base.css +0 -26
  106. package/lib/items/elements/form/input/styles/sizes.css +0 -15
  107. package/lib/items/elements/form/input/styles/variants.css +0 -98
  108. package/lib/items/elements/form/radio/styles/base.css +0 -48
  109. package/lib/items/elements/form/radio/styles/sizes.css +0 -36
  110. package/lib/items/elements/form/radio/styles/variants.css +0 -121
  111. package/lib/items/elements/global/card/card.css +0 -57
  112. package/lib/items/elements/global/card/card.js +0 -48
  113. package/lib/items/elements/sections/footer/footer.css +0 -205
  114. package/lib/items/elements/sections/footer/footer.js +0 -109
  115. package/lib/items/elements/sections/hero/hero.css +0 -100
  116. package/lib/items/elements/sections/hero/hero.js +0 -54
  117. package/lib/items/elements/sections/pricing/pricing.css +0 -148
  118. package/lib/items/elements/sections/stats/stats.css +0 -34
  119. package/lib/items/elements/sections/stats/stats.js +0 -74
@@ -1,3 +1,5 @@
1
+ /* Root */
2
+
1
3
  .e-210c16c7
2
4
  {
3
5
  display: flex;
@@ -6,13 +8,14 @@
6
8
  height: 100%;
7
9
  }
8
10
 
11
+ /* Holder */
12
+
9
13
  .e-210c16c7 > .holder
10
14
  {
11
15
  display: flex;
12
16
  flex-direction: column;
13
17
  width: 100%;
14
18
  padding: var(--ot-spacing-m) var(--ot-spacing-s);
15
- gap: 0;
16
19
  overflow-y: auto;
17
20
  }
18
21
 
@@ -24,7 +27,7 @@
24
27
  {
25
28
  display: flex;
26
29
  flex-direction: column;
27
- gap: 2px;
30
+ gap: var(--ot-spacing-x);
28
31
  padding: var(--ot-spacing-s) 0;
29
32
  border-top: 1px solid var(--ot-bg-3-border);
30
33
  }
@@ -43,7 +46,7 @@
43
46
  .e-210c16c7 > .holder > .bottom > .group > .title,
44
47
  .e-210c16c7 > .drawer > .group > .title
45
48
  {
46
- font-size: 10px;
49
+ font-size: var(--ot-size-s);
47
50
  font-weight: 600;
48
51
  color: var(--ot-text-2);
49
52
  text-transform: uppercase;
@@ -70,14 +73,14 @@
70
73
  border: 1px solid transparent;
71
74
  border-radius: var(--ot-radius-m);
72
75
  cursor: pointer;
73
- transition: all 0.15s ease;
76
+ transition: color 0.15s ease, background 0.15s ease;
74
77
  }
75
78
 
76
79
  .e-210c16c7 > .holder > .group > .item > i,
77
80
  .e-210c16c7 > .holder > .bottom > .group > .item > i,
78
81
  .e-210c16c7 > .drawer > .group > .item > i
79
82
  {
80
- font-size: 20px;
83
+ font-size: var(--ot-size-l);
81
84
  opacity: 0.4;
82
85
  transition: opacity 0.15s ease;
83
86
  }
@@ -91,18 +94,20 @@
91
94
  text-overflow: ellipsis;
92
95
  }
93
96
 
97
+ /* Count badge */
98
+
94
99
  .e-210c16c7 > .holder > .group > .item > .count,
95
100
  .e-210c16c7 > .holder > .bottom > .group > .item > .count,
96
101
  .e-210c16c7 > .drawer > .group > .item > .count
97
102
  {
98
103
  margin-left: auto;
99
104
  font-size: var(--ot-size-s);
100
- min-width: 20px;
101
- height: 20px;
105
+ min-width: var(--ot-height-x);
106
+ height: var(--ot-height-x);
102
107
  display: flex;
103
108
  align-items: center;
104
109
  justify-content: center;
105
- border-radius: 10px;
110
+ border-radius: var(--ot-radius-m);
106
111
  background: var(--ot-bg-4);
107
112
  color: var(--ot-text-2);
108
113
  font-weight: 500;
@@ -153,17 +158,16 @@
153
158
  margin-top: auto;
154
159
  }
155
160
 
156
- /* Variants */
161
+ /* Background variants */
157
162
 
158
- .e-210c16c7 > .holder.bg-2
159
- {
160
- background: var(--ot-bg-2);
161
- }
163
+ .e-210c16c7 > .holder.bg-1 { background: var(--ot-bg-1); }
164
+ .e-210c16c7 > .holder.bg-2 { background: var(--ot-bg-2); }
165
+ .e-210c16c7 > .holder.bg-3 { background: var(--ot-bg-3); }
166
+ .e-210c16c7 > .holder.bg-4 { background: var(--ot-bg-4); }
162
167
 
163
- .e-210c16c7 > .holder.border
164
- {
165
- border-right: 1px solid var(--ot-bg-2-border);
166
- }
168
+ /* Border variant */
169
+
170
+ .e-210c16c7 > .holder.border { border-right: 1px solid var(--ot-bg-2-border); }
167
171
 
168
172
  /* Bar, Overlay, Drawer — hidden on desktop */
169
173
 
@@ -198,7 +202,7 @@
198
202
  bottom: 0;
199
203
  left: 0;
200
204
  width: 100vw;
201
- height: 40px;
205
+ height: var(--ot-height-l);
202
206
  background: var(--ot-bg-1);
203
207
  border-top: 1px solid var(--ot-bg-2-border);
204
208
  border-bottom: 1px solid var(--ot-bg-2-border);
@@ -208,29 +212,11 @@
208
212
 
209
213
  .e-210c16c7 > .bar > .toggle
210
214
  {
211
- font-size: 20px;
215
+ font-size: var(--ot-size-l);
212
216
  color: var(--ot-brand);
213
217
  pointer-events: none;
214
218
  }
215
219
 
216
- .e-210c16c7 > .drawer > .toggle
217
- {
218
- display: flex;
219
- align-items: center;
220
- justify-content: center;
221
- width: 34px;
222
- height: 34px;
223
- background: none;
224
- border: none;
225
- color: var(--ot-text-2);
226
- cursor: pointer;
227
- }
228
-
229
- .e-210c16c7 > .drawer > .toggle > i
230
- {
231
- font-size: 20px;
232
- }
233
-
234
220
  .e-210c16c7 > .overlay
235
221
  {
236
222
  display: block;
@@ -262,7 +248,7 @@
262
248
  align-items: center;
263
249
  justify-content: center;
264
250
  width: 100%;
265
- height: 40px;
251
+ height: var(--ot-height-l);
266
252
  background: none;
267
253
  border: none;
268
254
  border-bottom: 1px solid var(--ot-bg-2-border);
@@ -273,7 +259,7 @@
273
259
 
274
260
  .e-210c16c7 > .drawer > .toggle > i
275
261
  {
276
- font-size: 20px;
262
+ font-size: var(--ot-size-l);
277
263
  }
278
264
 
279
265
  .e-210c16c7 > .drawer > .group
@@ -10,7 +10,29 @@ onetype.AddonReady('elements', (elements) =>
10
10
  config: {
11
11
  groups: {
12
12
  type: 'array',
13
- value: []
13
+ value: [],
14
+ each: {
15
+ type: 'object',
16
+ config: {
17
+ title: { type: 'string', value: '' },
18
+ placement: { type: 'string', value: 'top', options: ['top', 'bottom'] },
19
+ items: {
20
+ type: 'array',
21
+ value: [],
22
+ each: {
23
+ type: 'object',
24
+ config: {
25
+ icon: { type: 'string', value: '' },
26
+ label: { type: 'string', value: '' },
27
+ href: { type: 'string', value: '' },
28
+ value: { type: 'string', value: '' },
29
+ match: { type: 'string', value: '' },
30
+ count: { type: 'number', value: null }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
14
36
  },
15
37
  active: {
16
38
  type: 'string',
@@ -19,7 +41,7 @@ onetype.AddonReady('elements', (elements) =>
19
41
  variant: {
20
42
  type: 'array',
21
43
  value: [],
22
- options: ['bg-2', 'border']
44
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border']
23
45
  },
24
46
  _click: {
25
47
  type: 'function'
@@ -68,7 +90,7 @@ onetype.AddonReady('elements', (elements) =>
68
90
  <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
69
91
  <i ot-if="item.icon">{{ item.icon }}</i>
70
92
  <span>{{ item.label }}</span>
71
- <span ot-if="item.count !== undefined" class="count">{{ item.count }}</span>
93
+ <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
72
94
  </a>
73
95
  </div>
74
96
  <div ot-if="bottom.length" class="bottom">
@@ -77,7 +99,7 @@ onetype.AddonReady('elements', (elements) =>
77
99
  <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
78
100
  <i ot-if="item.icon">{{ item.icon }}</i>
79
101
  <span>{{ item.label }}</span>
80
- <span ot-if="item.count !== undefined" class="count">{{ item.count }}</span>
102
+ <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
81
103
  </a>
82
104
  </div>
83
105
  </div>
@@ -94,7 +116,7 @@ onetype.AddonReady('elements', (elements) =>
94
116
  <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
95
117
  <i ot-if="item.icon">{{ item.icon }}</i>
96
118
  <span>{{ item.label }}</span>
97
- <span ot-if="item.count !== undefined" class="count">{{ item.count }}</span>
119
+ <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
98
120
  </a>
99
121
  </div>
100
122
  <div ot-if="bottom.length" class="group">
@@ -103,7 +125,7 @@ onetype.AddonReady('elements', (elements) =>
103
125
  <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
104
126
  <i ot-if="item.icon">{{ item.icon }}</i>
105
127
  <span>{{ item.label }}</span>
106
- <span ot-if="item.count !== undefined" class="count">{{ item.count }}</span>
128
+ <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
107
129
  </a>
108
130
  </div>
109
131
  </div>
@@ -1,47 +1,66 @@
1
+ /* Root */
2
+
1
3
  .e-1a8b6ac1
2
4
  {
3
5
  display: flex;
6
+ width: 100%;
4
7
  }
5
8
 
9
+ /* Holder */
10
+
6
11
  .e-1a8b6ac1 > .holder
7
12
  {
8
13
  display: flex;
9
14
  align-items: center;
10
- gap: 0;
11
- background: var(--ot-bg-2);
12
- border: 1px solid var(--ot-bg-2-border);
13
- border-radius: 8px;
14
- padding: 4px;
15
+ border: 1px solid transparent;
16
+ border-radius: var(--ot-radius-m);
17
+ padding: var(--ot-spacing-x);
15
18
  }
16
19
 
20
+ /* Tab */
21
+
17
22
  .e-1a8b6ac1 > .holder > .tab
18
23
  {
19
24
  display: flex;
20
25
  align-items: center;
21
- gap: 6px;
22
- padding: 8px 20px;
23
- border-radius: 6px;
26
+ gap: var(--ot-spacing-s);
27
+ padding: var(--ot-spacing-s) var(--ot-spacing-m);
28
+ border-radius: var(--ot-radius-m);
24
29
  font-size: var(--ot-size-m);
25
30
  font-weight: 500;
26
31
  color: var(--ot-text-2);
27
32
  text-decoration: none;
28
33
  white-space: nowrap;
29
34
  cursor: pointer;
30
- transition: all 0.2s ease;
35
+ transition: color 0.15s ease, background 0.15s ease;
31
36
  }
32
37
 
33
38
  .e-1a8b6ac1 > .holder > .tab > i
34
39
  {
35
- font-size: 16px;
36
- }
37
-
38
- .e-1a8b6ac1 > .holder > .tab.active
39
- {
40
- background: var(--ot-bg-3);
41
- color: var(--ot-text-1);
40
+ font-size: var(--ot-size-m);
42
41
  }
43
42
 
44
43
  .e-1a8b6ac1 > .holder > .tab:hover:not(.active)
45
44
  {
46
45
  color: var(--ot-text-1);
47
46
  }
47
+
48
+ /* Active — relative to bg variant */
49
+
50
+ .e-1a8b6ac1 > .holder.bg-1 > .tab.active { background: var(--ot-bg-2); color: var(--ot-text-1); }
51
+ .e-1a8b6ac1 > .holder.bg-2 > .tab.active { background: var(--ot-bg-3); color: var(--ot-text-1); }
52
+ .e-1a8b6ac1 > .holder.bg-3 > .tab.active { background: var(--ot-bg-4); color: var(--ot-text-1); }
53
+ .e-1a8b6ac1 > .holder.bg-4 > .tab.active { background: var(--ot-bg-4-hover); color: var(--ot-text-1); }
54
+
55
+ /* Background variants */
56
+
57
+ .e-1a8b6ac1 > .holder.bg-1 { background: var(--ot-bg-1); border-color: var(--ot-bg-1-border); }
58
+ .e-1a8b6ac1 > .holder.bg-2 { background: var(--ot-bg-2); border-color: var(--ot-bg-2-border); }
59
+ .e-1a8b6ac1 > .holder.bg-3 { background: var(--ot-bg-3); border-color: var(--ot-bg-3-border); }
60
+ .e-1a8b6ac1 > .holder.bg-4 { background: var(--ot-bg-4); border-color: var(--ot-bg-4-border); }
61
+
62
+ /* Size variants */
63
+
64
+ .e-1a8b6ac1 > .holder.size-s > .tab { padding: var(--ot-spacing-x) var(--ot-spacing-s); font-size: var(--ot-size-s); }
65
+ .e-1a8b6ac1 > .holder.size-m > .tab { padding: var(--ot-spacing-s) var(--ot-spacing-m); font-size: var(--ot-size-m); }
66
+ .e-1a8b6ac1 > .holder.size-l > .tab { padding: var(--ot-spacing-m) var(--ot-spacing-l); font-size: var(--ot-size-m); }
@@ -14,7 +14,21 @@ onetype.AddonReady('elements', (elements) =>
14
14
  },
15
15
  items: {
16
16
  type: 'array',
17
- value: []
17
+ value: [],
18
+ each: {
19
+ type: 'object',
20
+ config: {
21
+ id: { type: 'string', value: '' },
22
+ label: { type: 'string', value: '' },
23
+ icon: { type: 'string', value: '' },
24
+ href: { type: 'string', value: '' }
25
+ }
26
+ }
27
+ },
28
+ variant: {
29
+ type: 'array',
30
+ value: ['bg-2'],
31
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'size-s', 'size-m', 'size-l']
18
32
  },
19
33
  _change: {
20
34
  type: 'function'
@@ -33,7 +47,7 @@ onetype.AddonReady('elements', (elements) =>
33
47
  };
34
48
 
35
49
  return `
36
- <div class="holder">
50
+ <div :class="'holder ' + variant.join(' ')">
37
51
  <a ot-for="item in items" :class="'tab' + (active === item.id ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="select(item.id)">
38
52
  <i ot-if="item.icon">{{ item.icon }}</i>
39
53
  <span>{{ item.label }}</span>
@@ -1,25 +1,30 @@
1
+ /* Root */
2
+
1
3
  .e-471f3f12
2
4
  {
3
- width: 100%;
4
- min-height: calc(100vh - 48px);
5
5
  display: flex;
6
6
  align-items: center;
7
7
  justify-content: center;
8
+ width: 100%;
9
+ min-height: calc(100vh - 48px);
8
10
  padding: var(--ot-spacing-l);
9
11
  }
10
12
 
11
- .e-471f3f12 .holder
13
+ /* Holder */
14
+
15
+ .e-471f3f12 > .holder
12
16
  {
13
17
  display: flex;
14
18
  flex-direction: column;
15
19
  align-items: center;
16
- gap: 20px;
20
+ gap: var(--ot-spacing-m);
17
21
  text-align: center;
18
22
  max-width: 400px;
19
23
  }
20
24
 
21
- /* Large code number */
22
- .e-471f3f12 .holder > .code
25
+ /* Code number */
26
+
27
+ .e-471f3f12 > .holder > .code
23
28
  {
24
29
  font-size: 120px;
25
30
  font-weight: 700;
@@ -30,19 +35,23 @@
30
35
  user-select: none;
31
36
  }
32
37
 
33
- .e-471f3f12 .holder > .title
38
+ /* Title */
39
+
40
+ .e-471f3f12 > .holder > .title
34
41
  {
35
- font-size: 20px;
42
+ font-size: var(--ot-size-l);
36
43
  font-weight: 600;
37
44
  color: var(--ot-text-1);
38
45
  line-height: 1.3;
39
- margin-top: -8px;
46
+ margin: 0;
40
47
  }
41
48
 
42
- .e-471f3f12 .holder > .description
49
+ /* Description */
50
+
51
+ .e-471f3f12 > .holder > .description
43
52
  {
44
- font-size: 14px;
53
+ font-size: var(--ot-size-m);
45
54
  line-height: 1.6;
46
55
  color: var(--ot-text-2);
47
- margin-top: -4px;
56
+ margin: 0;
48
57
  }
@@ -1,24 +1,30 @@
1
+ /* Root */
2
+
1
3
  .e-631be738
2
4
  {
3
- width: 100%;
4
- min-height: 320px;
5
5
  display: flex;
6
6
  align-items: center;
7
7
  justify-content: center;
8
+ width: 100%;
9
+ min-height: 320px;
8
10
  padding: var(--ot-spacing-l);
9
11
  }
10
12
 
11
- .e-631be738 .holder
13
+ /* Holder */
14
+
15
+ .e-631be738 > .holder
12
16
  {
13
17
  display: flex;
14
18
  flex-direction: column;
15
19
  align-items: center;
20
+ gap: var(--ot-spacing-m);
16
21
  text-align: center;
17
22
  max-width: 400px;
18
23
  }
19
24
 
20
- /* Dashed circle — visual emptiness */
21
- .e-631be738 .holder > .icon-wrap
25
+ /* Dashed circle */
26
+
27
+ .e-631be738 > .holder > .circle
22
28
  {
23
29
  width: 72px;
24
30
  height: 72px;
@@ -29,31 +35,30 @@
29
35
  justify-content: center;
30
36
  }
31
37
 
32
- .e-631be738 .holder > .icon-wrap > i
38
+ .e-631be738 > .holder > .circle > i
33
39
  {
34
40
  font-size: 32px;
35
41
  color: var(--ot-text-2);
36
42
  opacity: 0.35;
37
43
  }
38
44
 
39
- .e-631be738 .holder > .title
45
+ /* Title */
46
+
47
+ .e-631be738 > .holder > .title
40
48
  {
41
- font-size: 20px;
49
+ font-size: var(--ot-size-l);
42
50
  font-weight: 600;
43
51
  color: var(--ot-text-1);
44
52
  line-height: 1.3;
45
- margin-top: 24px;
53
+ margin: 0;
46
54
  }
47
55
 
48
- .e-631be738 .holder > .description
56
+ /* Description */
57
+
58
+ .e-631be738 > .holder > .description
49
59
  {
50
- font-size: 14px;
60
+ font-size: var(--ot-size-m);
51
61
  line-height: 1.6;
52
62
  color: var(--ot-text-2);
53
- margin-top: 8px;
54
- }
55
-
56
- .e-631be738 .holder > e-form-button
57
- {
58
- margin-top: 24px;
63
+ margin: 0;
59
64
  }
@@ -32,7 +32,7 @@ onetype.AddonReady('elements', (elements) =>
32
32
  {
33
33
  return `
34
34
  <div class="holder">
35
- <div class="icon-wrap"><i>{{ icon }}</i></div>
35
+ <div class="circle"><i>{{ icon }}</i></div>
36
36
  <h2 class="title">{{ title }}</h2>
37
37
  <p ot-if="description" class="description">{{ description }}</p>
38
38
  <e-form-button ot-if="action" :text="action" icon="add" :variant="['brand', 'size-m']" :_click="_click"></e-form-button>
@@ -1,55 +1,65 @@
1
+ /* Root */
2
+
1
3
  .e-63199a7d
2
4
  {
3
- width: 100%;
4
- min-height: calc(100vh - 48px);
5
5
  display: flex;
6
6
  align-items: center;
7
7
  justify-content: center;
8
+ width: 100%;
9
+ min-height: calc(100vh - 48px);
8
10
  padding: var(--ot-spacing-l);
9
11
  }
10
12
 
11
- .e-63199a7d .holder
13
+ /* Holder */
14
+
15
+ .e-63199a7d > .holder
12
16
  {
13
17
  display: flex;
14
18
  flex-direction: column;
15
19
  align-items: center;
16
- gap: 20px;
20
+ gap: var(--ot-spacing-m);
17
21
  text-align: center;
18
22
  max-width: 400px;
19
23
  }
20
24
 
21
25
  /* Icon circle */
22
- .e-63199a7d .holder > .icon-wrap
26
+
27
+ .e-63199a7d > .holder > .circle
23
28
  {
24
29
  width: 80px;
25
30
  height: 80px;
26
31
  border-radius: 50%;
27
32
  background: var(--ot-red-opacity);
28
- border: 1px solid rgba(244, 63, 94, 0.15);
33
+ border: 1px solid var(--ot-red-border);
29
34
  display: flex;
30
35
  align-items: center;
31
36
  justify-content: center;
32
37
  }
33
38
 
34
- .e-63199a7d .holder > .icon-wrap > i
39
+ .e-63199a7d > .holder > .circle > i
35
40
  {
36
41
  font-size: 36px;
37
42
  color: var(--ot-red);
38
43
  opacity: 0.8;
39
44
  }
40
45
 
41
- .e-63199a7d .holder > .title
46
+ /* Title */
47
+
48
+ .e-63199a7d > .holder > .title
42
49
  {
43
- font-size: 20px;
50
+ font-size: var(--ot-size-l);
44
51
  font-weight: 600;
45
52
  color: var(--ot-text-1);
46
53
  line-height: 1.3;
54
+ margin: 0;
47
55
  }
48
56
 
49
- .e-63199a7d .holder > .description
57
+ /* Description */
58
+
59
+ .e-63199a7d > .holder > .description
50
60
  {
51
- font-size: 14px;
61
+ font-size: var(--ot-size-m);
52
62
  line-height: 1.6;
53
63
  color: var(--ot-text-2);
54
- margin-top: -4px;
64
+ margin: 0;
55
65
  }
@@ -44,7 +44,7 @@ onetype.AddonReady('elements', (elements) =>
44
44
 
45
45
  return `
46
46
  <div class="holder">
47
- <div class="icon-wrap"><i>{{ icon }}</i></div>
47
+ <div class="circle"><i>{{ icon }}</i></div>
48
48
  <h2 class="title">{{ title }}</h2>
49
49
  <p ot-if="description" class="description">{{ description }}</p>
50
50
  <e-form-button ot-if="action" :text="action" icon="refresh" :variant="['brand', 'size-m']" :_click="retry"></e-form-button>
@@ -1,23 +1,28 @@
1
+ /* Root */
2
+
1
3
  .e-691b81f7
2
4
  {
3
- width: 100%;
4
- min-height: calc(100vh - 48px);
5
5
  display: flex;
6
6
  align-items: center;
7
7
  justify-content: center;
8
+ width: 100%;
9
+ min-height: calc(100vh - 48px);
8
10
  padding: var(--ot-spacing-l);
9
11
  }
10
12
 
11
- .e-691b81f7 .holder
13
+ /* Holder */
14
+
15
+ .e-691b81f7 > .holder
12
16
  {
13
17
  display: flex;
14
18
  flex-direction: column;
15
19
  align-items: center;
16
- gap: 20px;
20
+ gap: var(--ot-spacing-m);
17
21
  }
18
22
 
19
- /* Spinner with pulsing ring */
20
- .e-691b81f7 .holder > .spinner-wrap
23
+ /* Spinner circle */
24
+
25
+ .e-691b81f7 > .holder > .circle
21
26
  {
22
27
  position: relative;
23
28
  width: 80px;
@@ -30,25 +35,30 @@
30
35
  animation: e-691b81f7-pulse 2s ease-in-out infinite;
31
36
  }
32
37
 
33
- .e-691b81f7 .holder > .spinner-wrap > .spinner
38
+ .e-691b81f7 > .holder > .circle > .spinner
34
39
  {
35
40
  font-size: 32px;
36
41
  animation: e-691b81f7-spin 0.8s linear infinite;
37
42
  }
38
43
 
39
44
  /* Color variants */
40
- .e-691b81f7 .holder[variant="brand"] > .spinner-wrap > .spinner { color: var(--ot-brand); }
41
- .e-691b81f7 .holder[variant="blue"] > .spinner-wrap > .spinner { color: var(--ot-blue); }
42
- .e-691b81f7 .holder[variant="red"] > .spinner-wrap > .spinner { color: var(--ot-red); }
43
- .e-691b81f7 .holder[variant="orange"] > .spinner-wrap > .spinner { color: var(--ot-orange); }
44
- .e-691b81f7 .holder[variant="green"] > .spinner-wrap > .spinner { color: var(--ot-green); }
45
45
 
46
- .e-691b81f7 .holder > .text
46
+ .e-691b81f7 > .holder.brand > .circle > .spinner { color: var(--ot-brand); }
47
+ .e-691b81f7 > .holder.blue > .circle > .spinner { color: var(--ot-blue); }
48
+ .e-691b81f7 > .holder.red > .circle > .spinner { color: var(--ot-red); }
49
+ .e-691b81f7 > .holder.orange > .circle > .spinner { color: var(--ot-orange); }
50
+ .e-691b81f7 > .holder.green > .circle > .spinner { color: var(--ot-green); }
51
+
52
+ /* Text */
53
+
54
+ .e-691b81f7 > .holder > .text
47
55
  {
48
- font-size: 14px;
56
+ font-size: var(--ot-size-m);
49
57
  color: var(--ot-text-2);
50
58
  }
51
59
 
60
+ /* Animations */
61
+
52
62
  @keyframes e-691b81f7-spin
53
63
  {
54
64
  from { transform: rotate(0deg); }
@@ -13,16 +13,16 @@ onetype.AddonReady('elements', (elements) =>
13
13
  value: ''
14
14
  },
15
15
  variant: {
16
- type: 'string',
17
- value: 'brand',
16
+ type: 'array',
17
+ value: ['brand'],
18
18
  options: ['brand', 'blue', 'red', 'orange', 'green']
19
19
  }
20
20
  },
21
21
  render: function()
22
22
  {
23
23
  return `
24
- <div class="holder" :variant="variant">
25
- <div class="spinner-wrap"><i class="spinner">progress_activity</i></div>
24
+ <div :class="'holder ' + variant.join(' ')">
25
+ <div class="circle"><i class="spinner">progress_activity</i></div>
26
26
  <span ot-if="text" class="text">{{ text }}</span>
27
27
  </div>
28
28
  `;