@robosophy/prime-theme 3.0.1 → 3.1.1
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.
- package/README.md +48 -10
- package/dist/prime-layers.css +9 -9
- package/dist/prime.css +196 -66
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Preset y overrides de tema para PrimeVue y PrimeReact de Robosophy.
|
|
4
4
|
|
|
5
|
+
`prime.css` importa los tokens y coloca los overrides de Robosophy en `prime-design`. No configura las layers del framework ni las de la aplicación: cada consumidor define el orden para que el CSS base de Prime quede primero, los overrides de Robosophy después y los estilos propios de la app (sin layer) puedan sobrescribir ambos.
|
|
6
|
+
|
|
5
7
|
Este paquete instala `@robosophy/tokens` como dependencia. Por eso, al instalar `@robosophy/prime-theme` tambien queda disponible el contexto de tokens para desarrolladores y agentes de IA:
|
|
6
8
|
|
|
7
9
|
- `node_modules/@robosophy/tokens/AGENTS.md`
|
|
@@ -19,21 +21,57 @@ npm install @robosophy/prime-theme primereact
|
|
|
19
21
|
|
|
20
22
|
## Uso con Vue
|
|
21
23
|
|
|
22
|
-
Vue usa `@primeuix/themes` para aplicar el preset
|
|
24
|
+
Vue usa `@primeuix/themes` para aplicar el preset. La app consumidora es responsable de definir el orden de layers y de habilitar la layer runtime de PrimeVue. Importa `prime.css` desde el CSS de la app, después de declarar el orden:
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
/* src/layers.css */
|
|
28
|
+
@layer primevue, prime-base, prime-design;
|
|
29
|
+
@import "@robosophy/prime-theme/prime.css";
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Registra PrimeVue y su preset en la app:
|
|
23
33
|
|
|
24
34
|
```ts
|
|
25
35
|
import PrimeVue from "primevue/config";
|
|
26
36
|
import RobosophyPreset from "@robosophy/prime-theme";
|
|
27
|
-
import "
|
|
37
|
+
import "./layers.css";
|
|
28
38
|
|
|
29
39
|
app.use(PrimeVue, {
|
|
30
40
|
theme: {
|
|
31
41
|
preset: RobosophyPreset,
|
|
42
|
+
options: {
|
|
43
|
+
cssLayer: {
|
|
44
|
+
name: "primevue",
|
|
45
|
+
order: "primevue, prime-base, prime-design",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
32
48
|
},
|
|
33
49
|
});
|
|
34
50
|
```
|
|
35
51
|
|
|
36
|
-
El
|
|
52
|
+
El orden es `primevue` (estilos runtime de PrimeVue), `prime-base` (reservado para un tema base adicional) y `prime-design` (overrides de Robosophy). Los estilos de la aplicación que no estén en una layer tienen mayor prioridad. Prime Theme no incluye ni configura los estilos runtime de PrimeVue: eso queda a cargo de la app.
|
|
53
|
+
|
|
54
|
+
### Vue con Tailwind CSS v4
|
|
55
|
+
|
|
56
|
+
Tailwind v4 define `theme`, `base`, `components` y `utilities`. Si se importa junto con PrimeVue, declara el orden global completo para que el reset de `base` no prevalezca sobre los estilos de PrimeVue:
|
|
57
|
+
|
|
58
|
+
```css
|
|
59
|
+
/* src/layers.css */
|
|
60
|
+
@layer theme, base, primevue, prime-base, prime-design, components, utilities;
|
|
61
|
+
@import "tailwindcss";
|
|
62
|
+
@import "@robosophy/prime-theme/prime.css";
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Usa exactamente el mismo orden en la configuración de PrimeVue:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
cssLayer: {
|
|
69
|
+
name: "primevue",
|
|
70
|
+
order: "theme, base, primevue, prime-base, prime-design, components, utilities",
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Esto mantiene los estilos runtime de PrimeVue y los overrides de Robosophy por encima del reset de Tailwind, y deja las utilidades de Tailwind con prioridad para ajustes locales. Sin Tailwind, basta el orden corto documentado arriba.
|
|
37
75
|
|
|
38
76
|
## Uso con React
|
|
39
77
|
|
|
@@ -41,7 +79,7 @@ PrimeReact 10 no usa `@primeuix/themes` como Vue. En su lugar, usa un sistema de
|
|
|
41
79
|
|
|
42
80
|
### Configuración de layers
|
|
43
81
|
|
|
44
|
-
Crea un archivo `
|
|
82
|
+
Crea un archivo CSS de tema en tu aplicación. El tema base de PrimeReact va en `prime-base`; `prime.css` de Robosophy aporta sus reglas en `prime-design`:
|
|
45
83
|
|
|
46
84
|
```css
|
|
47
85
|
/* layers.css */
|
|
@@ -71,12 +109,12 @@ Solo `fluent-light` es compatible con los overrides de Robosophy.
|
|
|
71
109
|
|
|
72
110
|
### CSS Cascade Layers
|
|
73
111
|
|
|
74
|
-
|
|
112
|
+
La app consumidora controla el orden de las layers:
|
|
75
113
|
|
|
76
114
|
```
|
|
77
115
|
Layer "prime-base" (menor prioridad) ← Tema base de PrimeReact (fluent-light)
|
|
78
|
-
Layer "prime-design"
|
|
79
|
-
Sin layer (
|
|
116
|
+
Layer "prime-design" ← Overrides de Prime Theme
|
|
117
|
+
Sin layer (mayor prioridad) ← Estilos de la aplicación consumidora
|
|
80
118
|
```
|
|
81
119
|
|
|
82
120
|
Si necesitas sobrescribir estilos del design system en tu aplicación, simplemente escribe tus estilos CSS sin usar `@layer`. Estos tendrán mayor prioridad que los estilos de `prime-design`.
|
|
@@ -96,14 +134,14 @@ Ejemplo:
|
|
|
96
134
|
|
|
97
135
|
## Notas importantes
|
|
98
136
|
|
|
99
|
-
No importes `@robosophy/tokens/tokens.css` por separado en apps con PrimeVue o PrimeReact
|
|
137
|
+
No importes `@robosophy/tokens/tokens.css` por separado en apps con PrimeVue o PrimeReact cuando ya importas `prime.css`: ese archivo ya incluye los tokens.
|
|
100
138
|
|
|
101
139
|
Si tambien usas `@robosophy/ui-vue` o `@robosophy/ui-react`, importa este preset y los archivos CSS una sola vez en la app. Los componentes usan las mismas variables `--rs-*`.
|
|
102
140
|
|
|
103
141
|
### Archivos CSS disponibles
|
|
104
142
|
|
|
105
|
-
- `prime
|
|
106
|
-
- `prime.css`:
|
|
143
|
+
- `prime.css`: importa los tokens y contiene los overrides de Robosophy en `prime-design`. Impórtalo desde el CSS de la app después de declarar el orden de layers.
|
|
144
|
+
- `prime-layers.css`: entry de compatibilidad compartido que importa `prime.css`; no configura las layers runtime de PrimeVue ni el orden global. Las apps nuevas deberían declarar sus layers localmente, sea Vue o React.
|
|
107
145
|
|
|
108
146
|
### Compatibilidad de navegadores
|
|
109
147
|
|
package/dist/prime-layers.css
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/* AUTO-GENERATED FILE. DO NOT EDIT MANUALLY. */
|
|
2
2
|
/*
|
|
3
|
-
* Robosophy Prime Theme
|
|
3
|
+
* Robosophy Prime Theme — CSS Cascade Layers para PrimeVue y PrimeReact.
|
|
4
|
+
* Este entry importa prime.css, que aporta los overrides de Robosophy en
|
|
5
|
+
* prime-design. La app consumidora define el orden de las layers del framework:
|
|
4
6
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
+
* - primevue: estilos runtime de PrimeVue (configurados por la app)
|
|
8
|
+
* - prime-base: tema base de PrimeReact o tema base opcional de la app
|
|
9
|
+
* - prime-design: overrides de Robosophy importados desde prime.css
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Los estilos de la aplicación que NO estén en un layer tendrán mayor
|
|
13
|
-
* prioridad y podrán sobrescribir los estilos de prime-design.
|
|
11
|
+
* Los estilos propios de la app sin layer tienen mayor prioridad y pueden
|
|
12
|
+
* sobrescribir las capas anteriores. Este archivo no configura el runtime
|
|
13
|
+
* de PrimeVue ni el orden global de las layers.
|
|
14
14
|
*/
|
|
15
15
|
@import "./prime.css";
|
package/dist/prime.css
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* propio sistema de temas CSS (resources/themes/fluent-light/). Las reglas
|
|
12
12
|
* de clase que usan var(--rs-*) directamente funcionan en ambos frameworks.
|
|
13
13
|
*
|
|
14
|
-
* Este archivo usa CSS Cascade Layers.
|
|
15
|
-
*
|
|
14
|
+
* Este archivo usa CSS Cascade Layers. Los overrides están en @layer
|
|
15
|
+
* prime-design; la capa runtime de PrimeVue se configura en la aplicación.
|
|
16
16
|
*/
|
|
17
17
|
@import "@robosophy/tokens/tokens.css";
|
|
18
18
|
|
|
@@ -358,32 +358,103 @@
|
|
|
358
358
|
align-items: center;
|
|
359
359
|
justify-content: center;
|
|
360
360
|
}
|
|
361
|
+
/* Vue: .p-iconfield | React: .p-icon-field */
|
|
362
|
+
.p-iconfield, .p-icon-field {
|
|
363
|
+
margin-top: 0;
|
|
364
|
+
}
|
|
365
|
+
/* Icon overrides (both) - Use Material Symbols instead of PrimeIcons */
|
|
361
366
|
.pi-eye::before {
|
|
362
|
-
font-family:
|
|
363
|
-
content:
|
|
367
|
+
font-family: "Material Symbols Outlined";
|
|
368
|
+
content: "visibility_off";
|
|
364
369
|
color: var(--rs-color-text-primary);
|
|
365
370
|
cursor: pointer;
|
|
366
371
|
}
|
|
367
372
|
.pi-eye-slash::before {
|
|
368
|
-
font-family:
|
|
369
|
-
content:
|
|
373
|
+
font-family: "Material Symbols Outlined";
|
|
374
|
+
content: "visibility";
|
|
370
375
|
color: var(--rs-color-text-primary);
|
|
371
376
|
cursor: pointer;
|
|
372
377
|
}
|
|
378
|
+
.pi-chevron-down::before,
|
|
379
|
+
.pi-chevron-up::before {
|
|
380
|
+
font-family: "Material Symbols Outlined";
|
|
381
|
+
}
|
|
373
382
|
.pi-chevron-down::before {
|
|
374
|
-
|
|
375
|
-
content: 'keyboard_arrow_down';
|
|
383
|
+
content: "keyboard_arrow_down";
|
|
376
384
|
}
|
|
377
|
-
.pi-
|
|
378
|
-
|
|
379
|
-
content: 'check';
|
|
385
|
+
.pi-chevron-up::before {
|
|
386
|
+
content: "keyboard_arrow_up";
|
|
380
387
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
388
|
+
.pi-check::before {
|
|
389
|
+
font-family: "Material Symbols Outlined";
|
|
390
|
+
content: "check";
|
|
384
391
|
}
|
|
385
392
|
/* #endregion */
|
|
386
393
|
|
|
394
|
+
/* PrimeVue 4 - Dropdown icon rotation */
|
|
395
|
+
.p-select .p-select-dropdown-icon,
|
|
396
|
+
.p-cascadeselect .p-cascadeselect-dropdown-icon,
|
|
397
|
+
.p-multiselect .p-multiselect-dropdown-icon {
|
|
398
|
+
transition: transform 0.2s ease;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.p-select-open .p-select-dropdown-icon,
|
|
402
|
+
.p-cascadeselect-open .p-cascadeselect-dropdown-icon,
|
|
403
|
+
.p-multiselect-open .p-multiselect-dropdown-icon {
|
|
404
|
+
transform: rotate(180deg);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* PrimeReact - Dropdown CSS chevron stays mounted so its rotation can animate */
|
|
408
|
+
.p-dropdown .p-dropdown-trigger {
|
|
409
|
+
align-items: center;
|
|
410
|
+
}
|
|
411
|
+
.p-dropdown .p-dropdown-trigger > svg.p-dropdown-trigger-icon {
|
|
412
|
+
display: none !important;
|
|
413
|
+
}
|
|
414
|
+
/* PrimeReact - Dropdown CSS chevron only draws when the default icon slot exists.
|
|
415
|
+
With a custom dropdownIcon the icon has no .p-dropdown-trigger-icon class, so the
|
|
416
|
+
::after is suppressed and no duplicate arrow appears. Same when PrimeReact swaps
|
|
417
|
+
the default icon for a loading spinner. */
|
|
418
|
+
.p-dropdown .p-dropdown-trigger:has(> .p-dropdown-trigger-icon)::after {
|
|
419
|
+
border: solid currentColor;
|
|
420
|
+
border-width: 0 1.5px 1.5px 0;
|
|
421
|
+
content: "";
|
|
422
|
+
height: 8px;
|
|
423
|
+
transform: translateY(-2px) rotate(45deg);
|
|
424
|
+
transition: transform 0.2s ease;
|
|
425
|
+
width: 8px;
|
|
426
|
+
}
|
|
427
|
+
.p-dropdown .p-dropdown-trigger:has(> .p-dropdown-trigger-icon)[aria-expanded="true"]::after {
|
|
428
|
+
transform: translateY(2px) rotate(225deg);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* PrimeReact - CascadeSelect and MultiSelect: hide default chevron SVG icons and use CSS ::after chevron.
|
|
432
|
+
Same pattern as Dropdown above — keeps icon style consistent across all select components,
|
|
433
|
+
supports animation on open, and avoids duplicate arrows with custom icons or loading spinners. */
|
|
434
|
+
.p-cascadeselect .p-cascadeselect-trigger > svg.p-cascadeselect-trigger-icon,
|
|
435
|
+
.p-multiselect .p-multiselect-trigger > svg.p-multiselect-trigger-icon:not(.p-icon-spin) {
|
|
436
|
+
display: none !important;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.p-cascadeselect .p-cascadeselect-trigger:has(> svg.p-cascadeselect-trigger-icon)::after,
|
|
440
|
+
.p-multiselect .p-multiselect-trigger:has(> svg.p-multiselect-trigger-icon:not(.p-icon-spin))::after {
|
|
441
|
+
border: solid currentColor;
|
|
442
|
+
border-width: 0 1.5px 1.5px 0;
|
|
443
|
+
content: "";
|
|
444
|
+
height: 8px;
|
|
445
|
+
transform: translateY(-2px) rotate(45deg);
|
|
446
|
+
transition: transform 0.2s ease;
|
|
447
|
+
width: 8px;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.p-cascadeselect .p-cascadeselect-trigger:has(> svg.p-cascadeselect-trigger-icon)[aria-expanded="true"]::after {
|
|
451
|
+
transform: translateY(2px) rotate(225deg);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.p-multiselect:has(input[aria-expanded="true"]) .p-multiselect-trigger:has(> svg.p-multiselect-trigger-icon:not(.p-icon-spin))::after {
|
|
455
|
+
transform: translateY(2px) rotate(225deg);
|
|
456
|
+
}
|
|
457
|
+
|
|
387
458
|
/* #region classes */
|
|
388
459
|
/* password (both) */
|
|
389
460
|
.p-password {
|
|
@@ -393,7 +464,7 @@
|
|
|
393
464
|
width: 100%;
|
|
394
465
|
}
|
|
395
466
|
/* input (both) */
|
|
396
|
-
.p-inputtext:not(:where(.p-inputtextarea, .p-dropdown-label, .p-select-label, .p-cascadeselect-label, .p-
|
|
467
|
+
.p-inputtext:not(:where(.p-inputtextarea, .p-dropdown-label, .p-select-label, .p-cascadeselect-label, .p-multiselect-label, .p-autocomplete-multiple-container)) {
|
|
397
468
|
font-weight: var(--p-inputtext-font-weight);
|
|
398
469
|
height: 48px;
|
|
399
470
|
font-size: 16px;
|
|
@@ -450,12 +521,10 @@
|
|
|
450
521
|
.p-password.p-invalid.p-component > .p-inputtext {
|
|
451
522
|
border-color: var(--rs-color-stroke-error) !important;
|
|
452
523
|
}
|
|
453
|
-
.p-cascadeselect.p-invalid.p-component
|
|
454
|
-
.p-cascade-select.p-invalid.p-component {
|
|
524
|
+
.p-cascadeselect.p-invalid.p-component {
|
|
455
525
|
border-color: var(--rs-color-stroke-error) !important;
|
|
456
526
|
}
|
|
457
|
-
.p-multiselect.p-invalid.p-component
|
|
458
|
-
.p-multi-select.p-invalid.p-component {
|
|
527
|
+
.p-multiselect.p-invalid.p-component {
|
|
459
528
|
border-color: var(--rs-color-stroke-error) !important;
|
|
460
529
|
}
|
|
461
530
|
/* disabled states (both) */
|
|
@@ -477,23 +546,19 @@
|
|
|
477
546
|
background: var(--rs-color-background-disabled) !important;
|
|
478
547
|
color: var(--rs-color-text-secondary) !important;
|
|
479
548
|
}
|
|
480
|
-
.p-cascadeselect.p-disabled
|
|
481
|
-
.p-cascade-select.p-disabled {
|
|
549
|
+
.p-cascadeselect.p-disabled {
|
|
482
550
|
background: var(--rs-color-background-disabled) !important;
|
|
483
551
|
}
|
|
484
|
-
.p-cascadeselect.p-disabled .p-cascadeselect-label
|
|
485
|
-
.p-cascade-select.p-disabled .p-cascade-select-label {
|
|
552
|
+
.p-cascadeselect.p-disabled .p-cascadeselect-label {
|
|
486
553
|
color: var(--rs-color-text-secondary) !important;
|
|
487
554
|
}
|
|
488
|
-
.p-multiselect.p-disabled
|
|
489
|
-
.p-multi-select.p-disabled {
|
|
555
|
+
.p-multiselect.p-disabled {
|
|
490
556
|
background: var(--rs-color-background-disabled) !important;
|
|
491
557
|
}
|
|
492
|
-
.p-multiselect.p-disabled .p-multiselect-label
|
|
493
|
-
.p-multi-select.p-disabled .p-multi-select-label {
|
|
558
|
+
.p-multiselect.p-disabled .p-multiselect-label {
|
|
494
559
|
color: var(--rs-color-text-secondary) !important;
|
|
495
560
|
}
|
|
496
|
-
/* select/dropdown (both: .p-select=Vue, .p-dropdown=
|
|
561
|
+
/* select/dropdown (both: .p-select=Vue, .p-dropdown=React) */
|
|
497
562
|
.p-select, .p-dropdown {
|
|
498
563
|
font-weight: var(--p-select-font-weight);
|
|
499
564
|
height: 48px;
|
|
@@ -502,8 +567,8 @@
|
|
|
502
567
|
border-radius: 6px;
|
|
503
568
|
border: 1px solid var(--rs-color-neutral-700);
|
|
504
569
|
background: var(--rs-color-neutral-50);
|
|
505
|
-
padding: 0 16px;
|
|
506
570
|
}
|
|
571
|
+
.p-select, .p-dropdown { padding: 0; }
|
|
507
572
|
.p-select:not(.p-disabled):hover,
|
|
508
573
|
.p-dropdown:not(.p-disabled):hover {
|
|
509
574
|
border-color: var(--rs-color-stroke-focused);
|
|
@@ -527,97 +592,86 @@
|
|
|
527
592
|
.p-select-label.p-inputtext,
|
|
528
593
|
.p-dropdown-label.p-inputtext,
|
|
529
594
|
.p-cascadeselect-label.p-inputtext,
|
|
530
|
-
.p-
|
|
531
|
-
.p-multiselect-label.p-inputtext,
|
|
532
|
-
.p-multi-select-label.p-inputtext {
|
|
595
|
+
.p-multiselect-label.p-inputtext {
|
|
533
596
|
height: auto;
|
|
534
597
|
line-height: 1.5;
|
|
535
598
|
border: none;
|
|
536
599
|
background: transparent;
|
|
537
600
|
}
|
|
538
|
-
/* Internal containers - remove duplicate borders
|
|
601
|
+
/* Internal containers - remove duplicate borders and padding from triggers.
|
|
602
|
+
PrimeReact (React) adds internal padding to triggers, so we reset it here
|
|
603
|
+
for both Vue and React variants. */
|
|
539
604
|
.p-select-label-container,
|
|
540
605
|
.p-dropdown-label-container,
|
|
606
|
+
.p-cascadeselect-label-container,
|
|
607
|
+
.p-multiselect-label-container,
|
|
541
608
|
.p-select-trigger,
|
|
542
|
-
.p-dropdown-trigger
|
|
609
|
+
.p-dropdown-trigger,
|
|
610
|
+
.p-cascadeselect-trigger,
|
|
611
|
+
.p-multiselect-trigger {
|
|
543
612
|
border: none;
|
|
544
613
|
background: transparent;
|
|
614
|
+
padding: 0;
|
|
545
615
|
}
|
|
546
|
-
/* cascadeselect (both
|
|
547
|
-
.p-cascadeselect
|
|
616
|
+
/* cascadeselect (both) */
|
|
617
|
+
.p-cascadeselect {
|
|
548
618
|
height: 48px;
|
|
549
619
|
font-size: 16px;
|
|
550
620
|
gap: 8px;
|
|
551
621
|
border-radius: 6px;
|
|
552
622
|
border: 1px solid var(--rs-color-neutral-700);
|
|
553
623
|
background: var(--rs-color-neutral-50);
|
|
554
|
-
padding: 0
|
|
624
|
+
padding: 0;
|
|
555
625
|
}
|
|
556
|
-
.p-cascadeselect:not(.p-disabled):hover
|
|
557
|
-
.p-cascade-select:not(.p-disabled):hover {
|
|
626
|
+
.p-cascadeselect:not(.p-disabled):hover {
|
|
558
627
|
border-color: var(--rs-color-stroke-focused);
|
|
559
628
|
}
|
|
560
|
-
.p-cascadeselect:not(.p-disabled).p-focus
|
|
561
|
-
.p-cascade-select:not(.p-disabled).p-focus {
|
|
629
|
+
.p-cascadeselect:not(.p-disabled).p-focus {
|
|
562
630
|
outline: none;
|
|
563
631
|
border-color: var(--rs-color-stroke-focused);
|
|
564
632
|
box-shadow: none;
|
|
565
633
|
}
|
|
566
634
|
/* Vue-only: PrimeReact 10 no emite clases de tamaño para CascadeSelect */
|
|
567
|
-
.p-cascadeselect-sm
|
|
635
|
+
.p-cascadeselect-sm {
|
|
568
636
|
height: 36px;
|
|
569
637
|
font-size: 14px;
|
|
570
638
|
}
|
|
571
|
-
.p-cascadeselect-label
|
|
639
|
+
.p-cascadeselect-label {
|
|
572
640
|
align-self: center;
|
|
573
641
|
border: none;
|
|
574
642
|
background: transparent;
|
|
575
643
|
}
|
|
576
|
-
|
|
577
|
-
.p-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
border: none;
|
|
581
|
-
background: transparent;
|
|
582
|
-
}
|
|
583
|
-
/* multiselect (both: .p-multiselect=React, .p-multi-select=Vue) */
|
|
584
|
-
.p-multiselect, .p-multi-select {
|
|
644
|
+
/* multiselect (both) */
|
|
645
|
+
.p-multiselect {
|
|
646
|
+
display: flex;
|
|
647
|
+
align-items: center;
|
|
585
648
|
height: 48px;
|
|
586
649
|
font-size: 16px;
|
|
587
650
|
gap: 8px;
|
|
588
651
|
border-radius: 6px;
|
|
589
652
|
border: 1px solid var(--rs-color-neutral-700);
|
|
590
653
|
background: var(--rs-color-neutral-50);
|
|
591
|
-
padding: 0
|
|
654
|
+
padding: 0;
|
|
592
655
|
}
|
|
593
|
-
.p-multiselect:not(.p-disabled):hover
|
|
594
|
-
.p-multi-select:not(.p-disabled):hover {
|
|
656
|
+
.p-multiselect:not(.p-disabled):hover {
|
|
595
657
|
border-color: var(--rs-color-stroke-focused);
|
|
596
658
|
}
|
|
597
|
-
.p-multiselect:not(.p-disabled).p-focus
|
|
598
|
-
.p-multi-select:not(.p-disabled).p-focus {
|
|
659
|
+
.p-multiselect:not(.p-disabled).p-focus {
|
|
599
660
|
outline: none;
|
|
600
661
|
border-color: var(--rs-color-stroke-focused);
|
|
601
662
|
box-shadow: none;
|
|
602
663
|
}
|
|
603
664
|
/* Vue-only: PrimeReact 10 no emite clases de tamaño para MultiSelect */
|
|
604
|
-
.p-multiselect-sm
|
|
665
|
+
.p-multiselect-sm {
|
|
605
666
|
height: 36px;
|
|
606
667
|
font-size: 14px;
|
|
607
668
|
}
|
|
608
|
-
.p-multiselect-label
|
|
669
|
+
.p-multiselect-label {
|
|
609
670
|
align-self: center;
|
|
610
671
|
line-height: normal;
|
|
611
672
|
border: none;
|
|
612
673
|
background: transparent;
|
|
613
674
|
}
|
|
614
|
-
.p-multiselect-label-container,
|
|
615
|
-
.p-multi-select-label-container,
|
|
616
|
-
.p-multiselect-trigger,
|
|
617
|
-
.p-multi-select-trigger {
|
|
618
|
-
border: none;
|
|
619
|
-
background: transparent;
|
|
620
|
-
}
|
|
621
675
|
/* autocomplete (Vue-only: :has(.p-autocomplete-input) targets Vue's structure, not React's) */
|
|
622
676
|
.p-autocomplete:has(.p-autocomplete-input) {
|
|
623
677
|
height: 48px;
|
|
@@ -988,6 +1042,27 @@
|
|
|
988
1042
|
border-color: transparent;
|
|
989
1043
|
color: var(--rs-color-severity-danger-icon);
|
|
990
1044
|
}
|
|
1045
|
+
/* Link buttons (both): text-style buttons with a persistent underline and no surface. */
|
|
1046
|
+
.p-button.p-button-link,
|
|
1047
|
+
.p-button.p-button-link:not(:disabled):hover,
|
|
1048
|
+
.p-button.p-button-link:not(:disabled):active,
|
|
1049
|
+
.p-button.p-button-link:focus-visible,
|
|
1050
|
+
.p-button-group .p-button.p-button-link,
|
|
1051
|
+
.p-button-group .p-button.p-button-link:not(:disabled):hover,
|
|
1052
|
+
.p-button-group .p-button.p-button-link:not(:disabled):active,
|
|
1053
|
+
.p-splitbutton .p-button.p-button-link,
|
|
1054
|
+
.p-splitbutton .p-button.p-button-link:not(:disabled):hover,
|
|
1055
|
+
.p-splitbutton .p-button.p-button-link:not(:disabled):active,
|
|
1056
|
+
.p-fileupload-choose.p-button-link,
|
|
1057
|
+
.p-fileupload-choose.p-button-link:not(:disabled):hover,
|
|
1058
|
+
.p-fileupload-choose.p-button-link:not(:disabled):active {
|
|
1059
|
+
background: transparent;
|
|
1060
|
+
border-color: transparent;
|
|
1061
|
+
}
|
|
1062
|
+
.p-button.p-button-link .p-button-label {
|
|
1063
|
+
text-decoration: underline;
|
|
1064
|
+
text-underline-offset: 2px;
|
|
1065
|
+
}
|
|
991
1066
|
.p-button > .icon-container {
|
|
992
1067
|
line-height: 0;
|
|
993
1068
|
}
|
|
@@ -1129,4 +1204,59 @@
|
|
|
1129
1204
|
margin-block: 0;
|
|
1130
1205
|
right: 0;
|
|
1131
1206
|
}
|
|
1207
|
+
|
|
1208
|
+
/* Link button colors stay in prime-design so unlayered app styles can override them. */
|
|
1209
|
+
.p-button.p-button-link,
|
|
1210
|
+
:is(.p-button-group, .p-splitbutton) > .p-button.p-button-link,
|
|
1211
|
+
.p-fileupload-choose.p-button-link {
|
|
1212
|
+
color: var(--rs-color-text-button-tertiary);
|
|
1213
|
+
}
|
|
1214
|
+
.p-button.p-button-link:not(:disabled):is(:hover, :active),
|
|
1215
|
+
:is(.p-button-group, .p-splitbutton) > .p-button.p-button-link:not(:disabled):is(:hover, :active),
|
|
1216
|
+
.p-fileupload-choose.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1217
|
+
color: var(--rs-color-text-button-tertiary-hover);
|
|
1218
|
+
}
|
|
1219
|
+
:is(.p-button-group, .p-splitbutton).p-button-primary > .p-button.p-button-link {
|
|
1220
|
+
color: var(--rs-color-text-button-tertiary);
|
|
1221
|
+
}
|
|
1222
|
+
.p-button.p-button-secondary.p-button-link,
|
|
1223
|
+
:is(.p-button-group, .p-splitbutton).p-button-secondary > .p-button.p-button-link {
|
|
1224
|
+
color: var(--rs-color-severity-secondary-text);
|
|
1225
|
+
}
|
|
1226
|
+
.p-button.p-button-secondary.p-button-link:not(:disabled):is(:hover, :active),
|
|
1227
|
+
:is(.p-button-group, .p-splitbutton).p-button-secondary > .p-button.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1228
|
+
color: var(--rs-color-severity-secondary-icon);
|
|
1229
|
+
}
|
|
1230
|
+
.p-button.p-button-success.p-button-link,
|
|
1231
|
+
:is(.p-button-group, .p-splitbutton).p-button-success > .p-button.p-button-link {
|
|
1232
|
+
color: var(--rs-color-severity-success-icon);
|
|
1233
|
+
}
|
|
1234
|
+
.p-button.p-button-success.p-button-link:not(:disabled):is(:hover, :active),
|
|
1235
|
+
:is(.p-button-group, .p-splitbutton).p-button-success > .p-button.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1236
|
+
color: var(--rs-color-severity-success-text);
|
|
1237
|
+
}
|
|
1238
|
+
.p-button.p-button-info.p-button-link,
|
|
1239
|
+
:is(.p-button-group, .p-splitbutton).p-button-info > .p-button.p-button-link {
|
|
1240
|
+
color: var(--rs-color-severity-info-icon);
|
|
1241
|
+
}
|
|
1242
|
+
.p-button.p-button-info.p-button-link:not(:disabled):is(:hover, :active),
|
|
1243
|
+
:is(.p-button-group, .p-splitbutton).p-button-info > .p-button.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1244
|
+
color: var(--rs-color-severity-info-text);
|
|
1245
|
+
}
|
|
1246
|
+
.p-button:is(.p-button-warning, .p-button-warn).p-button-link,
|
|
1247
|
+
:is(.p-button-group, .p-splitbutton):is(.p-button-warning, .p-button-warn) > .p-button.p-button-link {
|
|
1248
|
+
color: var(--rs-color-severity-warning-icon);
|
|
1249
|
+
}
|
|
1250
|
+
.p-button:is(.p-button-warning, .p-button-warn).p-button-link:not(:disabled):is(:hover, :active),
|
|
1251
|
+
:is(.p-button-group, .p-splitbutton):is(.p-button-warning, .p-button-warn) > .p-button.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1252
|
+
color: var(--rs-color-severity-warning-text);
|
|
1253
|
+
}
|
|
1254
|
+
.p-button.p-button-danger.p-button-link,
|
|
1255
|
+
:is(.p-button-group, .p-splitbutton).p-button-danger > .p-button.p-button-link {
|
|
1256
|
+
color: var(--rs-color-severity-danger-icon);
|
|
1257
|
+
}
|
|
1258
|
+
.p-button.p-button-danger.p-button-link:not(:disabled):is(:hover, :active),
|
|
1259
|
+
:is(.p-button-group, .p-splitbutton).p-button-danger > .p-button.p-button-link:not(:disabled):is(:hover, :active) {
|
|
1260
|
+
color: var(--rs-color-severity-danger-text);
|
|
1261
|
+
}
|
|
1132
1262
|
}
|