@ankhorage/surface 4.4.1 → 5.0.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 (235) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -2
  3. package/dist/features/bottom-sheet/BottomSheetProvider.js +8 -6
  4. package/dist/features/bottom-sheet/BottomSheetProvider.js.map +1 -1
  5. package/dist/features/bottom-sheet/public.d.ts +2 -1
  6. package/dist/features/bottom-sheet/public.d.ts.map +1 -1
  7. package/dist/features/bottom-sheet/public.js +1 -0
  8. package/dist/features/bottom-sheet/public.js.map +1 -1
  9. package/dist/{components/modal → features/modal/adapters/inbound}/Modal.d.ts +2 -1
  10. package/dist/features/modal/adapters/inbound/Modal.d.ts.map +1 -0
  11. package/dist/features/modal/adapters/inbound/Modal.js +51 -0
  12. package/dist/features/modal/adapters/inbound/Modal.js.map +1 -0
  13. package/dist/features/modal/public.d.ts +3 -0
  14. package/dist/features/modal/public.d.ts.map +1 -0
  15. package/dist/features/modal/public.js +2 -0
  16. package/dist/features/modal/public.js.map +1 -0
  17. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts +5 -0
  18. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts.map +1 -0
  19. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js +85 -0
  20. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js.map +1 -0
  21. package/dist/features/popover-menu/composition/usePopoverMenuController.d.ts +19 -0
  22. package/dist/features/popover-menu/composition/usePopoverMenuController.d.ts.map +1 -0
  23. package/dist/features/popover-menu/composition/usePopoverMenuController.js +35 -0
  24. package/dist/features/popover-menu/composition/usePopoverMenuController.js.map +1 -0
  25. package/dist/features/popover-menu/public.d.ts +3 -0
  26. package/dist/features/popover-menu/public.d.ts.map +1 -0
  27. package/dist/features/popover-menu/public.js +2 -0
  28. package/dist/features/popover-menu/public.js.map +1 -0
  29. package/dist/features/popover-menu/utils/resolveNextMenuIndex.d.ts +5 -0
  30. package/dist/features/popover-menu/utils/resolveNextMenuIndex.d.ts.map +1 -0
  31. package/dist/features/popover-menu/utils/resolveNextMenuIndex.js +18 -0
  32. package/dist/features/popover-menu/utils/resolveNextMenuIndex.js.map +1 -0
  33. package/dist/features/tabs/adapters/inbound/Tab.d.ts +5 -0
  34. package/dist/features/tabs/adapters/inbound/Tab.d.ts.map +1 -0
  35. package/dist/features/tabs/adapters/inbound/Tab.js +33 -0
  36. package/dist/features/tabs/adapters/inbound/Tab.js.map +1 -0
  37. package/dist/features/tabs/adapters/inbound/TabList.d.ts +5 -0
  38. package/dist/features/tabs/adapters/inbound/TabList.d.ts.map +1 -0
  39. package/dist/features/tabs/adapters/inbound/TabList.js +42 -0
  40. package/dist/features/tabs/adapters/inbound/TabList.js.map +1 -0
  41. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts +5 -0
  42. package/dist/features/tabs/adapters/inbound/TabPanel.d.ts.map +1 -0
  43. package/dist/features/tabs/adapters/inbound/TabPanel.js +14 -0
  44. package/dist/features/tabs/adapters/inbound/TabPanel.js.map +1 -0
  45. package/dist/features/tabs/adapters/inbound/Tabs.d.ts +5 -0
  46. package/dist/features/tabs/adapters/inbound/Tabs.d.ts.map +1 -0
  47. package/dist/features/tabs/adapters/inbound/Tabs.js +12 -0
  48. package/dist/features/tabs/adapters/inbound/Tabs.js.map +1 -0
  49. package/dist/features/tabs/composition/TabsContext.d.ts +4 -0
  50. package/dist/features/tabs/composition/TabsContext.d.ts.map +1 -0
  51. package/dist/features/tabs/composition/TabsContext.js +3 -0
  52. package/dist/features/tabs/composition/TabsContext.js.map +1 -0
  53. package/dist/features/tabs/composition/useTabRegistration.d.ts +7 -0
  54. package/dist/features/tabs/composition/useTabRegistration.d.ts.map +1 -0
  55. package/dist/features/tabs/composition/useTabRegistration.js +20 -0
  56. package/dist/features/tabs/composition/useTabRegistration.js.map +1 -0
  57. package/dist/features/tabs/composition/useTabsContext.d.ts +4 -0
  58. package/dist/features/tabs/composition/useTabsContext.d.ts.map +1 -0
  59. package/dist/{components/tabs/context.js → features/tabs/composition/useTabsContext.js} +4 -4
  60. package/dist/features/tabs/composition/useTabsContext.js.map +1 -0
  61. package/dist/features/tabs/composition/useTabsController.d.ts +4 -0
  62. package/dist/features/tabs/composition/useTabsController.d.ts.map +1 -0
  63. package/dist/features/tabs/composition/useTabsController.js +43 -0
  64. package/dist/features/tabs/composition/useTabsController.js.map +1 -0
  65. package/dist/features/tabs/public.d.ts +6 -0
  66. package/dist/features/tabs/public.d.ts.map +1 -0
  67. package/dist/features/tabs/public.js +5 -0
  68. package/dist/features/tabs/public.js.map +1 -0
  69. package/dist/features/tabs/utils/resolveNextTabValue.d.ts +4 -0
  70. package/dist/features/tabs/utils/resolveNextTabValue.d.ts.map +1 -0
  71. package/dist/{components/tabs/navigation.js → features/tabs/utils/resolveNextTabValue.js} +10 -13
  72. package/dist/features/tabs/utils/resolveNextTabValue.js.map +1 -0
  73. package/dist/features/tabs/utils/resolveTabElementId.d.ts +3 -0
  74. package/dist/features/tabs/utils/resolveTabElementId.d.ts.map +1 -0
  75. package/dist/features/tabs/utils/resolveTabElementId.js +10 -0
  76. package/dist/features/tabs/utils/resolveTabElementId.js.map +1 -0
  77. package/dist/features/tooltip/adapters/inbound/Tooltip.d.ts +5 -0
  78. package/dist/features/tooltip/adapters/inbound/Tooltip.d.ts.map +1 -0
  79. package/dist/features/tooltip/adapters/inbound/Tooltip.js +25 -0
  80. package/dist/features/tooltip/adapters/inbound/Tooltip.js.map +1 -0
  81. package/dist/features/tooltip/composition/useTooltipVisibility.d.ts +9 -0
  82. package/dist/features/tooltip/composition/useTooltipVisibility.d.ts.map +1 -0
  83. package/dist/features/tooltip/composition/useTooltipVisibility.js +25 -0
  84. package/dist/features/tooltip/composition/useTooltipVisibility.js.map +1 -0
  85. package/dist/features/tooltip/public.d.ts +3 -0
  86. package/dist/features/tooltip/public.d.ts.map +1 -0
  87. package/dist/features/tooltip/public.js +2 -0
  88. package/dist/features/tooltip/public.js.map +1 -0
  89. package/dist/index.d.ts +8 -8
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +4 -4
  92. package/dist/index.js.map +1 -1
  93. package/dist/types/bottomSheet.d.ts +3 -0
  94. package/dist/types/bottomSheet.d.ts.map +1 -1
  95. package/dist/types/bottomSheet.js.map +1 -1
  96. package/dist/{components/modal/types.d.ts → types/modal.d.ts} +2 -2
  97. package/dist/types/modal.d.ts.map +1 -0
  98. package/dist/types/modal.js +2 -0
  99. package/dist/types/modal.js.map +1 -0
  100. package/dist/types/popoverMenu.d.ts +24 -0
  101. package/dist/types/popoverMenu.d.ts.map +1 -0
  102. package/dist/types/popoverMenu.js +2 -0
  103. package/dist/types/popoverMenu.js.map +1 -0
  104. package/dist/types/tabs.d.ts +43 -0
  105. package/dist/types/tabs.d.ts.map +1 -0
  106. package/dist/types/tabs.js +2 -0
  107. package/dist/types/tabs.js.map +1 -0
  108. package/dist/{components/tooltip/types.d.ts → types/tooltip.d.ts} +2 -2
  109. package/dist/types/tooltip.d.ts.map +1 -0
  110. package/dist/types/tooltip.js +2 -0
  111. package/dist/types/tooltip.js.map +1 -0
  112. package/package.json +1 -1
  113. package/src/features/bottom-sheet/BottomSheetProvider.tsx +13 -8
  114. package/src/features/bottom-sheet/public.test.ts +23 -0
  115. package/src/features/bottom-sheet/public.ts +12 -1
  116. package/src/features/modal/adapters/inbound/Modal.tsx +74 -0
  117. package/src/features/modal/public.ts +2 -0
  118. package/src/features/popover-menu/adapters/inbound/PopoverMenu.tsx +201 -0
  119. package/src/features/popover-menu/composition/usePopoverMenuController.ts +55 -0
  120. package/src/features/popover-menu/public.test.ts +13 -0
  121. package/src/features/popover-menu/public.ts +6 -0
  122. package/src/{components/menu/navigation.test.ts → features/popover-menu/utils/resolveNextMenuIndex.test.ts} +4 -4
  123. package/src/features/popover-menu/utils/resolveNextMenuIndex.ts +21 -0
  124. package/src/features/tabs/adapters/inbound/Tab.tsx +67 -0
  125. package/src/features/tabs/adapters/inbound/TabList.tsx +50 -0
  126. package/src/{components/tabs → features/tabs/adapters/inbound}/TabPanel.tsx +6 -10
  127. package/src/features/tabs/adapters/inbound/Tabs.tsx +17 -0
  128. package/src/features/tabs/composition/TabsContext.tsx +5 -0
  129. package/src/features/tabs/composition/useTabRegistration.ts +27 -0
  130. package/src/features/tabs/composition/useTabsContext.ts +13 -0
  131. package/src/features/tabs/composition/useTabsController.ts +55 -0
  132. package/src/features/tabs/public.ts +5 -0
  133. package/src/{components/tabs/navigation.test.ts → features/tabs/utils/resolveNextTabValue.test.ts} +2 -2
  134. package/src/features/tabs/utils/resolveNextTabValue.ts +24 -0
  135. package/src/features/tabs/utils/resolveTabElementId.test.ts +19 -0
  136. package/src/features/tabs/utils/resolveTabElementId.ts +14 -0
  137. package/src/features/tooltip/adapters/inbound/Tooltip.tsx +56 -0
  138. package/src/features/tooltip/composition/useTooltipVisibility.ts +29 -0
  139. package/src/features/tooltip/public.test.ts +11 -0
  140. package/src/features/tooltip/public.ts +2 -0
  141. package/src/index.test.ts +12 -5
  142. package/src/index.ts +12 -8
  143. package/src/types/bottomSheet.ts +4 -0
  144. package/src/{components/modal/types.ts → types/modal.ts} +1 -1
  145. package/src/types/popoverMenu.ts +27 -0
  146. package/src/types/tabs.ts +51 -0
  147. package/src/{components/tooltip/types.ts → types/tooltip.ts} +1 -1
  148. package/dist/components/menu/Menu.d.ts +0 -4
  149. package/dist/components/menu/Menu.d.ts.map +0 -1
  150. package/dist/components/menu/Menu.js +0 -152
  151. package/dist/components/menu/Menu.js.map +0 -1
  152. package/dist/components/menu/index.d.ts +0 -3
  153. package/dist/components/menu/index.d.ts.map +0 -1
  154. package/dist/components/menu/index.js +0 -2
  155. package/dist/components/menu/index.js.map +0 -1
  156. package/dist/components/menu/navigation.d.ts +0 -4
  157. package/dist/components/menu/navigation.d.ts.map +0 -1
  158. package/dist/components/menu/navigation.js +0 -25
  159. package/dist/components/menu/navigation.js.map +0 -1
  160. package/dist/components/menu/types.d.ts +0 -23
  161. package/dist/components/menu/types.d.ts.map +0 -1
  162. package/dist/components/menu/types.js +0 -2
  163. package/dist/components/menu/types.js.map +0 -1
  164. package/dist/components/modal/Modal.d.ts.map +0 -1
  165. package/dist/components/modal/Modal.js +0 -59
  166. package/dist/components/modal/Modal.js.map +0 -1
  167. package/dist/components/modal/index.d.ts +0 -3
  168. package/dist/components/modal/index.d.ts.map +0 -1
  169. package/dist/components/modal/index.js +0 -2
  170. package/dist/components/modal/index.js.map +0 -1
  171. package/dist/components/modal/types.d.ts.map +0 -1
  172. package/dist/components/modal/types.js +0 -2
  173. package/dist/components/modal/types.js.map +0 -1
  174. package/dist/components/tabs/Tab.d.ts +0 -4
  175. package/dist/components/tabs/Tab.d.ts.map +0 -1
  176. package/dist/components/tabs/Tab.js +0 -48
  177. package/dist/components/tabs/Tab.js.map +0 -1
  178. package/dist/components/tabs/TabList.d.ts +0 -4
  179. package/dist/components/tabs/TabList.d.ts.map +0 -1
  180. package/dist/components/tabs/TabList.js +0 -37
  181. package/dist/components/tabs/TabList.js.map +0 -1
  182. package/dist/components/tabs/TabPanel.d.ts +0 -4
  183. package/dist/components/tabs/TabPanel.d.ts.map +0 -1
  184. package/dist/components/tabs/TabPanel.js +0 -16
  185. package/dist/components/tabs/TabPanel.js.map +0 -1
  186. package/dist/components/tabs/Tabs.d.ts +0 -4
  187. package/dist/components/tabs/Tabs.d.ts.map +0 -1
  188. package/dist/components/tabs/Tabs.js +0 -54
  189. package/dist/components/tabs/Tabs.js.map +0 -1
  190. package/dist/components/tabs/a11y.d.ts +0 -3
  191. package/dist/components/tabs/a11y.d.ts.map +0 -1
  192. package/dist/components/tabs/a11y.js +0 -13
  193. package/dist/components/tabs/a11y.js.map +0 -1
  194. package/dist/components/tabs/context.d.ts +0 -20
  195. package/dist/components/tabs/context.d.ts.map +0 -1
  196. package/dist/components/tabs/context.js.map +0 -1
  197. package/dist/components/tabs/index.d.ts +0 -6
  198. package/dist/components/tabs/index.d.ts.map +0 -1
  199. package/dist/components/tabs/index.js +0 -5
  200. package/dist/components/tabs/index.js.map +0 -1
  201. package/dist/components/tabs/navigation.d.ts +0 -3
  202. package/dist/components/tabs/navigation.d.ts.map +0 -1
  203. package/dist/components/tabs/navigation.js.map +0 -1
  204. package/dist/components/tabs/types.d.ts +0 -26
  205. package/dist/components/tabs/types.d.ts.map +0 -1
  206. package/dist/components/tabs/types.js +0 -2
  207. package/dist/components/tabs/types.js.map +0 -1
  208. package/dist/components/tooltip/Tooltip.d.ts +0 -4
  209. package/dist/components/tooltip/Tooltip.d.ts.map +0 -1
  210. package/dist/components/tooltip/Tooltip.js +0 -75
  211. package/dist/components/tooltip/Tooltip.js.map +0 -1
  212. package/dist/components/tooltip/index.d.ts +0 -3
  213. package/dist/components/tooltip/index.d.ts.map +0 -1
  214. package/dist/components/tooltip/index.js +0 -2
  215. package/dist/components/tooltip/index.js.map +0 -1
  216. package/dist/components/tooltip/types.d.ts.map +0 -1
  217. package/dist/components/tooltip/types.js +0 -2
  218. package/dist/components/tooltip/types.js.map +0 -1
  219. package/src/components/menu/Menu.tsx +0 -228
  220. package/src/components/menu/index.ts +0 -2
  221. package/src/components/menu/navigation.ts +0 -34
  222. package/src/components/menu/types.ts +0 -26
  223. package/src/components/modal/Modal.tsx +0 -96
  224. package/src/components/modal/index.ts +0 -2
  225. package/src/components/tabs/Tab.tsx +0 -89
  226. package/src/components/tabs/TabList.tsx +0 -51
  227. package/src/components/tabs/Tabs.tsx +0 -67
  228. package/src/components/tabs/a11y.test.ts +0 -15
  229. package/src/components/tabs/a11y.ts +0 -15
  230. package/src/components/tabs/context.tsx +0 -31
  231. package/src/components/tabs/index.ts +0 -5
  232. package/src/components/tabs/navigation.ts +0 -32
  233. package/src/components/tabs/types.ts +0 -30
  234. package/src/components/tooltip/Tooltip.tsx +0 -117
  235. package/src/components/tooltip/index.ts +0 -2
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import type { TabsProps } from './types';
3
- export declare function Tabs({ children, value, defaultValue, onValueChange, testID }: TabsProps): React.JSX.Element;
4
- //# sourceMappingURL=Tabs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,SAAS,qBA0DvF"}
@@ -1,54 +0,0 @@
1
- import React from 'react';
2
- import { Box } from '../../features/layout/public';
3
- import { useControllableState } from '../../internal/useControllableState';
4
- import { getTabId as resolveTabId, getTabPanelId as resolveTabPanelId } from './a11y';
5
- import { TabsContext } from './context';
6
- export function Tabs({ children, value, defaultValue, onValueChange, testID }) {
7
- const [activeValue, setActiveValue] = useControllableState({
8
- value,
9
- defaultValue,
10
- onChange: (nextValue) => {
11
- if (nextValue !== undefined) {
12
- onValueChange?.(nextValue);
13
- }
14
- },
15
- });
16
- const [focusedValue, setFocusedValue] = React.useState(undefined);
17
- const [tabs, setTabs] = React.useState([]);
18
- const registerTab = React.useCallback((tab) => {
19
- setTabs((current) => {
20
- return current.some((entry) => entry.value === tab.value)
21
- ? current.map((entry) => (entry.value === tab.value ? tab : entry))
22
- : [...current, tab];
23
- });
24
- }, []);
25
- const unregisterTab = React.useCallback((valueToRemove) => {
26
- setTabs((current) => current.filter((entry) => entry.value !== valueToRemove));
27
- }, []);
28
- React.useEffect(() => {
29
- if (activeValue !== undefined) {
30
- return;
31
- }
32
- const firstEnabledTab = tabs.find((entry) => !entry.disabled);
33
- if (firstEnabledTab) {
34
- setActiveValue(firstEnabledTab.value);
35
- }
36
- }, [activeValue, setActiveValue, tabs]);
37
- const contextValue = React.useMemo(() => ({
38
- activeValue,
39
- focusedValue,
40
- getPanelId: (tabValue) => resolveTabPanelId(testID, tabValue),
41
- getTabId: (tabValue) => resolveTabId(testID, tabValue),
42
- registerTab,
43
- setActiveValue: (nextValue) => {
44
- setActiveValue(nextValue);
45
- },
46
- setFocusedValue,
47
- tabs,
48
- unregisterTab,
49
- }), [activeValue, focusedValue, registerTab, setActiveValue, tabs, testID, unregisterTab]);
50
- return (<TabsContext value={contextValue}>
51
- <Box testID={testID}>{children}</Box>
52
- </TabsContext>);
53
- }
54
- //# sourceMappingURL=Tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Box } from '../../features/layout/public';\nimport { useControllableState } from '../../internal/useControllableState';\nimport { getTabId as resolveTabId, getTabPanelId as resolveTabPanelId } from './a11y';\nimport { type TabRegistration, TabsContext } from './context';\nimport type { TabsProps } from './types';\n\nexport function Tabs({ children, value, defaultValue, onValueChange, testID }: TabsProps) {\n const [activeValue, setActiveValue] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: (nextValue) => {\n if (nextValue !== undefined) {\n onValueChange?.(nextValue);\n }\n },\n });\n const [focusedValue, setFocusedValue] = React.useState<string | undefined>(undefined);\n const [tabs, setTabs] = React.useState<TabRegistration[]>([]);\n\n const registerTab = React.useCallback((tab: TabRegistration) => {\n setTabs((current) => {\n return current.some((entry) => entry.value === tab.value)\n ? current.map((entry) => (entry.value === tab.value ? tab : entry))\n : [...current, tab];\n });\n }, []);\n\n const unregisterTab = React.useCallback((valueToRemove: string) => {\n setTabs((current) => current.filter((entry) => entry.value !== valueToRemove));\n }, []);\n\n React.useEffect(() => {\n if (activeValue !== undefined) {\n return;\n }\n\n const firstEnabledTab = tabs.find((entry) => !entry.disabled);\n if (firstEnabledTab) {\n setActiveValue(firstEnabledTab.value);\n }\n }, [activeValue, setActiveValue, tabs]);\n\n const contextValue = React.useMemo(\n () => ({\n activeValue,\n focusedValue,\n getPanelId: (tabValue: string) => resolveTabPanelId(testID, tabValue),\n getTabId: (tabValue: string) => resolveTabId(testID, tabValue),\n registerTab,\n setActiveValue: (nextValue: string) => {\n setActiveValue(nextValue);\n },\n setFocusedValue,\n tabs,\n unregisterTab,\n }),\n [activeValue, focusedValue, registerTab, setActiveValue, tabs, testID, unregisterTab],\n );\n\n return (\n <TabsContext value={contextValue}>\n <Box testID={testID}>{children}</Box>\n </TabsContext>\n );\n}\n"]}
@@ -1,3 +0,0 @@
1
- export declare function getTabId(testID: string | undefined, value: string): string;
2
- export declare function getTabPanelId(testID: string | undefined, value: string): string;
3
- //# sourceMappingURL=a11y.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/a11y.ts"],"names":[],"mappings":"AAQA,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -1,13 +0,0 @@
1
- function sanitizeTabValue(value) {
2
- return value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-');
3
- }
4
- function createTabsIdBase(testID) {
5
- return testID ? `${testID}-tabs` : 'tabs';
6
- }
7
- export function getTabId(testID, value) {
8
- return `${createTabsIdBase(testID)}-tab-${sanitizeTabValue(value)}`;
9
- }
10
- export function getTabPanelId(testID, value) {
11
- return `${createTabsIdBase(testID)}-panel-${sanitizeTabValue(value)}`;
12
- }
13
- //# sourceMappingURL=a11y.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y.js","sourceRoot":"","sources":["../../../src/components/tabs/a11y.ts"],"names":[],"mappings":"AAAA,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B;IAClD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAA0B,EAAE,KAAa;IAChE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA0B,EAAE,KAAa;IACrE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC","sourcesContent":["function sanitizeTabValue(value: string): string {\n return value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-');\n}\n\nfunction createTabsIdBase(testID: string | undefined): string {\n return testID ? `${testID}-tabs` : 'tabs';\n}\n\nexport function getTabId(testID: string | undefined, value: string): string {\n return `${createTabsIdBase(testID)}-tab-${sanitizeTabValue(value)}`;\n}\n\nexport function getTabPanelId(testID: string | undefined, value: string): string {\n return `${createTabsIdBase(testID)}-panel-${sanitizeTabValue(value)}`;\n}\n"]}
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- export interface TabRegistration {
3
- disabled: boolean;
4
- focus: () => void;
5
- value: string;
6
- }
7
- export interface TabsContextValue {
8
- activeValue: string | undefined;
9
- focusedValue: string | undefined;
10
- getPanelId: (value: string) => string;
11
- getTabId: (value: string) => string;
12
- registerTab: (tab: TabRegistration) => void;
13
- setActiveValue: (value: string) => void;
14
- setFocusedValue: (value: string | undefined) => void;
15
- tabs: TabRegistration[];
16
- unregisterTab: (value: string) => void;
17
- }
18
- export declare const TabsContext: React.Context<TabsContextValue | null>;
19
- export declare function useTabsContext(): TabsContextValue;
20
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,WAAW,wCAAqD,CAAC;AAE9E,wBAAgB,cAAc,IAAI,gBAAgB,CAQjD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/components/tabs/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA0B,IAAI,CAAC,CAAC;AAE9E,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import React from 'react';\n\nexport interface TabRegistration {\n disabled: boolean;\n focus: () => void;\n value: string;\n}\n\nexport interface TabsContextValue {\n activeValue: string | undefined;\n focusedValue: string | undefined;\n getPanelId: (value: string) => string;\n getTabId: (value: string) => string;\n registerTab: (tab: TabRegistration) => void;\n setActiveValue: (value: string) => void;\n setFocusedValue: (value: string | undefined) => void;\n tabs: TabRegistration[];\n unregisterTab: (value: string) => void;\n}\n\nexport const TabsContext = React.createContext<TabsContextValue | null>(null);\n\nexport function useTabsContext(): TabsContextValue {\n const value = React.use(TabsContext);\n\n if (!value) {\n throw new Error('Tabs components must be used within <Tabs>.');\n }\n\n return value;\n}\n"]}
@@ -1,6 +0,0 @@
1
- export { Tab } from './Tab';
2
- export { TabList } from './TabList';
3
- export { TabPanel } from './TabPanel';
4
- export { Tabs } from './Tabs';
5
- export type { TabListProps, TabPanelProps, TabProps, TabsProps } from './types';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
@@ -1,5 +0,0 @@
1
- export { Tab } from './Tab';
2
- export { TabList } from './TabList';
3
- export { TabPanel } from './TabPanel';
4
- export { Tabs } from './Tabs';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC","sourcesContent":["export { Tab } from './Tab';\nexport { TabList } from './TabList';\nexport { TabPanel } from './TabPanel';\nexport { Tabs } from './Tabs';\nexport type { TabListProps, TabPanelProps, TabProps, TabsProps } from './types';\n"]}
@@ -1,3 +0,0 @@
1
- import type { TabRegistration } from './context';
2
- export declare function resolveNextTabValue(tabs: TabRegistration[], currentValue: string | undefined, key: 'ArrowLeft' | 'ArrowRight' | 'ArrowUp' | 'ArrowDown' | 'Home' | 'End'): string | undefined;
3
- //# sourceMappingURL=navigation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,eAAe,EAAE,EACvB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,GAAG,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,KAAK,GACzE,MAAM,GAAG,SAAS,CAyBpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../src/components/tabs/navigation.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CACjC,IAAuB,EACvB,YAAgC,EAChC,GAA0E;IAE1E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAC/B,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IAChF,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GACb,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS;QACtC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM;QAC9D,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IAE9C,OAAO,WAAW,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AACvC,CAAC","sourcesContent":["import type { TabRegistration } from './context';\n\nexport function resolveNextTabValue(\n tabs: TabRegistration[],\n currentValue: string | undefined,\n key: 'ArrowLeft' | 'ArrowRight' | 'ArrowUp' | 'ArrowDown' | 'Home' | 'End',\n): string | undefined {\n const enabledTabs = tabs.filter((tab) => !tab.disabled);\n if (enabledTabs.length === 0) {\n return undefined;\n }\n\n if (key === 'Home') {\n return enabledTabs[0]?.value;\n }\n\n if (key === 'End') {\n return enabledTabs[enabledTabs.length - 1]?.value;\n }\n\n const currentIndex = enabledTabs.findIndex((tab) => tab.value === currentValue);\n if (currentIndex === -1) {\n return enabledTabs[0]?.value;\n }\n\n const nextIndex =\n key === 'ArrowLeft' || key === 'ArrowUp'\n ? (currentIndex - 1 + enabledTabs.length) % enabledTabs.length\n : (currentIndex + 1) % enabledTabs.length;\n\n return enabledTabs[nextIndex]?.value;\n}\n"]}
@@ -1,26 +0,0 @@
1
- import type React from 'react';
2
- import type { InteractionPolicy } from '../../interactionPolicy';
3
- export interface TabsProps {
4
- children?: React.ReactNode;
5
- value?: string;
6
- defaultValue?: string;
7
- onValueChange?: ((value: string) => void) | undefined;
8
- testID?: string;
9
- }
10
- export interface TabListProps {
11
- children?: React.ReactNode;
12
- testID?: string;
13
- }
14
- export interface TabProps {
15
- value: string;
16
- children?: React.ReactNode;
17
- disabled?: boolean;
18
- interactionPolicy?: InteractionPolicy;
19
- testID?: string;
20
- }
21
- export interface TabPanelProps {
22
- value: string;
23
- children?: React.ReactNode;
24
- testID?: string;
25
- }
26
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/tabs/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { InteractionPolicy } from '../../interactionPolicy';\n\nexport interface TabsProps {\n children?: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: ((value: string) => void) | undefined;\n testID?: string;\n}\n\nexport interface TabListProps {\n children?: React.ReactNode;\n testID?: string;\n}\n\nexport interface TabProps {\n value: string;\n children?: React.ReactNode;\n disabled?: boolean;\n interactionPolicy?: InteractionPolicy;\n testID?: string;\n}\n\nexport interface TabPanelProps {\n value: string;\n children?: React.ReactNode;\n testID?: string;\n}\n"]}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import type { TooltipProps } from './types';
3
- export declare function Tooltip({ children, content, delay, interactionPolicy, placement, testID, }: TooltipProps): React.JSX.Element;
4
- //# sourceMappingURL=Tooltip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiB5C,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,OAAO,EACP,KAAW,EACX,iBAA6B,EAC7B,SAAiB,EACjB,MAAM,GACP,EAAE,YAAY,qBAmFd"}
@@ -1,75 +0,0 @@
1
- import React from 'react';
2
- import { Platform, Pressable, View } from 'react-native';
3
- import { Surface } from '../../features/surface/public';
4
- import { Text } from '../../features/typography/public';
5
- import { Portal } from '../../internal/overlay/Portal';
6
- import { resolvePointerEvents } from '../../internal/resolvePointerEvents';
7
- import { resolveOverlayAnimation } from '../../internal/resolvers';
8
- import { useTheme } from '../../theme/ThemeContext';
9
- const noPointerEvents = resolvePointerEvents('none');
10
- function measureNode(node, callback) {
11
- const measurableNode = node;
12
- measurableNode?.measureInWindow?.((x, y, width, height) => {
13
- callback({ height, width, x, y });
14
- });
15
- }
16
- export function Tooltip({ children, content, delay = 150, interactionPolicy = 'enabled', placement = 'top', testID, }) {
17
- const { theme } = useTheme();
18
- const animation = resolveOverlayAnimation('tooltip');
19
- const anchorRef = React.useRef(null);
20
- const timeoutRef = React.useRef(null);
21
- const [visible, setVisible] = React.useState(false);
22
- const [layout, setLayout] = React.useState(null);
23
- const passive = interactionPolicy === 'passive';
24
- const show = React.useCallback(() => {
25
- if (timeoutRef.current) {
26
- clearTimeout(timeoutRef.current);
27
- }
28
- timeoutRef.current = setTimeout(() => {
29
- measureNode(anchorRef.current, setLayout);
30
- setVisible(true);
31
- }, delay);
32
- }, [delay]);
33
- const hide = React.useCallback(() => {
34
- if (timeoutRef.current) {
35
- clearTimeout(timeoutRef.current);
36
- timeoutRef.current = null;
37
- }
38
- setVisible(false);
39
- }, []);
40
- React.useEffect(() => () => {
41
- if (timeoutRef.current) {
42
- clearTimeout(timeoutRef.current);
43
- }
44
- }, []);
45
- const tooltipLeft = layout ? layout.x : 0;
46
- const tooltipTop = layout && placement === 'top'
47
- ? layout.y - animation.offset
48
- : layout
49
- ? layout.y + layout.height + animation.offset
50
- : 0;
51
- return (<View collapsable={false} ref={anchorRef} testID={testID ? `${testID}-anchor` : undefined}>
52
- <Pressable onBlur={passive ? undefined : hide} onFocus={passive ? undefined : show} onHoverIn={Platform.OS === 'web' && !passive ? show : undefined} onHoverOut={Platform.OS === 'web' && !passive ? hide : undefined}>
53
- {children}
54
- </Pressable>
55
- <Portal layer="tooltip" visible={visible && Boolean(layout)}>
56
- <View {...noPointerEvents.props} style={[
57
- noPointerEvents.style,
58
- {
59
- left: tooltipLeft,
60
- position: 'absolute',
61
- top: tooltipTop,
62
- },
63
- ]}>
64
- <Surface p="s" style={{
65
- backgroundColor: theme.semantics.surface.inverse,
66
- }} testID={testID} variant="raised">
67
- <Text emphasis="inverse" variant="caption">
68
- {content}
69
- </Text>
70
- </Surface>
71
- </View>
72
- </Portal>
73
- </View>);
74
- }
75
- //# sourceMappingURL=Tooltip.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../src/components/tooltip/Tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { type LayoutRectangle, Platform, Pressable, View } from 'react-native';\n\nimport { Surface } from '../../features/surface/public';\nimport { Text } from '../../features/typography/public';\nimport { Portal } from '../../internal/overlay/Portal';\nimport { resolvePointerEvents } from '../../internal/resolvePointerEvents';\nimport { resolveOverlayAnimation } from '../../internal/resolvers';\nimport { useTheme } from '../../theme/ThemeContext';\nimport type { TooltipProps } from './types';\n\nconst noPointerEvents = resolvePointerEvents('none');\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\nexport function Tooltip({\n children,\n content,\n delay = 150,\n interactionPolicy = 'enabled',\n placement = 'top',\n testID,\n}: TooltipProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('tooltip');\n const anchorRef = React.useRef<View | null>(null);\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const [visible, setVisible] = React.useState(false);\n const [layout, setLayout] = React.useState<LayoutRectangle | null>(null);\n const passive = interactionPolicy === 'passive';\n\n const show = React.useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n measureNode(anchorRef.current, setLayout);\n setVisible(true);\n }, delay);\n }, [delay]);\n\n const hide = React.useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n setVisible(false);\n }, []);\n\n React.useEffect(\n () => () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n },\n [],\n );\n\n const tooltipLeft = layout ? layout.x : 0;\n const tooltipTop =\n layout && placement === 'top'\n ? layout.y - animation.offset\n : layout\n ? layout.y + layout.height + animation.offset\n : 0;\n\n return (\n <View collapsable={false} ref={anchorRef} testID={testID ? `${testID}-anchor` : undefined}>\n <Pressable\n onBlur={passive ? undefined : hide}\n onFocus={passive ? undefined : show}\n onHoverIn={Platform.OS === 'web' && !passive ? show : undefined}\n onHoverOut={Platform.OS === 'web' && !passive ? hide : undefined}\n >\n {children}\n </Pressable>\n <Portal layer=\"tooltip\" visible={visible && Boolean(layout)}>\n <View\n {...noPointerEvents.props}\n style={[\n noPointerEvents.style,\n {\n left: tooltipLeft,\n position: 'absolute',\n top: tooltipTop,\n },\n ]}\n >\n <Surface\n p=\"s\"\n style={{\n backgroundColor: theme.semantics.surface.inverse,\n }}\n testID={testID}\n variant=\"raised\"\n >\n <Text emphasis=\"inverse\" variant=\"caption\">\n {content}\n </Text>\n </Surface>\n </View>\n </Portal>\n </View>\n );\n}\n"]}
@@ -1,3 +0,0 @@
1
- export { Tooltip } from './Tooltip';
2
- export type { TooltipProps } from './types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -1,2 +0,0 @@
1
- export { Tooltip } from './Tooltip';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC","sourcesContent":["export { Tooltip } from './Tooltip';\nexport type { TooltipProps } from './types';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/tooltip/types.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\n\nimport type { InteractionPolicy } from '../../interactionPolicy';\n\nexport interface TooltipProps {\n children?: React.ReactNode;\n content?: React.ReactNode;\n delay?: number;\n interactionPolicy?: InteractionPolicy;\n placement?: 'top' | 'bottom';\n testID?: string;\n}\n"]}
@@ -1,228 +0,0 @@
1
- import React from 'react';
2
- import { type LayoutRectangle, Pressable, View } from 'react-native';
3
-
4
- import { Box, Stack } from '../../features/layout/public';
5
- import { Surface } from '../../features/surface/public';
6
- import { Text } from '../../features/typography/public';
7
- import { FocusScope } from '../../internal/focus/FocusScope';
8
- import { useFocusManager } from '../../internal/focus/useFocusManager';
9
- import { Portal } from '../../internal/overlay/Portal';
10
- import { resolvePointerEvents } from '../../internal/resolvePointerEvents';
11
- import { resolveOverlayAnimation } from '../../internal/resolvers';
12
- import { Inline } from '../../layout';
13
- import { ButtonBase } from '../../primitives/button-base';
14
- import { useTheme } from '../../theme/ThemeContext';
15
- import { resolveNextMenuIndex } from './navigation';
16
- import type { MenuAction, MenuProps } from './types';
17
-
18
- const boxNonePointerEvents = resolvePointerEvents('box-none');
19
-
20
- interface MeasurableNode {
21
- measureInWindow?: (
22
- callback: (x: number, y: number, width: number, height: number) => void,
23
- ) => void;
24
- }
25
-
26
- function measureNode(node: unknown, callback: (layout: LayoutRectangle) => void) {
27
- const measurableNode = node as MeasurableNode | null;
28
- measurableNode?.measureInWindow?.((x, y, width, height) => {
29
- callback({ height, width, x, y });
30
- });
31
- }
32
-
33
- function renderActionContent(action: MenuAction, active: boolean) {
34
- const titleColor =
35
- action.intent === 'danger' ? 'danger' : active || action.selected ? 'neutral' : undefined;
36
-
37
- return (
38
- <Inline align="center" gap="s" justify="space-between" wrap="nowrap">
39
- {action.leading ? <Box>{action.leading}</Box> : null}
40
- <Box flex={1}>
41
- <Stack gap="xxs">
42
- <Text
43
- color={titleColor}
44
- variant="bodySmall"
45
- weight={action.selected ? 'semiBold' : 'medium'}
46
- >
47
- {action.title}
48
- </Text>
49
- {action.description ? (
50
- <Text emphasis="muted" variant="caption">
51
- {action.description}
52
- </Text>
53
- ) : null}
54
- </Stack>
55
- </Box>
56
- {action.trailing ? <Box>{action.trailing}</Box> : null}
57
- </Inline>
58
- );
59
- }
60
-
61
- export function Menu({
62
- trigger,
63
- actions,
64
- dismiss,
65
- closeOnSelect = true,
66
- interactionPolicy = 'enabled',
67
- testID,
68
- }: MenuProps) {
69
- const { theme } = useTheme();
70
- const { bindKeydown } = useFocusManager();
71
- const animation = resolveOverlayAnimation('menu');
72
- const anchorRef = React.useRef<View | null>(null);
73
- const [open, setOpen] = React.useState(false);
74
- const [layout, setLayout] = React.useState<LayoutRectangle | null>(null);
75
- const [activeIndex, setActiveIndex] = React.useState(0);
76
- const passive = interactionPolicy === 'passive';
77
-
78
- const closeMenu = React.useCallback(() => {
79
- setOpen(false);
80
- if (dismiss) {
81
- dismiss();
82
- }
83
- }, [dismiss]);
84
-
85
- const activateAction = React.useCallback(
86
- (action: MenuAction) => {
87
- if (action.disabled) {
88
- return;
89
- }
90
-
91
- if (action.activate) {
92
- action.activate();
93
- }
94
-
95
- if (closeOnSelect) {
96
- closeMenu();
97
- }
98
- },
99
- [closeMenu, closeOnSelect],
100
- );
101
-
102
- const openMenu = React.useCallback(() => {
103
- measureNode(anchorRef.current, setLayout);
104
- const firstEnabledIndex = actions.findIndex((action) => !action.disabled);
105
- setActiveIndex(firstEnabledIndex === -1 ? 0 : firstEnabledIndex);
106
- setOpen(true);
107
- }, [actions]);
108
-
109
- React.useEffect(() => {
110
- if (!open) {
111
- return undefined;
112
- }
113
-
114
- return bindKeydown((event) => {
115
- if (passive) {
116
- return;
117
- }
118
-
119
- const { key } = event;
120
- if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Home' || key === 'End') {
121
- event.preventDefault();
122
- setActiveIndex((current) => resolveNextMenuIndex(actions, current, key));
123
- }
124
-
125
- if (event.key === 'Enter') {
126
- event.preventDefault();
127
- const activeAction = actions[activeIndex];
128
- if (activeAction) {
129
- activateAction(activeAction);
130
- }
131
- }
132
-
133
- if (event.key === 'Escape') {
134
- event.preventDefault();
135
- closeMenu();
136
- }
137
- });
138
- }, [activateAction, actions, activeIndex, bindKeydown, closeMenu, open, passive]);
139
-
140
- return (
141
- <View collapsable={false} ref={anchorRef}>
142
- <ButtonBase
143
- onPress={passive ? undefined : open ? closeMenu : openMenu}
144
- testID={testID ? `${testID}-trigger` : undefined}
145
- >
146
- {trigger}
147
- </ButtonBase>
148
- <Portal layer="menu" visible={open && Boolean(layout)}>
149
- <View
150
- {...boxNonePointerEvents.props}
151
- style={[
152
- boxNonePointerEvents.style,
153
- {
154
- bottom: 0,
155
- left: 0,
156
- position: 'absolute',
157
- right: 0,
158
- top: 0,
159
- },
160
- ]}
161
- >
162
- <Pressable
163
- onPress={passive ? undefined : closeMenu}
164
- style={{
165
- bottom: 0,
166
- left: 0,
167
- position: 'absolute',
168
- right: 0,
169
- top: 0,
170
- }}
171
- />
172
- <FocusScope active={open} onEscape={passive ? undefined : closeMenu}>
173
- <View
174
- style={{
175
- left: layout?.x ?? 0,
176
- position: 'absolute',
177
- top: (layout?.y ?? 0) + (layout?.height ?? 0) + animation.offset,
178
- }}
179
- >
180
- <Surface
181
- accessibilityRole="menu"
182
- p="xs"
183
- style={{
184
- minWidth: Math.max(layout?.width ?? 0, 220),
185
- shadowOpacity: 0.12,
186
- shadowRadius: 12,
187
- shadowOffset: { width: 0, height: 6 },
188
- }}
189
- testID={testID}
190
- variant="raised"
191
- >
192
- {actions.map((action, index) => {
193
- const active = index === activeIndex;
194
- const selected = action.selected ?? active;
195
-
196
- return (
197
- <Pressable
198
- accessibilityRole="menuitem"
199
- accessibilityState={{ disabled: action.disabled, selected }}
200
- disabled={action.disabled}
201
- key={action.id}
202
- onPress={passive ? undefined : () => activateAction(action)}
203
- >
204
- <Box
205
- px="m"
206
- py="s"
207
- radius="s"
208
- style={{
209
- backgroundColor: selected
210
- ? theme.semantics.action.neutral.softBg
211
- : 'transparent',
212
- opacity: action.disabled ? 0.56 : 1,
213
- }}
214
- testID={testID ? `${testID}-item-${action.id}` : undefined}
215
- >
216
- {renderActionContent(action, active)}
217
- </Box>
218
- </Pressable>
219
- );
220
- })}
221
- </Surface>
222
- </View>
223
- </FocusScope>
224
- </View>
225
- </Portal>
226
- </View>
227
- );
228
- }
@@ -1,2 +0,0 @@
1
- export { Menu } from './Menu';
2
- export type { MenuAction, MenuActionIntent, MenuAction as MenuItem, MenuProps } from './types';
@@ -1,34 +0,0 @@
1
- export function resolveNextMenuIndex(
2
- items: readonly { disabled?: boolean }[],
3
- currentIndex: number,
4
- key: 'ArrowDown' | 'ArrowUp' | 'Home' | 'End',
5
- ): number {
6
- const enabledIndexes = items.reduce<number[]>((indexes, item, index) => {
7
- if (!item.disabled) {
8
- indexes.push(index);
9
- }
10
- return indexes;
11
- }, []);
12
-
13
- if (enabledIndexes.length === 0) {
14
- return -1;
15
- }
16
-
17
- if (key === 'Home') {
18
- return enabledIndexes[0] ?? -1;
19
- }
20
-
21
- if (key === 'End') {
22
- return enabledIndexes[enabledIndexes.length - 1] ?? -1;
23
- }
24
-
25
- const activeEnabledIndex = enabledIndexes.indexOf(currentIndex);
26
- const nextEnabledIndex =
27
- activeEnabledIndex === -1
28
- ? 0
29
- : key === 'ArrowUp'
30
- ? (activeEnabledIndex - 1 + enabledIndexes.length) % enabledIndexes.length
31
- : (activeEnabledIndex + 1) % enabledIndexes.length;
32
-
33
- return enabledIndexes[nextEnabledIndex] ?? -1;
34
- }
@@ -1,26 +0,0 @@
1
- import type React from 'react';
2
-
3
- import type { InteractionPolicy } from '../../interactionPolicy';
4
-
5
- export type MenuActionIntent = 'default' | 'danger';
6
-
7
- export interface MenuAction {
8
- id: string;
9
- title: React.ReactNode;
10
- description?: React.ReactNode;
11
- leading?: React.ReactNode;
12
- trailing?: React.ReactNode;
13
- intent?: MenuActionIntent;
14
- disabled?: boolean;
15
- selected?: boolean;
16
- activate?: () => void;
17
- }
18
-
19
- export interface MenuProps {
20
- trigger?: React.ReactNode;
21
- actions: readonly MenuAction[];
22
- dismiss?: () => void;
23
- closeOnSelect?: boolean;
24
- interactionPolicy?: InteractionPolicy;
25
- testID?: string;
26
- }