@onetype/framework 2.0.53 → 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 (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 +507 -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,113 +1,172 @@
1
- onetype.AddonReady('elements', (elements) =>
2
- {
3
- elements.ItemAdd({
4
- id: 'form-textarea',
5
- icon: 'notes',
6
- name: 'Textarea',
7
- description: 'Multi-line text input with variant support.',
8
- category: 'Form',
9
- author: 'OneType',
10
- config: {
11
- value: {
12
- type: 'string',
13
- value: ''
14
- },
15
- name: {
16
- type: 'string',
17
- value: ''
18
- },
19
- placeholder: {
20
- type: 'string',
21
- value: ''
22
- },
23
- rows: {
24
- type: 'number',
25
- value: 4
26
- },
27
- maxlength: {
28
- type: 'number'
29
- },
30
- disabled: {
31
- type: 'boolean',
32
- value: false
33
- },
34
- readonly: {
35
- type: 'boolean',
36
- value: false
37
- },
38
- variant: {
39
- type: 'array',
40
- value: ['bg-2', 'border', 'size-m'],
41
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'transparent', 'border', 'size-s', 'size-m', 'size-l']
42
- },
43
- _input: {
44
- type: 'function'
45
- },
46
- _change: {
47
- type: 'function'
48
- },
49
- _focus: {
50
- type: 'function'
51
- },
52
- _blur: {
53
- type: 'function'
54
- }
55
- },
56
- render: function()
57
- {
58
- this.input = ({ event, value }) =>
59
- {
60
- this.value = value;
61
-
62
- if (this._input)
63
- {
64
- this._input({ event, value });
65
- }
66
- };
67
-
68
- this.change = ({ event, value }) =>
69
- {
70
- this.value = value;
71
-
72
- if (this._change)
73
- {
74
- this._change({ event, value });
75
- }
76
- };
77
-
78
- this.focus = ({ event, value }) =>
79
- {
80
- if (this._focus)
81
- {
82
- this._focus({ event, value });
83
- }
84
- };
85
-
86
- this.blur = ({ event, value }) =>
87
- {
88
- if (this._blur)
89
- {
90
- this._blur({ event, value });
91
- }
92
- };
93
-
94
- return `
95
- <div :class="'holder ' + variant.join(' ')">
96
- <textarea
97
- :placeholder="placeholder"
98
- :name="name"
99
- :rows="rows"
100
- :maxlength="maxlength"
101
- :disabled="disabled"
102
- :readonly="readonly"
103
- autocomplete="off"
104
- ot-input="input"
105
- ot-change="change"
106
- ot-focus="focus"
107
- ot-blur="blur"
108
- >{{ value }}</textarea>
109
- </div>
110
- `;
111
- }
112
- });
113
- });
1
+ onetype.AddonReady('elements', (elements) =>
2
+ {
3
+ elements.ItemAdd({
4
+ id: 'form-textarea',
5
+ icon: 'notes',
6
+ name: 'Textarea',
7
+ description: 'Premium multi-line text input with auto-resize, character counter and focus ring.',
8
+ category: 'Form',
9
+ author: 'OneType',
10
+ config: {
11
+ value: {
12
+ type: 'string'
13
+ },
14
+ name: {
15
+ type: 'string'
16
+ },
17
+ placeholder: {
18
+ type: 'string'
19
+ },
20
+ rows: {
21
+ type: 'number',
22
+ value: 4
23
+ },
24
+ minRows: {
25
+ type: 'number'
26
+ },
27
+ maxRows: {
28
+ type: 'number'
29
+ },
30
+ maxlength: {
31
+ type: 'number'
32
+ },
33
+ autoResize: {
34
+ type: 'boolean'
35
+ },
36
+ counter: {
37
+ type: 'boolean'
38
+ },
39
+ resize: {
40
+ type: 'string',
41
+ value: 'vertical',
42
+ options: ['none', 'vertical', 'horizontal', 'both']
43
+ },
44
+ disabled: {
45
+ type: 'boolean'
46
+ },
47
+ readonly: {
48
+ type: 'boolean'
49
+ },
50
+ variant: {
51
+ type: 'array',
52
+ value: ['bg-2', 'border', 'size-m'],
53
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'transparent', 'border', 'size-s', 'size-m', 'size-l']
54
+ },
55
+ _input: {
56
+ type: 'function'
57
+ },
58
+ _change: {
59
+ type: 'function'
60
+ },
61
+ _focus: {
62
+ type: 'function'
63
+ },
64
+ _blur: {
65
+ type: 'function'
66
+ }
67
+ },
68
+ render: function()
69
+ {
70
+ this.length = (this.value || '').length;
71
+ this.showCounter = this.counter && this.maxlength > 0;
72
+
73
+ this.resizeTextarea = () =>
74
+ {
75
+ if(!this.autoResize)
76
+ {
77
+ return;
78
+ }
79
+
80
+ const textarea = this.Element?.querySelector('textarea');
81
+
82
+ if(!textarea)
83
+ {
84
+ return;
85
+ }
86
+
87
+ textarea.style.height = 'auto';
88
+
89
+ const minRows = this.minRows || this.rows || 2;
90
+ const maxRows = this.maxRows || 0;
91
+ const lineHeight = parseFloat(getComputedStyle(textarea).lineHeight) || 22;
92
+
93
+ const minHeight = minRows * lineHeight;
94
+ const maxHeight = maxRows ? maxRows * lineHeight : Infinity;
95
+ const scrollHeight = textarea.scrollHeight;
96
+
97
+ const next = Math.max(minHeight, Math.min(scrollHeight, maxHeight));
98
+
99
+ textarea.style.height = next + 'px';
100
+ textarea.style.overflowY = scrollHeight > maxHeight ? 'auto' : 'hidden';
101
+ };
102
+
103
+ this.OnReady(() =>
104
+ {
105
+ this.resizeTextarea();
106
+ });
107
+
108
+ this.input = ({ event, value }) =>
109
+ {
110
+ this.value = value;
111
+ this.length = value.length;
112
+ this.resizeTextarea();
113
+
114
+ if(this._input)
115
+ {
116
+ this._input({ event, value });
117
+ }
118
+ };
119
+
120
+ this.change = ({ event, value }) =>
121
+ {
122
+ this.value = value;
123
+ this.length = value.length;
124
+
125
+ if(this._change)
126
+ {
127
+ this._change({ event, value });
128
+ }
129
+ };
130
+
131
+ this.focus = ({ event, value }) =>
132
+ {
133
+ if(this._focus)
134
+ {
135
+ this._focus({ event, value });
136
+ }
137
+ };
138
+
139
+ this.blur = ({ event, value }) =>
140
+ {
141
+ if(this._blur)
142
+ {
143
+ this._blur({ event, value });
144
+ }
145
+ };
146
+
147
+ return /* html */ `
148
+ <div :class="'holder ' + variant.join(' ') + (disabled ? ' disabled' : '')">
149
+ <textarea
150
+ :placeholder="placeholder"
151
+ :name="name"
152
+ :rows="rows"
153
+ :maxlength="maxlength"
154
+ :disabled="disabled"
155
+ :readonly="readonly"
156
+ :style="'resize: ' + (autoResize ? 'none' : resize)"
157
+ autocomplete="off"
158
+ ot-input="input"
159
+ ot-change="change"
160
+ ot-focus="focus"
161
+ ot-blur="blur"
162
+ >{{ value }}</textarea>
163
+ <div ot-if="showCounter" class="counter">
164
+ <span :class="length >= maxlength ? 'full' : ''">{{ length }}</span>
165
+ <span class="slash">/</span>
166
+ <span>{{ maxlength }}</span>
167
+ </div>
168
+ </div>
169
+ `;
170
+ }
171
+ });
172
+ });
@@ -2,27 +2,28 @@
2
2
 
3
3
  .e-180e0ca7
4
4
  {
5
- display: flex;
5
+ display: inline-flex;
6
6
  }
7
7
 
8
8
  /* Holder */
9
9
 
10
10
  .e-180e0ca7 > .holder
11
11
  {
12
+ position: relative;
12
13
  display: inline-flex;
13
- align-items: center;
14
+ align-items: flex-start;
14
15
  gap: var(--ot-spacing-s);
15
16
  cursor: pointer;
16
17
  user-select: none;
18
+ font-family: var(--ot-font-primary);
17
19
  }
18
20
 
19
- .e-180e0ca7 > .holder.disabled
21
+ .e-180e0ca7 > .holder.reverse
20
22
  {
21
- opacity: 0.5;
22
- cursor: not-allowed;
23
+ flex-direction: row-reverse;
23
24
  }
24
25
 
25
- /* Input */
26
+ /* Hidden input */
26
27
 
27
28
  .e-180e0ca7 > .holder > input
28
29
  {
@@ -30,6 +31,7 @@
30
31
  opacity: 0;
31
32
  width: 0;
32
33
  height: 0;
34
+ margin: 0;
33
35
  }
34
36
 
35
37
  /* Track */
@@ -37,10 +39,12 @@
37
39
  .e-180e0ca7 > .holder > .track
38
40
  {
39
41
  position: relative;
40
- display: flex;
42
+ display: inline-flex;
41
43
  align-items: center;
44
+ flex-shrink: 0;
42
45
  border-radius: 100px;
43
- transition: background 0.15s ease;
46
+ background: var(--ot-bg-3);
47
+ transition: background 0.25s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.2s cubic-bezier(0.22, 1, 0.36, 1);
44
48
  }
45
49
 
46
50
  /* Thumb */
@@ -48,58 +52,254 @@
48
52
  .e-180e0ca7 > .holder > .track > .thumb
49
53
  {
50
54
  position: absolute;
55
+ top: 50%;
51
56
  border-radius: 50%;
52
- background: var(--ot-text-2);
53
- transition: transform 0.15s ease, background 0.15s ease;
57
+ background: white;
58
+ box-shadow: 0 1px 3px rgba(20, 20, 30, 0.16), 0 1px 2px rgba(20, 20, 30, 0.08);
59
+ transform: translateY(-50%);
60
+ transition: transform 0.25s cubic-bezier(0.22, 1, 0.36, 1), background 0.25s cubic-bezier(0.22, 1, 0.36, 1);
54
61
  }
55
62
 
56
- /* Active */
63
+ /* Active — track becomes solid brand */
57
64
 
58
- .e-180e0ca7 > .holder.active > .track > .thumb
65
+ .e-180e0ca7 > .holder.active > .track
59
66
  {
60
67
  background: var(--ot-brand);
61
68
  }
62
69
 
63
- /* Label */
70
+ /* Active press feedback — thumb squish */
64
71
 
65
- .e-180e0ca7 > .holder > .label
72
+ .e-180e0ca7 > .holder:active:not(.disabled) > .track > .thumb
73
+ {
74
+ transform: translateY(-50%) scaleX(1.1);
75
+ }
76
+
77
+ /* Focus ring */
78
+
79
+ .e-180e0ca7 > .holder > input:focus-visible ~ .track
80
+ {
81
+ box-shadow: 0 0 0 3px var(--ot-brand-opacity);
82
+ }
83
+
84
+ /* Info block (label + description) */
85
+
86
+ .e-180e0ca7 > .holder > .info
87
+ {
88
+ display: inline-flex;
89
+ flex-direction: column;
90
+ gap: 2px;
91
+ min-width: 0;
92
+ padding-top: 1px;
93
+ }
94
+
95
+ .e-180e0ca7 > .holder > .info > .label
66
96
  {
67
97
  font-size: var(--ot-size-m);
98
+ font-weight: 500;
68
99
  color: var(--ot-text-1);
100
+ line-height: 1.3;
101
+ transition: color 0.2s cubic-bezier(0.22, 1, 0.36, 1);
102
+ }
103
+
104
+ .e-180e0ca7 > .holder > .info > .description
105
+ {
106
+ font-size: var(--ot-size-s);
107
+ color: var(--ot-text-3);
108
+ line-height: 1.4;
109
+ transition: color 0.2s cubic-bezier(0.22, 1, 0.36, 1);
110
+ }
111
+
112
+ /* Disabled */
113
+
114
+ .e-180e0ca7 > .holder.disabled
115
+ {
116
+ cursor: not-allowed;
69
117
  }
70
118
 
71
- /* Background variants */
119
+ .e-180e0ca7 > .holder.disabled > .track
120
+ {
121
+ opacity: 0.45;
122
+ }
123
+
124
+ .e-180e0ca7 > .holder.disabled > .info > .label,
125
+ .e-180e0ca7 > .holder.disabled > .info > .description
126
+ {
127
+ color: var(--ot-text-3);
128
+ opacity: 0.6;
129
+ }
72
130
 
73
- .e-180e0ca7 > .holder.bg-1 > .track { background: var(--ot-bg-1); }
74
- .e-180e0ca7 > .holder.bg-1.active > .track { background: var(--ot-brand-opacity); }
75
- .e-180e0ca7 > .holder.bg-2 > .track { background: var(--ot-bg-2); }
76
- .e-180e0ca7 > .holder.bg-2.active > .track { background: var(--ot-brand-opacity); }
77
- .e-180e0ca7 > .holder.bg-3 > .track { background: var(--ot-bg-3); }
78
- .e-180e0ca7 > .holder.bg-3.active > .track { background: var(--ot-brand-opacity); }
79
- .e-180e0ca7 > .holder.bg-4 > .track { background: var(--ot-bg-4); }
80
- .e-180e0ca7 > .holder.bg-4.active > .track { background: var(--ot-brand-opacity); }
131
+ /* ===== BACKGROUND VARIANTS (off state track bg) ===== */
132
+
133
+ .e-180e0ca7 > .holder.bg-1 > .track { background: var(--ot-bg-1); border: 1px solid var(--ot-bg-1-border); }
134
+ .e-180e0ca7 > .holder.bg-2 > .track { background: var(--ot-bg-2); border: 1px solid var(--ot-bg-2-border); }
135
+ .e-180e0ca7 > .holder.bg-3 > .track { background: var(--ot-bg-3); border: 1px solid var(--ot-bg-3-border); }
136
+ .e-180e0ca7 > .holder.bg-4 > .track { background: var(--ot-bg-4); border: 1px solid var(--ot-bg-4-border); }
137
+
138
+ /* Active state overrides bg variants with brand */
139
+
140
+ .e-180e0ca7 > .holder.bg-1.active > .track,
141
+ .e-180e0ca7 > .holder.bg-2.active > .track,
142
+ .e-180e0ca7 > .holder.bg-3.active > .track,
143
+ .e-180e0ca7 > .holder.bg-4.active > .track
144
+ {
145
+ background: var(--ot-brand);
146
+ border-color: var(--ot-brand);
147
+ }
81
148
 
82
- /* Border */
149
+ /* ===== BORDER MODIFIER ===== */
83
150
 
84
151
  .e-180e0ca7 > .holder.border > .track { border: 1px solid var(--ot-bg-2-border); }
152
+ .e-180e0ca7 > .holder.bg-1.border > .track { border-color: var(--ot-bg-1-border); }
153
+ .e-180e0ca7 > .holder.bg-2.border > .track { border-color: var(--ot-bg-2-border); }
154
+ .e-180e0ca7 > .holder.bg-3.border > .track { border-color: var(--ot-bg-3-border); }
155
+ .e-180e0ca7 > .holder.bg-4.border > .track { border-color: var(--ot-bg-4-border); }
85
156
 
86
- /* Size small */
157
+ /* ===== COLOR VARIANTS (active state) ===== */
87
158
 
88
- .e-180e0ca7 > .holder.size-s > .track { width: 28px; height: 16px; }
89
- .e-180e0ca7 > .holder.size-s > .track > .thumb { width: 12px; height: 12px; left: 2px; }
90
- .e-180e0ca7 > .holder.size-s.active > .track > .thumb { transform: translateX(12px); }
91
- .e-180e0ca7 > .holder.size-s > .label { font-size: var(--ot-size-s); }
159
+ .e-180e0ca7 > .holder.color-blue.active > .track,
160
+ .e-180e0ca7 > .holder.bg-1.color-blue.active > .track,
161
+ .e-180e0ca7 > .holder.bg-2.color-blue.active > .track,
162
+ .e-180e0ca7 > .holder.bg-3.color-blue.active > .track,
163
+ .e-180e0ca7 > .holder.bg-4.color-blue.active > .track
164
+ {
165
+ background: var(--ot-blue);
166
+ border-color: var(--ot-blue);
167
+ }
168
+
169
+ .e-180e0ca7 > .holder.color-red.active > .track,
170
+ .e-180e0ca7 > .holder.bg-1.color-red.active > .track,
171
+ .e-180e0ca7 > .holder.bg-2.color-red.active > .track,
172
+ .e-180e0ca7 > .holder.bg-3.color-red.active > .track,
173
+ .e-180e0ca7 > .holder.bg-4.color-red.active > .track
174
+ {
175
+ background: var(--ot-red);
176
+ border-color: var(--ot-red);
177
+ }
178
+
179
+ .e-180e0ca7 > .holder.color-orange.active > .track,
180
+ .e-180e0ca7 > .holder.bg-1.color-orange.active > .track,
181
+ .e-180e0ca7 > .holder.bg-2.color-orange.active > .track,
182
+ .e-180e0ca7 > .holder.bg-3.color-orange.active > .track,
183
+ .e-180e0ca7 > .holder.bg-4.color-orange.active > .track
184
+ {
185
+ background: var(--ot-orange);
186
+ border-color: var(--ot-orange);
187
+ }
92
188
 
93
- /* Size medium */
189
+ .e-180e0ca7 > .holder.color-green.active > .track,
190
+ .e-180e0ca7 > .holder.bg-1.color-green.active > .track,
191
+ .e-180e0ca7 > .holder.bg-2.color-green.active > .track,
192
+ .e-180e0ca7 > .holder.bg-3.color-green.active > .track,
193
+ .e-180e0ca7 > .holder.bg-4.color-green.active > .track
194
+ {
195
+ background: var(--ot-green);
196
+ border-color: var(--ot-green);
197
+ }
94
198
 
95
- .e-180e0ca7 > .holder.size-m > .track { width: 36px; height: 20px; }
96
- .e-180e0ca7 > .holder.size-m > .track > .thumb { width: 16px; height: 16px; left: 2px; }
97
- .e-180e0ca7 > .holder.size-m.active > .track > .thumb { transform: translateX(16px); }
98
- .e-180e0ca7 > .holder.size-m > .label { font-size: var(--ot-size-m); }
199
+ /* Focus rings per color */
99
200
 
100
- /* Size large */
201
+ .e-180e0ca7 > .holder.color-blue > input:focus-visible ~ .track
202
+ {
203
+ box-shadow: 0 0 0 3px var(--ot-blue-opacity);
204
+ }
101
205
 
102
- .e-180e0ca7 > .holder.size-l > .track { width: 44px; height: 24px; }
103
- .e-180e0ca7 > .holder.size-l > .track > .thumb { width: 20px; height: 20px; left: 2px; }
104
- .e-180e0ca7 > .holder.size-l.active > .track > .thumb { transform: translateX(20px); }
105
- .e-180e0ca7 > .holder.size-l > .label { font-size: var(--ot-size-m); }
206
+ .e-180e0ca7 > .holder.color-red > input:focus-visible ~ .track
207
+ {
208
+ box-shadow: 0 0 0 3px var(--ot-red-opacity);
209
+ }
210
+
211
+ .e-180e0ca7 > .holder.color-orange > input:focus-visible ~ .track
212
+ {
213
+ box-shadow: 0 0 0 3px var(--ot-orange-opacity);
214
+ }
215
+
216
+ .e-180e0ca7 > .holder.color-green > input:focus-visible ~ .track
217
+ {
218
+ box-shadow: 0 0 0 3px var(--ot-green-opacity);
219
+ }
220
+
221
+ /* ===== SIZES ===== */
222
+
223
+ .e-180e0ca7 > .holder.size-s > .track
224
+ {
225
+ width: 28px;
226
+ height: 16px;
227
+ }
228
+ .e-180e0ca7 > .holder.size-s > .track > .thumb
229
+ {
230
+ width: 12px;
231
+ height: 12px;
232
+ left: 2px;
233
+ }
234
+ .e-180e0ca7 > .holder.size-s.active > .track > .thumb
235
+ {
236
+ transform: translate(12px, -50%);
237
+ }
238
+ .e-180e0ca7 > .holder.size-s:active:not(.disabled) > .track > .thumb
239
+ {
240
+ transform: translateY(-50%) scaleX(1.1);
241
+ }
242
+ .e-180e0ca7 > .holder.size-s.active:active:not(.disabled) > .track > .thumb
243
+ {
244
+ transform: translate(10px, -50%) scaleX(1.2);
245
+ }
246
+ .e-180e0ca7 > .holder.size-s > .info > .label
247
+ {
248
+ font-size: var(--ot-size-s);
249
+ }
250
+ .e-180e0ca7 > .holder.size-s > .info > .description
251
+ {
252
+ font-size: 10.5px;
253
+ }
254
+
255
+ .e-180e0ca7 > .holder.size-m > .track
256
+ {
257
+ width: 36px;
258
+ height: 20px;
259
+ }
260
+ .e-180e0ca7 > .holder.size-m > .track > .thumb
261
+ {
262
+ width: 16px;
263
+ height: 16px;
264
+ left: 2px;
265
+ }
266
+ .e-180e0ca7 > .holder.size-m.active > .track > .thumb
267
+ {
268
+ transform: translate(16px, -50%);
269
+ }
270
+ .e-180e0ca7 > .holder.size-m:active:not(.disabled) > .track > .thumb
271
+ {
272
+ transform: translateY(-50%) scaleX(1.15);
273
+ }
274
+ .e-180e0ca7 > .holder.size-m.active:active:not(.disabled) > .track > .thumb
275
+ {
276
+ transform: translate(13px, -50%) scaleX(1.25);
277
+ }
278
+
279
+ .e-180e0ca7 > .holder.size-l > .track
280
+ {
281
+ width: 44px;
282
+ height: 24px;
283
+ }
284
+ .e-180e0ca7 > .holder.size-l > .track > .thumb
285
+ {
286
+ width: 20px;
287
+ height: 20px;
288
+ left: 2px;
289
+ }
290
+ .e-180e0ca7 > .holder.size-l.active > .track > .thumb
291
+ {
292
+ transform: translate(20px, -50%);
293
+ }
294
+ .e-180e0ca7 > .holder.size-l:active:not(.disabled) > .track > .thumb
295
+ {
296
+ transform: translateY(-50%) scaleX(1.15);
297
+ }
298
+ .e-180e0ca7 > .holder.size-l.active:active:not(.disabled) > .track > .thumb
299
+ {
300
+ transform: translate(17px, -50%) scaleX(1.25);
301
+ }
302
+ .e-180e0ca7 > .holder.size-l > .info > .label
303
+ {
304
+ font-size: var(--ot-size-m);
305
+ }