@kushagradhawan/kookie-ui 0.1.41 → 0.1.42

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 (142) hide show
  1. package/README.md +257 -60
  2. package/components.css +386 -79
  3. package/dist/cjs/components/schemas/base-button.schema.d.ts +319 -0
  4. package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -0
  5. package/dist/cjs/components/schemas/base-button.schema.js +2 -0
  6. package/dist/cjs/components/schemas/base-button.schema.js.map +7 -0
  7. package/dist/cjs/components/schemas/button.schema.d.ts +686 -0
  8. package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -0
  9. package/dist/cjs/components/schemas/button.schema.js +2 -0
  10. package/dist/cjs/components/schemas/button.schema.js.map +7 -0
  11. package/dist/cjs/components/schemas/icon-button.schema.d.ts +329 -0
  12. package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -0
  13. package/dist/cjs/components/schemas/icon-button.schema.js +2 -0
  14. package/dist/cjs/components/schemas/icon-button.schema.js.map +7 -0
  15. package/dist/cjs/components/schemas/index.d.ts +52 -0
  16. package/dist/cjs/components/schemas/index.d.ts.map +1 -0
  17. package/dist/cjs/components/schemas/index.js +2 -0
  18. package/dist/cjs/components/schemas/index.js.map +7 -0
  19. package/dist/cjs/components/schemas/toggle-button.schema.d.ts +1172 -0
  20. package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -0
  21. package/dist/cjs/components/schemas/toggle-button.schema.js +2 -0
  22. package/dist/cjs/components/schemas/toggle-button.schema.js.map +7 -0
  23. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +563 -0
  24. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
  25. package/dist/cjs/components/schemas/toggle-icon-button.schema.js +2 -0
  26. package/dist/cjs/components/schemas/toggle-icon-button.schema.js.map +7 -0
  27. package/dist/cjs/components/sheet.d.ts +1 -1
  28. package/dist/cjs/components/sheet.d.ts.map +1 -1
  29. package/dist/cjs/components/sheet.js +1 -1
  30. package/dist/cjs/components/sheet.js.map +3 -3
  31. package/dist/cjs/components/shell.d.ts +125 -164
  32. package/dist/cjs/components/shell.d.ts.map +1 -1
  33. package/dist/cjs/components/shell.js +1 -1
  34. package/dist/cjs/components/shell.js.map +3 -3
  35. package/dist/cjs/components/sidebar.d.ts +1 -7
  36. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  37. package/dist/cjs/components/sidebar.js +1 -1
  38. package/dist/cjs/components/sidebar.js.map +3 -3
  39. package/dist/cjs/components/theme.d.ts +3 -0
  40. package/dist/cjs/components/theme.d.ts.map +1 -1
  41. package/dist/cjs/components/theme.js +1 -1
  42. package/dist/cjs/components/theme.js.map +3 -3
  43. package/dist/cjs/components/theme.props.d.ts +10 -0
  44. package/dist/cjs/components/theme.props.d.ts.map +1 -1
  45. package/dist/cjs/components/theme.props.js +1 -1
  46. package/dist/cjs/components/theme.props.js.map +3 -3
  47. package/dist/cjs/helpers/font-config.d.ts +96 -0
  48. package/dist/cjs/helpers/font-config.d.ts.map +1 -0
  49. package/dist/cjs/helpers/font-config.js +3 -0
  50. package/dist/cjs/helpers/font-config.js.map +7 -0
  51. package/dist/cjs/helpers/index.d.ts +1 -0
  52. package/dist/cjs/helpers/index.d.ts.map +1 -1
  53. package/dist/cjs/helpers/index.js +1 -1
  54. package/dist/cjs/helpers/index.js.map +2 -2
  55. package/dist/esm/components/schemas/base-button.schema.d.ts +319 -0
  56. package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -0
  57. package/dist/esm/components/schemas/base-button.schema.js +2 -0
  58. package/dist/esm/components/schemas/base-button.schema.js.map +7 -0
  59. package/dist/esm/components/schemas/button.schema.d.ts +686 -0
  60. package/dist/esm/components/schemas/button.schema.d.ts.map +1 -0
  61. package/dist/esm/components/schemas/button.schema.js +2 -0
  62. package/dist/esm/components/schemas/button.schema.js.map +7 -0
  63. package/dist/esm/components/schemas/icon-button.schema.d.ts +329 -0
  64. package/dist/esm/components/schemas/icon-button.schema.d.ts.map +1 -0
  65. package/dist/esm/components/schemas/icon-button.schema.js +2 -0
  66. package/dist/esm/components/schemas/icon-button.schema.js.map +7 -0
  67. package/dist/esm/components/schemas/index.d.ts +52 -0
  68. package/dist/esm/components/schemas/index.d.ts.map +1 -0
  69. package/dist/esm/components/schemas/index.js +2 -0
  70. package/dist/esm/components/schemas/index.js.map +7 -0
  71. package/dist/esm/components/schemas/toggle-button.schema.d.ts +1172 -0
  72. package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +1 -0
  73. package/dist/esm/components/schemas/toggle-button.schema.js +2 -0
  74. package/dist/esm/components/schemas/toggle-button.schema.js.map +7 -0
  75. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +563 -0
  76. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
  77. package/dist/esm/components/schemas/toggle-icon-button.schema.js +2 -0
  78. package/dist/esm/components/schemas/toggle-icon-button.schema.js.map +7 -0
  79. package/dist/esm/components/sheet.d.ts +1 -1
  80. package/dist/esm/components/sheet.d.ts.map +1 -1
  81. package/dist/esm/components/sheet.js +1 -1
  82. package/dist/esm/components/sheet.js.map +3 -3
  83. package/dist/esm/components/shell.d.ts +125 -164
  84. package/dist/esm/components/shell.d.ts.map +1 -1
  85. package/dist/esm/components/shell.js +1 -1
  86. package/dist/esm/components/shell.js.map +3 -3
  87. package/dist/esm/components/sidebar.d.ts +1 -7
  88. package/dist/esm/components/sidebar.d.ts.map +1 -1
  89. package/dist/esm/components/sidebar.js +1 -1
  90. package/dist/esm/components/sidebar.js.map +3 -3
  91. package/dist/esm/components/theme.d.ts +3 -0
  92. package/dist/esm/components/theme.d.ts.map +1 -1
  93. package/dist/esm/components/theme.js +1 -1
  94. package/dist/esm/components/theme.js.map +3 -3
  95. package/dist/esm/components/theme.props.d.ts +10 -0
  96. package/dist/esm/components/theme.props.d.ts.map +1 -1
  97. package/dist/esm/components/theme.props.js +1 -1
  98. package/dist/esm/components/theme.props.js.map +3 -3
  99. package/dist/esm/helpers/font-config.d.ts +96 -0
  100. package/dist/esm/helpers/font-config.d.ts.map +1 -0
  101. package/dist/esm/helpers/font-config.js +3 -0
  102. package/dist/esm/helpers/font-config.js.map +7 -0
  103. package/dist/esm/helpers/index.d.ts +1 -0
  104. package/dist/esm/helpers/index.d.ts.map +1 -1
  105. package/dist/esm/helpers/index.js +1 -1
  106. package/dist/esm/helpers/index.js.map +2 -2
  107. package/package.json +23 -3
  108. package/schemas/base-button.d.ts +2 -0
  109. package/schemas/base-button.json +284 -0
  110. package/schemas/button.d.ts +2 -0
  111. package/schemas/button.json +535 -0
  112. package/schemas/icon-button.d.ts +2 -0
  113. package/schemas/icon-button.json +318 -0
  114. package/schemas/index.d.ts +2 -0
  115. package/schemas/index.json +2016 -0
  116. package/schemas/schemas.d.ts +29 -0
  117. package/schemas/toggle-button.d.ts +2 -0
  118. package/schemas/toggle-button.json +543 -0
  119. package/schemas/toggle-icon-button.d.ts +2 -0
  120. package/schemas/toggle-icon-button.json +326 -0
  121. package/schemas-json.d.ts +12 -0
  122. package/src/components/_internal/base-sidebar.css +1 -2
  123. package/src/components/schemas/base-button.schema.ts +339 -0
  124. package/src/components/schemas/button.schema.ts +198 -0
  125. package/src/components/schemas/icon-button.schema.ts +142 -0
  126. package/src/components/schemas/index.ts +68 -0
  127. package/src/components/schemas/toggle-button.schema.ts +122 -0
  128. package/src/components/schemas/toggle-icon-button.schema.ts +195 -0
  129. package/src/components/sheet.css +39 -19
  130. package/src/components/sheet.tsx +62 -3
  131. package/src/components/shell.css +510 -89
  132. package/src/components/shell.tsx +2055 -928
  133. package/src/components/sidebar.tsx +3 -22
  134. package/src/components/theme.props.tsx +8 -0
  135. package/src/components/theme.tsx +16 -0
  136. package/src/helpers/font-config.ts +167 -0
  137. package/src/helpers/index.ts +1 -0
  138. package/src/styles/fonts.css +16 -13
  139. package/src/styles/tokens/typography.css +27 -4
  140. package/styles.css +398 -79
  141. package/tokens/base.css +12 -0
  142. package/tokens.css +12 -0
@@ -1,155 +1,576 @@
1
+ /* stylelint-disable selector-max-specificity */
1
2
  /*
2
- Shell Root
3
- - Vertical app scaffold with sticky header and flexible body
4
- - Avoid margins; rely on flex/grid gaps and padding tokens only
3
+ Shell Layout System
4
+ - Slot-based layout with 7 slots: Header, Rail, Panel, Sidebar, Content, Inspector, Bottom
5
+ - Responsive presentation: fixed vs overlay per breakpoint
6
+ - Animation principle: collapse -> fade content, then collapse container; expand -> expand container, then fade content
7
+ - Composition rules: Rail+Panel OR Sidebar (exclusive)
5
8
  */
9
+
10
+ /* Root container - vertical layout */
6
11
  .rt-ShellRoot {
7
- inline-size: 100%;
8
12
  display: flex;
9
13
  flex-direction: column;
10
- block-size: 100vh;
11
- /* Default sizing tokens for rail/panel widths */
12
- --shell-sidebar-rail-width: var(--space-9, 64px);
13
- --shell-sidebar-panel-width: 288px;
14
- --shell-sidebar-combined-width: calc(
15
- var(--shell-sidebar-rail-width) + var(--shell-sidebar-panel-width)
16
- );
17
- /* Overlay width hook - set by JS to one of the tokens above */
18
- --shell-overlay-width: auto;
14
+ width: 100%;
15
+ overflow: hidden;
19
16
  }
17
+
18
+ /* Default height when no height prop is provided */
19
+ .rt-ShellRoot:not([style*='height']) {
20
+ height: 100vh;
21
+ }
22
+
20
23
  @supports (height: 100dvh) {
21
- .rt-ShellRoot {
22
- block-size: 100dvh;
24
+ .rt-ShellRoot:not([style*='height']) {
25
+ height: 100dvh;
23
26
  }
24
27
  }
25
28
 
26
- /* Global Header (sticky) */
29
+ /* Header - fixed at top */
27
30
  .rt-ShellHeader {
28
31
  position: sticky;
29
32
  top: 0;
30
- inset-inline: 0;
31
- z-index: var(--shell-z-header, 10);
33
+ z-index: 50;
32
34
  height: var(--shell-header-height, 64px);
33
35
  min-height: var(--shell-header-height, 64px);
36
+ background-color: var(--color-panel);
34
37
  display: flex;
35
38
  align-items: center;
36
- background-color: var(--color-panel);
39
+ flex-shrink: 0;
37
40
  }
38
41
 
39
- /* Body: sidebars + content arranged inline with overflow confined */
42
+ /* Body - main horizontal layout container */
40
43
  .rt-ShellBody {
41
44
  display: flex;
42
45
  flex-direction: row;
43
- align-items: stretch;
44
- inline-size: 100%;
45
- flex: 1 1 auto;
46
- block-size: auto;
47
- min-block-size: 0;
48
- min-inline-size: 0;
46
+ flex: 1;
47
+ min-height: 0;
49
48
  overflow: hidden;
49
+ position: relative; /* enable absolute positioning for peek overlays */
50
50
  }
51
51
 
52
- /* Sidebar container (holds rail/panel or single-morph) */
53
- .rt-ShellSidebar {
52
+ /* Left container - holds Rail, Panel, or Sidebar */
53
+ .rt-ShellLeft {
54
54
  display: flex;
55
55
  flex-direction: row;
56
56
  align-items: stretch;
57
- block-size: 100%;
58
- min-block-size: 0;
57
+ flex-shrink: 0;
58
+ height: 100%;
59
59
  }
60
60
 
61
- /* Rail section (typically icon-sized navigation) */
62
- .rt-ShellSidebarRail {
61
+ /* Rail - slim navigation strip */
62
+ .rt-ShellRail {
63
63
  display: flex;
64
64
  flex-direction: column;
65
- align-items: center;
65
+ height: 100%;
66
+ background-color: var(--color-surface);
67
+ overflow: hidden;
68
+
69
+ /* Animation setup */
70
+ transition: width var(--motion-duration-small) var(--motion-ease-standard);
71
+ }
72
+
73
+ .rt-ShellRail[data-mode='expanded'] {
74
+ width: var(--rail-size, 64px);
75
+ }
76
+
77
+ .rt-ShellRail[data-mode='collapsed'] {
78
+ width: 0px;
79
+ }
80
+
81
+ /* Keep collapsed panes out of flow to avoid layout blips when exiting peek */
82
+ .rt-ShellRail[data-mode='collapsed'] {
83
+ position: absolute;
84
+ inset-block: 0;
85
+ inset-inline-start: 0;
86
+ }
87
+
88
+ /* Peek overlay rules consolidated later to avoid duplication */
89
+
90
+ .rt-ShellRailContent {
91
+ display: flex;
92
+ flex-direction: column;
93
+ width: var(--rail-size, 64px);
94
+ height: 100%;
95
+ padding: var(--space-2);
66
96
  gap: var(--space-2);
67
- padding-block: var(--space-2);
68
- block-size: 100%;
69
- min-block-size: 0;
97
+
98
+ /* Content animation: fade out first, then fade in after width settles */
99
+ opacity: 0;
100
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard)
101
+ var(--motion-duration-small);
102
+ }
103
+
104
+ .rt-ShellRailContent[data-visible] {
105
+ opacity: 1;
106
+ }
107
+
108
+ .rt-ShellRail[data-mode='collapsed'] .rt-ShellRailContent {
109
+ /* Exit animation: fade out content first */
110
+ opacity: 0;
111
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
112
+ }
113
+
114
+ /* Panel - sidebar content next to Rail */
115
+ .rt-ShellPanel {
116
+ display: flex;
117
+ flex-direction: column;
118
+ height: 100%;
119
+ background-color: var(--color-panel);
120
+ /* Allow handle to bleed across boundary */
121
+ overflow: visible;
122
+ position: relative;
123
+ z-index: 1;
124
+
125
+ /* Animation setup */
126
+ transition: width var(--motion-duration-small) var(--motion-ease-standard);
127
+ }
128
+
129
+ .rt-ShellPanel[data-visible] {
130
+ width: var(--panel-size, 288px);
131
+ }
132
+
133
+ .rt-ShellPanel:not([data-visible]) {
134
+ width: 0px;
135
+ }
136
+
137
+ /* Keep collapsed panel out of flow to avoid layout blips when exiting peek */
138
+ .rt-ShellPanel:not([data-visible]) {
139
+ position: absolute;
140
+ inset-block: 0;
141
+ inset-inline-start: var(--peek-rail-width, var(--rail-size, 64px));
142
+ }
143
+
144
+ .rt-ShellPanelContent {
145
+ display: flex;
146
+ flex-direction: column;
147
+ width: var(--panel-size, 288px);
148
+ height: 100%;
70
149
  overflow: hidden;
71
- /* Staggered animation: width first, then content fade */
150
+
151
+ /* Content animation */
72
152
  opacity: 0;
73
- transition:
74
- inline-size var(--motion-duration-small) var(--motion-ease-standard),
75
- opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
153
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard)
154
+ var(--motion-duration-small);
155
+ }
156
+
157
+ .rt-ShellPanelContent[data-visible] {
158
+ opacity: 1;
76
159
  }
77
160
 
78
- /* Panel section (detail/inspector). Transitions its inline-size */
79
- .rt-ShellSidebarPanel {
80
- display: block;
81
- /* Staggered animation: width first, then content fade */
161
+ .rt-ShellPanel:not([data-visible]) .rt-ShellPanelContent {
162
+ /* Exit animation: fade out content first */
82
163
  opacity: 0;
83
- transition:
84
- inline-size var(--motion-duration-small) var(--motion-ease-standard),
85
- opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
86
- block-size: 100%;
87
- min-block-size: 0;
164
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
165
+ }
166
+
167
+ /* Sidebar - alternative to Rail+Panel */
168
+ .rt-ShellSidebar {
169
+ display: flex;
170
+ flex-direction: column;
171
+ height: 100%;
172
+ background-color: var(--color-panel);
173
+ /* Allow handle to bleed across boundary */
174
+ overflow: visible;
175
+ position: relative;
176
+ z-index: 1;
177
+
178
+ /* Animation setup */
179
+ transition: width var(--motion-duration-small) var(--motion-ease-standard);
180
+ }
181
+
182
+ .rt-ShellSidebar[data-mode='expanded'] {
183
+ width: var(--sidebar-size, 288px);
184
+ }
185
+
186
+ .rt-ShellSidebar[data-mode='thin'] {
187
+ width: var(--sidebar-thin-size, 64px);
188
+ }
189
+
190
+ /* Ensure content matches thin width in thin mode */
191
+ .rt-ShellSidebar[data-mode='thin'] .rt-ShellSidebarContent {
192
+ width: var(--sidebar-thin-size, 64px);
193
+ }
194
+
195
+ .rt-ShellSidebar[data-mode='collapsed'] {
196
+ width: 0px;
197
+ }
198
+
199
+ /* Keep collapsed sidebar out of flow to avoid layout blips when exiting peek */
200
+ .rt-ShellSidebar[data-mode='collapsed'] {
201
+ position: absolute;
202
+ inset-block: 0;
203
+ inset-inline-start: 0;
204
+ }
205
+
206
+ .rt-ShellSidebarContent {
207
+ display: flex;
208
+ flex-direction: column;
209
+ width: 100%;
210
+ height: 100%;
88
211
  overflow: hidden;
212
+
213
+ /* Content animation */
214
+ opacity: 0;
215
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard)
216
+ var(--motion-duration-small);
217
+ }
218
+
219
+ /* Hide resizer in thin mode */
220
+ .rt-ShellSidebar[data-mode='thin'] .rt-ShellResizer {
221
+ display: none;
89
222
  }
90
223
 
91
- /* Single-markup morph container */
92
- .rt-ShellSidebarSingle {
93
- /* Staggered animation: width first, then content fade */
224
+ .rt-ShellSidebarContent[data-visible] {
225
+ opacity: 1;
226
+ }
227
+
228
+ .rt-ShellSidebar[data-mode='collapsed'] .rt-ShellSidebarContent {
229
+ /* Exit animation: fade out content first */
94
230
  opacity: 0;
95
- transition:
96
- inline-size var(--motion-duration-small) var(--motion-ease-standard),
97
- opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
98
- block-size: 100%;
231
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
232
+ }
233
+
234
+ /* Content - main work area (always required) */
235
+ .rt-ShellContent {
236
+ flex: 1;
237
+ min-width: 0;
238
+ height: 100%;
239
+ overflow: auto;
240
+ background-color: var(--color-surface);
241
+ }
242
+
243
+ /* Inspector - right-side panel */
244
+ .rt-ShellInspector {
245
+ display: flex;
246
+ flex-direction: column;
247
+ height: 100%;
248
+ background-color: var(--color-panel);
249
+ /* Allow handle to bleed across boundary */
250
+ overflow: visible;
251
+ position: relative;
252
+ z-index: 1;
253
+
254
+ /* Animation setup */
255
+ transition: width var(--motion-duration-small) var(--motion-ease-standard);
256
+ }
257
+
258
+ .rt-ShellInspector[data-mode='expanded'] {
259
+ width: var(--inspector-size, 320px);
260
+ }
261
+
262
+ .rt-ShellInspector[data-mode='collapsed'] {
263
+ width: 0px;
264
+ }
265
+
266
+ .rt-ShellInspector[data-mode='collapsed'] {
267
+ position: absolute;
268
+ inset-block: 0;
269
+ inset-inline-end: 0;
270
+ }
271
+
272
+ .rt-ShellInspectorContent {
273
+ display: flex;
274
+ flex-direction: column;
275
+ width: var(--inspector-size, 320px);
276
+ height: 100%;
99
277
  overflow: hidden;
278
+
279
+ /* Content animation */
280
+ opacity: 0;
281
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard)
282
+ var(--motion-duration-small);
283
+ }
284
+
285
+ .rt-ShellInspectorContent[data-visible] {
286
+ opacity: 1;
100
287
  }
101
288
 
102
- /* Exit animation: fade out content first, then collapse width */
103
- :where(.rt-ShellSidebarRail):not([data-visible]),
104
- :where(.rt-ShellSidebarPanel):not([data-visible]),
105
- :where(.rt-ShellSidebarSingle):not([data-visible]) {
289
+ .rt-ShellInspector[data-mode='collapsed'] .rt-ShellInspectorContent {
290
+ /* Exit animation: fade out content first */
106
291
  opacity: 0;
107
- /* Exit animation: fade out content first, then collapse width */
108
- transition:
109
- opacity var(--motion-duration-small) var(--motion-ease-standard),
110
- inline-size var(--motion-duration-small) var(--motion-ease-standard)
111
- var(--motion-duration-small);
292
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
293
+ }
294
+
295
+ /* Bottom - bottom panel */
296
+ .rt-ShellBottom {
297
+ display: flex;
298
+ flex-direction: column;
299
+ width: 100%;
300
+ background-color: var(--color-panel);
301
+ /* Allow handle to bleed across boundary */
302
+ overflow: visible;
303
+ flex-shrink: 0;
304
+ position: relative;
305
+
306
+ /* Animation setup */
307
+ transition: height var(--motion-duration-small) var(--motion-ease-standard);
308
+ }
309
+
310
+ .rt-ShellBottom[data-mode='expanded'] {
311
+ height: var(--bottom-size, 200px);
312
+ }
313
+
314
+ .rt-ShellBottom[data-mode='collapsed'] {
315
+ height: 0px;
112
316
  }
113
317
 
114
- /* When visible: show content after width settles */
115
- [data-visible] {
318
+ .rt-ShellBottomContent {
319
+ display: flex;
320
+ flex-direction: column;
321
+ width: 100%;
322
+ height: var(--bottom-size, 200px);
323
+ overflow: hidden;
324
+
325
+ /* Content animation */
326
+ opacity: 0;
327
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard)
328
+ var(--motion-duration-small);
329
+ }
330
+
331
+ .rt-ShellBottomContent[data-visible] {
116
332
  opacity: 1;
117
333
  }
118
334
 
335
+ /* Disable transitions during active resize */
336
+ .rt-ShellPanel[data-resizing],
337
+ .rt-ShellSidebar[data-resizing],
338
+ .rt-ShellInspector[data-resizing],
339
+ .rt-ShellBottom[data-resizing] {
340
+ transition: none !important;
341
+ }
342
+
343
+ /* Hide resizer when panel isn't visible or is peeking */
344
+ .rt-ShellPanel:not([data-visible]) .rt-ShellResizer,
345
+ .rt-ShellPanel[data-peek] .rt-ShellResizer {
346
+ display: none;
347
+ }
348
+
349
+ /* Hide resizer for other panes when hidden or peeking */
350
+ .rt-ShellInspector[data-mode='collapsed'] .rt-ShellResizer,
351
+ .rt-ShellInspector[data-peek] .rt-ShellResizer,
352
+ .rt-ShellBottom[data-mode='collapsed'] .rt-ShellResizer,
353
+ .rt-ShellBottom[data-peek] .rt-ShellResizer,
354
+ .rt-ShellSidebar[data-mode='collapsed'] .rt-ShellResizer,
355
+ .rt-ShellSidebar[data-peek] .rt-ShellResizer {
356
+ display: none;
357
+ }
358
+
359
+ .rt-ShellBottom[data-mode='collapsed'] .rt-ShellBottomContent {
360
+ /* Exit animation: fade out content first */
361
+ opacity: 0;
362
+ transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
363
+ }
364
+
365
+ /* Overlay mode handling */
366
+ [data-presentation='overlay'] {
367
+ /* Overlay handled by JS/Sheet; no extra CSS needed */
368
+ contain: style;
369
+ }
370
+
371
+ /* Stacked mode handling: panes float above content without reflow */
372
+ .rt-ShellLeft[data-presentation='stacked'] {
373
+ position: absolute;
374
+ inset-block: 0;
375
+ inset-inline-start: 0;
376
+ z-index: 30; /* below overlay sheets, above content/fixed */
377
+ transform: translateX(-100%);
378
+ will-change: transform;
379
+ transition:
380
+ transform var(--motion-duration-small) var(--motion-ease-standard),
381
+ box-shadow var(--motion-duration-small) var(--motion-ease-standard);
382
+ box-shadow: 4px 0 12px -6px rgba(0, 0, 0, 0.2);
383
+ }
384
+
385
+ .rt-ShellLeft[data-presentation='stacked'][data-open] {
386
+ transform: translateX(0);
387
+ }
388
+
389
+ /* Ensure peek forces visibility in stacked mode */
390
+ .rt-ShellLeft[data-presentation='stacked'][data-peek] {
391
+ transform: translateX(0);
392
+ }
393
+
394
+ /* Stacked Inspector: right side */
395
+ .rt-ShellInspector[data-presentation='stacked'] {
396
+ position: absolute;
397
+ inset-block: 0;
398
+ inset-inline-end: 0;
399
+ z-index: 32; /* above left and bottom stacked */
400
+ width: var(--inspector-size, 320px);
401
+ transform: translateX(100%);
402
+ transition:
403
+ transform var(--motion-duration-small) var(--motion-ease-standard),
404
+ box-shadow var(--motion-duration-small) var(--motion-ease-standard);
405
+ box-shadow: -4px 0 12px -6px rgba(0, 0, 0, 0.2);
406
+ }
407
+
408
+ .rt-ShellInspector[data-presentation='stacked'][data-open] {
409
+ transform: translateX(0);
410
+ }
411
+
412
+ .rt-ShellInspector[data-presentation='stacked'][data-peek] {
413
+ transform: translateX(0);
414
+ }
415
+
416
+ /* Stacked Bottom: bottom edge */
417
+ .rt-ShellBottom[data-presentation='stacked'] {
418
+ position: absolute;
419
+ inset-inline: 0;
420
+ inset-block-end: 0;
421
+ z-index: 31; /* between left and inspector */
422
+ height: var(--bottom-size, 200px);
423
+ transform: translateY(100%);
424
+ transition:
425
+ transform var(--motion-duration-small) var(--motion-ease-standard),
426
+ box-shadow var(--motion-duration-small) var(--motion-ease-standard);
427
+ box-shadow: 0 -4px 12px -6px rgba(0, 0, 0, 0.2);
428
+ }
429
+
430
+ .rt-ShellBottom[data-presentation='stacked'][data-open] {
431
+ transform: translateY(0);
432
+ }
433
+
434
+ .rt-ShellBottom[data-presentation='stacked'][data-peek] {
435
+ transform: translateY(0);
436
+ }
437
+
438
+ /* Accessibility - reduced motion */
119
439
  @media (prefers-reduced-motion: reduce) {
120
- .rt-ShellSidebarRail,
121
- .rt-ShellSidebarPanel,
122
- .rt-ShellSidebarSingle {
440
+ .rt-ShellRail,
441
+ .rt-ShellPanel,
442
+ .rt-ShellSidebar,
443
+ .rt-ShellInspector,
444
+ .rt-ShellBottom,
445
+ .rt-ShellRailContent,
446
+ .rt-ShellPanelContent,
447
+ .rt-ShellSidebarContent,
448
+ .rt-ShellInspectorContent,
449
+ .rt-ShellBottomContent {
123
450
  transition: none;
124
451
  }
125
452
  }
126
453
 
127
- /* Content: the only scrollable area; min width protects content from collapsing */
128
- .rt-ShellContent {
129
- flex: 1 1 auto;
454
+ /* Trigger styling intentionally omitted */
455
+
456
+ /* Resizer handle (unstyled, full-edge overlay) */
457
+ .rt-ShellResizer {
458
+ position: absolute;
459
+ z-index: 1;
460
+ background: transparent;
461
+ /* hit target size, adjustable per media */
462
+ --resizer-hit: var(--space-3);
463
+ display: flex;
464
+ align-items: center;
465
+ justify-content: center;
466
+ overflow: visible;
467
+ }
468
+
469
+ .rt-ShellResizer[data-orientation='vertical'][data-edge='end'] {
470
+ inset-block: 0;
471
+ inset-inline-end: 0;
472
+ inline-size: var(--resizer-hit);
130
473
  block-size: 100%;
131
- min-block-size: 0;
132
- min-inline-size: 0;
133
- overflow: auto;
474
+ cursor: col-resize;
475
+ transform: translateX(50%);
134
476
  }
135
477
 
136
- /* Overlay mode: disable panel animation only (keep rail/sidebar transitions) */
137
- :where(.rt-SheetContent) :where(.rt-ShellSidebarPanel) {
138
- transition: none !important;
478
+ .rt-ShellResizer[data-orientation='vertical'][data-edge='start'] {
479
+ inset-block: 0;
480
+ inset-inline-start: 0;
481
+ inline-size: var(--resizer-hit);
482
+ block-size: 100%;
483
+ cursor: col-resize;
484
+ transform: translateX(-50%);
139
485
  }
140
486
 
141
- /* Overlay mode: ensure sidebar content has proper styling when rendered in Sheet */
142
- :where(.rt-SheetContent) :where(.rt-SidebarRoot) {
143
- height: 100%;
144
- width: 100%;
487
+ .rt-ShellResizer[data-orientation='horizontal'][data-edge='start'] {
488
+ inset-inline: 0;
489
+ inset-block-start: 0;
490
+ inline-size: 100%;
491
+ block-size: var(--resizer-hit);
492
+ cursor: row-resize;
493
+ transform: translateY(-50%);
145
494
  }
146
495
 
147
- :where(.rt-SheetContent) :where(.rt-SidebarContainer) {
148
- height: 100%;
149
- width: 100%;
496
+ @media (pointer: coarse) {
497
+ .rt-ShellResizer {
498
+ --resizer-hit: var(--space-6);
499
+ }
150
500
  }
151
501
 
152
- :where(.rt-SheetContent) :where(.rt-SidebarContent) {
153
- height: 100%;
154
- width: 100%;
502
+ /* --- Peek overlays (override after pane rules) --- */
503
+ .rt-ShellRail[data-peek],
504
+ .rt-ShellPanel[data-peek],
505
+ .rt-ShellSidebar[data-peek],
506
+ .rt-ShellInspector[data-peek],
507
+ .rt-ShellBottom[data-peek] {
508
+ position: absolute;
509
+ z-index: 40;
510
+ }
511
+
512
+ /* Directional shadows for peeks */
513
+ .rt-ShellRail[data-peek],
514
+ .rt-ShellPanel[data-peek],
515
+ .rt-ShellSidebar[data-peek] {
516
+ box-shadow: 4px 0 8px -4px rgba(0, 0, 0, 0.15);
517
+ }
518
+
519
+ .rt-ShellInspector[data-peek] {
520
+ box-shadow: -4px 0 8px -4px rgba(0, 0, 0, 0.15);
521
+ }
522
+
523
+ .rt-ShellBottom[data-peek] {
524
+ box-shadow: 0 -4px 8px -4px rgba(0, 0, 0, 0.15);
525
+ }
526
+
527
+ /* Force content visible during peek */
528
+ .rt-ShellRail[data-peek] .rt-ShellRailContent,
529
+ .rt-ShellPanel[data-peek] .rt-ShellPanelContent,
530
+ .rt-ShellSidebar[data-peek] .rt-ShellSidebarContent,
531
+ .rt-ShellInspector[data-peek] .rt-ShellInspectorContent,
532
+ .rt-ShellBottom[data-peek] .rt-ShellBottomContent {
533
+ opacity: 1;
534
+ }
535
+
536
+ /* Rail peek: left edge */
537
+ .rt-ShellRail[data-peek] {
538
+ inset-block: 0;
539
+ inset-inline-start: 0;
540
+ width: var(--rail-size, 64px);
541
+ }
542
+
543
+ /* Panel peek: offset by rail width; override hidden width */
544
+ .rt-ShellPanel[data-peek] {
545
+ inset-block: 0;
546
+ inset-inline-start: var(--peek-rail-width, var(--rail-size, 64px));
547
+ width: var(--panel-size, 288px);
548
+ }
549
+
550
+ /* Sidebar peek: left edge; if collapsed, use fallback width */
551
+ .rt-ShellSidebar[data-peek] {
552
+ inset-block: 0;
553
+ inset-inline-start: 0;
554
+ /* Always use peek width when peeking */
555
+ width: var(--peek-sidebar-width, var(--sidebar-size, 288px));
556
+ }
557
+
558
+ /* Inspector peek: right edge; ensure width even when collapsed */
559
+ .rt-ShellInspector[data-peek] {
560
+ inset-block: 0;
561
+ inset-inline-end: 0;
562
+ width: var(--inspector-size, 320px);
563
+ }
564
+ .rt-ShellInspector[data-peek][data-mode='collapsed'] {
565
+ width: var(--inspector-size, 320px);
566
+ }
567
+
568
+ /* Bottom peek: bottom edge; ensure height when collapsed */
569
+ .rt-ShellBottom[data-peek] {
570
+ inset-inline: 0;
571
+ inset-block-end: 0;
572
+ height: var(--bottom-size, 200px);
573
+ }
574
+ .rt-ShellBottom[data-peek][data-mode='collapsed'] {
575
+ height: var(--bottom-size, 200px);
155
576
  }