@l3mpire/ui 3.3.0 → 3.5.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@l3mpire/ui",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org",
6
6
  "access": "public"
@@ -37,7 +37,7 @@
37
37
  "peerDependencies": {
38
38
  "react": ">=18",
39
39
  "react-dom": ">=18",
40
- "@l3mpire/icons": "0.6.2"
40
+ "@l3mpire/icons": "0.6.3"
41
41
  },
42
42
  "dependencies": {
43
43
  "@dnd-kit/core": "^6.3.1",
@@ -61,8 +61,8 @@
61
61
  "class-variance-authority": "^0.7",
62
62
  "clsx": "^2",
63
63
  "tailwind-merge": "^3",
64
- "@l3mpire/icons": "0.6.2",
65
- "@l3mpire/tokens": "0.14.0"
64
+ "@l3mpire/icons": "0.6.3",
65
+ "@l3mpire/tokens": "0.15.0"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@types/react": "^19",
@@ -72,7 +72,7 @@
72
72
  "tailwindcss": "^4",
73
73
  "tsup": "^8",
74
74
  "typescript": "^5",
75
- "@l3mpire/icons": "0.6.2"
75
+ "@l3mpire/icons": "0.6.3"
76
76
  },
77
77
  "scripts": {
78
78
  "build": "cp ../../USAGE.md ./USAGE.md && tsup",
@@ -75,13 +75,20 @@ body {
75
75
  --font-weight-regular: var(--font-weight-regular);
76
76
  --font-weight-medium: var(--font-weight-medium);
77
77
  --font-weight-semibold: var(--font-weight-semibold);
78
- --font-weight-bold: var(--font-weight-bold);
78
+ --font-weight-solid: var(--font-weight-solid);
79
79
 
80
80
  /* ── Shadows ───────────────────────────────────────────────────────────── */
81
81
  --shadow-sm: 0 1px 3px 0 var(--shadow-4);
82
82
  --shadow-md: 0 0 4px 0 var(--shadow-4), 0 4px 8px 0 var(--shadow-6);
83
83
  --shadow-lg: 0 0 4px 0 var(--shadow-4), 0 8px 16px 0 var(--shadow-8);
84
84
  --shadow-focus-ring: 0 0 0 3px rgba(49, 107, 255, 0.15);
85
+ /* AI-specific elevations — composed on top of the shadow tints */
86
+ --shadow-elevation-sm: 0 1px 2px var(--shadow-4), 0 1px 1px var(--shadow-2);
87
+ --shadow-elevation-md: 0 4px 12px -2px var(--shadow-6), 0 2px 4px -1px var(--shadow-4);
88
+ --shadow-elevation-lg: 0 12px 32px -8px var(--shadow-8), 0 4px 8px -2px var(--shadow-4);
89
+
90
+ /* ── AI gradient ───────────────────────────────────────────────────────── */
91
+ --background-image-ai-gradient: linear-gradient(125deg, var(--blue-500) 0%, var(--violet-500) 55%, var(--indigo-500) 100%);
85
92
 
86
93
  /* ── Colors: Semantic (shadcn compatible) ───────────────────────────────── */
87
94
  --color-background: var(--core-bg-main-primary);
@@ -180,6 +187,14 @@ body {
180
187
  --color-badge-solid-amber-text: var(--comp-badge-solid-amber-text);
181
188
  --color-badge-solid-slate-bg: var(--comp-badge-solid-slate-bg);
182
189
  --color-badge-solid-slate-text: var(--comp-badge-solid-slate-text);
190
+ --color-badge-solid-teal-bg: var(--comp-badge-solid-teal-bg);
191
+ --color-badge-solid-teal-text: var(--comp-badge-solid-teal-text);
192
+ --color-badge-solid-sky-bg: var(--comp-badge-solid-sky-bg);
193
+ --color-badge-solid-sky-text: var(--comp-badge-solid-sky-text);
194
+ --color-badge-solid-purple-bg: var(--comp-badge-solid-purple-bg);
195
+ --color-badge-solid-purple-text: var(--comp-badge-solid-purple-text);
196
+ --color-badge-solid-pink-bg: var(--comp-badge-solid-pink-bg);
197
+ --color-badge-solid-pink-text: var(--comp-badge-solid-pink-text);
183
198
  --color-badge-light-indigo-bg: var(--comp-badge-light-indigo-bg);
184
199
  --color-badge-light-indigo-text: var(--comp-badge-light-indigo-text);
185
200
  --color-badge-light-rose-bg: var(--comp-badge-light-rose-bg);
@@ -200,6 +215,14 @@ body {
200
215
  --color-badge-light-amber-text: var(--comp-badge-light-amber-text);
201
216
  --color-badge-light-slate-bg: var(--comp-badge-light-slate-bg);
202
217
  --color-badge-light-slate-text: var(--comp-badge-light-slate-text);
218
+ --color-badge-light-teal-bg: var(--comp-badge-light-teal-bg);
219
+ --color-badge-light-teal-text: var(--comp-badge-light-teal-text);
220
+ --color-badge-light-sky-bg: var(--comp-badge-light-sky-bg);
221
+ --color-badge-light-sky-text: var(--comp-badge-light-sky-text);
222
+ --color-badge-light-purple-bg: var(--comp-badge-light-purple-bg);
223
+ --color-badge-light-purple-text: var(--comp-badge-light-purple-text);
224
+ --color-badge-light-pink-bg: var(--comp-badge-light-pink-bg);
225
+ --color-badge-light-pink-text: var(--comp-badge-light-pink-text);
203
226
  --color-badge-outlined-indigo-border: var(--comp-badge-outlined-indigo-border);
204
227
  --color-badge-outlined-indigo-text: var(--comp-badge-outlined-indigo-text);
205
228
  --color-badge-outlined-rose-border: var(--comp-badge-outlined-rose-border);
@@ -220,6 +243,14 @@ body {
220
243
  --color-badge-outlined-amber-text: var(--comp-badge-outlined-amber-text);
221
244
  --color-badge-outlined-slate-border: var(--comp-badge-outlined-slate-border);
222
245
  --color-badge-outlined-slate-text: var(--comp-badge-outlined-slate-text);
246
+ --color-badge-outlined-teal-border: var(--comp-badge-outlined-teal-border);
247
+ --color-badge-outlined-teal-text: var(--comp-badge-outlined-teal-text);
248
+ --color-badge-outlined-sky-border: var(--comp-badge-outlined-sky-border);
249
+ --color-badge-outlined-sky-text: var(--comp-badge-outlined-sky-text);
250
+ --color-badge-outlined-purple-border: var(--comp-badge-outlined-purple-border);
251
+ --color-badge-outlined-purple-text: var(--comp-badge-outlined-purple-text);
252
+ --color-badge-outlined-pink-border: var(--comp-badge-outlined-pink-border);
253
+ --color-badge-outlined-pink-text: var(--comp-badge-outlined-pink-text);
223
254
 
224
255
  /* ── Colors: Button ────────────────────────────────────────────────────── */
225
256
  --color-btn-solid-brand-bg-default: var(--comp-btn-solid-brand-bg-default);
@@ -565,6 +596,18 @@ body {
565
596
  --color-tag-slate-bg: var(--comp-tag-slate-bg);
566
597
  --color-tag-slate-text: var(--comp-tag-slate-text);
567
598
  --color-tag-slate-border: var(--comp-tag-slate-border);
599
+ --color-tag-teal-bg: var(--comp-tag-teal-bg);
600
+ --color-tag-teal-text: var(--comp-tag-teal-text);
601
+ --color-tag-teal-border: var(--comp-tag-teal-border);
602
+ --color-tag-sky-bg: var(--comp-tag-sky-bg);
603
+ --color-tag-sky-text: var(--comp-tag-sky-text);
604
+ --color-tag-sky-border: var(--comp-tag-sky-border);
605
+ --color-tag-purple-bg: var(--comp-tag-purple-bg);
606
+ --color-tag-purple-text: var(--comp-tag-purple-text);
607
+ --color-tag-purple-border: var(--comp-tag-purple-border);
608
+ --color-tag-pink-bg: var(--comp-tag-pink-bg);
609
+ --color-tag-pink-text: var(--comp-tag-pink-text);
610
+ --color-tag-pink-border: var(--comp-tag-pink-border);
568
611
 
569
612
  /* ── Colors: TextInput ─────────────────────────────────────────────────── */
570
613
  --color-text-input-bg-default: var(--comp-text-input-bg-default);
@@ -666,6 +709,8 @@ body {
666
709
  --animate-modal-out: modal-out 150ms ease-in;
667
710
  --animate-sidepanel-in: sidepanel-in 250ms ease-out;
668
711
  --animate-sidepanel-out: sidepanel-out 200ms ease-in;
712
+ --animate-fade-up: fade-up 320ms ease-out;
713
+ --animate-pop-in: pop-in 220ms cubic-bezier(0.34, 1.56, 0.64, 1);
669
714
  }
670
715
 
671
716
  @keyframes tooltip-in {
@@ -755,3 +800,198 @@ body {
755
800
  --em-rgb-background: 12, 21, 33;
756
801
  --em-rgb-input: 17, 30, 46;
757
802
  }
803
+
804
+ /*
805
+ * ── AI utilities ─────────────────────────────────────────────────────────
806
+ *
807
+ * Animation primitives used by AICell, AIBadge, AIColumnSidePanel and any
808
+ * surface that wants the "AI is thinking" look. The shimmer-text and
809
+ * icon-spin classes are the load-bearing ones; the rest are decorative.
810
+ *
811
+ * FA Kit caveat — `fa-spin` applied directly to an <i> element gets
812
+ * interrupted because the Kit MutationObserver re-swaps the node into an
813
+ * <svg> on every className change. Always wrap your icon in a span that
814
+ * carries `.ai-icon-spin` (or your own rotating wrapper) instead.
815
+ */
816
+ .ai-skeleton {
817
+ position: relative;
818
+ overflow: hidden;
819
+ background: var(--core-bg-main-secondary);
820
+ }
821
+ .ai-skeleton::after {
822
+ content: "";
823
+ position: absolute;
824
+ inset: 0;
825
+ background: linear-gradient(
826
+ 90deg,
827
+ transparent 0%,
828
+ var(--core-bg-main-primary) 50%,
829
+ transparent 100%
830
+ );
831
+ animation: ai-skeleton-sweep 1.4s ease-in-out infinite;
832
+ }
833
+
834
+ .ai-cell-reveal {
835
+ animation: ai-cell-reveal 320ms ease-out forwards;
836
+ }
837
+
838
+ .ai-shimmer-text {
839
+ background: linear-gradient(
840
+ 90deg,
841
+ var(--core-text-main-tertiary) 0%,
842
+ var(--core-text-functional-info) 50%,
843
+ var(--core-text-main-tertiary) 100%
844
+ );
845
+ background-size: 200% 100%;
846
+ background-clip: text;
847
+ -webkit-background-clip: text;
848
+ -webkit-text-fill-color: transparent;
849
+ color: transparent;
850
+ animation: ai-shimmer-sweep 2.1s linear infinite;
851
+ }
852
+
853
+ .ai-icon-spin {
854
+ display: inline-flex;
855
+ animation: ai-spin 1s linear infinite;
856
+ }
857
+
858
+ .ai-pulse {
859
+ animation: ai-pulse 1.6s ease-in-out infinite;
860
+ }
861
+
862
+ .ai-gradient-text {
863
+ color: var(--core-text-functional-info);
864
+ }
865
+
866
+ .ai-orb {
867
+ position: relative;
868
+ width: 96px;
869
+ height: 96px;
870
+ border-radius: 9999px;
871
+ background: var(--background-image-ai-gradient);
872
+ box-shadow: var(--shadow-elevation-md), 0 0 32px -4px var(--blue-500);
873
+ }
874
+
875
+ .ai-halo {
876
+ position: absolute;
877
+ inset: -8px;
878
+ border-radius: 9999px;
879
+ background: conic-gradient(from 0deg, transparent, var(--blue-500), transparent);
880
+ animation: ai-spin 4s linear infinite;
881
+ opacity: 0.6;
882
+ filter: blur(8px);
883
+ }
884
+
885
+ .ai-ring {
886
+ border: 2px solid var(--blue-500);
887
+ border-radius: 9999px;
888
+ animation: ai-ring 2.4s ease-out infinite;
889
+ }
890
+
891
+ @keyframes ai-spin {
892
+ to {
893
+ transform: rotate(360deg);
894
+ }
895
+ }
896
+
897
+ @keyframes ai-shimmer-sweep {
898
+ from {
899
+ background-position: 200% 0;
900
+ }
901
+ to {
902
+ background-position: -200% 0;
903
+ }
904
+ }
905
+
906
+ @keyframes ai-skeleton-sweep {
907
+ from {
908
+ transform: translateX(-100%);
909
+ }
910
+ to {
911
+ transform: translateX(100%);
912
+ }
913
+ }
914
+
915
+ @keyframes ai-pulse {
916
+ 0%,
917
+ 100% {
918
+ transform: scale(1);
919
+ opacity: 1;
920
+ }
921
+ 50% {
922
+ transform: scale(1.15);
923
+ opacity: 0.7;
924
+ }
925
+ }
926
+
927
+ @keyframes ai-cell-reveal {
928
+ from {
929
+ opacity: 0;
930
+ filter: blur(3px);
931
+ }
932
+ to {
933
+ opacity: 1;
934
+ filter: blur(0);
935
+ }
936
+ }
937
+
938
+ @keyframes ai-reveal {
939
+ from {
940
+ opacity: 0;
941
+ transform: translateY(4px);
942
+ }
943
+ to {
944
+ opacity: 1;
945
+ transform: translateY(0);
946
+ }
947
+ }
948
+
949
+ @keyframes ai-ring {
950
+ 0% {
951
+ opacity: 0.6;
952
+ transform: scale(0.8);
953
+ }
954
+ 100% {
955
+ opacity: 0;
956
+ transform: scale(1.4);
957
+ }
958
+ }
959
+
960
+ @keyframes fade-up {
961
+ from {
962
+ opacity: 0;
963
+ transform: translateY(8px);
964
+ }
965
+ to {
966
+ opacity: 1;
967
+ transform: translateY(0);
968
+ }
969
+ }
970
+
971
+ @keyframes pop-in {
972
+ from {
973
+ opacity: 0;
974
+ transform: scale(0.85);
975
+ }
976
+ to {
977
+ opacity: 1;
978
+ transform: scale(1);
979
+ }
980
+ }
981
+
982
+ @media (prefers-reduced-motion: reduce) {
983
+ .ai-skeleton::after,
984
+ .ai-cell-reveal,
985
+ .ai-shimmer-text,
986
+ .ai-pulse,
987
+ .ai-icon-spin,
988
+ .ai-halo,
989
+ .ai-ring {
990
+ animation: none !important;
991
+ }
992
+ .ai-shimmer-text {
993
+ background: none;
994
+ color: var(--core-text-functional-info);
995
+ -webkit-text-fill-color: var(--core-text-functional-info);
996
+ }
997
+ }