@jobber/components 8.20.0 → 8.20.1-select-nat-3a2699a.20

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 (250) hide show
  1. package/Dialog.d.ts +1 -0
  2. package/{Select.js → Dialog.js} +3 -3
  3. package/LegacySelect.d.ts +1 -0
  4. package/{DescriptionList.js → LegacySelect.js} +3 -3
  5. package/ProgressIndicator.d.ts +1 -0
  6. package/ProgressIndicator.js +17 -0
  7. package/dist/AtlantisThemeContext/AtlantisThemeContext.d.ts +1 -1
  8. package/dist/AtlantisThemeContext/index.cjs +1 -2
  9. package/dist/AtlantisThemeContext/index.mjs +1 -2
  10. package/dist/AtlantisThemeContext/themeStore.d.ts +11 -0
  11. package/dist/AtlantisThemeContext/types.d.ts +14 -0
  12. package/dist/AtlantisThemeContext/updateTheme.d.ts +1 -1
  13. package/dist/AtlantisThemeContext-cjs.js +58 -17
  14. package/dist/AtlantisThemeContext-es.js +60 -20
  15. package/dist/Autocomplete/index.cjs +1 -1
  16. package/dist/Autocomplete/index.mjs +1 -1
  17. package/dist/Avatar-cjs.js +3 -2
  18. package/dist/Avatar-es.js +3 -2
  19. package/dist/BottomSheet-cjs.js +43 -65
  20. package/dist/BottomSheet-es.js +35 -54
  21. package/dist/Card/index.cjs +8 -1
  22. package/dist/Card/index.mjs +8 -1
  23. package/dist/Chip/index.cjs +1 -1
  24. package/dist/Chip/index.mjs +1 -1
  25. package/dist/Chips/InternalChipDismissible/hooks/index.cjs +1 -1
  26. package/dist/Chips/InternalChipDismissible/hooks/index.mjs +1 -1
  27. package/dist/Chips/InternalChipDismissible/index.cjs +1 -1
  28. package/dist/Chips/InternalChipDismissible/index.mjs +1 -1
  29. package/dist/Chips/index.cjs +1 -1
  30. package/dist/Chips/index.mjs +1 -1
  31. package/dist/ComboboxChipRemove-cjs.js +3550 -0
  32. package/dist/ComboboxChipRemove-es.js +3499 -0
  33. package/dist/ComboboxPrimitive-cjs.js +170 -0
  34. package/dist/ComboboxPrimitive-es.js +168 -0
  35. package/dist/ConfirmationModal/index.cjs +1 -1
  36. package/dist/ConfirmationModal/index.mjs +1 -1
  37. package/dist/DataDump/index.cjs +8 -1
  38. package/dist/DataDump/index.mjs +8 -1
  39. package/dist/DataList/components/DataListActions/index.cjs +1 -1
  40. package/dist/DataList/components/DataListActions/index.mjs +1 -1
  41. package/dist/DataList/components/DataListBulkActions/index.cjs +1 -1
  42. package/dist/DataList/components/DataListBulkActions/index.mjs +1 -1
  43. package/dist/DataList/components/DataListFilters/components/DataListSort/index.cjs +1 -1
  44. package/dist/DataList/components/DataListFilters/components/DataListSort/index.mjs +1 -1
  45. package/dist/DataList/components/DataListFilters/index.cjs +1 -1
  46. package/dist/DataList/components/DataListFilters/index.mjs +1 -1
  47. package/dist/DataList/components/DataListHeader/index.cjs +1 -1
  48. package/dist/DataList/components/DataListHeader/index.mjs +1 -1
  49. package/dist/DataList/components/DataListItem/index.cjs +1 -1
  50. package/dist/DataList/components/DataListItem/index.mjs +1 -1
  51. package/dist/DataList/components/DataListItemActions/index.cjs +1 -1
  52. package/dist/DataList/components/DataListItemActions/index.mjs +1 -1
  53. package/dist/DataList/components/DataListItemActionsOverflow/index.cjs +1 -1
  54. package/dist/DataList/components/DataListItemActionsOverflow/index.mjs +1 -1
  55. package/dist/DataList/components/DataListItems/index.cjs +1 -1
  56. package/dist/DataList/components/DataListItems/index.mjs +1 -1
  57. package/dist/DataList/components/DataListLayout/index.cjs +1 -1
  58. package/dist/DataList/components/DataListLayout/index.mjs +1 -1
  59. package/dist/DataList/components/DataListLayoutActions/index.cjs +1 -1
  60. package/dist/DataList/components/DataListLayoutActions/index.mjs +1 -1
  61. package/dist/DataList/index.cjs +1 -1
  62. package/dist/DataList/index.mjs +1 -1
  63. package/dist/DataTable/index.cjs +1 -1
  64. package/dist/DataTable/index.mjs +1 -1
  65. package/dist/DataTable-cjs.js +3 -3
  66. package/dist/DataTable-es.js +2 -2
  67. package/dist/DatePicker/index.cjs +1 -1
  68. package/dist/DatePicker/index.mjs +1 -1
  69. package/dist/DatePicker-es.js +1 -1
  70. package/dist/Dialog/Dialog.d.ts +47 -0
  71. package/dist/Dialog/Dialog.types.d.ts +191 -0
  72. package/dist/Dialog/DialogBottomSheet.d.ts +27 -0
  73. package/dist/Dialog/DialogModal.d.ts +20 -0
  74. package/dist/Dialog/constants.d.ts +1 -0
  75. package/dist/Dialog/dialogComposableShared.d.ts +63 -0
  76. package/dist/Dialog/dialogReturnFocus.d.ts +43 -0
  77. package/dist/Dialog/index.cjs +33 -0
  78. package/dist/Dialog/index.d.ts +4 -0
  79. package/dist/Dialog/index.mjs +25 -0
  80. package/dist/DrawerDescription-cjs.js +409 -0
  81. package/dist/DrawerDescription-es.js +382 -0
  82. package/dist/DrawerTitle-cjs.js +118 -0
  83. package/dist/DrawerTitle-es.js +94 -0
  84. package/dist/FilterPicker/components/FilterPickerActivator/index.cjs +1 -1
  85. package/dist/FilterPicker/components/FilterPickerActivator/index.mjs +1 -1
  86. package/dist/FilterPicker/components/FilterPickerContent/index.cjs +1 -1
  87. package/dist/FilterPicker/components/FilterPickerContent/index.mjs +1 -1
  88. package/dist/FilterPicker/components/FilterPickerTrigger/index.cjs +1 -1
  89. package/dist/FilterPicker/components/FilterPickerTrigger/index.mjs +1 -1
  90. package/dist/FilterPicker/index.cjs +1 -1
  91. package/dist/FilterPicker/index.mjs +1 -1
  92. package/dist/FormFieldWrapper-cjs.js +2 -2
  93. package/dist/FormFieldWrapper-es.js +2 -2
  94. package/dist/FormatFile/index.cjs +1 -1
  95. package/dist/FormatFile/index.mjs +1 -1
  96. package/dist/Gallery/index.cjs +1 -1
  97. package/dist/Gallery/index.mjs +1 -1
  98. package/dist/InputDate/index.cjs +1 -1
  99. package/dist/InputDate/index.mjs +1 -1
  100. package/dist/InputNumberExperimental-cjs.js +384 -169
  101. package/dist/InputNumberExperimental-es.js +345 -130
  102. package/dist/LegacySelect/LegacySelect.d.ts +7 -0
  103. package/dist/{Select/Select.types.d.ts → LegacySelect/LegacySelect.types.d.ts} +1 -1
  104. package/dist/{Select → LegacySelect}/index.cjs +3 -3
  105. package/dist/LegacySelect/index.d.ts +3 -0
  106. package/dist/{Select → LegacySelect}/index.mjs +1 -1
  107. package/dist/{Select-cjs.js → LegacySelect-cjs.js} +5 -5
  108. package/dist/{Select-es.js → LegacySelect-es.js} +5 -5
  109. package/dist/LightBox/index.cjs +1 -1
  110. package/dist/LightBox/index.mjs +1 -1
  111. package/dist/Menu/index.cjs +8 -1
  112. package/dist/Menu/index.mjs +8 -1
  113. package/dist/Menu/menuComposableTypes.d.ts +5 -2
  114. package/dist/Menu-cjs.js +17 -13
  115. package/dist/Menu-es.js +9 -5
  116. package/dist/MenuSubmenuTrigger-cjs.js +723 -2487
  117. package/dist/MenuSubmenuTrigger-es.js +573 -2326
  118. package/dist/Modal/index.cjs +1 -1
  119. package/dist/Modal/index.mjs +1 -1
  120. package/dist/NumberFieldInput-cjs.js +647 -917
  121. package/dist/NumberFieldInput-es.js +614 -870
  122. package/dist/Page/index.cjs +8 -1
  123. package/dist/Page/index.mjs +8 -1
  124. package/dist/Popover/index.cjs +1 -1
  125. package/dist/Popover/index.mjs +1 -1
  126. package/dist/ProgressBar/ProgressBar.d.ts +7 -0
  127. package/dist/ProgressBar-cjs.js +4 -0
  128. package/dist/ProgressBar-es.js +4 -0
  129. package/dist/ProgressIndicator/ProgressIndicator.d.ts +60 -0
  130. package/dist/ProgressIndicator/index.cjs +9 -0
  131. package/dist/ProgressIndicator/index.d.ts +1 -0
  132. package/dist/ProgressIndicator/index.mjs +3 -0
  133. package/dist/ProgressIndicator-cjs.js +43 -0
  134. package/dist/ProgressIndicator-es.js +41 -0
  135. package/dist/ScrollAreaViewport-cjs.js +672 -5234
  136. package/dist/ScrollAreaViewport-es.js +1082 -5588
  137. package/dist/SelectGroupLabel-cjs.js +1890 -0
  138. package/dist/SelectGroupLabel-es.js +1854 -0
  139. package/dist/SelectPrimitive-cjs.js +112 -0
  140. package/dist/SelectPrimitive-es.js +110 -0
  141. package/dist/Separator-cjs.js +1 -0
  142. package/dist/Separator-es.js +1 -0
  143. package/dist/Tooltip/index.cjs +1 -1
  144. package/dist/Tooltip/index.mjs +1 -1
  145. package/dist/buttonRenderAdapter-cjs.js +56 -0
  146. package/dist/buttonRenderAdapter-es.js +51 -0
  147. package/dist/clamp-cjs.js +0 -1194
  148. package/dist/clamp-es.js +1 -1091
  149. package/dist/dialogReturnFocus-cjs.js +453 -0
  150. package/dist/dialogReturnFocus-es.js +449 -0
  151. package/dist/docs/AtlantisThemeContext/AtlantisThemeContext.md +41 -0
  152. package/dist/docs/Autocomplete/Autocomplete.md +1 -1
  153. package/dist/docs/Banner/Banner.md +1 -1
  154. package/dist/docs/Box/Box.md +2 -2
  155. package/dist/docs/Button/Button.md +1 -1
  156. package/dist/docs/Chip/Chip.md +2 -2
  157. package/dist/docs/Colors/Colors.md +13 -0
  158. package/dist/docs/DataTable/DataTable.md +0 -4
  159. package/dist/docs/Dialog/Dialog.md +953 -0
  160. package/dist/docs/Icon/Icon.md +1 -0
  161. package/dist/docs/InputNumberExperimental/InputNumberExperimental.md +578 -0
  162. package/dist/docs/InputTime/InputTime.md +8 -0
  163. package/dist/docs/{Select/Select.md → LegacySelect/LegacySelect.md} +67 -62
  164. package/dist/docs/Menu/Menu.md +6 -2
  165. package/dist/docs/MultiSelect/MultiSelect.md +1 -1
  166. package/dist/docs/ProgressBar/ProgressBar.md +9 -0
  167. package/dist/docs/ProgressIndicator/ProgressIndicator.md +105 -0
  168. package/dist/docs/SelectPrimitive/SelectPrimitive.md +339 -0
  169. package/dist/docs/Table/Table.md +1 -3
  170. package/dist/docs/Tabs/Tabs.md +2 -1
  171. package/dist/docs/empty-states/empty-states.md +29 -0
  172. package/dist/docs/index.md +5 -2
  173. package/dist/floating-ui.react-cjs.js +586 -10
  174. package/dist/floating-ui.react-dom-cjs.js +93 -92
  175. package/dist/floating-ui.react-dom-es.js +3 -3
  176. package/dist/floating-ui.react-es.js +580 -4
  177. package/dist/floating-ui.utils-cjs.js +159 -0
  178. package/dist/floating-ui.utils-es.js +136 -0
  179. package/dist/floating-ui.utils.dom-es.js +1 -1
  180. package/dist/index.cjs +23 -12
  181. package/dist/index.d.mts +3 -2
  182. package/dist/index.d.ts +3 -2
  183. package/dist/index.mjs +17 -9
  184. package/dist/isElementDisabled-cjs.js +40 -0
  185. package/dist/isElementDisabled-es.js +18 -0
  186. package/dist/isTypedArray-es.js +1 -1
  187. package/dist/primitives/BottomSheet/BottomSheet.d.ts +19 -1
  188. package/dist/primitives/BottomSheet/BottomSheet.types.d.ts +8 -0
  189. package/dist/primitives/BottomSheet/index.cjs +7 -2
  190. package/dist/primitives/BottomSheet/index.d.ts +1 -1
  191. package/dist/primitives/BottomSheet/index.mjs +7 -3
  192. package/dist/primitives/ComboboxPrimitive/ComboboxPrimitive.d.ts +32 -0
  193. package/dist/primitives/ComboboxPrimitive/ComboboxPrimitive.types.d.ts +30 -0
  194. package/dist/primitives/ComboboxPrimitive/index.cjs +30 -0
  195. package/dist/primitives/ComboboxPrimitive/index.d.ts +2 -0
  196. package/dist/primitives/ComboboxPrimitive/index.mjs +24 -0
  197. package/dist/primitives/InputNumberExperimental/InputNumberExperimental.d.ts +31 -15
  198. package/dist/primitives/InputNumberExperimental/index.cjs +5 -2
  199. package/dist/primitives/InputNumberExperimental/index.mjs +5 -2
  200. package/dist/primitives/InputNumberExperimental/types.d.ts +0 -1
  201. package/dist/primitives/SelectPrimitive/SelectPrimitive.d.ts +63 -0
  202. package/dist/primitives/SelectPrimitive/index.cjs +29 -0
  203. package/dist/primitives/SelectPrimitive/index.d.ts +2 -0
  204. package/dist/primitives/SelectPrimitive/index.mjs +23 -0
  205. package/dist/primitives/SelectPrimitive/types.d.ts +16 -0
  206. package/dist/primitives/index.cjs +19 -2
  207. package/dist/primitives/index.d.ts +2 -0
  208. package/dist/primitives/index.mjs +17 -3
  209. package/dist/primitives/mergeClassName.d.ts +12 -0
  210. package/dist/resolveAriaLabelledBy-cjs.js +200 -0
  211. package/dist/resolveAriaLabelledBy-es.js +166 -0
  212. package/dist/scrollEdges-cjs.js +97 -0
  213. package/dist/scrollEdges-es.js +71 -0
  214. package/dist/styles.css +1976 -458
  215. package/dist/unstyledPrimitives/index.cjs +1662 -4260
  216. package/dist/unstyledPrimitives/index.d.ts +2 -0
  217. package/dist/unstyledPrimitives/index.mjs +1509 -4109
  218. package/dist/useButton-cjs.js +1164 -0
  219. package/dist/useButton-es.js +1071 -0
  220. package/dist/useCompositeListItem-cjs.js +1841 -0
  221. package/dist/useCompositeListItem-es.js +1809 -0
  222. package/dist/useLabel-cjs.js +95 -0
  223. package/dist/useLabel-es.js +92 -0
  224. package/dist/useLabelableId-cjs.js +278 -0
  225. package/dist/useLabelableId-es.js +247 -0
  226. package/dist/useRenderElement-cjs.js +83 -25
  227. package/dist/useRenderElement-es.js +83 -26
  228. package/dist/useScrollLock-cjs.js +4344 -0
  229. package/dist/useScrollLock-es.js +4247 -0
  230. package/dist/useScrollToActive-es.js +1 -1
  231. package/dist/utils/meta/meta.json +15 -5
  232. package/package.json +12 -13
  233. package/DescriptionList.d.ts +0 -1
  234. package/Select.d.ts +0 -1
  235. package/dist/DescriptionList/DescriptionList.d.ts +0 -11
  236. package/dist/DescriptionList/index.cjs +0 -10
  237. package/dist/DescriptionList/index.d.ts +0 -1
  238. package/dist/DescriptionList/index.mjs +0 -4
  239. package/dist/DescriptionList-cjs.js +0 -14
  240. package/dist/DescriptionList-es.js +0 -12
  241. package/dist/Select/Select.d.ts +0 -7
  242. package/dist/Select/index.d.ts +0 -3
  243. package/dist/docs/DescriptionList/DescriptionList.md +0 -25
  244. package/dist/index.esm-cjs.js +0 -738
  245. package/dist/index.esm-es.js +0 -712
  246. package/dist/updateTheme-cjs.js +0 -20
  247. package/dist/updateTheme-es.js +0 -18
  248. /package/dist/{Select → LegacySelect}/Option.d.ts +0 -0
  249. /package/dist/{Select → LegacySelect}/OptionGroup.d.ts +0 -0
  250. /package/dist/{Select → LegacySelect}/hooks/useSelectActions.d.ts +0 -0
package/Dialog.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./dist/Dialog";
@@ -4,14 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true,
5
5
  });
6
6
 
7
- var Select = require("./dist/Select");
7
+ var Dialog = require("./dist/Dialog");
8
8
 
9
- Object.keys(Select).forEach(function(key) {
9
+ Object.keys(Dialog).forEach(function(key) {
10
10
  if (key === "default" || key === "__esModule") return;
11
11
  Object.defineProperty(exports, key, {
12
12
  enumerable: true,
13
13
  get: function get() {
14
- return Select[key];
14
+ return Dialog[key];
15
15
  },
16
16
  });
17
17
  });
@@ -0,0 +1 @@
1
+ export * from "./dist/LegacySelect";
@@ -4,14 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true,
5
5
  });
6
6
 
7
- var DescriptionList = require("./dist/DescriptionList");
7
+ var LegacySelect = require("./dist/LegacySelect");
8
8
 
9
- Object.keys(DescriptionList).forEach(function(key) {
9
+ Object.keys(LegacySelect).forEach(function(key) {
10
10
  if (key === "default" || key === "__esModule") return;
11
11
  Object.defineProperty(exports, key, {
12
12
  enumerable: true,
13
13
  get: function get() {
14
- return DescriptionList[key];
14
+ return LegacySelect[key];
15
15
  },
16
16
  });
17
17
  });
@@ -0,0 +1 @@
1
+ export * from "./dist/ProgressIndicator";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+
7
+ var ProgressIndicator = require("./dist/ProgressIndicator");
8
+
9
+ Object.keys(ProgressIndicator).forEach(function(key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ Object.defineProperty(exports, key, {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return ProgressIndicator[key];
15
+ },
16
+ });
17
+ });
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import type { AtlantisThemeContextProviderProps, AtlantisThemeContextValue } from "./types";
3
3
  export declare const atlantisThemeContextDefaultValues: AtlantisThemeContextValue;
4
- export declare function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, }: AtlantisThemeContextProviderProps): React.JSX.Element;
4
+ export declare function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, storageKey, }: AtlantisThemeContextProviderProps): React.JSX.Element;
5
5
  export declare function useAtlantisTheme(): AtlantisThemeContextValue;
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var AtlantisThemeContext = require('../AtlantisThemeContext-cjs.js');
4
- var updateTheme = require('../updateTheme-cjs.js');
5
4
  require('@jobber/design');
6
5
  require('react');
7
6
  require('../_commonjsHelpers-cjs.js');
@@ -19,5 +18,5 @@ require('../_setToString-cjs.js');
19
18
  exports.AtlantisThemeContextProvider = AtlantisThemeContext.AtlantisThemeContextProvider;
20
19
  exports.THEME_CHANGE_EVENT = AtlantisThemeContext.THEME_CHANGE_EVENT;
21
20
  exports.atlantisThemeContextDefaultValues = AtlantisThemeContext.atlantisThemeContextDefaultValues;
21
+ exports.updateTheme = AtlantisThemeContext.updateTheme;
22
22
  exports.useAtlantisTheme = AtlantisThemeContext.useAtlantisTheme;
23
- exports.updateTheme = updateTheme.updateTheme;
@@ -1,5 +1,4 @@
1
- export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, u as useAtlantisTheme } from '../AtlantisThemeContext-es.js';
2
- export { u as updateTheme } from '../updateTheme-es.js';
1
+ export { A as AtlantisThemeContextProvider, T as THEME_CHANGE_EVENT, a as atlantisThemeContextDefaultValues, b as updateTheme, u as useAtlantisTheme } from '../AtlantisThemeContext-es.js';
3
2
  import '@jobber/design';
4
3
  import 'react';
5
4
  import '../_commonjsHelpers-es.js';
@@ -0,0 +1,11 @@
1
+ import type { Theme } from "./types";
2
+ /**
3
+ * `useSyncExternalStore` source for the theme. `data-theme` on the document
4
+ * element is the source of truth: `updateTheme` writes it and dispatches
5
+ * `THEME_CHANGE_EVENT`, which this store subscribes to.
6
+ */
7
+ export declare const themeStore: {
8
+ readonly subscribe: (onStoreChange: () => void) => () => void;
9
+ readonly getSnapshot: () => Theme;
10
+ readonly getServerSnapshot: () => Theme;
11
+ };
@@ -32,6 +32,20 @@ export interface AtlantisThemeContextProviderProps extends PropsWithChildren {
32
32
  * **Important**: you should provide a constant or at least a memoized value for performance reasons.
33
33
  */
34
34
  readonly dangerouslyOverrideTokens?: OverrideTokens;
35
+ /**
36
+ * The `localStorage` key your app writes to when toggling the theme (e.g.
37
+ * `"jobber_theme"`). When set, the provider listens for `window` `storage`
38
+ * events on this key and applies theme changes signalled by other browser
39
+ * tabs. Writing to `localStorage` remains the app's responsibility; Atlantis
40
+ * only handles the listen-and-react side.
41
+ *
42
+ * Cross-tab sync is opt-in: omit this prop and no `storage` listener is added,
43
+ * preserving the previous within-tab-only behavior.
44
+ *
45
+ * Has no effect when `dangerouslyOverrideTheme` is set, since that provider
46
+ * is intentionally isolated from the shared theme store.
47
+ */
48
+ readonly storageKey?: string;
35
49
  }
36
50
  export type OverrideTokens = {
37
51
  [K in keyof typeof tokens]?: (typeof tokens)[K];
@@ -2,6 +2,6 @@ import type { Theme } from "./types";
2
2
  /**
3
3
  * Toggle the theme of the application. If subscribed, the tokens will be updated accordingly.
4
4
  * Will add data-theme="<newTheme>" to the <html> element.
5
- * Will dispatch a custom event "atlantis.toggle-theme" with the new theme for other providers to subscribe to.
5
+ * Will dispatch a custom event "atlantis.toggle-theme" that theme providers subscribe to.
6
6
  */
7
7
  export declare function updateTheme(theme: Theme): void;
@@ -340,9 +340,45 @@ var merge_1 = merge;
340
340
 
341
341
  var merge$1 = /*@__PURE__*/_commonjsHelpers.getDefaultExportFromCjs(merge_1);
342
342
 
343
+ var styles = {"staticThemeProviderWrapper":"P6HrDSaI0Ac-","overrideTokensWrapper":"j-NMCOBL3-E-","spinning":"iq03qkKnXBA-"};
344
+
343
345
  const THEME_CHANGE_EVENT = "atlantis.toggle-theme";
344
346
 
345
- var styles = {"staticThemeProviderWrapper":"P6HrDSaI0Ac-","overrideTokensWrapper":"j-NMCOBL3-E-","spinning":"iq03qkKnXBA-"};
347
+ /**
348
+ * `useSyncExternalStore` source for the theme. `data-theme` on the document
349
+ * element is the source of truth: `updateTheme` writes it and dispatches
350
+ * `THEME_CHANGE_EVENT`, which this store subscribes to.
351
+ */
352
+ const themeStore = {
353
+ subscribe(onStoreChange) {
354
+ globalThis.window.addEventListener(THEME_CHANGE_EVENT, onStoreChange);
355
+ return () => {
356
+ globalThis.window.removeEventListener(THEME_CHANGE_EVENT, onStoreChange);
357
+ };
358
+ },
359
+ getSnapshot() {
360
+ var _a, _b, _c, _d;
361
+ return ((_d = (_c = (_b = (_a = globalThis.document) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.dataset) === null || _c === void 0 ? void 0 : _c.theme) !== null && _d !== void 0 ? _d : "light");
362
+ },
363
+ getServerSnapshot() {
364
+ return "light";
365
+ },
366
+ };
367
+
368
+ /**
369
+ * Toggle the theme of the application. If subscribed, the tokens will be updated accordingly.
370
+ * Will add data-theme="<newTheme>" to the <html> element.
371
+ * Will dispatch a custom event "atlantis.toggle-theme" that theme providers subscribe to.
372
+ */
373
+ function updateTheme(theme) {
374
+ if (!globalThis.window)
375
+ return;
376
+ globalThis.document.documentElement.setAttribute("data-theme", theme);
377
+ const event = new CustomEvent(THEME_CHANGE_EVENT, {
378
+ detail: { theme },
379
+ });
380
+ globalThis.window.dispatchEvent(event);
381
+ }
346
382
 
347
383
  const atlantisThemeContextDefaultValues = {
348
384
  theme: "light",
@@ -350,31 +386,35 @@ const atlantisThemeContextDefaultValues = {
350
386
  };
351
387
  const actualDarkTokens = merge$1({}, design.tokens, design.darkTokens);
352
388
  const AtlantisThemeContext = React.createContext(atlantisThemeContextDefaultValues);
353
- function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, }) {
389
+ function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, storageKey, }) {
354
390
  if (dangerouslyOverrideTheme) {
355
391
  return (React.createElement(InternalStaticThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens, dangerouslyOverrideTheme: dangerouslyOverrideTheme }, children));
356
392
  }
357
- return (React.createElement(InternalDynamicThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens }, children));
393
+ return (React.createElement(InternalDynamicThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens, storageKey: storageKey }, children));
358
394
  }
359
- function InternalDynamicThemeProvider({ children, dangerouslyOverrideTokens, }) {
360
- var _a;
361
- const initialTheme = (_a = globalThis.document.documentElement.dataset.theme) !== null && _a !== void 0 ? _a : "light";
362
- const [internalTheme, setInternalTheme] = React.useState(initialTheme);
363
- const { finalTokens, cssVariableOverrides } = useTokens(internalTheme, dangerouslyOverrideTokens);
364
- const handleThemeChangeEvent = React.useCallback((event) => {
365
- const newTheme = event.detail.theme;
366
- setInternalTheme(newTheme);
367
- }, []);
395
+ function InternalDynamicThemeProvider({ children, dangerouslyOverrideTokens, storageKey, }) {
396
+ const theme = React.useSyncExternalStore(themeStore.subscribe, themeStore.getSnapshot, themeStore.getServerSnapshot);
397
+ const { finalTokens, cssVariableOverrides } = useTokens(theme, dangerouslyOverrideTokens);
368
398
  React.useEffect(() => {
369
- if (!globalThis.window)
399
+ if (!storageKey || !globalThis.window)
370
400
  return;
371
- globalThis.window.addEventListener(THEME_CHANGE_EVENT, handleThemeChangeEvent);
401
+ function handleStorage(event) {
402
+ if (event.key !== storageKey)
403
+ return;
404
+ const next = event.newValue;
405
+ if (next !== "light" && next !== "dark")
406
+ return;
407
+ if (next === themeStore.getSnapshot())
408
+ return;
409
+ updateTheme(next);
410
+ }
411
+ globalThis.window.addEventListener("storage", handleStorage);
372
412
  return () => {
373
- globalThis.window.removeEventListener(THEME_CHANGE_EVENT, handleThemeChangeEvent);
413
+ globalThis.window.removeEventListener("storage", handleStorage);
374
414
  };
375
- }, [handleThemeChangeEvent]);
415
+ }, [storageKey]);
376
416
  return (React.createElement(AtlantisThemeContext.Provider, { value: {
377
- theme: internalTheme,
417
+ theme: theme,
378
418
  tokens: finalTokens,
379
419
  overrideTokens: dangerouslyOverrideTokens,
380
420
  } }, cssVariableOverrides ? (React.createElement("div", { className: styles.overrideTokensWrapper, style: cssVariableOverrides }, children)) : (children)));
@@ -419,4 +459,5 @@ function useTokens(theme, overrideTokens) {
419
459
  exports.AtlantisThemeContextProvider = AtlantisThemeContextProvider;
420
460
  exports.THEME_CHANGE_EVENT = THEME_CHANGE_EVENT;
421
461
  exports.atlantisThemeContextDefaultValues = atlantisThemeContextDefaultValues;
462
+ exports.updateTheme = updateTheme;
422
463
  exports.useAtlantisTheme = useAtlantisTheme;
@@ -1,11 +1,11 @@
1
1
  import { tokens, darkTokens } from '@jobber/design';
2
- import React__default, { createContext, useState, useCallback, useEffect, useContext, useMemo } from 'react';
2
+ import React__default, { createContext, useSyncExternalStore, useEffect, useContext, useMemo } from 'react';
3
3
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-es.js';
4
4
  import { e as eq_1, c as _Stack } from './identity-es.js';
5
5
  import { _ as _baseAssignValue } from './_baseAssignValue-es.js';
6
6
  import { _ as _baseFor } from './_baseFor-es.js';
7
7
  import { _ as _copyObject, k as keysIn_1, a as _cloneBufferExports, b as _cloneTypedArray, c as _copyArray, d as _initCloneObject, i as isPlainObject_1 } from './keysIn-es.js';
8
- import { b as isArrayLike_1, i as isArguments_1, a as isArray_1, c as isBufferExports, j as isFunction_1, d as isTypedArray_1 } from './isTypedArray-es.js';
8
+ import { b as isArrayLike_1, i as isArguments_1, a as isArray_1, c as isBufferExports, k as isFunction_1, d as isTypedArray_1 } from './isTypedArray-es.js';
9
9
  import { i as isObjectLike_1, a as isObject_1 } from './isObjectLike-es.js';
10
10
  import { _ as _baseRest, a as _isIterateeCall } from './_isIterateeCall-es.js';
11
11
 
@@ -338,9 +338,45 @@ var merge_1 = merge;
338
338
 
339
339
  var merge$1 = /*@__PURE__*/getDefaultExportFromCjs(merge_1);
340
340
 
341
+ var styles = {"staticThemeProviderWrapper":"P6HrDSaI0Ac-","overrideTokensWrapper":"j-NMCOBL3-E-","spinning":"iq03qkKnXBA-"};
342
+
341
343
  const THEME_CHANGE_EVENT = "atlantis.toggle-theme";
342
344
 
343
- var styles = {"staticThemeProviderWrapper":"P6HrDSaI0Ac-","overrideTokensWrapper":"j-NMCOBL3-E-","spinning":"iq03qkKnXBA-"};
345
+ /**
346
+ * `useSyncExternalStore` source for the theme. `data-theme` on the document
347
+ * element is the source of truth: `updateTheme` writes it and dispatches
348
+ * `THEME_CHANGE_EVENT`, which this store subscribes to.
349
+ */
350
+ const themeStore = {
351
+ subscribe(onStoreChange) {
352
+ globalThis.window.addEventListener(THEME_CHANGE_EVENT, onStoreChange);
353
+ return () => {
354
+ globalThis.window.removeEventListener(THEME_CHANGE_EVENT, onStoreChange);
355
+ };
356
+ },
357
+ getSnapshot() {
358
+ var _a, _b, _c, _d;
359
+ return ((_d = (_c = (_b = (_a = globalThis.document) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.dataset) === null || _c === void 0 ? void 0 : _c.theme) !== null && _d !== void 0 ? _d : "light");
360
+ },
361
+ getServerSnapshot() {
362
+ return "light";
363
+ },
364
+ };
365
+
366
+ /**
367
+ * Toggle the theme of the application. If subscribed, the tokens will be updated accordingly.
368
+ * Will add data-theme="<newTheme>" to the <html> element.
369
+ * Will dispatch a custom event "atlantis.toggle-theme" that theme providers subscribe to.
370
+ */
371
+ function updateTheme(theme) {
372
+ if (!globalThis.window)
373
+ return;
374
+ globalThis.document.documentElement.setAttribute("data-theme", theme);
375
+ const event = new CustomEvent(THEME_CHANGE_EVENT, {
376
+ detail: { theme },
377
+ });
378
+ globalThis.window.dispatchEvent(event);
379
+ }
344
380
 
345
381
  const atlantisThemeContextDefaultValues = {
346
382
  theme: "light",
@@ -348,31 +384,35 @@ const atlantisThemeContextDefaultValues = {
348
384
  };
349
385
  const actualDarkTokens = merge$1({}, tokens, darkTokens);
350
386
  const AtlantisThemeContext = createContext(atlantisThemeContextDefaultValues);
351
- function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, }) {
387
+ function AtlantisThemeContextProvider({ children, dangerouslyOverrideTheme, dangerouslyOverrideTokens, storageKey, }) {
352
388
  if (dangerouslyOverrideTheme) {
353
389
  return (React__default.createElement(InternalStaticThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens, dangerouslyOverrideTheme: dangerouslyOverrideTheme }, children));
354
390
  }
355
- return (React__default.createElement(InternalDynamicThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens }, children));
391
+ return (React__default.createElement(InternalDynamicThemeProvider, { dangerouslyOverrideTokens: dangerouslyOverrideTokens, storageKey: storageKey }, children));
356
392
  }
357
- function InternalDynamicThemeProvider({ children, dangerouslyOverrideTokens, }) {
358
- var _a;
359
- const initialTheme = (_a = globalThis.document.documentElement.dataset.theme) !== null && _a !== void 0 ? _a : "light";
360
- const [internalTheme, setInternalTheme] = useState(initialTheme);
361
- const { finalTokens, cssVariableOverrides } = useTokens(internalTheme, dangerouslyOverrideTokens);
362
- const handleThemeChangeEvent = useCallback((event) => {
363
- const newTheme = event.detail.theme;
364
- setInternalTheme(newTheme);
365
- }, []);
393
+ function InternalDynamicThemeProvider({ children, dangerouslyOverrideTokens, storageKey, }) {
394
+ const theme = useSyncExternalStore(themeStore.subscribe, themeStore.getSnapshot, themeStore.getServerSnapshot);
395
+ const { finalTokens, cssVariableOverrides } = useTokens(theme, dangerouslyOverrideTokens);
366
396
  useEffect(() => {
367
- if (!globalThis.window)
397
+ if (!storageKey || !globalThis.window)
368
398
  return;
369
- globalThis.window.addEventListener(THEME_CHANGE_EVENT, handleThemeChangeEvent);
399
+ function handleStorage(event) {
400
+ if (event.key !== storageKey)
401
+ return;
402
+ const next = event.newValue;
403
+ if (next !== "light" && next !== "dark")
404
+ return;
405
+ if (next === themeStore.getSnapshot())
406
+ return;
407
+ updateTheme(next);
408
+ }
409
+ globalThis.window.addEventListener("storage", handleStorage);
370
410
  return () => {
371
- globalThis.window.removeEventListener(THEME_CHANGE_EVENT, handleThemeChangeEvent);
411
+ globalThis.window.removeEventListener("storage", handleStorage);
372
412
  };
373
- }, [handleThemeChangeEvent]);
413
+ }, [storageKey]);
374
414
  return (React__default.createElement(AtlantisThemeContext.Provider, { value: {
375
- theme: internalTheme,
415
+ theme: theme,
376
416
  tokens: finalTokens,
377
417
  overrideTokens: dangerouslyOverrideTokens,
378
418
  } }, cssVariableOverrides ? (React__default.createElement("div", { className: styles.overrideTokensWrapper, style: cssVariableOverrides }, children)) : (children)));
@@ -414,4 +454,4 @@ function useTokens(theme, overrideTokens) {
414
454
  };
415
455
  }
416
456
 
417
- export { AtlantisThemeContextProvider as A, THEME_CHANGE_EVENT as T, atlantisThemeContextDefaultValues as a, useAtlantisTheme as u };
457
+ export { AtlantisThemeContextProvider as A, THEME_CHANGE_EVENT as T, atlantisThemeContextDefaultValues as a, updateTheme as b, useAtlantisTheme as u };
@@ -4,7 +4,7 @@ var Autocomplete = require('../Autocomplete-cjs.js');
4
4
  require('react');
5
5
  require('../floating-ui.react-cjs.js');
6
6
  require('../floating-ui.utils.dom-cjs.js');
7
- require('../index.esm-cjs.js');
7
+ require('../floating-ui.utils-cjs.js');
8
8
  require('react/jsx-runtime');
9
9
  require('react-dom');
10
10
  require('../floating-ui.react-dom-cjs.js');
@@ -2,7 +2,7 @@ export { A as Autocomplete } from '../Autocomplete-es.js';
2
2
  import 'react';
3
3
  import '../floating-ui.react-es.js';
4
4
  import '../floating-ui.utils.dom-es.js';
5
- import '../index.esm-es.js';
5
+ import '../floating-ui.utils-es.js';
6
6
  import 'react/jsx-runtime';
7
7
  import 'react-dom';
8
8
  import '../floating-ui.react-dom-es.js';
@@ -41,6 +41,7 @@ function deconstructCssCustomProperty(color) {
41
41
  .trim();
42
42
  }
43
43
 
44
+ const MAX_VISIBLE_INITIALS = 3;
44
45
  function Avatar({ imageUrl, name, initials, size = "base", color, UNSAFE_className = {}, UNSAFE_style = {}, }) {
45
46
  const style = Object.assign({ backgroundColor: color, borderColor: color }, UNSAFE_style.container);
46
47
  if (imageUrl) {
@@ -72,9 +73,9 @@ function Initials({ initials, iconColor = "textReverse", iconSize = "base", UNSA
72
73
  return (React.createElement(Icon.Icon, { name: "person", color: iconColor, size: iconSize, UNSAFE_className: UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.fallbackIcon, UNSAFE_style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.fallbackIcon }));
73
74
  }
74
75
  const className = classnames(styles.initials, UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.initials, {
75
- [styles.smallInitials]: initials.length > 2,
76
+ [styles.smallInitials]: initials.length >= MAX_VISIBLE_INITIALS,
76
77
  });
77
- return (React.createElement("span", { className: className, style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.initials }, initials.substr(0, 3)));
78
+ return (React.createElement("span", { className: className, style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.initials }, initials.slice(0, MAX_VISIBLE_INITIALS)));
78
79
  }
79
80
 
80
81
  exports.Avatar = Avatar;
package/dist/Avatar-es.js CHANGED
@@ -39,6 +39,7 @@ function deconstructCssCustomProperty(color) {
39
39
  .trim();
40
40
  }
41
41
 
42
+ const MAX_VISIBLE_INITIALS = 3;
42
43
  function Avatar({ imageUrl, name, initials, size = "base", color, UNSAFE_className = {}, UNSAFE_style = {}, }) {
43
44
  const style = Object.assign({ backgroundColor: color, borderColor: color }, UNSAFE_style.container);
44
45
  if (imageUrl) {
@@ -70,9 +71,9 @@ function Initials({ initials, iconColor = "textReverse", iconSize = "base", UNSA
70
71
  return (React__default.createElement(Icon, { name: "person", color: iconColor, size: iconSize, UNSAFE_className: UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.fallbackIcon, UNSAFE_style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.fallbackIcon }));
71
72
  }
72
73
  const className = classnames(styles.initials, UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.initials, {
73
- [styles.smallInitials]: initials.length > 2,
74
+ [styles.smallInitials]: initials.length >= MAX_VISIBLE_INITIALS,
74
75
  });
75
- return (React__default.createElement("span", { className: className, style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.initials }, initials.substr(0, 3)));
76
+ return (React__default.createElement("span", { className: className, style: UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.initials }, initials.slice(0, MAX_VISIBLE_INITIALS)));
76
77
  }
77
78
 
78
79
  export { Avatar as A };
@@ -3,55 +3,10 @@
3
3
  var tslib_es6 = require('./tslib.es6-cjs.js');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
+ var buttonRenderAdapter = require('./buttonRenderAdapter-cjs.js');
6
7
  var Button = require('./Button-cjs.js');
7
- var useRenderElement = require('./useRenderElement-cjs.js');
8
8
  var ScrollAreaViewport = require('./ScrollAreaViewport-cjs.js');
9
9
 
10
- function assignRef(ref, instance) {
11
- if (!ref) {
12
- return;
13
- }
14
- if (typeof ref === "function") {
15
- ref(instance);
16
- return;
17
- }
18
- ref.current = instance;
19
- }
20
- function mergeRefs(...refs) {
21
- return (instance) => {
22
- refs.forEach(ref => {
23
- assignRef(ref, instance);
24
- });
25
- };
26
- }
27
- function getElementRef(element) {
28
- return element.ref;
29
- }
30
- function normalizeBaseUiButtonProps(props) {
31
- const rest = tslib_es6.__rest(props, ["type"]);
32
- return rest;
33
- }
34
- function isAtlantisButtonRenderTarget(element) {
35
- return React.isValidElement(element) && element.type === Button.Button;
36
- }
37
- function renderAtlantisButtonTarget(element) {
38
- return function renderButtonTarget(props) {
39
- const mergedProps = useRenderElement.mergeProps(normalizeBaseUiButtonProps(props), element.props);
40
- return (React.createElement(Button.Button, Object.assign({}, mergedProps, { ref: mergeRefs(props.ref, getElementRef(element)), key: element.key })));
41
- };
42
- }
43
- function stripNativeTypeFromButtonRenderTarget(element) {
44
- const nativeType = element.props.type;
45
- if (nativeType !== "button" &&
46
- nativeType !== "submit" &&
47
- nativeType !== "reset") {
48
- return element;
49
- }
50
- return React.cloneElement(element, {
51
- type: undefined,
52
- });
53
- }
54
-
55
10
  var styles = {"backdrop":"Qf3IFhKJwQ0-","popup":"_868PDAA3U2M-","content":"eKuxReHyju8-","scrollRoot":"V--tRnN-P0I-","scrollArea":"_1I0eaFciaWo-","bottomFade":"BYEzqcZUGls-","spinning":"IJxq5fm5qdw-"};
56
11
 
57
12
  // `resolveBottomSheetTriggerRender` so an Atlantis `<Button>` works as a trigger
@@ -60,26 +15,35 @@ function resolveBottomSheetTriggerRender({ children, render, }) {
60
15
  if (render) {
61
16
  if (typeof render === "function") {
62
17
  return (props) => {
63
- const renderedElement = render(normalizeBaseUiButtonProps(props));
64
- return isAtlantisButtonRenderTarget(renderedElement)
65
- ? stripNativeTypeFromButtonRenderTarget(renderedElement)
18
+ const renderedElement = render(buttonRenderAdapter.normalizeBaseUiButtonProps(props));
19
+ return buttonRenderAdapter.isAtlantisButtonRenderTarget(renderedElement)
20
+ ? buttonRenderAdapter.stripNativeTypeFromButtonRenderTarget(renderedElement)
66
21
  : renderedElement;
67
22
  };
68
23
  }
69
- return isAtlantisButtonRenderTarget(render)
70
- ? renderAtlantisButtonTarget(render)
24
+ return buttonRenderAdapter.isAtlantisButtonRenderTarget(render)
25
+ ? buttonRenderAdapter.renderAtlantisButtonTarget(render)
71
26
  : render;
72
27
  }
73
- if (isAtlantisButtonRenderTarget(children)) {
74
- return renderAtlantisButtonTarget(children);
28
+ if (buttonRenderAdapter.isAtlantisButtonRenderTarget(children)) {
29
+ return buttonRenderAdapter.renderAtlantisButtonTarget(children);
75
30
  }
76
31
  if (React.isValidElement(children)) {
77
32
  return children;
78
33
  }
79
- return renderAtlantisButtonTarget(React.createElement(Button.Button, { type: "primary" },
34
+ return buttonRenderAdapter.renderAtlantisButtonTarget(React.createElement(Button.Button, { type: "primary" },
80
35
  React.createElement(Button.Button.Label, null, children)));
81
36
  }
82
37
 
38
+ /**
39
+ * Whether `BottomSheet.Popup` renders its own built-in scroll area (with the
40
+ * bottom fade). Defaults to `true` — the popup wraps its `children` in a
41
+ * scrollable viewport. A consumer that manages its own scroll region (e.g.
42
+ * `Dialog`, which pins a header/footer outside a single scroll area) provides
43
+ * `false` to opt out. Mirrors how `Dialog.Body` decides whether to wrap itself
44
+ * via context rather than a prop.
45
+ */
46
+ const BottomSheetScrollAreaContext = React.createContext(true);
83
47
  function BottomSheetTrigger(_a) {
84
48
  var { children, render, className } = _a, triggerProps = tslib_es6.__rest(_a, ["children", "render", "className"]);
85
49
  return (React.createElement(ScrollAreaViewport.DrawerTrigger, Object.assign({}, triggerProps, { className: className, render: resolveBottomSheetTriggerRender({ children, render }) })));
@@ -95,14 +59,30 @@ function BottomSheetRoot(_a) {
95
59
  }
96
60
  function BottomSheetPopup(_a) {
97
61
  var { children, className, initialFocus, finalFocus, ref } = _a, popupProps = tslib_es6.__rest(_a, ["children", "className", "initialFocus", "finalFocus", "ref"]);
62
+ // Defaults to wrapping; a consumer managing its own scroll region provides
63
+ // `BottomSheetScrollAreaContext` = false.
64
+ const renderScrollArea = React.useContext(BottomSheetScrollAreaContext);
98
65
  return (React.createElement(ScrollAreaViewport.DrawerPortal, null,
99
- React.createElement(ScrollAreaViewport.DrawerBackdrop, { forceRender: true, className: styles.backdrop }),
100
- React.createElement(ScrollAreaViewport.DrawerPopup, Object.assign({}, popupProps, { ref: ref, className: classnames(styles.popup, className), initialFocus: initialFocus, finalFocus: finalFocus }),
101
- React.createElement(ScrollAreaViewport.ScrollAreaRoot, { className: styles.scrollRoot },
102
- React.createElement(ScrollAreaViewport.ScrollAreaViewport, { className: styles.scrollArea, "data-testid": "ATL-BottomSheet-ScrollArea",
103
- // BaseUI sets overflow: scroll in the style prop by default. This is to override that because adding it to the className doesn't work.
104
- style: { overflow: "auto" } }, children),
105
- React.createElement("div", { "aria-hidden": "true", className: styles.bottomFade, "data-testid": "ATL-BottomSheet-Fade" })))));
66
+ React.createElement(ScrollAreaViewport.DrawerBackdrop, { forceRender: true, className: styles.backdrop, "data-testid": "ATL-BottomSheet-Backdrop" }),
67
+ React.createElement(ScrollAreaViewport.DrawerPopup, Object.assign({}, popupProps, { ref: ref, className: classnames(styles.popup, className), initialFocus: initialFocus, finalFocus: finalFocus }), !renderScrollArea ? (
68
+ // The consumer manages its own scroll region (e.g. Dialog pins a
69
+ // header/footer outside a single scroll area) — often by composing
70
+ // `BottomSheet.ScrollArea` itself.
71
+ children) : (React.createElement(BottomSheetScrollArea, null, children)))));
72
+ }
73
+ /**
74
+ * The sheet's scroll region: a styled BaseUI `ScrollArea` (native scrollbar) with
75
+ * a bottom fade that hints at more content while the viewport can scroll further.
76
+ * `BottomSheet.Popup` renders this automatically unless a consumer opts out via
77
+ * `BottomSheetScrollAreaContext` and composes it (or its own scroll region)
78
+ * directly.
79
+ */
80
+ function BottomSheetScrollArea({ children, className, style, }) {
81
+ return (React.createElement(ScrollAreaViewport.ScrollAreaRoot, { className: classnames(styles.scrollRoot, className), style: style },
82
+ React.createElement(ScrollAreaViewport.ScrollAreaViewport, { className: styles.scrollArea, "data-testid": "ATL-BottomSheet-ScrollArea",
83
+ // BaseUI sets overflow: scroll in the style prop by default. This is to override that because adding it to the className doesn't work.
84
+ style: { overflow: "auto" } }, children),
85
+ React.createElement("div", { "aria-hidden": "true", className: styles.bottomFade, "data-testid": "ATL-BottomSheet-Fade" })));
106
86
  }
107
87
  function BottomSheetContent(_a) {
108
88
  var { children, className, ref } = _a, contentProps = tslib_es6.__rest(_a, ["children", "className", "ref"]);
@@ -119,10 +99,8 @@ const BottomSheet = Object.assign(BottomSheetComponent, {
119
99
  Trigger: BottomSheetTrigger,
120
100
  Popup: BottomSheetPopup,
121
101
  Content: BottomSheetContent,
102
+ ScrollArea: BottomSheetScrollArea,
122
103
  });
123
104
 
124
105
  exports.BottomSheet = BottomSheet;
125
- exports.isAtlantisButtonRenderTarget = isAtlantisButtonRenderTarget;
126
- exports.normalizeBaseUiButtonProps = normalizeBaseUiButtonProps;
127
- exports.renderAtlantisButtonTarget = renderAtlantisButtonTarget;
128
- exports.stripNativeTypeFromButtonRenderTarget = stripNativeTypeFromButtonRenderTarget;
106
+ exports.BottomSheetScrollAreaContext = BottomSheetScrollAreaContext;