@brijbyte/agentic-ui 0.0.1 → 0.0.3

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 (173) hide show
  1. package/README.md +183 -111
  2. package/dist/accordion/accordion.css +6 -10
  3. package/dist/accordion/accordion.d.ts +1 -1
  4. package/dist/accordion/accordion.js +1 -1
  5. package/dist/accordion/accordion.module.js.map +1 -1
  6. package/dist/accordion/parts.d.ts +1 -1
  7. package/dist/accordion/parts.js +2 -2
  8. package/dist/alert-dialog/alert-dialog.css +84 -0
  9. package/dist/alert-dialog/alert-dialog.d.ts +44 -0
  10. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -0
  11. package/dist/alert-dialog/alert-dialog.js +46 -0
  12. package/dist/alert-dialog/alert-dialog.js.map +1 -0
  13. package/dist/alert-dialog/alert-dialog.module.css.d.ts +2 -0
  14. package/dist/alert-dialog/alert-dialog.module.js +14 -0
  15. package/dist/alert-dialog/alert-dialog.module.js.map +1 -0
  16. package/dist/alert-dialog/index.d.ts +3 -0
  17. package/dist/alert-dialog/index.js +4 -0
  18. package/dist/alert-dialog/parts.d.ts +28 -0
  19. package/dist/alert-dialog/parts.d.ts.map +1 -0
  20. package/dist/alert-dialog/parts.js +62 -0
  21. package/dist/alert-dialog/parts.js.map +1 -0
  22. package/dist/badge/badge.css +3 -7
  23. package/dist/badge/badge.d.ts +1 -1
  24. package/dist/badge/badge.module.js.map +1 -1
  25. package/dist/button/button.css +36 -22
  26. package/dist/button/button.d.ts +7 -7
  27. package/dist/button/button.js +1 -1
  28. package/dist/button/button.js.map +1 -1
  29. package/dist/button/button.module.js.map +1 -1
  30. package/dist/card/card.css +5 -9
  31. package/dist/card/card.d.ts +1 -1
  32. package/dist/card/card.module.js.map +1 -1
  33. package/dist/checkbox/checkbox.css +3 -7
  34. package/dist/checkbox/checkbox.d.ts +1 -1
  35. package/dist/checkbox/checkbox.js +1 -1
  36. package/dist/checkbox/checkbox.module.js.map +1 -1
  37. package/dist/checkbox/parts.js +1 -1
  38. package/dist/collapsible/collapsible.css +7 -11
  39. package/dist/collapsible/collapsible.d.ts +1 -1
  40. package/dist/collapsible/collapsible.module.js.map +1 -1
  41. package/dist/collapsible/parts.js +1 -1
  42. package/dist/context-menu/context-menu.css +151 -0
  43. package/dist/context-menu/context-menu.d.ts +36 -0
  44. package/dist/context-menu/context-menu.d.ts.map +1 -0
  45. package/dist/context-menu/context-menu.js +54 -0
  46. package/dist/context-menu/context-menu.js.map +1 -0
  47. package/dist/context-menu/context-menu.module.css.d.ts +2 -0
  48. package/dist/context-menu/context-menu.module.js +18 -0
  49. package/dist/context-menu/context-menu.module.js.map +1 -0
  50. package/dist/context-menu/index.d.ts +3 -0
  51. package/dist/context-menu/index.js +4 -0
  52. package/dist/context-menu/parts.d.ts +38 -0
  53. package/dist/context-menu/parts.d.ts.map +1 -0
  54. package/dist/context-menu/parts.js +91 -0
  55. package/dist/context-menu/parts.js.map +1 -0
  56. package/dist/dialog/dialog.css +27 -22
  57. package/dist/dialog/dialog.d.ts +9 -1
  58. package/dist/dialog/dialog.d.ts.map +1 -1
  59. package/dist/dialog/dialog.js +7 -4
  60. package/dist/dialog/dialog.js.map +1 -1
  61. package/dist/dialog/dialog.module.js +2 -0
  62. package/dist/dialog/dialog.module.js.map +1 -1
  63. package/dist/dialog/parts.js +1 -1
  64. package/dist/drawer/drawer.css +9 -13
  65. package/dist/drawer/drawer.d.ts +1 -1
  66. package/dist/drawer/drawer.module.js.map +1 -1
  67. package/dist/drawer/parts.d.ts +1 -1
  68. package/dist/drawer/parts.js +1 -1
  69. package/dist/index.css +1603 -1299
  70. package/dist/index.d.ts +30 -24
  71. package/dist/index.js +41 -32
  72. package/dist/input/input.css +5 -9
  73. package/dist/input/input.js +1 -1
  74. package/dist/input/input.module.js.map +1 -1
  75. package/dist/layer-order.css +22 -0
  76. package/dist/menu/menu.css +13 -17
  77. package/dist/menu/menu.d.ts +1 -1
  78. package/dist/menu/menu.module.js.map +1 -1
  79. package/dist/menu/menuitemshortcut.js +1 -1
  80. package/dist/menu/parts.js +1 -1
  81. package/dist/number-field/number-field.css +12 -16
  82. package/dist/number-field/number-field.d.ts +1 -1
  83. package/dist/number-field/number-field.js +1 -1
  84. package/dist/number-field/number-field.module.js.map +1 -1
  85. package/dist/number-field/parts.js +1 -1
  86. package/dist/progress/parts.js +1 -1
  87. package/dist/progress/progress.css +1 -5
  88. package/dist/progress/progress.module.js.map +1 -1
  89. package/dist/reset.css +6 -6
  90. package/dist/select/parts.js +1 -1
  91. package/dist/select/select.css +14 -16
  92. package/dist/select/select.d.ts +5 -2
  93. package/dist/select/select.d.ts.map +1 -1
  94. package/dist/select/select.js +11 -2
  95. package/dist/select/select.js.map +1 -1
  96. package/dist/select/select.module.js.map +1 -1
  97. package/dist/separator/separator.css +1 -5
  98. package/dist/separator/separator.js +1 -1
  99. package/dist/separator/separator.module.js.map +1 -1
  100. package/dist/slider/index.d.ts +3 -0
  101. package/dist/slider/index.js +4 -0
  102. package/dist/slider/parts.d.ts +38 -0
  103. package/dist/slider/parts.d.ts.map +1 -0
  104. package/dist/slider/parts.js +69 -0
  105. package/dist/slider/parts.js.map +1 -0
  106. package/dist/slider/slider.css +97 -0
  107. package/dist/slider/slider.d.ts +38 -0
  108. package/dist/slider/slider.d.ts.map +1 -0
  109. package/dist/slider/slider.js +41 -0
  110. package/dist/slider/slider.js.map +1 -0
  111. package/dist/slider/slider.module.css.d.ts +2 -0
  112. package/dist/slider/slider.module.js +15 -0
  113. package/dist/slider/slider.module.js.map +1 -0
  114. package/dist/styles/reset.css +6 -6
  115. package/dist/styles/tokens.css +91 -76
  116. package/dist/switch/parts.js +1 -1
  117. package/dist/switch/switch.css +2 -6
  118. package/dist/switch/switch.d.ts +1 -1
  119. package/dist/switch/switch.js +1 -1
  120. package/dist/switch/switch.module.js.map +1 -1
  121. package/dist/tabs/parts.js +1 -1
  122. package/dist/tabs/tabs.css +5 -9
  123. package/dist/tabs/tabs.d.ts +1 -1
  124. package/dist/tabs/tabs.module.js.map +1 -1
  125. package/dist/tailwind-theme.css +23 -23
  126. package/dist/toast/parts.js +1 -1
  127. package/dist/toast/toast.css +11 -15
  128. package/dist/toast/toast.d.ts +1 -1
  129. package/dist/toast/toast.module.js.map +1 -1
  130. package/dist/tokens.css +98 -82
  131. package/dist/tooltip/parts.js +1 -1
  132. package/dist/tooltip/tooltip.css +7 -11
  133. package/dist/tooltip/tooltip.d.ts +1 -1
  134. package/dist/tooltip/tooltip.module.js.map +1 -1
  135. package/package.json +18 -1
  136. package/src/accordion/accordion.module.css +6 -20
  137. package/src/alert-dialog/alert-dialog.module.css +91 -0
  138. package/src/alert-dialog/alert-dialog.tsx +69 -0
  139. package/src/alert-dialog/index.ts +7 -0
  140. package/src/alert-dialog/parts.tsx +73 -0
  141. package/src/badge/badge.module.css +3 -13
  142. package/src/button/button.module.css +44 -64
  143. package/src/button/button.tsx +7 -7
  144. package/src/card/card.module.css +5 -16
  145. package/src/checkbox/checkbox.module.css +3 -14
  146. package/src/collapsible/collapsible.module.css +7 -20
  147. package/src/context-menu/context-menu.module.css +168 -0
  148. package/src/context-menu/context-menu.tsx +75 -0
  149. package/src/context-menu/index.ts +21 -0
  150. package/src/context-menu/parts.tsx +99 -0
  151. package/src/dialog/dialog.module.css +26 -33
  152. package/src/dialog/dialog.tsx +14 -1
  153. package/src/drawer/drawer.module.css +9 -58
  154. package/src/index.ts +21 -185
  155. package/src/input/input.module.css +5 -21
  156. package/src/menu/menu.module.css +13 -43
  157. package/src/number-field/number-field.module.css +12 -28
  158. package/src/progress/progress.module.css +1 -10
  159. package/src/select/select.module.css +14 -35
  160. package/src/select/select.tsx +14 -5
  161. package/src/separator/separator.module.css +1 -5
  162. package/src/slider/index.ts +14 -0
  163. package/src/slider/parts.tsx +90 -0
  164. package/src/slider/slider.module.css +110 -0
  165. package/src/slider/slider.tsx +68 -0
  166. package/src/styles/layer-order.css +22 -0
  167. package/src/styles/reset.css +6 -6
  168. package/src/styles/tailwind-theme.css +23 -23
  169. package/src/styles/tokens.css +98 -82
  170. package/src/switch/switch.module.css +2 -12
  171. package/src/tabs/tabs.module.css +5 -18
  172. package/src/toast/toast.module.css +11 -51
  173. package/src/tooltip/tooltip.module.css +7 -18
@@ -1,33 +1,28 @@
1
- @layer theme, base, components, utilities;
2
-
3
1
  @layer components {
4
2
  .positioner {
5
3
  outline: none;
6
4
  z-index: var(--z-dropdown);
7
5
  }
8
-
9
6
  .popup {
10
7
  box-sizing: border-box;
11
8
  padding: var(--space-1) 0;
12
9
  border-radius: var(--radius-lg);
13
- background-color: var(--color-bg-overlay);
14
- border: var(--border-width-base) solid var(--color-border-base);
10
+ background-color: var(--color-overlay);
11
+ border: var(--border-width-base) solid var(--color-line);
15
12
  box-shadow: var(--shadow-popover);
16
- color: var(--color-text-primary);
13
+ color: var(--color-primary);
17
14
  font-family: var(--font-mono);
18
15
  font-size: var(--font-size-sm);
19
16
  min-width: 200px;
20
17
  transform-origin: var(--transform-origin);
21
18
  outline: none;
22
19
  }
23
-
24
20
  @supports (backdrop-filter: blur(12px)) {
25
21
  .popup {
26
22
  backdrop-filter: blur(20px) saturate(1.8);
27
23
  -webkit-backdrop-filter: blur(20px) saturate(1.8);
28
24
  }
29
25
  }
30
-
31
26
  .popup[data-starting-style] {
32
27
  opacity: 0;
33
28
  transform: scale(0.95);
@@ -35,7 +30,6 @@
35
30
  opacity 150ms var(--easing-ease-out),
36
31
  transform 150ms var(--easing-ease-out);
37
32
  }
38
-
39
33
  .popup[data-ending-style] {
40
34
  opacity: 0;
41
35
  transform: scale(0.98);
@@ -43,9 +37,7 @@
43
37
  opacity 75ms var(--easing-ease-in),
44
38
  transform 75ms var(--easing-ease-in);
45
39
  }
46
-
47
40
  /* ─── Item ───────────────────────────────────────────────────────── */
48
-
49
41
  .item {
50
42
  display: flex;
51
43
  align-items: center;
@@ -56,26 +48,22 @@
56
48
  border-radius: var(--radius-md);
57
49
  font-family: var(--font-mono);
58
50
  font-size: var(--font-size-sm);
59
- color: var(--color-text-primary);
51
+ color: var(--color-primary);
60
52
  cursor: default;
61
53
  outline: none;
62
54
  user-select: none;
63
55
  position: relative;
64
56
  transition: none;
65
57
  }
66
-
67
58
  .item[data-highlighted] {
68
59
  background-color: var(--color-accent);
69
- color: var(--color-text-on-accent);
60
+ color: var(--color-on-accent);
70
61
  }
71
-
72
62
  .item[data-disabled] {
73
63
  opacity: 0.44;
74
64
  cursor: not-allowed;
75
65
  }
76
-
77
66
  /* ─── Item internals ─────────────────────────────────────────────── */
78
-
79
67
  .item-indicator {
80
68
  display: flex;
81
69
  align-items: center;
@@ -84,89 +72,71 @@
84
72
  flex-shrink: 0;
85
73
  color: inherit;
86
74
  }
87
-
88
75
  .item-text {
89
76
  flex: 1;
90
77
  }
91
-
92
78
  .item-shortcut {
93
79
  margin-left: var(--space-6);
94
80
  font-size: var(--font-size-xs);
95
- color: var(--color-text-tertiary);
81
+ color: var(--color-tertiary);
96
82
  letter-spacing: 0.02em;
97
83
  flex-shrink: 0;
98
84
  }
99
-
100
85
  .item[data-highlighted] .item-shortcut {
101
- color: color-mix(in srgb, var(--color-text-on-accent) 60%, transparent);
86
+ color: color-mix(in srgb, var(--color-on-accent) 60%, transparent);
102
87
  }
103
-
104
88
  /* ─── Group label ────────────────────────────────────────────────── */
105
-
106
89
  .group-label {
107
90
  padding: var(--space-1-5) var(--space-3) var(--space-0-5);
108
91
  font-family: var(--font-mono);
109
92
  font-size: var(--font-size-xs);
110
93
  font-weight: var(--font-weight-semibold);
111
- color: var(--color-text-tertiary);
94
+ color: var(--color-tertiary);
112
95
  text-transform: uppercase;
113
96
  letter-spacing: var(--letter-spacing-wide);
114
97
  cursor: default;
115
98
  user-select: none;
116
99
  margin-inline: var(--space-1);
117
100
  }
118
-
119
101
  /* ─── Separator ──────────────────────────────────────────────────── */
120
-
121
102
  .separator {
122
103
  margin: var(--space-1) 0;
123
104
  height: var(--border-width-base);
124
- background-color: var(--color-border-subtle);
105
+ background-color: var(--color-line-subtle);
125
106
  }
126
-
127
107
  /* ─── Submenu ────────────────────────────────────────────────────── */
128
-
129
108
  .submenu-trigger-icon {
130
109
  margin-left: auto;
131
- color: var(--color-text-tertiary);
110
+ color: var(--color-tertiary);
132
111
  flex-shrink: 0;
133
112
  }
134
-
135
113
  .item[data-highlighted] .submenu-trigger-icon {
136
- color: color-mix(in srgb, var(--color-text-on-accent) 70%, transparent);
114
+ color: color-mix(in srgb, var(--color-on-accent) 70%, transparent);
137
115
  }
138
-
139
116
  /* ─── Arrow ──────────────────────────────────────────────────────── */
140
-
141
117
  .arrow {
142
118
  display: flex;
143
119
  }
144
-
145
120
  .arrow[data-side="top"] {
146
121
  bottom: -8px;
147
122
  rotate: 180deg;
148
123
  }
149
-
150
124
  .arrow[data-side="bottom"] {
151
125
  top: -8px;
152
126
  rotate: 0deg;
153
127
  }
154
-
155
128
  .arrow[data-side="left"] {
156
129
  right: -13px;
157
130
  rotate: 90deg;
158
131
  }
159
-
160
132
  .arrow[data-side="right"] {
161
133
  left: -13px;
162
134
  rotate: -90deg;
163
135
  }
164
-
165
136
  .arrow-fill {
166
- fill: var(--color-bg-overlay);
137
+ fill: var(--color-overlay);
167
138
  }
168
-
169
139
  .arrow-stroke {
170
- fill: var(--color-border-base);
140
+ fill: var(--color-line);
171
141
  }
172
142
  }
@@ -1,5 +1,3 @@
1
- @layer theme, base, components, utilities;
2
-
3
1
  @layer components {
4
2
  .root {
5
3
  display: flex;
@@ -7,30 +5,25 @@
7
5
  align-items: flex-start;
8
6
  gap: var(--space-1);
9
7
  }
10
-
11
8
  .scrub-area {
12
9
  cursor: ew-resize;
13
10
  user-select: none;
14
11
  }
15
-
16
12
  .scrub-area-cursor {
17
13
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.5));
18
14
  }
19
-
20
15
  .label {
21
16
  cursor: ew-resize;
22
17
  font-family: var(--font-mono);
23
18
  font-size: var(--font-size-xs);
24
19
  font-weight: var(--font-weight-medium);
25
- color: var(--color-text-secondary);
20
+ color: var(--color-secondary);
26
21
  letter-spacing: var(--letter-spacing-wide);
27
22
  text-transform: uppercase;
28
23
  }
29
-
30
24
  .group {
31
25
  display: flex;
32
26
  }
33
-
34
27
  .input {
35
28
  box-sizing: border-box;
36
29
  margin: 0;
@@ -42,27 +35,24 @@
42
35
  font-weight: normal;
43
36
  text-align: center;
44
37
  font-variant-numeric: tabular-nums;
45
- color: var(--color-text-primary);
46
- background-color: var(--color-bg-elevated);
47
- border-top: var(--border-width-base) solid var(--color-border-base);
48
- border-bottom: var(--border-width-base) solid var(--color-border-base);
38
+ color: var(--color-primary);
39
+ background-color: var(--color-elevated);
40
+ border-top: var(--border-width-base) solid var(--color-line);
41
+ border-bottom: var(--border-width-base) solid var(--color-line);
49
42
  border-left: none;
50
43
  border-right: none;
51
44
  border-radius: 0;
52
45
  outline: none;
53
46
  transition: box-shadow var(--duration-fast) var(--easing-standard);
54
47
  }
55
-
56
48
  .input:focus {
57
49
  z-index: 1;
58
- box-shadow: inset var(--shadow-focus);
50
+ box-shadow: inset 0 0 0 1.5px var(--color-accent);
59
51
  }
60
-
61
52
  .input[data-disabled] {
62
53
  opacity: 0.44;
63
54
  cursor: not-allowed;
64
55
  }
65
-
66
56
  .step-button {
67
57
  box-sizing: border-box;
68
58
  display: flex;
@@ -72,9 +62,9 @@
72
62
  height: 2rem;
73
63
  margin: 0;
74
64
  padding: 0;
75
- border: var(--border-width-base) solid var(--color-border-base);
65
+ border: var(--border-width-base) solid var(--color-line);
76
66
  background-color: var(--color-surface-1);
77
- color: var(--color-text-secondary);
67
+ color: var(--color-secondary);
78
68
  cursor: pointer;
79
69
  outline: none;
80
70
  user-select: none;
@@ -83,31 +73,25 @@
83
73
  color var(--duration-fast) var(--easing-standard),
84
74
  transform 100ms var(--easing-ease-out);
85
75
  }
86
-
87
76
  .step-button:hover {
88
- background-color: var(--color-surface-hover);
89
- color: var(--color-text-primary);
77
+ background-color: var(--color-hover);
78
+ color: var(--color-primary);
90
79
  }
91
-
92
80
  .step-button:active:not([data-disabled]) {
93
- background-color: var(--color-surface-active);
81
+ background-color: var(--color-active);
94
82
  transform: scale(0.93);
95
83
  }
96
-
97
84
  .step-button:focus-visible {
98
85
  z-index: 1;
99
- box-shadow: inset var(--shadow-focus);
86
+ box-shadow: inset 0 0 0 1.5px var(--color-accent);
100
87
  }
101
-
102
88
  .step-button[data-disabled] {
103
89
  opacity: 0.44;
104
90
  cursor: not-allowed;
105
91
  }
106
-
107
92
  .decrement {
108
93
  border-radius: var(--radius-md) 0 0 var(--radius-md);
109
94
  }
110
-
111
95
  .increment {
112
96
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
113
97
  }
@@ -1,5 +1,3 @@
1
- @layer theme, base, components, utilities;
2
-
3
1
  @layer components {
4
2
  .root {
5
3
  display: flex;
@@ -7,16 +5,14 @@
7
5
  gap: var(--space-1-5);
8
6
  width: 100%;
9
7
  }
10
-
11
8
  .label-row {
12
9
  display: flex;
13
10
  align-items: center;
14
11
  justify-content: space-between;
15
12
  font-family: var(--font-mono);
16
13
  font-size: var(--font-size-xs);
17
- color: var(--color-text-secondary);
14
+ color: var(--color-secondary);
18
15
  }
19
-
20
16
  .track {
21
17
  width: 100%;
22
18
  height: 6px;
@@ -24,7 +20,6 @@
24
20
  border-radius: var(--radius-full);
25
21
  overflow: hidden;
26
22
  }
27
-
28
23
  .track-sm {
29
24
  height: 4px;
30
25
  }
@@ -34,14 +29,12 @@
34
29
  .track-lg {
35
30
  height: 8px;
36
31
  }
37
-
38
32
  .indicator {
39
33
  height: 100%;
40
34
  border-radius: var(--radius-full);
41
35
  background-color: var(--color-accent);
42
36
  transition: width var(--duration-slower) var(--easing-standard);
43
37
  }
44
-
45
38
  .indicator-success {
46
39
  background-color: var(--color-success-solid);
47
40
  }
@@ -51,7 +44,6 @@
51
44
  .indicator-error {
52
45
  background-color: var(--color-error-solid);
53
46
  }
54
-
55
47
  /* Indeterminate */
56
48
  @keyframes progress-indeterminate {
57
49
  0% {
@@ -61,7 +53,6 @@
61
53
  transform: translateX(400%);
62
54
  }
63
55
  }
64
-
65
56
  .indicator[data-value="null"],
66
57
  .indicator-indeterminate {
67
58
  width: 30% !important;
@@ -1,5 +1,3 @@
1
- @layer theme, base, components, utilities;
2
-
3
1
  @layer components {
4
2
  .trigger {
5
3
  display: inline-flex;
@@ -9,9 +7,9 @@
9
7
  width: 100%;
10
8
  font-family: var(--font-mono);
11
9
  font-size: var(--font-size-sm);
12
- color: var(--color-text-primary);
10
+ color: var(--color-primary);
13
11
  background-color: var(--color-surface-1);
14
- border: var(--border-width-base) solid var(--color-border-base);
12
+ border: var(--border-width-base) solid var(--color-line);
15
13
  border-radius: var(--radius-md);
16
14
  cursor: pointer;
17
15
  outline: none;
@@ -27,64 +25,55 @@
27
25
  overflow: hidden;
28
26
  text-overflow: ellipsis;
29
27
  }
30
-
31
28
  .trigger:hover:not([data-disabled]) {
32
- border-color: var(--color-border-strong);
29
+ border-color: var(--color-line-strong);
33
30
  }
34
-
35
31
  .trigger:focus-visible {
36
32
  border-color: var(--color-accent);
37
33
  box-shadow: var(--shadow-focus);
38
34
  }
39
-
40
35
  .trigger[data-disabled] {
41
36
  opacity: 0.44;
42
37
  cursor: not-allowed;
43
38
  }
44
-
45
39
  .trigger-value {
46
40
  flex: 1;
47
41
  overflow: hidden;
48
42
  text-overflow: ellipsis;
49
43
  }
50
-
51
44
  .trigger-icon {
52
45
  flex-shrink: 0;
53
- color: var(--color-text-tertiary);
46
+ color: var(--color-tertiary);
54
47
  transition: transform var(--duration-normal) var(--easing-standard);
55
48
  }
56
-
57
49
  .trigger[data-popup-open] .trigger-icon {
58
50
  transform: rotate(180deg);
59
51
  }
60
-
61
52
  /* ─── Popup / Listbox ───────────────────────────────── */
62
53
  .positioner {
63
54
  z-index: var(--z-dropdown);
64
55
  }
65
-
66
56
  .popup {
67
- background-color: var(--color-bg-overlay);
68
- border: var(--border-width-base) solid var(--color-border-base);
57
+ background-color: var(--color-overlay);
58
+ border: var(--border-width-base) solid var(--color-line);
69
59
  border-radius: var(--radius-lg);
70
60
  box-shadow: var(--shadow-popover);
71
61
  padding: var(--space-1);
72
- min-width: var(--available-width);
62
+ min-width: var(--anchor-width);
63
+ max-width: var(--available-width);
64
+ width: fit-content;
73
65
  max-height: 280px;
74
66
  overflow-y: auto;
75
67
  outline: none;
76
-
77
68
  transform-origin: var(--transform-origin);
78
69
  transition:
79
70
  opacity 150ms var(--easing-ease-out),
80
71
  transform 150ms var(--easing-ease-out);
81
72
  }
82
-
83
73
  .popup[data-starting-style] {
84
74
  opacity: 0;
85
75
  transform: scale(0.95);
86
76
  }
87
-
88
77
  .popup[data-ending-style] {
89
78
  opacity: 0;
90
79
  transform: scale(0.98);
@@ -92,7 +81,6 @@
92
81
  opacity 75ms var(--easing-ease-in),
93
82
  transform 75ms var(--easing-ease-in);
94
83
  }
95
-
96
84
  /* Backdrop blur for macOS feel */
97
85
  @supports (backdrop-filter: blur(12px)) {
98
86
  .popup {
@@ -100,7 +88,6 @@
100
88
  -webkit-backdrop-filter: blur(12px) saturate(1.5);
101
89
  }
102
90
  }
103
-
104
91
  .item {
105
92
  display: flex;
106
93
  align-items: center;
@@ -108,56 +95,48 @@
108
95
  padding: var(--space-1-5) var(--space-2-5);
109
96
  font-family: var(--font-mono);
110
97
  font-size: var(--font-size-sm);
111
- color: var(--color-text-primary);
98
+ color: var(--color-primary);
112
99
  border-radius: var(--radius-sm);
113
100
  cursor: default;
114
101
  outline: none;
115
102
  transition: background-color var(--duration-fast) var(--easing-standard);
116
103
  user-select: none;
117
104
  }
118
-
119
105
  .item:hover,
120
106
  .item[data-highlighted] {
121
107
  background-color: var(--color-accent);
122
- color: var(--color-text-on-accent);
108
+ color: var(--color-on-accent);
123
109
  }
124
-
125
110
  .item[data-selected] {
126
111
  font-weight: var(--font-weight-medium);
127
112
  }
128
-
129
113
  .item[data-disabled] {
130
114
  opacity: 0.44;
131
115
  cursor: not-allowed;
132
116
  }
133
-
134
117
  .item-indicator {
135
118
  margin-left: auto;
136
119
  color: var(--color-accent);
137
120
  display: flex;
138
121
  align-items: center;
139
122
  }
140
-
141
123
  .item:hover .item-indicator,
142
124
  .item[data-highlighted] .item-indicator {
143
- color: var(--color-text-on-accent);
125
+ color: var(--color-on-accent);
144
126
  }
145
-
146
127
  .group-label {
147
128
  padding: var(--space-1) var(--space-2-5);
148
129
  font-size: var(--font-size-xs);
149
130
  font-weight: var(--font-weight-semibold);
150
- color: var(--color-text-tertiary);
131
+ color: var(--color-tertiary);
151
132
  letter-spacing: var(--letter-spacing-wider);
152
133
  text-transform: uppercase;
153
134
  }
154
-
155
135
  .separator {
156
136
  height: var(--border-width-base);
157
- background-color: var(--color-border-subtle);
137
+ background-color: var(--color-line-subtle);
158
138
  margin: var(--space-1) 0;
159
139
  }
160
-
161
140
  /* List container — wraps items inside the popup */
162
141
  .list {
163
142
  display: flex;
@@ -1,14 +1,15 @@
1
+ import { useMemo, type ReactNode } from "react";
1
2
  import { Select as BaseSelect } from "@base-ui/react/select";
2
3
  import styles from "./select.module.css";
3
4
 
4
5
  export interface SelectOption {
5
6
  value: string;
6
- label: string;
7
+ label: ReactNode;
7
8
  disabled?: boolean;
8
9
  }
9
10
 
10
11
  export interface SelectGroup {
11
- label?: string;
12
+ label?: ReactNode;
12
13
  options: SelectOption[];
13
14
  }
14
15
 
@@ -54,11 +55,19 @@ function SelectItem({ option }: { option: SelectOption }) {
54
55
  );
55
56
  }
56
57
 
57
- export function Select({ placeholder = "Select…", options, groups, className, onValueChange, ...props }: SelectProps) {
58
+ export function Select({ placeholder = "Select…", options, groups, className, onValueChange, value, defaultValue, ...props }: SelectProps) {
59
+ const allOptions = useMemo(() => [...(options ?? []), ...(groups?.flatMap((g) => g.options) ?? [])], [options, groups]);
60
+
58
61
  return (
59
- <BaseSelect.Root onValueChange={onValueChange as never} {...props}>
62
+ <BaseSelect.Root onValueChange={onValueChange as never} value={value} defaultValue={defaultValue} {...props}>
60
63
  <BaseSelect.Trigger className={`${styles.trigger} ${className ?? ""}`}>
61
- <BaseSelect.Value className={styles["trigger-value"]} placeholder={placeholder} />
64
+ <BaseSelect.Value className={styles["trigger-value"]} placeholder={placeholder}>
65
+ {(currentValue: string | null) => {
66
+ if (!currentValue) return placeholder;
67
+ const match = allOptions.find((o) => o.value === currentValue);
68
+ return match ? match.label : currentValue;
69
+ }}
70
+ </BaseSelect.Value>
62
71
  <span className={styles["trigger-icon"]}>
63
72
  <ChevronIcon />
64
73
  </span>
@@ -1,16 +1,12 @@
1
- @layer theme, base, components, utilities;
2
-
3
1
  @layer components {
4
2
  .separator {
5
- background-color: var(--color-border-base);
3
+ background-color: var(--color-line);
6
4
  flex-shrink: 0;
7
5
  }
8
-
9
6
  .separator[data-orientation="horizontal"] {
10
7
  width: 100%;
11
8
  height: var(--border-width-base, 1px);
12
9
  }
13
-
14
10
  .separator[data-orientation="vertical"] {
15
11
  width: var(--border-width-base, 1px);
16
12
  align-self: stretch;
@@ -0,0 +1,14 @@
1
+ export { Slider } from "./slider";
2
+ export type { SliderProps } from "./slider";
3
+
4
+ export { SliderControl, SliderTrack, SliderIndicator, SliderThumb, SliderLabel, SliderValue } from "./parts";
5
+ export type {
6
+ SliderControlProps,
7
+ SliderTrackProps,
8
+ SliderIndicatorProps,
9
+ SliderThumbProps,
10
+ SliderLabelProps,
11
+ SliderValueProps,
12
+ } from "./parts";
13
+
14
+ export { SliderStyles } from "./slider";
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Styled primitives for Slider.
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { Slider as BaseSlider } from '@base-ui/react/slider';
7
+ * import { SliderControl, SliderTrack, SliderIndicator, SliderThumb } from '@brijbyte/agentic-ui/slider';
8
+ *
9
+ * <BaseSlider.Root defaultValue={50}>
10
+ * <SliderControl>
11
+ * <SliderTrack>
12
+ * <SliderIndicator />
13
+ * <SliderThumb aria-label="Volume" />
14
+ * </SliderTrack>
15
+ * </SliderControl>
16
+ * </BaseSlider.Root>
17
+ * ```
18
+ */
19
+ import { forwardRef } from "react";
20
+ import type { ComponentRef, ComponentPropsWithoutRef } from "react";
21
+ import { Slider as BaseSlider } from "@base-ui/react/slider";
22
+ import styles from "./slider.module.css";
23
+
24
+ type BaseControlProps = ComponentPropsWithoutRef<typeof BaseSlider.Control>;
25
+ type BaseTrackProps = ComponentPropsWithoutRef<typeof BaseSlider.Track>;
26
+ type BaseIndicatorProps = ComponentPropsWithoutRef<typeof BaseSlider.Indicator>;
27
+ type BaseThumbProps = ComponentPropsWithoutRef<typeof BaseSlider.Thumb>;
28
+ type BaseLabelProps = ComponentPropsWithoutRef<typeof BaseSlider.Label>;
29
+ type BaseValueProps = ComponentPropsWithoutRef<typeof BaseSlider.Value>;
30
+
31
+ export interface SliderControlProps extends Omit<BaseControlProps, "className"> {
32
+ className?: string;
33
+ }
34
+ export interface SliderTrackProps extends Omit<BaseTrackProps, "className"> {
35
+ className?: string;
36
+ }
37
+ export interface SliderIndicatorProps extends Omit<BaseIndicatorProps, "className"> {
38
+ className?: string;
39
+ }
40
+ export interface SliderThumbProps extends Omit<BaseThumbProps, "className"> {
41
+ className?: string;
42
+ }
43
+ export interface SliderLabelProps extends Omit<BaseLabelProps, "className"> {
44
+ className?: string;
45
+ }
46
+ export interface SliderValueProps extends Omit<BaseValueProps, "className"> {
47
+ className?: string;
48
+ }
49
+
50
+ export const SliderControl = forwardRef<ComponentRef<typeof BaseSlider.Control>, SliderControlProps>(function SliderControl(
51
+ { className, ...props },
52
+ ref,
53
+ ) {
54
+ return <BaseSlider.Control ref={ref} className={`${styles.control} ${className ?? ""}`} {...props} />;
55
+ });
56
+
57
+ export const SliderTrack = forwardRef<ComponentRef<typeof BaseSlider.Track>, SliderTrackProps>(function SliderTrack(
58
+ { className, ...props },
59
+ ref,
60
+ ) {
61
+ return <BaseSlider.Track ref={ref} className={`${styles.track} ${className ?? ""}`} {...props} />;
62
+ });
63
+
64
+ export const SliderIndicator = forwardRef<ComponentRef<typeof BaseSlider.Indicator>, SliderIndicatorProps>(function SliderIndicator(
65
+ { className, ...props },
66
+ ref,
67
+ ) {
68
+ return <BaseSlider.Indicator ref={ref} className={`${styles.indicator} ${className ?? ""}`} {...props} />;
69
+ });
70
+
71
+ export const SliderThumb = forwardRef<ComponentRef<typeof BaseSlider.Thumb>, SliderThumbProps>(function SliderThumb(
72
+ { className, ...props },
73
+ ref,
74
+ ) {
75
+ return <BaseSlider.Thumb ref={ref} className={`${styles.thumb} ${className ?? ""}`} {...props} />;
76
+ });
77
+
78
+ export const SliderLabel = forwardRef<ComponentRef<typeof BaseSlider.Label>, SliderLabelProps>(function SliderLabel(
79
+ { className, ...props },
80
+ ref,
81
+ ) {
82
+ return <BaseSlider.Label ref={ref} className={`${styles.label} ${className ?? ""}`} {...props} />;
83
+ });
84
+
85
+ export const SliderValue = forwardRef<ComponentRef<typeof BaseSlider.Value>, SliderValueProps>(function SliderValue(
86
+ { className, ...props },
87
+ ref,
88
+ ) {
89
+ return <BaseSlider.Value ref={ref} className={`${styles.value} ${className ?? ""}`} {...props} />;
90
+ });