@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
@@ -4,17 +4,26 @@ onetype.AddonReady('elements', (elements) =>
4
4
  id: 'navigation-sidebar',
5
5
  icon: 'side_navigation',
6
6
  name: 'Sidebar',
7
- description: 'Vertical navigation sidebar with grouped items and slots.',
7
+ description: 'Secondary navigation sidebar with grouped items, header, badges and mobile drawer.',
8
8
  category: 'Navigation',
9
9
  author: 'OneType',
10
10
  config: {
11
+ title: {
12
+ type: 'string'
13
+ },
14
+ subtitle: {
15
+ type: 'string'
16
+ },
17
+ version: {
18
+ type: 'string'
19
+ },
11
20
  groups: {
12
21
  type: 'array',
13
22
  value: [],
14
23
  each: {
15
24
  type: 'object',
16
25
  config: {
17
- title: { type: 'string', value: '' },
26
+ title: { type: 'string' },
18
27
  placement: { type: 'string', value: 'top', options: ['top', 'bottom'] },
19
28
  items: {
20
29
  type: 'array',
@@ -22,12 +31,16 @@ onetype.AddonReady('elements', (elements) =>
22
31
  each: {
23
32
  type: 'object',
24
33
  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 }
34
+ icon: { type: 'string' },
35
+ label: { type: 'string' },
36
+ href: { type: 'string' },
37
+ target: { type: 'string' },
38
+ match: { type: 'string' },
39
+ value: { type: 'string' },
40
+ badge: { type: 'string|number' },
41
+ count: { type: 'string|number' },
42
+ soon: { type: 'boolean' },
43
+ disabled: { type: 'boolean' }
31
44
  }
32
45
  }
33
46
  }
@@ -35,13 +48,12 @@ onetype.AddonReady('elements', (elements) =>
35
48
  }
36
49
  },
37
50
  active: {
38
- type: 'string',
39
- value: ''
51
+ type: 'string'
40
52
  },
41
53
  variant: {
42
54
  type: 'array',
43
- value: [],
44
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border']
55
+ value: ['bg-2', 'border-right'],
56
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border', 'border-top', 'border-right', 'border-bottom', 'border-left']
45
57
  },
46
58
  _click: {
47
59
  type: 'function'
@@ -51,29 +63,65 @@ onetype.AddonReady('elements', (elements) =>
51
63
  {
52
64
  const path = onetype.RouteCurrent();
53
65
 
54
- this.top = this.groups.filter(g => !g.placement || g.placement === 'top');
55
- this.bottom = this.groups.filter(g => g.placement === 'bottom');
56
- this.open = false;
57
-
58
66
  this.isActive = (item) =>
59
67
  {
60
- if(item.href)
68
+ if(item.soon || item.disabled)
69
+ {
70
+ return false;
71
+ }
72
+
73
+ if(item.value && this.active)
61
74
  {
62
- if(item.match === 'exact' || item.href === '/') return path === item.href;
63
- return path.startsWith(item.href);
75
+ return item.value === this.active;
64
76
  }
65
77
 
66
- return item.value === this.active;
78
+ if(item.match)
79
+ {
80
+ return path === item.match;
81
+ }
82
+
83
+ if(!item.href)
84
+ {
85
+ return false;
86
+ }
87
+
88
+ if(item.href === '/')
89
+ {
90
+ return path === '/';
91
+ }
92
+
93
+ return path.startsWith(item.href);
94
+ };
95
+
96
+ this.compute = (groups) =>
97
+ {
98
+ return (groups || [])
99
+ .filter(group => group.items && group.items.length)
100
+ .map(group => ({
101
+ ...group,
102
+ items: group.items.map(item => ({ ...item, active: this.isActive(item) }))
103
+ }));
67
104
  };
68
105
 
69
- this.handleClick = (item) =>
106
+ this.top = this.compute(this.groups.filter(group => (group.placement || 'top') === 'top'));
107
+ this.bottom = this.compute(this.groups.filter(group => group.placement === 'bottom'));
108
+
109
+ this.hasHead = !!this.title || !!this.subtitle || !!this.version || !!this.Slots.top;
110
+ this.hasFoot = !!this.Slots.bottom;
111
+ this.open = false;
112
+
113
+ this.handle = (item, event) =>
70
114
  {
71
- this.active = item.value;
115
+ if(item.soon || item.disabled)
116
+ {
117
+ return;
118
+ }
119
+
72
120
  this.open = false;
73
121
 
74
122
  if(this._click)
75
123
  {
76
- this._click({ value: item });
124
+ this._click({ event, value: item });
77
125
  }
78
126
  };
79
127
 
@@ -82,54 +130,59 @@ onetype.AddonReady('elements', (elements) =>
82
130
  this.open = !this.open;
83
131
  };
84
132
 
85
- return `
86
- <nav :class="'holder ' + variant.join(' ')">
87
- <slot name="top"></slot>
88
- <div ot-for="group in top" class="group">
89
- <p ot-if="group.title" class="title">{{ group.title }}</p>
90
- <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
91
- <i ot-if="item.icon">{{ item.icon }}</i>
92
- <span>{{ item.label }}</span>
93
- <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
94
- </a>
133
+ return /* html */ `
134
+ <aside :class="'holder ' + variant.join(' ')">
135
+ <div ot-if="hasHead" class="head">
136
+ <slot name="top"></slot>
137
+ <div ot-if="title" class="title">{{ title }}</div>
138
+ <div ot-if="subtitle" class="subtitle">{{ subtitle }}</div>
139
+ <div ot-if="version" class="version">{{ version }}</div>
95
140
  </div>
96
- <div ot-if="bottom.length" class="bottom">
97
- <div ot-for="group in bottom" class="group">
98
- <p ot-if="group.title" class="title">{{ group.title }}</p>
99
- <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
141
+
142
+ <nav class="stack">
143
+ <div ot-for="group in top" class="group">
144
+ <div ot-if="group.title" class="group-title">{{ group.title }}</div>
145
+ <a
146
+ ot-for="item in group.items"
147
+ :class="'item' + (item.active ? ' active' : '') + (item.soon ? ' soon' : '') + (item.disabled ? ' disabled' : '')"
148
+ :href="item.href && !item.soon && !item.disabled ? item.href : 'javascript:void(0)'"
149
+ :target="item.target"
150
+ ot-click="(event) => handle(item, event)"
151
+ >
100
152
  <i ot-if="item.icon">{{ item.icon }}</i>
101
- <span>{{ item.label }}</span>
102
- <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
153
+ <span class="label">{{ item.label }}</span>
154
+ <span ot-if="item.badge" class="badge">{{ item.badge }}</span>
155
+ <span ot-if="item.count != null && !item.badge" class="count">{{ item.count }}</span>
156
+ <span ot-if="item.soon" class="soon-badge">Soon</span>
157
+ <i ot-if="!item.badge && item.count == null && !item.soon && !item.disabled" class="chevron">chevron_right</i>
103
158
  </a>
104
159
  </div>
105
- </div>
106
- <slot name="bottom"></slot>
107
- </nav>
108
- <div :class="'bar ' + variant.join(' ')" ot-click="toggle">
109
- <i class="toggle">filter_list</i>
110
- </div>
111
- <div ot-if="open" class="overlay" ot-click="toggle"></div>
112
- <nav ot-if="open" :class="'drawer ' + variant.join(' ')">
113
- <button class="toggle" ot-click="toggle"><i>close</i></button>
114
- <div ot-for="group in top" class="group">
115
- <p ot-if="group.title" class="title">{{ group.title }}</p>
116
- <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
117
- <i ot-if="item.icon">{{ item.icon }}</i>
118
- <span>{{ item.label }}</span>
119
- <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
120
- </a>
121
- </div>
122
- <div ot-if="bottom.length" class="group">
160
+ </nav>
161
+
162
+ <nav ot-if="bottom.length" class="stack bottom">
123
163
  <div ot-for="group in bottom" class="group">
124
- <p ot-if="group.title" class="title">{{ group.title }}</p>
125
- <a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
164
+ <div ot-if="group.title" class="group-title">{{ group.title }}</div>
165
+ <a
166
+ ot-for="item in group.items"
167
+ :class="'item' + (item.active ? ' active' : '') + (item.soon ? ' soon' : '') + (item.disabled ? ' disabled' : '')"
168
+ :href="item.href && !item.soon && !item.disabled ? item.href : 'javascript:void(0)'"
169
+ :target="item.target"
170
+ ot-click="(event) => handle(item, event)"
171
+ >
126
172
  <i ot-if="item.icon">{{ item.icon }}</i>
127
- <span>{{ item.label }}</span>
128
- <span ot-if="item.count !== undefined && item.count !== null" class="count">{{ item.count }}</span>
173
+ <span class="label">{{ item.label }}</span>
174
+ <span ot-if="item.badge" class="badge">{{ item.badge }}</span>
175
+ <span ot-if="item.count != null && !item.badge" class="count">{{ item.count }}</span>
176
+ <span ot-if="item.soon" class="soon-badge">Soon</span>
177
+ <i ot-if="!item.badge && item.count == null && !item.soon && !item.disabled" class="chevron">chevron_right</i>
129
178
  </a>
130
179
  </div>
180
+ </nav>
181
+
182
+ <div ot-if="hasFoot" class="foot">
183
+ <slot name="bottom"></slot>
131
184
  </div>
132
- </nav>
185
+ </aside>
133
186
  `;
134
187
  }
135
188
  });
@@ -0,0 +1,345 @@
1
+ /* Root */
2
+
3
+ .e-36dc8444
4
+ {
5
+ display: flex;
6
+ width: 100%;
7
+ }
8
+
9
+ /* Holder */
10
+
11
+ .e-36dc8444 > .holder
12
+ {
13
+ display: flex;
14
+ width: 100%;
15
+ border-radius: var(--ot-radius-l);
16
+ overflow: hidden;
17
+ }
18
+
19
+ .e-36dc8444 > .holder.vertical
20
+ {
21
+ flex-direction: column;
22
+ }
23
+
24
+ .e-36dc8444 > .holder.horizontal
25
+ {
26
+ flex-direction: row;
27
+ align-items: stretch;
28
+ }
29
+
30
+ /* Step */
31
+
32
+ .e-36dc8444 .step
33
+ {
34
+ position: relative;
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--ot-spacing-m);
38
+ padding: var(--ot-spacing-m);
39
+ background: transparent;
40
+ border: none;
41
+ text-align: left;
42
+ font-family: var(--ot-font-primary);
43
+ cursor: pointer;
44
+ transition: background 0.2s cubic-bezier(0.22, 1, 0.36, 1);
45
+ }
46
+
47
+ .e-36dc8444 > .holder.vertical > .step
48
+ {
49
+ width: 100%;
50
+ }
51
+
52
+ .e-36dc8444 > .holder.horizontal > .step
53
+ {
54
+ flex: 1;
55
+ flex-direction: column;
56
+ text-align: center;
57
+ align-items: center;
58
+ }
59
+
60
+ .e-36dc8444 .step:hover:not(.disabled)
61
+ {
62
+ background: var(--ot-bg-2-opacity);
63
+ }
64
+
65
+ /* Marker */
66
+
67
+ .e-36dc8444 .step > .marker
68
+ {
69
+ position: relative;
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ flex-shrink: 0;
74
+ border-radius: 50%;
75
+ background: var(--ot-bg-2);
76
+ border: 1px solid var(--ot-bg-2-border);
77
+ color: var(--ot-text-2);
78
+ font-weight: 600;
79
+ z-index: 1;
80
+ transition: background 0.25s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.25s cubic-bezier(0.22, 1, 0.36, 1), color 0.25s cubic-bezier(0.22, 1, 0.36, 1), transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
81
+ }
82
+
83
+ .e-36dc8444 .step > .marker > i
84
+ {
85
+ font-variation-settings: 'wght' 500;
86
+ }
87
+
88
+ /* Text */
89
+
90
+ .e-36dc8444 .step > .text
91
+ {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: 2px;
95
+ min-width: 0;
96
+ flex: 1;
97
+ }
98
+
99
+ .e-36dc8444 .step > .text > .label
100
+ {
101
+ font-weight: 600;
102
+ color: var(--ot-text-2);
103
+ line-height: 1.3;
104
+ transition: color 0.2s cubic-bezier(0.22, 1, 0.36, 1);
105
+ }
106
+
107
+ .e-36dc8444 .step > .text > .description
108
+ {
109
+ color: var(--ot-text-3);
110
+ line-height: 1.4;
111
+ font-weight: 400;
112
+ overflow: hidden;
113
+ display: -webkit-box;
114
+ -webkit-line-clamp: 1;
115
+ -webkit-box-orient: vertical;
116
+ }
117
+
118
+ /* Done state */
119
+
120
+ .e-36dc8444 .step.done > .marker
121
+ {
122
+ background: var(--ot-brand);
123
+ border-color: var(--ot-brand);
124
+ color: white;
125
+ }
126
+
127
+ .e-36dc8444 .step.done > .text > .label
128
+ {
129
+ color: var(--ot-text-1);
130
+ }
131
+
132
+ /* Active state */
133
+
134
+ .e-36dc8444 .step.active > .marker
135
+ {
136
+ background: var(--ot-brand);
137
+ border-color: var(--ot-brand);
138
+ color: white;
139
+ transform: scale(1.05);
140
+ box-shadow: 0 0 0 4px var(--ot-brand-opacity);
141
+ }
142
+
143
+ .e-36dc8444 .step.active > .text > .label
144
+ {
145
+ color: var(--ot-brand);
146
+ }
147
+
148
+ .e-36dc8444 .step.active > .text > .description
149
+ {
150
+ color: var(--ot-text-2);
151
+ }
152
+
153
+ /* Upcoming state (default styles already handle this) */
154
+
155
+ /* Disabled state */
156
+
157
+ .e-36dc8444 .step.disabled
158
+ {
159
+ cursor: not-allowed;
160
+ opacity: 0.45;
161
+ }
162
+
163
+ .e-36dc8444 .step.disabled:hover
164
+ {
165
+ background: transparent;
166
+ }
167
+
168
+ /* ===== CONNECTED (progress line) ===== */
169
+
170
+ .e-36dc8444 > .holder.vertical.connected > .step + .step::before
171
+ {
172
+ content: '';
173
+ position: absolute;
174
+ width: 2px;
175
+ background: var(--ot-bg-2-border);
176
+ transition: background 0.25s cubic-bezier(0.22, 1, 0.36, 1);
177
+ z-index: 0;
178
+ }
179
+
180
+ .e-36dc8444 > .holder.vertical.connected > .step.done + .step::before
181
+ {
182
+ background: var(--ot-brand);
183
+ }
184
+
185
+ .e-36dc8444 > .holder.horizontal.connected > .step + .step::before
186
+ {
187
+ content: '';
188
+ position: absolute;
189
+ height: 2px;
190
+ background: var(--ot-bg-2-border);
191
+ transition: background 0.25s cubic-bezier(0.22, 1, 0.36, 1);
192
+ z-index: 0;
193
+ }
194
+
195
+ .e-36dc8444 > .holder.horizontal.connected > .step.done + .step::before
196
+ {
197
+ background: var(--ot-brand);
198
+ }
199
+
200
+ /* ===== CLEAN (no bg, no border, no radius) ===== */
201
+
202
+ .e-36dc8444 > .holder.clean
203
+ {
204
+ background: transparent !important;
205
+ border: none !important;
206
+ border-radius: 0;
207
+ }
208
+
209
+ /* ===== BACKGROUNDS ===== */
210
+
211
+ .e-36dc8444 > .holder.bg-1 { background: var(--ot-bg-1); }
212
+ .e-36dc8444 > .holder.bg-1 .step.upcoming > .marker { background: var(--ot-bg-2); border-color: var(--ot-bg-2-border); }
213
+ .e-36dc8444 > .holder.bg-1 .step:hover:not(.disabled) { background: var(--ot-bg-1-hover); }
214
+
215
+ .e-36dc8444 > .holder.bg-2 { background: var(--ot-bg-2); }
216
+ .e-36dc8444 > .holder.bg-2 .step.upcoming > .marker { background: var(--ot-bg-1); border-color: var(--ot-bg-2-border); }
217
+ .e-36dc8444 > .holder.bg-2 .step:hover:not(.disabled) { background: var(--ot-bg-2-hover); }
218
+
219
+ .e-36dc8444 > .holder.bg-3 { background: var(--ot-bg-3); }
220
+ .e-36dc8444 > .holder.bg-3 .step.upcoming > .marker { background: var(--ot-bg-2); border-color: var(--ot-bg-3-border); }
221
+ .e-36dc8444 > .holder.bg-3 .step:hover:not(.disabled) { background: var(--ot-bg-3-hover); }
222
+
223
+ .e-36dc8444 > .holder.bg-4 { background: var(--ot-bg-4); }
224
+ .e-36dc8444 > .holder.bg-4 .step.upcoming > .marker { background: var(--ot-bg-3); border-color: var(--ot-bg-4-border); }
225
+ .e-36dc8444 > .holder.bg-4 .step:hover:not(.disabled) { background: var(--ot-bg-4-hover); }
226
+
227
+ /* ===== BORDERS ===== */
228
+
229
+ .e-36dc8444 > .holder.border { border: 1px solid var(--ot-bg-2-border); }
230
+ .e-36dc8444 > .holder.border-top { border-top: 1px solid var(--ot-bg-2-border); }
231
+ .e-36dc8444 > .holder.border-right { border-right: 1px solid var(--ot-bg-2-border); }
232
+ .e-36dc8444 > .holder.border-bottom { border-bottom: 1px solid var(--ot-bg-2-border); }
233
+ .e-36dc8444 > .holder.border-left { border-left: 1px solid var(--ot-bg-2-border); }
234
+
235
+ .e-36dc8444 > .holder.bg-1.border,
236
+ .e-36dc8444 > .holder.bg-1.border-top,
237
+ .e-36dc8444 > .holder.bg-1.border-right,
238
+ .e-36dc8444 > .holder.bg-1.border-bottom,
239
+ .e-36dc8444 > .holder.bg-1.border-left { border-color: var(--ot-bg-1-border); }
240
+
241
+ .e-36dc8444 > .holder.bg-2.border,
242
+ .e-36dc8444 > .holder.bg-2.border-top,
243
+ .e-36dc8444 > .holder.bg-2.border-right,
244
+ .e-36dc8444 > .holder.bg-2.border-bottom,
245
+ .e-36dc8444 > .holder.bg-2.border-left { border-color: var(--ot-bg-2-border); }
246
+
247
+ .e-36dc8444 > .holder.bg-3.border,
248
+ .e-36dc8444 > .holder.bg-3.border-top,
249
+ .e-36dc8444 > .holder.bg-3.border-right,
250
+ .e-36dc8444 > .holder.bg-3.border-bottom,
251
+ .e-36dc8444 > .holder.bg-3.border-left { border-color: var(--ot-bg-3-border); }
252
+
253
+ .e-36dc8444 > .holder.bg-4.border,
254
+ .e-36dc8444 > .holder.bg-4.border-top,
255
+ .e-36dc8444 > .holder.bg-4.border-right,
256
+ .e-36dc8444 > .holder.bg-4.border-bottom,
257
+ .e-36dc8444 > .holder.bg-4.border-left { border-color: var(--ot-bg-4-border); }
258
+
259
+ /* Connected line color by bg variant */
260
+
261
+ .e-36dc8444 > .holder.bg-1.connected > .step + .step::before { background: var(--ot-bg-1-border); }
262
+ .e-36dc8444 > .holder.bg-2.connected > .step + .step::before { background: var(--ot-bg-2-border); }
263
+ .e-36dc8444 > .holder.bg-3.connected > .step + .step::before { background: var(--ot-bg-3-border); }
264
+ .e-36dc8444 > .holder.bg-4.connected > .step + .step::before { background: var(--ot-bg-4-border); }
265
+
266
+ .e-36dc8444 > .holder.bg-1.connected > .step.done + .step::before,
267
+ .e-36dc8444 > .holder.bg-2.connected > .step.done + .step::before,
268
+ .e-36dc8444 > .holder.bg-3.connected > .step.done + .step::before,
269
+ .e-36dc8444 > .holder.bg-4.connected > .step.done + .step::before { background: var(--ot-brand); }
270
+
271
+ /* ===== SIZES — vertical ===== */
272
+
273
+ .e-36dc8444 > .holder.vertical.size-s > .step { padding: var(--ot-spacing-s) var(--ot-spacing-m); gap: var(--ot-spacing-s); }
274
+ .e-36dc8444 > .holder.vertical.size-s .step > .marker { width: 24px; height: 24px; font-size: 11px; }
275
+ .e-36dc8444 > .holder.vertical.size-s .step > .marker > i { font-size: 15px; }
276
+ .e-36dc8444 > .holder.vertical.size-s .step > .text > .label { font-size: 12px; }
277
+ .e-36dc8444 > .holder.vertical.size-s .step > .text > .description { font-size: 10.5px; }
278
+ .e-36dc8444 > .holder.vertical.size-s.connected > .step + .step::before
279
+ {
280
+ left: calc(var(--ot-spacing-m) + 12px - 1px);
281
+ top: calc(-1 * var(--ot-spacing-s));
282
+ height: calc(var(--ot-spacing-s) * 2);
283
+ }
284
+
285
+ .e-36dc8444 > .holder.vertical.size-m > .step { padding: var(--ot-spacing-m); gap: var(--ot-spacing-m); }
286
+ .e-36dc8444 > .holder.vertical.size-m .step > .marker { width: 32px; height: 32px; font-size: 13px; }
287
+ .e-36dc8444 > .holder.vertical.size-m .step > .marker > i { font-size: 18px; }
288
+ .e-36dc8444 > .holder.vertical.size-m .step > .text > .label { font-size: 13px; }
289
+ .e-36dc8444 > .holder.vertical.size-m .step > .text > .description { font-size: 11.5px; }
290
+ .e-36dc8444 > .holder.vertical.size-m.connected > .step + .step::before
291
+ {
292
+ left: calc(var(--ot-spacing-m) + 16px - 1px);
293
+ top: calc(-1 * var(--ot-spacing-m));
294
+ height: calc(var(--ot-spacing-m) * 2);
295
+ }
296
+
297
+ .e-36dc8444 > .holder.vertical.size-l > .step { padding: var(--ot-spacing-l) var(--ot-spacing-m); gap: var(--ot-spacing-m); }
298
+ .e-36dc8444 > .holder.vertical.size-l .step > .marker { width: 40px; height: 40px; font-size: 15px; }
299
+ .e-36dc8444 > .holder.vertical.size-l .step > .marker > i { font-size: 20px; }
300
+ .e-36dc8444 > .holder.vertical.size-l .step > .text > .label { font-size: 15px; }
301
+ .e-36dc8444 > .holder.vertical.size-l .step > .text > .description { font-size: 13px; }
302
+ .e-36dc8444 > .holder.vertical.size-l.connected > .step + .step::before
303
+ {
304
+ left: calc(var(--ot-spacing-m) + 20px - 1px);
305
+ top: calc(-1 * var(--ot-spacing-l));
306
+ height: calc(var(--ot-spacing-l) * 2);
307
+ }
308
+
309
+ /* ===== SIZES — horizontal ===== */
310
+
311
+ .e-36dc8444 > .holder.horizontal.size-s > .step { padding: var(--ot-spacing-s); gap: var(--ot-spacing-x); }
312
+ .e-36dc8444 > .holder.horizontal.size-s .step > .marker { width: 24px; height: 24px; font-size: 11px; }
313
+ .e-36dc8444 > .holder.horizontal.size-s .step > .marker > i { font-size: 15px; }
314
+ .e-36dc8444 > .holder.horizontal.size-s .step > .text > .label { font-size: 12px; }
315
+ .e-36dc8444 > .holder.horizontal.size-s .step > .text > .description { font-size: 10.5px; }
316
+ .e-36dc8444 > .holder.horizontal.size-s.connected > .step + .step::before
317
+ {
318
+ top: calc(var(--ot-spacing-s) + 12px - 1px);
319
+ left: calc(-50% + 12px);
320
+ width: calc(100% - 24px);
321
+ }
322
+
323
+ .e-36dc8444 > .holder.horizontal.size-m > .step { padding: var(--ot-spacing-m); gap: var(--ot-spacing-s); }
324
+ .e-36dc8444 > .holder.horizontal.size-m .step > .marker { width: 32px; height: 32px; font-size: 13px; }
325
+ .e-36dc8444 > .holder.horizontal.size-m .step > .marker > i { font-size: 18px; }
326
+ .e-36dc8444 > .holder.horizontal.size-m .step > .text > .label { font-size: 13px; }
327
+ .e-36dc8444 > .holder.horizontal.size-m .step > .text > .description { font-size: 11.5px; }
328
+ .e-36dc8444 > .holder.horizontal.size-m.connected > .step + .step::before
329
+ {
330
+ top: calc(var(--ot-spacing-m) + 16px - 1px);
331
+ left: calc(-50% + 16px);
332
+ width: calc(100% - 32px);
333
+ }
334
+
335
+ .e-36dc8444 > .holder.horizontal.size-l > .step { padding: var(--ot-spacing-l) var(--ot-spacing-m); gap: var(--ot-spacing-s); }
336
+ .e-36dc8444 > .holder.horizontal.size-l .step > .marker { width: 40px; height: 40px; font-size: 15px; }
337
+ .e-36dc8444 > .holder.horizontal.size-l .step > .marker > i { font-size: 20px; }
338
+ .e-36dc8444 > .holder.horizontal.size-l .step > .text > .label { font-size: 15px; }
339
+ .e-36dc8444 > .holder.horizontal.size-l .step > .text > .description { font-size: 13px; }
340
+ .e-36dc8444 > .holder.horizontal.size-l.connected > .step + .step::before
341
+ {
342
+ top: calc(var(--ot-spacing-l) + 20px - 1px);
343
+ left: calc(-50% + 20px);
344
+ width: calc(100% - 40px);
345
+ }