@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 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 directamente:
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 "@robosophy/prime-theme/prime-layers.css";
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 archivo `prime-layers.css` configura los CSS Cascade Layers automáticamente, permitiendo que los estilos de tu aplicación sobrescriban los del design system si es necesario.
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 `layers.css` en tu aplicación:
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
- Los estilos están organizados en layers para permitir que las aplicaciones sobrescriban los estilos del design system:
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" (mayor prioridad) ← Design system de Robosophy
79
- Sin layer (máxima prioridad) ← Estilos de tu aplicación
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. `prime-layers.css` (o `prime.css` en React) ya importa los tokens y no es necesario duplicarlos.
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-layers.css`: para aplicaciones Vue. Configura los layers e importa los estilos del design system.
106
- - `prime.css`: archivo base con los estilos del design system. Para Vue, usa `prime-layers.css`. Para React, úsalo en tu archivo `layers.css` local como se muestra arriba.
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
 
@@ -1,15 +1,15 @@
1
1
  /* AUTO-GENERATED FILE. DO NOT EDIT MANUALLY. */
2
2
  /*
3
- * Robosophy Prime Theme - Vue Layer Configuration
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
- * Este archivo configura los CSS Cascade Layers para aplicaciones Vue.
6
- * Importa este archivo en lugar de prime.css directamente.
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
- * Jerarquía de layers:
9
- * - prime-base: reservado para futuras extensiones
10
- * - prime-design: estilos del design system de Robosophy
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. Todos los estilos están en @layer prime-design
15
- * para permitir que las aplicaciones sobrescriban estos estilos si es necesario.
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: 'Material Symbols Outlined';
363
- content: 'visibility_off';
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: 'Material Symbols Outlined';
369
- content: 'visibility';
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
- font-family: 'Material Symbols Outlined';
375
- content: 'keyboard_arrow_down';
383
+ content: "keyboard_arrow_down";
376
384
  }
377
- .pi-check::before {
378
- font-family: 'Material Symbols Outlined';
379
- content: 'check';
385
+ .pi-chevron-up::before {
386
+ content: "keyboard_arrow_up";
380
387
  }
381
- /* Vue: .p-iconfield | React: .p-icon-field */
382
- .p-iconfield, .p-icon-field {
383
- margin-top: 0;
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-cascade-select-label, .p-multiselect-label, .p-multi-select-label, .p-autocomplete-multiple-container)) {
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=both) */
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-cascade-select-label.p-inputtext,
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: .p-cascadeselect=React, .p-cascade-select=Vue) */
547
- .p-cascadeselect, .p-cascade-select {
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 16px;
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, .p-cascade-select-sm {
635
+ .p-cascadeselect-sm {
568
636
  height: 36px;
569
637
  font-size: 14px;
570
638
  }
571
- .p-cascadeselect-label, .p-cascade-select-label {
639
+ .p-cascadeselect-label {
572
640
  align-self: center;
573
641
  border: none;
574
642
  background: transparent;
575
643
  }
576
- .p-cascadeselect-label-container,
577
- .p-cascade-select-label-container,
578
- .p-cascadeselect-trigger,
579
- .p-cascade-select-trigger {
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 16px;
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, .p-multi-select-sm {
665
+ .p-multiselect-sm {
605
666
  height: 36px;
606
667
  font-size: 14px;
607
668
  }
608
- .p-multiselect-label, .p-multi-select-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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robosophy/prime-theme",
3
- "version": "3.0.1",
3
+ "version": "3.1.1",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",