@ctrl-ui/react 0.8.10 → 0.8.12

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 (98) hide show
  1. package/dist/action-bar.js +2 -2
  2. package/dist/activity.js +1 -1
  3. package/dist/blocks/design-canvas-inspector.js +2 -2
  4. package/dist/blocks/design-canvas.js +2 -2
  5. package/dist/blocks/discussion.js +1 -1
  6. package/dist/blocks/file-explorer.js +2 -2
  7. package/dist/blocks/settings.js +3 -3
  8. package/dist/chat-composer-editor/extensions/mention.js +1 -1
  9. package/dist/chat-composer.js +1 -1
  10. package/dist/chat-layout.js +1 -1
  11. package/dist/context.js +1 -1
  12. package/dist/dynamic-notification.js +1 -1
  13. package/dist/email/theme.js +1 -1
  14. package/dist/filter-bar/parts.js +1 -1
  15. package/dist/filter-bar.js +1 -1
  16. package/dist/inline-citation.js +1 -1
  17. package/dist/knob-contracts/emoji-picker-knobs.d.ts +1 -1
  18. package/dist/knob-contracts/emoji-picker-knobs.js +1 -0
  19. package/dist/knob-contracts/icon-picker-knobs.d.ts +4 -0
  20. package/dist/knob-contracts/icon-picker-knobs.js +9 -0
  21. package/dist/knob-contracts/markdown-knobs.d.ts +1 -1
  22. package/dist/knob-contracts/markdown-knobs.js +3 -1
  23. package/dist/knob-contracts/tabs-knobs.d.ts +1 -1
  24. package/dist/knob-contracts/tabs-knobs.js +2 -0
  25. package/dist/lib/phone-input-format.js +1 -1
  26. package/dist/skin.d.ts +2 -0
  27. package/dist/styles/index.css +3 -1
  28. package/dist/styles/recipes/accordion.css +13 -1
  29. package/dist/styles/recipes/badge.css +1 -0
  30. package/dist/styles/recipes/button.css +20 -4
  31. package/dist/styles/recipes/code.css +0 -15
  32. package/dist/styles/recipes/collapsible.css +15 -0
  33. package/dist/styles/recipes/emoji-picker.css +84 -1
  34. package/dist/styles/recipes/field.css +15 -2
  35. package/dist/styles/recipes/icon-picker.css +101 -0
  36. package/dist/styles/recipes/markdown.css +66 -0
  37. package/dist/styles/recipes/popup-motion.css +10 -0
  38. package/dist/styles/recipes/scroll-area.css +53 -27
  39. package/dist/styles/recipes/tabs-motion.css +99 -0
  40. package/dist/styles/recipes/tabs.css +38 -10
  41. package/dist/styles/recipes/tree.css +13 -1
  42. package/dist/ui/alert-dialog.js +1 -1
  43. package/dist/ui/alert.js +1 -1
  44. package/dist/ui/autocomplete.js +1 -1
  45. package/dist/ui/breadcrumb.js +1 -1
  46. package/dist/ui/button.d.ts +6 -3
  47. package/dist/ui/button.js +10 -6
  48. package/dist/ui/card.js +1 -1
  49. package/dist/ui/code-diff.js +1 -1
  50. package/dist/ui/code.js +2 -2
  51. package/dist/ui/collapsible.js +1 -2
  52. package/dist/ui/color-picker.js +1 -1
  53. package/dist/ui/combobox.js +1 -1
  54. package/dist/ui/context-menu.js +1 -1
  55. package/dist/ui/dialog.js +1 -1
  56. package/dist/ui/drawer.js +1 -1
  57. package/dist/ui/dropdown-menu.js +1 -1
  58. package/dist/ui/emoji-icon-picker.d.ts +13 -0
  59. package/dist/ui/emoji-icon-picker.js +50 -0
  60. package/dist/ui/emoji-picker.d.ts +14 -3
  61. package/dist/ui/emoji-picker.js +194 -15
  62. package/dist/ui/empty.js +1 -1
  63. package/dist/ui/hover-card.js +1 -1
  64. package/dist/ui/icon-picker.d.ts +35 -0
  65. package/dist/ui/icon-picker.js +140 -0
  66. package/dist/ui/input-group.js +1 -1
  67. package/dist/ui/item.js +1 -1
  68. package/dist/ui/markdown-elements.js +6 -10
  69. package/dist/ui/markdown.d.ts +6 -5
  70. package/dist/ui/markdown.js +12 -4
  71. package/dist/ui/menubar.js +1 -1
  72. package/dist/ui/morphing-panel.js +1 -1
  73. package/dist/ui/navigation-menu.js +1 -1
  74. package/dist/ui/phone-input.js +2 -2
  75. package/dist/ui/popover.d.ts +3 -0
  76. package/dist/ui/popover.js +37 -2
  77. package/dist/ui/rich-tooltip.js +1 -1
  78. package/dist/ui/scroll-area.d.ts +4 -1
  79. package/dist/ui/scroll-area.js +21 -6
  80. package/dist/ui/select.js +1 -1
  81. package/dist/ui/sheet.js +1 -1
  82. package/dist/ui/sidebar-menu.js +1 -1
  83. package/dist/ui/sidebar-provider.js +2 -2
  84. package/dist/ui/sidebar-resize-rail.js +1 -1
  85. package/dist/ui/sidebar.js +1 -1
  86. package/dist/ui/tabs.d.ts +4 -0
  87. package/dist/ui/tabs.js +69 -23
  88. package/dist/ui/timeline.js +1 -1
  89. package/dist/ui/toast.js +1 -1
  90. package/dist/ui/toggle.d.ts +1 -1
  91. package/dist/ui/toggle.js +2 -1
  92. package/dist/ui/toolbar.d.ts +1 -1
  93. package/dist/ui/toolbar.js +1 -1
  94. package/dist/ui/tooltip.js +1 -1
  95. package/dist/ui/tree.js +1 -1
  96. package/dist/ui/trigger-menu.js +1 -1
  97. package/dist/user-ask.js +2 -2
  98. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ @layer components {
2
+ :where([data-control-family="icon-picker"][data-slot="root"]) {
3
+ --cui-icon-picker-cell-size: calc(var(--spacing) * 10);
4
+ --cui-icon-picker-cell-radius: var(--radius-control);
5
+ --cui-icon-picker-foreground: var(--foreground);
6
+ --cui-icon-picker-active-background: var(--accent);
7
+ inline-size: calc(var(--_icon-picker-columns) * var(--cui-icon-picker-cell-size) + var(--spacing) * 4);
8
+ max-inline-size: 100%;
9
+ color: var(--cui-icon-picker-foreground);
10
+ }
11
+ :where([data-control-family="icon-picker"][data-slot="content"]) {
12
+ padding: calc(var(--spacing) * 2);
13
+ max-block-size: 16rem;
14
+ overflow-y: auto;
15
+ overscroll-behavior: contain;
16
+ scrollbar-width: thin;
17
+ }
18
+ :where([data-control-family="icon-picker"][data-slot="grid"]) {
19
+ display: grid;
20
+ grid-template-columns: repeat(var(--_icon-picker-columns), minmax(0, 1fr));
21
+ }
22
+ :where([data-control-family="icon-picker"][data-slot="icon"]) {
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ block-size: var(--cui-icon-picker-cell-size);
27
+ min-inline-size: 0;
28
+ border-radius: var(--cui-icon-picker-cell-radius);
29
+ background: transparent;
30
+ color: inherit;
31
+ cursor: pointer;
32
+ transition: background-color var(--duration-fast) var(--ease-standard);
33
+ }
34
+ :where([data-control-family="icon-picker"][data-slot="icon"]:is(:hover, [aria-pressed="true"])) {
35
+ background: var(--cui-icon-picker-active-background);
36
+ }
37
+ :where([data-control-family="icon-picker"][data-slot="icon"] svg) {
38
+ inline-size: calc(var(--spacing) * 5);
39
+ block-size: calc(var(--spacing) * 5);
40
+ }
41
+ :where([data-control-family="icon-picker"][data-slot="colors"]) {
42
+ display: flex;
43
+ gap: calc(var(--spacing) * 1);
44
+ padding: calc(var(--spacing) * 1) calc(var(--spacing) * 2) 0;
45
+ overflow-x: auto;
46
+ }
47
+ :where([data-control-family="icon-picker"][data-slot="color"]) {
48
+ display: grid;
49
+ place-items: center;
50
+ flex: 1 0 calc(var(--spacing) * 9);
51
+ block-size: calc(var(--spacing) * 10);
52
+ border-radius: var(--cui-icon-picker-cell-radius, var(--radius-control));
53
+ cursor: pointer;
54
+ }
55
+ :where([data-control-family="icon-picker"][data-slot="color"] > span) {
56
+ inline-size: calc(var(--spacing) * 6);
57
+ block-size: calc(var(--spacing) * 6);
58
+ border-radius: 50%;
59
+ background: currentColor;
60
+ }
61
+ :where([data-control-family="icon-picker"][data-slot="color"][data-checked] > span) {
62
+ outline: 2px solid var(--foreground);
63
+ outline-offset: 3px;
64
+ }
65
+ :where([data-control-family="icon-picker"][data-slot="empty"]) {
66
+ display: grid;
67
+ place-items: center;
68
+ min-block-size: calc(var(--spacing) * 20);
69
+ color: var(--muted-foreground);
70
+ font-size: var(--text-label);
71
+ }
72
+ @media (pointer: coarse) {
73
+ :where([data-control-family="icon-picker"][data-slot="root"]) {
74
+ --cui-icon-picker-cell-size: 44px;
75
+ }
76
+ :where([data-control-family="icon-picker"][data-slot="color"]) {
77
+ min-inline-size: 44px;
78
+ block-size: 44px;
79
+ }
80
+ }
81
+ }
82
+ @property --cui-icon-picker-cell-size {
83
+ syntax: "<length>";
84
+ inherits: true;
85
+ initial-value: 0px;
86
+ }
87
+ @property --cui-icon-picker-cell-radius {
88
+ syntax: "<length-percentage>";
89
+ inherits: true;
90
+ initial-value: 0px;
91
+ }
92
+ @property --cui-icon-picker-foreground {
93
+ syntax: "<color>";
94
+ inherits: true;
95
+ initial-value: transparent;
96
+ }
97
+ @property --cui-icon-picker-active-background {
98
+ syntax: "<color>";
99
+ inherits: true;
100
+ initial-value: transparent;
101
+ }
@@ -12,6 +12,8 @@
12
12
  --cui-markdown-table-header-background: var(--muted);
13
13
  --cui-markdown-font-size: var(--text-body);
14
14
  --cui-markdown-line-height: var(--leading-relaxed);
15
+ --cui-markdown-flow-gap: calc(var(--spacing) * 4);
16
+ --cui-markdown-heading-gap: calc(var(--spacing) * 6);
15
17
  color: var(--cui-markdown-foreground);
16
18
  font-size: var(--cui-markdown-font-size);
17
19
  overflow-wrap: break-word;
@@ -180,6 +182,58 @@
180
182
  margin-block: calc(var(--spacing) * 4);
181
183
  }
182
184
 
185
+ :where([data-control-family="markdown"][data-slot="flow"] > .cui-markdown-streamdown) {
186
+ display: contents;
187
+ }
188
+
189
+ :where([data-control-family="markdown"][data-slot="flow"]) {
190
+ display: grid;
191
+ min-width: 0;
192
+ row-gap: var(--cui-markdown-flow-gap);
193
+ }
194
+
195
+ :where(
196
+ :is([data-control-family="markdown"][data-slot="flow"], .cui-markdown-streamdown)
197
+ > [data-control-family="markdown"]:is(
198
+ [data-slot="paragraph"],
199
+ [data-slot="unordered-list"],
200
+ [data-slot="ordered-list"],
201
+ [data-slot="blockquote"],
202
+ [data-slot="separator"],
203
+ [data-slot="table-scroll"]
204
+ )
205
+ ) {
206
+ margin-block: 0;
207
+ }
208
+
209
+ :where(
210
+ :is([data-control-family="markdown"][data-slot="flow"], .cui-markdown-streamdown)
211
+ > [data-control-family="markdown"]:is(
212
+ [data-slot="h1"],
213
+ [data-slot="h2"],
214
+ [data-slot="h3"],
215
+ [data-slot="h4"],
216
+ [data-slot="h5"],
217
+ [data-slot="h6"]
218
+ )
219
+ ) {
220
+ margin-block: max(0px, calc(var(--cui-markdown-heading-gap) - var(--cui-markdown-flow-gap))) 0;
221
+ }
222
+
223
+ :where(
224
+ :is([data-control-family="markdown"][data-slot="flow"], .cui-markdown-streamdown)
225
+ > [data-control-family="markdown"]:is(
226
+ [data-slot="h1"],
227
+ [data-slot="h2"],
228
+ [data-slot="h3"],
229
+ [data-slot="h4"],
230
+ [data-slot="h5"],
231
+ [data-slot="h6"]
232
+ ):first-child
233
+ ) {
234
+ margin-block-start: 0;
235
+ }
236
+
183
237
  :where([data-control-family="markdown"][data-slot="inline-code"]) {
184
238
  padding-inline: calc(var(--spacing) * 1);
185
239
  padding-block: calc(var(--spacing) * 0.5);
@@ -263,3 +317,15 @@
263
317
  inherits: true;
264
318
  initial-value: 1.5;
265
319
  }
320
+
321
+ @property --cui-markdown-flow-gap {
322
+ syntax: "<length>";
323
+ inherits: true;
324
+ initial-value: 0px;
325
+ }
326
+
327
+ @property --cui-markdown-heading-gap {
328
+ syntax: "<length>";
329
+ inherits: true;
330
+ initial-value: 0px;
331
+ }
@@ -1,4 +1,14 @@
1
1
  @layer components {
2
+ :where([data-control-family="popup"][data-popup-kind="popover"][data-slot="viewport"]) {
3
+ block-size: var(--_popover-viewport-height, auto);
4
+ overflow: clip;
5
+ transition: block-size var(--duration-base) var(--ease-emphasized);
6
+ }
7
+
8
+ :where([data-control-family="popup"][data-popup-kind="popover"][data-slot="viewport-content"]) {
9
+ display: flow-root;
10
+ }
11
+
2
12
  :where([data-control-family="popup"][data-popup-kind="sheet"][data-popup-part="surface"]) {
3
13
  transition-property: translate;
4
14
  transition-duration: var(--duration-base);
@@ -5,6 +5,50 @@
5
5
  --cui-scroll-area-corner-background: transparent;
6
6
  }
7
7
 
8
+ :where([data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"]) {
9
+ display: grid;
10
+ grid-template-columns: minmax(0, 1fr) auto;
11
+ grid-template-rows: minmax(0, 1fr) auto;
12
+ }
13
+
14
+ :where([data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"] > [data-scroll-area-viewport]),
15
+ :where([data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"] > [data-control-family="progressive-blur"]) {
16
+ grid-area: 1 / 1;
17
+ min-inline-size: 0;
18
+ min-block-size: 0;
19
+ }
20
+
21
+ :where(
22
+ [data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"]
23
+ > [data-slot="scrollbar"][data-orientation="vertical"]
24
+ ) {
25
+ grid-area: 1 / 2;
26
+ }
27
+
28
+ :where(
29
+ [data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"]
30
+ > [data-slot="scrollbar"][data-orientation="horizontal"]
31
+ ) {
32
+ grid-area: 2 / 1;
33
+ }
34
+
35
+ :where([data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"] > [data-slot="corner"]) {
36
+ grid-area: 2 / 2;
37
+ }
38
+
39
+ :where(
40
+ [data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"]
41
+ > [data-slot="scrollbar"][data-orientation="vertical"]:not([data-has-overflow-y])
42
+ > [data-slot="thumb"]
43
+ ),
44
+ :where(
45
+ [data-control-family="scroll-area"][data-slot="root"][data-scrollbar-gutter="stable"]
46
+ > [data-slot="scrollbar"][data-orientation="horizontal"]:not([data-has-overflow-x])
47
+ > [data-slot="thumb"]
48
+ ) {
49
+ display: none;
50
+ }
51
+
8
52
  @supports (corner-shape: squircle) {
9
53
  @container not style(--corner-shape: round) {
10
54
  :where([data-control-family="scroll-area"][data-slot="root"] > [data-control-family="progressive-blur"]) {
@@ -18,11 +62,6 @@
18
62
  z-index: 0;
19
63
  border-radius: inherit;
20
64
  outline: none;
21
- transition:
22
- --_scroll-area-fade-top var(--duration-fast) var(--ease-standard),
23
- --_scroll-area-fade-bottom var(--duration-fast) var(--ease-standard),
24
- --_scroll-area-fade-left var(--duration-fast) var(--ease-standard),
25
- --_scroll-area-fade-right var(--duration-fast) var(--ease-standard);
26
65
  }
27
66
 
28
67
  :where(
@@ -53,39 +92,26 @@
53
92
  }
54
93
 
55
94
  :where(
56
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-y-start]:not([data-lock-axis="y"], [data-lock-axis="both"])
57
- > [data-scroll-area-viewport]
58
- ) {
59
- --_scroll-area-fade-top: var(--scroll-fade-size);
60
- }
61
-
62
- :where(
63
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-y-end]:not([data-lock-axis="y"], [data-lock-axis="both"])
64
- > [data-scroll-area-viewport]
95
+ [data-control-family="scroll-area"][data-slot="root"]:not([data-lock-axis="y"], [data-lock-axis="both"]) > [data-scroll-area-viewport]
65
96
  ) {
66
- --_scroll-area-fade-bottom: var(--scroll-fade-size);
97
+ --_scroll-area-fade-top: min(var(--scroll-fade-size), var(--scroll-area-overflow-y-start, 0px));
98
+ --_scroll-area-fade-bottom: min(var(--scroll-fade-size), var(--scroll-area-overflow-y-end, 0px));
67
99
  }
68
100
 
69
101
  :where(
70
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-x-start]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(ltr)
71
- > [data-scroll-area-viewport]
72
- ),
73
- :where(
74
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-x-end]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(rtl)
102
+ [data-control-family="scroll-area"][data-slot="root"]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(ltr)
75
103
  > [data-scroll-area-viewport]
76
104
  ) {
77
- --_scroll-area-fade-left: var(--scroll-fade-size);
105
+ --_scroll-area-fade-left: min(var(--scroll-fade-size), var(--scroll-area-overflow-x-start, 0px));
106
+ --_scroll-area-fade-right: min(var(--scroll-fade-size), var(--scroll-area-overflow-x-end, 0px));
78
107
  }
79
108
 
80
109
  :where(
81
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-x-end]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(ltr)
82
- > [data-scroll-area-viewport]
83
- ),
84
- :where(
85
- [data-control-family="scroll-area"][data-slot="root"][data-overflow-x-start]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(rtl)
110
+ [data-control-family="scroll-area"][data-slot="root"]:not([data-lock-axis="x"], [data-lock-axis="both"]):dir(rtl)
86
111
  > [data-scroll-area-viewport]
87
112
  ) {
88
- --_scroll-area-fade-right: var(--scroll-fade-size);
113
+ --_scroll-area-fade-left: min(var(--scroll-fade-size), var(--scroll-area-overflow-x-end, 0px));
114
+ --_scroll-area-fade-right: min(var(--scroll-fade-size), var(--scroll-area-overflow-x-start, 0px));
89
115
  }
90
116
 
91
117
  :where(
@@ -0,0 +1,99 @@
1
+ @layer components {
2
+ @supports ((anchor-name: --aui-slide-panel) and (anchor-scope: --aui-slide-panel)) {
3
+ :where([data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-slide-exiting][data-ending-style]) {
4
+ display: block;
5
+ position: absolute;
6
+ top: var(--_tabs-panel-top);
7
+ left: var(--_tabs-panel-left);
8
+ right: auto;
9
+ bottom: auto;
10
+ width: var(--_tabs-panel-width);
11
+ height: var(--_tabs-panel-height);
12
+ margin: 0;
13
+ overflow: clip;
14
+ animation: aui-slide-exit-hold var(--duration-slow) var(--ease-emphasized) both;
15
+ }
16
+
17
+ @supports (height: anchor-size(height)) {
18
+ :where([data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-slide-exiting][data-ending-style]) {
19
+ height: anchor-size(height);
20
+ }
21
+ }
22
+
23
+ :where(
24
+ [data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-ending-style][data-activation-direction="right"]
25
+ ) {
26
+ translate: -100% 0;
27
+ }
28
+
29
+ :where(
30
+ [data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-ending-style][data-activation-direction="left"]
31
+ ) {
32
+ translate: 100% 0;
33
+ }
34
+
35
+ :where(
36
+ [data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-ending-style][data-activation-direction="down"]
37
+ ) {
38
+ translate: 0 -100%;
39
+ }
40
+
41
+ :where([data-control-family="tabs"][data-slot="panel"][data-slide="panel"][inert][data-ending-style][data-activation-direction="up"]) {
42
+ translate: 0 100%;
43
+ }
44
+
45
+ :where(
46
+ [data-control-family="tabs"][data-slot="root"]:has(> [data-slot="panel"][data-starting-style])
47
+ > [data-slot="panel"][inert][data-ending-style]
48
+ ) {
49
+ translate: 0 0;
50
+ transition: none;
51
+ }
52
+
53
+ :where([data-control-family="tabs"][data-slot="panel"][data-slide="panel"][data-starting-style]) {
54
+ transition: none;
55
+ }
56
+
57
+ :where([data-control-family="tabs"][data-slot="root"][data-slide-starting] > [data-slot="panel"][data-slide="panel"]) {
58
+ transition: none;
59
+ }
60
+
61
+ :where([data-control-family="tabs"][data-slot="root"][data-slide-starting] > [data-slot="panel"][inert]) {
62
+ translate: 0 0;
63
+ }
64
+
65
+ :where(
66
+ [data-control-family="tabs"][data-slot="root"][data-slide-starting]
67
+ > [data-slot="panel"]:not([inert])[data-activation-direction="right"]
68
+ ) {
69
+ translate: 100% 0;
70
+ }
71
+
72
+ :where(
73
+ [data-control-family="tabs"][data-slot="root"][data-slide-starting]
74
+ > [data-slot="panel"]:not([inert])[data-activation-direction="left"]
75
+ ) {
76
+ translate: -100% 0;
77
+ }
78
+
79
+ :where(
80
+ [data-control-family="tabs"][data-slot="root"][data-slide-starting]
81
+ > [data-slot="panel"]:not([inert])[data-activation-direction="down"]
82
+ ) {
83
+ translate: 0 100%;
84
+ }
85
+
86
+ :where(
87
+ [data-control-family="tabs"][data-slot="root"][data-slide-starting]
88
+ > [data-slot="panel"]:not([inert])[data-activation-direction="up"]
89
+ ) {
90
+ translate: 0 -100%;
91
+ }
92
+
93
+ @supports (height: calc-size(auto, size)) {
94
+ :where([data-control-family="tabs"][data-slot="root"][data-slide-starting] > [data-slot="panel"][data-slide="panel"]:not([inert])) {
95
+ height: var(--aui-slide-prev-height, calc-size(auto, size));
96
+ }
97
+ }
98
+ }
99
+ }
@@ -1,5 +1,8 @@
1
1
  @layer components {
2
2
  :where([data-control-family="tabs"][data-slot="root"]) {
3
+ position: relative;
4
+ display: flex;
5
+ flex-direction: column;
3
6
  --cui-tabs-trigger-radius: var(--radius-control);
4
7
  --cui-tabs-list-padding: calc(var(--spacing) * 1);
5
8
  --cui-tabs-list-radius: calc(
@@ -10,6 +13,8 @@
10
13
  --cui-tabs-list-shadow: inset 0 0 0 var(--control-rim-width) var(--control-rim), var(--shadow-inset);
11
14
  --cui-tabs-list-backdrop-filter: none;
12
15
  --cui-tabs-indicator-background: var(--background);
16
+ --cui-tabs-surface-background: var(--background);
17
+ --cui-tabs-surface-radius: var(--radius-panel);
13
18
  --cui-tabs-foreground: var(--muted-foreground);
14
19
  --cui-tabs-active-foreground: var(--foreground);
15
20
  --cui-tabs-hover-foreground: var(--foreground);
@@ -19,7 +24,7 @@
19
24
  }
20
25
 
21
26
  :where([data-control-family="tabs"][data-slot="root"][data-orientation="vertical"]) {
22
- display: flex;
27
+ flex-direction: row;
23
28
  gap: calc(var(--spacing) * 4);
24
29
  }
25
30
 
@@ -105,15 +110,14 @@
105
110
 
106
111
  :where([data-control-family="tabs"][data-slot="list"][data-variant="browser"]) {
107
112
  --_tabs-browser-corner-double: calc(var(--_tabs-trigger-radius-fit) + var(--_tabs-trigger-radius-fit));
108
- --_tabs-browser-inset: calc(var(--_tabs-trigger-radius-fit) + var(--radius-panel));
113
+ --_tabs-browser-inset: calc(var(--_tabs-trigger-radius-fit) + var(--cui-tabs-surface-radius));
109
114
  min-height: calc(var(--_tabs-trigger-h) + var(--cui-tabs-list-padding));
110
115
  width: auto;
111
116
  align-items: flex-end;
112
117
  isolation: isolate;
113
118
  z-index: 1;
114
119
  --cui-tabs-list-background: transparent;
115
- --cui-tabs-list-shadow: inset 0 -1px 0 var(--cui-tabs-border-color);
116
- --cui-tabs-indicator-background: var(--background);
120
+ --cui-tabs-list-shadow: inset 0 calc(-1 * var(--cui-tabs-border-width)) 0 var(--cui-tabs-border-color);
117
121
  --cui-tabs-active-foreground: var(--foreground);
118
122
  border-radius: var(--cui-tabs-list-radius) var(--cui-tabs-list-radius) 0 0;
119
123
  }
@@ -132,7 +136,7 @@
132
136
  border: var(--cui-tabs-border-width) solid var(--cui-tabs-border-color);
133
137
  border-bottom: none;
134
138
  border-radius: var(--_tabs-trigger-radius-fit) var(--_tabs-trigger-radius-fit) 0 0;
135
- background: var(--cui-tabs-indicator-background);
139
+ background: var(--cui-tabs-surface-background);
136
140
  }
137
141
 
138
142
  :where([data-control-family="tabs"][data-slot="list"][data-variant="browser"] [data-slot="indicator"])::after {
@@ -145,17 +149,17 @@
145
149
  circle at 0 -1px,
146
150
  transparent calc(var(--_tabs-trigger-radius-fit) - 0.5px),
147
151
  var(--cui-tabs-border-color) var(--_tabs-trigger-radius-fit) calc(var(--_tabs-trigger-radius-fit) + 0.5px),
148
- var(--cui-tabs-indicator-background) calc(var(--_tabs-trigger-radius-fit) + 1px)
152
+ var(--cui-tabs-surface-background) calc(var(--_tabs-trigger-radius-fit) + 1px)
149
153
  )
150
154
  left / calc(var(--_tabs-trigger-radius-fit) + 1px) 100% no-repeat,
151
155
  radial-gradient(
152
156
  circle at 100% -1px,
153
157
  transparent calc(var(--_tabs-trigger-radius-fit) - 0.5px),
154
158
  var(--cui-tabs-border-color) var(--_tabs-trigger-radius-fit) calc(var(--_tabs-trigger-radius-fit) + 0.5px),
155
- var(--cui-tabs-indicator-background) calc(var(--_tabs-trigger-radius-fit) + 1px)
159
+ var(--cui-tabs-surface-background) calc(var(--_tabs-trigger-radius-fit) + 1px)
156
160
  )
157
161
  right / calc(var(--_tabs-trigger-radius-fit) + 1px) 100% no-repeat,
158
- linear-gradient(var(--cui-tabs-indicator-background) 0 0) center / calc(100% - var(--_tabs-browser-corner-double)) 100% no-repeat;
162
+ linear-gradient(var(--cui-tabs-surface-background) 0 0) center / calc(100% - var(--_tabs-browser-corner-double)) 100% no-repeat;
159
163
  }
160
164
 
161
165
  :where([data-control-family="tabs"][data-slot="list"][data-single="true"]) {
@@ -178,6 +182,11 @@
178
182
  outline-style: none;
179
183
  }
180
184
 
185
+ :where([data-control-family="tabs"][data-slot="root"][data-orientation="vertical"] > [data-slot="panel"]) {
186
+ min-width: 0;
187
+ flex: 1;
188
+ }
189
+
181
190
  :where(
182
191
  [data-control-family="tabs"][data-slot="list"][data-orientation="horizontal"]:not([data-variant="browser"]) ~ [data-slot="panel"]
183
192
  ) {
@@ -187,11 +196,18 @@
187
196
  :where([data-control-family="tabs"][data-slot="list"][data-variant="browser"] ~ [data-slot="panel"]) {
188
197
  border: var(--cui-tabs-border-width) solid var(--cui-tabs-border-color);
189
198
  border-top: none;
190
- border-radius: 0 0 var(--radius-panel) var(--radius-panel);
191
- background: var(--cui-tabs-indicator-background);
199
+ border-radius: 0 0 var(--cui-tabs-surface-radius) var(--cui-tabs-surface-radius);
200
+ background: var(--cui-tabs-surface-background);
192
201
  padding: calc(var(--spacing) * 4);
193
202
  }
194
203
 
204
+ :where([data-control-family="tabs"][data-slot="surface"]) {
205
+ min-width: 0;
206
+ border: var(--cui-tabs-border-width) solid var(--cui-tabs-border-color);
207
+ border-radius: var(--cui-tabs-surface-radius);
208
+ background: var(--cui-tabs-surface-background);
209
+ }
210
+
195
211
  :where([data-control-family="tabs"][data-slot="list"][data-variant="browser"] [data-control-family="tabs"][data-slot="tab"]) {
196
212
  border-top-left-radius: var(--_tabs-trigger-radius-fit);
197
213
  border-top-right-radius: var(--_tabs-trigger-radius-fit);
@@ -216,6 +232,18 @@
216
232
  }
217
233
  }
218
234
 
235
+ @property --cui-tabs-surface-background {
236
+ syntax: "<color>";
237
+ inherits: true;
238
+ initial-value: transparent;
239
+ }
240
+
241
+ @property --cui-tabs-surface-radius {
242
+ syntax: "<length>";
243
+ inherits: true;
244
+ initial-value: 0px;
245
+ }
246
+
219
247
  @property --cui-tabs-trigger-radius {
220
248
  syntax: "<length-percentage>";
221
249
  inherits: true;
@@ -93,7 +93,6 @@
93
93
 
94
94
  :where([data-control-family="tree"][data-slot="item-content"]) {
95
95
  height: var(--collapsible-panel-height);
96
- overflow: hidden;
97
96
  opacity: 1;
98
97
  transition-property: height, opacity;
99
98
  transition-duration: var(--duration-base);
@@ -102,9 +101,22 @@
102
101
 
103
102
  :where([data-control-family="tree"][data-slot="item-content"]:is([data-starting-style], [data-ending-style])) {
104
103
  height: 0;
104
+ overflow: clip;
105
105
  opacity: 0;
106
106
  }
107
107
 
108
+ @supports (transition-behavior: allow-discrete) {
109
+ :where([data-control-family="tree"][data-slot="item-content"]) {
110
+ transition-property: height, opacity, overflow;
111
+ transition-timing-function: var(--ease-emphasized), var(--ease-emphasized), step-end;
112
+ transition-behavior: normal, normal, allow-discrete;
113
+ }
114
+
115
+ :where([data-control-family="tree"][data-slot="item-content"][data-ending-style]) {
116
+ transition-timing-function: var(--ease-emphasized), var(--ease-emphasized), step-start;
117
+ }
118
+ }
119
+
108
120
  :where([data-control-family="tree"][data-slot="item-group"]) {
109
121
  translate: 0 0;
110
122
  transition: translate var(--duration-base) var(--ease-emphasized);
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { controlEffectsAttribute } from "../skin.js";
3
2
  import { cn } from "../lib/cn.js";
3
+ import { controlEffectsAttribute } from "../skin.js";
4
4
  import { useSkin } from "../skin-provider.js";
5
5
  import { Button } from "./button.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
package/dist/ui/alert.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { jsx } from "react/jsx-runtime";
4
3
  import { useRender } from "@base-ui/react/use-render";
4
+ import { jsx } from "react/jsx-runtime";
5
5
  //#region src/ui/alert.tsx
6
6
  const alertVariants = ["default", "destructive"];
7
7
  function Alert({ variant = "default", className, ...props }) {
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { controlEffectsAttribute } from "../skin.js";
3
2
  import { cn } from "../lib/cn.js";
3
+ import { controlEffectsAttribute } from "../skin.js";
4
4
  import { useSkin } from "../skin-provider.js";
5
5
  import { ScrollArea } from "./scroll-area.js";
6
6
  import { popupItemStructureClasses } from "../surface-variants.js";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
+ import { useRender } from "@base-ui/react/use-render";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  import { ChevronRight, MoreHorizontal } from "lucide-react";
5
- import { useRender } from "@base-ui/react/use-render";
6
6
  //#region src/ui/breadcrumb.tsx
7
7
  function Breadcrumb({ className, ...props }) {
8
8
  return /* @__PURE__ */ jsx("nav", {
@@ -9,6 +9,8 @@ export type ButtonTone = ControlTone;
9
9
  export declare const ButtonTrackContext: import("react").Context<boolean>;
10
10
  export declare const buttonShapes: readonly ["default", "circle"];
11
11
  export type ButtonShape = (typeof buttonShapes)[number];
12
+ export declare const buttonLayouts: readonly ["inline", "stacked"];
13
+ export type ButtonLayout = (typeof buttonLayouts)[number];
12
14
  export type ButtonAppearanceProps = {
13
15
  variant?: ButtonVariant;
14
16
  size?: ButtonSize;
@@ -16,6 +18,7 @@ export type ButtonAppearanceProps = {
16
18
  active?: boolean;
17
19
  iconOnly?: boolean;
18
20
  shape?: ButtonShape;
21
+ layout?: ButtonLayout;
19
22
  style?: CSSProperties & ButtonKnobStyle;
20
23
  };
21
24
  export type ButtonProps = ComponentProps<"button"> & ButtonAppearanceProps & {
@@ -32,7 +35,7 @@ export type ButtonLabelProps = ComponentProps<"label"> & ButtonAppearanceProps;
32
35
  export declare const buttonStructureClasses = "isolate inline-flex shrink-0 items-center justify-center overflow-visible whitespace-nowrap";
33
36
  export declare const buttonTrackStructureClasses = "data-[track=hover]:relative data-[track=hover]:isolate [&_[data-track-item]]:[isolation:auto]";
34
37
  export declare const buttonContentClasses = "relative z-[1] inline-flex min-w-0 items-center justify-center gap-[inherit]";
35
- export declare function Button({ variant, size, tone, active, iconOnly, shape, type, disabled, render, nativeButton, className, children, ...props }: ButtonProps): import("react").JSX.Element;
36
- export declare function ButtonLink({ variant, size, tone, active, iconOnly, shape, render, className, children, ...props }: ButtonLinkProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
37
- export declare function ButtonLabel({ variant, size, tone, active, iconOnly, shape, className, children, ...props }: ButtonLabelProps): import("react").JSX.Element;
38
+ export declare function Button({ variant, size, tone, active, iconOnly, shape, layout, type, disabled, render, nativeButton, className, children, ...props }: ButtonProps): import("react").JSX.Element;
39
+ export declare function ButtonLink({ variant, size, tone, active, iconOnly, shape, layout, render, className, children, ...props }: ButtonLinkProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
40
+ export declare function ButtonLabel({ variant, size, tone, active, iconOnly, shape, layout, className, children, ...props }: ButtonLabelProps): import("react").JSX.Element;
38
41
  //#endregion