@mantis-core/styles 0.1.0

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.
@@ -0,0 +1,287 @@
1
+ .rich-text-preview {
2
+ --rtf-font-size: 1rem;
3
+ --rtf-line-height: 1.75;
4
+
5
+ color: var(--foreground);
6
+ font-family: var(--font-sans);
7
+ font-size: var(--rtf-font-size);
8
+ line-height: var(--rtf-line-height);
9
+ overflow-wrap: anywhere;
10
+ word-break: normal;
11
+
12
+ > :first-child {
13
+ margin-top: 0;
14
+ }
15
+
16
+ > :last-child {
17
+ margin-bottom: 0;
18
+ }
19
+
20
+ p {
21
+ margin: 0 0 1rem;
22
+ }
23
+
24
+ h1,
25
+ h2,
26
+ h3,
27
+ h4,
28
+ h5,
29
+ h6 {
30
+ color: var(--primary);
31
+ font-family: var(--font-display);
32
+ font-weight: 700;
33
+ letter-spacing: -0.01em;
34
+ line-height: 1.25;
35
+ margin: 1.5em 0 0.6em;
36
+ text-wrap: balance;
37
+ }
38
+
39
+ h1 {
40
+ font-size: clamp(1.75rem, 2.5vw, 2.35rem);
41
+ }
42
+
43
+ h2 {
44
+ font-size: clamp(1.5rem, 2.1vw, 1.95rem);
45
+ }
46
+
47
+ h3 {
48
+ font-size: clamp(1.3rem, 1.7vw, 1.55rem);
49
+ }
50
+
51
+ h4 {
52
+ font-size: clamp(1.12rem, 1.3vw, 1.28rem);
53
+ }
54
+
55
+ h5 {
56
+ font-size: 1.05rem;
57
+ }
58
+
59
+ h6 {
60
+ font-size: 0.95rem;
61
+ }
62
+
63
+ a {
64
+ color: var(--accent);
65
+ font-weight: 600;
66
+ text-decoration: underline;
67
+ text-decoration-thickness: 2px;
68
+ text-underline-offset: 3px;
69
+ }
70
+
71
+ a:hover {
72
+ color: color-mix(in oklch, var(--accent), black 14%);
73
+ }
74
+
75
+ ul:not(.todo-list),
76
+ ol:not(.todo-list) {
77
+ list-style-position: outside;
78
+ margin: 0 0 1rem;
79
+ padding-inline-start: 1.5rem;
80
+ }
81
+
82
+ ul:not(.todo-list) {
83
+ list-style-type: disc;
84
+ }
85
+
86
+ ul ul:not(.todo-list) {
87
+ list-style-type: circle;
88
+ }
89
+
90
+ ul ul ul:not(.todo-list),
91
+ ul ul ul ul:not(.todo-list) {
92
+ list-style-type: square;
93
+ }
94
+
95
+ ol:not(.todo-list) {
96
+ list-style-type: decimal;
97
+ }
98
+
99
+ ol ol:not(.todo-list) {
100
+ list-style-type: lower-latin;
101
+ }
102
+
103
+ ol ol ol:not(.todo-list) {
104
+ list-style-type: lower-roman;
105
+ }
106
+
107
+ li {
108
+ display: list-item;
109
+ margin: 0.35rem 0;
110
+ }
111
+
112
+ li::marker {
113
+ color: currentColor;
114
+ }
115
+
116
+ ul ul,
117
+ ul ol,
118
+ ol ol,
119
+ ol ul {
120
+ margin-bottom: 0.35rem;
121
+ margin-top: 0.35rem;
122
+ }
123
+
124
+ blockquote {
125
+ background-color: color-mix(in oklch, var(--accent), white 90%);
126
+ border-left: 4px solid color-mix(in oklch, var(--accent), black 10%);
127
+ border-radius: 0.75rem;
128
+ color: color-mix(in oklch, var(--foreground), black 6%);
129
+ margin: 1.25rem 0;
130
+ padding: 0.85rem 1rem;
131
+ }
132
+
133
+ hr {
134
+ border: 0;
135
+ border-top: 1px solid color-mix(in oklch, var(--border), var(--foreground) 10%);
136
+ margin: 1.6rem 0;
137
+ }
138
+
139
+ figure {
140
+ margin: 1.25rem 0;
141
+ }
142
+
143
+ img {
144
+ border-radius: 0.9rem;
145
+ display: block;
146
+ height: auto;
147
+ max-width: 100%;
148
+ }
149
+
150
+ figure.table {
151
+ margin: 1.4rem 0;
152
+ overflow-x: auto;
153
+ }
154
+
155
+ table {
156
+ border: 1px solid color-mix(in oklch, var(--border), var(--foreground) 6%);
157
+ border-collapse: collapse;
158
+ border-spacing: 0;
159
+ font-size: 0.95em;
160
+ margin: 0;
161
+ width: 100%;
162
+ }
163
+
164
+ th,
165
+ td {
166
+ border: 1px solid color-mix(in oklch, var(--border), var(--foreground) 6%);
167
+ padding: 0.55rem 0.7rem;
168
+ text-align: left;
169
+ vertical-align: top;
170
+ }
171
+
172
+ th {
173
+ background-color: color-mix(in oklch, var(--muted), white 45%);
174
+ color: color-mix(in oklch, var(--foreground), black 8%);
175
+ font-weight: 700;
176
+ }
177
+
178
+ tbody tr:nth-child(even) td {
179
+ background-color: color-mix(in oklch, var(--muted), white 72%);
180
+ }
181
+
182
+ pre {
183
+ background-color: color-mix(in oklch, var(--muted), black 8%);
184
+ border: 1px solid color-mix(in oklch, var(--border), var(--foreground) 8%);
185
+ border-radius: 0.8rem;
186
+ margin: 1.25rem 0;
187
+ overflow-x: auto;
188
+ padding: 0.85rem 1rem;
189
+ }
190
+
191
+ code {
192
+ background-color: color-mix(in oklch, var(--muted), white 40%);
193
+ border-radius: 0.35rem;
194
+ font-family:
195
+ ui-monospace,
196
+ SFMono-Regular,
197
+ Menlo,
198
+ Monaco,
199
+ Consolas,
200
+ "Liberation Mono",
201
+ "Courier New",
202
+ monospace;
203
+ font-size: 0.9em;
204
+ padding: 0.12rem 0.35rem;
205
+ }
206
+
207
+ pre code {
208
+ background-color: transparent;
209
+ border-radius: 0;
210
+ font-size: 0.9rem;
211
+ padding: 0;
212
+ }
213
+
214
+ .text-tiny {
215
+ font-size: 0.75em;
216
+ }
217
+
218
+ .text-small {
219
+ font-size: 0.88em;
220
+ }
221
+
222
+ .text-big {
223
+ font-size: 1.22em;
224
+ }
225
+
226
+ .text-huge {
227
+ font-size: 1.58em;
228
+ }
229
+
230
+ .ck-text-left {
231
+ text-align: left;
232
+ }
233
+
234
+ .ck-text-center {
235
+ text-align: center;
236
+ }
237
+
238
+ .ck-text-right {
239
+ text-align: right;
240
+ }
241
+
242
+ .ck-text-justify {
243
+ text-align: justify;
244
+ }
245
+
246
+ .image-style-side {
247
+ float: right;
248
+ margin: 0 0 1rem 1rem;
249
+ max-width: min(50%, 20rem);
250
+ }
251
+ }
252
+
253
+ .rich-text-preview--sm {
254
+ --rtf-font-size: 0.95rem;
255
+ --rtf-line-height: 1.65;
256
+ }
257
+
258
+ .rich-text-preview--md {
259
+ --rtf-font-size: 1rem;
260
+ --rtf-line-height: 1.75;
261
+ }
262
+
263
+ .rich-text-preview--lg {
264
+ --rtf-font-size: 1.06rem;
265
+ --rtf-line-height: 1.78;
266
+ }
267
+
268
+ @media (max-width: 768px) {
269
+ .rich-text-preview {
270
+ figure.table {
271
+ margin-left: -0.1rem;
272
+ margin-right: -0.1rem;
273
+ padding-bottom: 0.25rem;
274
+ }
275
+
276
+ table {
277
+ font-size: 0.9em;
278
+ min-width: 36rem;
279
+ }
280
+
281
+ .image-style-side {
282
+ float: none;
283
+ margin: 1rem 0;
284
+ max-width: 100%;
285
+ }
286
+ }
287
+ }
@@ -0,0 +1,110 @@
1
+ // ===================================
2
+ // SELECT BUTTON (ToggleInlineButton)
3
+ // ===================================
4
+ // Las variantes se generan a partir de los mismos tokens CSS
5
+ // que usa el resto del design system (globals.scss).
6
+ // Para un rebranding basta con cambiar las variables --primary,
7
+ // --secondary, etc. en globals.scss; este archivo no requiere tocase.
8
+ //
9
+ // Clases de PrimeReact relevantes:
10
+ // .p-selectbutton → contenedor raíz
11
+ // .p-button → cada opción
12
+ // .p-highlight → opción seleccionada
13
+ // .p-focus → opción con foco
14
+ // .p-disabled → opción deshabilitada
15
+ // ===================================
16
+ @use "sass:map";
17
+
18
+ // ===================================
19
+ // MIXIN PRINCIPAL
20
+ // ===================================
21
+
22
+ // Genera los estilos para una variante del SelectButton.
23
+ // Los botones sin seleccionar tienen estilo outlined;
24
+ // los seleccionados (.p-highlight) tienen estilo sólido.
25
+ @mixin selectbutton-variant($color, $text-color: #ffffff) {
26
+ // ---------- Opción NO seleccionada ----------
27
+ .p-button {
28
+ background-color: transparent;
29
+ border-color: var(#{$color});
30
+ color: var(#{$color});
31
+ transition:
32
+ background-color 0.2s,
33
+ border-color 0.2s,
34
+ color 0.2s,
35
+ box-shadow 0.2s;
36
+
37
+ &:not(.p-disabled):not(.p-highlight):hover {
38
+ background-color: color-mix(in oklch, var(#{$color}), transparent 88%);
39
+ border-color: color-mix(in oklch, var(#{$color}), black 10%);
40
+ color: color-mix(in oklch, var(#{$color}), black 10%);
41
+ }
42
+
43
+ // ---------- Opción SELECCIONADA ----------
44
+ &.p-highlight {
45
+ background-color: var(#{$color});
46
+ border-color: var(#{$color});
47
+ color: $text-color;
48
+
49
+ &:not(.p-disabled):hover {
50
+ background-color: color-mix(in oklch, var(#{$color}), black 10%);
51
+ border-color: color-mix(in oklch, var(#{$color}), black 10%);
52
+ }
53
+ }
54
+
55
+ // ---------- Foco ----------
56
+ &.p-focus {
57
+ box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(#{$color}) 40%, transparent);
58
+ }
59
+
60
+ // ---------- Deshabilitado ----------
61
+ &.p-disabled {
62
+ opacity: 0.6;
63
+ }
64
+ }
65
+ }
66
+
67
+ // ===================================
68
+ // VARIANTES (mismo mapa que buttons.scss)
69
+ // ===================================
70
+
71
+ $selectbutton-variants: (
72
+ primary: (
73
+ color: --primary,
74
+ text: var(--primary-foreground),
75
+ ),
76
+ secondary: (
77
+ color: --secondary,
78
+ text: var(--secondary-foreground),
79
+ ),
80
+ accent: (
81
+ color: --accent,
82
+ text: var(--accent-foreground),
83
+ ),
84
+ success: (
85
+ color: --success,
86
+ text: var(--success-foreground),
87
+ ),
88
+ warning: (
89
+ color: --warning,
90
+ text: var(--warning-foreground),
91
+ ),
92
+ error: (
93
+ color: --error,
94
+ text: var(--error-foreground),
95
+ ),
96
+ info: (
97
+ color: --info,
98
+ text: var(--info-foreground),
99
+ ),
100
+ "gray": (
101
+ color: --bluegray-500,
102
+ text: #ffffff,
103
+ ),
104
+ );
105
+
106
+ @each $name, $cfg in $selectbutton-variants {
107
+ .p-selectbutton-#{$name} {
108
+ @include selectbutton-variant(map.get($cfg, "color"), map.get($cfg, "text"));
109
+ }
110
+ }
@@ -0,0 +1,177 @@
1
+ @use "sass:map";
2
+
3
+ // ===================================
4
+ // SELECT (react-select wrapper)
5
+ // ===================================
6
+ // Este archivo centraliza el branding del componente Select.
7
+ // Para rebranding basta con cambiar los tokens en globals.scss.
8
+
9
+ $select-variants: (
10
+ "primary": (
11
+ color: --primary,
12
+ text: --primary-foreground,
13
+ ),
14
+ "secondary": (
15
+ color: --secondary,
16
+ text: --secondary-foreground,
17
+ ),
18
+ "accent": (
19
+ color: --accent,
20
+ text: --accent-foreground,
21
+ ),
22
+ "success": (
23
+ color: --success,
24
+ text: --success-foreground,
25
+ ),
26
+ "warning": (
27
+ color: --warning,
28
+ text: --warning-foreground,
29
+ ),
30
+ "error": (
31
+ color: --error,
32
+ text: --error-foreground,
33
+ ),
34
+ "info": (
35
+ color: --info,
36
+ text: --info-foreground,
37
+ ),
38
+ "gray": (
39
+ color: --bluegray-500,
40
+ text: --primary-foreground,
41
+ ),
42
+ "danger": (
43
+ color: --error,
44
+ text: --error-foreground,
45
+ ),
46
+ );
47
+
48
+ .select-input {
49
+ --select-accent: var(--primary);
50
+ --select-accent-foreground: var(--primary-foreground);
51
+ --select-border: var(--border);
52
+ --select-surface: var(--card);
53
+ --select-muted: var(--muted-foreground);
54
+ --select-text: var(--foreground);
55
+ }
56
+
57
+ @each $name, $cfg in $select-variants {
58
+ .select-input.select-variant-#{$name} {
59
+ --select-accent: var(#{map.get($cfg, "color")});
60
+ --select-accent-foreground: var(#{map.get($cfg, "text")});
61
+ }
62
+ }
63
+
64
+ .select-input .react-select__control {
65
+ min-height: 48px;
66
+ border-radius: 6px;
67
+ border-color: var(--select-border);
68
+ background-color: var(--input);
69
+ box-shadow: none;
70
+ transition:
71
+ border-color 0.2s ease,
72
+ box-shadow 0.2s ease,
73
+ background-color 0.2s ease;
74
+
75
+ &:hover {
76
+ border-color: color-mix(in oklch, var(--select-accent), black 12%);
77
+ }
78
+ }
79
+
80
+ .select-input .react-select__control--is-focused {
81
+ border-color: var(--select-accent);
82
+ box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--select-accent) 35%, transparent);
83
+ }
84
+
85
+ .select-input .react-select__value-container,
86
+ .select-input .react-select__indicators {
87
+ min-height: 48px;
88
+ }
89
+
90
+ .select-input .react-select__placeholder {
91
+ color: var(--select-muted);
92
+ display: flex;
93
+ align-items: center;
94
+ height: 100%;
95
+ }
96
+
97
+ .select-input .react-select__single-value {
98
+ color: var(--select-text);
99
+ }
100
+
101
+ .select-input .react-select__indicator {
102
+ color: color-mix(in oklch, var(--select-accent), black 20%);
103
+ }
104
+
105
+ .select-input .react-select__indicator:hover {
106
+ color: color-mix(in oklch, var(--select-accent), black 30%);
107
+ }
108
+
109
+ .select-input .react-select__indicator-separator {
110
+ background-color: color-mix(in oklch, var(--select-border), black 10%);
111
+ }
112
+
113
+ .select-input .react-select__control--is-disabled {
114
+ background-color: color-mix(in oklch, var(--muted), white 15%);
115
+ border-color: color-mix(in oklch, var(--select-border), black 5%);
116
+ opacity: 0.8;
117
+ cursor: not-allowed;
118
+ }
119
+
120
+ .select-input.select-invalid .react-select__control,
121
+ .select-input.select-invalid .react-select__control:hover {
122
+ border-color: var(--error);
123
+ }
124
+
125
+ .select-input.select-invalid .react-select__control--is-focused {
126
+ border-color: var(--error);
127
+ box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--error) 35%, transparent);
128
+ }
129
+
130
+ .react-select__menu,
131
+ .react-select__menu-portal .react-select__menu {
132
+ border: 1px solid color-mix(in oklch, var(--select-accent, var(--primary)), black 8%);
133
+ border-radius: 12px;
134
+ background-color: var(--select-surface, var(--card));
135
+ box-shadow:
136
+ 0 10px 24px color-mix(in srgb, var(--select-accent, var(--primary)) 14%, transparent),
137
+ 0 2px 8px rgba(0, 0, 0, 0.12);
138
+ overflow: hidden;
139
+ }
140
+
141
+ .react-select__menu-list,
142
+ .react-select__menu-portal .react-select__menu-list {
143
+ padding: 0.35rem;
144
+ }
145
+
146
+ .react-select__option,
147
+ .react-select__menu-portal .react-select__option {
148
+ border-radius: 8px;
149
+ margin-bottom: 2px;
150
+ transition:
151
+ background-color 0.18s ease,
152
+ color 0.18s ease;
153
+ }
154
+
155
+ .react-select__option--is-focused,
156
+ .react-select__menu-portal .react-select__option--is-focused {
157
+ background-color: color-mix(in oklch, var(--select-accent, var(--primary)), transparent 88%);
158
+ color: color-mix(in oklch, var(--select-accent, var(--primary)), black 20%);
159
+ }
160
+
161
+ .react-select__option--is-selected,
162
+ .react-select__menu-portal .react-select__option--is-selected {
163
+ background-color: var(--select-accent, var(--primary));
164
+ color: var(--select-accent-foreground, var(--primary-foreground));
165
+ }
166
+
167
+ .react-select__option--is-selected.react-select__option--is-focused,
168
+ .react-select__menu-portal .react-select__option--is-selected.react-select__option--is-focused {
169
+ background-color: color-mix(in oklch, var(--select-accent, var(--primary)), black 12%);
170
+ }
171
+
172
+ .react-select__no-options-message,
173
+ .react-select__loading-message,
174
+ .react-select__menu-portal .react-select__no-options-message,
175
+ .react-select__menu-portal .react-select__loading-message {
176
+ color: var(--select-muted, var(--muted-foreground));
177
+ }