@onetype/framework 2.0.52 → 2.0.54

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 (154) hide show
  1. package/addons/core/database/back/items/commands/create.js +1 -1
  2. package/addons/core/database/back/items/commands/delete.js +3 -3
  3. package/addons/core/database/back/items/commands/update.js +1 -1
  4. package/addons/float/popup/css/popup.css +2 -2
  5. package/addons/render/directives/front/functions/process.js +3 -1
  6. package/addons/render/directives/front/items/self/160-slot.js +9 -1
  7. package/addons/render/directives/front/items/self/660-form.js +19 -13
  8. package/addons/render/editor/addon.js +13 -0
  9. package/addons/render/editor/functions/block/add.js +57 -0
  10. package/addons/render/editor/functions/block/delete.js +32 -0
  11. package/addons/render/editor/functions/block/find.js +30 -0
  12. package/addons/render/editor/functions/render/block.js +114 -0
  13. package/addons/render/editor/functions/render/blocks.js +31 -0
  14. package/addons/render/editor/items/elements/editor.js +69 -0
  15. package/addons/render/editor/items/self/paragraph.js +21 -0
  16. package/addons/render/editor/styles/editor.css +252 -0
  17. package/addons/render/elements/front/functions/types/colors/badge.js +19 -0
  18. package/addons/render/elements/front/functions/types/colors/status.js +24 -0
  19. package/addons/render/elements/front/functions/types/escape.js +8 -0
  20. package/addons/render/elements/front/functions/types/format/currency.js +16 -0
  21. package/addons/render/elements/front/functions/types/format/date.js +16 -0
  22. package/addons/render/elements/front/functions/types/format/number.js +24 -0
  23. package/addons/render/elements/front/functions/types/format/timeago.js +43 -0
  24. package/addons/render/elements/front/functions/types/render/avatar.js +10 -0
  25. package/addons/render/elements/front/functions/types/render/badge.js +17 -0
  26. package/addons/render/elements/front/functions/types/render/boolean.js +8 -0
  27. package/addons/render/elements/front/functions/types/render/chip.js +6 -0
  28. package/addons/render/elements/front/functions/types/render/currency.js +7 -0
  29. package/addons/render/elements/front/functions/types/render/date.js +6 -0
  30. package/addons/render/elements/front/functions/types/render/description.js +12 -0
  31. package/addons/render/elements/front/functions/types/render/group.js +11 -0
  32. package/addons/render/elements/front/functions/types/render/icon.js +8 -0
  33. package/addons/render/elements/front/functions/types/render/image.js +9 -0
  34. package/addons/render/elements/front/functions/types/render/link.js +8 -0
  35. package/addons/render/elements/front/functions/types/render/media.js +16 -0
  36. package/addons/render/elements/front/functions/types/render/metric.js +13 -0
  37. package/addons/render/elements/front/functions/types/render/number.js +6 -0
  38. package/addons/render/elements/front/functions/types/render/progress.js +13 -0
  39. package/addons/render/elements/front/functions/types/render/status.js +12 -0
  40. package/addons/render/elements/front/functions/types/render/tag.js +6 -0
  41. package/addons/render/elements/front/functions/types/render/tags.js +11 -0
  42. package/addons/render/elements/front/functions/types/render/text.js +8 -0
  43. package/addons/render/elements/front/functions/types/render/timeago.js +6 -0
  44. package/addons/render/elements/front/functions/types/render.js +16 -0
  45. package/addons/render/elements/front/items/directives/element.js +8 -3
  46. package/addons/render/elements/front/items/self/cards/info/info.css +499 -0
  47. package/addons/render/elements/front/items/self/cards/info/info.js +224 -0
  48. package/addons/render/elements/front/items/self/cards/item/item.css +614 -0
  49. package/addons/render/elements/front/items/self/cards/item/item.js +200 -0
  50. package/addons/render/elements/front/items/self/cards/pricing/pricing.css +318 -46
  51. package/addons/render/elements/front/items/self/cards/pricing/pricing.js +81 -30
  52. package/addons/render/elements/front/items/self/cards/profile/profile.css +446 -0
  53. package/addons/render/elements/front/items/self/cards/profile/profile.js +186 -0
  54. package/addons/render/elements/front/items/self/cards/share/share.css +445 -0
  55. package/addons/render/elements/front/items/self/cards/share/share.js +316 -0
  56. package/addons/render/elements/front/items/self/cards/stat/stat.css +356 -0
  57. package/addons/render/elements/front/items/self/cards/stat/stat.js +146 -0
  58. package/addons/render/elements/front/items/self/charts/bar/bar.css +263 -0
  59. package/addons/render/elements/front/items/self/charts/bar/bar.js +156 -0
  60. package/addons/render/elements/front/items/self/charts/donut/donut.css +222 -0
  61. package/addons/render/elements/front/items/self/charts/donut/donut.js +164 -0
  62. package/addons/render/elements/front/items/self/charts/line/line.css +229 -0
  63. package/addons/render/elements/front/items/self/charts/line/line.js +249 -0
  64. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.css +102 -0
  65. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.js +164 -0
  66. package/addons/render/elements/front/items/self/core/builder/builder.css +71 -116
  67. package/addons/render/elements/front/items/self/core/builder/builder.js +212 -127
  68. package/addons/render/elements/front/items/self/core/repeater/repeater.css +338 -71
  69. package/addons/render/elements/front/items/self/core/repeater/repeater.js +191 -44
  70. package/addons/render/elements/front/items/self/data/filters/filters.css +541 -0
  71. package/addons/render/elements/front/items/self/data/filters/filters.js +504 -0
  72. package/addons/render/elements/front/items/self/data/table/table.css +588 -0
  73. package/addons/render/elements/front/items/self/data/table/table.js +589 -0
  74. package/addons/render/elements/front/items/self/form/button/button.css +430 -103
  75. package/addons/render/elements/front/items/self/form/button/button.js +109 -101
  76. package/addons/render/elements/front/items/self/form/checkbox/checkbox.css +356 -39
  77. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +109 -75
  78. package/addons/render/elements/front/items/self/form/color/color.css +255 -61
  79. package/addons/render/elements/front/items/self/form/color/color.js +135 -41
  80. package/addons/render/elements/front/items/self/form/date/date.css +289 -38
  81. package/addons/render/elements/front/items/self/form/date/date.js +108 -24
  82. package/addons/render/elements/front/items/self/form/editor/editor.css +447 -0
  83. package/addons/render/elements/front/items/self/form/editor/editor.js +794 -0
  84. package/addons/render/elements/front/items/self/form/field/field.css +160 -29
  85. package/addons/render/elements/front/items/self/form/field/field.js +36 -16
  86. package/addons/render/elements/front/items/self/form/input/input.css +272 -32
  87. package/addons/render/elements/front/items/self/form/input/input.js +324 -124
  88. package/addons/render/elements/front/items/self/form/radio/radio.css +310 -45
  89. package/addons/render/elements/front/items/self/form/radio/radio.js +99 -80
  90. package/addons/render/elements/front/items/self/form/rating/rating.css +234 -57
  91. package/addons/render/elements/front/items/self/form/rating/rating.js +216 -86
  92. package/addons/render/elements/front/items/self/form/section/section.css +247 -32
  93. package/addons/render/elements/front/items/self/form/section/section.js +53 -16
  94. package/addons/render/elements/front/items/self/form/select/select.css +362 -64
  95. package/addons/render/elements/front/items/self/form/select/select.js +156 -30
  96. package/addons/render/elements/front/items/self/form/slider/slider.css +331 -123
  97. package/addons/render/elements/front/items/self/form/slider/slider.js +124 -26
  98. package/addons/render/elements/front/items/self/form/tags/tags.css +328 -53
  99. package/addons/render/elements/front/items/self/form/tags/tags.js +155 -28
  100. package/addons/render/elements/front/items/self/form/textarea/textarea.css +128 -27
  101. package/addons/render/elements/front/items/self/form/textarea/textarea.js +172 -113
  102. package/addons/render/elements/front/items/self/form/toggle/toggle.css +239 -39
  103. package/addons/render/elements/front/items/self/form/toggle/toggle.js +32 -17
  104. package/addons/render/elements/front/items/self/form/transfer/transfer.css +377 -0
  105. package/addons/render/elements/front/items/self/form/transfer/transfer.js +453 -0
  106. package/addons/render/elements/front/items/self/form/upload/upload.css +408 -0
  107. package/addons/render/elements/front/items/self/form/upload/upload.js +469 -0
  108. package/addons/render/elements/front/items/self/global/accordion/accordion.css +377 -0
  109. package/addons/render/elements/front/items/self/global/accordion/accordion.js +135 -0
  110. package/addons/render/elements/front/items/self/global/code/code.css +207 -44
  111. package/addons/render/elements/front/items/self/global/code/code.js +327 -19
  112. package/addons/render/elements/front/items/self/global/gallery/gallery.css +521 -0
  113. package/addons/render/elements/front/items/self/global/gallery/gallery.js +291 -0
  114. package/addons/render/elements/front/items/self/global/heading/heading.css +151 -49
  115. package/addons/render/elements/front/items/self/global/heading/heading.js +30 -15
  116. package/addons/render/elements/front/items/self/global/markdown/markdown.css +284 -135
  117. package/addons/render/elements/front/items/self/global/markdown/markdown.js +35 -5
  118. package/addons/render/elements/front/items/self/global/menu/menu.css +311 -56
  119. package/addons/render/elements/front/items/self/global/menu/menu.js +95 -47
  120. package/addons/render/elements/front/items/self/global/notice/notice.css +263 -23
  121. package/addons/render/elements/front/items/self/global/notice/notice.js +51 -11
  122. package/addons/render/elements/front/items/self/global/parameters/parameters.css +276 -33
  123. package/addons/render/elements/front/items/self/global/parameters/parameters.js +86 -16
  124. package/addons/render/elements/front/items/self/global/tags/tags.css +215 -29
  125. package/addons/render/elements/front/items/self/global/tags/tags.js +91 -17
  126. package/addons/render/elements/front/items/self/navigation/dock/dock.css +221 -0
  127. package/addons/render/elements/front/items/self/navigation/dock/dock.js +134 -0
  128. package/addons/render/elements/front/items/self/navigation/footer/footer.css +356 -0
  129. package/addons/render/elements/front/items/self/navigation/footer/footer.js +219 -0
  130. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +736 -76
  131. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +437 -29
  132. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +327 -196
  133. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +115 -62
  134. package/addons/render/elements/front/items/self/navigation/steps/steps.css +345 -0
  135. package/addons/render/elements/front/items/self/navigation/steps/steps.js +113 -0
  136. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +507 -33
  137. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +62 -19
  138. package/addons/render/elements/front/items/self/status/code/code.css +83 -12
  139. package/addons/render/elements/front/items/self/status/code/code.js +15 -4
  140. package/addons/render/elements/front/items/self/status/empty/empty.css +95 -15
  141. package/addons/render/elements/front/items/self/status/empty/empty.js +17 -12
  142. package/addons/render/elements/front/items/self/status/error/error.css +99 -14
  143. package/addons/render/elements/front/items/self/status/error/error.js +21 -11
  144. package/addons/render/elements/front/items/self/status/loading/loading.css +85 -14
  145. package/addons/render/elements/front/items/self/status/loading/loading.js +5 -6
  146. package/addons/render/elements/front/styles/types.css +363 -0
  147. package/instructions.txt +28 -0
  148. package/lib/load.js +1 -0
  149. package/lib/styles/reset.css +89 -76
  150. package/package.json +1 -1
  151. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.css +0 -410
  152. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.js +0 -191
  153. package/addons/render/elements/front/items/self/global/faq/faq.css +0 -98
  154. package/addons/render/elements/front/items/self/global/faq/faq.js +0 -56
@@ -4,21 +4,22 @@ onetype.AddonReady('elements', (elements) =>
4
4
  id: 'form-select',
5
5
  icon: 'arrow_drop_down',
6
6
  name: 'Select',
7
- description: 'Custom dropdown select with search support.',
7
+ description: 'Premium custom dropdown select with search, keyboard navigation and clearable.',
8
8
  category: 'Form',
9
9
  author: 'OneType',
10
10
  config: {
11
11
  value: {
12
- type: 'string',
13
- value: ''
12
+ type: 'string|number'
14
13
  },
15
14
  name: {
16
- type: 'string',
17
- value: ''
15
+ type: 'string'
18
16
  },
19
17
  placeholder: {
20
18
  type: 'string',
21
- value: 'Select...'
19
+ value: 'Select'
20
+ },
21
+ icon: {
22
+ type: 'string'
22
23
  },
23
24
  options: {
24
25
  type: 'array',
@@ -26,19 +27,22 @@ onetype.AddonReady('elements', (elements) =>
26
27
  each: {
27
28
  type: 'object',
28
29
  config: {
29
- label: { type: 'string', value: '' },
30
- value: { type: 'string', value: '' },
31
- icon: { type: 'string', value: '' }
30
+ label: { type: 'string' },
31
+ value: { type: 'string' },
32
+ icon: { type: 'string' },
33
+ description: { type: 'string' },
34
+ disabled: { type: 'boolean' }
32
35
  }
33
36
  }
34
37
  },
35
38
  searchable: {
36
- type: 'boolean',
37
- value: false
39
+ type: 'boolean'
40
+ },
41
+ clearable: {
42
+ type: 'boolean'
38
43
  },
39
44
  disabled: {
40
- type: 'boolean',
41
- value: false
45
+ type: 'boolean'
42
46
  },
43
47
  variant: {
44
48
  type: 'array',
@@ -54,6 +58,7 @@ onetype.AddonReady('elements', (elements) =>
54
58
  this.open = false;
55
59
  this.query = '';
56
60
  this.style = '';
61
+ this.activeIndex = 0;
57
62
 
58
63
  this.current = () =>
59
64
  {
@@ -62,19 +67,19 @@ onetype.AddonReady('elements', (elements) =>
62
67
 
63
68
  this.filtered = () =>
64
69
  {
65
- if (!this.query)
70
+ if(!this.query)
66
71
  {
67
72
  return this.options;
68
73
  }
69
74
 
70
75
  return this.options.filter(o =>
71
- o.label.toLowerCase().includes(this.query.toLowerCase())
76
+ String(o.label || '').toLowerCase().includes(this.query.toLowerCase())
72
77
  );
73
78
  };
74
79
 
75
80
  this.handleScroll = (event) =>
76
81
  {
77
- if (event.target.closest && event.target.closest('.dropdown'))
82
+ if(event.target.closest && event.target.closest('.dropdown'))
78
83
  {
79
84
  return;
80
85
  }
@@ -82,22 +87,88 @@ onetype.AddonReady('elements', (elements) =>
82
87
  this.close();
83
88
  };
84
89
 
90
+ this.handleKey = (event) =>
91
+ {
92
+ if(!this.open)
93
+ {
94
+ return;
95
+ }
96
+
97
+ const filtered = this.filtered();
98
+
99
+ if(event.key === 'Escape')
100
+ {
101
+ event.preventDefault();
102
+ this.close();
103
+ return;
104
+ }
105
+
106
+ if(event.key === 'ArrowDown')
107
+ {
108
+ event.preventDefault();
109
+ this.activeIndex = Math.min(this.activeIndex + 1, filtered.length - 1);
110
+ this.Update();
111
+ return;
112
+ }
113
+
114
+ if(event.key === 'ArrowUp')
115
+ {
116
+ event.preventDefault();
117
+ this.activeIndex = Math.max(this.activeIndex - 1, 0);
118
+ this.Update();
119
+ return;
120
+ }
121
+
122
+ if(event.key === 'Home')
123
+ {
124
+ event.preventDefault();
125
+ this.activeIndex = 0;
126
+ this.Update();
127
+ return;
128
+ }
129
+
130
+ if(event.key === 'End')
131
+ {
132
+ event.preventDefault();
133
+ this.activeIndex = Math.max(filtered.length - 1, 0);
134
+ this.Update();
135
+ return;
136
+ }
137
+
138
+ if(event.key === 'Enter')
139
+ {
140
+ event.preventDefault();
141
+
142
+ if(filtered[this.activeIndex])
143
+ {
144
+ this.select(filtered[this.activeIndex]);
145
+ }
146
+
147
+ return;
148
+ }
149
+ };
150
+
85
151
  this.close = () =>
86
152
  {
87
153
  this.open = false;
88
154
  this.query = '';
155
+ this.activeIndex = 0;
156
+
89
157
  window.removeEventListener('scroll', this.handleScroll, true);
90
158
  window.removeEventListener('resize', this.close);
159
+ window.removeEventListener('keydown', this.handleKey);
160
+
161
+ this.Update();
91
162
  };
92
163
 
93
164
  this.toggle = (event) =>
94
165
  {
95
- if (this.disabled)
166
+ if(this.disabled)
96
167
  {
97
168
  return;
98
169
  }
99
170
 
100
- if (this.open)
171
+ if(this.open)
101
172
  {
102
173
  this.close();
103
174
  return;
@@ -106,27 +177,61 @@ onetype.AddonReady('elements', (elements) =>
106
177
  this.open = true;
107
178
  this.query = '';
108
179
 
109
- const rect = event.target.closest('.trigger').getBoundingClientRect();
110
- this.style = 'top: ' + (rect.bottom + 4) + 'px; left: ' + rect.left + 'px; width: ' + rect.width + 'px;';
180
+ const filtered = this.filtered();
181
+ const currentIndex = filtered.findIndex(o => o.value === this.value);
182
+ this.activeIndex = currentIndex >= 0 ? currentIndex : 0;
111
183
 
112
184
  window.addEventListener('scroll', this.handleScroll, true);
113
185
  window.addEventListener('resize', this.close);
186
+ window.addEventListener('keydown', this.handleKey);
187
+
188
+ this.Update();
189
+
190
+ if(this.searchable)
191
+ {
192
+ setTimeout(() =>
193
+ {
194
+ const search = this.Element?.querySelector('.search > input');
195
+
196
+ if(search)
197
+ {
198
+ search.focus();
199
+ }
200
+ }, 10);
201
+ }
114
202
  };
115
203
 
116
204
  this.select = (option) =>
117
205
  {
206
+ if(option.disabled)
207
+ {
208
+ return;
209
+ }
210
+
118
211
  this.value = option.value;
119
212
  this.close();
120
213
 
121
- if (this._change)
214
+ if(this._change)
122
215
  {
123
216
  this._change({ value: this.value });
124
217
  }
125
218
  };
126
219
 
220
+ this.clear = () =>
221
+ {
222
+ this.value = '';
223
+
224
+ if(this._change)
225
+ {
226
+ this._change({ value: '' });
227
+ }
228
+ };
229
+
127
230
  this.search = ({ value }) =>
128
231
  {
129
232
  this.query = value;
233
+ this.activeIndex = 0;
234
+ this.Update();
130
235
  };
131
236
 
132
237
  this.dismiss = () =>
@@ -134,24 +239,45 @@ onetype.AddonReady('elements', (elements) =>
134
239
  this.close();
135
240
  };
136
241
 
137
- return `
138
- <div :class="'holder ' + variant.join(' ') + (open ? ' open' : '')" ot-click-outside="dismiss">
242
+ return /* html */ `
243
+ <div :class="'holder ' + variant.join(' ') + (open ? ' open' : '') + (disabled ? ' disabled' : '')" ot-click-outside="dismiss">
139
244
  <input type="hidden" :name="name" :value="value" />
140
245
  <div class="trigger" ot-click="toggle">
141
- <i ot-if="current() && current().icon" class="icon">{{ current().icon }}</i>
246
+ <i ot-if="icon" class="icon">{{ icon }}</i>
247
+ <i ot-if="!icon && current() && current().icon" class="icon">{{ current().icon }}</i>
142
248
  <span ot-if="value" class="selected">{{ current() ? current().label : '' }}</span>
143
249
  <span ot-if="!value" class="placeholder">{{ placeholder }}</span>
144
- <i class="arrow">{{ open ? 'expand_less' : 'expand_more' }}</i>
250
+ <button
251
+ ot-if="clearable && value && !disabled"
252
+ type="button"
253
+ class="action"
254
+ ot-click.stop="clear"
255
+ :ot-tooltip="{ text: 'Clear', position: { x: 'center', y: 'top' } }"
256
+ >
257
+ <i>close</i>
258
+ </button>
259
+ <i class="arrow">expand_more</i>
145
260
  </div>
146
- <div ot-if="open" class="dropdown" :style="style">
261
+ <div ot-if="open" class="dropdown">
147
262
  <div ot-if="searchable" class="search">
148
- <input type="text" :value="query" placeholder="Search..." autocomplete="off" ot-input="search" />
263
+ <i>search</i>
264
+ <input type="text" :value="query" placeholder="Search…" autocomplete="off" ot-input="search" />
149
265
  </div>
150
266
  <div class="list">
151
- <div ot-for="option in filtered()" :class="'option' + (option.value === value ? ' active' : '')" ot-click="() => select(option)">
267
+ <button
268
+ ot-for="option, index in filtered()"
269
+ type="button"
270
+ :class="'option' + (option.value === value ? ' selected' : '') + (activeIndex === index ? ' active' : '') + (option.disabled ? ' disabled' : '')"
271
+ ot-click="() => select(option)"
272
+ >
152
273
  <i ot-if="option.icon" class="icon">{{ option.icon }}</i>
153
- <span class="label">{{ option.label }}</span>
154
- </div>
274
+ <span class="text">
275
+ <span class="label">{{ option.label }}</span>
276
+ <span ot-if="option.description" class="description">{{ option.description }}</span>
277
+ </span>
278
+ <i ot-if="option.value === value" class="check">check</i>
279
+ </button>
280
+ <div ot-if="filtered().length === 0" class="empty">No results</div>
155
281
  </div>
156
282
  </div>
157
283
  </div>