@jobber/components 8.21.1 → 8.23.0

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 (93) hide show
  1. package/Dialog.d.ts +1 -0
  2. package/Dialog.js +17 -0
  3. package/dist/BottomSheet-cjs.js +34 -7
  4. package/dist/BottomSheet-es.js +34 -8
  5. package/dist/CSPContext-cjs.js +69 -0
  6. package/dist/CSPContext-es.js +46 -0
  7. package/dist/Card/index.cjs +3 -0
  8. package/dist/Card/index.mjs +3 -0
  9. package/dist/ComboboxChipRemove-cjs.js +54 -211
  10. package/dist/ComboboxChipRemove-es.js +8 -164
  11. package/dist/DataDump/index.cjs +3 -0
  12. package/dist/DataDump/index.mjs +3 -0
  13. package/dist/Dialog/Dialog.d.ts +3 -0
  14. package/dist/Dialog/Dialog.types.d.ts +205 -0
  15. package/dist/Dialog/DialogBottomSheet.d.ts +28 -0
  16. package/dist/Dialog/DialogModal.d.ts +20 -0
  17. package/dist/Dialog/constants.d.ts +1 -0
  18. package/dist/Dialog/dialogComposableShared.d.ts +53 -0
  19. package/dist/Dialog/dialogReturnFocus.d.ts +43 -0
  20. package/dist/Dialog/index.cjs +33 -0
  21. package/dist/Dialog/index.d.ts +4 -0
  22. package/dist/Dialog/index.mjs +25 -0
  23. package/dist/DrawerDescription-cjs.js +410 -0
  24. package/dist/DrawerDescription-es.js +383 -0
  25. package/dist/DrawerTitle-cjs.js +116 -0
  26. package/dist/DrawerTitle-es.js +92 -0
  27. package/dist/InputNumberExperimental-cjs.js +24 -23
  28. package/dist/InputNumberExperimental-es.js +3 -2
  29. package/dist/InternalBackdrop-es.js +3 -3
  30. package/dist/Menu/index.cjs +3 -0
  31. package/dist/Menu/index.mjs +3 -0
  32. package/dist/Menu-cjs.js +6 -4
  33. package/dist/Menu-es.js +6 -4
  34. package/dist/MenuSubmenuTrigger-cjs.js +53 -103
  35. package/dist/MenuSubmenuTrigger-es.js +55 -103
  36. package/dist/NumberFieldInput-cjs.js +9 -9
  37. package/dist/NumberFieldInput-es.js +3 -3
  38. package/dist/Page/index.cjs +3 -0
  39. package/dist/Page/index.mjs +3 -0
  40. package/dist/ScrollAreaViewport-cjs.js +921 -960
  41. package/dist/ScrollAreaViewport-es.js +917 -958
  42. package/dist/SelectGroupLabel-cjs.js +1924 -0
  43. package/dist/SelectGroupLabel-es.js +1888 -0
  44. package/dist/SelectPrimitive-cjs.js +112 -0
  45. package/dist/SelectPrimitive-es.js +110 -0
  46. package/dist/ToolbarRootContext-cjs.js +35 -0
  47. package/dist/ToolbarRootContext-es.js +14 -0
  48. package/dist/dialogReturnFocus-cjs.js +427 -0
  49. package/dist/dialogReturnFocus-es.js +423 -0
  50. package/dist/docs/SelectPrimitive/SelectPrimitive.md +326 -0
  51. package/dist/docs/index.md +1 -0
  52. package/dist/floating-ui.react-dom-cjs.js +1 -0
  53. package/dist/floating-ui.react-dom-es.js +2 -2
  54. package/dist/floating-ui.utils.dom-es.js +1 -1
  55. package/dist/index.cjs +15 -7
  56. package/dist/index.d.mts +1 -0
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.mjs +12 -7
  59. package/dist/primitives/BottomSheet/BottomSheet.d.ts +19 -1
  60. package/dist/primitives/BottomSheet/BottomSheet.types.d.ts +8 -0
  61. package/dist/primitives/BottomSheet/index.cjs +2 -0
  62. package/dist/primitives/BottomSheet/index.d.ts +1 -1
  63. package/dist/primitives/BottomSheet/index.mjs +2 -1
  64. package/dist/primitives/ComboboxPrimitive/index.cjs +3 -1
  65. package/dist/primitives/ComboboxPrimitive/index.mjs +3 -1
  66. package/dist/primitives/InputNumberExperimental/index.cjs +2 -1
  67. package/dist/primitives/InputNumberExperimental/index.mjs +2 -1
  68. package/dist/primitives/SelectPrimitive/SelectPrimitive.d.ts +63 -0
  69. package/dist/primitives/SelectPrimitive/index.cjs +29 -0
  70. package/dist/primitives/SelectPrimitive/index.d.ts +2 -0
  71. package/dist/primitives/SelectPrimitive/index.mjs +23 -0
  72. package/dist/primitives/SelectPrimitive/types.d.ts +16 -0
  73. package/dist/primitives/index.cjs +9 -1
  74. package/dist/primitives/index.d.ts +1 -0
  75. package/dist/primitives/index.mjs +8 -2
  76. package/dist/primitives/mergeClassName.d.ts +12 -0
  77. package/dist/resolveAriaLabelledBy-cjs.js +195 -0
  78. package/dist/resolveAriaLabelledBy-es.js +162 -0
  79. package/dist/styles.css +685 -0
  80. package/dist/unstyledPrimitives/index.cjs +434 -259
  81. package/dist/unstyledPrimitives/index.d.ts +2 -0
  82. package/dist/unstyledPrimitives/index.mjs +425 -252
  83. package/dist/useButton-cjs.js +2 -0
  84. package/dist/useButton-es.js +3 -2
  85. package/dist/useCompositeListItem-es.js +4 -4
  86. package/dist/useLabel-cjs.js +3 -329
  87. package/dist/useLabel-es.js +4 -299
  88. package/dist/useLabelableId-cjs.js +332 -0
  89. package/dist/useLabelableId-es.js +300 -0
  90. package/dist/useRenderElement-cjs.js +3 -0
  91. package/dist/useRenderElement-es.js +4 -1
  92. package/dist/utils/meta/meta.json +11 -1
  93. package/package.json +2 -2
package/dist/styles.css CHANGED
@@ -3567,6 +3567,27 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
3567
3567
  z-index: var(--elevation-modal);
3568
3568
  }
3569
3569
 
3570
+ /*
3571
+ * Explicit, documented Base UI Menu backdrop. Base UI renders a transparent
3572
+ * internal backdrop for modal menus to capture outside presses, but that
3573
+ * internal backdrop has no z-index. When a Menu opens inside an overlay that
3574
+ * sets its own stacking (e.g. Dialog's backdrop at --elevation-modal), the
3575
+ * overlay paints above the internal backdrop and steals the dismissing click —
3576
+ * closing the overlay instead of just the menu. Rendering Menu.Backdrop at the
3577
+ * same elevation lets the menu's backdrop win by DOM order and intercept the
3578
+ * click, so an outside press dismisses only the menu.
3579
+ */
3580
+
3581
+ .wqvf3hcDMM0- {
3582
+ position: fixed;
3583
+ top: 0;
3584
+ right: 0;
3585
+ bottom: 0;
3586
+ left: 0;
3587
+ z-index: 1001;
3588
+ z-index: var(--elevation-modal);
3589
+ }
3590
+
3570
3591
  .-DayvgvIcVo- {
3571
3592
  --menu-space: var(--space-small);
3572
3593
  --menu-item-gap: var(--space-small);
@@ -5483,6 +5504,331 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
5483
5504
  font-size: var(--typography--fontSize-small);
5484
5505
  }
5485
5506
 
5507
+ /* ============================================================
5508
+ SelectPrimitive
5509
+ Styled wrappers around BaseUI Select parts with Atlantis tokens.
5510
+ No field structure abstraction — consumers compose their own.
5511
+ ============================================================ */
5512
+
5513
+ /* ------ Trigger ------ */
5514
+
5515
+ .WQiJQH4jadQ- {
5516
+ /* Field tokens */
5517
+ --field--placeholder-color: var(--color-text--secondary);
5518
+ --field--value-color: var(--color-heading);
5519
+ --field--border-color: var(--color-border--interactive);
5520
+ --field--height: var(--space-largest);
5521
+ --field--padding-x: var(--space-base);
5522
+ --field--background-color: var(--color-surface);
5523
+ /* Space reserved on the right for the chevron icon */
5524
+ --field--icon-area: calc(
5525
+ var(--base-unit) * 1.25 + var(--field--padding-x) + var(--space-small)
5526
+ );
5527
+
5528
+ display: -ms-flexbox;
5529
+
5530
+ display: flex;
5531
+ position: relative;
5532
+ -ms-flex-align: center;
5533
+ align-items: center;
5534
+ width: 100%;
5535
+ height: 48px;
5536
+ height: var(--field--height);
5537
+ box-sizing: border-box;
5538
+ padding: 0 calc(
5539
+ 16px * 1.25 + 16px + 8px
5540
+ ) 0 16px;
5541
+ padding: 0 var(--field--icon-area) 0 var(--field--padding-x);
5542
+ border: 1px solid hsl(200, 13%, 87%);
5543
+ border: var(--border-base) solid var(--field--border-color);
5544
+ border-top-right-radius: 8px;
5545
+ border-top-right-radius: var(
5546
+ --public-field--top-right-radius,
5547
+ var(--radius-base)
5548
+ );
5549
+ border-bottom-right-radius: 8px;
5550
+ border-bottom-right-radius: var(
5551
+ --public-field--bottom-right-radius,
5552
+ var(--radius-base)
5553
+ );
5554
+ border-bottom-left-radius: 8px;
5555
+ border-bottom-left-radius: var(
5556
+ --public-field--bottom-left-radius,
5557
+ var(--radius-base)
5558
+ );
5559
+ border-top-left-radius: 8px;
5560
+ border-top-left-radius: var(
5561
+ --public-field--top-left-radius,
5562
+ var(--radius-base)
5563
+ );
5564
+ outline: none;
5565
+ color: hsl(197, 90%, 12%);
5566
+ color: var(--field--value-color);
5567
+ font-family: inherit;
5568
+ font-size: 14px;
5569
+ font-size: var(--typography--fontSize-base);
5570
+ text-align: left;
5571
+ background-color: rgba(255, 255, 255, 1);
5572
+ background-color: var(--field--background-color);
5573
+ cursor: pointer;
5574
+
5575
+ transition: box-shadow 200ms ease-out,
5576
+ border-color 200ms ease-out;
5577
+
5578
+ transition: box-shadow var(--timing-base) ease-out,
5579
+ border-color var(--timing-base) ease-out;
5580
+ -webkit-appearance: none;
5581
+ appearance: none;
5582
+ }
5583
+
5584
+ .WQiJQH4jadQ-:focus-visible,
5585
+ .WQiJQH4jadQ-[data-popup-open] {
5586
+ box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 1), 0px 0px 0px 4px hsl(198, 12%, 57%);
5587
+ box-shadow: var(--shadow-focus);
5588
+ }
5589
+
5590
+ .WQiJQH4jadQ-:disabled {
5591
+ --field--placeholder-color: var(--color-disabled);
5592
+ --field--value-color: var(--color-disabled);
5593
+ --field--background-color: var(--color-disabled--secondary);
5594
+ --field--border-color: var(--color-border);
5595
+ cursor: not-allowed;
5596
+ }
5597
+
5598
+ .WQiJQH4jadQ-[data-readonly] {
5599
+ --field--border-color: var(--color-border);
5600
+ --field--background-color: var(--color-disabled--secondary);
5601
+ pointer-events: none;
5602
+ cursor: default;
5603
+ }
5604
+
5605
+ .WQiJQH4jadQ-[data-invalid] {
5606
+ --field--border-color: var(--color-critical);
5607
+ }
5608
+
5609
+ /* ------ Value / placeholder text ------ */
5610
+
5611
+ .P2HhjOjxY34- {
5612
+ -ms-flex: 1;
5613
+ flex: 1;
5614
+ min-width: 0;
5615
+ overflow: hidden;
5616
+ color: var(--field--value-color);
5617
+ text-overflow: ellipsis;
5618
+ white-space: nowrap;
5619
+ pointer-events: none;
5620
+ }
5621
+
5622
+ .WQiJQH4jadQ-[data-placeholder] .P2HhjOjxY34- {
5623
+ color: var(--field--placeholder-color);
5624
+ }
5625
+
5626
+ /* ------ Chevron icon ------ */
5627
+
5628
+ .cxgFUCKcXcw- {
5629
+ display: -ms-flexbox;
5630
+ display: flex;
5631
+ position: absolute;
5632
+ top: 50%;
5633
+ right: var(--field--padding-x);
5634
+ pointer-events: none;
5635
+ -webkit-transform: translateY(-50%);
5636
+ transform: translateY(-50%);
5637
+ -ms-flex-align: center;
5638
+ align-items: center;
5639
+ }
5640
+
5641
+ ._3BEK4Z1gGis- {
5642
+ display: -ms-flexbox;
5643
+ display: flex;
5644
+ transition: -webkit-transform 100ms;
5645
+ transition: -webkit-transform var(--timing-quick);
5646
+ transition: transform 100ms;
5647
+ transition: transform var(--timing-quick);
5648
+ transition: transform 100ms, -webkit-transform 100ms;
5649
+ transition: transform var(--timing-quick), -webkit-transform var(--timing-quick);
5650
+ }
5651
+
5652
+ .WQiJQH4jadQ-[data-popup-open] ._3BEK4Z1gGis- {
5653
+ -webkit-transform: rotate(180deg);
5654
+ transform: rotate(180deg);
5655
+ }
5656
+
5657
+ /* ============================================================
5658
+ Popup / Dropdown — mirrors Menu dropdown styling
5659
+ ============================================================ */
5660
+
5661
+ .g221yZJtRrU- {
5662
+ z-index: 1001;
5663
+ z-index: var(--elevation-modal);
5664
+ }
5665
+
5666
+ .vifRnCQ18ss- {
5667
+ min-width: var(--anchor-width);
5668
+ box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1), 0px 4px 12px 0px rgba(0, 0, 0, 0.05);
5669
+ box-shadow: var(--shadow-base);
5670
+ box-sizing: border-box;
5671
+ padding: 0;
5672
+ border: 1px solid hsl(200, 13%, 87%);
5673
+ border: var(--border-base) solid var(--color-border);
5674
+ border-radius: 8px;
5675
+ border-radius: var(--radius-base);
5676
+ outline: none;
5677
+ overflow: hidden;
5678
+ background-color: rgba(255, 255, 255, 1);
5679
+ background-color: var(--color-surface);
5680
+ }
5681
+
5682
+ .WsOmdkQ0SWU- {
5683
+ --menu-space: var(--space-small);
5684
+ --menu-item-min-height: calc(var(--base-unit) * 2.5);
5685
+ --menu-item-padding-y: var(--space-small);
5686
+ --menu-item-padding-x: var(--space-small);
5687
+ --menu-item-gap: var(--space-small);
5688
+
5689
+ display: -ms-flexbox;
5690
+
5691
+ display: flex;
5692
+ -ms-flex-direction: column;
5693
+ flex-direction: column;
5694
+ max-height: min(
5695
+ 72vh,
5696
+ max(0px, calc(var(--available-height) - 16px))
5697
+ );
5698
+ max-height: min(
5699
+ 72vh,
5700
+ max(0px, calc(var(--available-height) - var(--space-base)))
5701
+ );
5702
+ box-sizing: border-box;
5703
+ padding: 8px;
5704
+ padding: var(--menu-space);
5705
+ border-radius: inherit;
5706
+ overflow: auto;
5707
+ }
5708
+
5709
+ /* ------ Item ------ */
5710
+
5711
+ .wQ2wXu1YH-k- {
5712
+ display: -ms-flexbox;
5713
+ display: flex;
5714
+ -ms-flex-align: center;
5715
+ align-items: center;
5716
+ gap: var(--menu-item-gap);
5717
+ width: 100%;
5718
+ min-height: var(--menu-item-min-height);
5719
+ box-sizing: border-box;
5720
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
5721
+ border: none;
5722
+ border-radius: 4px;
5723
+ border-radius: var(--radius-small);
5724
+ outline: none;
5725
+ color: inherit;
5726
+ font-family: inherit;
5727
+ font-size: 14px;
5728
+ font-size: var(--typography--fontSize-base);
5729
+ text-align: left;
5730
+ -webkit-user-select: none;
5731
+ -ms-user-select: none;
5732
+ user-select: none;
5733
+ background: transparent;
5734
+ cursor: pointer;
5735
+
5736
+ transition: background-color 200ms ease-out;
5737
+
5738
+ transition: background-color var(--timing-base) ease-out;
5739
+ }
5740
+
5741
+ .wQ2wXu1YH-k-[data-highlighted] {
5742
+ background-color: hsl(43, 18%, 92%);
5743
+ background-color: var(--color-surface--hover);
5744
+ }
5745
+
5746
+ .wQ2wXu1YH-k-[data-disabled] {
5747
+ color: hsl(0, 0%, 58%);
5748
+ color: var(--color-disabled);
5749
+ cursor: not-allowed;
5750
+ }
5751
+
5752
+ /* ------ Item text ------ */
5753
+
5754
+ ._--Vi-17OUiU- {
5755
+ -ms-flex: 1;
5756
+ flex: 1;
5757
+ min-width: 0;
5758
+ overflow: hidden;
5759
+ text-overflow: ellipsis;
5760
+ white-space: nowrap;
5761
+ }
5762
+
5763
+ /* ------ Item indicator (checkmark) ------ */
5764
+
5765
+ .CfjooR3I8Jc- {
5766
+ display: -ms-inline-flexbox;
5767
+ display: inline-flex;
5768
+ /* Hidden by default; revealed via CSS when the item is selected.
5769
+ Using visibility (not display) so layout width is always reserved. */
5770
+ visibility: hidden;
5771
+ min-width: calc(16px * 1.5);
5772
+ min-width: calc(var(--base-unit) * 1.5);
5773
+ -ms-flex-negative: 0;
5774
+ flex-shrink: 0;
5775
+ -ms-flex-align: center;
5776
+ align-items: center;
5777
+ -ms-flex-pack: center;
5778
+ justify-content: center;
5779
+ }
5780
+
5781
+ .wQ2wXu1YH-k-[data-selected] .CfjooR3I8Jc- {
5782
+ visibility: visible;
5783
+ }
5784
+
5785
+ /* ------ Separator ------ */
5786
+
5787
+ .lI5-MyBERFY- {
5788
+ margin: 8px 0;
5789
+ margin: var(--space-small) 0;
5790
+ border: none;
5791
+ border-bottom: 1px solid hsl(200, 13%, 87%);
5792
+ border-bottom: var(--border-base) solid var(--color-border);
5793
+ }
5794
+
5795
+ /* ------ Group ------ */
5796
+
5797
+ ._21z9KBWR06w- {
5798
+ display: -ms-flexbox;
5799
+ display: flex;
5800
+ -ms-flex-direction: column;
5801
+ flex-direction: column;
5802
+ }
5803
+
5804
+ ._21z9KBWR06w-:not(:last-child) {
5805
+ padding-bottom: 8px;
5806
+ padding-bottom: var(--space-small);
5807
+ border-bottom: 1px solid hsl(200, 13%, 87%);
5808
+ border-bottom: var(--border-base) solid var(--color-border);
5809
+ }
5810
+
5811
+ ._21z9KBWR06w-:not(:first-child) {
5812
+ margin-top: 8px;
5813
+ margin-top: var(--space-small);
5814
+ }
5815
+
5816
+ /* ------ Group label ------ */
5817
+
5818
+ .ZhtKkgZiSQI- {
5819
+ display: -ms-flexbox;
5820
+ display: flex;
5821
+ -ms-flex-align: center;
5822
+ align-items: center;
5823
+ padding: 8px 8px 4px;
5824
+ padding: var(--space-small) var(--space-small) var(--space-smaller);
5825
+ color: hsl(197, 21%, 36%);
5826
+ color: var(--color-text--secondary);
5827
+ font-size: 14px;
5828
+ font-size: var(--typography--fontSize-base);
5829
+ font-weight: 400;
5830
+ }
5831
+
5486
5832
  .kub1yKbFFN0- {
5487
5833
  display: -ms-flexbox;
5488
5834
  display: flex;
@@ -10054,6 +10400,345 @@ h2.react-datepicker__current-month {
10054
10400
  flex: 1 1 40%;
10055
10401
  }
10056
10402
 
10403
+ /* Dialog Sizes */
10404
+ .uYYyCR3l6E8- {
10405
+ --dialog-popup-max-width: 440px;
10406
+ }
10407
+ .X1jGz-sLWf4- {
10408
+ --dialog-popup-max-width: 720px;
10409
+ }
10410
+ ._4zFf2PkFhaA- {
10411
+ --dialog-popup-max-width: 1032px;
10412
+ }
10413
+ .nJoCr8oWJ7w- {
10414
+ --dialog-popup-width: 100vw;
10415
+ --dialog-popup-max-width: 100vw;
10416
+ --dialog-popup-min-height: 100dvh;
10417
+ /* No margins full screen — the viewport also drops its padding-block for
10418
+ fullScreen (below) so the popup sits flush against every edge. Zeroing the
10419
+ gap here also makes the sticky-scroll cap resolve to a flush 100dvh. */
10420
+ --dialog-popup-margin-block: 0;
10421
+ --dialog-popup-radius: 0;
10422
+ --dialog-viewport-gap: 0px;
10423
+ }
10424
+ /* Header — commonly a title on the left and a dismiss button on the right.
10425
+ Pinned via flex when it's a sibling of the scroll region (the default); it
10426
+ scrolls when placed inside a `Dialog.ScrollArea`. `flex: 0 0 auto` keeps a
10427
+ sticky header from shrinking. */
10428
+ .XFKiCQ8QbQU- {
10429
+ display: -ms-flexbox;
10430
+ display: flex;
10431
+ -ms-flex: 0 0 auto;
10432
+ flex: 0 0 auto;
10433
+ -ms-flex-align: center;
10434
+ align-items: center;
10435
+ -ms-flex-pack: justify;
10436
+ justify-content: space-between;
10437
+ gap: 8px;
10438
+ gap: var(--space-small);
10439
+ padding: 20px 24px 0;
10440
+ padding: 20px var(--space-large) 0;
10441
+ }
10442
+ .FDOhnO0TT08- {
10443
+ -ms-flex-item-align: start;
10444
+ align-self: flex-start;
10445
+ }
10446
+ /* ScrollArea.Root — the scroll region. A `Dialog.Body` wraps itself in one; a
10447
+ `Dialog.ScrollArea` is one placed explicitly. It fills the space between the
10448
+ sticky regions and scrolls its content. */
10449
+ ._8DjYA23vHXA- {
10450
+ display: -ms-flexbox;
10451
+ display: flex;
10452
+ -ms-flex: 1 1 auto;
10453
+ flex: 1 1 auto;
10454
+ min-height: 0;
10455
+ -ms-flex-direction: column;
10456
+ flex-direction: column;
10457
+ }
10458
+ /* The ScrollArea.Viewport — the scrollable element. */
10459
+ .Bwr9IUYpLfM- {
10460
+ -ms-flex: 1 1 auto;
10461
+ flex: 1 1 auto;
10462
+ min-height: 0;
10463
+ }
10464
+ /* Re-enable the browser's native scrollbar — BaseUI hides it by default for its
10465
+ own custom scrollbar. */
10466
+ ._8DjYA23vHXA- .Bwr9IUYpLfM- {
10467
+ scrollbar-width: auto;
10468
+ }
10469
+ ._8DjYA23vHXA- .Bwr9IUYpLfM-::-webkit-scrollbar {
10470
+ display: revert;
10471
+ }
10472
+ .zp9kx9uue2I- {
10473
+ box-sizing: border-box;
10474
+ padding: 24px;
10475
+ padding: var(--space-large);
10476
+ }
10477
+ .EhtwBTy1ai4- {
10478
+ padding: 0;
10479
+ }
10480
+ /* Footer — generic bottom region; owns padding only. Pinned via flex when it's
10481
+ a sibling of the scroll region (the default); it scrolls when placed inside a
10482
+ `Dialog.ScrollArea`. */
10483
+ .DRIJhI1knKw- {
10484
+ -ms-flex: 0 0 auto;
10485
+ flex: 0 0 auto;
10486
+ padding: 0 24px 24px;
10487
+ padding: 0 var(--space-large) var(--space-large);
10488
+ }
10489
+ /* Slide the bottom sheet up from the bottom on open/close. */
10490
+ .vmcZRwOcNMo- {
10491
+ -webkit-transform: translateY(0px);
10492
+ -webkit-transform: translateY(var(--drawer-swipe-movement-y, 0px));
10493
+ transform: translateY(0px);
10494
+ transform: translateY(var(--drawer-swipe-movement-y, 0px));
10495
+ transition: -webkit-transform 200ms ease;
10496
+ transition: -webkit-transform var(--timing-base) ease;
10497
+ transition: transform 200ms ease;
10498
+ transition: transform var(--timing-base) ease;
10499
+ transition: transform 200ms ease, -webkit-transform 200ms ease;
10500
+ transition: transform var(--timing-base) ease, -webkit-transform var(--timing-base) ease;
10501
+ }
10502
+ .vmcZRwOcNMo-[data-starting-style],
10503
+ .vmcZRwOcNMo-[data-ending-style] {
10504
+ -webkit-transform: translateY(100%);
10505
+ transform: translateY(100%);
10506
+ }
10507
+ /* Full-screen bottom sheet */
10508
+ .vmcZRwOcNMo-[data-size="fullScreen"] {
10509
+ height: 100dvh;
10510
+ max-height: 100dvh;
10511
+ border-radius: 0;
10512
+ }
10513
+ /* Scroll divider — shown on a sticky Header/Footer only while the scroll region
10514
+ actually overflows (BaseUI sets `data-has-overflow-y` on the ScrollArea root
10515
+ when its content overflows). */
10516
+ .mFX7qDCd17I-:has([data-has-overflow-y]) .XFKiCQ8QbQU-[data-sticky],
10517
+ .vmcZRwOcNMo-:has([data-has-overflow-y]) .XFKiCQ8QbQU-[data-sticky] {
10518
+ padding-bottom: 16px;
10519
+ padding-bottom: var(--space-base);
10520
+ border-bottom: 1px solid hsl(200, 13%, 87%);
10521
+ border-bottom: var(--border-base) solid var(--color-border);
10522
+ }
10523
+ .mFX7qDCd17I-:has([data-has-overflow-y]) .DRIJhI1knKw-[data-sticky],
10524
+ .vmcZRwOcNMo-:has([data-has-overflow-y]) .DRIJhI1knKw-[data-sticky] {
10525
+ padding-top: 16px;
10526
+ padding-top: var(--space-base);
10527
+ border-top: 1px solid hsl(200, 13%, 87%);
10528
+ border-top: var(--border-base) solid var(--color-border);
10529
+ }
10530
+ /* Base backdrop styling */
10531
+ .NE-BIsVE-hE- {
10532
+ position: fixed;
10533
+ top: 0;
10534
+ right: 0;
10535
+ bottom: 0;
10536
+ left: 0;
10537
+
10538
+ /*
10539
+ * Use a high (modal) z-index so the dialog and its dimmed backdrop render on
10540
+ * top of the app's nav bars, headers, and other fixed UI instead of behind
10541
+ * them. Every dialog renders its own backdrop at this same elevation (see the
10542
+ * `forceRender` in DialogModal.tsx), so the frontmost dialog — portaled last —
10543
+ * wins by DOM order: it both catches the dismissing outside press and lays its
10544
+ * dim over the dialog beneath it.
10545
+ */
10546
+ z-index: 1001;
10547
+ z-index: var(--elevation-modal);
10548
+ background-color: rgba(121, 119, 114, 0.48);
10549
+ backdrop-filter: blur(2px);
10550
+ transition: opacity 200ms ease;
10551
+ transition: opacity var(--timing-base) ease;
10552
+ }
10553
+ .NE-BIsVE-hE-[data-starting-style],
10554
+ .NE-BIsVE-hE-[data-ending-style] {
10555
+ opacity: 0;
10556
+ }
10557
+ /*
10558
+ * A nested dialog's backdrop (Base UI marks its viewport `data-nested`) must
10559
+ * not transition: the outer dialog supplies the dim as it opens and closes, so the
10560
+ * nested backdrop appears at full dim instantly and snaps away on close. A
10561
+ * transition would flash the undimmed page on open and add extra dim on close.
10562
+ */
10563
+ .NE-BIsVE-hE-:has(~ .hp70o-3Cf-w-[data-nested]) {
10564
+ transition: none;
10565
+ }
10566
+ .NE-BIsVE-hE-[data-starting-style]:has(~ .hp70o-3Cf-w-[data-nested]) {
10567
+ opacity: 1;
10568
+ }
10569
+ /*
10570
+ * Only the frontmost dialog shows the dim overlay. When a dialog has another
10571
+ * dialog open within it, Base UI marks its popup with `data-nested-dialog-open`;
10572
+ * we make that dialog's backdrop fully transparent (no dim, no blur) so the dim
10573
+ * is supplied solely by the frontmost dialog's backdrop. This keeps the dimming
10574
+ * from compounding as dialogs stack. The popup lives inside the viewport,
10575
+ * which is the backdrop's sibling.
10576
+ */
10577
+ .NE-BIsVE-hE-:has(~ .hp70o-3Cf-w- .mFX7qDCd17I-[data-nested-dialog-open]) {
10578
+ background-color: transparent;
10579
+ backdrop-filter: none;
10580
+ }
10581
+ /* Bottom sheet backdrop */
10582
+ [data-testid="ATL-BottomSheet-Backdrop"]:has(~ [data-dialog-variant="sheet"]) {
10583
+ background-color: rgba(121, 119, 114, 0.48);
10584
+ backdrop-filter: blur(2px);
10585
+ }
10586
+ .hp70o-3Cf-w- {
10587
+ /* Gap between the popup and the viewport edge. Used here as the viewport
10588
+ `padding-block`, and by the popup's `max-height` to cap it so the dialog
10589
+ fits within the same gap (the var inherits down to the popup). */
10590
+ --dialog-viewport-gap: var(--space-larger);
10591
+
10592
+ display: -ms-flexbox;
10593
+
10594
+ display: flex;
10595
+ position: fixed;
10596
+ z-index: 1001;
10597
+ z-index: var(--elevation-modal);
10598
+ top: 0;
10599
+ right: 0;
10600
+ bottom: 0;
10601
+ left: 0;
10602
+ -ms-flex-direction: column;
10603
+ flex-direction: column;
10604
+ /* Vertical centering is done by the popup's `margin-block: auto`, not by
10605
+ `place-items: center`. A centered grid/flex item taller than the viewport
10606
+ drops its block-end gap when scrolled to the bottom (and plain `center`
10607
+ would also push the top under the popup's `overflow: hidden` and clip it).
10608
+ With `align-items: center` on the inline axis + the popup's auto block
10609
+ margins, the popup centers when it fits and top-aligns when it overflows,
10610
+ and this `padding-block` gap is preserved at *both* scroll ends. */
10611
+ -ms-flex-align: center;
10612
+ align-items: center;
10613
+ padding-top: 32px;
10614
+ padding-bottom: 32px;
10615
+ padding-top: var(--dialog-viewport-gap);
10616
+ padding-bottom: var(--dialog-viewport-gap);
10617
+ overflow-y: auto;
10618
+ }
10619
+ /* Full screen sits flush against every edge — drop the viewport's gap. */
10620
+ .hp70o-3Cf-w-:has(.nJoCr8oWJ7w-) {
10621
+ padding-top: 0;
10622
+ padding-bottom: 0;
10623
+ }
10624
+ .mFX7qDCd17I- {
10625
+ display: -ms-flexbox;
10626
+ display: flex;
10627
+ position: relative;
10628
+ width: calc(100vw - 2 * 16px);
10629
+ width: var(--dialog-popup-width, calc(100vw - 2 * var(--space-base)));
10630
+ max-width: 720px;
10631
+ max-width: var(--dialog-popup-max-width, 720px);
10632
+ /* Uncapped by default: with no sticky region the popup grows with its content
10633
+ and the window (viewport) scrolls the whole dialog. A sticky Header/Footer
10634
+ caps it (`.popup:has([data-sticky])` below) so the body scrolls inside. */
10635
+ max-height: none;
10636
+ max-height: var(--dialog-popup-max-height, none);
10637
+ min-height: auto;
10638
+ min-height: var(--dialog-popup-min-height, auto);
10639
+ box-shadow: 0px 16px 16px 0px rgba(0, 0, 0, 0.075), 0px 0px 8px 0px rgba(0, 0, 0, 0.05);
10640
+ box-shadow: var(--shadow-high);
10641
+ box-sizing: border-box;
10642
+ border-radius: 8px;
10643
+ border-radius: var(--dialog-popup-radius, var(--radius-base));
10644
+ outline: none;
10645
+ /* Clip content to the rounded corners so full-bleed panes (e.g. a split
10646
+ view's coloured media pane) don't square them off. The popup's own
10647
+ box-shadow (drop shadow + focus ring) is unaffected by its own overflow. */
10648
+ overflow: hidden;
10649
+ background-color: rgba(255, 255, 255, 1);
10650
+ background-color: var(--color-surface);
10651
+ transition: opacity 200ms ease, -webkit-transform 200ms ease;
10652
+ transition: opacity var(--timing-base) ease, -webkit-transform var(--timing-base) ease;
10653
+ transition: opacity 200ms ease, transform 200ms ease;
10654
+ transition: opacity var(--timing-base) ease, transform var(--timing-base) ease;
10655
+ transition: opacity 200ms ease, transform 200ms ease, -webkit-transform 200ms ease;
10656
+ transition: opacity var(--timing-base) ease, transform var(--timing-base) ease, -webkit-transform var(--timing-base) ease;
10657
+ /* `auto` centers the popup vertically in the flex-column viewport when it
10658
+ fits, and collapses to 0 when it overflows (so it top-aligns and scrolls).
10659
+ fullScreen overrides this var to offset the viewport padding. */
10660
+ margin-top: auto;
10661
+ margin-bottom: auto;
10662
+ margin-top: var(--dialog-popup-margin-block, auto);
10663
+ margin-bottom: var(--dialog-popup-margin-block, auto);
10664
+ -ms-flex-direction: column;
10665
+ flex-direction: column;
10666
+ /* Don't shrink — holding content height lets an uncapped (no sticky region)
10667
+ dialog grow so the window scrolls the whole dialog, while a dialog with a
10668
+ sticky Header/Footer is capped by `max-height` and scrolls its body. */
10669
+ -ms-flex-negative: 0;
10670
+ flex-shrink: 0;
10671
+ }
10672
+ .mFX7qDCd17I-:focus-visible {
10673
+ box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 1), 0px 0px 0px 4px hsl(198, 12%, 57%);
10674
+ box-shadow: var(--shadow-focus);
10675
+ }
10676
+ .mFX7qDCd17I-[data-starting-style],
10677
+ .mFX7qDCd17I-[data-ending-style] {
10678
+ opacity: 0;
10679
+ -webkit-transform: scale(0.97);
10680
+ transform: scale(0.97);
10681
+ }
10682
+ /* Inside-scroll — when a Header/Footer is sticky (`[data-sticky]`), cap the
10683
+ popup to the viewport (minus the edge gap) so the body scrolls inside between
10684
+ the sticky regions. With nothing sticky the popup stays uncapped and grows,
10685
+ and the window scrolls the whole dialog. */
10686
+ .mFX7qDCd17I-:has([data-sticky]) {
10687
+ --dialog-popup-max-height: calc(100dvh - 2 * var(--dialog-viewport-gap));
10688
+ }
10689
+ /* Honor reduced-motion: drop the backdrop fade, the modal popup scale/fade, and
10690
+ the sheet slide so the dialog appears and dismisses instantly. */
10691
+ @media (prefers-reduced-motion: reduce) {
10692
+ .NE-BIsVE-hE-,
10693
+ .mFX7qDCd17I-,
10694
+ .vmcZRwOcNMo- {
10695
+ transition: none;
10696
+ }
10697
+ }
10698
+
10699
+ /* Action-button layout used inside a Dialog.Footer — tertiary on the left,
10700
+ primary/secondary grouped on the right. */
10701
+ .hKVNddbxkmo- {
10702
+ display: -ms-flexbox;
10703
+ display: flex;
10704
+ -ms-flex-align: center;
10705
+ align-items: center;
10706
+ gap: 8px;
10707
+ gap: var(--space-small);
10708
+ width: 100%;
10709
+ }
10710
+ .nslrozOH-v4- {
10711
+ -ms-flex: 0 0 auto;
10712
+ flex: 0 0 auto;
10713
+ }
10714
+ .BrXAnQBttWE- {
10715
+ display: -ms-flexbox;
10716
+ display: flex;
10717
+ -ms-flex: 1 1 0px;
10718
+ flex: 1 1 0;
10719
+ -ms-flex-align: center;
10720
+ align-items: center;
10721
+ gap: 8px;
10722
+ gap: var(--space-small);
10723
+ -ms-flex-pack: end;
10724
+ justify-content: flex-end;
10725
+ }
10726
+ ._9Vgd-3YJxlI- {
10727
+ -ms-flex-pack: start;
10728
+ justify-content: flex-start;
10729
+ }
10730
+ ._8HC9NqvmJdo- {
10731
+ -ms-flex-pack: end;
10732
+ justify-content: flex-end;
10733
+ }
10734
+ .ZZ3XuxGv6ow- > *,
10735
+ .ZZ3XuxGv6ow- > .BrXAnQBttWE- > *,
10736
+ .ZZ3XuxGv6ow- > .nslrozOH-v4- > *
10737
+ {
10738
+ -ms-flex: 1 1 0px;
10739
+ flex: 1 1 0;
10740
+ }
10741
+
10057
10742
  .VMuRkKeqAs8- {
10058
10743
  -webkit-transform-origin: 50% 47.5% 0;
10059
10744
  transform-origin: 50% 47.5% 0;