@salt-ds/core 1.59.1 → 1.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/css/salt-core.css +366 -1
  3. package/dist-cjs/aria-announcer/AriaAnnounce.js +15 -3
  4. package/dist-cjs/aria-announcer/AriaAnnounce.js.map +1 -1
  5. package/dist-cjs/aria-announcer/AriaAnnouncerContext.js.map +1 -1
  6. package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js +65 -43
  7. package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
  8. package/dist-cjs/aria-announcer/announcementRegistry.js +31 -0
  9. package/dist-cjs/aria-announcer/announcementRegistry.js.map +1 -0
  10. package/dist-cjs/aria-announcer/useAriaAnnouncer.js +44 -16
  11. package/dist-cjs/aria-announcer/useAriaAnnouncer.js.map +1 -1
  12. package/dist-cjs/index.js +17 -1
  13. package/dist-cjs/index.js.map +1 -1
  14. package/dist-cjs/navigation-item/NavigationItem.js +2 -0
  15. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
  16. package/dist-cjs/pagination/Pagination.js +1 -0
  17. package/dist-cjs/pagination/Pagination.js.map +1 -1
  18. package/dist-cjs/rating/Rating.css.js +6 -0
  19. package/dist-cjs/rating/Rating.css.js.map +1 -0
  20. package/dist-cjs/rating/Rating.js +140 -0
  21. package/dist-cjs/rating/Rating.js.map +1 -0
  22. package/dist-cjs/rating/RatingItem.css.js +6 -0
  23. package/dist-cjs/rating/RatingItem.css.js.map +1 -0
  24. package/dist-cjs/rating/RatingItem.js +75 -0
  25. package/dist-cjs/rating/RatingItem.js.map +1 -0
  26. package/dist-cjs/salt-provider/SaltProvider.js +3 -1
  27. package/dist-cjs/salt-provider/SaltProvider.js.map +1 -1
  28. package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js +22 -20
  29. package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
  30. package/dist-cjs/spinner/Spinner.js +1 -0
  31. package/dist-cjs/spinner/Spinner.js.map +1 -1
  32. package/dist-cjs/tabs/Tab.css.js +6 -0
  33. package/dist-cjs/tabs/Tab.css.js.map +1 -0
  34. package/dist-cjs/tabs/Tab.js +211 -0
  35. package/dist-cjs/tabs/Tab.js.map +1 -0
  36. package/dist-cjs/tabs/TabAction.js +63 -0
  37. package/dist-cjs/tabs/TabAction.js.map +1 -0
  38. package/dist-cjs/tabs/TabBar.css.js +6 -0
  39. package/dist-cjs/tabs/TabBar.css.js.map +1 -0
  40. package/dist-cjs/tabs/TabBar.js +45 -0
  41. package/dist-cjs/tabs/TabBar.js.map +1 -0
  42. package/dist-cjs/tabs/TabList.css.js +6 -0
  43. package/dist-cjs/tabs/TabList.css.js.map +1 -0
  44. package/dist-cjs/tabs/TabList.js +281 -0
  45. package/dist-cjs/tabs/TabList.js.map +1 -0
  46. package/dist-cjs/tabs/TabPanel.css.js +6 -0
  47. package/dist-cjs/tabs/TabPanel.css.js.map +1 -0
  48. package/dist-cjs/tabs/TabPanel.js +98 -0
  49. package/dist-cjs/tabs/TabPanel.js.map +1 -0
  50. package/dist-cjs/tabs/TabTrigger.css.js +6 -0
  51. package/dist-cjs/tabs/TabTrigger.css.js.map +1 -0
  52. package/dist-cjs/tabs/TabTrigger.js +188 -0
  53. package/dist-cjs/tabs/TabTrigger.js.map +1 -0
  54. package/dist-cjs/tabs/Tabs.css.js +6 -0
  55. package/dist-cjs/tabs/Tabs.css.js.map +1 -0
  56. package/dist-cjs/tabs/Tabs.js +200 -0
  57. package/dist-cjs/tabs/Tabs.js.map +1 -0
  58. package/dist-cjs/tabs/internal/contexts/TabContext.js +26 -0
  59. package/dist-cjs/tabs/internal/contexts/TabContext.js.map +1 -0
  60. package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js +19 -0
  61. package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
  62. package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js +22 -0
  63. package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
  64. package/dist-cjs/tabs/internal/contexts/TabsContext.js +50 -0
  65. package/dist-cjs/tabs/internal/contexts/TabsContext.js.map +1 -0
  66. package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js +64 -0
  67. package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
  68. package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js +76 -0
  69. package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
  70. package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js +165 -0
  71. package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
  72. package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js +87 -0
  73. package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
  74. package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js +6 -0
  75. package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
  76. package/dist-cjs/tabs/internal/overflow/TabOverflowList.js +245 -0
  77. package/dist-cjs/tabs/internal/overflow/TabOverflowList.js.map +1 -0
  78. package/dist-cjs/tabs/internal/overflow/TabSlot.js +30 -0
  79. package/dist-cjs/tabs/internal/overflow/TabSlot.js.map +1 -0
  80. package/dist-cjs/tabs/internal/overflow/overflowMath.js +86 -0
  81. package/dist-cjs/tabs/internal/overflow/overflowMath.js.map +1 -0
  82. package/dist-cjs/tabs/internal/overflow/useOverflow.js +273 -0
  83. package/dist-cjs/tabs/internal/overflow/useOverflow.js.map +1 -0
  84. package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js +99 -0
  85. package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
  86. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js +68 -0
  87. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
  88. package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js +92 -0
  89. package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
  90. package/dist-cjs/tabs/internal/overflow/widthMeasurement.js +42 -0
  91. package/dist-cjs/tabs/internal/overflow/widthMeasurement.js.map +1 -0
  92. package/dist-cjs/tabs/internal/registry/useCollection.js +197 -0
  93. package/dist-cjs/tabs/internal/registry/useCollection.js.map +1 -0
  94. package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js +206 -0
  95. package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
  96. package/dist-cjs/tabs/internal/utils/domUtils.js +13 -0
  97. package/dist-cjs/tabs/internal/utils/domUtils.js.map +1 -0
  98. package/dist-cjs/tooltip/useAriaAnnounce.js +1 -0
  99. package/dist-cjs/tooltip/useAriaAnnounce.js.map +1 -1
  100. package/dist-es/aria-announcer/AriaAnnounce.js +15 -3
  101. package/dist-es/aria-announcer/AriaAnnounce.js.map +1 -1
  102. package/dist-es/aria-announcer/AriaAnnouncerContext.js.map +1 -1
  103. package/dist-es/aria-announcer/AriaAnnouncerProvider.js +67 -45
  104. package/dist-es/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
  105. package/dist-es/aria-announcer/announcementRegistry.js +28 -0
  106. package/dist-es/aria-announcer/announcementRegistry.js.map +1 -0
  107. package/dist-es/aria-announcer/useAriaAnnouncer.js +45 -17
  108. package/dist-es/aria-announcer/useAriaAnnouncer.js.map +1 -1
  109. package/dist-es/index.js +9 -1
  110. package/dist-es/index.js.map +1 -1
  111. package/dist-es/navigation-item/NavigationItem.js +2 -0
  112. package/dist-es/navigation-item/NavigationItem.js.map +1 -1
  113. package/dist-es/pagination/Pagination.js +1 -0
  114. package/dist-es/pagination/Pagination.js.map +1 -1
  115. package/dist-es/rating/Rating.css.js +4 -0
  116. package/dist-es/rating/Rating.css.js.map +1 -0
  117. package/dist-es/rating/Rating.js +138 -0
  118. package/dist-es/rating/Rating.js.map +1 -0
  119. package/dist-es/rating/RatingItem.css.js +4 -0
  120. package/dist-es/rating/RatingItem.css.js.map +1 -0
  121. package/dist-es/rating/RatingItem.js +73 -0
  122. package/dist-es/rating/RatingItem.js.map +1 -0
  123. package/dist-es/salt-provider/SaltProvider.js +3 -1
  124. package/dist-es/salt-provider/SaltProvider.js.map +1 -1
  125. package/dist-es/semantic-icon-provider/SemanticIconProvider.js +23 -21
  126. package/dist-es/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
  127. package/dist-es/spinner/Spinner.js +1 -0
  128. package/dist-es/spinner/Spinner.js.map +1 -1
  129. package/dist-es/tabs/Tab.css.js +4 -0
  130. package/dist-es/tabs/Tab.css.js.map +1 -0
  131. package/dist-es/tabs/Tab.js +209 -0
  132. package/dist-es/tabs/Tab.js.map +1 -0
  133. package/dist-es/tabs/TabAction.js +61 -0
  134. package/dist-es/tabs/TabAction.js.map +1 -0
  135. package/dist-es/tabs/TabBar.css.js +4 -0
  136. package/dist-es/tabs/TabBar.css.js.map +1 -0
  137. package/dist-es/tabs/TabBar.js +43 -0
  138. package/dist-es/tabs/TabBar.js.map +1 -0
  139. package/dist-es/tabs/TabList.css.js +4 -0
  140. package/dist-es/tabs/TabList.css.js.map +1 -0
  141. package/dist-es/tabs/TabList.js +279 -0
  142. package/dist-es/tabs/TabList.js.map +1 -0
  143. package/dist-es/tabs/TabPanel.css.js +4 -0
  144. package/dist-es/tabs/TabPanel.css.js.map +1 -0
  145. package/dist-es/tabs/TabPanel.js +96 -0
  146. package/dist-es/tabs/TabPanel.js.map +1 -0
  147. package/dist-es/tabs/TabTrigger.css.js +4 -0
  148. package/dist-es/tabs/TabTrigger.css.js.map +1 -0
  149. package/dist-es/tabs/TabTrigger.js +186 -0
  150. package/dist-es/tabs/TabTrigger.js.map +1 -0
  151. package/dist-es/tabs/Tabs.css.js +4 -0
  152. package/dist-es/tabs/Tabs.css.js.map +1 -0
  153. package/dist-es/tabs/Tabs.js +198 -0
  154. package/dist-es/tabs/Tabs.js.map +1 -0
  155. package/dist-es/tabs/internal/contexts/TabContext.js +23 -0
  156. package/dist-es/tabs/internal/contexts/TabContext.js.map +1 -0
  157. package/dist-es/tabs/internal/contexts/TabListLayoutContext.js +16 -0
  158. package/dist-es/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
  159. package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js +19 -0
  160. package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
  161. package/dist-es/tabs/internal/contexts/TabsContext.js +47 -0
  162. package/dist-es/tabs/internal/contexts/TabsContext.js.map +1 -0
  163. package/dist-es/tabs/internal/hooks/useFocusWithRetry.js +62 -0
  164. package/dist-es/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
  165. package/dist-es/tabs/internal/hooks/useTabListRecovery.js +74 -0
  166. package/dist-es/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
  167. package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js +163 -0
  168. package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
  169. package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js +85 -0
  170. package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
  171. package/dist-es/tabs/internal/overflow/TabOverflowList.css.js +4 -0
  172. package/dist-es/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
  173. package/dist-es/tabs/internal/overflow/TabOverflowList.js +243 -0
  174. package/dist-es/tabs/internal/overflow/TabOverflowList.js.map +1 -0
  175. package/dist-es/tabs/internal/overflow/TabSlot.js +28 -0
  176. package/dist-es/tabs/internal/overflow/TabSlot.js.map +1 -0
  177. package/dist-es/tabs/internal/overflow/overflowMath.js +82 -0
  178. package/dist-es/tabs/internal/overflow/overflowMath.js.map +1 -0
  179. package/dist-es/tabs/internal/overflow/useOverflow.js +271 -0
  180. package/dist-es/tabs/internal/overflow/useOverflow.js.map +1 -0
  181. package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js +97 -0
  182. package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
  183. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js +66 -0
  184. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
  185. package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js +90 -0
  186. package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
  187. package/dist-es/tabs/internal/overflow/widthMeasurement.js +36 -0
  188. package/dist-es/tabs/internal/overflow/widthMeasurement.js.map +1 -0
  189. package/dist-es/tabs/internal/registry/useCollection.js +195 -0
  190. package/dist-es/tabs/internal/registry/useCollection.js.map +1 -0
  191. package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js +204 -0
  192. package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
  193. package/dist-es/tabs/internal/utils/domUtils.js +11 -0
  194. package/dist-es/tabs/internal/utils/domUtils.js.map +1 -0
  195. package/dist-es/tooltip/useAriaAnnounce.js +1 -0
  196. package/dist-es/tooltip/useAriaAnnounce.js.map +1 -1
  197. package/dist-types/aria-announcer/AriaAnnounce.d.ts +9 -2
  198. package/dist-types/aria-announcer/AriaAnnouncerContext.d.ts +26 -2
  199. package/dist-types/aria-announcer/AriaAnnouncerProvider.d.ts +6 -7
  200. package/dist-types/aria-announcer/announcementRegistry.d.ts +5 -0
  201. package/dist-types/index.d.ts +2 -0
  202. package/dist-types/rating/Rating.d.ts +48 -0
  203. package/dist-types/rating/RatingItem.d.ts +47 -0
  204. package/dist-types/rating/index.d.ts +1 -0
  205. package/dist-types/semantic-icon-provider/SemanticIconProvider.d.ts +21 -19
  206. package/dist-types/tabs/Tab.d.ts +12 -0
  207. package/dist-types/tabs/TabAction.d.ts +4 -0
  208. package/dist-types/tabs/TabBar.d.ts +12 -0
  209. package/dist-types/tabs/TabList.d.ts +12 -0
  210. package/dist-types/tabs/TabPanel.d.ts +9 -0
  211. package/dist-types/tabs/TabTrigger.d.ts +4 -0
  212. package/dist-types/tabs/Tabs.d.ts +20 -0
  213. package/dist-types/tabs/index.d.ts +7 -0
  214. package/dist-types/tabs/internal/contexts/TabContext.d.ts +12 -0
  215. package/dist-types/tabs/internal/contexts/TabListLayoutContext.d.ts +9 -0
  216. package/dist-types/tabs/internal/contexts/TabSlotRegistryContext.d.ts +5 -0
  217. package/dist-types/tabs/internal/contexts/TabsContext.d.ts +43 -0
  218. package/dist-types/tabs/internal/hooks/useFocusWithRetry.d.ts +9 -0
  219. package/dist-types/tabs/internal/hooks/useTabListRecovery.d.ts +12 -0
  220. package/dist-types/tabs/internal/hooks/useTabRemovalHandler.d.ts +32 -0
  221. package/dist-types/tabs/internal/hooks/useTabSelectionFocus.d.ts +15 -0
  222. package/dist-types/tabs/internal/overflow/TabOverflowList.d.ts +10 -0
  223. package/dist-types/tabs/internal/overflow/TabSlot.d.ts +6 -0
  224. package/dist-types/tabs/internal/overflow/overflowMath.d.ts +18 -0
  225. package/dist-types/tabs/internal/overflow/useOverflow.d.ts +11 -0
  226. package/dist-types/tabs/internal/overflow/useOverflowLayoutState.d.ts +13 -0
  227. package/dist-types/tabs/internal/overflow/useOverflowSelectionState.d.ts +13 -0
  228. package/dist-types/tabs/internal/overflow/useRenderedTabWidth.d.ts +12 -0
  229. package/dist-types/tabs/internal/overflow/widthMeasurement.d.ts +5 -0
  230. package/dist-types/tabs/internal/registry/useCollection.d.ts +30 -0
  231. package/dist-types/tabs/internal/registry/useRenderedTabsRegistry.d.ts +12 -0
  232. package/dist-types/tabs/internal/utils/domUtils.d.ts +1 -0
  233. package/package.json +3 -1
@@ -0,0 +1,5 @@
1
+ export interface TabSlotRegistryContextValue {
2
+ registerSlot: (slotId: string, element: HTMLDivElement | null) => void;
3
+ }
4
+ export declare const TabSlotRegistryContext: import("react").Context<TabSlotRegistryContextValue | null>;
5
+ export declare function useTabSlotRegistry(): TabSlotRegistryContextValue | null;
@@ -0,0 +1,43 @@
1
+ import { type Dispatch, type MutableRefObject, type SetStateAction, type SyntheticEvent } from "react";
2
+ import type { useCollection } from "../registry/useCollection";
3
+ export interface Item {
4
+ id: string;
5
+ value: string;
6
+ element: HTMLElement | null;
7
+ location?: "hidden" | "main" | "overflow";
8
+ order?: number;
9
+ }
10
+ export interface RenderedTab {
11
+ host: HTMLDivElement;
12
+ id: string;
13
+ marker: HTMLElement | null;
14
+ root: HTMLElement | null;
15
+ trigger: HTMLButtonElement | null;
16
+ value: string;
17
+ width: number;
18
+ }
19
+ export type TabsRenderMode = "inline" | "portal";
20
+ export interface TabsContextValue extends Omit<ReturnType<typeof useCollection>, "registerItem" | "updateItem"> {
21
+ renderMode: TabsRenderMode;
22
+ registerBootstrapTab: (value: string) => () => void;
23
+ setBootstrapTabReady: (value: string, ready: boolean) => void;
24
+ setBootstrapOverflowReady: (ready: boolean) => void;
25
+ registerTab: (item: Item) => () => void;
26
+ updateTab: (id: string, updates: Partial<Omit<Item, "id" | "value">>) => void;
27
+ registerRenderedTab: (tab: RenderedTab) => () => void;
28
+ updateRenderedTab: (value: string, updates: Partial<Omit<RenderedTab, "value">>) => void;
29
+ getRenderedTab: (value: string) => RenderedTab | undefined;
30
+ getRenderedTabOrder: (value: string) => number;
31
+ renderedTabs: RenderedTab[];
32
+ registerPanel: (id: string, value: string) => () => void;
33
+ getPanelId: (value: string) => string | undefined;
34
+ getTabId: (value: string) => string | undefined;
35
+ selected?: string;
36
+ setSelected: (event: SyntheticEvent | null, value: string, source?: "main" | "overflow") => void;
37
+ activeTab: MutableRefObject<Pick<Item, "id" | "value"> | undefined>;
38
+ selectionFromOverflowValueRef: MutableRefObject<string | null>;
39
+ menuOpen: boolean;
40
+ setMenuOpen: Dispatch<SetStateAction<boolean>>;
41
+ }
42
+ export declare const TabsContext: import("react").Context<TabsContextValue>;
43
+ export declare function useTabs(): TabsContextValue;
@@ -0,0 +1,9 @@
1
+ interface UseFocusWithRetryArgs {
2
+ maxAttempts?: number;
3
+ targetWindow: Window | null | undefined;
4
+ }
5
+ export declare function useFocusWithRetry({ maxAttempts, targetWindow, }: UseFocusWithRetryArgs): {
6
+ cancelScheduledFocus: () => void;
7
+ focusElementWithRetry: (getElement: () => HTMLElement | null | undefined) => void;
8
+ };
9
+ export {};
@@ -0,0 +1,12 @@
1
+ import { type MutableRefObject, type RefObject } from "react";
2
+ interface UseTabListRecoveryArgs {
3
+ removalVersion: number;
4
+ targetWindow: Window | null | undefined;
5
+ tabstripRef: RefObject<HTMLDivElement | null>;
6
+ overflowListRef: RefObject<HTMLDivElement | null>;
7
+ handleTabRemoval: () => void;
8
+ pendingRemovalRecoveryRef: MutableRefObject<boolean>;
9
+ pendingRemovalRecoveryRetriesRef: MutableRefObject<number>;
10
+ }
11
+ export declare function useTabListRecovery({ removalVersion, targetWindow, tabstripRef, overflowListRef, handleTabRemoval, pendingRemovalRecoveryRef, pendingRemovalRecoveryRetriesRef, }: UseTabListRecoveryArgs): void;
12
+ export {};
@@ -0,0 +1,32 @@
1
+ import { type MutableRefObject, type RefObject } from "react";
2
+ import type { Item, TabsContextValue } from "../contexts/TabsContext";
3
+ interface RemovedItem {
4
+ id: string;
5
+ value: string;
6
+ staleIndex?: number;
7
+ }
8
+ interface UseTabRemovalHandlerArgs {
9
+ activeTab: MutableRefObject<Pick<Item, "id" | "value"> | undefined>;
10
+ focusElementWithRetry: (getElement: () => HTMLElement | null | undefined) => void;
11
+ getFirst: TabsContextValue["getFirst"];
12
+ getIndex: TabsContextValue["getIndex"];
13
+ getLast: TabsContextValue["getLast"];
14
+ getRemovedItems: () => Map<string, RemovedItem>;
15
+ getRenderedTab: TabsContextValue["getRenderedTab"];
16
+ getSelectedTabElement: () => HTMLElement | null | undefined;
17
+ item: TabsContextValue["item"];
18
+ itemAt: TabsContextValue["itemAt"];
19
+ maxRetryAttempts: number;
20
+ menuOpen: boolean;
21
+ overflowButtonRef: RefObject<HTMLButtonElement | null>;
22
+ overflowListRef: RefObject<HTMLDivElement | null>;
23
+ pendingRemovalRecoveryRef: MutableRefObject<boolean>;
24
+ pendingRemovalRecoveryRetriesRef: MutableRefObject<number>;
25
+ removalRecoveryRafRef: MutableRefObject<number | null>;
26
+ selected?: string;
27
+ setSelected: TabsContextValue["setSelected"];
28
+ tabstripRef: RefObject<HTMLDivElement | null>;
29
+ targetWindow: Window | null | undefined;
30
+ }
31
+ export declare function useTabRemovalHandler({ activeTab, focusElementWithRetry, getFirst, getIndex, getLast, getRemovedItems, getRenderedTab, getSelectedTabElement, item, itemAt, maxRetryAttempts, menuOpen, overflowButtonRef, overflowListRef, pendingRemovalRecoveryRef, pendingRemovalRecoveryRetriesRef, removalRecoveryRafRef, selected, setSelected, tabstripRef, targetWindow, }: UseTabRemovalHandlerArgs): () => void;
32
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { MutableRefObject } from "react";
2
+ import type { TabsContextValue } from "../contexts/TabsContext";
3
+ interface UseTabSelectionFocusArgs {
4
+ announce: (message: string, timeout?: number) => void;
5
+ focusElementWithRetry: (getElement: () => HTMLElement | null | undefined) => void;
6
+ getRenderedTab: TabsContextValue["getRenderedTab"];
7
+ getSelectedTabElement: () => HTMLElement | null | undefined;
8
+ menuOpen: boolean;
9
+ resolvedOverflowActiveValue: string | null;
10
+ selected?: string;
11
+ selectionFromOverflowValueRef: MutableRefObject<string | null>;
12
+ targetWindow: Window | null | undefined;
13
+ }
14
+ export declare function useTabSelectionFocus({ announce, focusElementWithRetry, getRenderedTab, getSelectedTabElement, menuOpen, resolvedOverflowActiveValue, selected, selectionFromOverflowValueRef, targetWindow, }: UseTabSelectionFocusArgs): void;
15
+ export {};
@@ -0,0 +1,10 @@
1
+ import { type ComponentPropsWithoutRef, type Dispatch, type Ref, type SetStateAction } from "react";
2
+ interface TabOverflowListProps extends ComponentPropsWithoutRef<"button"> {
3
+ buttonRef?: Ref<HTMLButtonElement>;
4
+ hiddenValues: string[];
5
+ open: boolean;
6
+ setOpen: Dispatch<SetStateAction<boolean>>;
7
+ order: number;
8
+ }
9
+ export declare const TabOverflowList: import("react").ForwardRefExoticComponent<TabOverflowListProps & import("react").RefAttributes<HTMLDivElement>>;
10
+ export {};
@@ -0,0 +1,6 @@
1
+ import { type ComponentPropsWithoutRef } from "react";
2
+ export interface TabSlotProps extends ComponentPropsWithoutRef<"div"> {
3
+ slotId: string;
4
+ value: string;
5
+ }
6
+ export declare function TabSlot({ slotId, value, ...rest }: TabSlotProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ export declare const MIN_TRUSTED_TAB_WIDTH = 0.5;
2
+ export interface MeasuredOverflowTab {
3
+ value: string;
4
+ width: number | null;
5
+ }
6
+ interface CalculateVisibleCountProps {
7
+ gap: number;
8
+ maxWidth: number;
9
+ overflowWidth: number;
10
+ pinnedValue?: string;
11
+ tabs: MeasuredOverflowTab[];
12
+ }
13
+ export declare function calculateVisibleCount({ gap, maxWidth: initialMaxWidth, overflowWidth, pinnedValue, tabs, }: CalculateVisibleCountProps): number | null;
14
+ export declare function partitionVisibleValues(orderedValues: string[], visibleCount: number, pinnedValue?: string): {
15
+ visibleValues: string[];
16
+ hiddenValues: string[];
17
+ };
18
+ export {};
@@ -0,0 +1,11 @@
1
+ import { type RefObject } from "react";
2
+ import type { RenderedTab } from "../contexts/TabsContext";
3
+ interface UseOverflowProps {
4
+ container: RefObject<HTMLElement>;
5
+ selected?: string;
6
+ tabs: RenderedTab[];
7
+ overflowButton: RefObject<HTMLButtonElement>;
8
+ menuOpen: boolean;
9
+ }
10
+ export declare function useOverflow({ container, overflowButton, tabs, selected, menuOpen, }: UseOverflowProps): readonly [string[], string[], boolean];
11
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { TabListLayoutContextValue } from "../contexts/TabListLayoutContext";
2
+ interface UseOverflowLayoutStateArgs {
3
+ hiddenValues: string[];
4
+ menuOpen: boolean;
5
+ overflowMenuOpen: boolean;
6
+ visibleValues: string[];
7
+ }
8
+ interface UseOverflowLayoutStateResult {
9
+ resolvedOverflowActiveValue: string | null;
10
+ tabListLayoutContext: TabListLayoutContextValue;
11
+ }
12
+ export declare function useOverflowLayoutState({ hiddenValues, menuOpen, overflowMenuOpen, visibleValues, }: UseOverflowLayoutStateArgs): UseOverflowLayoutStateResult;
13
+ export {};
@@ -0,0 +1,13 @@
1
+ import { type Dispatch, type MutableRefObject, type SetStateAction, type SyntheticEvent } from "react";
2
+ interface UseOverflowSelectionStateArgs {
3
+ commitSelection: (event: SyntheticEvent | null, value: string) => void;
4
+ menuOpen: boolean;
5
+ selected?: string;
6
+ setMenuOpen: Dispatch<SetStateAction<boolean>>;
7
+ }
8
+ interface UseOverflowSelectionStateResult {
9
+ selectionFromOverflowValueRef: MutableRefObject<string | null>;
10
+ setSelected: (event: SyntheticEvent | null, value: string, source?: "main" | "overflow") => void;
11
+ }
12
+ export declare function useOverflowSelectionState({ commitSelection, menuOpen, selected, setMenuOpen, }: UseOverflowSelectionStateArgs): UseOverflowSelectionStateResult;
13
+ export {};
@@ -0,0 +1,12 @@
1
+ import { type RefObject } from "react";
2
+ import type { TabsContextValue, TabsRenderMode } from "../contexts/TabsContext";
3
+ interface UseRenderedTabWidthProps {
4
+ hostElement: HTMLDivElement | null;
5
+ renderMode: TabsRenderMode;
6
+ tabRootRef: RefObject<HTMLDivElement>;
7
+ targetWindow: Window | null | undefined;
8
+ updateRenderedTab: TabsContextValue["updateRenderedTab"];
9
+ value: string;
10
+ }
11
+ export declare function useRenderedTabWidth({ hostElement, renderMode, tabRootRef, targetWindow, updateRenderedTab, value, }: UseRenderedTabWidthProps): void;
12
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare function getMeasuredWidth(element: HTMLElement | null | undefined): number;
2
+ export declare function getIntrinsicMeasuredWidth(element: HTMLElement | null | undefined): number;
3
+ export declare function getGapValue(styles: CSSStyleDeclaration): number;
4
+ export declare function seedWidthMap(elements: HTMLElement[]): Map<HTMLElement, number>;
5
+ export declare function updateWidthMap(widths: Map<HTMLElement, number>, element: HTMLElement, nextWidth: number, epsilon?: number): boolean;
@@ -0,0 +1,30 @@
1
+ export interface Item {
2
+ id: string;
3
+ element?: HTMLElement | null;
4
+ value: string;
5
+ location?: "hidden" | "main" | "overflow";
6
+ order?: number;
7
+ stale?: boolean;
8
+ }
9
+ interface StaleItem extends Item {
10
+ staleIndex?: number;
11
+ }
12
+ interface UseCollectionProps {
13
+ targetWindow: Window | null | undefined;
14
+ wrap: boolean;
15
+ }
16
+ export declare function useCollection({ wrap, targetWindow }: UseCollectionProps): {
17
+ registerItem: (item: Item) => () => void;
18
+ item: (id?: string | null) => Item | null;
19
+ getNext: (current: string) => Item | null;
20
+ getPrevious: (current: string) => Item | null;
21
+ getFirst: () => Item | null;
22
+ getLast: () => Item | null;
23
+ getIndex: (current: string) => number;
24
+ itemAt: (index: number) => Item | null;
25
+ updateItem: (id: string, updates: Partial<Omit<Item, "id" | "value">>) => void;
26
+ getRemovedItems: () => Map<string, StaleItem>;
27
+ removalVersion: number;
28
+ sortItems: () => void;
29
+ };
30
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { RenderedTab, TabsRenderMode } from "../contexts/TabsContext";
2
+ export declare function useRenderedTabsRegistry(): {
3
+ renderMode: TabsRenderMode;
4
+ registerBootstrapTab: (tabValue: string) => () => void;
5
+ setBootstrapTabReady: (tabValue: string, ready: boolean) => void;
6
+ setBootstrapOverflowReady: (ready: boolean) => void;
7
+ registerRenderedTab: (tab: RenderedTab) => () => void;
8
+ updateRenderedTab: (value: string, updates: Partial<Omit<RenderedTab, "value">>) => void;
9
+ getRenderedTab: (value: string) => RenderedTab | undefined;
10
+ getRenderedTabOrder: (value: string) => number;
11
+ renderedTabs: RenderedTab[];
12
+ };
@@ -0,0 +1 @@
1
+ export declare function isHTMLElement(node: unknown): node is HTMLElement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/core",
3
- "version": "1.59.1",
3
+ "version": "1.61.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,6 +22,8 @@
22
22
  "@salt-ds/styles": "0.3.0",
23
23
  "@salt-ds/window": "0.1.1",
24
24
  "clsx": "^2.0.0",
25
+ "dom-accessibility-api": "^0.7.1",
26
+ "tabbable": "^6.0.0",
25
27
  "use-sync-external-store": "^1.5.0"
26
28
  },
27
29
  "peerDependencies": {