@onetype/framework 2.0.53 → 2.0.55

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 (150) hide show
  1. package/addons/float/popup/css/popup.css +2 -2
  2. package/addons/render/directives/front/functions/process.js +3 -1
  3. package/addons/render/directives/front/items/self/160-slot.js +9 -1
  4. package/addons/render/editor/addon.js +13 -0
  5. package/addons/render/editor/functions/block/add.js +57 -0
  6. package/addons/render/editor/functions/block/delete.js +32 -0
  7. package/addons/render/editor/functions/block/find.js +30 -0
  8. package/addons/render/editor/functions/render/block.js +114 -0
  9. package/addons/render/editor/functions/render/blocks.js +31 -0
  10. package/addons/render/editor/items/elements/editor.js +69 -0
  11. package/addons/render/editor/items/self/paragraph.js +21 -0
  12. package/addons/render/editor/styles/editor.css +252 -0
  13. package/addons/render/elements/front/functions/types/colors/badge.js +19 -0
  14. package/addons/render/elements/front/functions/types/colors/status.js +24 -0
  15. package/addons/render/elements/front/functions/types/escape.js +8 -0
  16. package/addons/render/elements/front/functions/types/format/currency.js +16 -0
  17. package/addons/render/elements/front/functions/types/format/date.js +16 -0
  18. package/addons/render/elements/front/functions/types/format/number.js +24 -0
  19. package/addons/render/elements/front/functions/types/format/timeago.js +43 -0
  20. package/addons/render/elements/front/functions/types/render/avatar.js +10 -0
  21. package/addons/render/elements/front/functions/types/render/badge.js +17 -0
  22. package/addons/render/elements/front/functions/types/render/boolean.js +8 -0
  23. package/addons/render/elements/front/functions/types/render/chip.js +6 -0
  24. package/addons/render/elements/front/functions/types/render/currency.js +7 -0
  25. package/addons/render/elements/front/functions/types/render/date.js +6 -0
  26. package/addons/render/elements/front/functions/types/render/description.js +12 -0
  27. package/addons/render/elements/front/functions/types/render/group.js +11 -0
  28. package/addons/render/elements/front/functions/types/render/icon.js +8 -0
  29. package/addons/render/elements/front/functions/types/render/image.js +9 -0
  30. package/addons/render/elements/front/functions/types/render/link.js +8 -0
  31. package/addons/render/elements/front/functions/types/render/media.js +16 -0
  32. package/addons/render/elements/front/functions/types/render/metric.js +13 -0
  33. package/addons/render/elements/front/functions/types/render/number.js +6 -0
  34. package/addons/render/elements/front/functions/types/render/progress.js +13 -0
  35. package/addons/render/elements/front/functions/types/render/status.js +12 -0
  36. package/addons/render/elements/front/functions/types/render/tag.js +6 -0
  37. package/addons/render/elements/front/functions/types/render/tags.js +11 -0
  38. package/addons/render/elements/front/functions/types/render/text.js +8 -0
  39. package/addons/render/elements/front/functions/types/render/timeago.js +6 -0
  40. package/addons/render/elements/front/functions/types/render.js +16 -0
  41. package/addons/render/elements/front/items/directives/element.js +8 -3
  42. package/addons/render/elements/front/items/self/cards/info/info.css +499 -0
  43. package/addons/render/elements/front/items/self/cards/info/info.js +224 -0
  44. package/addons/render/elements/front/items/self/cards/item/item.css +614 -0
  45. package/addons/render/elements/front/items/self/cards/item/item.js +200 -0
  46. package/addons/render/elements/front/items/self/cards/pricing/pricing.css +318 -46
  47. package/addons/render/elements/front/items/self/cards/pricing/pricing.js +81 -30
  48. package/addons/render/elements/front/items/self/cards/profile/profile.css +446 -0
  49. package/addons/render/elements/front/items/self/cards/profile/profile.js +186 -0
  50. package/addons/render/elements/front/items/self/cards/share/share.css +445 -0
  51. package/addons/render/elements/front/items/self/cards/share/share.js +316 -0
  52. package/addons/render/elements/front/items/self/cards/stat/stat.css +356 -0
  53. package/addons/render/elements/front/items/self/cards/stat/stat.js +146 -0
  54. package/addons/render/elements/front/items/self/charts/bar/bar.css +263 -0
  55. package/addons/render/elements/front/items/self/charts/bar/bar.js +156 -0
  56. package/addons/render/elements/front/items/self/charts/donut/donut.css +222 -0
  57. package/addons/render/elements/front/items/self/charts/donut/donut.js +164 -0
  58. package/addons/render/elements/front/items/self/charts/line/line.css +229 -0
  59. package/addons/render/elements/front/items/self/charts/line/line.js +249 -0
  60. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.css +102 -0
  61. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.js +164 -0
  62. package/addons/render/elements/front/items/self/core/builder/builder.css +71 -116
  63. package/addons/render/elements/front/items/self/core/builder/builder.js +212 -127
  64. package/addons/render/elements/front/items/self/core/repeater/repeater.css +338 -71
  65. package/addons/render/elements/front/items/self/core/repeater/repeater.js +191 -44
  66. package/addons/render/elements/front/items/self/data/filters/filters.css +541 -0
  67. package/addons/render/elements/front/items/self/data/filters/filters.js +504 -0
  68. package/addons/render/elements/front/items/self/data/table/table.css +588 -0
  69. package/addons/render/elements/front/items/self/data/table/table.js +589 -0
  70. package/addons/render/elements/front/items/self/form/button/button.css +430 -103
  71. package/addons/render/elements/front/items/self/form/button/button.js +109 -101
  72. package/addons/render/elements/front/items/self/form/checkbox/checkbox.css +356 -39
  73. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +109 -75
  74. package/addons/render/elements/front/items/self/form/color/color.css +255 -61
  75. package/addons/render/elements/front/items/self/form/color/color.js +135 -41
  76. package/addons/render/elements/front/items/self/form/date/date.css +289 -38
  77. package/addons/render/elements/front/items/self/form/date/date.js +108 -24
  78. package/addons/render/elements/front/items/self/form/editor/editor.css +447 -0
  79. package/addons/render/elements/front/items/self/form/editor/editor.js +794 -0
  80. package/addons/render/elements/front/items/self/form/field/field.css +160 -29
  81. package/addons/render/elements/front/items/self/form/field/field.js +36 -16
  82. package/addons/render/elements/front/items/self/form/input/input.css +272 -32
  83. package/addons/render/elements/front/items/self/form/input/input.js +324 -124
  84. package/addons/render/elements/front/items/self/form/radio/radio.css +310 -45
  85. package/addons/render/elements/front/items/self/form/radio/radio.js +99 -80
  86. package/addons/render/elements/front/items/self/form/rating/rating.css +234 -57
  87. package/addons/render/elements/front/items/self/form/rating/rating.js +216 -86
  88. package/addons/render/elements/front/items/self/form/section/section.css +247 -32
  89. package/addons/render/elements/front/items/self/form/section/section.js +53 -16
  90. package/addons/render/elements/front/items/self/form/select/select.css +362 -64
  91. package/addons/render/elements/front/items/self/form/select/select.js +156 -30
  92. package/addons/render/elements/front/items/self/form/slider/slider.css +331 -123
  93. package/addons/render/elements/front/items/self/form/slider/slider.js +124 -26
  94. package/addons/render/elements/front/items/self/form/tags/tags.css +328 -53
  95. package/addons/render/elements/front/items/self/form/tags/tags.js +155 -28
  96. package/addons/render/elements/front/items/self/form/textarea/textarea.css +128 -27
  97. package/addons/render/elements/front/items/self/form/textarea/textarea.js +172 -113
  98. package/addons/render/elements/front/items/self/form/toggle/toggle.css +239 -39
  99. package/addons/render/elements/front/items/self/form/toggle/toggle.js +32 -17
  100. package/addons/render/elements/front/items/self/form/transfer/transfer.css +377 -0
  101. package/addons/render/elements/front/items/self/form/transfer/transfer.js +453 -0
  102. package/addons/render/elements/front/items/self/form/upload/upload.css +408 -0
  103. package/addons/render/elements/front/items/self/form/upload/upload.js +469 -0
  104. package/addons/render/elements/front/items/self/global/accordion/accordion.css +377 -0
  105. package/addons/render/elements/front/items/self/global/accordion/accordion.js +135 -0
  106. package/addons/render/elements/front/items/self/global/code/code.css +207 -44
  107. package/addons/render/elements/front/items/self/global/code/code.js +327 -19
  108. package/addons/render/elements/front/items/self/global/gallery/gallery.css +521 -0
  109. package/addons/render/elements/front/items/self/global/gallery/gallery.js +291 -0
  110. package/addons/render/elements/front/items/self/global/heading/heading.css +151 -49
  111. package/addons/render/elements/front/items/self/global/heading/heading.js +30 -15
  112. package/addons/render/elements/front/items/self/global/markdown/markdown.css +284 -135
  113. package/addons/render/elements/front/items/self/global/markdown/markdown.js +35 -5
  114. package/addons/render/elements/front/items/self/global/menu/menu.css +311 -56
  115. package/addons/render/elements/front/items/self/global/menu/menu.js +95 -47
  116. package/addons/render/elements/front/items/self/global/notice/notice.css +263 -23
  117. package/addons/render/elements/front/items/self/global/notice/notice.js +51 -11
  118. package/addons/render/elements/front/items/self/global/parameters/parameters.css +276 -33
  119. package/addons/render/elements/front/items/self/global/parameters/parameters.js +86 -16
  120. package/addons/render/elements/front/items/self/global/tags/tags.css +215 -29
  121. package/addons/render/elements/front/items/self/global/tags/tags.js +91 -17
  122. package/addons/render/elements/front/items/self/navigation/dock/dock.css +221 -0
  123. package/addons/render/elements/front/items/self/navigation/dock/dock.js +134 -0
  124. package/addons/render/elements/front/items/self/navigation/footer/footer.css +356 -0
  125. package/addons/render/elements/front/items/self/navigation/footer/footer.js +219 -0
  126. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +736 -76
  127. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +437 -29
  128. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +327 -196
  129. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +115 -62
  130. package/addons/render/elements/front/items/self/navigation/steps/steps.css +345 -0
  131. package/addons/render/elements/front/items/self/navigation/steps/steps.js +113 -0
  132. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +362 -33
  133. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +62 -19
  134. package/addons/render/elements/front/items/self/status/code/code.css +83 -12
  135. package/addons/render/elements/front/items/self/status/code/code.js +15 -4
  136. package/addons/render/elements/front/items/self/status/empty/empty.css +95 -15
  137. package/addons/render/elements/front/items/self/status/empty/empty.js +17 -12
  138. package/addons/render/elements/front/items/self/status/error/error.css +99 -14
  139. package/addons/render/elements/front/items/self/status/error/error.js +21 -11
  140. package/addons/render/elements/front/items/self/status/loading/loading.css +85 -14
  141. package/addons/render/elements/front/items/self/status/loading/loading.js +5 -6
  142. package/addons/render/elements/front/styles/types.css +363 -0
  143. package/instructions.txt +28 -0
  144. package/lib/load.js +1 -0
  145. package/lib/styles/reset.css +89 -76
  146. package/package.json +1 -1
  147. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.css +0 -410
  148. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.js +0 -191
  149. package/addons/render/elements/front/items/self/global/faq/faq.css +0 -98
  150. package/addons/render/elements/front/items/self/global/faq/faq.js +0 -56
@@ -1,123 +1,331 @@
1
- /* Root */
2
-
3
- .e-162fca34
4
- {
5
- display: flex;
6
- width: 100%;
7
- }
8
-
9
- /* Holder */
10
-
11
- .e-162fca34 > .holder
12
- {
13
- position: relative;
14
- display: flex;
15
- align-items: center;
16
- width: 100%;
17
- }
18
-
19
- /* Track */
20
-
21
- .e-162fca34 > .holder > .track
22
- {
23
- position: absolute;
24
- left: 0;
25
- right: 0;
26
- height: 6px;
27
- background: var(--ot-bg-3);
28
- border-radius: var(--ot-radius-s);
29
- pointer-events: none;
30
- }
31
-
32
- .e-162fca34 > .holder > .track > .fill
33
- {
34
- height: 100%;
35
- border-radius: var(--ot-radius-s);
36
- transition: width 0.15s ease-out;
37
- }
38
-
39
- /* Input */
40
-
41
- .e-162fca34 > .holder > input
42
- {
43
- position: relative;
44
- width: 100%;
45
- -webkit-appearance: none;
46
- appearance: none;
47
- background: transparent;
48
- cursor: pointer;
49
- z-index: 1;
50
- }
51
-
52
- .e-162fca34 > .holder > input::-webkit-slider-thumb
53
- {
54
- -webkit-appearance: none;
55
- appearance: none;
56
- border: 2px solid var(--ot-bg-1);
57
- border-radius: 50%;
58
- cursor: pointer;
59
- transition: transform 0.15s ease;
60
- }
61
-
62
- .e-162fca34 > .holder > input::-webkit-slider-thumb:hover
63
- {
64
- transform: scale(1.1);
65
- }
66
-
67
- .e-162fca34 > .holder > input::-moz-range-thumb
68
- {
69
- border: 2px solid var(--ot-bg-1);
70
- border-radius: 50%;
71
- cursor: pointer;
72
- transition: transform 0.15s ease;
73
- }
74
-
75
- .e-162fca34 > .holder > input::-moz-range-thumb:hover
76
- {
77
- transform: scale(1.1);
78
- }
79
-
80
- .e-162fca34 > .holder > input:disabled
81
- {
82
- opacity: 0.5;
83
- cursor: not-allowed;
84
- }
85
-
86
- /* Color variants */
87
-
88
- .e-162fca34 > .holder.brand > .track > .fill { background: var(--ot-brand); }
89
- .e-162fca34 > .holder.brand > input::-webkit-slider-thumb { background: var(--ot-brand); }
90
- .e-162fca34 > .holder.brand > input::-moz-range-thumb { background: var(--ot-brand); }
91
-
92
- .e-162fca34 > .holder.blue > .track > .fill { background: var(--ot-blue); }
93
- .e-162fca34 > .holder.blue > input::-webkit-slider-thumb { background: var(--ot-blue); }
94
- .e-162fca34 > .holder.blue > input::-moz-range-thumb { background: var(--ot-blue); }
95
-
96
- .e-162fca34 > .holder.red > .track > .fill { background: var(--ot-red); }
97
- .e-162fca34 > .holder.red > input::-webkit-slider-thumb { background: var(--ot-red); }
98
- .e-162fca34 > .holder.red > input::-moz-range-thumb { background: var(--ot-red); }
99
-
100
- .e-162fca34 > .holder.orange > .track > .fill { background: var(--ot-orange); }
101
- .e-162fca34 > .holder.orange > input::-webkit-slider-thumb { background: var(--ot-orange); }
102
- .e-162fca34 > .holder.orange > input::-moz-range-thumb { background: var(--ot-orange); }
103
-
104
- .e-162fca34 > .holder.green > .track > .fill { background: var(--ot-green); }
105
- .e-162fca34 > .holder.green > input::-webkit-slider-thumb { background: var(--ot-green); }
106
- .e-162fca34 > .holder.green > input::-moz-range-thumb { background: var(--ot-green); }
107
-
108
- /* Size variants */
109
-
110
- .e-162fca34 > .holder.size-s > .track { height: 4px; }
111
- .e-162fca34 > .holder.size-s > input { height: 16px; }
112
- .e-162fca34 > .holder.size-s > input::-webkit-slider-thumb { width: 14px; height: 14px; }
113
- .e-162fca34 > .holder.size-s > input::-moz-range-thumb { width: 14px; height: 14px; }
114
-
115
- .e-162fca34 > .holder.size-m > .track { height: 6px; }
116
- .e-162fca34 > .holder.size-m > input { height: 20px; }
117
- .e-162fca34 > .holder.size-m > input::-webkit-slider-thumb { width: 18px; height: 18px; }
118
- .e-162fca34 > .holder.size-m > input::-moz-range-thumb { width: 18px; height: 18px; }
119
-
120
- .e-162fca34 > .holder.size-l > .track { height: 8px; }
121
- .e-162fca34 > .holder.size-l > input { height: 24px; }
122
- .e-162fca34 > .holder.size-l > input::-webkit-slider-thumb { width: 22px; height: 22px; }
123
- .e-162fca34 > .holder.size-l > input::-moz-range-thumb { width: 22px; height: 22px; }
1
+ /* Root */
2
+
3
+ .e-162fca34
4
+ {
5
+ display: flex;
6
+ width: 100%;
7
+ }
8
+
9
+ /* Holder */
10
+
11
+ .e-162fca34 > .holder
12
+ {
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: var(--ot-spacing-s);
16
+ width: 100%;
17
+ font-family: var(--ot-font-primary);
18
+ }
19
+
20
+ /* Head (label + description + value) */
21
+
22
+ .e-162fca34 > .holder > .head
23
+ {
24
+ display: flex;
25
+ align-items: flex-start;
26
+ justify-content: space-between;
27
+ gap: var(--ot-spacing-m);
28
+ }
29
+
30
+ .e-162fca34 > .holder > .head > .info
31
+ {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 2px;
35
+ min-width: 0;
36
+ flex: 1;
37
+ }
38
+
39
+ .e-162fca34 > .holder > .head > .info > .label
40
+ {
41
+ font-size: var(--ot-size-m);
42
+ font-weight: 500;
43
+ color: var(--ot-text-1);
44
+ line-height: 1.3;
45
+ }
46
+
47
+ .e-162fca34 > .holder > .head > .info > .description
48
+ {
49
+ font-size: var(--ot-size-s);
50
+ color: var(--ot-text-3);
51
+ line-height: 1.4;
52
+ }
53
+
54
+ .e-162fca34 > .holder > .head > .value
55
+ {
56
+ font-size: var(--ot-size-m);
57
+ font-weight: 600;
58
+ color: var(--ot-text-1);
59
+ font-variant-numeric: tabular-nums;
60
+ padding: 2px var(--ot-spacing-s);
61
+ background: var(--ot-bg-2);
62
+ border: 1px solid var(--ot-bg-2-border);
63
+ border-radius: var(--ot-radius-s);
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ /* Control (track + input) */
68
+
69
+ .e-162fca34 > .holder > .control
70
+ {
71
+ position: relative;
72
+ display: flex;
73
+ align-items: center;
74
+ width: 100%;
75
+ }
76
+
77
+ /* Track */
78
+
79
+ .e-162fca34 > .holder > .control > .track
80
+ {
81
+ position: absolute;
82
+ left: 0;
83
+ right: 0;
84
+ height: 6px;
85
+ background: var(--ot-bg-3);
86
+ border-radius: var(--ot-radius-s);
87
+ pointer-events: none;
88
+ overflow: hidden;
89
+ }
90
+
91
+ .e-162fca34 > .holder > .control > .track > .fill
92
+ {
93
+ height: 100%;
94
+ background: var(--ot-brand);
95
+ border-radius: var(--ot-radius-s);
96
+ transition: width 0.15s cubic-bezier(0.22, 1, 0.36, 1);
97
+ }
98
+
99
+ /* Marks */
100
+
101
+ .e-162fca34 > .holder > .control > .track > .marks
102
+ {
103
+ position: absolute;
104
+ top: 0;
105
+ left: 0;
106
+ right: 0;
107
+ height: 100%;
108
+ pointer-events: none;
109
+ }
110
+
111
+ .e-162fca34 > .holder > .control > .track > .marks > .mark
112
+ {
113
+ position: absolute;
114
+ top: 50%;
115
+ width: 2px;
116
+ height: 2px;
117
+ border-radius: 50%;
118
+ background: var(--ot-bg-1);
119
+ transform: translate(-50%, -50%);
120
+ transition: background 0.2s cubic-bezier(0.22, 1, 0.36, 1);
121
+ }
122
+
123
+ .e-162fca34 > .holder > .control > .track > .marks > .mark.active
124
+ {
125
+ background: rgba(255, 255, 255, 0.5);
126
+ }
127
+
128
+ /* Native input (range) */
129
+
130
+ .e-162fca34 > .holder > .control > input
131
+ {
132
+ position: relative;
133
+ width: 100%;
134
+ margin: 0;
135
+ padding: 0;
136
+ background: transparent;
137
+ -webkit-appearance: none;
138
+ appearance: none;
139
+ cursor: pointer;
140
+ z-index: 1;
141
+ }
142
+
143
+ .e-162fca34 > .holder > .control > input:focus
144
+ {
145
+ outline: none;
146
+ }
147
+
148
+ /* Thumb — WebKit */
149
+
150
+ .e-162fca34 > .holder > .control > input::-webkit-slider-thumb
151
+ {
152
+ -webkit-appearance: none;
153
+ appearance: none;
154
+ background: white;
155
+ border: none;
156
+ border-radius: 50%;
157
+ cursor: pointer;
158
+ box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 1px 2px rgba(20, 20, 30, 0.08), 0 0 0 1px rgba(20, 20, 30, 0.08);
159
+ transition: transform 0.2s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.2s cubic-bezier(0.22, 1, 0.36, 1);
160
+ }
161
+
162
+ .e-162fca34 > .holder > .control > input::-webkit-slider-thumb:hover
163
+ {
164
+ transform: scale(1.1);
165
+ }
166
+
167
+ .e-162fca34 > .holder > .control > input:active::-webkit-slider-thumb
168
+ {
169
+ transform: scale(1.05);
170
+ box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-brand-opacity);
171
+ }
172
+
173
+ .e-162fca34 > .holder > .control > input:focus-visible::-webkit-slider-thumb
174
+ {
175
+ box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-brand-opacity);
176
+ }
177
+
178
+ /* Thumb — Firefox */
179
+
180
+ .e-162fca34 > .holder > .control > input::-moz-range-thumb
181
+ {
182
+ background: white;
183
+ border: none;
184
+ border-radius: 50%;
185
+ cursor: pointer;
186
+ box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 1px 2px rgba(20, 20, 30, 0.08), 0 0 0 1px rgba(20, 20, 30, 0.08);
187
+ transition: transform 0.2s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.2s cubic-bezier(0.22, 1, 0.36, 1);
188
+ }
189
+
190
+ .e-162fca34 > .holder > .control > input::-moz-range-thumb:hover
191
+ {
192
+ transform: scale(1.1);
193
+ }
194
+
195
+ .e-162fca34 > .holder > .control > input:active::-moz-range-thumb
196
+ {
197
+ transform: scale(1.05);
198
+ box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-brand-opacity);
199
+ }
200
+
201
+ /* Range labels */
202
+
203
+ .e-162fca34 > .holder > .range
204
+ {
205
+ display: flex;
206
+ justify-content: space-between;
207
+ font-size: var(--ot-size-s);
208
+ color: var(--ot-text-3);
209
+ font-variant-numeric: tabular-nums;
210
+ }
211
+
212
+ /* Disabled */
213
+
214
+ .e-162fca34 > .holder.disabled
215
+ {
216
+ opacity: 0.5;
217
+ pointer-events: none;
218
+ }
219
+
220
+ .e-162fca34 > .holder.disabled .label,
221
+ .e-162fca34 > .holder.disabled .description,
222
+ .e-162fca34 > .holder.disabled .value
223
+ {
224
+ color: var(--ot-text-3);
225
+ }
226
+
227
+ /* ===== COLOR VARIANTS ===== */
228
+
229
+ .e-162fca34 > .holder.brand > .control > .track > .fill { background: var(--ot-brand); }
230
+ .e-162fca34 > .holder.brand > .control > input:active::-webkit-slider-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-brand-opacity); }
231
+ .e-162fca34 > .holder.brand > .control > input:active::-moz-range-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-brand-opacity); }
232
+ .e-162fca34 > .holder.brand > .control > input:focus-visible::-webkit-slider-thumb { box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-brand-opacity); }
233
+
234
+ .e-162fca34 > .holder.blue > .control > .track > .fill { background: var(--ot-blue); }
235
+ .e-162fca34 > .holder.blue > .control > input:active::-webkit-slider-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-blue-opacity); }
236
+ .e-162fca34 > .holder.blue > .control > input:active::-moz-range-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-blue-opacity); }
237
+ .e-162fca34 > .holder.blue > .control > input:focus-visible::-webkit-slider-thumb { box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-blue-opacity); }
238
+
239
+ .e-162fca34 > .holder.red > .control > .track > .fill { background: var(--ot-red); }
240
+ .e-162fca34 > .holder.red > .control > input:active::-webkit-slider-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-red-opacity); }
241
+ .e-162fca34 > .holder.red > .control > input:active::-moz-range-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-red-opacity); }
242
+ .e-162fca34 > .holder.red > .control > input:focus-visible::-webkit-slider-thumb { box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-red-opacity); }
243
+
244
+ .e-162fca34 > .holder.orange > .control > .track > .fill { background: var(--ot-orange); }
245
+ .e-162fca34 > .holder.orange > .control > input:active::-webkit-slider-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-orange-opacity); }
246
+ .e-162fca34 > .holder.orange > .control > input:active::-moz-range-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-orange-opacity); }
247
+ .e-162fca34 > .holder.orange > .control > input:focus-visible::-webkit-slider-thumb { box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-orange-opacity); }
248
+
249
+ .e-162fca34 > .holder.green > .control > .track > .fill { background: var(--ot-green); }
250
+ .e-162fca34 > .holder.green > .control > input:active::-webkit-slider-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-green-opacity); }
251
+ .e-162fca34 > .holder.green > .control > input:active::-moz-range-thumb { box-shadow: 0 2px 6px rgba(20, 20, 30, 0.2), 0 0 0 8px var(--ot-green-opacity); }
252
+ .e-162fca34 > .holder.green > .control > input:focus-visible::-webkit-slider-thumb { box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 0 0 4px var(--ot-green-opacity); }
253
+
254
+ /* ===== SIZE VARIANTS ===== */
255
+
256
+ .e-162fca34 > .holder.size-s > .control > .track
257
+ {
258
+ height: 4px;
259
+ }
260
+ .e-162fca34 > .holder.size-s > .control > input
261
+ {
262
+ height: 14px;
263
+ }
264
+ .e-162fca34 > .holder.size-s > .control > input::-webkit-slider-thumb
265
+ {
266
+ width: 14px;
267
+ height: 14px;
268
+ }
269
+ .e-162fca34 > .holder.size-s > .control > input::-moz-range-thumb
270
+ {
271
+ width: 14px;
272
+ height: 14px;
273
+ }
274
+ .e-162fca34 > .holder.size-s > .head > .info > .label
275
+ {
276
+ font-size: var(--ot-size-s);
277
+ }
278
+ .e-162fca34 > .holder.size-s > .head > .value
279
+ {
280
+ font-size: var(--ot-size-s);
281
+ }
282
+ .e-162fca34 > .holder.size-s > .range
283
+ {
284
+ font-size: 10.5px;
285
+ }
286
+
287
+ .e-162fca34 > .holder.size-m > .control > .track
288
+ {
289
+ height: 6px;
290
+ }
291
+ .e-162fca34 > .holder.size-m > .control > input
292
+ {
293
+ height: 18px;
294
+ }
295
+ .e-162fca34 > .holder.size-m > .control > input::-webkit-slider-thumb
296
+ {
297
+ width: 18px;
298
+ height: 18px;
299
+ }
300
+ .e-162fca34 > .holder.size-m > .control > input::-moz-range-thumb
301
+ {
302
+ width: 18px;
303
+ height: 18px;
304
+ }
305
+
306
+ .e-162fca34 > .holder.size-l > .control > .track
307
+ {
308
+ height: 8px;
309
+ }
310
+ .e-162fca34 > .holder.size-l > .control > input
311
+ {
312
+ height: 22px;
313
+ }
314
+ .e-162fca34 > .holder.size-l > .control > input::-webkit-slider-thumb
315
+ {
316
+ width: 22px;
317
+ height: 22px;
318
+ }
319
+ .e-162fca34 > .holder.size-l > .control > input::-moz-range-thumb
320
+ {
321
+ width: 22px;
322
+ height: 22px;
323
+ }
324
+ .e-162fca34 > .holder.size-l > .head > .info > .label
325
+ {
326
+ font-size: var(--ot-size-m);
327
+ }
328
+ .e-162fca34 > .holder.size-l > .head > .value
329
+ {
330
+ font-size: 15px;
331
+ }
@@ -4,13 +4,22 @@ onetype.AddonReady('elements', (elements) =>
4
4
  id: 'form-slider',
5
5
  icon: 'linear_scale',
6
6
  name: 'Slider',
7
- description: 'Range slider for selecting numeric values.',
7
+ description: 'Premium range slider with label, value display, marks, tooltip and color variants.',
8
8
  category: 'Form',
9
9
  author: 'OneType',
10
10
  config: {
11
+ label: {
12
+ type: 'string'
13
+ },
14
+ description: {
15
+ type: 'string'
16
+ },
17
+ name: {
18
+ type: 'string'
19
+ },
11
20
  value: {
12
21
  type: 'number',
13
- value: 50
22
+ value: 0
14
23
  },
15
24
  min: {
16
25
  type: 'number',
@@ -22,11 +31,25 @@ onetype.AddonReady('elements', (elements) =>
22
31
  },
23
32
  step: {
24
33
  type: 'number',
25
- value: 10
34
+ value: 1
35
+ },
36
+ showValue: {
37
+ type: 'boolean'
38
+ },
39
+ showRange: {
40
+ type: 'boolean'
41
+ },
42
+ marks: {
43
+ type: 'boolean'
44
+ },
45
+ prefix: {
46
+ type: 'string'
47
+ },
48
+ suffix: {
49
+ type: 'string'
26
50
  },
27
51
  disabled: {
28
- type: 'boolean',
29
- value: false
52
+ type: 'boolean'
30
53
  },
31
54
  variant: {
32
55
  type: 'array',
@@ -42,11 +65,70 @@ onetype.AddonReady('elements', (elements) =>
42
65
  },
43
66
  render: function()
44
67
  {
68
+ this.hasInfo = !!this.label || !!this.description;
69
+ this.hasMeta = this.showValue || this.showRange;
70
+
71
+ this.format = (value) =>
72
+ {
73
+ return (this.prefix || '') + value + (this.suffix || '');
74
+ };
75
+
76
+ this.percentage = () =>
77
+ {
78
+ if(this.max === this.min)
79
+ {
80
+ return 0;
81
+ }
82
+
83
+ return ((this.value - this.min) / (this.max - this.min)) * 100;
84
+ };
85
+
86
+ this.computeMarks = () =>
87
+ {
88
+ if(!this.marks || !this.step || this.step <= 0)
89
+ {
90
+ return [];
91
+ }
92
+
93
+ const range = this.max - this.min;
94
+ const count = Math.floor(range / this.step);
95
+
96
+ if(count > 20)
97
+ {
98
+ return [];
99
+ }
100
+
101
+ const result = [];
102
+
103
+ for(let i = 0; i <= count; i++)
104
+ {
105
+ const value = this.min + i * this.step;
106
+ const percent = (i / count) * 100;
107
+
108
+ result.push({ value, percent });
109
+ }
110
+
111
+ return result;
112
+ };
113
+
114
+ this.marksList = this.computeMarks();
115
+ this.hasMarks = this.marksList.length > 0;
116
+
117
+ this.OnReady(() =>
118
+ {
119
+ const input = this.Element?.querySelector('input[type="range"]');
120
+
121
+ if(input)
122
+ {
123
+ input.value = this.value;
124
+ }
125
+ });
126
+
45
127
  this.handle = ({ event }) =>
46
128
  {
47
129
  this.value = parseFloat(event.target.value);
48
130
 
49
- if (this._input)
131
+ if(this._input)
50
132
  {
51
133
  this._input({ event, value: this.value });
52
134
  }
@@ -56,32 +138,48 @@ onetype.AddonReady('elements', (elements) =>
56
138
  {
57
139
  this.value = parseFloat(event.target.value);
58
140
 
59
- if (this._change)
141
+ if(this._change)
60
142
  {
61
143
  this._change({ event, value: this.value });
62
144
  }
63
145
  };
64
146
 
65
- this.percentage = () =>
66
- {
67
- return ((this.value - this.min) / (this.max - this.min)) * 100;
68
- };
69
-
70
- return `
71
- <div :class="'holder ' + variant.join(' ')">
72
- <div class="track">
73
- <div class="fill" :style="'width: ' + percentage() + '%'"></div>
147
+ return /* html */ `
148
+ <div :class="'holder ' + variant.join(' ') + (disabled ? ' disabled' : '')">
149
+ <div ot-if="hasInfo || showValue" class="head">
150
+ <div ot-if="hasInfo" class="info">
151
+ <span ot-if="label" class="label">{{ label }}</span>
152
+ <span ot-if="description" class="description">{{ description }}</span>
153
+ </div>
154
+ <span ot-if="showValue" class="value">{{ format(value) }}</span>
155
+ </div>
156
+ <div class="control">
157
+ <div class="track">
158
+ <div class="fill" :style="'width: ' + percentage() + '%'"></div>
159
+ <div ot-if="hasMarks" class="marks">
160
+ <span
161
+ ot-for="mark in marksList"
162
+ :class="'mark' + (mark.value <= value ? ' active' : '')"
163
+ :style="'left: ' + mark.percent + '%'"
164
+ ></span>
165
+ </div>
166
+ </div>
167
+ <input
168
+ type="range"
169
+ :value="value"
170
+ :name="name"
171
+ :min="min"
172
+ :max="max"
173
+ :step="step"
174
+ :disabled="disabled"
175
+ ot-input="handle"
176
+ ot-change="commit"
177
+ />
178
+ </div>
179
+ <div ot-if="showRange" class="range">
180
+ <span class="range-min">{{ format(min) }}</span>
181
+ <span class="range-max">{{ format(max) }}</span>
74
182
  </div>
75
- <input
76
- type="range"
77
- :value="value"
78
- :min="min"
79
- :max="max"
80
- :step="step"
81
- :disabled="disabled"
82
- ot-input="handle"
83
- ot-change="commit"
84
- />
85
183
  </div>
86
184
  `;
87
185
  }