@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
@@ -10,254 +10,403 @@
10
10
 
11
11
  .e-4696d703 > .holder
12
12
  {
13
- display: flex;
14
- flex-direction: column;
15
- gap: var(--ot-spacing-m);
13
+ position: relative;
16
14
  width: 100%;
15
+ border-radius: var(--ot-radius-l);
16
+ overflow: hidden;
17
17
  }
18
18
 
19
- /* Background variants */
20
-
21
- .e-4696d703 > .holder.bg-1 { background: var(--ot-bg-1); border: 1px solid var(--ot-bg-1-border); border-radius: var(--ot-radius-m); padding: var(--ot-spacing-m); }
22
- .e-4696d703 > .holder.bg-2 { background: var(--ot-bg-2); border: 1px solid var(--ot-bg-2-border); border-radius: var(--ot-radius-m); padding: var(--ot-spacing-m); }
23
- .e-4696d703 > .holder.bg-3 { background: var(--ot-bg-3); border: 1px solid var(--ot-bg-3-border); border-radius: var(--ot-radius-m); padding: var(--ot-spacing-m); }
24
- .e-4696d703 > .holder.bg-4 { background: var(--ot-bg-4); border: 1px solid var(--ot-bg-4-border); border-radius: var(--ot-radius-m); padding: var(--ot-spacing-m); }
25
-
26
- /* Border variant */
19
+ /* Body scroll container for collapsible mode */
27
20
 
28
- .e-4696d703 > .holder.border { border: 1px solid var(--ot-bg-2-border); border-radius: var(--ot-radius-m); padding: var(--ot-spacing-m); }
29
-
30
- /* Line wrapper */
21
+ .e-4696d703 > .holder > .body
22
+ {
23
+ overflow: hidden;
24
+ transition: max-height 0.4s cubic-bezier(0.22, 1, 0.36, 1);
25
+ }
31
26
 
32
- .e-4696d703 > .holder > .line:empty
27
+ .e-4696d703 > .holder.expanded > .body
33
28
  {
34
- height: var(--ot-spacing-m);
29
+ max-height: none !important;
35
30
  }
36
31
 
37
- /* Headings */
32
+ /* Prose — typography container */
38
33
 
39
- .e-4696d703 > .holder h1
34
+ .e-4696d703 .prose
40
35
  {
41
- font-size: 32px;
42
- font-weight: 800;
36
+ font-family: var(--ot-font-primary);
37
+ font-size: 14px;
38
+ line-height: 1.75;
43
39
  color: var(--ot-text-1);
44
- line-height: 1.2;
45
- letter-spacing: -0.5px;
46
- margin: 0;
47
40
  }
48
41
 
49
- .e-4696d703 > .holder h2
42
+ .e-4696d703 .prose > *:first-child
50
43
  {
51
- font-size: 24px;
52
- font-weight: 700;
53
- color: var(--ot-text-1);
54
- line-height: 1.3;
55
- letter-spacing: -0.3px;
56
- margin: 0;
44
+ margin-top: 0;
57
45
  }
58
46
 
59
- .e-4696d703 > .holder h3
47
+ .e-4696d703 .prose > *:last-child
60
48
  {
61
- font-size: 18px;
62
- font-weight: 600;
63
- color: var(--ot-text-1);
64
- line-height: 1.4;
65
- margin: 0;
49
+ margin-bottom: 0;
66
50
  }
67
51
 
68
- .e-4696d703 > .holder h4
52
+ /* ===== HEADINGS ===== */
53
+
54
+ .e-4696d703 .prose :is(h1, h2, h3, h4, h5, h6)
69
55
  {
70
- font-size: 15px;
71
- font-weight: 600;
56
+ font-family: var(--ot-font-secondary);
57
+ font-weight: 500;
58
+ letter-spacing: -0.02em;
72
59
  color: var(--ot-text-1);
73
- line-height: 1.4;
74
- margin: 0;
60
+ font-variation-settings: 'opsz' 144;
61
+ line-height: 1.15;
75
62
  }
76
63
 
77
- /* Paragraph */
64
+ .e-4696d703 .prose h1 { font-size: 2.25em; margin: 0 0 0.9em; }
65
+ .e-4696d703 .prose h2 { font-size: 1.5em; margin: 1em 0 0.75em; }
66
+ .e-4696d703 .prose h3 { font-size: 1.25em; margin: 1.6em 0 0.6em; }
67
+ .e-4696d703 .prose h4 { font-size: 1.1em; margin: 1.5em 0 0.5em; }
78
68
 
79
- .e-4696d703 > .holder p
69
+ .e-4696d703 .prose :is(h1, h2, h3, h4) + :is(h1, h2, h3, h4)
80
70
  {
81
- font-size: var(--ot-size-m);
82
- color: var(--ot-text-2);
83
- line-height: 1.8;
84
- margin: 0;
71
+ margin-top: 0;
85
72
  }
86
73
 
87
- /* Links */
74
+ /* ===== INLINE ===== */
88
75
 
89
- .e-4696d703 > .holder a
76
+ .e-4696d703 .prose em
90
77
  {
78
+ font-style: italic;
91
79
  color: var(--ot-brand);
92
- text-decoration: none;
93
- font-weight: 500;
94
- transition: opacity 0.15s ease;
95
80
  }
96
81
 
97
- .e-4696d703 > .holder a:hover
82
+ .e-4696d703 .prose strong
98
83
  {
99
- opacity: 0.8;
84
+ font-weight: 700;
85
+ color: var(--ot-text-1);
100
86
  }
101
87
 
102
- /* Bold & Italic */
88
+ .e-4696d703 .prose del
89
+ {
90
+ text-decoration: line-through;
91
+ opacity: 0.6;
92
+ }
103
93
 
104
- .e-4696d703 > .holder strong
94
+ /* ===== PARAGRAPH ===== */
95
+
96
+ .e-4696d703 .prose p
97
+ {
98
+ margin: 0 0 1.25em;
99
+ color: var(--ot-text-2);
100
+ line-height: 1.75;
101
+ }
102
+
103
+ .e-4696d703 .prose > p:first-child
105
104
  {
106
- font-weight: 600;
107
105
  color: var(--ot-text-1);
108
106
  }
109
107
 
110
- .e-4696d703 > .holder em
108
+ /* ===== LINKS ===== */
109
+
110
+ .e-4696d703 .prose a
111
111
  {
112
- font-style: italic;
112
+ color: var(--ot-brand);
113
+ text-decoration: underline;
114
+ text-decoration-color: var(--ot-brand-opacity);
115
+ text-underline-offset: 3px;
116
+ transition: text-decoration-color 0.2s cubic-bezier(0.22, 1, 0.36, 1);
113
117
  }
114
118
 
115
- .e-4696d703 > .holder del
119
+ .e-4696d703 .prose a:hover
116
120
  {
117
- text-decoration: line-through;
118
- opacity: 0.6;
121
+ text-decoration-color: var(--ot-brand);
119
122
  }
120
123
 
121
- /* Lists */
124
+ /* ===== LISTS ===== */
122
125
 
123
- .e-4696d703 > .holder ul,
124
- .e-4696d703 > .holder ol
126
+ .e-4696d703 .prose :is(ul, ol)
125
127
  {
126
- display: flex;
127
- flex-direction: column;
128
- gap: var(--ot-spacing-x);
129
- padding-left: var(--ot-spacing-l);
130
- margin: 0;
128
+ margin: 0 0 1.25em;
129
+ padding-left: 1.6em;
131
130
  }
132
131
 
133
- .e-4696d703 > .holder li
132
+ .e-4696d703 .prose ul { list-style: disc; }
133
+ .e-4696d703 .prose ol { list-style: decimal; }
134
+
135
+ .e-4696d703 .prose li
134
136
  {
135
- font-size: var(--ot-size-m);
137
+ margin: 0 0 0.5em;
136
138
  color: var(--ot-text-2);
137
139
  line-height: 1.7;
138
140
  }
139
141
 
140
- .e-4696d703 > .holder ul > li
142
+ .e-4696d703 .prose li::marker
141
143
  {
142
- list-style-type: disc;
144
+ color: var(--ot-brand);
143
145
  }
144
146
 
145
- .e-4696d703 > .holder ol > li
147
+ .e-4696d703 .prose li:last-child
146
148
  {
147
- list-style-type: decimal;
149
+ margin-bottom: 0;
148
150
  }
149
151
 
150
- .e-4696d703 > .holder li::marker
152
+ /* ===== BLOCKQUOTE ===== */
153
+
154
+ .e-4696d703 .prose blockquote
151
155
  {
152
- color: var(--ot-brand);
156
+ margin: 1.6em 0;
157
+ padding: 0.25em 0 0.25em 1.2em;
158
+ border-left: 3px solid var(--ot-brand);
159
+ font-family: var(--ot-font-secondary);
160
+ font-size: 1.3em;
161
+ font-style: italic;
162
+ line-height: 1.45;
163
+ color: var(--ot-text-1);
164
+ font-variation-settings: 'opsz' 144;
153
165
  }
154
166
 
155
- /* Blockquote */
156
-
157
- .e-4696d703 > .holder blockquote
167
+ .e-4696d703 .prose blockquote p
158
168
  {
159
- border-left: 3px solid var(--ot-brand);
160
- padding: var(--ot-spacing-s) var(--ot-spacing-m);
161
- background: var(--ot-bg-2);
162
- border-radius: 0 var(--ot-radius-m) var(--ot-radius-m) 0;
163
169
  margin: 0;
164
- font-size: var(--ot-size-m);
165
- color: var(--ot-text-2);
166
- line-height: 1.7;
167
- font-style: italic;
170
+ color: inherit;
168
171
  }
169
172
 
170
- /* Inline code */
173
+ /* ===== CODE ===== */
171
174
 
172
- .e-4696d703 > .holder code.inline
175
+ .e-4696d703 .prose code,
176
+ .e-4696d703 .prose code.inline
173
177
  {
174
- padding: var(--ot-spacing-x) var(--ot-spacing-s);
178
+ font-family: ui-monospace, 'SF Mono', Menlo, monospace;
179
+ font-size: 0.88em;
180
+ padding: 0.15em 0.4em;
175
181
  border-radius: var(--ot-radius-s);
176
182
  background: var(--ot-bg-2);
177
183
  border: 1px solid var(--ot-bg-2-border);
178
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
179
- font-size: 0.88em;
180
184
  color: var(--ot-brand);
181
185
  }
182
186
 
183
- /* Code block */
184
-
185
- .e-4696d703 > .holder .codeblock
187
+ .e-4696d703 .prose pre
186
188
  {
187
- position: relative;
189
+ margin: 1.7em 0;
190
+ padding: 1.1em 1.3em;
191
+ border-radius: var(--ot-radius-m);
188
192
  background: var(--ot-bg-2);
189
193
  border: 1px solid var(--ot-bg-2-border);
190
- border-radius: var(--ot-radius-m);
191
- padding: var(--ot-spacing-m);
192
194
  overflow-x: auto;
193
- margin: 0;
195
+ font-family: ui-monospace, 'SF Mono', Menlo, monospace;
196
+ font-size: 0.88em;
197
+ line-height: 1.6;
194
198
  }
195
199
 
196
- .e-4696d703 > .holder .codeblock > code
200
+ .e-4696d703 .prose pre > code,
201
+ .e-4696d703 .prose .codeblock,
202
+ .e-4696d703 .prose .codeblock > code
197
203
  {
198
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
199
- font-size: var(--ot-size-m);
200
- line-height: 1.7;
204
+ background: transparent;
205
+ border: none;
206
+ padding: 0;
201
207
  color: var(--ot-text-1);
202
- tab-size: 4;
203
208
  }
204
209
 
205
- /* Table */
210
+ /* ===== IMAGES ===== */
206
211
 
207
- .e-4696d703 > .holder table
212
+ .e-4696d703 .prose img
208
213
  {
214
+ display: block;
215
+ width: 100%;
216
+ height: auto;
217
+ border-radius: var(--ot-radius-l);
218
+ margin: 2em 0 0.5em;
219
+ }
220
+
221
+ .e-4696d703 .prose img + em
222
+ {
223
+ display: block;
224
+ font-size: 0.85em;
225
+ font-style: italic;
226
+ color: var(--ot-text-3);
227
+ text-align: center;
228
+ margin-bottom: 2em;
229
+ }
230
+
231
+ /* ===== HR ===== */
232
+
233
+ .e-4696d703 .prose hr
234
+ {
235
+ border: none;
236
+ height: 1px;
237
+ background: var(--ot-bg-2-border);
238
+ margin: 3em 0;
239
+ }
240
+
241
+ /* ===== TABLE ===== */
242
+
243
+ .e-4696d703 .prose table
244
+ {
245
+ margin: 1.5em 0;
209
246
  width: 100%;
210
247
  border-collapse: collapse;
211
- border-radius: var(--ot-radius-m);
212
- background-color: var(--ot-bg-2);
213
- overflow: hidden;
214
248
  }
215
249
 
216
- .e-4696d703 > .holder table th
250
+ .e-4696d703 .prose th
217
251
  {
218
- padding: var(--ot-spacing-s) var(--ot-spacing-m);
219
- background: var(--ot-bg-2);
220
- font-size: var(--ot-size-s);
252
+ font-size: 0.85em;
221
253
  font-weight: 600;
222
- color: var(--ot-text-1);
223
254
  text-align: left;
224
- border-bottom: 1px solid var(--ot-bg-2-border);
255
+ padding: 0.6em 1em;
256
+ border-bottom: 2px solid var(--ot-bg-2-border);
257
+ color: var(--ot-text-1);
225
258
  }
226
259
 
227
- .e-4696d703 > .holder table td
260
+ .e-4696d703 .prose td
228
261
  {
229
- padding: var(--ot-spacing-s) var(--ot-spacing-m);
230
- font-size: var(--ot-size-m);
231
- color: var(--ot-text-2);
232
- line-height: 1.6;
262
+ font-size: 0.9em;
263
+ padding: 0.6em 1em;
233
264
  border-bottom: 1px solid var(--ot-bg-2-border);
265
+ color: var(--ot-text-2);
234
266
  }
235
267
 
236
- .e-4696d703 > .holder table tr:last-child td
268
+ .e-4696d703 .prose tr:last-child td
237
269
  {
238
270
  border-bottom: none;
239
271
  }
240
272
 
241
- .e-4696d703 > .holder table tr:hover td
273
+ /* ===== LINE WRAPPER (from onetype.Markdown) ===== */
274
+
275
+ .e-4696d703 .prose > .line:empty
276
+ {
277
+ height: var(--ot-spacing-m);
278
+ }
279
+
280
+ .e-4696d703 .prose > .line:first-child > *
281
+ {
282
+ margin-top: 0;
283
+ padding-top: 0;
284
+ }
285
+
286
+ .e-4696d703 .prose > .line:last-child > *
242
287
  {
243
- background: var(--ot-bg-2-hover);
288
+ margin-bottom: 0;
289
+ padding-bottom: 0;
244
290
  }
245
291
 
246
- /* Horizontal rule */
292
+ /* ===== COLLAPSIBLE — fade + toggle ===== */
293
+
294
+ .e-4696d703 > .holder.collapsible:not(.expanded) > .fade
295
+ {
296
+ position: absolute;
297
+ bottom: 44px;
298
+ left: 0;
299
+ right: 0;
300
+ height: 80px;
301
+ background: linear-gradient(180deg, transparent 0%, var(--ot-bg-1) 100%);
302
+ pointer-events: none;
303
+ }
247
304
 
248
- .e-4696d703 > .holder hr
305
+ .e-4696d703 > .holder.collapsible > .toggle
249
306
  {
307
+ position: relative;
308
+ z-index: 2;
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ gap: var(--ot-spacing-x);
313
+ width: 100%;
314
+ margin-top: var(--ot-spacing-m);
315
+ padding-top: var(--ot-spacing-m);
316
+ background: transparent;
250
317
  border: none;
251
- border-top: 1px solid var(--ot-bg-2-border);
252
- margin: 0;
318
+ border-top: 1px solid var(--ot-bg-1-border);
319
+ color: var(--ot-brand);
320
+ font-size: 12.5px;
321
+ font-weight: 600;
322
+ font-family: var(--ot-font-primary);
323
+ cursor: pointer;
324
+ transition: background 0.2s cubic-bezier(0.22, 1, 0.36, 1);
253
325
  }
254
326
 
255
- /* Images */
327
+ .e-4696d703 > .holder.collapsible > .toggle > i
328
+ {
329
+ font-size: 18px;
330
+ }
331
+
332
+ /* ===== BACKGROUNDS ===== */
256
333
 
257
- .e-4696d703 > .holder img
334
+ .e-4696d703 > .holder.bg-1
258
335
  {
259
- max-width: 100%;
260
- height: auto;
261
- border-radius: var(--ot-radius-m);
262
- border: 1px solid var(--ot-bg-2-border);
336
+ background: var(--ot-bg-1);
337
+ padding: var(--ot-spacing-l);
263
338
  }
339
+ .e-4696d703 > .holder.bg-1.collapsible:not(.expanded) > .fade
340
+ {
341
+ background: linear-gradient(180deg, transparent 0%, var(--ot-bg-1) 100%);
342
+ }
343
+ .e-4696d703 > .holder.bg-1.collapsible > .toggle
344
+ {
345
+ border-top-color: var(--ot-bg-1-border);
346
+ }
347
+
348
+ .e-4696d703 > .holder.bg-2
349
+ {
350
+ background: var(--ot-bg-2);
351
+ padding: var(--ot-spacing-l);
352
+ }
353
+ .e-4696d703 > .holder.bg-2.collapsible:not(.expanded) > .fade
354
+ {
355
+ background: linear-gradient(180deg, transparent 0%, var(--ot-bg-2) 100%);
356
+ }
357
+ .e-4696d703 > .holder.bg-2.collapsible > .toggle
358
+ {
359
+ border-top-color: var(--ot-bg-2-border);
360
+ }
361
+
362
+ .e-4696d703 > .holder.bg-3
363
+ {
364
+ background: var(--ot-bg-3);
365
+ padding: var(--ot-spacing-l);
366
+ }
367
+ .e-4696d703 > .holder.bg-3.collapsible:not(.expanded) > .fade
368
+ {
369
+ background: linear-gradient(180deg, transparent 0%, var(--ot-bg-3) 100%);
370
+ }
371
+ .e-4696d703 > .holder.bg-3.collapsible > .toggle
372
+ {
373
+ border-top-color: var(--ot-bg-3-border);
374
+ }
375
+
376
+ .e-4696d703 > .holder.bg-4
377
+ {
378
+ background: var(--ot-bg-4);
379
+ padding: var(--ot-spacing-l);
380
+ }
381
+ .e-4696d703 > .holder.bg-4.collapsible:not(.expanded) > .fade
382
+ {
383
+ background: linear-gradient(180deg, transparent 0%, var(--ot-bg-4) 100%);
384
+ }
385
+ .e-4696d703 > .holder.bg-4.collapsible > .toggle
386
+ {
387
+ border-top-color: var(--ot-bg-4-border);
388
+ }
389
+
390
+ /* ===== BORDER ===== */
391
+
392
+ .e-4696d703 > .holder.border { border: 1px solid var(--ot-bg-2-border); }
393
+ .e-4696d703 > .holder.bg-1.border { border-color: var(--ot-bg-1-border); }
394
+ .e-4696d703 > .holder.bg-2.border { border-color: var(--ot-bg-2-border); }
395
+ .e-4696d703 > .holder.bg-3.border { border-color: var(--ot-bg-3-border); }
396
+ .e-4696d703 > .holder.bg-4.border { border-color: var(--ot-bg-4-border); }
397
+
398
+ /* ===== SIZES ===== */
399
+
400
+ .e-4696d703 > .holder.size-s .prose { font-size: 12.5px; line-height: 1.65; }
401
+ .e-4696d703 > .holder.size-s.bg-1,
402
+ .e-4696d703 > .holder.size-s.bg-2,
403
+ .e-4696d703 > .holder.size-s.bg-3,
404
+ .e-4696d703 > .holder.size-s.bg-4 { padding: var(--ot-spacing-m); }
405
+
406
+ .e-4696d703 > .holder.size-m .prose { font-size: 14px; }
407
+
408
+ .e-4696d703 > .holder.size-l .prose { font-size: 16px; line-height: 1.8; }
409
+ .e-4696d703 > .holder.size-l.bg-1,
410
+ .e-4696d703 > .holder.size-l.bg-2,
411
+ .e-4696d703 > .holder.size-l.bg-3,
412
+ .e-4696d703 > .holder.size-l.bg-4 { padding: var(--ot-spacing-l) calc(var(--ot-spacing-l) * 1.25); }
@@ -4,23 +4,53 @@ onetype.AddonReady('elements', (elements) =>
4
4
  id: 'global-markdown',
5
5
  icon: 'article',
6
6
  name: 'Markdown',
7
- description: 'Renders markdown content as styled HTML.',
7
+ description: 'Markdown renderer with premium typography and optional collapsible read more.',
8
8
  category: 'Global',
9
9
  author: 'OneType',
10
10
  config: {
11
11
  content: {
12
- type: 'string',
13
- value: ''
12
+ type: 'string'
13
+ },
14
+ collapsible: {
15
+ type: 'boolean'
16
+ },
17
+ maxHeight: {
18
+ type: 'number',
19
+ value: 200
20
+ },
21
+ expanded: {
22
+ type: 'boolean'
14
23
  },
15
24
  variant: {
16
25
  type: 'array',
17
26
  value: [],
18
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border']
27
+ options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border', 'size-s', 'size-m', 'size-l']
19
28
  }
20
29
  },
21
30
  render: function()
22
31
  {
23
- return `<div :class="'holder ' + variant.join(' ')">${onetype.Markdown(this.content)}</div>`;
32
+ this.html = this.content ? onetype.Markdown(this.content) : '';
33
+
34
+ this.toggle = () =>
35
+ {
36
+ this.expanded = !this.expanded;
37
+ };
38
+
39
+ return /* html */ `
40
+ <article :class="'holder ' + variant.join(' ') + (collapsible ? ' collapsible' : '') + (expanded ? ' expanded' : '')">
41
+ <div
42
+ class="body"
43
+ :style="collapsible && !expanded ? 'max-height: ' + maxHeight + 'px' : ''"
44
+ >
45
+ <div class="prose"><span ot-html="html"></span></div>
46
+ </div>
47
+ <div ot-if="collapsible && !expanded" class="fade"></div>
48
+ <button ot-if="collapsible" type="button" class="toggle" ot-click="toggle">
49
+ <i>{{ expanded ? 'expand_less' : 'expand_more' }}</i>
50
+ <span>{{ expanded ? 'Show less' : 'Read more' }}</span>
51
+ </button>
52
+ </article>
53
+ `;
24
54
  }
25
55
  });
26
56
  });