@ankhorage/surface 2.0.3 → 2.1.1

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 (135) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +13 -1
  3. package/dist/components/action-sheet/ActionSheet.d.ts +1 -1
  4. package/dist/components/action-sheet/ActionSheet.d.ts.map +1 -1
  5. package/dist/components/action-sheet/ActionSheet.js +5 -4
  6. package/dist/components/action-sheet/ActionSheet.js.map +1 -1
  7. package/dist/components/action-sheet/ActionSheetItem.d.ts +1 -1
  8. package/dist/components/action-sheet/ActionSheetItem.d.ts.map +1 -1
  9. package/dist/components/action-sheet/ActionSheetItem.js +2 -2
  10. package/dist/components/action-sheet/ActionSheetItem.js.map +1 -1
  11. package/dist/components/action-sheet/types.d.ts +3 -0
  12. package/dist/components/action-sheet/types.d.ts.map +1 -1
  13. package/dist/components/action-sheet/types.js.map +1 -1
  14. package/dist/components/drawer/Drawer.d.ts +1 -1
  15. package/dist/components/drawer/Drawer.d.ts.map +1 -1
  16. package/dist/components/drawer/Drawer.js +4 -3
  17. package/dist/components/drawer/Drawer.js.map +1 -1
  18. package/dist/components/drawer/types.d.ts +2 -0
  19. package/dist/components/drawer/types.d.ts.map +1 -1
  20. package/dist/components/drawer/types.js.map +1 -1
  21. package/dist/components/menu/Menu.d.ts +1 -1
  22. package/dist/components/menu/Menu.d.ts.map +1 -1
  23. package/dist/components/menu/Menu.js +10 -6
  24. package/dist/components/menu/Menu.js.map +1 -1
  25. package/dist/components/menu/types.d.ts +2 -0
  26. package/dist/components/menu/types.d.ts.map +1 -1
  27. package/dist/components/menu/types.js.map +1 -1
  28. package/dist/components/modal/Modal.d.ts +1 -1
  29. package/dist/components/modal/Modal.d.ts.map +1 -1
  30. package/dist/components/modal/Modal.js +4 -3
  31. package/dist/components/modal/Modal.js.map +1 -1
  32. package/dist/components/modal/types.d.ts +2 -0
  33. package/dist/components/modal/types.d.ts.map +1 -1
  34. package/dist/components/modal/types.js.map +1 -1
  35. package/dist/components/navigation/DrawerNavigation.d.ts +1 -1
  36. package/dist/components/navigation/DrawerNavigation.d.ts.map +1 -1
  37. package/dist/components/navigation/DrawerNavigation.js +2 -2
  38. package/dist/components/navigation/DrawerNavigation.js.map +1 -1
  39. package/dist/components/navigation/DrawerNavigationItem.d.ts +1 -1
  40. package/dist/components/navigation/DrawerNavigationItem.d.ts.map +1 -1
  41. package/dist/components/navigation/DrawerNavigationItem.js +2 -2
  42. package/dist/components/navigation/DrawerNavigationItem.js.map +1 -1
  43. package/dist/components/navigation/NavigationItem.d.ts +1 -1
  44. package/dist/components/navigation/NavigationItem.d.ts.map +1 -1
  45. package/dist/components/navigation/NavigationItem.js +2 -2
  46. package/dist/components/navigation/NavigationItem.js.map +1 -1
  47. package/dist/components/navigation/NavigationList.d.ts +1 -1
  48. package/dist/components/navigation/NavigationList.d.ts.map +1 -1
  49. package/dist/components/navigation/NavigationList.js +2 -2
  50. package/dist/components/navigation/NavigationList.js.map +1 -1
  51. package/dist/components/navigation/TabBar.d.ts +1 -1
  52. package/dist/components/navigation/TabBar.d.ts.map +1 -1
  53. package/dist/components/navigation/TabBar.js +2 -2
  54. package/dist/components/navigation/TabBar.js.map +1 -1
  55. package/dist/components/navigation/TabBarItem.d.ts +1 -1
  56. package/dist/components/navigation/TabBarItem.d.ts.map +1 -1
  57. package/dist/components/navigation/TabBarItem.js +2 -2
  58. package/dist/components/navigation/TabBarItem.js.map +1 -1
  59. package/dist/components/navigation/types.d.ts +7 -0
  60. package/dist/components/navigation/types.d.ts.map +1 -1
  61. package/dist/components/navigation/types.js.map +1 -1
  62. package/dist/components/tabs/Tab.d.ts +1 -1
  63. package/dist/components/tabs/Tab.d.ts.map +1 -1
  64. package/dist/components/tabs/Tab.js +9 -6
  65. package/dist/components/tabs/Tab.js.map +1 -1
  66. package/dist/components/tabs/types.d.ts +2 -0
  67. package/dist/components/tabs/types.d.ts.map +1 -1
  68. package/dist/components/tabs/types.js.map +1 -1
  69. package/dist/components/text-input/TextInput.d.ts +1 -1
  70. package/dist/components/text-input/TextInput.d.ts.map +1 -1
  71. package/dist/components/text-input/TextInput.js +8 -2
  72. package/dist/components/text-input/TextInput.js.map +1 -1
  73. package/dist/components/text-input/types.d.ts +2 -0
  74. package/dist/components/text-input/types.d.ts.map +1 -1
  75. package/dist/components/text-input/types.js.map +1 -1
  76. package/dist/components/toast/Toast.d.ts +1 -1
  77. package/dist/components/toast/Toast.d.ts.map +1 -1
  78. package/dist/components/toast/Toast.js +3 -2
  79. package/dist/components/toast/Toast.js.map +1 -1
  80. package/dist/components/toast/types.d.ts +2 -0
  81. package/dist/components/toast/types.d.ts.map +1 -1
  82. package/dist/components/toast/types.js.map +1 -1
  83. package/dist/components/tooltip/Tooltip.d.ts +1 -1
  84. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  85. package/dist/components/tooltip/Tooltip.js +3 -2
  86. package/dist/components/tooltip/Tooltip.js.map +1 -1
  87. package/dist/components/tooltip/types.d.ts +2 -0
  88. package/dist/components/tooltip/types.d.ts.map +1 -1
  89. package/dist/components/tooltip/types.js.map +1 -1
  90. package/dist/index.d.ts +1 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/interactionPolicy.d.ts +5 -0
  94. package/dist/interactionPolicy.d.ts.map +1 -0
  95. package/dist/interactionPolicy.js +2 -0
  96. package/dist/interactionPolicy.js.map +1 -0
  97. package/dist/primitives/button-base/ButtonBase.d.ts +1 -1
  98. package/dist/primitives/button-base/ButtonBase.d.ts.map +1 -1
  99. package/dist/primitives/button-base/ButtonBase.js +3 -2
  100. package/dist/primitives/button-base/ButtonBase.js.map +1 -1
  101. package/dist/primitives/button-base/types.d.ts +2 -1
  102. package/dist/primitives/button-base/types.d.ts.map +1 -1
  103. package/dist/primitives/button-base/types.js.map +1 -1
  104. package/package.json +3 -3
  105. package/src/components/action-sheet/ActionSheet.tsx +5 -2
  106. package/src/components/action-sheet/ActionSheetItem.tsx +2 -0
  107. package/src/components/action-sheet/types.ts +3 -0
  108. package/src/components/drawer/Drawer.tsx +4 -2
  109. package/src/components/drawer/types.ts +3 -0
  110. package/src/components/menu/Menu.tsx +18 -6
  111. package/src/components/menu/types.ts +3 -0
  112. package/src/components/modal/Modal.tsx +4 -2
  113. package/src/components/modal/types.ts +3 -0
  114. package/src/components/navigation/DrawerNavigation.tsx +8 -1
  115. package/src/components/navigation/DrawerNavigationItem.tsx +7 -1
  116. package/src/components/navigation/NavigationItem.tsx +7 -1
  117. package/src/components/navigation/NavigationList.tsx +8 -1
  118. package/src/components/navigation/TabBar.tsx +8 -2
  119. package/src/components/navigation/TabBarItem.tsx +2 -1
  120. package/src/components/navigation/policy.test.ts +96 -0
  121. package/src/components/navigation/types.ts +7 -0
  122. package/src/components/tabs/Tab.tsx +17 -6
  123. package/src/components/tabs/types.ts +3 -0
  124. package/src/components/text-input/TextInput.tsx +10 -2
  125. package/src/components/text-input/types.ts +2 -0
  126. package/src/components/toast/Toast.tsx +10 -2
  127. package/src/components/toast/types.ts +2 -0
  128. package/src/components/tooltip/Tooltip.tsx +6 -4
  129. package/src/components/tooltip/types.ts +3 -0
  130. package/src/index.test.ts +1 -0
  131. package/src/index.ts +1 -0
  132. package/src/interactionPolicy.test.ts +86 -0
  133. package/src/interactionPolicy.ts +5 -0
  134. package/src/primitives/button-base/ButtonBase.tsx +4 -2
  135. package/src/primitives/button-base/types.ts +3 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/surface
2
2
 
3
+ ## 2.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - dbfb4e6: Update COLOR-THEORY
8
+
9
+ ## 2.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - b09d26d: Add the uniform interactionPolicy="enabled" | "passive" contract to Surface-owned interactive primitives.
14
+
3
15
  ## 2.0.3
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/surface
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v2.0.2](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v2.1.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Cross-platform UI foundation for React Native and React Native Web. Provides theming, layout primitives, and core building blocks for modern apps.
9
9
 
@@ -90,6 +90,7 @@ graph TD
90
90
  package__ankhorage_surface -.-> module_src_components_action_sheet_index_ts
91
91
  module_src_components_action_sheet_types_ts["src/components/action-sheet/types.ts"]
92
92
  package__ankhorage_surface -.-> module_src_components_action_sheet_types_ts
93
+ module_src_components_action_sheet_types_ts --> module_src_interactionPolicy_ts
93
94
  module_src_components_action_sheet_types_ts --> module_src_surfaceColor_ts
94
95
  module_src_components_badge_Badge_tsx["src/components/badge/Badge.tsx"]
95
96
  package__ankhorage_surface -.-> module_src_components_badge_Badge_tsx
@@ -162,6 +163,7 @@ graph TD
162
163
  package__ankhorage_surface -.-> module_src_components_drawer_index_ts
163
164
  module_src_components_drawer_types_ts["src/components/drawer/types.ts"]
164
165
  package__ankhorage_surface -.-> module_src_components_drawer_types_ts
166
+ module_src_components_drawer_types_ts --> module_src_interactionPolicy_ts
165
167
  module_src_components_field_Field_tsx["src/components/field/Field.tsx"]
166
168
  package__ankhorage_surface -.-> module_src_components_field_Field_tsx
167
169
  module_src_components_field_Field_tsx --> module_src_components_field_types_ts
@@ -237,6 +239,7 @@ graph TD
237
239
  package__ankhorage_surface -.-> module_src_components_menu_navigation_ts
238
240
  module_src_components_menu_types_ts["src/components/menu/types.ts"]
239
241
  package__ankhorage_surface -.-> module_src_components_menu_types_ts
242
+ module_src_components_menu_types_ts --> module_src_interactionPolicy_ts
240
243
  module_src_components_modal_index_ts["src/components/modal/index.ts"]
241
244
  package__ankhorage_surface -.-> module_src_components_modal_index_ts
242
245
  module_src_components_modal_Modal_tsx["src/components/modal/Modal.tsx"]
@@ -249,6 +252,7 @@ graph TD
249
252
  module_src_components_modal_Modal_tsx --> module_src_theme_ThemeContext_tsx
250
253
  module_src_components_modal_types_ts["src/components/modal/types.ts"]
251
254
  package__ankhorage_surface -.-> module_src_components_modal_types_ts
255
+ module_src_components_modal_types_ts --> module_src_interactionPolicy_ts
252
256
  module_src_components_navigation_DrawerNavigation_tsx["src/components/navigation/DrawerNavigation.tsx"]
253
257
  package__ankhorage_surface -.-> module_src_components_navigation_DrawerNavigation_tsx
254
258
  module_src_components_navigation_DrawerNavigation_tsx --> module_src_components_navigation_DrawerNavigationItem_tsx
@@ -295,6 +299,7 @@ graph TD
295
299
  module_src_components_navigation_TabBarItem_tsx --> module_src_theme_ThemeContext_tsx
296
300
  module_src_components_navigation_types_ts["src/components/navigation/types.ts"]
297
301
  package__ankhorage_surface -.-> module_src_components_navigation_types_ts
302
+ module_src_components_navigation_types_ts --> module_src_interactionPolicy_ts
298
303
  module_src_components_navigation_types_ts --> module_src_primitives_icon_index_ts
299
304
  module_src_components_radio_index_ts["src/components/radio/index.ts"]
300
305
  package__ankhorage_surface -.-> module_src_components_radio_index_ts
@@ -364,6 +369,7 @@ graph TD
364
369
  module_src_components_tabs_Tabs_tsx --> module_src_layout_index_ts
365
370
  module_src_components_tabs_types_ts["src/components/tabs/types.ts"]
366
371
  package__ankhorage_surface -.-> module_src_components_tabs_types_ts
372
+ module_src_components_tabs_types_ts --> module_src_interactionPolicy_ts
367
373
  module_src_components_text_input_index_ts["src/components/text-input/index.ts"]
368
374
  package__ankhorage_surface -.-> module_src_components_text_input_index_ts
369
375
  module_src_components_text_input_TextInput_tsx["src/components/text-input/TextInput.tsx"]
@@ -373,6 +379,7 @@ graph TD
373
379
  module_src_components_text_input_TextInput_tsx --> module_src_theme_ThemeContext_tsx
374
380
  module_src_components_text_input_types_ts["src/components/text-input/types.ts"]
375
381
  package__ankhorage_surface -.-> module_src_components_text_input_types_ts
382
+ module_src_components_text_input_types_ts --> module_src_interactionPolicy_ts
376
383
  module_src_components_text_input_types_ts --> module_src_internal_resolvers_resolveControlSize_ts
377
384
  module_src_components_textarea_index_ts["src/components/textarea/index.ts"]
378
385
  package__ankhorage_surface -.-> module_src_components_textarea_index_ts
@@ -402,6 +409,7 @@ graph TD
402
409
  module_src_components_toast_ToastProvider_tsx --> module_src_layout_index_ts
403
410
  module_src_components_toast_types_ts["src/components/toast/types.ts"]
404
411
  package__ankhorage_surface -.-> module_src_components_toast_types_ts
412
+ module_src_components_toast_types_ts --> module_src_interactionPolicy_ts
405
413
  module_src_components_toast_types_ts --> module_src_surfaceColor_ts
406
414
  module_src_components_tooltip_index_ts["src/components/tooltip/index.ts"]
407
415
  package__ankhorage_surface -.-> module_src_components_tooltip_index_ts
@@ -415,6 +423,7 @@ graph TD
415
423
  module_src_components_tooltip_Tooltip_tsx --> module_src_theme_ThemeContext_tsx
416
424
  module_src_components_tooltip_types_ts["src/components/tooltip/types.ts"]
417
425
  package__ankhorage_surface -.-> module_src_components_tooltip_types_ts
426
+ module_src_components_tooltip_types_ts --> module_src_interactionPolicy_ts
418
427
  module_src_context_FontContext_tsx["src/context/FontContext.tsx"]
419
428
  package__ankhorage_surface -.-> module_src_context_FontContext_tsx
420
429
  module_src_context_TranslationContext_tsx["src/context/TranslationContext.tsx"]
@@ -461,6 +470,8 @@ graph TD
461
470
  module_src_examples_DocsExamples_tsx --> module_src_theme_index_ts
462
471
  module_src_examples_DocsExamples_tsx --> module_src_theme_types_ts
463
472
  module_src_index_ts["src/index.ts"]
473
+ module_src_interactionPolicy_ts["src/interactionPolicy.ts"]
474
+ package__ankhorage_surface -.-> module_src_interactionPolicy_ts
464
475
  module_src_internal_focus_FocusScope_tsx["src/internal/focus/FocusScope.tsx"]
465
476
  package__ankhorage_surface -.-> module_src_internal_focus_FocusScope_tsx
466
477
  module_src_internal_focus_FocusScope_tsx --> module_src_internal_focus_useFocusManager_ts
@@ -612,6 +623,7 @@ graph TD
612
623
  package__ankhorage_surface -.-> module_src_primitives_button_base_index_ts
613
624
  module_src_primitives_button_base_types_ts["src/primitives/button-base/types.ts"]
614
625
  package__ankhorage_surface -.-> module_src_primitives_button_base_types_ts
626
+ module_src_primitives_button_base_types_ts --> module_src_interactionPolicy_ts
615
627
  module_src_primitives_button_base_types_ts --> module_src_internal_resolvers_resolveInteractiveState_ts
616
628
  module_src_primitives_button_base_types_ts --> module_src_layout_index_ts
617
629
  module_src_primitives_heading_Heading_tsx["src/primitives/heading/Heading.tsx"]
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { ActionSheetProps } from './types';
3
- export declare function ActionSheet({ visible, onDismiss, title, description, children, cancelLabel, closeOnBackdrop, testID, }: ActionSheetProps): React.JSX.Element | null;
3
+ export declare function ActionSheet({ visible, onDismiss, title, description, children, cancelLabel, closeOnBackdrop, interactionPolicy, testID, }: ActionSheetProps): React.JSX.Element | null;
4
4
  //# sourceMappingURL=ActionSheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAsB,EACtB,eAAsB,EACtB,MAAM,GACP,EAAE,gBAAgB,4BAmGlB"}
1
+ {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAsB,EACtB,eAAsB,EACtB,iBAA6B,EAC7B,MAAM,GACP,EAAE,gBAAgB,4BAqGlB"}
@@ -7,9 +7,10 @@ import { Box, Stack, Surface } from '../../layout';
7
7
  import { Text } from '../../primitives/text';
8
8
  import { useTheme } from '../../theme/ThemeContext';
9
9
  import { ActionSheetItem } from './ActionSheetItem';
10
- export function ActionSheet({ visible, onDismiss, title, description, children, cancelLabel = 'Cancel', closeOnBackdrop = true, testID, }) {
10
+ export function ActionSheet({ visible, onDismiss, title, description, children, cancelLabel = 'Cancel', closeOnBackdrop = true, interactionPolicy = 'enabled', testID, }) {
11
11
  const { theme } = useTheme();
12
12
  const animation = resolveOverlayAnimation('modal');
13
+ const passive = interactionPolicy === 'passive';
13
14
  if (!visible) {
14
15
  return null;
15
16
  }
@@ -21,7 +22,7 @@ export function ActionSheet({ visible, onDismiss, title, description, children,
21
22
  right: 0,
22
23
  top: 0,
23
24
  }}>
24
- <Pressable onPress={closeOnBackdrop ? onDismiss : undefined} style={{
25
+ <Pressable onPress={passive ? undefined : closeOnBackdrop ? onDismiss : undefined} style={{
25
26
  backgroundColor: theme.semantics.neutral.text,
26
27
  bottom: 0,
27
28
  left: 0,
@@ -30,7 +31,7 @@ export function ActionSheet({ visible, onDismiss, title, description, children,
30
31
  right: 0,
31
32
  top: 0,
32
33
  }} testID={testID ? `${testID}-backdrop` : undefined}/>
33
- <FocusScope active={visible} onEscape={onDismiss} testID={testID ? `${testID}-focus` : undefined}>
34
+ <FocusScope active={visible} onEscape={passive ? undefined : onDismiss} testID={testID ? `${testID}-focus` : undefined}>
34
35
  <Box pointerEvents="box-none" style={{
35
36
  flex: 1,
36
37
  justifyContent: 'flex-end',
@@ -59,7 +60,7 @@ export function ActionSheet({ visible, onDismiss, title, description, children,
59
60
  </Stack>
60
61
  </Box>) : null}
61
62
  <Stack gap="xxs">{children}</Stack>
62
- {onDismiss ? (<ActionSheetItem label={cancelLabel} onPress={onDismiss} testID={testID ? `${testID}-cancel` : undefined}/>) : null}
63
+ {onDismiss ? (<ActionSheetItem label={cancelLabel} interactionPolicy={interactionPolicy} onPress={onDismiss} testID={testID ? `${testID}-cancel` : undefined}/>) : null}
63
64
  </Stack>
64
65
  </Surface>
65
66
  </View>
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheet.js","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,GAAG,QAAQ,EACtB,eAAe,GAAG,IAAI,EACtB,MAAM,GACW;IACjB,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CACrC;MAAA,CAAC,IAAI,CACH,aAAa,CAAC,UAAU,CACxB,KAAK,CAAC,CAAC;YACL,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;SACP,CAAC,CAEF;QAAA,CAAC,SAAS,CACR,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CACjD,KAAK,CAAC,CAAC;YACL,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;YAC7C,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,SAAS,CAAC,eAAe;YAClC,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;SACP,CAAC,CACF,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,EAEpD;QAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,OAAO,CAAC,CAChB,QAAQ,CAAC,CAAC,SAAS,CAAC,CACpB,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAE/C;UAAA,CAAC,GAAG,CACF,aAAa,CAAC,UAAU,CACxB,KAAK,CAAC,CAAC;YACL,IAAI,EAAE,CAAC;YACP,cAAc,EAAE,UAAU;SAC3B,CAAC,CAEF;YAAA,CAAC,IAAI,CACH,UAAU,CACV,wBAAwB,CACxB,KAAK,CAAC,CAAC;YACL,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,MAAM;SACd,CAAC,CAEF;cAAA,CAAC,OAAO,CACN,CAAC,CAAC,GAAG,CACL,KAAK,CAAC,CAAC;YACL,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;SACvC,CAAC,CACF,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,OAAO,CAAC,QAAQ,CAEhB;gBAAA,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CACZ;kBAAA,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CACtB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAChB;sBAAA,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CACd;wBAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CACP,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CACpD;4BAAA,CAAC,KAAK,CACR;0BAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;wBAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CACvD;4BAAA,CAAC,WAAW,CACd;0BAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;sBAAA,EAAE,KAAK,CACT;oBAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACR;kBAAA,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAClC;kBAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,eAAe,CACd,KAAK,CAAC,CAAC,WAAW,CAAC,CACnB,OAAO,CAAC,CAAC,SAAS,CAAC,CACnB,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAChD,CACH,CAAC,CAAC,CAAC,IAAI,CACV;gBAAA,EAAE,KAAK,CACT;cAAA,EAAE,OAAO,CACX;YAAA,EAAE,IAAI,CACR;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,UAAU,CACd;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,MAAM,CAAC,CACV,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Stack, Surface } from '../../layout';\nimport { Text } from '../../primitives/text';\nimport { useTheme } from '../../theme/ThemeContext';\nimport { ActionSheetItem } from './ActionSheetItem';\nimport type { ActionSheetProps } from './types';\n\nexport function ActionSheet({\n visible,\n onDismiss,\n title,\n description,\n children,\n cancelLabel = 'Cancel',\n closeOnBackdrop = true,\n testID,\n}: ActionSheetProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('modal');\n\n if (!visible) {\n return null;\n }\n\n return (\n <Portal layer=\"modal\" visible={visible}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={closeOnBackdrop ? onDismiss : undefined}\n style={{\n backgroundColor: theme.semantics.neutral.text,\n bottom: 0,\n left: 0,\n opacity: animation.backdropOpacity,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <Box\n pointerEvents=\"box-none\"\n style={{\n flex: 1,\n justifyContent: 'flex-end',\n }}\n >\n <View\n accessible\n accessibilityViewIsModal\n style={{\n alignSelf: 'center',\n maxWidth: 560,\n padding: 16,\n width: '100%',\n }}\n >\n <Surface\n p=\"m\"\n style={{\n borderRadius: 24,\n shadowOpacity: 0.16,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: -8 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n <Stack gap=\"s\">\n {title || description ? (\n <Box px=\"m\" py=\"s\">\n <Stack gap=\"xxs\">\n {title ? (\n <Text align=\"center\" variant=\"label\" weight=\"semiBold\">\n {title}\n </Text>\n ) : null}\n {description ? (\n <Text align=\"center\" emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n ) : null}\n <Stack gap=\"xxs\">{children}</Stack>\n {onDismiss ? (\n <ActionSheetItem\n label={cancelLabel}\n onPress={onDismiss}\n testID={testID ? `${testID}-cancel` : undefined}\n />\n ) : null}\n </Stack>\n </Surface>\n </View>\n </Box>\n </FocusScope>\n </View>\n </Portal>\n );\n}\n"]}
1
+ {"version":3,"file":"ActionSheet.js","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheet.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Stack, Surface } from '../../layout';\nimport { Text } from '../../primitives/text';\nimport { useTheme } from '../../theme/ThemeContext';\nimport { ActionSheetItem } from './ActionSheetItem';\nimport type { ActionSheetProps } from './types';\n\nexport function ActionSheet({\n visible,\n onDismiss,\n title,\n description,\n children,\n cancelLabel = 'Cancel',\n closeOnBackdrop = true,\n interactionPolicy = 'enabled',\n testID,\n}: ActionSheetProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('modal');\n const passive = interactionPolicy === 'passive';\n\n if (!visible) {\n return null;\n }\n\n return (\n <Portal layer=\"modal\" visible={visible}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={passive ? undefined : closeOnBackdrop ? onDismiss : undefined}\n style={{\n backgroundColor: theme.semantics.neutral.text,\n bottom: 0,\n left: 0,\n opacity: animation.backdropOpacity,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={passive ? undefined : onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <Box\n pointerEvents=\"box-none\"\n style={{\n flex: 1,\n justifyContent: 'flex-end',\n }}\n >\n <View\n accessible\n accessibilityViewIsModal\n style={{\n alignSelf: 'center',\n maxWidth: 560,\n padding: 16,\n width: '100%',\n }}\n >\n <Surface\n p=\"m\"\n style={{\n borderRadius: 24,\n shadowOpacity: 0.16,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: -8 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n <Stack gap=\"s\">\n {title || description ? (\n <Box px=\"m\" py=\"s\">\n <Stack gap=\"xxs\">\n {title ? (\n <Text align=\"center\" variant=\"label\" weight=\"semiBold\">\n {title}\n </Text>\n ) : null}\n {description ? (\n <Text align=\"center\" emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n ) : null}\n <Stack gap=\"xxs\">{children}</Stack>\n {onDismiss ? (\n <ActionSheetItem\n label={cancelLabel}\n interactionPolicy={interactionPolicy}\n onPress={onDismiss}\n testID={testID ? `${testID}-cancel` : undefined}\n />\n ) : null}\n </Stack>\n </Surface>\n </View>\n </Box>\n </FocusScope>\n </View>\n </Portal>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { ActionSheetItemProps } from './types';
3
- export declare function ActionSheetItem({ label, description, leading, trailing, color, disabled, selected, onPress, testID, }: ActionSheetItemProps): React.JSX.Element;
3
+ export declare function ActionSheetItem({ label, description, leading, trailing, color, disabled, selected, interactionPolicy, onPress, testID, }: ActionSheetItemProps): React.JSX.Element;
4
4
  //# sourceMappingURL=ActionSheetItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheetItem.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheetItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,QAAgB,EAChB,OAAO,EACP,MAAM,GACP,EAAE,oBAAoB,qBAuCtB"}
1
+ {"version":3,"file":"ActionSheetItem.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheetItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,QAAgB,EAChB,iBAA6B,EAC7B,OAAO,EACP,MAAM,GACP,EAAE,oBAAoB,qBAwCtB"}
@@ -2,8 +2,8 @@ import React from 'react';
2
2
  import { Box, Inline, Stack } from '../../layout';
3
3
  import { ButtonBase } from '../../primitives/button-base';
4
4
  import { Text } from '../../primitives/text';
5
- export function ActionSheetItem({ label, description, leading, trailing, color, disabled = false, selected = false, onPress, testID, }) {
6
- return (<ButtonBase accessibilityRole="button" accessibilityState={{ disabled, selected }} disabled={disabled} onPress={onPress} radius="m" testID={testID}>
5
+ export function ActionSheetItem({ label, description, leading, trailing, color, disabled = false, selected = false, interactionPolicy = 'enabled', onPress, testID, }) {
6
+ return (<ButtonBase accessibilityRole="button" accessibilityState={{ disabled, selected }} disabled={disabled} interactionPolicy={interactionPolicy} onPress={onPress} radius="m" testID={testID}>
7
7
  {(state) => (<Box px="m" py="m" radius="m" style={{
8
8
  opacity: state.disabled ? 0.56 : 1,
9
9
  }}>
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheetItem.js","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheetItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,MAAM,GACe;IACrB,OAAO,CACL,CAAC,UAAU,CACT,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC3C,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,MAAM,CAAC,GAAG,CACV,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACV,CAAC,GAAG,CACF,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,MAAM,CAAC,GAAG,CACV,KAAK,CAAC,CAAC;gBACL,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACnC,CAAC,CAEF;UAAA,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAClE;YAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CACtC;YAAA,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACX;cAAA,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CACd;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E;kBAAA,CAAC,KAAK,CACR;gBAAA,EAAE,IAAI,CACN;gBAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CACxC;oBAAA,CAAC,WAAW,CACd;kBAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;cAAA,EAAE,KAAK,CACT;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1C;UAAA,EAAE,MAAM,CACV;QAAA,EAAE,GAAG,CAAC,CACP,CACH;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\n\nimport { Box, Inline, Stack } from '../../layout';\nimport { ButtonBase } from '../../primitives/button-base';\nimport { Text } from '../../primitives/text';\nimport type { ActionSheetItemProps } from './types';\n\nexport function ActionSheetItem({\n label,\n description,\n leading,\n trailing,\n color,\n disabled = false,\n selected = false,\n onPress,\n testID,\n}: ActionSheetItemProps) {\n return (\n <ButtonBase\n accessibilityRole=\"button\"\n accessibilityState={{ disabled, selected }}\n disabled={disabled}\n onPress={onPress}\n radius=\"m\"\n testID={testID}\n >\n {(state) => (\n <Box\n px=\"m\"\n py=\"m\"\n radius=\"m\"\n style={{\n opacity: state.disabled ? 0.56 : 1,\n }}\n >\n <Inline align=\"center\" gap=\"m\" justify=\"space-between\" wrap=\"nowrap\">\n {leading ? <Box>{leading}</Box> : null}\n <Box flex={1}>\n <Stack gap=\"xxs\">\n <Text color={color} variant=\"body\" weight={selected ? 'semiBold' : 'medium'}>\n {label}\n </Text>\n {description ? (\n <Text emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n {trailing ? <Box>{trailing}</Box> : null}\n </Inline>\n </Box>\n )}\n </ButtonBase>\n );\n}\n"]}
1
+ {"version":3,"file":"ActionSheetItem.js","sourceRoot":"","sources":["../../../src/components/action-sheet/ActionSheetItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,iBAAiB,GAAG,SAAS,EAC7B,OAAO,EACP,MAAM,GACe;IACrB,OAAO,CACL,CAAC,UAAU,CACT,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC3C,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CACrC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,MAAM,CAAC,GAAG,CACV,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACV,CAAC,GAAG,CACF,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,MAAM,CAAC,GAAG,CACV,KAAK,CAAC,CAAC;gBACL,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACnC,CAAC,CAEF;UAAA,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAClE;YAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CACtC;YAAA,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACX;cAAA,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CACd;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E;kBAAA,CAAC,KAAK,CACR;gBAAA,EAAE,IAAI,CACN;gBAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CACxC;oBAAA,CAAC,WAAW,CACd;kBAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;cAAA,EAAE,KAAK,CACT;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1C;UAAA,EAAE,MAAM,CACV;QAAA,EAAE,GAAG,CAAC,CACP,CACH;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\n\nimport { Box, Inline, Stack } from '../../layout';\nimport { ButtonBase } from '../../primitives/button-base';\nimport { Text } from '../../primitives/text';\nimport type { ActionSheetItemProps } from './types';\n\nexport function ActionSheetItem({\n label,\n description,\n leading,\n trailing,\n color,\n disabled = false,\n selected = false,\n interactionPolicy = 'enabled',\n onPress,\n testID,\n}: ActionSheetItemProps) {\n return (\n <ButtonBase\n accessibilityRole=\"button\"\n accessibilityState={{ disabled, selected }}\n disabled={disabled}\n interactionPolicy={interactionPolicy}\n onPress={onPress}\n radius=\"m\"\n testID={testID}\n >\n {(state) => (\n <Box\n px=\"m\"\n py=\"m\"\n radius=\"m\"\n style={{\n opacity: state.disabled ? 0.56 : 1,\n }}\n >\n <Inline align=\"center\" gap=\"m\" justify=\"space-between\" wrap=\"nowrap\">\n {leading ? <Box>{leading}</Box> : null}\n <Box flex={1}>\n <Stack gap=\"xxs\">\n <Text color={color} variant=\"body\" weight={selected ? 'semiBold' : 'medium'}>\n {label}\n </Text>\n {description ? (\n <Text emphasis=\"muted\" variant=\"bodySmall\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n {trailing ? <Box>{trailing}</Box> : null}\n </Inline>\n </Box>\n )}\n </ButtonBase>\n );\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import type { InteractionPolicy } from '../../interactionPolicy';
2
3
  import type { SurfaceColor } from '../../surfaceColor';
3
4
  export interface ActionSheetProps {
4
5
  visible: boolean;
@@ -8,6 +9,7 @@ export interface ActionSheetProps {
8
9
  children?: React.ReactNode;
9
10
  cancelLabel?: React.ReactNode;
10
11
  closeOnBackdrop?: boolean;
12
+ interactionPolicy?: InteractionPolicy;
11
13
  testID?: string;
12
14
  }
13
15
  export interface ActionSheetItemProps {
@@ -18,6 +20,7 @@ export interface ActionSheetItemProps {
18
20
  color?: SurfaceColor;
19
21
  disabled?: boolean;
20
22
  selected?: boolean;
23
+ interactionPolicy?: InteractionPolicy;
21
24
  onPress?: (() => void) | undefined;
22
25
  testID?: string;
23
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/action-sheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/action-sheet/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { SurfaceColor } from '../../surfaceColor';\n\nexport interface ActionSheetProps {\n visible: boolean;\n onDismiss?: (() => void) | undefined;\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n closeOnBackdrop?: boolean;\n testID?: string;\n}\n\nexport interface ActionSheetItemProps {\n label: React.ReactNode;\n description?: React.ReactNode;\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n color?: SurfaceColor;\n disabled?: boolean;\n selected?: boolean;\n onPress?: (() => void) | undefined;\n testID?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/action-sheet/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { InteractionPolicy } from '../../interactionPolicy';\nimport type { SurfaceColor } from '../../surfaceColor';\n\nexport interface ActionSheetProps {\n visible: boolean;\n onDismiss?: (() => void) | undefined;\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n closeOnBackdrop?: boolean;\n interactionPolicy?: InteractionPolicy;\n testID?: string;\n}\n\nexport interface ActionSheetItemProps {\n label: React.ReactNode;\n description?: React.ReactNode;\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n color?: SurfaceColor;\n disabled?: boolean;\n selected?: boolean;\n interactionPolicy?: InteractionPolicy;\n onPress?: (() => void) | undefined;\n testID?: string;\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { DrawerProps } from './types';
3
- export declare function Drawer({ visible, onDismiss, position, children, closeOnBackdrop, testID, }: DrawerProps): React.JSX.Element | null;
3
+ export declare function Drawer({ visible, onDismiss, position, children, closeOnBackdrop, interactionPolicy, testID, }: DrawerProps): React.JSX.Element | null;
4
4
  //# sourceMappingURL=Drawer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/Drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,SAAS,EACT,QAAkB,EAClB,QAAQ,EACR,eAAsB,EACtB,MAAM,GACP,EAAE,WAAW,4BA0Eb"}
1
+ {"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/Drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,SAAS,EACT,QAAkB,EAClB,QAAQ,EACR,eAAsB,EACtB,iBAA6B,EAC7B,MAAM,GACP,EAAE,WAAW,4BA2Eb"}
@@ -5,9 +5,10 @@ import { Portal } from '../../internal/overlay/Portal';
5
5
  import { resolveOverlayAnimation } from '../../internal/resolvers';
6
6
  import { Box, Surface } from '../../layout';
7
7
  import { useTheme } from '../../theme/ThemeContext';
8
- export function Drawer({ visible, onDismiss, position = 'right', children, closeOnBackdrop = true, testID, }) {
8
+ export function Drawer({ visible, onDismiss, position = 'right', children, closeOnBackdrop = true, interactionPolicy = 'enabled', testID, }) {
9
9
  const { theme } = useTheme();
10
10
  const animation = resolveOverlayAnimation('drawer');
11
+ const passive = interactionPolicy === 'passive';
11
12
  if (!visible) {
12
13
  return null;
13
14
  }
@@ -19,7 +20,7 @@ export function Drawer({ visible, onDismiss, position = 'right', children, close
19
20
  right: 0,
20
21
  top: 0,
21
22
  }}>
22
- <Pressable onPress={closeOnBackdrop ? onDismiss : undefined} style={{
23
+ <Pressable onPress={passive ? undefined : closeOnBackdrop ? onDismiss : undefined} style={{
23
24
  backgroundColor: theme.semantics.neutral.text,
24
25
  bottom: 0,
25
26
  left: 0,
@@ -28,7 +29,7 @@ export function Drawer({ visible, onDismiss, position = 'right', children, close
28
29
  right: 0,
29
30
  top: 0,
30
31
  }} testID={testID ? `${testID}-backdrop` : undefined}/>
31
- <FocusScope active={visible} onEscape={onDismiss} testID={testID ? `${testID}-focus` : undefined}>
32
+ <FocusScope active={visible} onEscape={passive ? undefined : onDismiss} testID={testID ? `${testID}-focus` : undefined}>
32
33
  <Box pointerEvents="box-none" style={{
33
34
  flex: 1,
34
35
  justifyContent: 'flex-start',
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/components/drawer/Drawer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Surface } from '../../layout';\nimport { useTheme } from '../../theme/ThemeContext';\nimport type { DrawerProps } from './types';\n\nexport function Drawer({\n visible,\n onDismiss,\n position = 'right',\n children,\n closeOnBackdrop = true,\n testID,\n}: DrawerProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('drawer');\n\n if (!visible) {\n return null;\n }\n\n return (\n <Portal layer=\"drawer\" visible={visible}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={closeOnBackdrop ? onDismiss : undefined}\n style={{\n backgroundColor: theme.semantics.neutral.text,\n bottom: 0,\n left: 0,\n opacity: animation.backdropOpacity,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <Box\n pointerEvents=\"box-none\"\n style={{\n flex: 1,\n justifyContent: 'flex-start',\n }}\n >\n <View\n accessible\n accessibilityViewIsModal\n style={{\n alignSelf: position === 'left' ? 'flex-start' : 'flex-end',\n height: '100%',\n maxWidth: 420,\n width: '88%',\n }}\n >\n <Surface\n p=\"l\"\n style={{\n height: '100%',\n shadowOpacity: 0.14,\n shadowRadius: 14,\n shadowOffset: { width: position === 'left' ? 4 : -4, height: 0 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n {children}\n </Surface>\n </View>\n </Box>\n </FocusScope>\n </View>\n </Portal>\n );\n}\n"]}
1
+ {"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/components/drawer/Drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,SAAS,EACT,QAAQ,GAAG,OAAO,EAClB,QAAQ,EACR,eAAe,GAAG,IAAI,EACtB,iBAAiB,GAAG,SAAS,EAC7B,MAAM,GACM;IACZ,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CACtC;MAAA,CAAC,IAAI,CACH,aAAa,CAAC,UAAU,CACxB,KAAK,CAAC,CAAC;YACL,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;SACP,CAAC,CAEF;QAAA,CAAC,SAAS,CACR,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CACvE,KAAK,CAAC,CAAC;YACL,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;YAC7C,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,SAAS,CAAC,eAAe;YAClC,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;SACP,CAAC,CACF,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,EAEpD;QAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,OAAO,CAAC,CAChB,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1C,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAE/C;UAAA,CAAC,GAAG,CACF,aAAa,CAAC,UAAU,CACxB,KAAK,CAAC,CAAC;YACL,IAAI,EAAE,CAAC;YACP,cAAc,EAAE,YAAY;SAC7B,CAAC,CAEF;YAAA,CAAC,IAAI,CACH,UAAU,CACV,wBAAwB,CACxB,KAAK,CAAC,CAAC;YACL,SAAS,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;YAC1D,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,GAAG;YACb,KAAK,EAAE,KAAK;SACb,CAAC,CAEF;cAAA,CAAC,OAAO,CACN,CAAC,CAAC,GAAG,CACL,KAAK,CAAC,CAAC;YACL,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACjE,CAAC,CACF,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,OAAO,CAAC,QAAQ,CAEhB;gBAAA,CAAC,QAAQ,CACX;cAAA,EAAE,OAAO,CACX;YAAA,EAAE,IAAI,CACR;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,UAAU,CACd;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,MAAM,CAAC,CACV,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Surface } from '../../layout';\nimport { useTheme } from '../../theme/ThemeContext';\nimport type { DrawerProps } from './types';\n\nexport function Drawer({\n visible,\n onDismiss,\n position = 'right',\n children,\n closeOnBackdrop = true,\n interactionPolicy = 'enabled',\n testID,\n}: DrawerProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('drawer');\n const passive = interactionPolicy === 'passive';\n\n if (!visible) {\n return null;\n }\n\n return (\n <Portal layer=\"drawer\" visible={visible}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={passive ? undefined : closeOnBackdrop ? onDismiss : undefined}\n style={{\n backgroundColor: theme.semantics.neutral.text,\n bottom: 0,\n left: 0,\n opacity: animation.backdropOpacity,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={passive ? undefined : onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <Box\n pointerEvents=\"box-none\"\n style={{\n flex: 1,\n justifyContent: 'flex-start',\n }}\n >\n <View\n accessible\n accessibilityViewIsModal\n style={{\n alignSelf: position === 'left' ? 'flex-start' : 'flex-end',\n height: '100%',\n maxWidth: 420,\n width: '88%',\n }}\n >\n <Surface\n p=\"l\"\n style={{\n height: '100%',\n shadowOpacity: 0.14,\n shadowRadius: 14,\n shadowOffset: { width: position === 'left' ? 4 : -4, height: 0 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n {children}\n </Surface>\n </View>\n </Box>\n </FocusScope>\n </View>\n </Portal>\n );\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  import type React from 'react';
2
+ import type { InteractionPolicy } from '../../interactionPolicy';
2
3
  export interface DrawerProps {
3
4
  visible: boolean;
4
5
  onDismiss?: (() => void) | undefined;
5
6
  position?: 'left' | 'right';
6
7
  children?: React.ReactNode;
7
8
  closeOnBackdrop?: boolean;
9
+ interactionPolicy?: InteractionPolicy;
8
10
  testID?: string;
9
11
  }
10
12
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nexport interface DrawerProps {\n visible: boolean;\n onDismiss?: (() => void) | undefined;\n position?: 'left' | 'right';\n children?: React.ReactNode;\n closeOnBackdrop?: boolean;\n testID?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/drawer/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { InteractionPolicy } from '../../interactionPolicy';\n\nexport interface DrawerProps {\n visible: boolean;\n onDismiss?: (() => void) | undefined;\n position?: 'left' | 'right';\n children?: React.ReactNode;\n closeOnBackdrop?: boolean;\n interactionPolicy?: InteractionPolicy;\n testID?: string;\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { MenuProps } from './types';
3
- export declare function Menu({ trigger, actions, dismiss, closeOnSelect, testID }: MenuProps): React.JSX.Element;
3
+ export declare function Menu({ trigger, actions, dismiss, closeOnSelect, interactionPolicy, testID, }: MenuProps): React.JSX.Element;
4
4
  //# sourceMappingURL=Menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,SAAS,CAAC;AA2CrD,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAoB,EAAE,MAAM,EAAE,EAAE,SAAS,qBAwJ1F"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,SAAS,CAAC;AA2CrD,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAoB,EACpB,iBAA6B,EAC7B,MAAM,GACP,EAAE,SAAS,qBA6JX"}
@@ -32,7 +32,7 @@ function renderActionContent(action, active) {
32
32
  {action.trailing ? <Box>{action.trailing}</Box> : null}
33
33
  </Inline>);
34
34
  }
35
- export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }) {
35
+ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, interactionPolicy = 'enabled', testID, }) {
36
36
  const { theme } = useTheme();
37
37
  const { bindKeydown } = useFocusManager();
38
38
  const animation = resolveOverlayAnimation('menu');
@@ -40,6 +40,7 @@ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }
40
40
  const [open, setOpen] = React.useState(false);
41
41
  const [layout, setLayout] = React.useState(null);
42
42
  const [activeIndex, setActiveIndex] = React.useState(0);
43
+ const passive = interactionPolicy === 'passive';
43
44
  const closeMenu = React.useCallback(() => {
44
45
  setOpen(false);
45
46
  if (dismiss) {
@@ -68,6 +69,9 @@ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }
68
69
  return undefined;
69
70
  }
70
71
  return bindKeydown((event) => {
72
+ if (passive) {
73
+ return;
74
+ }
71
75
  const { key } = event;
72
76
  if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {
73
77
  event.preventDefault();
@@ -85,9 +89,9 @@ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }
85
89
  closeMenu();
86
90
  }
87
91
  });
88
- }, [activateAction, actions, activeIndex, bindKeydown, closeMenu, open]);
92
+ }, [activateAction, actions, activeIndex, bindKeydown, closeMenu, open, passive]);
89
93
  return (<View collapsable={false} ref={anchorRef}>
90
- <ButtonBase onPress={open ? closeMenu : openMenu} testID={testID ? `${testID}-trigger` : undefined}>
94
+ <ButtonBase onPress={passive ? undefined : open ? closeMenu : openMenu} testID={testID ? `${testID}-trigger` : undefined}>
91
95
  {trigger}
92
96
  </ButtonBase>
93
97
  <Portal layer="menu" visible={open && Boolean(layout)}>
@@ -98,14 +102,14 @@ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }
98
102
  right: 0,
99
103
  top: 0,
100
104
  }}>
101
- <Pressable onPress={closeMenu} style={{
105
+ <Pressable onPress={passive ? undefined : closeMenu} style={{
102
106
  bottom: 0,
103
107
  left: 0,
104
108
  position: 'absolute',
105
109
  right: 0,
106
110
  top: 0,
107
111
  }}/>
108
- <FocusScope active={open} onEscape={closeMenu}>
112
+ <FocusScope active={open} onEscape={passive ? undefined : closeMenu}>
109
113
  <View style={{
110
114
  left: layout?.x ?? 0,
111
115
  position: 'absolute',
@@ -120,7 +124,7 @@ export function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }
120
124
  {actions.map((action, index) => {
121
125
  const active = index === activeIndex;
122
126
  const selected = action.selected ?? active;
123
- return (<Pressable accessibilityRole="menuitem" accessibilityState={{ disabled: action.disabled, selected }} disabled={action.disabled} key={action.id} onPress={() => activateAction(action)}>
127
+ return (<Pressable accessibilityRole="menuitem" accessibilityState={{ disabled: action.disabled, selected }} disabled={action.disabled} key={action.id} onPress={passive ? undefined : () => activateAction(action)}>
124
128
  <Box px="m" py="s" radius="s" style={{
125
129
  backgroundColor: selected
126
130
  ? theme.semantics.action.neutral.softBg
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { type LayoutRectangle, Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { useFocusManager } from '../../internal/focus/useFocusManager';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Inline, Stack, Surface } from '../../layout';\nimport { ButtonBase } from '../../primitives/button-base';\nimport { Text } from '../../primitives/text';\nimport { useTheme } from '../../theme/ThemeContext';\nimport { resolveNextMenuIndex } from './navigation';\nimport type { MenuAction, MenuProps } from './types';\n\ninterface MeasurableNode {\n measureInWindow?: (\n callback: (x: number, y: number, width: number, height: number) => void,\n ) => void;\n}\n\nfunction measureNode(node: unknown, callback: (layout: LayoutRectangle) => void) {\n const measurableNode = node as MeasurableNode | null;\n measurableNode?.measureInWindow?.((x, y, width, height) => {\n callback({ height, width, x, y });\n });\n}\n\nfunction renderActionContent(action: MenuAction, active: boolean) {\n const titleColor =\n action.intent === 'danger' ? 'danger' : active || action.selected ? 'neutral' : undefined;\n\n return (\n <Inline align=\"center\" gap=\"s\" justify=\"space-between\" wrap=\"nowrap\">\n {action.leading ? <Box>{action.leading}</Box> : null}\n <Box flex={1}>\n <Stack gap=\"xxs\">\n <Text\n color={titleColor}\n variant=\"bodySmall\"\n weight={action.selected ? 'semiBold' : 'medium'}\n >\n {action.title}\n </Text>\n {action.description ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {action.description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n {action.trailing ? <Box>{action.trailing}</Box> : null}\n </Inline>\n );\n}\n\nexport function Menu({ trigger, actions, dismiss, closeOnSelect = true, testID }: MenuProps) {\n const { theme } = useTheme();\n const { bindKeydown } = useFocusManager();\n const animation = resolveOverlayAnimation('menu');\n const anchorRef = React.useRef<View | null>(null);\n const [open, setOpen] = React.useState(false);\n const [layout, setLayout] = React.useState<LayoutRectangle | null>(null);\n const [activeIndex, setActiveIndex] = React.useState(0);\n\n const closeMenu = React.useCallback(() => {\n setOpen(false);\n if (dismiss) {\n dismiss();\n }\n }, [dismiss]);\n\n const activateAction = React.useCallback(\n (action: MenuAction) => {\n if (action.disabled) {\n return;\n }\n\n if (action.activate) {\n action.activate();\n }\n\n if (closeOnSelect) {\n closeMenu();\n }\n },\n [closeMenu, closeOnSelect],\n );\n\n const openMenu = React.useCallback(() => {\n measureNode(anchorRef.current, setLayout);\n const firstEnabledIndex = actions.findIndex((action) => !action.disabled);\n setActiveIndex(firstEnabledIndex === -1 ? 0 : firstEnabledIndex);\n setOpen(true);\n }, [actions]);\n\n React.useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n return bindKeydown((event) => {\n const { key } = event;\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {\n event.preventDefault();\n setActiveIndex((current) => resolveNextMenuIndex(actions, current, key));\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const activeAction = actions[activeIndex];\n if (activeAction) {\n activateAction(activeAction);\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n closeMenu();\n }\n });\n }, [activateAction, actions, activeIndex, bindKeydown, closeMenu, open]);\n\n return (\n <View collapsable={false} ref={anchorRef}>\n <ButtonBase\n onPress={open ? closeMenu : openMenu}\n testID={testID ? `${testID}-trigger` : undefined}\n >\n {trigger}\n </ButtonBase>\n <Portal layer=\"menu\" visible={open && Boolean(layout)}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={closeMenu}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n />\n <FocusScope active={open} onEscape={closeMenu}>\n <View\n style={{\n left: layout?.x ?? 0,\n position: 'absolute',\n top: (layout?.y ?? 0) + (layout?.height ?? 0) + animation.offset,\n }}\n >\n <Surface\n accessibilityRole=\"menu\"\n p=\"xs\"\n style={{\n minWidth: Math.max(layout?.width ?? 0, 220),\n shadowOpacity: 0.12,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 6 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n {actions.map((action, index) => {\n const active = index === activeIndex;\n const selected = action.selected ?? active;\n\n return (\n <Pressable\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: action.disabled, selected }}\n disabled={action.disabled}\n key={action.id}\n onPress={() => activateAction(action)}\n >\n <Box\n px=\"m\"\n py=\"s\"\n radius=\"s\"\n style={{\n backgroundColor: selected\n ? theme.semantics.action.neutral.softBg\n : 'transparent',\n opacity: action.disabled ? 0.56 : 1,\n }}\n testID={testID ? `${testID}-item-${action.id}` : undefined}\n >\n {renderActionContent(action, active)}\n </Box>\n </Pressable>\n );\n })}\n </Surface>\n </View>\n </FocusScope>\n </View>\n </Portal>\n </View>\n );\n}\n"]}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { type LayoutRectangle, Pressable, View } from 'react-native';\n\nimport { FocusScope } from '../../internal/focus/FocusScope';\nimport { useFocusManager } from '../../internal/focus/useFocusManager';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { Box, Inline, Stack, Surface } from '../../layout';\nimport { ButtonBase } from '../../primitives/button-base';\nimport { Text } from '../../primitives/text';\nimport { useTheme } from '../../theme/ThemeContext';\nimport { resolveNextMenuIndex } from './navigation';\nimport type { MenuAction, MenuProps } from './types';\n\ninterface MeasurableNode {\n measureInWindow?: (\n callback: (x: number, y: number, width: number, height: number) => void,\n ) => void;\n}\n\nfunction measureNode(node: unknown, callback: (layout: LayoutRectangle) => void) {\n const measurableNode = node as MeasurableNode | null;\n measurableNode?.measureInWindow?.((x, y, width, height) => {\n callback({ height, width, x, y });\n });\n}\n\nfunction renderActionContent(action: MenuAction, active: boolean) {\n const titleColor =\n action.intent === 'danger' ? 'danger' : active || action.selected ? 'neutral' : undefined;\n\n return (\n <Inline align=\"center\" gap=\"s\" justify=\"space-between\" wrap=\"nowrap\">\n {action.leading ? <Box>{action.leading}</Box> : null}\n <Box flex={1}>\n <Stack gap=\"xxs\">\n <Text\n color={titleColor}\n variant=\"bodySmall\"\n weight={action.selected ? 'semiBold' : 'medium'}\n >\n {action.title}\n </Text>\n {action.description ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {action.description}\n </Text>\n ) : null}\n </Stack>\n </Box>\n {action.trailing ? <Box>{action.trailing}</Box> : null}\n </Inline>\n );\n}\n\nexport function Menu({\n trigger,\n actions,\n dismiss,\n closeOnSelect = true,\n interactionPolicy = 'enabled',\n testID,\n}: MenuProps) {\n const { theme } = useTheme();\n const { bindKeydown } = useFocusManager();\n const animation = resolveOverlayAnimation('menu');\n const anchorRef = React.useRef<View | null>(null);\n const [open, setOpen] = React.useState(false);\n const [layout, setLayout] = React.useState<LayoutRectangle | null>(null);\n const [activeIndex, setActiveIndex] = React.useState(0);\n const passive = interactionPolicy === 'passive';\n\n const closeMenu = React.useCallback(() => {\n setOpen(false);\n if (dismiss) {\n dismiss();\n }\n }, [dismiss]);\n\n const activateAction = React.useCallback(\n (action: MenuAction) => {\n if (action.disabled) {\n return;\n }\n\n if (action.activate) {\n action.activate();\n }\n\n if (closeOnSelect) {\n closeMenu();\n }\n },\n [closeMenu, closeOnSelect],\n );\n\n const openMenu = React.useCallback(() => {\n measureNode(anchorRef.current, setLayout);\n const firstEnabledIndex = actions.findIndex((action) => !action.disabled);\n setActiveIndex(firstEnabledIndex === -1 ? 0 : firstEnabledIndex);\n setOpen(true);\n }, [actions]);\n\n React.useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n return bindKeydown((event) => {\n if (passive) {\n return;\n }\n\n const { key } = event;\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {\n event.preventDefault();\n setActiveIndex((current) => resolveNextMenuIndex(actions, current, key));\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const activeAction = actions[activeIndex];\n if (activeAction) {\n activateAction(activeAction);\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n closeMenu();\n }\n });\n }, [activateAction, actions, activeIndex, bindKeydown, closeMenu, open, passive]);\n\n return (\n <View collapsable={false} ref={anchorRef}>\n <ButtonBase\n onPress={passive ? undefined : open ? closeMenu : openMenu}\n testID={testID ? `${testID}-trigger` : undefined}\n >\n {trigger}\n </ButtonBase>\n <Portal layer=\"menu\" visible={open && Boolean(layout)}>\n <View\n pointerEvents=\"box-none\"\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Pressable\n onPress={passive ? undefined : closeMenu}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n />\n <FocusScope active={open} onEscape={passive ? undefined : closeMenu}>\n <View\n style={{\n left: layout?.x ?? 0,\n position: 'absolute',\n top: (layout?.y ?? 0) + (layout?.height ?? 0) + animation.offset,\n }}\n >\n <Surface\n accessibilityRole=\"menu\"\n p=\"xs\"\n style={{\n minWidth: Math.max(layout?.width ?? 0, 220),\n shadowOpacity: 0.12,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 6 },\n }}\n testID={testID}\n variant=\"raised\"\n >\n {actions.map((action, index) => {\n const active = index === activeIndex;\n const selected = action.selected ?? active;\n\n return (\n <Pressable\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: action.disabled, selected }}\n disabled={action.disabled}\n key={action.id}\n onPress={passive ? undefined : () => activateAction(action)}\n >\n <Box\n px=\"m\"\n py=\"s\"\n radius=\"s\"\n style={{\n backgroundColor: selected\n ? theme.semantics.action.neutral.softBg\n : 'transparent',\n opacity: action.disabled ? 0.56 : 1,\n }}\n testID={testID ? `${testID}-item-${action.id}` : undefined}\n >\n {renderActionContent(action, active)}\n </Box>\n </Pressable>\n );\n })}\n </Surface>\n </View>\n </FocusScope>\n </View>\n </Portal>\n </View>\n );\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import type { InteractionPolicy } from '../../interactionPolicy';
2
3
  export type MenuActionIntent = 'default' | 'danger';
3
4
  export interface MenuAction {
4
5
  id: string;
@@ -16,6 +17,7 @@ export interface MenuProps {
16
17
  actions: readonly MenuAction[];
17
18
  dismiss?: () => void;
18
19
  closeOnSelect?: boolean;
20
+ interactionPolicy?: InteractionPolicy;
19
21
  testID?: string;
20
22
  }
21
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nexport type MenuActionIntent = 'default' | 'danger';\n\nexport interface MenuAction {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n intent?: MenuActionIntent;\n disabled?: boolean;\n selected?: boolean;\n activate?: () => void;\n}\n\nexport interface MenuProps {\n trigger?: React.ReactNode;\n actions: readonly MenuAction[];\n dismiss?: () => void;\n closeOnSelect?: boolean;\n testID?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/menu/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { InteractionPolicy } from '../../interactionPolicy';\n\nexport type MenuActionIntent = 'default' | 'danger';\n\nexport interface MenuAction {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n leading?: React.ReactNode;\n trailing?: React.ReactNode;\n intent?: MenuActionIntent;\n disabled?: boolean;\n selected?: boolean;\n activate?: () => void;\n}\n\nexport interface MenuProps {\n trigger?: React.ReactNode;\n actions: readonly MenuAction[];\n dismiss?: () => void;\n closeOnSelect?: boolean;\n interactionPolicy?: InteractionPolicy;\n testID?: string;\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { ModalProps } from './types';
3
- export declare function Modal({ visible, onDismiss, children, closeOnBackdrop, testID, }: ModalProps): React.JSX.Element | null;
3
+ export declare function Modal({ visible, onDismiss, children, closeOnBackdrop, interactionPolicy, testID, }: ModalProps): React.JSX.Element | null;
4
4
  //# sourceMappingURL=Modal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,eAAsB,EACtB,MAAM,GACP,EAAE,UAAU,4BAsEZ"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,eAAsB,EACtB,iBAA6B,EAC7B,MAAM,GACP,EAAE,UAAU,4BAuEZ"}