@kushagradhawan/kookie-ui 0.1.107 → 0.1.109

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 (57) hide show
  1. package/components.css +80 -51
  2. package/dist/cjs/components/_internal/shell-bottom.d.ts +2 -0
  3. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  5. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  6. package/dist/cjs/components/_internal/shell-inspector.d.ts +2 -0
  7. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  9. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  10. package/dist/cjs/components/_internal/shell-sidebar.d.ts +2 -0
  11. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  13. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  14. package/dist/cjs/components/shell.context.d.ts +13 -0
  15. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  16. package/dist/cjs/components/shell.context.js +1 -1
  17. package/dist/cjs/components/shell.context.js.map +3 -3
  18. package/dist/cjs/components/shell.d.ts +14 -6
  19. package/dist/cjs/components/shell.d.ts.map +1 -1
  20. package/dist/cjs/components/shell.js +1 -1
  21. package/dist/cjs/components/shell.js.map +3 -3
  22. package/dist/esm/components/_internal/shell-bottom.d.ts +2 -0
  23. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  24. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  25. package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
  26. package/dist/esm/components/_internal/shell-inspector.d.ts +2 -0
  27. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  28. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  29. package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
  30. package/dist/esm/components/_internal/shell-sidebar.d.ts +2 -0
  31. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  32. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  33. package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
  34. package/dist/esm/components/shell.context.d.ts +13 -0
  35. package/dist/esm/components/shell.context.d.ts.map +1 -1
  36. package/dist/esm/components/shell.context.js +1 -1
  37. package/dist/esm/components/shell.context.js.map +3 -3
  38. package/dist/esm/components/shell.d.ts +14 -6
  39. package/dist/esm/components/shell.d.ts.map +1 -1
  40. package/dist/esm/components/shell.js +1 -1
  41. package/dist/esm/components/shell.js.map +3 -3
  42. package/package.json +1 -1
  43. package/schemas/base-button.json +1 -1
  44. package/schemas/button.json +1 -1
  45. package/schemas/icon-button.json +1 -1
  46. package/schemas/index.json +6 -6
  47. package/schemas/toggle-button.json +1 -1
  48. package/schemas/toggle-icon-button.json +1 -1
  49. package/src/components/_internal/shell-bottom.tsx +15 -1
  50. package/src/components/_internal/shell-inspector.tsx +15 -1
  51. package/src/components/_internal/shell-sidebar.tsx +15 -1
  52. package/src/components/segmented-control.css +37 -37
  53. package/src/components/sheet.css +12 -0
  54. package/src/components/shell.context.tsx +14 -0
  55. package/src/components/shell.css +51 -28
  56. package/src/components/shell.tsx +150 -81
  57. package/styles.css +80 -51
package/components.css CHANGED
@@ -12948,12 +12948,19 @@
12948
12948
  border-radius: 0 !important;
12949
12949
  will-change: transform;
12950
12950
  }
12951
+ @supports (height: 100dvh) {
12952
+ :where(.rt-SheetContent) {
12953
+ height: 100dvh;
12954
+ max-height: 100dvh;
12955
+ }
12956
+ }
12951
12957
  :where(.rt-SheetContent[data-side='start']) {
12952
12958
  inset-block: 0 !important;
12953
12959
  inset-inline-start: 0 !important;
12954
12960
  margin: 0 !important;
12955
12961
  border-start-start-radius: 0;
12956
12962
  border-end-start-radius: 0;
12963
+ padding-bottom: env(safe-area-inset-bottom, 0px);
12957
12964
  }
12958
12965
  :where(.rt-SheetContent[data-side='end']) {
12959
12966
  inset-block: 0 !important;
@@ -12961,6 +12968,7 @@
12961
12968
  margin: 0 !important;
12962
12969
  border-start-end-radius: 0;
12963
12970
  border-end-end-radius: 0;
12971
+ padding-bottom: env(safe-area-inset-bottom, 0px);
12964
12972
  }
12965
12973
  :where(.rt-SheetContent[data-side='top']) {
12966
12974
  inset-block-start: 0 !important;
@@ -13241,7 +13249,7 @@
13241
13249
  color: var(--gray-a8);
13242
13250
  background-color: var(--gray-3);
13243
13251
  }
13244
- .rt-SegmentedControlRoot.rt-r-orientation-vertical {
13252
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical) {
13245
13253
  grid-auto-flow: row;
13246
13254
  grid-auto-columns: unset;
13247
13255
  grid-auto-rows: 1fr;
@@ -13249,7 +13257,7 @@
13249
13257
  min-height: -moz-max-content;
13250
13258
  min-height: max-content;
13251
13259
  }
13252
- .rt-SegmentedControlRoot.rt-r-orientation-vertical:has([data-icon-only]) {
13260
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical):has([data-icon-only]) {
13253
13261
  grid-auto-columns: unset;
13254
13262
  grid-auto-rows: minmax(var(--segmented-control-height), 1fr);
13255
13263
  }
@@ -13273,15 +13281,15 @@
13273
13281
  outline: var(--focus-outline-width) solid var(--focus-8);
13274
13282
  outline-offset: var(--focus-outline-offset-inset);
13275
13283
  }
13276
- .rt-r-orientation-vertical .rt-SegmentedControlItem {
13284
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem {
13277
13285
  flex-direction: column;
13278
13286
  }
13279
- .rt-r-orientation-vertical .rt-SegmentedControlItem:first-child {
13287
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem:first-child {
13280
13288
  border-top-left-radius: inherit;
13281
13289
  border-top-right-radius: inherit;
13282
13290
  border-bottom-left-radius: 0;
13283
13291
  }
13284
- .rt-r-orientation-vertical .rt-SegmentedControlItem:nth-last-child(2) {
13292
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem:nth-last-child(2) {
13285
13293
  border-bottom-left-radius: inherit;
13286
13294
  border-bottom-right-radius: inherit;
13287
13295
  border-top-right-radius: 0;
@@ -13345,7 +13353,7 @@
13345
13353
  :where(.rt-SegmentedControlRoot:has(:focus-visible)) .rt-SegmentedControlItemSeparator {
13346
13354
  transition-duration: 0ms;
13347
13355
  }
13348
- .rt-r-orientation-vertical .rt-SegmentedControlItemSeparator {
13356
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItemSeparator {
13349
13357
  margin-left: calc(var(--space-1) * 0.75);
13350
13358
  margin-right: calc(var(--space-1) * 0.75);
13351
13359
  margin-top: calc(-1 * var(--border-width-standard) * 0.5);
@@ -13441,68 +13449,68 @@
13441
13449
  :where(.rt-SegmentedControlItem[data-state='on']:nth-child(10)) ~ .rt-SegmentedControlIndicator {
13442
13450
  transform: translateX(900%);
13443
13451
  }
13444
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator {
13452
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator {
13445
13453
  width: 100%;
13446
13454
  height: unset;
13447
13455
  }
13448
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(2) {
13456
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(2) {
13449
13457
  height: calc(100% / 1);
13450
13458
  }
13451
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(3) {
13459
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(3) {
13452
13460
  height: calc(100% / 2);
13453
13461
  }
13454
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(4) {
13462
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(4) {
13455
13463
  height: calc(100% / 3);
13456
13464
  }
13457
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(5) {
13465
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(5) {
13458
13466
  height: calc(100% / 4);
13459
13467
  }
13460
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(6) {
13468
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(6) {
13461
13469
  height: calc(100% / 5);
13462
13470
  }
13463
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(7) {
13471
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(7) {
13464
13472
  height: calc(100% / 6);
13465
13473
  }
13466
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(8) {
13474
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(8) {
13467
13475
  height: calc(100% / 7);
13468
13476
  }
13469
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(9) {
13477
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(9) {
13470
13478
  height: calc(100% / 8);
13471
13479
  }
13472
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(10) {
13480
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(10) {
13473
13481
  height: calc(100% / 9);
13474
13482
  }
13475
- .rt-r-orientation-vertical .rt-SegmentedControlIndicator:nth-child(11) {
13483
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlIndicator:nth-child(11) {
13476
13484
  height: calc(100% / 10);
13477
13485
  }
13478
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(1) ~ .rt-SegmentedControlIndicator {
13486
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(1) ~ .rt-SegmentedControlIndicator {
13479
13487
  transform: translateY(0%);
13480
13488
  }
13481
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(2) ~ .rt-SegmentedControlIndicator {
13489
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(2) ~ .rt-SegmentedControlIndicator {
13482
13490
  transform: translateY(100%);
13483
13491
  }
13484
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(3) ~ .rt-SegmentedControlIndicator {
13492
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(3) ~ .rt-SegmentedControlIndicator {
13485
13493
  transform: translateY(200%);
13486
13494
  }
13487
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(4) ~ .rt-SegmentedControlIndicator {
13495
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(4) ~ .rt-SegmentedControlIndicator {
13488
13496
  transform: translateY(300%);
13489
13497
  }
13490
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(5) ~ .rt-SegmentedControlIndicator {
13498
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(5) ~ .rt-SegmentedControlIndicator {
13491
13499
  transform: translateY(400%);
13492
13500
  }
13493
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(6) ~ .rt-SegmentedControlIndicator {
13501
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(6) ~ .rt-SegmentedControlIndicator {
13494
13502
  transform: translateY(500%);
13495
13503
  }
13496
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(7) ~ .rt-SegmentedControlIndicator {
13504
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(7) ~ .rt-SegmentedControlIndicator {
13497
13505
  transform: translateY(600%);
13498
13506
  }
13499
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(8) ~ .rt-SegmentedControlIndicator {
13507
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(8) ~ .rt-SegmentedControlIndicator {
13500
13508
  transform: translateY(700%);
13501
13509
  }
13502
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(9) ~ .rt-SegmentedControlIndicator {
13510
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(9) ~ .rt-SegmentedControlIndicator {
13503
13511
  transform: translateY(800%);
13504
13512
  }
13505
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-state='on']:nth-child(10) ~ .rt-SegmentedControlIndicator {
13513
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-state='on']:nth-child(10) ~ .rt-SegmentedControlIndicator {
13506
13514
  transform: translateY(900%);
13507
13515
  }
13508
13516
  .rt-SegmentedControlItemLabel,
@@ -14111,39 +14119,39 @@
14111
14119
  padding-left: 0;
14112
14120
  padding-right: 0;
14113
14121
  }
14114
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-icon-only] {
14122
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-icon-only] {
14115
14123
  min-width: unset;
14116
14124
  min-height: var(--segmented-control-height);
14117
14125
  }
14118
- .rt-r-orientation-vertical .rt-SegmentedControlItem[data-icon-only] .rt-SegmentedControlItemLabel {
14126
+ :where(.rt-r-orientation-vertical) .rt-SegmentedControlItem[data-icon-only] .rt-SegmentedControlItemLabel {
14119
14127
  padding-top: 0;
14120
14128
  padding-bottom: 0;
14121
14129
  }
14122
- .rt-SegmentedControlRoot.rt-r-orientation-vertical.rt-r-size-1:has([data-icon-only]) {
14130
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical):where(.rt-r-size-1):has([data-icon-only]) {
14123
14131
  width: var(--space-5);
14124
14132
  }
14125
- .rt-SegmentedControlRoot.rt-r-orientation-vertical.rt-r-size-2:has([data-icon-only]) {
14133
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical):where(.rt-r-size-2):has([data-icon-only]) {
14126
14134
  width: var(--space-6);
14127
14135
  }
14128
- .rt-SegmentedControlRoot.rt-r-orientation-vertical.rt-r-size-3:has([data-icon-only]) {
14136
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical):where(.rt-r-size-3):has([data-icon-only]) {
14129
14137
  width: var(--space-7);
14130
14138
  }
14131
- .rt-SegmentedControlRoot.rt-r-orientation-vertical.rt-r-size-4:has([data-icon-only]) {
14139
+ .rt-SegmentedControlRoot:where(.rt-r-orientation-vertical):where(.rt-r-size-4):has([data-icon-only]) {
14132
14140
  width: var(--space-8);
14133
14141
  }
14134
- .rt-r-orientation-vertical.rt-r-size-1 .rt-SegmentedControlItemLabel {
14142
+ :where(.rt-r-orientation-vertical):where(.rt-r-size-1) .rt-SegmentedControlItemLabel {
14135
14143
  padding-top: var(--space-1);
14136
14144
  padding-bottom: var(--space-1);
14137
14145
  }
14138
- .rt-r-orientation-vertical.rt-r-size-2 .rt-SegmentedControlItemLabel {
14146
+ :where(.rt-r-orientation-vertical):where(.rt-r-size-2) .rt-SegmentedControlItemLabel {
14139
14147
  padding-top: var(--space-2);
14140
14148
  padding-bottom: var(--space-2);
14141
14149
  }
14142
- .rt-r-orientation-vertical.rt-r-size-3 .rt-SegmentedControlItemLabel {
14150
+ :where(.rt-r-orientation-vertical):where(.rt-r-size-3) .rt-SegmentedControlItemLabel {
14143
14151
  padding-top: var(--space-2);
14144
14152
  padding-bottom: var(--space-2);
14145
14153
  }
14146
- .rt-r-orientation-vertical.rt-r-size-4 .rt-SegmentedControlItemLabel {
14154
+ :where(.rt-r-orientation-vertical):where(.rt-r-size-4) .rt-SegmentedControlItemLabel {
14147
14155
  padding-top: var(--space-3);
14148
14156
  padding-bottom: var(--space-3);
14149
14157
  }
@@ -17240,9 +17248,6 @@
17240
17248
  .rt-ShellRail[data-mode='collapsed'] {
17241
17249
  width: 0px;
17242
17250
  transition-delay: var(--motion-duration-small);
17243
- position: absolute;
17244
- inset-block: 0;
17245
- inset-inline-start: 0;
17246
17251
  }
17247
17252
  .rt-ShellRailContent {
17248
17253
  display: flex;
@@ -17251,13 +17256,17 @@
17251
17256
  height: 100%;
17252
17257
  gap: var(--space-2);
17253
17258
  opacity: 0;
17259
+ pointer-events: none;
17254
17260
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
17255
17261
  }
17256
17262
  .rt-ShellRailContent[data-visible] {
17257
17263
  opacity: 1;
17264
+ pointer-events: auto;
17258
17265
  }
17259
17266
  .rt-ShellRail[data-mode='collapsed'] .rt-ShellRailContent {
17260
17267
  opacity: 0;
17268
+ width: 0;
17269
+ visibility: hidden;
17261
17270
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
17262
17271
  }
17263
17272
  .rt-ShellPanel {
@@ -17275,9 +17284,6 @@
17275
17284
  .rt-ShellPanel:not([data-visible]) {
17276
17285
  width: 0px;
17277
17286
  transition-delay: var(--motion-duration-small);
17278
- position: absolute;
17279
- inset-block: 0;
17280
- inset-inline-start: var(--peek-rail-width, var(--rail-size, 64px));
17281
17287
  }
17282
17288
  .rt-ShellPanelContent {
17283
17289
  display: flex;
@@ -17286,13 +17292,17 @@
17286
17292
  height: 100%;
17287
17293
  overflow: hidden;
17288
17294
  opacity: 0;
17295
+ pointer-events: none;
17289
17296
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
17290
17297
  }
17291
17298
  .rt-ShellPanelContent[data-visible] {
17292
17299
  opacity: 1;
17300
+ pointer-events: auto;
17293
17301
  }
17294
17302
  .rt-ShellPanel:not([data-visible]) .rt-ShellPanelContent {
17295
17303
  opacity: 0;
17304
+ width: 0;
17305
+ visibility: hidden;
17296
17306
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
17297
17307
  }
17298
17308
  .rt-ShellSidebar {
@@ -17315,11 +17325,6 @@
17315
17325
  }
17316
17326
  .rt-ShellSidebar[data-mode='collapsed'] {
17317
17327
  width: 0px;
17318
- position: absolute;
17319
- inset-block: 0;
17320
- inset-inline-start: 0;
17321
- flex-shrink: 0;
17322
- flex-basis: 0;
17323
17328
  transition-delay: var(--motion-duration-small);
17324
17329
  }
17325
17330
  .rt-ShellSidebarContent {
@@ -17329,6 +17334,7 @@
17329
17334
  height: 100%;
17330
17335
  overflow: hidden;
17331
17336
  opacity: 0;
17337
+ pointer-events: none;
17332
17338
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
17333
17339
  }
17334
17340
  .rt-ShellSidebar[data-mode='thin'] .rt-ShellResizer {
@@ -17336,6 +17342,7 @@
17336
17342
  }
17337
17343
  .rt-ShellSidebarContent[data-visible] {
17338
17344
  opacity: 1;
17345
+ pointer-events: auto;
17339
17346
  }
17340
17347
  .rt-ShellSidebarContent[data-phase='hiding'] {
17341
17348
  opacity: 0;
@@ -17350,6 +17357,8 @@
17350
17357
  }
17351
17358
  .rt-ShellSidebar[data-mode='collapsed'] .rt-ShellSidebarContent {
17352
17359
  opacity: 0;
17360
+ width: 0;
17361
+ visibility: hidden;
17353
17362
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
17354
17363
  }
17355
17364
  .rt-ShellSidebar[data-presentation='stacked'] {
@@ -17400,13 +17409,17 @@
17400
17409
  height: 100%;
17401
17410
  overflow: hidden;
17402
17411
  opacity: 0;
17412
+ pointer-events: none;
17403
17413
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
17404
17414
  }
17405
17415
  .rt-ShellInspectorContent[data-visible] {
17406
17416
  opacity: 1;
17417
+ pointer-events: auto;
17407
17418
  }
17408
17419
  .rt-ShellInspector[data-mode='collapsed'] .rt-ShellInspectorContent {
17409
17420
  opacity: 0;
17421
+ width: 0;
17422
+ visibility: hidden;
17410
17423
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
17411
17424
  }
17412
17425
  .rt-ShellBottom {
@@ -17423,9 +17436,6 @@
17423
17436
  }
17424
17437
  .rt-ShellBottom[data-mode='collapsed'] {
17425
17438
  height: 0px;
17426
- position: absolute;
17427
- inset-inline: 0;
17428
- inset-block-end: 0;
17429
17439
  transition-delay: var(--motion-duration-small);
17430
17440
  }
17431
17441
  .rt-ShellBottomContent {
@@ -17435,10 +17445,12 @@
17435
17445
  height: var(--bottom-size, 200px);
17436
17446
  overflow: hidden;
17437
17447
  opacity: 0;
17448
+ pointer-events: none;
17438
17449
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard) var(--motion-duration-small);
17439
17450
  }
17440
17451
  .rt-ShellBottomContent[data-visible] {
17441
17452
  opacity: 1;
17453
+ pointer-events: auto;
17442
17454
  }
17443
17455
  .rt-ShellPanel[data-resizing],
17444
17456
  .rt-ShellSidebar[data-resizing],
@@ -17460,6 +17472,8 @@
17460
17472
  }
17461
17473
  .rt-ShellBottom[data-mode='collapsed'] .rt-ShellBottomContent {
17462
17474
  opacity: 0;
17475
+ height: 0;
17476
+ visibility: hidden;
17463
17477
  transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
17464
17478
  }
17465
17479
  [data-presentation='overlay'] {
@@ -17620,6 +17634,21 @@
17620
17634
  .rt-ShellBottom[data-peek][data-mode='collapsed'] {
17621
17635
  height: var(--bottom-size, 200px);
17622
17636
  }
17637
+ .rt-ShellBody[data-has-inset] {
17638
+ background: var(--gray-2);
17639
+ }
17640
+ .rt-ShellLeft[data-inset],
17641
+ .rt-ShellSidebar[data-inset],
17642
+ .rt-ShellContent[data-inset],
17643
+ .rt-ShellInspector[data-inset],
17644
+ .rt-ShellBottom[data-inset] {
17645
+ --shell-inset-gap: var(--space-2);
17646
+ margin: var(--shell-inset-gap);
17647
+ border-radius: var(--radius-3);
17648
+ background: var(--color-background);
17649
+ box-shadow: var(--shadow-2);
17650
+ height: auto;
17651
+ }
17623
17652
  .rt-SliderRoot {
17624
17653
  --slider-thumb-width: var(--space-3);
17625
17654
  --slider-thumb-height: var(--space-2);
@@ -29,6 +29,8 @@ type BottomPublicProps = PaneBaseProps & (BottomControlledProps | BottomUncontro
29
29
  onSizeChange?: (size: number, meta: BottomSizeChangeMeta) => void;
30
30
  sizeUpdate?: 'throttle' | 'debounce';
31
31
  sizeUpdateMs?: number;
32
+ /** When true, adds margin and triggers gray backdrop on Shell. */
33
+ inset?: boolean;
32
34
  };
33
35
  type BottomComponent = React.ForwardRefExoticComponent<BottomPublicProps & React.RefAttributes<HTMLDivElement>> & {
34
36
  Handle: typeof BottomHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"shell-bottom.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-bottom.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAc,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1H,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AACzE,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAC/K,KAAK,uBAAuB,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAC3I,KAAK,yBAAyB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAChF,KAAK,2BAA2B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AACzE,KAAK,iBAAiB,GAAG,aAAa,GACpC,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,GACjD,CAAC,yBAAyB,GAAG,2BAA2B,CAAC,GAAG;IAC1D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,KAAK,eAAe,GAAG,KAAK,CAAC,yBAAyB,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,YAAY,CAAA;CAAE,CAAC;AAgBlJ,eAAO,MAAM,MAAM,EA2Vb,eAAe,CAAC"}
1
+ {"version":3,"file":"shell-bottom.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-bottom.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAc,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1H,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AACzE,KAAK,qBAAqB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAC/K,KAAK,uBAAuB,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAC3I,KAAK,yBAAyB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAChF,KAAK,2BAA2B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AACzE,KAAK,iBAAiB,GAAG,aAAa,GACpC,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,GACjD,CAAC,yBAAyB,GAAG,2BAA2B,CAAC,GAAG;IAC1D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEJ,KAAK,eAAe,GAAG,KAAK,CAAC,yBAAyB,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,YAAY,CAAA;CAAE,CAAC;AAiBlJ,eAAO,MAAM,MAAM,EAsWb,eAAe,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";var Se=Object.create;var C=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty;var Ee=(s,i)=>{for(var l in i)C(s,l,{get:i[l],enumerable:!0})},te=(s,i,l,P)=>{if(i&&typeof i=="object"||typeof i=="function")for(let d of Ce(i))!ve.call(s,d)&&d!==l&&C(s,d,{get:()=>i[d],enumerable:!(P=xe(i,d))||P.enumerable});return s};var $=(s,i,l)=>(l=s!=null?Se(ge(s)):{},te(i||!s||!s.__esModule?C(l,"default",{value:s,enumerable:!0}):l,s)),Oe=s=>te(C({},"__esModule",{value:!0}),s);var Ne={};Ee(Ne,{Bottom:()=>A});module.exports=Oe(Ne);var t=$(require("react")),oe=$(require("classnames")),L=$(require("../sheet.js")),ne=require("../visually-hidden.js"),re=require("../shell.context.js"),g=require("../shell.hooks.js"),se=require("./shell-resize.js"),b=require("./shell-handles.js"),we=require("../shell.types.js"),z=require("./shell-prop-helpers.js"),ie=require("../../helpers/normalize-to-px.js");const Te=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],A=t.forwardRef((s,i)=>{const{className:l,presentation:P="fixed",defaultOpen:d,open:u,onOpenChange:y,expandedSize:v=200,minSize:c=100,maxSize:m=400,resizable:E=!1,collapsible:ae=!0,onExpand:j,onCollapse:F,onResize:O,onResizeStart:le,onResizeEnd:de,snapPoints:ue,snapTolerance:pe,collapseThreshold:ce,paneId:T,persistence:N,children:me,style:fe,size:q,defaultSize:K,onSizeChange:k,sizeUpdate:w,sizeUpdateMs:D=50}=s,be=(0,z.extractPaneDomProps)(s,Te),o=(0,re.useShell)(),V=(0,g.useResponsivePresentation)(P),B=V==="overlay",ye=V==="stacked",p=t.useRef(null),he=t.useCallback(e=>{p.current=e,typeof i=="function"?i(e):i&&(i.current=e)},[i]),Y=t.Children.toArray(me),G=Y.filter(e=>t.isValidElement(e)&&e.type===b.BottomHandle),J=Y.filter(e=>!(t.isValidElement(e)&&e.type===b.BottomHandle)),ze=t.useMemo(()=>(0,z.mapResponsiveBooleanToPaneMode)(u),[u]),Pe=t.useMemo(()=>(0,z.mapResponsiveBooleanToPaneMode)(d),[d]),Be=typeof u=="object"&&u!==null;(0,g.useResponsiveInitialState)({controlledValue:ze,defaultValue:Pe,currentValue:o.bottomMode,setValue:o.setBottomMode,breakpointReady:o.currentBreakpointReady,controlledIsResponsive:Be,onResponsiveChange:e=>y?.(e==="expanded",{reason:"responsive"}),onInit:e=>{typeof u>"u"&&y?.(e==="expanded",{reason:"init"})}});const f=t.useRef(null);t.useEffect(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null)},[k,w,D]);const M=t.useMemo(()=>{const e=k,r=w,a=D??50;if(!e)return()=>{};if(r==="debounce")return(n,h)=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{e(n,h),f.current=null},a)};if(r==="throttle"){let n=0;return(h,Re)=>{const ee=Date.now();ee-n>=a&&(n=ee,e(h,Re))}}return(n,h)=>e(n,h)},[k,w,D]),R=t.useRef(null);t.useEffect(()=>{const e=typeof u<"u";if(R.current===null){R.current=e;return}R.current!==e&&(console.warn("Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported."),R.current=e)},[u]);const Q=t.useRef(!1),H=t.useRef(null);t.useEffect(()=>{!Q.current&&typeof u>"u"&&d&&o.bottomMode==="expanded"&&(y?.(!0,{reason:"init"}),Q.current=!0),typeof u>"u"&&(H.current!==null&&H.current!==o.bottomMode&&y?.(o.bottomMode==="expanded",{reason:"toggle"}),H.current=o.bottomMode)},[o.bottomMode,u,d,y]);const W=t.useRef(j),X=t.useRef(F);t.useLayoutEffect(()=>{W.current=j,X.current=F});const S=t.useRef(null),Z=t.useRef(!1);t.useEffect(()=>{const e=o.bottomMode;if(!o.currentBreakpointReady){S.current=e;return}if(!Z.current){Z.current=!0,S.current=e;return}const r=S.current;r!==null&&r!==e&&(e==="expanded"?W.current?.():e==="collapsed"&&X.current?.(),S.current=e)},[o.bottomMode,o.currentBreakpointReady]);const U=o.bottomMode==="expanded",x=t.useMemo(()=>{if(!T||N)return N;const e=`kookie-ui:shell:bottom:${T}`;return{load:()=>{if(!(typeof window>"u"))try{const a=window.localStorage.getItem(e);return a?Number(a):void 0}catch{return}},save:a=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(a))}catch{}}}},[T,N]);t.useEffect(()=>{let e=!0;if(!E||!x?.load||B)return;const r=x.load(),a=n=>{!e||typeof n!="number"||!p.current||(p.current.style.setProperty("--bottom-size",`${n}px`),O?.(n))};return r instanceof Promise?r.then(a).catch(n=>{}):a(r),()=>{e=!1}},[E,x,O,B]);const Me=E&&!B&&U?t.createElement(se.PaneResizeContext.Provider,{value:{containerRef:p,cssVarName:"--bottom-size",minSize:c,maxSize:m,defaultSize:v,orientation:"horizontal",edge:"start",computeNext:(e,r,a)=>{const n=e-r;return a-n},onResize:O,onResizeStart:le,onResizeEnd:e=>{de?.(e),M(e,{reason:"resize"}),x?.save?.(e)},target:"bottom",collapsible:ae,snapPoints:ue,snapTolerance:pe??8,collapseThreshold:ce,requestCollapse:()=>o.setBottomMode("collapsed"),requestToggle:()=>o.togglePane("bottom")}},G.length>0?G.map((e,r)=>t.cloneElement(e,{key:e.key??r})):t.createElement(b.PaneHandle,null)):null,I=t.useCallback(e=>(0,ie.normalizeToPx)(e,"vertical"),[]);t.useEffect(()=>{if(p.current&&typeof q>"u"&&typeof K<"u"){const e=I(K);if(typeof e=="number"&&Number.isFinite(e)){const n=Math.min((typeof m=="number"?m:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));p.current.style.setProperty("--bottom-size",`${n}px`),M(n,{reason:"init"})}}},[]);const _=q;if(t.useEffect(()=>{if(!p.current||typeof _>"u")return;const e=I(_);if(typeof e=="number"&&Number.isFinite(e)){const n=Math.min((typeof m=="number"?m:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));p.current.style.setProperty("--bottom-size",`${n}px`),M(n,{reason:"controlled"})}},[_,c,m,I,M]),B){const e=o.bottomMode==="expanded";return t.createElement(L.Root,{open:e,onOpenChange:r=>o.setBottomMode(r?"expanded":"collapsed")},t.createElement(L.Content,{side:"bottom",style:{padding:0},height:{initial:`${v}px`}},t.createElement(ne.VisuallyHidden,null,t.createElement(L.Title,null,"Bottom panel")),J))}return t.createElement("div",{...be,ref:he,className:(0,oe.default)("rt-ShellBottom",l),"data-mode":o.bottomMode,"data-peek":o.peekTarget==="bottom"||void 0,"data-presentation":o.currentBreakpointReady?V:void 0,"data-open":o.currentBreakpointReady&&ye&&U||void 0,style:{...fe,"--bottom-size":`${v}px`,"--bottom-min-size":`${c}px`,"--bottom-max-size":`${m}px`}},t.createElement("div",{className:"rt-ShellBottomContent","data-visible":U||void 0},J),Me)});A.displayName="Shell.Bottom",A.Handle=b.BottomHandle;
1
+ "use strict";var Ce=Object.create;var g=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var Ne=(s,i)=>{for(var l in i)g(s,l,{get:i[l],enumerable:!0})},se=(s,i,l,P)=>{if(i&&typeof i=="object"||typeof i=="function")for(let d of Ee(i))!Te.call(s,d)&&d!==l&&g(s,d,{get:()=>i[d],enumerable:!(P=ve(i,d))||P.enumerable});return s};var A=(s,i,l)=>(l=s!=null?Ce(Oe(s)):{},se(i||!s||!s.__esModule?g(l,"default",{value:s,enumerable:!0}):l,s)),ke=s=>se(g({},"__esModule",{value:!0}),s);var De={};Ne(De,{Bottom:()=>F});module.exports=ke(De);var t=A(require("react")),ie=A(require("classnames")),j=A(require("../sheet.js")),ae=require("../visually-hidden.js"),C=require("../shell.context.js"),v=require("../shell.hooks.js"),le=require("./shell-resize.js"),b=require("./shell-handles.js"),He=require("../shell.types.js"),z=require("./shell-prop-helpers.js"),de=require("../../helpers/normalize-to-px.js");const we=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style","inset"],F=t.forwardRef((s,i)=>{const{className:l,presentation:P="fixed",defaultOpen:d,open:u,onOpenChange:y,expandedSize:E=200,minSize:c=100,maxSize:m=400,resizable:O=!1,collapsible:ue=!0,onExpand:q,onCollapse:K,onResize:T,onResizeStart:pe,onResizeEnd:ce,snapPoints:me,snapTolerance:fe,collapseThreshold:be,paneId:N,persistence:k,children:ye,style:he,size:Y,defaultSize:G,onSizeChange:w,sizeUpdate:D,sizeUpdateMs:V=50,inset:H}=s,ze=(0,z.extractPaneDomProps)(s,we),o=(0,C.useShell)(),{registerInset:J,unregisterInset:Q}=(0,C.useInset)();t.useEffect(()=>{if(H)return J("bottom"),()=>Q("bottom")},[H,J,Q]);const I=(0,v.useResponsivePresentation)(P),B=I==="overlay",Pe=I==="stacked",p=t.useRef(null),Be=t.useCallback(e=>{p.current=e,typeof i=="function"?i(e):i&&(i.current=e)},[i]),W=t.Children.toArray(ye),X=W.filter(e=>t.isValidElement(e)&&e.type===b.BottomHandle),Z=W.filter(e=>!(t.isValidElement(e)&&e.type===b.BottomHandle)),Me=t.useMemo(()=>(0,z.mapResponsiveBooleanToPaneMode)(u),[u]),Re=t.useMemo(()=>(0,z.mapResponsiveBooleanToPaneMode)(d),[d]),Se=typeof u=="object"&&u!==null;(0,v.useResponsiveInitialState)({controlledValue:Me,defaultValue:Re,currentValue:o.bottomMode,setValue:o.setBottomMode,breakpointReady:o.currentBreakpointReady,controlledIsResponsive:Se,onResponsiveChange:e=>y?.(e==="expanded",{reason:"responsive"}),onInit:e=>{typeof u>"u"&&y?.(e==="expanded",{reason:"init"})}});const f=t.useRef(null);t.useEffect(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null)},[w,D,V]);const M=t.useMemo(()=>{const e=w,r=D,a=V??50;if(!e)return()=>{};if(r==="debounce")return(n,h)=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{e(n,h),f.current=null},a)};if(r==="throttle"){let n=0;return(h,ge)=>{const re=Date.now();re-n>=a&&(n=re,e(h,ge))}}return(n,h)=>e(n,h)},[w,D,V]),R=t.useRef(null);t.useEffect(()=>{const e=typeof u<"u";if(R.current===null){R.current=e;return}R.current!==e&&(console.warn("Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported."),R.current=e)},[u]);const ee=t.useRef(!1),U=t.useRef(null);t.useEffect(()=>{!ee.current&&typeof u>"u"&&d&&o.bottomMode==="expanded"&&(y?.(!0,{reason:"init"}),ee.current=!0),typeof u>"u"&&(U.current!==null&&U.current!==o.bottomMode&&y?.(o.bottomMode==="expanded",{reason:"toggle"}),U.current=o.bottomMode)},[o.bottomMode,u,d,y]);const te=t.useRef(q),oe=t.useRef(K);t.useLayoutEffect(()=>{te.current=q,oe.current=K});const S=t.useRef(null),ne=t.useRef(!1);t.useEffect(()=>{const e=o.bottomMode;if(!o.currentBreakpointReady){S.current=e;return}if(!ne.current){ne.current=!0,S.current=e;return}const r=S.current;r!==null&&r!==e&&(e==="expanded"?te.current?.():e==="collapsed"&&oe.current?.(),S.current=e)},[o.bottomMode,o.currentBreakpointReady]);const _=o.bottomMode==="expanded",x=t.useMemo(()=>{if(!N||k)return k;const e=`kookie-ui:shell:bottom:${N}`;return{load:()=>{if(!(typeof window>"u"))try{const a=window.localStorage.getItem(e);return a?Number(a):void 0}catch{return}},save:a=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(a))}catch{}}}},[N,k]);t.useEffect(()=>{let e=!0;if(!O||!x?.load||B)return;const r=x.load(),a=n=>{!e||typeof n!="number"||!p.current||(p.current.style.setProperty("--bottom-size",`${n}px`),T?.(n))};return r instanceof Promise?r.then(a).catch(n=>{}):a(r),()=>{e=!1}},[O,x,T,B]);const xe=O&&!B&&_?t.createElement(le.PaneResizeContext.Provider,{value:{containerRef:p,cssVarName:"--bottom-size",minSize:c,maxSize:m,defaultSize:E,orientation:"horizontal",edge:"start",computeNext:(e,r,a)=>{const n=e-r;return a-n},onResize:T,onResizeStart:pe,onResizeEnd:e=>{ce?.(e),M(e,{reason:"resize"}),x?.save?.(e)},target:"bottom",collapsible:ue,snapPoints:me,snapTolerance:fe??8,collapseThreshold:be,requestCollapse:()=>o.setBottomMode("collapsed"),requestToggle:()=>o.togglePane("bottom")}},X.length>0?X.map((e,r)=>t.cloneElement(e,{key:e.key??r})):t.createElement(b.PaneHandle,null)):null,$=t.useCallback(e=>(0,de.normalizeToPx)(e,"vertical"),[]);t.useEffect(()=>{if(p.current&&typeof Y>"u"&&typeof G<"u"){const e=$(G);if(typeof e=="number"&&Number.isFinite(e)){const n=Math.min((typeof m=="number"?m:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));p.current.style.setProperty("--bottom-size",`${n}px`),M(n,{reason:"init"})}}},[]);const L=Y;if(t.useEffect(()=>{if(!p.current||typeof L>"u")return;const e=$(L);if(typeof e=="number"&&Number.isFinite(e)){const n=Math.min((typeof m=="number"?m:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));p.current.style.setProperty("--bottom-size",`${n}px`),M(n,{reason:"controlled"})}},[L,c,m,$,M]),B){const e=o.bottomMode==="expanded";return t.createElement(j.Root,{open:e,onOpenChange:r=>o.setBottomMode(r?"expanded":"collapsed")},t.createElement(j.Content,{side:"bottom",style:{padding:0},height:{initial:`${E}px`}},t.createElement(ae.VisuallyHidden,null,t.createElement(j.Title,null,"Bottom panel")),Z))}return t.createElement("div",{...ze,ref:Be,className:(0,ie.default)("rt-ShellBottom",l),"data-mode":o.bottomMode,"data-peek":o.peekTarget==="bottom"||void 0,"data-presentation":o.currentBreakpointReady?I:void 0,"data-open":o.currentBreakpointReady&&Pe&&_||void 0,"data-inset":H||void 0,style:{...he,"--bottom-size":`${E}px`,"--bottom-min-size":`${c}px`,"--bottom-max-size":`${m}px`}},t.createElement("div",{className:"rt-ShellBottomContent","data-visible":_||void 0},Z),xe)});F.displayName="Shell.Bottom",F.Handle=b.BottomHandle;
2
2
  //# sourceMappingURL=shell-bottom.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-bottom.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { BottomHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype BottomOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype BottomControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; defaultOpen?: never };\ntype BottomUncontrolledProps = { defaultOpen?: boolean; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; open?: never };\ntype BottomSizeControlledProps = { size: number | string; defaultSize?: never };\ntype BottomSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype BottomSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype BottomPublicProps = PaneBaseProps &\n (BottomControlledProps | BottomUncontrolledProps) &\n (BottomSizeControlledProps | BottomSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: BottomSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n };\n\ntype BottomComponent = React.ForwardRefExoticComponent<BottomPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof BottomHandle };\n\nconst BOTTOM_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof BottomPublicProps)[];\n\nexport const Bottom = React.forwardRef<HTMLDivElement, BottomPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = 'fixed',\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 200,\n minSize = 100,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n } = initialProps;\n const bottomDomProps = extractPaneDomProps(initialProps, BOTTOM_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === BottomHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === BottomHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.bottomMode,\n setValue: shell.setBottomMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: BottomSizeChangeMeta) => void);\n const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n return (s: number, meta: BottomSizeChangeMeta) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n cb(s, meta);\n debounceTimeoutRef.current = null;\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: BottomSizeChangeMeta) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: BottomSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastBottomModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.bottomMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n if (typeof open === 'undefined') {\n if (lastBottomModeRef.current !== null && lastBottomModeRef.current !== shell.bottomMode) {\n onOpenChange?.(shell.bottomMode === 'expanded', { reason: 'toggle' });\n }\n lastBottomModeRef.current = shell.bottomMode;\n }\n }, [shell.bottomMode, open, defaultOpen, onOpenChange]);\n\n // Track previous mode to only fire callbacks on actual user-initiated state transitions.\n // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState\n // is complete before enabling callbacks. This avoids spurious callbacks during initialization.\n // Use callback refs to avoid re-running effect when inline callbacks change.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevBottomModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.bottomMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevBottomModeRef.current = currentMode;\n return;\n }\n\n // Skip the first run after breakpoint is ready - this captures the post-sync state\n if (!hasInitializedRef.current) {\n hasInitializedRef.current = true;\n prevBottomModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevBottomModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevBottomModeRef.current = currentMode;\n }\n }, [shell.bottomMode, shell.currentBreakpointReady]);\n\n const isExpanded = shell.bottomMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:bottom:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--bottom-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--bottom-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'horizontal',\n edge: 'start',\n computeNext: (client, startClient, startSize) => {\n const delta = client - startClient;\n return startSize - delta;\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'bottom',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setBottomMode('collapsed'),\n requestToggle: () => shell.togglePane('bottom'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Strip control/size props from DOM spread (moved above overlay return to keep hook order consistent)\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'vertical'), []);\n\n // Apply defaultSize on mount when uncontrolled (moved above overlay return)\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync (moved above overlay return)\n const controlledSize = size;\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof controlledSize === 'undefined') return;\n const px = normalizeSizeToPx(controlledSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.bottomMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setBottomMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"bottom\" style={{ padding: 0 }} height={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Bottom panel</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n return (\n <div\n {...bottomDomProps}\n ref={setRef}\n className={classNames('rt-ShellBottom', className)}\n data-mode={shell.bottomMode}\n data-peek={shell.peekTarget === 'bottom' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n style={{\n ...style,\n ['--bottom-size' as any]: `${expandedSize}px`,\n ['--bottom-min-size' as any]: `${minSize}px`,\n ['--bottom-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellBottomContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as BottomComponent;\nBottom.displayName = 'Shell.Bottom';\nBottom.Handle = BottomHandle;\n"],
5
- "mappings": "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",
6
- "names": ["shell_bottom_exports", "__export", "Bottom", "__toCommonJS", "React", "import_classnames", "Sheet", "import_visually_hidden", "import_shell_context", "import_shell_hooks", "import_shell_resize", "import_shell_handles", "import_shell_types", "import_shell_prop_helpers", "import_normalize_to_px", "BOTTOM_DOM_PROP_KEYS", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "bottomDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastBottomModeRef", "onExpandRef", "onCollapseRef", "prevBottomModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "delta", "i", "normalizeSizeToPx", "px", "clamped", "controlledSize", "o", "classNames"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell, useInset } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { BottomHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype BottomOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype BottomControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; defaultOpen?: never };\ntype BottomUncontrolledProps = { defaultOpen?: boolean; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; open?: never };\ntype BottomSizeControlledProps = { size: number | string; defaultSize?: never };\ntype BottomSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype BottomSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype BottomPublicProps = PaneBaseProps &\n (BottomControlledProps | BottomUncontrolledProps) &\n (BottomSizeControlledProps | BottomSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: BottomSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n /** When true, adds margin and triggers gray backdrop on Shell. */\n inset?: boolean;\n };\n\ntype BottomComponent = React.ForwardRefExoticComponent<BottomPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof BottomHandle };\n\nconst BOTTOM_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n 'inset',\n] as const satisfies readonly (keyof BottomPublicProps)[];\n\nexport const Bottom = React.forwardRef<HTMLDivElement, BottomPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = 'fixed',\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 200,\n minSize = 100,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n inset,\n } = initialProps;\n const bottomDomProps = extractPaneDomProps(initialProps, BOTTOM_DOM_PROP_KEYS);\n const shell = useShell();\n const { registerInset, unregisterInset } = useInset();\n\n // Register/unregister inset\n React.useEffect(() => {\n if (inset) {\n registerInset('bottom');\n return () => unregisterInset('bottom');\n }\n }, [inset, registerInset, unregisterInset]);\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === BottomHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === BottomHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.bottomMode,\n setValue: shell.setBottomMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: BottomSizeChangeMeta) => void);\n const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n return (s: number, meta: BottomSizeChangeMeta) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n cb(s, meta);\n debounceTimeoutRef.current = null;\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: BottomSizeChangeMeta) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: BottomSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastBottomModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.bottomMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n if (typeof open === 'undefined') {\n if (lastBottomModeRef.current !== null && lastBottomModeRef.current !== shell.bottomMode) {\n onOpenChange?.(shell.bottomMode === 'expanded', { reason: 'toggle' });\n }\n lastBottomModeRef.current = shell.bottomMode;\n }\n }, [shell.bottomMode, open, defaultOpen, onOpenChange]);\n\n // Track previous mode to only fire callbacks on actual user-initiated state transitions.\n // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState\n // is complete before enabling callbacks. This avoids spurious callbacks during initialization.\n // Use callback refs to avoid re-running effect when inline callbacks change.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevBottomModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.bottomMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevBottomModeRef.current = currentMode;\n return;\n }\n\n // Skip the first run after breakpoint is ready - this captures the post-sync state\n if (!hasInitializedRef.current) {\n hasInitializedRef.current = true;\n prevBottomModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevBottomModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevBottomModeRef.current = currentMode;\n }\n }, [shell.bottomMode, shell.currentBreakpointReady]);\n\n const isExpanded = shell.bottomMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:bottom:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--bottom-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--bottom-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'horizontal',\n edge: 'start',\n computeNext: (client, startClient, startSize) => {\n const delta = client - startClient;\n return startSize - delta;\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'bottom',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setBottomMode('collapsed'),\n requestToggle: () => shell.togglePane('bottom'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Strip control/size props from DOM spread (moved above overlay return to keep hook order consistent)\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'vertical'), []);\n\n // Apply defaultSize on mount when uncontrolled (moved above overlay return)\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync (moved above overlay return)\n const controlledSize = size;\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof controlledSize === 'undefined') return;\n const px = normalizeSizeToPx(controlledSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.bottomMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setBottomMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"bottom\" style={{ padding: 0 }} height={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Bottom panel</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n return (\n <div\n {...bottomDomProps}\n ref={setRef}\n className={classNames('rt-ShellBottom', className)}\n data-mode={shell.bottomMode}\n data-peek={shell.peekTarget === 'bottom' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n data-inset={inset || undefined}\n style={{\n ...style,\n ['--bottom-size' as any]: `${expandedSize}px`,\n ['--bottom-min-size' as any]: `${minSize}px`,\n ['--bottom-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellBottomContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as BottomComponent;\nBottom.displayName = 'Shell.Bottom';\nBottom.Handle = BottomHandle;\n"],
5
+ "mappings": "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",
6
+ "names": ["shell_bottom_exports", "__export", "Bottom", "__toCommonJS", "React", "import_classnames", "Sheet", "import_visually_hidden", "import_shell_context", "import_shell_hooks", "import_shell_resize", "import_shell_handles", "import_shell_types", "import_shell_prop_helpers", "import_normalize_to_px", "BOTTOM_DOM_PROP_KEYS", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "inset", "bottomDomProps", "shell", "registerInset", "unregisterInset", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastBottomModeRef", "onExpandRef", "onCollapseRef", "prevBottomModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "delta", "i", "normalizeSizeToPx", "px", "clamped", "controlledSize", "o", "classNames"]
7
7
  }
@@ -29,6 +29,8 @@ type InspectorPublicProps = PaneBaseProps & (InspectorControlledProps | Inspecto
29
29
  onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;
30
30
  sizeUpdate?: 'throttle' | 'debounce';
31
31
  sizeUpdateMs?: number;
32
+ /** When true, adds margin and triggers gray backdrop on Shell. */
33
+ inset?: boolean;
32
34
  };
33
35
  type InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & {
34
36
  Handle: typeof InspectorHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"shell-inspector.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1H,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrL,KAAK,0BAA0B,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACxL,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,4BAA4B,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,8BAA8B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACtF,KAAK,oBAAoB,GAAG,aAAa,GACvC,CAAC,wBAAwB,GAAG,0BAA0B,CAAC,GACvD,CAAC,4BAA4B,GAAG,8BAA8B,CAAC,GAAG;IAChE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,KAAK,kBAAkB,GAAG,KAAK,CAAC,yBAAyB,CAAC,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,eAAe,CAAA;CAAE,CAAC;AAgB3J,eAAO,MAAM,SAAS,EA6VhB,kBAAkB,CAAC"}
1
+ {"version":3,"file":"shell-inspector.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1H,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrL,KAAK,0BAA0B,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACxL,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,4BAA4B,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,8BAA8B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACtF,KAAK,oBAAoB,GAAG,aAAa,GACvC,CAAC,wBAAwB,GAAG,0BAA0B,CAAC,GACvD,CAAC,4BAA4B,GAAG,8BAA8B,CAAC,GAAG;IAChE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEJ,KAAK,kBAAkB,GAAG,KAAK,CAAC,yBAAyB,CAAC,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,eAAe,CAAA;CAAE,CAAC;AAiB3J,eAAO,MAAM,SAAS,EAwWhB,kBAAkB,CAAC"}