@dust-tt/sparkle 0.2.254 → 0.2.256

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 (133) hide show
  1. package/dist/cjs/index.js +3883 -451
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/esm/components/BarHeader.js +3 -3
  4. package/dist/esm/components/BarHeader.js.map +1 -1
  5. package/dist/esm/components/Breadcrumbs.js +1 -1
  6. package/dist/esm/components/Breadcrumbs.js.map +1 -1
  7. package/dist/esm/components/Button.d.ts +5 -3
  8. package/dist/esm/components/Button.d.ts.map +1 -1
  9. package/dist/esm/components/Button.js +11 -3
  10. package/dist/esm/components/Button.js.map +1 -1
  11. package/dist/esm/components/Citation.d.ts.map +1 -1
  12. package/dist/esm/components/Citation.js +1 -1
  13. package/dist/esm/components/Citation.js.map +1 -1
  14. package/dist/esm/components/DataTable.d.ts.map +1 -1
  15. package/dist/esm/components/DataTable.js +1 -2
  16. package/dist/esm/components/DataTable.js.map +1 -1
  17. package/dist/esm/components/Dialog.d.ts +2 -1
  18. package/dist/esm/components/Dialog.d.ts.map +1 -1
  19. package/dist/esm/components/Dialog.js.map +1 -1
  20. package/dist/esm/components/DropdownMenu.d.ts +2 -2
  21. package/dist/esm/components/DropdownMenu.d.ts.map +1 -1
  22. package/dist/esm/components/DropdownMenu.js +8 -5
  23. package/dist/esm/components/DropdownMenu.js.map +1 -1
  24. package/dist/esm/components/ElementDialog.d.ts +1 -1
  25. package/dist/esm/components/ElementDialog.d.ts.map +1 -1
  26. package/dist/esm/components/ElementDialog.js +2 -2
  27. package/dist/esm/components/ElementDialog.js.map +1 -1
  28. package/dist/esm/components/IconButton.d.ts +2 -2
  29. package/dist/esm/components/IconButton.d.ts.map +1 -1
  30. package/dist/esm/components/IconButton.js +2 -2
  31. package/dist/esm/components/IconButton.js.map +1 -1
  32. package/dist/esm/components/IconToggleButton.d.ts +2 -2
  33. package/dist/esm/components/IconToggleButton.d.ts.map +1 -1
  34. package/dist/esm/components/IconToggleButton.js +2 -2
  35. package/dist/esm/components/IconToggleButton.js.map +1 -1
  36. package/dist/esm/components/Input.js.map +1 -1
  37. package/dist/esm/components/Searchbar.d.ts.map +1 -1
  38. package/dist/esm/components/Searchbar.js.map +1 -1
  39. package/dist/esm/components/Tab.js +1 -1
  40. package/dist/esm/components/Tab.js.map +1 -1
  41. package/dist/esm/components/Tooltip.d.ts +13 -7
  42. package/dist/esm/components/Tooltip.d.ts.map +1 -1
  43. package/dist/esm/components/Tooltip.js +18 -42
  44. package/dist/esm/components/Tooltip.js.map +1 -1
  45. package/dist/esm/components/Tree.js +1 -1
  46. package/dist/esm/components/Tree.js.map +1 -1
  47. package/dist/esm/components/index.d.ts +1 -1
  48. package/dist/esm/components/index.d.ts.map +1 -1
  49. package/dist/esm/components/index.js +1 -1
  50. package/dist/esm/components/index.js.map +1 -1
  51. package/dist/esm/icons/solid/Dot.d.ts +5 -0
  52. package/dist/esm/icons/solid/Dot.d.ts.map +1 -0
  53. package/dist/esm/icons/solid/Dot.js +6 -0
  54. package/dist/esm/icons/solid/Dot.js.map +1 -0
  55. package/dist/esm/icons/solid/MagnifyingGlass.d.ts.map +1 -1
  56. package/dist/esm/icons/solid/MagnifyingGlass.js +2 -1
  57. package/dist/esm/icons/solid/MagnifyingGlass.js.map +1 -1
  58. package/dist/esm/icons/solid/index.d.ts +1 -0
  59. package/dist/esm/icons/solid/index.d.ts.map +1 -1
  60. package/dist/esm/icons/solid/index.js +1 -0
  61. package/dist/esm/icons/solid/index.js.map +1 -1
  62. package/dist/esm/icons/src/solid/dot.svg +3 -0
  63. package/dist/esm/icons/src/solid/magnifying-glass.svg +2 -1
  64. package/dist/esm/icons/src/stroke/dot.svg +3 -0
  65. package/dist/esm/icons/stroke/Dot.d.ts +5 -0
  66. package/dist/esm/icons/stroke/Dot.d.ts.map +1 -0
  67. package/dist/esm/icons/stroke/Dot.js +6 -0
  68. package/dist/esm/icons/stroke/Dot.js.map +1 -0
  69. package/dist/esm/icons/stroke/index.d.ts +1 -0
  70. package/dist/esm/icons/stroke/index.d.ts.map +1 -1
  71. package/dist/esm/icons/stroke/index.js +1 -0
  72. package/dist/esm/icons/stroke/index.js.map +1 -1
  73. package/dist/esm/stories/Button.stories.d.ts +2 -0
  74. package/dist/esm/stories/Button.stories.d.ts.map +1 -1
  75. package/dist/esm/stories/Button.stories.js +14 -3
  76. package/dist/esm/stories/Button.stories.js.map +1 -1
  77. package/dist/esm/stories/Citation.stories.js +1 -1
  78. package/dist/esm/stories/Citation.stories.js.map +1 -1
  79. package/dist/esm/stories/DataTable.stories.d.ts.map +1 -1
  80. package/dist/esm/stories/DataTable.stories.js.map +1 -1
  81. package/dist/esm/stories/Dialog.stories.d.ts.map +1 -1
  82. package/dist/esm/stories/Dialog.stories.js +1 -1
  83. package/dist/esm/stories/Dialog.stories.js.map +1 -1
  84. package/dist/esm/stories/DropdownMenu.stories.d.ts.map +1 -1
  85. package/dist/esm/stories/DropdownMenu.stories.js +2 -2
  86. package/dist/esm/stories/DropdownMenu.stories.js.map +1 -1
  87. package/dist/esm/stories/IconButton.stories.js +3 -3
  88. package/dist/esm/stories/IconButton.stories.js.map +1 -1
  89. package/dist/esm/stories/TextArea.stories.d.ts.map +1 -1
  90. package/dist/esm/stories/TextArea.stories.js +18 -3
  91. package/dist/esm/stories/TextArea.stories.js.map +1 -1
  92. package/dist/esm/stories/Tooltip.stories.d.ts +3 -8
  93. package/dist/esm/stories/Tooltip.stories.d.ts.map +1 -1
  94. package/dist/esm/stories/Tooltip.stories.js +10 -23
  95. package/dist/esm/stories/Tooltip.stories.js.map +1 -1
  96. package/dist/esm/stories/Tree.stories.d.ts.map +1 -1
  97. package/dist/esm/stories/Tree.stories.js +4 -3
  98. package/dist/esm/stories/Tree.stories.js.map +1 -1
  99. package/dist/sparkle.css +98 -68
  100. package/package.json +4 -1
  101. package/src/components/BarHeader.tsx +0 -3
  102. package/src/components/Breadcrumbs.tsx +2 -2
  103. package/src/components/Button.tsx +16 -14
  104. package/src/components/Citation.tsx +1 -7
  105. package/src/components/DataTable.tsx +11 -8
  106. package/src/components/Dialog.tsx +4 -4
  107. package/src/components/DropdownMenu.tsx +41 -31
  108. package/src/components/ElementDialog.tsx +4 -1
  109. package/src/components/IconButton.tsx +8 -6
  110. package/src/components/IconToggleButton.tsx +8 -6
  111. package/src/components/Input.tsx +1 -1
  112. package/src/components/Searchbar.tsx +2 -4
  113. package/src/components/Tab.tsx +1 -1
  114. package/src/components/Tooltip.tsx +48 -78
  115. package/src/components/Tree.tsx +5 -1
  116. package/src/components/index.ts +7 -1
  117. package/src/icons/solid/Dot.tsx +15 -0
  118. package/src/icons/solid/MagnifyingGlass.tsx +7 -1
  119. package/src/icons/solid/index.ts +1 -0
  120. package/src/icons/src/solid/dot.svg +3 -0
  121. package/src/icons/src/solid/magnifying-glass.svg +2 -1
  122. package/src/icons/src/stroke/dot.svg +3 -0
  123. package/src/icons/stroke/Dot.tsx +20 -0
  124. package/src/icons/stroke/index.ts +1 -0
  125. package/src/stories/Button.stories.tsx +47 -3
  126. package/src/stories/Citation.stories.tsx +1 -1
  127. package/src/stories/DataTable.stories.tsx +3 -1
  128. package/src/stories/Dialog.stories.tsx +1 -0
  129. package/src/stories/DropdownMenu.stories.tsx +6 -3
  130. package/src/stories/IconButton.stories.tsx +3 -3
  131. package/src/stories/TextArea.stories.tsx +19 -4
  132. package/src/stories/Tooltip.stories.tsx +31 -50
  133. package/src/stories/Tree.stories.tsx +12 -2
package/dist/sparkle.css CHANGED
@@ -805,18 +805,10 @@ select {
805
805
  bottom: 1.5rem;
806
806
  }
807
807
 
808
- .s-bottom-full {
809
- bottom: 100%;
810
- }
811
-
812
808
  .s-left-0 {
813
809
  left: 0px;
814
810
  }
815
811
 
816
- .s-left-1\/2 {
817
- left: 50%;
818
- }
819
-
820
812
  .s-right-0 {
821
813
  right: 0px;
822
814
  }
@@ -829,10 +821,6 @@ select {
829
821
  top: 0px;
830
822
  }
831
823
 
832
- .s-top-full {
833
- top: 100%;
834
- }
835
-
836
824
  .s-z-0 {
837
825
  z-index: 0;
838
826
  }
@@ -905,10 +893,6 @@ select {
905
893
  margin-bottom: 0.25rem;
906
894
  }
907
895
 
908
- .s-mb-2 {
909
- margin-bottom: 0.5rem;
910
- }
911
-
912
896
  .s-ml-1 {
913
897
  margin-left: 0.25rem;
914
898
  }
@@ -949,10 +933,6 @@ select {
949
933
  margin-top: 4rem;
950
934
  }
951
935
 
952
- .s-mt-2 {
953
- margin-top: 0.5rem;
954
- }
955
-
956
936
  .s-mt-4 {
957
937
  margin-top: 1rem;
958
938
  }
@@ -1202,10 +1182,6 @@ select {
1202
1182
  width: 320px;
1203
1183
  }
1204
1184
 
1205
- .s-w-\[38em\] {
1206
- width: 38em;
1207
- }
1208
-
1209
1185
  .s-w-auto {
1210
1186
  width: auto;
1211
1187
  }
@@ -1307,16 +1283,6 @@ select {
1307
1283
  transform-origin: top right;
1308
1284
  }
1309
1285
 
1310
- .-s-translate-x-1\/2 {
1311
- --tw-translate-x: -50%;
1312
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1313
- }
1314
-
1315
- .-s-translate-y-0 {
1316
- --tw-translate-y: -0px;
1317
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1318
- }
1319
-
1320
1286
  .-s-translate-y-5 {
1321
1287
  --tw-translate-y: -1.25rem;
1322
1288
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1352,11 +1318,6 @@ select {
1352
1318
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1353
1319
  }
1354
1320
 
1355
- .s-translate-y-2 {
1356
- --tw-translate-y: 0.5rem;
1357
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1358
- }
1359
-
1360
1321
  .s-translate-y-4 {
1361
1322
  --tw-translate-y: 1rem;
1362
1323
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1620,10 +1581,6 @@ select {
1620
1581
  column-gap: 1rem;
1621
1582
  }
1622
1583
 
1623
- .s-gap-y-2 {
1624
- row-gap: 0.5rem;
1625
- }
1626
-
1627
1584
  .s-gap-y-3 {
1628
1585
  row-gap: 0.75rem;
1629
1586
  }
@@ -1706,10 +1663,6 @@ select {
1706
1663
  white-space: pre-wrap;
1707
1664
  }
1708
1665
 
1709
- .s-break-words {
1710
- overflow-wrap: break-word;
1711
- }
1712
-
1713
1666
  .s-rounded {
1714
1667
  border-radius: 0.25rem;
1715
1668
  }
@@ -3195,10 +3148,6 @@ select {
3195
3148
  padding-left: 0.75rem;
3196
3149
  }
3197
3150
 
3198
- .s-pl-32 {
3199
- padding-left: 8rem;
3200
- }
3201
-
3202
3151
  .s-pl-4 {
3203
3152
  padding-left: 1rem;
3204
3153
  }
@@ -3211,10 +3160,6 @@ select {
3211
3160
  padding-left: 1.5rem;
3212
3161
  }
3213
3162
 
3214
- .s-pl-64 {
3215
- padding-left: 16rem;
3216
- }
3217
-
3218
3163
  .s-pl-7 {
3219
3164
  padding-left: 1.75rem;
3220
3165
  }
@@ -4111,10 +4056,6 @@ select {
4111
4056
  transition-duration: 300ms;
4112
4057
  }
4113
4058
 
4114
- .s-duration-500 {
4115
- transition-duration: 500ms;
4116
- }
4117
-
4118
4059
  .s-duration-75 {
4119
4060
  transition-duration: 75ms;
4120
4061
  }
@@ -4140,6 +4081,70 @@ select {
4140
4081
  display: none;
4141
4082
  }
4142
4083
 
4084
+ @keyframes enter {
4085
+ from {
4086
+ opacity: var(--tw-enter-opacity, 1);
4087
+ transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));
4088
+ }
4089
+ }
4090
+
4091
+ @keyframes exit {
4092
+ to {
4093
+ opacity: var(--tw-exit-opacity, 1);
4094
+ transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
4095
+ }
4096
+ }
4097
+
4098
+ .s-animate-in {
4099
+ animation-name: enter;
4100
+ animation-duration: 150ms;
4101
+ --tw-enter-opacity: initial;
4102
+ --tw-enter-scale: initial;
4103
+ --tw-enter-rotate: initial;
4104
+ --tw-enter-translate-x: initial;
4105
+ --tw-enter-translate-y: initial;
4106
+ }
4107
+
4108
+ .s-fade-in-0 {
4109
+ --tw-enter-opacity: 0;
4110
+ }
4111
+
4112
+ .s-zoom-in-95 {
4113
+ --tw-enter-scale: .95;
4114
+ }
4115
+
4116
+ .s-duration-100 {
4117
+ animation-duration: 100ms;
4118
+ }
4119
+
4120
+ .s-duration-150 {
4121
+ animation-duration: 150ms;
4122
+ }
4123
+
4124
+ .s-duration-200 {
4125
+ animation-duration: 200ms;
4126
+ }
4127
+
4128
+ .s-duration-300 {
4129
+ animation-duration: 300ms;
4130
+ }
4131
+
4132
+ .s-duration-75 {
4133
+ animation-duration: 75ms;
4134
+ }
4135
+
4136
+ .s-ease-in {
4137
+ animation-timing-function: cubic-bezier(0.4, 0, 1, 1);
4138
+ }
4139
+
4140
+ .s-ease-in-out {
4141
+ animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
4142
+ }
4143
+
4144
+ .s-ease-out {
4145
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
4146
+ }
4147
+
4143
4148
  @keyframes bgblink {
4144
4149
  0%,
4145
4150
  100% {
@@ -4562,6 +4567,40 @@ select {
4562
4567
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
4563
4568
  }
4564
4569
 
4570
+ .data-\[state\=closed\]\:s-animate-out[data-state=closed] {
4571
+ animation-name: exit;
4572
+ animation-duration: 150ms;
4573
+ --tw-exit-opacity: initial;
4574
+ --tw-exit-scale: initial;
4575
+ --tw-exit-rotate: initial;
4576
+ --tw-exit-translate-x: initial;
4577
+ --tw-exit-translate-y: initial;
4578
+ }
4579
+
4580
+ .data-\[state\=closed\]\:s-fade-out-0[data-state=closed] {
4581
+ --tw-exit-opacity: 0;
4582
+ }
4583
+
4584
+ .data-\[state\=closed\]\:s-zoom-out-95[data-state=closed] {
4585
+ --tw-exit-scale: .95;
4586
+ }
4587
+
4588
+ .data-\[side\=bottom\]\:s-slide-in-from-top-2[data-side=bottom] {
4589
+ --tw-enter-translate-y: -0.5rem;
4590
+ }
4591
+
4592
+ .data-\[side\=left\]\:s-slide-in-from-right-2[data-side=left] {
4593
+ --tw-enter-translate-x: 0.5rem;
4594
+ }
4595
+
4596
+ .data-\[side\=right\]\:s-slide-in-from-left-2[data-side=right] {
4597
+ --tw-enter-translate-x: -0.5rem;
4598
+ }
4599
+
4600
+ .data-\[side\=top\]\:s-slide-in-from-bottom-2[data-side=top] {
4601
+ --tw-enter-translate-y: 0.5rem;
4602
+ }
4603
+
4565
4604
  :is(.s-dark .dark\:s-border-action-200-dark) {
4566
4605
  --tw-border-opacity: 1;
4567
4606
  border-color: rgb(30 64 175 / var(--tw-border-opacity));
@@ -4600,11 +4639,6 @@ select {
4600
4639
  border-color: rgb(71 85 105 / 0.3);
4601
4640
  }
4602
4641
 
4603
- :is(.s-dark .dark\:s-border-structure-50-dark) {
4604
- --tw-border-opacity: 1;
4605
- border-color: rgb(15 23 42 / var(--tw-border-opacity));
4606
- }
4607
-
4608
4642
  :is(.s-dark .dark\:s-border-warning-200-dark) {
4609
4643
  --tw-border-opacity: 1;
4610
4644
  border-color: rgb(153 27 27 / var(--tw-border-opacity));
@@ -4975,10 +5009,6 @@ select {
4975
5009
  }
4976
5010
 
4977
5011
  @media (min-width: 640px) {
4978
- .sm\:s-block {
4979
- display: block;
4980
- }
4981
-
4982
5012
  .sm\:s-w-64 {
4983
5013
  width: 16rem;
4984
5014
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dust-tt/sparkle",
3
- "version": "0.2.254",
3
+ "version": "0.2.256",
4
4
  "scripts": {
5
5
  "build": "rm -rf dist && npm run tailwind && npm run build:esm && npm run build:cjs",
6
6
  "tailwind": "tailwindcss -i ./src/styles/tailwind.css -o dist/sparkle.css",
@@ -66,6 +66,7 @@
66
66
  "tailwindcss": "^3.2.4",
67
67
  "tsc-alias": "^1.8.10",
68
68
  "typescript": "^5.4.5",
69
+ "tailwindcss-animate": "^1.0.7",
69
70
  "typescript-transform-paths": "^3.4.7",
70
71
  "uuid": "^9.0.1"
71
72
  },
@@ -87,6 +88,8 @@
87
88
  "@emoji-mart/data": "^1.1.2",
88
89
  "@emoji-mart/react": "^1.1.1",
89
90
  "@headlessui/react": "^1.7.19",
91
+ "@radix-ui/react-slot": "^1.1.0",
92
+ "@radix-ui/react-tooltip": "^1.1.3",
90
93
  "@tanstack/react-table": "^8.13.0",
91
94
  "emoji-mart": "^5.5.2",
92
95
  "esbuild": "^0.20.0",
@@ -85,7 +85,6 @@ BarHeader.ButtonBar = function (props: BarHeaderButtonBarProps) {
85
85
  icon={ChevronLeftIcon}
86
86
  variant="tertiary"
87
87
  label="Back"
88
- tooltipPosition="below"
89
88
  labelVisible={false}
90
89
  onClick={props.onBack}
91
90
  />
@@ -97,7 +96,6 @@ BarHeader.ButtonBar = function (props: BarHeaderButtonBarProps) {
97
96
  icon={XMarkIcon}
98
97
  variant="tertiary"
99
98
  label="Close"
100
- tooltipPosition="below"
101
99
  labelVisible={false}
102
100
  onClick={props.onClose}
103
101
  />
@@ -134,7 +132,6 @@ BarHeader.ButtonBar = function (props: BarHeaderButtonBarProps) {
134
132
  icon={TrashIcon}
135
133
  variant="tertiary"
136
134
  labelVisible={false}
137
- tooltipPosition="below"
138
135
  onClick={props.onDelete}
139
136
  />
140
137
  <Button
@@ -106,9 +106,9 @@ export function Breadcrumbs({ items }: BreadcrumbProps) {
106
106
  function truncateWithTooltip(text: string, length: number) {
107
107
  return text.length > length ? (
108
108
  <Tooltip
109
+ trigger={`${text.substring(0, length - 1)}${ELLIPSIS_STRING}`}
109
110
  label={text}
110
- position="below"
111
- >{`${text.substring(0, length - 1)}…`}</Tooltip>
111
+ />
112
112
  ) : (
113
113
  text
114
114
  );
@@ -6,22 +6,26 @@ import React, {
6
6
  ReactNode,
7
7
  } from "react";
8
8
 
9
+ import { Tooltip } from "@sparkle/components/Tooltip";
9
10
  import { ChevronDownIcon, ChevronUpDownIcon } from "@sparkle/icons/solid";
10
11
  import { classNames } from "@sparkle/lib/utils";
11
12
 
12
13
  import { Avatar } from "./Avatar";
13
14
  import { Icon, IconProps } from "./Icon";
14
- import { Tooltip, TooltipProps } from "./Tooltip";
15
15
 
16
- export type ButtonProps = {
17
- variant?:
18
- | "primary"
19
- | "primaryWarning"
20
- | "secondary"
21
- | "secondaryWarning"
22
- | "tertiary"
23
- | "avatar";
16
+ const BUTTON_VARIANTS = [
17
+ "primary",
18
+ "primaryWarning",
19
+ "secondary",
20
+ "secondaryWarning",
21
+ "tertiary",
22
+ "avatar",
23
+ ] as const;
24
+
25
+ export type ButtonVariantType = (typeof BUTTON_VARIANTS)[number];
24
26
 
27
+ export type ButtonProps = {
28
+ variant?: ButtonVariantType;
25
29
  type?: "button" | "menu" | "select";
26
30
  size?: "xs" | "sm" | "md" | "lg";
27
31
  onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
@@ -32,7 +36,7 @@ export type ButtonProps = {
32
36
  icon?: ComponentType;
33
37
  avatar?: string;
34
38
  className?: string;
35
- tooltipPosition?: TooltipProps["position"];
39
+ tooltipPosition?: React.ComponentProps<typeof Tooltip>["side"];
36
40
  disabledTooltip?: boolean;
37
41
  };
38
42
 
@@ -173,7 +177,7 @@ export function Button({
173
177
  label,
174
178
  icon,
175
179
  className = "",
176
- tooltipPosition = "above",
180
+ tooltipPosition,
177
181
  hasMagnifying = true,
178
182
  disabledTooltip = false,
179
183
  avatar,
@@ -242,9 +246,7 @@ export function Button({
242
246
  return labelVisible || disabledTooltip ? (
243
247
  buttonBase
244
248
  ) : (
245
- <Tooltip label={label} position={tooltipPosition}>
246
- {buttonBase}
247
- </Tooltip>
249
+ <Tooltip trigger={buttonBase} label={label} side={tooltipPosition} />
248
250
  );
249
251
  }
250
252
 
@@ -172,11 +172,5 @@ export function Citation({
172
172
  <div className={isLoading ? "s-opacity-50" : ""}>{cardContent}</div>
173
173
  </CardButton>
174
174
  );
175
- return href ? (
176
- <Tooltip label={title} position="above">
177
- {cardButton}
178
- </Tooltip>
179
- ) : (
180
- cardButton
181
- );
175
+ return href ? <Tooltip trigger={cardButton} label={title} /> : cardButton;
182
176
  }
@@ -441,14 +441,17 @@ DataTable.CellContent = function CellContent({
441
441
  {...props}
442
442
  >
443
443
  {avatarUrl && avatarTooltipLabel && (
444
- <Tooltip label={avatarTooltipLabel} position="above">
445
- <Avatar
446
- visual={avatarUrl}
447
- size="xs"
448
- className="s-mr-2"
449
- isRounded={roundedAvatar ?? false}
450
- />
451
- </Tooltip>
444
+ <Tooltip
445
+ trigger={
446
+ <Avatar
447
+ visual={avatarUrl}
448
+ size="xs"
449
+ className="s-mr-2"
450
+ isRounded={roundedAvatar ?? false}
451
+ />
452
+ }
453
+ label={avatarTooltipLabel}
454
+ />
452
455
  )}
453
456
  {avatarUrl && !avatarTooltipLabel && (
454
457
  <Avatar
@@ -5,7 +5,7 @@ import ConfettiBackground from "@sparkle/components/ConfettiBackground";
5
5
  import Spinner from "@sparkle/components/Spinner";
6
6
  import { classNames } from "@sparkle/lib/utils";
7
7
 
8
- import { Button } from "./Button";
8
+ import { Button, ButtonVariantType } from "./Button";
9
9
 
10
10
  export type BaseDialogProps = {
11
11
  backgroundType?: "confetti" | "snow" | "none";
@@ -16,19 +16,19 @@ export type BaseDialogProps = {
16
16
  onValidate: () => void;
17
17
  title: string;
18
18
  validateLabel?: string;
19
- validateVariant?: "primary" | "primaryWarning";
19
+ validateVariant?: ButtonVariantType;
20
20
  cancelLabel?: string;
21
21
  };
22
22
 
23
23
  export type DialogProps = BaseDialogProps & {
24
24
  alertDialog?: false;
25
25
  onCancel: () => void;
26
- }
26
+ };
27
27
 
28
28
  export type AlertDialogProps = BaseDialogProps & {
29
29
  alertDialog: true;
30
30
  onCancel?: () => void;
31
- }
31
+ };
32
32
 
33
33
  export function Dialog({
34
34
  backgroundType = "none",
@@ -22,7 +22,7 @@ import { classNames } from "@sparkle/lib/utils";
22
22
 
23
23
  import { Icon } from "./Icon";
24
24
  import { Item as StandardItem, LinkProps } from "./Item";
25
- import { Tooltip, TooltipProps } from "./Tooltip";
25
+ import { Tooltip } from "./Tooltip";
26
26
 
27
27
  const ButtonRefContext =
28
28
  React.createContext<MutableRefObject<HTMLButtonElement | null> | null>(null);
@@ -98,7 +98,7 @@ export interface DropdownButtonProps {
98
98
  type?: "menu" | "submenu" | "select";
99
99
  size?: "sm" | "md";
100
100
  tooltip?: string;
101
- tooltipPosition?: TooltipProps["position"];
101
+ tooltipPosition?: React.ComponentProps<typeof Tooltip>["side"];
102
102
  icon?: ComponentType;
103
103
  className?: string;
104
104
  disabled?: boolean;
@@ -116,7 +116,7 @@ DropdownMenu.Button = forwardRef<HTMLButtonElement, DropdownButtonProps>(
116
116
  tooltip,
117
117
  icon,
118
118
  children,
119
- tooltipPosition = "above",
119
+ tooltipPosition = "top",
120
120
  className = "",
121
121
  disabled = false,
122
122
  onClick,
@@ -178,9 +178,11 @@ DropdownMenu.Button = forwardRef<HTMLButtonElement, DropdownButtonProps>(
178
178
  onClick={(e) => e.stopPropagation()}
179
179
  >
180
180
  {tooltip ? (
181
- <Tooltip position={tooltipPosition} label={tooltip}>
182
- {children}
183
- </Tooltip>
181
+ <Tooltip
182
+ trigger={children}
183
+ label={tooltip}
184
+ side={tooltipPosition}
185
+ />
184
186
  ) : (
185
187
  children
186
188
  )}
@@ -198,31 +200,39 @@ DropdownMenu.Button = forwardRef<HTMLButtonElement, DropdownButtonProps>(
198
200
  return (
199
201
  <>
200
202
  {tooltip ? (
201
- <Tooltip label={tooltip} position={tooltipPosition}>
202
- <Menu.Button
203
- disabled={disabled}
204
- ref={aggregatedRef}
205
- className={classNames(
206
- disabled ? "s-cursor-default" : "s-cursor-pointer",
207
- className,
208
- "s-group/dm s-flex s-justify-items-center s-text-sm s-font-medium focus:s-outline-none focus:s-ring-0",
209
- label ? (size === "md" ? "s-gap-2" : "s-gap-1.5") : "s-gap-0.5"
210
- )}
211
- onClick={(e) => {
212
- e.stopPropagation();
213
- if (onClick) {
214
- onClick();
215
- }
216
- }}
217
- >
218
- <Icon visual={icon} size={size} className={finalIconClasses} />
219
- <Icon
220
- visual={chevronIcon}
221
- size={size === "sm" ? "xs" : "sm"}
222
- className={finalChevronClasses}
223
- />
224
- </Menu.Button>
225
- </Tooltip>
203
+ <Tooltip
204
+ trigger={
205
+ <Menu.Button
206
+ disabled={disabled}
207
+ ref={aggregatedRef}
208
+ className={classNames(
209
+ disabled ? "s-cursor-default" : "s-cursor-pointer",
210
+ className,
211
+ "s-group/dm s-flex s-justify-items-center s-text-sm s-font-medium focus:s-outline-none focus:s-ring-0",
212
+ label
213
+ ? size === "md"
214
+ ? "s-gap-2"
215
+ : "s-gap-1.5"
216
+ : "s-gap-0.5"
217
+ )}
218
+ onClick={(e) => {
219
+ e.stopPropagation();
220
+ if (onClick) {
221
+ onClick();
222
+ }
223
+ }}
224
+ >
225
+ <Icon visual={icon} size={size} className={finalIconClasses} />
226
+ <Icon
227
+ visual={chevronIcon}
228
+ size={size === "sm" ? "xs" : "sm"}
229
+ className={finalChevronClasses}
230
+ />
231
+ </Menu.Button>
232
+ }
233
+ label={tooltip}
234
+ side={tooltipPosition}
235
+ />
226
236
  ) : (
227
237
  <Menu.Button
228
238
  disabled={disabled}
@@ -17,6 +17,7 @@ export function ElementDialog<T>({
17
17
  closeDialogFn,
18
18
  onValidate,
19
19
  onCancel,
20
+ children,
20
21
  ...props
21
22
  }: ElementDialogProps<T>) {
22
23
  const [isClosingTransition, setIsClosingTransition] = useState(false);
@@ -33,6 +34,8 @@ export function ElementDialog<T>({
33
34
  onCancel={() => onCancel(transitionOnClose)}
34
35
  onValidate={() => onValidate(transitionOnClose)}
35
36
  {...props}
36
- />
37
+ >
38
+ {children}
39
+ </Dialog>
37
40
  );
38
41
  }
@@ -3,14 +3,14 @@ import React, { ComponentType, MouseEventHandler } from "react";
3
3
  import { classNames } from "@sparkle/lib/utils";
4
4
 
5
5
  import { Icon, IconProps } from "./Icon";
6
- import { Tooltip, TooltipProps } from "./Tooltip";
6
+ import { Tooltip } from "./Tooltip";
7
7
 
8
8
  type IconButtonProps = {
9
9
  variant?: "primary" | "warning" | "secondary" | "tertiary" | "white";
10
10
  onClick?: MouseEventHandler<HTMLButtonElement>;
11
11
  size?: "xs" | "sm" | "md";
12
12
  tooltip?: string;
13
- tooltipPosition?: TooltipProps["position"];
13
+ tooltipPosition?: React.ComponentProps<typeof Tooltip>["side"];
14
14
  icon?: ComponentType;
15
15
  className?: string;
16
16
  disabled?: boolean;
@@ -87,7 +87,7 @@ export function IconButton({
87
87
  onClick,
88
88
  disabled = false,
89
89
  tooltip,
90
- tooltipPosition = "above",
90
+ tooltipPosition = "top",
91
91
  icon,
92
92
  className = "",
93
93
  size = "sm",
@@ -117,9 +117,11 @@ export function IconButton({
117
117
  );
118
118
 
119
119
  return tooltip ? (
120
- <Tooltip label={tooltip} position={tooltipPosition}>
121
- {IconButtonContent}
122
- </Tooltip>
120
+ <Tooltip
121
+ trigger={IconButtonContent}
122
+ label={tooltip}
123
+ side={tooltipPosition}
124
+ />
123
125
  ) : (
124
126
  IconButtonContent
125
127
  );
@@ -3,14 +3,14 @@ import React, { ComponentType, MouseEventHandler } from "react";
3
3
  import { classNames } from "@sparkle/lib/utils";
4
4
 
5
5
  import { Icon, IconProps } from "./Icon";
6
- import { Tooltip, TooltipProps } from "./Tooltip";
6
+ import { Tooltip } from "./Tooltip";
7
7
 
8
8
  type IconToggleButtonProps = {
9
9
  variant?: "secondary" | "tertiary";
10
10
  onClick?: MouseEventHandler<HTMLButtonElement>;
11
11
  size?: "xs" | "sm" | "md";
12
12
  tooltip?: string;
13
- tooltipPosition?: TooltipProps["position"];
13
+ tooltipPosition?: React.ComponentProps<typeof Tooltip>["side"];
14
14
  icon: ComponentType;
15
15
  iconSelected?: ComponentType;
16
16
  className?: string;
@@ -57,7 +57,7 @@ export function IconToggleButton({
57
57
  onClick,
58
58
  disabled = false,
59
59
  tooltip,
60
- tooltipPosition = "above",
60
+ tooltipPosition = "top",
61
61
  icon,
62
62
  iconSelected,
63
63
  className = "",
@@ -105,9 +105,11 @@ export function IconToggleButton({
105
105
  );
106
106
 
107
107
  return tooltip ? (
108
- <Tooltip label={tooltip} position={tooltipPosition}>
109
- {IconButtonToggleContent}
110
- </Tooltip>
108
+ <Tooltip
109
+ trigger={IconButtonToggleContent}
110
+ label={tooltip}
111
+ side={tooltipPosition}
112
+ />
111
113
  ) : (
112
114
  IconButtonToggleContent
113
115
  );
@@ -92,4 +92,4 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
92
92
  }
93
93
  );
94
94
 
95
- Input.displayName = "Input"
95
+ Input.displayName = "Input";