@salt-ds/core 1.60.0 → 1.62.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.
- package/CHANGELOG.md +61 -0
- package/css/salt-core.css +492 -1
- package/dist-cjs/index.js +32 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/navigation-item/NavigationItem.js +2 -0
- package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
- package/dist-cjs/rating/Rating.css.js +6 -0
- package/dist-cjs/rating/Rating.css.js.map +1 -0
- package/dist-cjs/rating/Rating.js +140 -0
- package/dist-cjs/rating/Rating.js.map +1 -0
- package/dist-cjs/rating/RatingItem.css.js +6 -0
- package/dist-cjs/rating/RatingItem.css.js.map +1 -0
- package/dist-cjs/rating/RatingItem.js +75 -0
- package/dist-cjs/rating/RatingItem.js.map +1 -0
- package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js +22 -20
- package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
- package/dist-cjs/side-panel/SidePanel.css.js +6 -0
- package/dist-cjs/side-panel/SidePanel.css.js.map +1 -0
- package/dist-cjs/side-panel/SidePanel.js +205 -0
- package/dist-cjs/side-panel/SidePanel.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelCloseButton.js +44 -0
- package/dist-cjs/side-panel/SidePanelCloseButton.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelContent.css.js +6 -0
- package/dist-cjs/side-panel/SidePanelContent.css.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelContent.js +70 -0
- package/dist-cjs/side-panel/SidePanelContent.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelHeader.css.js +6 -0
- package/dist-cjs/side-panel/SidePanelHeader.css.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelHeader.js +30 -0
- package/dist-cjs/side-panel/SidePanelHeader.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelProvider.js +83 -0
- package/dist-cjs/side-panel/SidePanelProvider.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelTitle.css.js +6 -0
- package/dist-cjs/side-panel/SidePanelTitle.css.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelTitle.js +60 -0
- package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -0
- package/dist-cjs/side-panel/SidePanelTrigger.js +43 -0
- package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -0
- package/dist-cjs/side-panel/internal/SidePanelContext.js +38 -0
- package/dist-cjs/side-panel/internal/SidePanelContext.js.map +1 -0
- package/dist-cjs/side-panel/internal/useIsScrollable.js +50 -0
- package/dist-cjs/side-panel/internal/useIsScrollable.js.map +1 -0
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js +214 -0
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
- package/dist-cjs/side-panel/useSidePanel.js +49 -0
- package/dist-cjs/side-panel/useSidePanel.js.map +1 -0
- package/dist-cjs/tabs/Tab.css.js +6 -0
- package/dist-cjs/tabs/Tab.css.js.map +1 -0
- package/dist-cjs/tabs/Tab.js +211 -0
- package/dist-cjs/tabs/Tab.js.map +1 -0
- package/dist-cjs/tabs/TabAction.js +63 -0
- package/dist-cjs/tabs/TabAction.js.map +1 -0
- package/dist-cjs/tabs/TabBar.css.js +6 -0
- package/dist-cjs/tabs/TabBar.css.js.map +1 -0
- package/dist-cjs/tabs/TabBar.js +45 -0
- package/dist-cjs/tabs/TabBar.js.map +1 -0
- package/dist-cjs/tabs/TabList.css.js +6 -0
- package/dist-cjs/tabs/TabList.css.js.map +1 -0
- package/dist-cjs/tabs/TabList.js +281 -0
- package/dist-cjs/tabs/TabList.js.map +1 -0
- package/dist-cjs/tabs/TabPanel.css.js +6 -0
- package/dist-cjs/tabs/TabPanel.css.js.map +1 -0
- package/dist-cjs/tabs/TabPanel.js +98 -0
- package/dist-cjs/tabs/TabPanel.js.map +1 -0
- package/dist-cjs/tabs/TabTrigger.css.js +6 -0
- package/dist-cjs/tabs/TabTrigger.css.js.map +1 -0
- package/dist-cjs/tabs/TabTrigger.js +188 -0
- package/dist-cjs/tabs/TabTrigger.js.map +1 -0
- package/dist-cjs/tabs/Tabs.css.js +6 -0
- package/dist-cjs/tabs/Tabs.css.js.map +1 -0
- package/dist-cjs/tabs/Tabs.js +200 -0
- package/dist-cjs/tabs/Tabs.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabContext.js +26 -0
- package/dist-cjs/tabs/internal/contexts/TabContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js +19 -0
- package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js +22 -0
- package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabsContext.js +50 -0
- package/dist-cjs/tabs/internal/contexts/TabsContext.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js +64 -0
- package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js +76 -0
- package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js +165 -0
- package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js +87 -0
- package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js +6 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.js +245 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabSlot.js +30 -0
- package/dist-cjs/tabs/internal/overflow/TabSlot.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/overflowMath.js +86 -0
- package/dist-cjs/tabs/internal/overflow/overflowMath.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflow.js +273 -0
- package/dist-cjs/tabs/internal/overflow/useOverflow.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js +99 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js +68 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js +92 -0
- package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/widthMeasurement.js +42 -0
- package/dist-cjs/tabs/internal/overflow/widthMeasurement.js.map +1 -0
- package/dist-cjs/tabs/internal/registry/useCollection.js +197 -0
- package/dist-cjs/tabs/internal/registry/useCollection.js.map +1 -0
- package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js +206 -0
- package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
- package/dist-cjs/tabs/internal/utils/domUtils.js +13 -0
- package/dist-cjs/tabs/internal/utils/domUtils.js.map +1 -0
- package/dist-es/index.js +16 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/navigation-item/NavigationItem.js +2 -0
- package/dist-es/navigation-item/NavigationItem.js.map +1 -1
- package/dist-es/rating/Rating.css.js +4 -0
- package/dist-es/rating/Rating.css.js.map +1 -0
- package/dist-es/rating/Rating.js +138 -0
- package/dist-es/rating/Rating.js.map +1 -0
- package/dist-es/rating/RatingItem.css.js +4 -0
- package/dist-es/rating/RatingItem.css.js.map +1 -0
- package/dist-es/rating/RatingItem.js +73 -0
- package/dist-es/rating/RatingItem.js.map +1 -0
- package/dist-es/semantic-icon-provider/SemanticIconProvider.js +23 -21
- package/dist-es/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
- package/dist-es/side-panel/SidePanel.css.js +4 -0
- package/dist-es/side-panel/SidePanel.css.js.map +1 -0
- package/dist-es/side-panel/SidePanel.js +203 -0
- package/dist-es/side-panel/SidePanel.js.map +1 -0
- package/dist-es/side-panel/SidePanelCloseButton.js +42 -0
- package/dist-es/side-panel/SidePanelCloseButton.js.map +1 -0
- package/dist-es/side-panel/SidePanelContent.css.js +4 -0
- package/dist-es/side-panel/SidePanelContent.css.js.map +1 -0
- package/dist-es/side-panel/SidePanelContent.js +68 -0
- package/dist-es/side-panel/SidePanelContent.js.map +1 -0
- package/dist-es/side-panel/SidePanelHeader.css.js +4 -0
- package/dist-es/side-panel/SidePanelHeader.css.js.map +1 -0
- package/dist-es/side-panel/SidePanelHeader.js +28 -0
- package/dist-es/side-panel/SidePanelHeader.js.map +1 -0
- package/dist-es/side-panel/SidePanelProvider.js +81 -0
- package/dist-es/side-panel/SidePanelProvider.js.map +1 -0
- package/dist-es/side-panel/SidePanelTitle.css.js +4 -0
- package/dist-es/side-panel/SidePanelTitle.css.js.map +1 -0
- package/dist-es/side-panel/SidePanelTitle.js +58 -0
- package/dist-es/side-panel/SidePanelTitle.js.map +1 -0
- package/dist-es/side-panel/SidePanelTrigger.js +41 -0
- package/dist-es/side-panel/SidePanelTrigger.js.map +1 -0
- package/dist-es/side-panel/internal/SidePanelContext.js +35 -0
- package/dist-es/side-panel/internal/SidePanelContext.js.map +1 -0
- package/dist-es/side-panel/internal/useIsScrollable.js +48 -0
- package/dist-es/side-panel/internal/useIsScrollable.js.map +1 -0
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js +212 -0
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
- package/dist-es/side-panel/useSidePanel.js +47 -0
- package/dist-es/side-panel/useSidePanel.js.map +1 -0
- package/dist-es/tabs/Tab.css.js +4 -0
- package/dist-es/tabs/Tab.css.js.map +1 -0
- package/dist-es/tabs/Tab.js +209 -0
- package/dist-es/tabs/Tab.js.map +1 -0
- package/dist-es/tabs/TabAction.js +61 -0
- package/dist-es/tabs/TabAction.js.map +1 -0
- package/dist-es/tabs/TabBar.css.js +4 -0
- package/dist-es/tabs/TabBar.css.js.map +1 -0
- package/dist-es/tabs/TabBar.js +43 -0
- package/dist-es/tabs/TabBar.js.map +1 -0
- package/dist-es/tabs/TabList.css.js +4 -0
- package/dist-es/tabs/TabList.css.js.map +1 -0
- package/dist-es/tabs/TabList.js +279 -0
- package/dist-es/tabs/TabList.js.map +1 -0
- package/dist-es/tabs/TabPanel.css.js +4 -0
- package/dist-es/tabs/TabPanel.css.js.map +1 -0
- package/dist-es/tabs/TabPanel.js +96 -0
- package/dist-es/tabs/TabPanel.js.map +1 -0
- package/dist-es/tabs/TabTrigger.css.js +4 -0
- package/dist-es/tabs/TabTrigger.css.js.map +1 -0
- package/dist-es/tabs/TabTrigger.js +186 -0
- package/dist-es/tabs/TabTrigger.js.map +1 -0
- package/dist-es/tabs/Tabs.css.js +4 -0
- package/dist-es/tabs/Tabs.css.js.map +1 -0
- package/dist-es/tabs/Tabs.js +198 -0
- package/dist-es/tabs/Tabs.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabContext.js +23 -0
- package/dist-es/tabs/internal/contexts/TabContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabListLayoutContext.js +16 -0
- package/dist-es/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js +19 -0
- package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabsContext.js +47 -0
- package/dist-es/tabs/internal/contexts/TabsContext.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useFocusWithRetry.js +62 -0
- package/dist-es/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabListRecovery.js +74 -0
- package/dist-es/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js +163 -0
- package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js +85 -0
- package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.css.js +4 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.js +243 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabSlot.js +28 -0
- package/dist-es/tabs/internal/overflow/TabSlot.js.map +1 -0
- package/dist-es/tabs/internal/overflow/overflowMath.js +82 -0
- package/dist-es/tabs/internal/overflow/overflowMath.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflow.js +271 -0
- package/dist-es/tabs/internal/overflow/useOverflow.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js +97 -0
- package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js +66 -0
- package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js +90 -0
- package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
- package/dist-es/tabs/internal/overflow/widthMeasurement.js +36 -0
- package/dist-es/tabs/internal/overflow/widthMeasurement.js.map +1 -0
- package/dist-es/tabs/internal/registry/useCollection.js +195 -0
- package/dist-es/tabs/internal/registry/useCollection.js.map +1 -0
- package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js +204 -0
- package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
- package/dist-es/tabs/internal/utils/domUtils.js +11 -0
- package/dist-es/tabs/internal/utils/domUtils.js.map +1 -0
- package/dist-types/index.d.ts +3 -0
- package/dist-types/rating/Rating.d.ts +48 -0
- package/dist-types/rating/RatingItem.d.ts +47 -0
- package/dist-types/rating/index.d.ts +1 -0
- package/dist-types/semantic-icon-provider/SemanticIconProvider.d.ts +21 -19
- package/dist-types/side-panel/SidePanel.d.ts +26 -0
- package/dist-types/side-panel/SidePanelCloseButton.d.ts +2 -0
- package/dist-types/side-panel/SidePanelContent.d.ts +5 -0
- package/dist-types/side-panel/SidePanelHeader.d.ts +5 -0
- package/dist-types/side-panel/SidePanelProvider.d.ts +20 -0
- package/dist-types/side-panel/SidePanelTitle.d.ts +3 -0
- package/dist-types/side-panel/SidePanelTrigger.d.ts +3 -0
- package/dist-types/side-panel/index.d.ts +8 -0
- package/dist-types/side-panel/internal/SidePanelContext.d.ts +52 -0
- package/dist-types/side-panel/internal/index.d.ts +3 -0
- package/dist-types/side-panel/internal/useIsScrollable.d.ts +2 -0
- package/dist-types/side-panel/internal/useSidePanelTabOrder.d.ts +7 -0
- package/dist-types/side-panel/useSidePanel.d.ts +58 -0
- package/dist-types/tabs/Tab.d.ts +12 -0
- package/dist-types/tabs/TabAction.d.ts +4 -0
- package/dist-types/tabs/TabBar.d.ts +12 -0
- package/dist-types/tabs/TabList.d.ts +12 -0
- package/dist-types/tabs/TabPanel.d.ts +9 -0
- package/dist-types/tabs/TabTrigger.d.ts +4 -0
- package/dist-types/tabs/Tabs.d.ts +20 -0
- package/dist-types/tabs/index.d.ts +7 -0
- package/dist-types/tabs/internal/contexts/TabContext.d.ts +12 -0
- package/dist-types/tabs/internal/contexts/TabListLayoutContext.d.ts +9 -0
- package/dist-types/tabs/internal/contexts/TabSlotRegistryContext.d.ts +5 -0
- package/dist-types/tabs/internal/contexts/TabsContext.d.ts +43 -0
- package/dist-types/tabs/internal/hooks/useFocusWithRetry.d.ts +9 -0
- package/dist-types/tabs/internal/hooks/useTabListRecovery.d.ts +12 -0
- package/dist-types/tabs/internal/hooks/useTabRemovalHandler.d.ts +32 -0
- package/dist-types/tabs/internal/hooks/useTabSelectionFocus.d.ts +15 -0
- package/dist-types/tabs/internal/overflow/TabOverflowList.d.ts +10 -0
- package/dist-types/tabs/internal/overflow/TabSlot.d.ts +6 -0
- package/dist-types/tabs/internal/overflow/overflowMath.d.ts +18 -0
- package/dist-types/tabs/internal/overflow/useOverflow.d.ts +11 -0
- package/dist-types/tabs/internal/overflow/useOverflowLayoutState.d.ts +13 -0
- package/dist-types/tabs/internal/overflow/useOverflowSelectionState.d.ts +13 -0
- package/dist-types/tabs/internal/overflow/useRenderedTabWidth.d.ts +12 -0
- package/dist-types/tabs/internal/overflow/widthMeasurement.d.ts +5 -0
- package/dist-types/tabs/internal/registry/useCollection.d.ts +30 -0
- package/dist-types/tabs/internal/registry/useRenderedTabsRegistry.d.ts +12 -0
- package/dist-types/tabs/internal/utils/domUtils.d.ts +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
function sortBasedOnDOMPosition(items) {
|
|
6
|
+
const indexedItems = items.map((item, index) => [index, item]);
|
|
7
|
+
let orderChanged = false;
|
|
8
|
+
indexedItems.sort(([itemAIndex, itemA], [itemBIndex, itemB]) => {
|
|
9
|
+
if (itemA.order != null && itemA.order >= 0 && itemB.order != null && itemB.order >= 0 && itemA.order !== itemB.order) {
|
|
10
|
+
if (itemA.order < itemB.order && itemAIndex > itemBIndex || itemA.order > itemB.order && itemAIndex < itemBIndex) {
|
|
11
|
+
orderChanged = true;
|
|
12
|
+
}
|
|
13
|
+
return itemA.order - itemB.order;
|
|
14
|
+
}
|
|
15
|
+
const itemAElement = itemA.element;
|
|
16
|
+
const itemBElement = itemB.element;
|
|
17
|
+
if (itemAElement === itemBElement) return 0;
|
|
18
|
+
if (!itemAElement || !itemBElement) return 0;
|
|
19
|
+
const pos = itemAElement.compareDocumentPosition(itemBElement);
|
|
20
|
+
if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return 0;
|
|
21
|
+
if (pos & Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
22
|
+
if (itemAIndex > itemBIndex) {
|
|
23
|
+
orderChanged = true;
|
|
24
|
+
}
|
|
25
|
+
return -1;
|
|
26
|
+
}
|
|
27
|
+
if (itemAIndex < itemBIndex) {
|
|
28
|
+
orderChanged = true;
|
|
29
|
+
}
|
|
30
|
+
return 1;
|
|
31
|
+
});
|
|
32
|
+
if (orderChanged) {
|
|
33
|
+
return indexedItems.map(([_, item]) => item);
|
|
34
|
+
}
|
|
35
|
+
return items;
|
|
36
|
+
}
|
|
37
|
+
function useCollection({ wrap, targetWindow }) {
|
|
38
|
+
const itemsRef = React.useRef([]);
|
|
39
|
+
const itemMap = React.useRef(/* @__PURE__ */ new Map());
|
|
40
|
+
const removedItems = React.useRef(/* @__PURE__ */ new Map());
|
|
41
|
+
const [removalVersion, setRemovalVersion] = React.useState(0);
|
|
42
|
+
const getOrderedItems = React.useCallback(() => {
|
|
43
|
+
return sortBasedOnDOMPosition(Array.from(itemMap.current.values()));
|
|
44
|
+
}, []);
|
|
45
|
+
const getNavigableItems = React.useCallback(() => {
|
|
46
|
+
return getOrderedItems().filter((item) => {
|
|
47
|
+
if (item.location === "hidden") {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return !!item.element;
|
|
51
|
+
});
|
|
52
|
+
}, [getOrderedItems]);
|
|
53
|
+
const sortItems = React.useCallback(() => {
|
|
54
|
+
itemsRef.current = getOrderedItems();
|
|
55
|
+
}, [getOrderedItems]);
|
|
56
|
+
const getRemovedItems = React.useCallback(() => {
|
|
57
|
+
const items = new Map(removedItems.current);
|
|
58
|
+
removedItems.current.clear();
|
|
59
|
+
return items;
|
|
60
|
+
}, []);
|
|
61
|
+
const rafId = React.useRef(null);
|
|
62
|
+
const scheduleSort = React.useCallback(() => {
|
|
63
|
+
if (!(targetWindow == null ? void 0 : targetWindow.requestAnimationFrame)) {
|
|
64
|
+
sortItems();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (rafId.current != null) {
|
|
68
|
+
targetWindow.cancelAnimationFrame(rafId.current);
|
|
69
|
+
}
|
|
70
|
+
rafId.current = targetWindow.requestAnimationFrame(() => {
|
|
71
|
+
rafId.current = null;
|
|
72
|
+
sortItems();
|
|
73
|
+
});
|
|
74
|
+
}, [sortItems, targetWindow]);
|
|
75
|
+
const registerItem = React.useCallback(
|
|
76
|
+
(item) => {
|
|
77
|
+
itemMap.current.set(item.id, item);
|
|
78
|
+
removedItems.current.delete(item.id);
|
|
79
|
+
scheduleSort();
|
|
80
|
+
return () => {
|
|
81
|
+
const currentItems = getOrderedItems();
|
|
82
|
+
const currentItem = itemMap.current.get(item.id) ?? item;
|
|
83
|
+
const staleIndex = currentItems.findIndex(({ id }) => id === item.id);
|
|
84
|
+
removedItems.current.set(item.id, {
|
|
85
|
+
...currentItem,
|
|
86
|
+
staleIndex
|
|
87
|
+
});
|
|
88
|
+
itemsRef.current = currentItems.filter(({ id }) => id !== item.id);
|
|
89
|
+
itemMap.current.delete(item.id);
|
|
90
|
+
setRemovalVersion((currentVersion) => currentVersion + 1);
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
[getOrderedItems, scheduleSort]
|
|
94
|
+
);
|
|
95
|
+
const updateItem = React.useCallback(
|
|
96
|
+
(id, updates) => {
|
|
97
|
+
const currentItem = itemMap.current.get(id);
|
|
98
|
+
if (!currentItem) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
let changed = false;
|
|
102
|
+
const nextItem = { ...currentItem };
|
|
103
|
+
for (const [key, nextValue] of Object.entries(updates)) {
|
|
104
|
+
const typedKey = key;
|
|
105
|
+
if (nextItem[typedKey] !== nextValue) {
|
|
106
|
+
changed = true;
|
|
107
|
+
nextItem[typedKey] = nextValue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!changed) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
itemMap.current.set(id, nextItem);
|
|
114
|
+
itemsRef.current = itemsRef.current.map((item) => {
|
|
115
|
+
if (item.id !== id) {
|
|
116
|
+
return item;
|
|
117
|
+
}
|
|
118
|
+
return nextItem;
|
|
119
|
+
});
|
|
120
|
+
scheduleSort();
|
|
121
|
+
},
|
|
122
|
+
[scheduleSort]
|
|
123
|
+
);
|
|
124
|
+
React.useEffect(() => {
|
|
125
|
+
return () => {
|
|
126
|
+
if (rafId.current != null && targetWindow) {
|
|
127
|
+
targetWindow.cancelAnimationFrame(rafId.current);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}, [targetWindow]);
|
|
131
|
+
return {
|
|
132
|
+
registerItem,
|
|
133
|
+
item: React.useCallback((id) => {
|
|
134
|
+
if (!id) return null;
|
|
135
|
+
let item = itemMap.current.get(id);
|
|
136
|
+
if (!item) {
|
|
137
|
+
item = itemsRef.current.find((item2) => item2.id === id);
|
|
138
|
+
if (item) {
|
|
139
|
+
itemMap.current.set(item.id, item);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return item ?? null;
|
|
143
|
+
}, []),
|
|
144
|
+
getNext: React.useCallback(
|
|
145
|
+
(current) => {
|
|
146
|
+
const items = getNavigableItems();
|
|
147
|
+
if (items.length === 0) return null;
|
|
148
|
+
const index = items.findIndex(({ id }) => id === current);
|
|
149
|
+
if (index === -1) {
|
|
150
|
+
return items[0] ;
|
|
151
|
+
}
|
|
152
|
+
const newIndex = (index + 1) % items.length ;
|
|
153
|
+
return items[newIndex] ?? null;
|
|
154
|
+
},
|
|
155
|
+
[getNavigableItems, wrap]
|
|
156
|
+
),
|
|
157
|
+
getPrevious: React.useCallback(
|
|
158
|
+
(current) => {
|
|
159
|
+
const items = getNavigableItems();
|
|
160
|
+
if (items.length === 0) return null;
|
|
161
|
+
const index = items.findIndex(({ id }) => id === current);
|
|
162
|
+
if (index === -1) {
|
|
163
|
+
return items[items.length - 1] ;
|
|
164
|
+
}
|
|
165
|
+
const newIndex = (index - 1 + items.length) % items.length ;
|
|
166
|
+
return items[newIndex] ?? null;
|
|
167
|
+
},
|
|
168
|
+
[getNavigableItems, wrap]
|
|
169
|
+
),
|
|
170
|
+
getFirst: React.useCallback(() => {
|
|
171
|
+
return getNavigableItems()[0] ?? null;
|
|
172
|
+
}, [getNavigableItems]),
|
|
173
|
+
getLast: React.useCallback(() => {
|
|
174
|
+
const items = getNavigableItems();
|
|
175
|
+
return items[items.length - 1] ?? null;
|
|
176
|
+
}, [getNavigableItems]),
|
|
177
|
+
getIndex: React.useCallback(
|
|
178
|
+
(current) => {
|
|
179
|
+
return getNavigableItems().findIndex(({ id }) => id === current);
|
|
180
|
+
},
|
|
181
|
+
[getNavigableItems]
|
|
182
|
+
),
|
|
183
|
+
itemAt: React.useCallback(
|
|
184
|
+
(index) => {
|
|
185
|
+
return getNavigableItems()[index] ?? null;
|
|
186
|
+
},
|
|
187
|
+
[getNavigableItems]
|
|
188
|
+
),
|
|
189
|
+
updateItem,
|
|
190
|
+
getRemovedItems,
|
|
191
|
+
removalVersion,
|
|
192
|
+
sortItems
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
exports.useCollection = useCollection;
|
|
197
|
+
//# sourceMappingURL=useCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCollection.js","sources":["../src/tabs/internal/registry/useCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface Item {\n id: string;\n element?: HTMLElement | null;\n value: string;\n location?: \"hidden\" | \"main\" | \"overflow\";\n order?: number;\n stale?: boolean;\n}\n\ninterface StaleItem extends Item {\n staleIndex?: number;\n}\n\nfunction sortBasedOnDOMPosition(items: Item[]): Item[] {\n const indexedItems = items.map((item, index) => [index, item] as const);\n let orderChanged = false;\n indexedItems.sort(([itemAIndex, itemA], [itemBIndex, itemB]) => {\n if (\n itemA.order != null &&\n itemA.order >= 0 &&\n itemB.order != null &&\n itemB.order >= 0 &&\n itemA.order !== itemB.order\n ) {\n if (\n (itemA.order < itemB.order && itemAIndex > itemBIndex) ||\n (itemA.order > itemB.order && itemAIndex < itemBIndex)\n ) {\n orderChanged = true;\n }\n return itemA.order - itemB.order;\n }\n\n const itemAElement = itemA.element;\n const itemBElement = itemB.element;\n if (itemAElement === itemBElement) return 0;\n if (!itemAElement || !itemBElement) return 0;\n\n const pos = itemAElement.compareDocumentPosition(itemBElement);\n if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return 0;\n\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING) {\n if (itemAIndex > itemBIndex) {\n orderChanged = true;\n }\n return -1;\n }\n\n if (itemAIndex < itemBIndex) {\n orderChanged = true;\n }\n return 1;\n });\n\n if (orderChanged) {\n return indexedItems.map(([_, item]) => item);\n }\n return items;\n}\n\ninterface UseCollectionProps {\n targetWindow: Window | null | undefined;\n wrap: boolean;\n}\n\nexport function useCollection({ wrap, targetWindow }: UseCollectionProps) {\n const itemsRef = useRef<Item[]>([]);\n const itemMap = useRef<Map<string, Item>>(new Map());\n const removedItems = useRef<Map<string, StaleItem>>(new Map());\n const [removalVersion, setRemovalVersion] = useState(0);\n\n const getOrderedItems = useCallback(() => {\n return sortBasedOnDOMPosition(Array.from(itemMap.current.values()));\n }, []);\n\n const getNavigableItems = useCallback(() => {\n return getOrderedItems().filter((item) => {\n if (item.location === \"hidden\") {\n return false;\n }\n\n return !!item.element;\n });\n }, [getOrderedItems]);\n\n const sortItems = useCallback(() => {\n itemsRef.current = getOrderedItems();\n }, [getOrderedItems]);\n\n const getRemovedItems = useCallback(() => {\n const items = new Map(removedItems.current);\n removedItems.current.clear();\n\n return items;\n }, []);\n\n const rafId = useRef<number | null>(null);\n\n const scheduleSort = useCallback(() => {\n if (!targetWindow?.requestAnimationFrame) {\n sortItems();\n return;\n }\n\n if (rafId.current != null) {\n targetWindow.cancelAnimationFrame(rafId.current);\n }\n\n rafId.current = targetWindow.requestAnimationFrame(() => {\n rafId.current = null;\n sortItems();\n });\n }, [sortItems, targetWindow]);\n\n const registerItem = useCallback(\n (item: Item) => {\n itemMap.current.set(item.id, item);\n removedItems.current.delete(item.id);\n scheduleSort();\n\n return () => {\n const currentItems = getOrderedItems();\n const currentItem = itemMap.current.get(item.id) ?? item;\n const staleIndex = currentItems.findIndex(({ id }) => id === item.id);\n\n removedItems.current.set(item.id, {\n ...currentItem,\n staleIndex,\n });\n\n itemsRef.current = currentItems.filter(({ id }) => id !== item.id);\n itemMap.current.delete(item.id);\n setRemovalVersion((currentVersion) => currentVersion + 1);\n };\n },\n [getOrderedItems, scheduleSort],\n );\n\n const updateItem = useCallback(\n (id: string, updates: Partial<Omit<Item, \"id\" | \"value\">>) => {\n const currentItem = itemMap.current.get(id);\n if (!currentItem) {\n return;\n }\n\n let changed = false;\n const nextItem = { ...currentItem };\n\n for (const [key, nextValue] of Object.entries(updates)) {\n const typedKey = key as keyof Omit<Item, \"id\" | \"value\">;\n if (nextItem[typedKey] !== nextValue) {\n changed = true;\n nextItem[typedKey] = nextValue as never;\n }\n }\n\n if (!changed) {\n return;\n }\n\n itemMap.current.set(id, nextItem);\n itemsRef.current = itemsRef.current.map((item) => {\n if (item.id !== id) {\n return item;\n }\n\n return nextItem;\n });\n scheduleSort();\n },\n [scheduleSort],\n );\n\n useEffect(() => {\n return () => {\n if (rafId.current != null && targetWindow) {\n targetWindow.cancelAnimationFrame(rafId.current);\n }\n };\n }, [targetWindow]);\n\n return {\n registerItem,\n item: useCallback((id?: string | null): Item | null => {\n if (!id) return null;\n let item = itemMap.current.get(id);\n if (!item) {\n item = itemsRef.current.find((item) => item.id === id);\n if (item) {\n itemMap.current.set(item.id, item);\n }\n }\n return item ?? null;\n }, []),\n getNext: useCallback(\n (current: string): Item | null => {\n const items = getNavigableItems();\n if (items.length === 0) return null;\n\n const index = items.findIndex(({ id }) => id === current);\n\n if (index === -1) {\n return wrap ? items[0] : null;\n }\n\n const newIndex = wrap\n ? (index + 1) % items.length\n : Math.min(index + 1, items.length - 1);\n\n return items[newIndex] ?? null;\n },\n [getNavigableItems, wrap],\n ),\n getPrevious: useCallback(\n (current: string): Item | null => {\n const items = getNavigableItems();\n if (items.length === 0) return null;\n\n const index = items.findIndex(({ id }) => id === current);\n\n if (index === -1) {\n return wrap ? items[items.length - 1] : null;\n }\n\n const newIndex = wrap\n ? (index - 1 + items.length) % items.length\n : Math.max(index - 1, 0);\n\n return items[newIndex] ?? null;\n },\n [getNavigableItems, wrap],\n ),\n getFirst: useCallback((): Item | null => {\n return getNavigableItems()[0] ?? null;\n }, [getNavigableItems]),\n getLast: useCallback((): Item | null => {\n const items = getNavigableItems();\n return items[items.length - 1] ?? null;\n }, [getNavigableItems]),\n getIndex: useCallback(\n (current: string): number => {\n return getNavigableItems().findIndex(({ id }) => id === current);\n },\n [getNavigableItems],\n ),\n itemAt: useCallback(\n (index: number): Item | null => {\n return getNavigableItems()[index] ?? null;\n },\n [getNavigableItems],\n ),\n updateItem,\n getRemovedItems,\n removalVersion,\n sortItems,\n };\n}\n"],"names":["useRef","useState","useCallback","useEffect","item"],"mappings":";;;;AAeA,SAAS,uBAAuB,KAAA,EAAuB;AACrD,EAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU,CAAC,KAAA,EAAO,IAAI,CAAU,CAAA;AACtE,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAC,UAAA,EAAY,KAAK,CAAA,EAAG,CAAC,UAAA,EAAY,KAAK,CAAA,KAAM;AAC9D,IAAA,IACE,KAAA,CAAM,KAAA,IAAS,IAAA,IACf,KAAA,CAAM,SAAS,CAAA,IACf,KAAA,CAAM,KAAA,IAAS,IAAA,IACf,MAAM,KAAA,IAAS,CAAA,IACf,KAAA,CAAM,KAAA,KAAU,MAAM,KAAA,EACtB;AACA,MAAA,IACG,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,UAAA,GAAa,UAAA,IAC1C,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,UAAA,GAAa,UAAA,EAC3C;AACA,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AACA,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,eAAe,KAAA,CAAM,OAAA;AAC3B,IAAA,MAAM,eAAe,KAAA,CAAM,OAAA;AAC3B,IAAA,IAAI,YAAA,KAAiB,cAAc,OAAO,CAAA;AAC1C,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc,OAAO,CAAA;AAE3C,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,uBAAA,CAAwB,YAAY,CAAA;AAC7D,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,8BAAA,EAAgC,OAAO,CAAA;AAEtD,IAAA,IAAI,GAAA,GAAM,KAAK,2BAAA,EAA6B;AAC1C,MAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAO,aAAa,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,IAAI,MAAM,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,YAAA,EAAa,EAAuB;AACxE,EAAA,MAAM,QAAA,GAAWA,YAAA,CAAe,EAAE,CAAA;AAClC,EAAA,MAAM,OAAA,GAAUA,YAAA,iBAA0B,IAAI,GAAA,EAAK,CAAA;AACnD,EAAA,MAAM,YAAA,GAAeA,YAAA,iBAA+B,IAAI,GAAA,EAAK,CAAA;AAC7D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,eAAS,CAAC,CAAA;AAEtD,EAAA,MAAM,eAAA,GAAkBC,kBAAY,MAAM;AACxC,IAAA,OAAO,uBAAuB,KAAA,CAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA;AAAA,EACpE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAA,OAAO,eAAA,EAAgB,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS;AACxC,MAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,OAAO,CAAC,CAAC,IAAA,CAAK,OAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,SAAA,GAAYA,kBAAY,MAAM;AAClC,IAAA,QAAA,CAAS,UAAU,eAAA,EAAgB;AAAA,EACrC,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,eAAA,GAAkBA,kBAAY,MAAM;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,YAAA,CAAa,OAAO,CAAA;AAC1C,IAAA,YAAA,CAAa,QAAQ,KAAA,EAAM;AAE3B,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQF,aAAsB,IAAI,CAAA;AAExC,EAAA,MAAM,YAAA,GAAeE,kBAAY,MAAM;AACrC,IAAA,IAAI,EAAC,6CAAc,qBAAA,CAAA,EAAuB;AACxC,MAAA,SAAA,EAAU;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,MAAA,YAAA,CAAa,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAAA,IACjD;AAEA,IAAA,KAAA,CAAM,OAAA,GAAU,YAAA,CAAa,qBAAA,CAAsB,MAAM;AACvD,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,MAAA,SAAA,EAAU;AAAA,IACZ,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAA,EAAW,YAAY,CAAC,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACnB,CAAC,IAAA,KAAe;AACd,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AACjC,MAAA,YAAA,CAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AACnC,MAAA,YAAA,EAAa;AAEb,MAAA,OAAO,MAAM;AACX,QAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,QAAA,MAAM,cAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA;AACpD,QAAA,MAAM,UAAA,GAAa,aAAa,SAAA,CAAU,CAAC,EAAE,EAAA,EAAG,KAAM,EAAA,KAAO,IAAA,CAAK,EAAE,CAAA;AAEpE,QAAA,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,UAChC,GAAG,WAAA;AAAA,UACH;AAAA,SACD,CAAA;AAED,QAAA,QAAA,CAAS,OAAA,GAAU,aAAa,MAAA,CAAO,CAAC,EAAE,EAAA,EAAG,KAAM,EAAA,KAAO,IAAA,CAAK,EAAE,CAAA;AACjE,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC9B,QAAA,iBAAA,CAAkB,CAAC,cAAA,KAAmB,cAAA,GAAiB,CAAC,CAAA;AAAA,MAC1D,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,iBAAiB,YAAY;AAAA,GAChC;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,IAAY,OAAA,KAAiD;AAC5D,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAC1C,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,MAAM,QAAA,GAAW,EAAE,GAAG,WAAA,EAAY;AAElC,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACtD,QAAA,MAAM,QAAA,GAAW,GAAA;AACjB,QAAA,IAAI,QAAA,CAAS,QAAQ,CAAA,KAAM,SAAA,EAAW;AACpC,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAA;AAAA,QACvB;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAChC,MAAA,QAAA,CAAS,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS;AAChD,QAAA,IAAI,IAAA,CAAK,OAAO,EAAA,EAAI;AAClB,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,OAAO,QAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,YAAA,EAAa;AAAA,IACf,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,KAAA,CAAM,OAAA,IAAW,IAAA,IAAQ,YAAA,EAAc;AACzC,QAAA,YAAA,CAAa,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAAA,MACjD;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,IAAA,EAAMD,iBAAA,CAAY,CAAC,EAAA,KAAoC;AACrD,MAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,MAAA,IAAI,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AACjC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,SAAS,OAAA,CAAQ,IAAA,CAAK,CAACE,KAAAA,KAASA,KAAAA,CAAK,OAAO,EAAE,CAAA;AACrD,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,QACnC;AAAA,MACF;AACA,MAAA,OAAO,IAAA,IAAQ,IAAA;AAAA,IACjB,CAAA,EAAG,EAAE,CAAA;AAAA,IACL,OAAA,EAASF,iBAAA;AAAA,MACP,CAAC,OAAA,KAAiC;AAChC,QAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,QAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,CAAC,EAAE,EAAA,EAAG,KAAM,OAAO,OAAO,CAAA;AAExD,QAAA,IAAI,UAAU,EAAA,EAAI;AAChB,UAAA,OAAc,KAAA,CAAM,CAAC,CAAA,CAAI;AAAA,QAC3B;AAEA,QAAA,MAAM,QAAA,GAAW,CACZ,KAAA,GAAQ,CAAA,IAAK,KAAA,CAAM,MAAA,CACgB;AAExC,QAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,IAAK,IAAA;AAAA,MAC5B,CAAA;AAAA,MACA,CAAC,mBAAmB,IAAI;AAAA,KAC1B;AAAA,IACA,WAAA,EAAaA,iBAAA;AAAA,MACX,CAAC,OAAA,KAAiC;AAChC,QAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,QAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,CAAC,EAAE,EAAA,EAAG,KAAM,OAAO,OAAO,CAAA;AAExD,QAAA,IAAI,UAAU,EAAA,EAAI;AAChB,UAAA,OAAc,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAI;AAAA,QAC1C;AAEA,QAAA,MAAM,QAAA,GAAW,CACZ,KAAA,GAAQ,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,CACd;AAEzB,QAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,IAAK,IAAA;AAAA,MAC5B,CAAA;AAAA,MACA,CAAC,mBAAmB,IAAI;AAAA,KAC1B;AAAA,IACA,QAAA,EAAUA,kBAAY,MAAmB;AACvC,MAAA,OAAO,iBAAA,EAAkB,CAAE,CAAC,CAAA,IAAK,IAAA;AAAA,IACnC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAAA,IACtB,OAAA,EAASA,kBAAY,MAAmB;AACtC,MAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,MAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,IAAA;AAAA,IACpC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAAA,IACtB,QAAA,EAAUA,iBAAA;AAAA,MACR,CAAC,OAAA,KAA4B;AAC3B,QAAA,OAAO,iBAAA,GAAoB,SAAA,CAAU,CAAC,EAAE,EAAA,EAAG,KAAM,OAAO,OAAO,CAAA;AAAA,MACjE,CAAA;AAAA,MACA,CAAC,iBAAiB;AAAA,KACpB;AAAA,IACA,MAAA,EAAQA,iBAAA;AAAA,MACN,CAAC,KAAA,KAA+B;AAC9B,QAAA,OAAO,iBAAA,EAAkB,CAAE,KAAK,CAAA,IAAK,IAAA;AAAA,MACvC,CAAA;AAAA,MACA,CAAC,iBAAiB;AAAA,KACpB;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
require('clsx');
|
|
5
|
+
require('react/jsx-runtime');
|
|
6
|
+
var useIsomorphicLayoutEffect = require('../../../utils/useIsomorphicLayoutEffect.js');
|
|
7
|
+
require('../../../utils/useFloatingUI/useFloatingUI.js');
|
|
8
|
+
require('../../../utils/useId.js');
|
|
9
|
+
require('../../../salt-provider/SaltProvider.js');
|
|
10
|
+
require('../../../viewport/ViewportProvider.js');
|
|
11
|
+
var widthMeasurement = require('../overflow/widthMeasurement.js');
|
|
12
|
+
|
|
13
|
+
function sortRenderedTabs(tabs) {
|
|
14
|
+
return [...tabs].sort((tabA, tabB) => {
|
|
15
|
+
if (tabA.marker === tabB.marker) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
if (!tabA.marker || !tabB.marker) {
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
const position = tabA.marker.compareDocumentPosition(tabB.marker);
|
|
22
|
+
if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
23
|
+
return -1;
|
|
24
|
+
}
|
|
25
|
+
if (position & Node.DOCUMENT_POSITION_PRECEDING) {
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
return 0;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function useRenderedTabsRegistry() {
|
|
32
|
+
const [renderedTabMap, setRenderedTabMap] = React.useState(
|
|
33
|
+
() => /* @__PURE__ */ new Map()
|
|
34
|
+
);
|
|
35
|
+
const [renderMode, setRenderMode] = React.useState("inline");
|
|
36
|
+
const [bootstrapTabs, setBootstrapTabs] = React.useState(() => /* @__PURE__ */ new Set());
|
|
37
|
+
const [readyBootstrapTabs, setReadyBootstrapTabs] = React.useState(
|
|
38
|
+
() => /* @__PURE__ */ new Set()
|
|
39
|
+
);
|
|
40
|
+
const [bootstrapOverflowReady, setBootstrapOverflowReadyState] = React.useState(false);
|
|
41
|
+
const registerBootstrapTab = React.useCallback((tabValue) => {
|
|
42
|
+
setBootstrapTabs((currentTabs) => {
|
|
43
|
+
if (currentTabs.has(tabValue)) {
|
|
44
|
+
return currentTabs;
|
|
45
|
+
}
|
|
46
|
+
const nextTabs = new Set(currentTabs);
|
|
47
|
+
nextTabs.add(tabValue);
|
|
48
|
+
return nextTabs;
|
|
49
|
+
});
|
|
50
|
+
return () => {
|
|
51
|
+
setBootstrapTabs((currentTabs) => {
|
|
52
|
+
if (!currentTabs.has(tabValue)) {
|
|
53
|
+
return currentTabs;
|
|
54
|
+
}
|
|
55
|
+
const nextTabs = new Set(currentTabs);
|
|
56
|
+
nextTabs.delete(tabValue);
|
|
57
|
+
return nextTabs;
|
|
58
|
+
});
|
|
59
|
+
setReadyBootstrapTabs((currentTabs) => {
|
|
60
|
+
if (!currentTabs.has(tabValue)) {
|
|
61
|
+
return currentTabs;
|
|
62
|
+
}
|
|
63
|
+
const nextTabs = new Set(currentTabs);
|
|
64
|
+
nextTabs.delete(tabValue);
|
|
65
|
+
return nextTabs;
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
const setBootstrapTabReady = React.useCallback(
|
|
70
|
+
(tabValue, ready) => {
|
|
71
|
+
setReadyBootstrapTabs((currentTabs) => {
|
|
72
|
+
const hasTab = currentTabs.has(tabValue);
|
|
73
|
+
if (ready === hasTab) {
|
|
74
|
+
return currentTabs;
|
|
75
|
+
}
|
|
76
|
+
const nextTabs = new Set(currentTabs);
|
|
77
|
+
if (ready) {
|
|
78
|
+
nextTabs.add(tabValue);
|
|
79
|
+
} else {
|
|
80
|
+
nextTabs.delete(tabValue);
|
|
81
|
+
}
|
|
82
|
+
return nextTabs;
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
[]
|
|
86
|
+
);
|
|
87
|
+
const setBootstrapOverflowReady = React.useCallback((ready) => {
|
|
88
|
+
setBootstrapOverflowReadyState((currentReady) => {
|
|
89
|
+
if (currentReady === ready) {
|
|
90
|
+
return currentReady;
|
|
91
|
+
}
|
|
92
|
+
return ready;
|
|
93
|
+
});
|
|
94
|
+
}, []);
|
|
95
|
+
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
96
|
+
if (renderMode === "portal" || bootstrapTabs.size < 1) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (!bootstrapOverflowReady) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
for (const tabValue of bootstrapTabs) {
|
|
103
|
+
if (!readyBootstrapTabs.has(tabValue)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const renderedTab = renderedTabMap.get(tabValue);
|
|
107
|
+
if (!renderedTab || widthMeasurement.getMeasuredWidth(renderedTab.root) <= 0) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
setRenderMode("portal");
|
|
112
|
+
}, [
|
|
113
|
+
bootstrapOverflowReady,
|
|
114
|
+
bootstrapTabs,
|
|
115
|
+
readyBootstrapTabs,
|
|
116
|
+
renderMode,
|
|
117
|
+
renderedTabMap
|
|
118
|
+
]);
|
|
119
|
+
const registerRenderedTab = React.useCallback((tab) => {
|
|
120
|
+
setRenderedTabMap((map) => {
|
|
121
|
+
const existing = map.get(tab.value);
|
|
122
|
+
if (process.env.NODE_ENV !== "production" && existing && existing.id !== tab.id) {
|
|
123
|
+
console.warn(
|
|
124
|
+
`Tabs received duplicate tab value "${tab.value}". Tab values must be unique within a Tabs instance.`
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
if (existing === tab) {
|
|
128
|
+
return map;
|
|
129
|
+
}
|
|
130
|
+
const next = new Map(map);
|
|
131
|
+
next.set(tab.value, tab);
|
|
132
|
+
return next;
|
|
133
|
+
});
|
|
134
|
+
return () => {
|
|
135
|
+
setRenderedTabMap((map) => {
|
|
136
|
+
const existing = map.get(tab.value);
|
|
137
|
+
if (!existing || existing.id !== tab.id) {
|
|
138
|
+
return map;
|
|
139
|
+
}
|
|
140
|
+
const next = new Map(map);
|
|
141
|
+
next.delete(tab.value);
|
|
142
|
+
return next;
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
}, []);
|
|
146
|
+
const updateRenderedTab = React.useCallback(
|
|
147
|
+
(value, updates) => {
|
|
148
|
+
setRenderedTabMap((map) => {
|
|
149
|
+
const existing = map.get(value);
|
|
150
|
+
if (!existing) {
|
|
151
|
+
return map;
|
|
152
|
+
}
|
|
153
|
+
let changed = false;
|
|
154
|
+
const nextRecord = { ...existing };
|
|
155
|
+
for (const [key, nextValue] of Object.entries(updates)) {
|
|
156
|
+
const typedKey = key;
|
|
157
|
+
if (nextRecord[typedKey] !== nextValue) {
|
|
158
|
+
changed = true;
|
|
159
|
+
nextRecord[typedKey] = nextValue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!changed) {
|
|
163
|
+
return map;
|
|
164
|
+
}
|
|
165
|
+
const next = new Map(map);
|
|
166
|
+
next.set(value, nextRecord);
|
|
167
|
+
return next;
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
[]
|
|
171
|
+
);
|
|
172
|
+
const getRenderedTab = React.useCallback(
|
|
173
|
+
(value) => {
|
|
174
|
+
return renderedTabMap.get(value);
|
|
175
|
+
},
|
|
176
|
+
[renderedTabMap]
|
|
177
|
+
);
|
|
178
|
+
const renderedTabs = React.useMemo(() => {
|
|
179
|
+
return sortRenderedTabs(Array.from(renderedTabMap.values()));
|
|
180
|
+
}, [renderedTabMap]);
|
|
181
|
+
const renderedTabOrderMap = React.useMemo(() => {
|
|
182
|
+
return new Map(
|
|
183
|
+
renderedTabs.map((tab, index) => [tab.value, index])
|
|
184
|
+
);
|
|
185
|
+
}, [renderedTabs]);
|
|
186
|
+
const getRenderedTabOrder = React.useCallback(
|
|
187
|
+
(value) => {
|
|
188
|
+
return renderedTabOrderMap.get(value) ?? -1;
|
|
189
|
+
},
|
|
190
|
+
[renderedTabOrderMap]
|
|
191
|
+
);
|
|
192
|
+
return {
|
|
193
|
+
renderMode,
|
|
194
|
+
registerBootstrapTab,
|
|
195
|
+
setBootstrapTabReady,
|
|
196
|
+
setBootstrapOverflowReady,
|
|
197
|
+
registerRenderedTab,
|
|
198
|
+
updateRenderedTab,
|
|
199
|
+
getRenderedTab,
|
|
200
|
+
getRenderedTabOrder,
|
|
201
|
+
renderedTabs
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
exports.useRenderedTabsRegistry = useRenderedTabsRegistry;
|
|
206
|
+
//# sourceMappingURL=useRenderedTabsRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRenderedTabsRegistry.js","sources":["../src/tabs/internal/registry/useRenderedTabsRegistry.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../../../utils\";\nimport type { RenderedTab, TabsRenderMode } from \"../contexts/TabsContext\";\nimport { getMeasuredWidth } from \"../overflow/widthMeasurement\";\n\nfunction sortRenderedTabs(tabs: RenderedTab[]) {\n return [...tabs].sort((tabA, tabB) => {\n if (tabA.marker === tabB.marker) {\n return 0;\n }\n if (!tabA.marker || !tabB.marker) {\n return 0;\n }\n\n const position = tabA.marker.compareDocumentPosition(tabB.marker);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n}\n\nexport function useRenderedTabsRegistry() {\n const [renderedTabMap, setRenderedTabMap] = useState(\n () => new Map<string, RenderedTab>(),\n );\n const [renderMode, setRenderMode] = useState<TabsRenderMode>(\"inline\");\n const [bootstrapTabs, setBootstrapTabs] = useState(() => new Set<string>());\n const [readyBootstrapTabs, setReadyBootstrapTabs] = useState(\n () => new Set<string>(),\n );\n const [bootstrapOverflowReady, setBootstrapOverflowReadyState] =\n useState(false);\n\n const registerBootstrapTab = useCallback((tabValue: string) => {\n setBootstrapTabs((currentTabs) => {\n if (currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.add(tabValue);\n return nextTabs;\n });\n\n return () => {\n setBootstrapTabs((currentTabs) => {\n if (!currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.delete(tabValue);\n return nextTabs;\n });\n setReadyBootstrapTabs((currentTabs) => {\n if (!currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.delete(tabValue);\n return nextTabs;\n });\n };\n }, []);\n\n const setBootstrapTabReady = useCallback(\n (tabValue: string, ready: boolean) => {\n setReadyBootstrapTabs((currentTabs) => {\n const hasTab = currentTabs.has(tabValue);\n if (ready === hasTab) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n if (ready) {\n nextTabs.add(tabValue);\n } else {\n nextTabs.delete(tabValue);\n }\n return nextTabs;\n });\n },\n [],\n );\n\n const setBootstrapOverflowReady = useCallback((ready: boolean) => {\n setBootstrapOverflowReadyState((currentReady) => {\n if (currentReady === ready) {\n return currentReady;\n }\n\n return ready;\n });\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (renderMode === \"portal\" || bootstrapTabs.size < 1) {\n return;\n }\n\n if (!bootstrapOverflowReady) {\n return;\n }\n\n for (const tabValue of bootstrapTabs) {\n if (!readyBootstrapTabs.has(tabValue)) {\n return;\n }\n\n const renderedTab = renderedTabMap.get(tabValue);\n if (!renderedTab || getMeasuredWidth(renderedTab.root) <= 0) {\n return;\n }\n }\n\n setRenderMode(\"portal\");\n }, [\n bootstrapOverflowReady,\n bootstrapTabs,\n readyBootstrapTabs,\n renderMode,\n renderedTabMap,\n ]);\n\n const registerRenderedTab = useCallback((tab: RenderedTab) => {\n setRenderedTabMap((map) => {\n const existing = map.get(tab.value);\n if (\n process.env.NODE_ENV !== \"production\" &&\n existing &&\n existing.id !== tab.id\n ) {\n console.warn(\n `Tabs received duplicate tab value \"${tab.value}\". Tab values must be unique within a Tabs instance.`,\n );\n }\n\n if (existing === tab) {\n return map;\n }\n\n const next = new Map(map);\n next.set(tab.value, tab);\n return next;\n });\n\n return () => {\n setRenderedTabMap((map) => {\n const existing = map.get(tab.value);\n if (!existing || existing.id !== tab.id) {\n return map;\n }\n\n const next = new Map(map);\n next.delete(tab.value);\n return next;\n });\n };\n }, []);\n\n const updateRenderedTab = useCallback(\n (value: string, updates: Partial<Omit<RenderedTab, \"value\">>) => {\n setRenderedTabMap((map) => {\n const existing = map.get(value);\n if (!existing) {\n return map;\n }\n\n let changed = false;\n const nextRecord = { ...existing };\n for (const [key, nextValue] of Object.entries(updates)) {\n const typedKey = key as keyof Omit<RenderedTab, \"value\">;\n if (nextRecord[typedKey] !== nextValue) {\n changed = true;\n nextRecord[typedKey] = nextValue as never;\n }\n }\n\n if (!changed) {\n return map;\n }\n\n const next = new Map(map);\n next.set(value, nextRecord);\n return next;\n });\n },\n [],\n );\n\n const getRenderedTab = useCallback(\n (value: string) => {\n return renderedTabMap.get(value);\n },\n [renderedTabMap],\n );\n\n const renderedTabs = useMemo(() => {\n return sortRenderedTabs(Array.from(renderedTabMap.values()));\n }, [renderedTabMap]);\n\n const renderedTabOrderMap = useMemo(() => {\n return new Map(\n renderedTabs.map((tab, index) => [tab.value, index] as const),\n );\n }, [renderedTabs]);\n\n const getRenderedTabOrder = useCallback(\n (value: string) => {\n return renderedTabOrderMap.get(value) ?? -1;\n },\n [renderedTabOrderMap],\n );\n\n return {\n renderMode,\n registerBootstrapTab,\n setBootstrapTabReady,\n setBootstrapOverflowReady,\n registerRenderedTab,\n updateRenderedTab,\n getRenderedTab,\n getRenderedTabOrder,\n renderedTabs,\n };\n}\n"],"names":["useState","useCallback","useIsomorphicLayoutEffect","getMeasuredWidth","useMemo"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function isHTMLElement(node) {
|
|
4
|
+
if (!node || typeof node !== "object") {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
const ownerDocument = node.ownerDocument;
|
|
8
|
+
const defaultView = ownerDocument == null ? void 0 : ownerDocument.defaultView;
|
|
9
|
+
return !!defaultView && node instanceof defaultView.HTMLElement;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.isHTMLElement = isHTMLElement;
|
|
13
|
+
//# sourceMappingURL=domUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domUtils.js","sources":["../src/tabs/internal/utils/domUtils.ts"],"sourcesContent":["export function isHTMLElement(node: unknown): node is HTMLElement {\n if (!node || typeof node !== \"object\") {\n return false;\n }\n\n const ownerDocument = (node as { ownerDocument?: Document | null })\n .ownerDocument;\n const defaultView = ownerDocument?.defaultView;\n\n return !!defaultView && node instanceof defaultView.HTMLElement;\n}\n"],"names":[],"mappings":";;AAAO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAiB,IAAA,CACpB,aAAA;AACH,EAAA,MAAM,cAAc,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,WAAA;AAEnC,EAAA,OAAO,CAAC,CAAC,WAAA,IAAe,IAAA,YAAgB,WAAA,CAAY,WAAA;AACtD;;;;"}
|
package/dist-es/index.js
CHANGED
|
@@ -88,10 +88,19 @@ export { LinearProgress } from './progress/LinearProgress/LinearProgress.js';
|
|
|
88
88
|
export { RadioButton } from './radio-button/RadioButton.js';
|
|
89
89
|
export { RadioButtonGroup } from './radio-button/RadioButtonGroup.js';
|
|
90
90
|
export { RadioButtonIcon } from './radio-button/RadioButtonIcon.js';
|
|
91
|
+
export { Rating } from './rating/Rating.js';
|
|
91
92
|
export { BreakpointContext, DEFAULT_DENSITY, DensityContext, SaltProvider, SaltProviderNext, ThemeContext, UNSTABLE_SaltProviderNext, useBreakpoints, useDensity, useTheme } from './salt-provider/SaltProvider.js';
|
|
92
93
|
export { Scrim } from './scrim/Scrim.js';
|
|
93
94
|
export { SegmentedButtonGroup } from './segmented-button-group/SegmentedButtonGroup.js';
|
|
94
95
|
export { SemanticIconProvider, useIcon } from './semantic-icon-provider/SemanticIconProvider.js';
|
|
96
|
+
export { SidePanel } from './side-panel/SidePanel.js';
|
|
97
|
+
export { SidePanelCloseButton } from './side-panel/SidePanelCloseButton.js';
|
|
98
|
+
export { SidePanelContent } from './side-panel/SidePanelContent.js';
|
|
99
|
+
export { SidePanelHeader } from './side-panel/SidePanelHeader.js';
|
|
100
|
+
export { SidePanelProvider } from './side-panel/SidePanelProvider.js';
|
|
101
|
+
export { SidePanelTitle } from './side-panel/SidePanelTitle.js';
|
|
102
|
+
export { SidePanelTrigger } from './side-panel/SidePanelTrigger.js';
|
|
103
|
+
export { useSidePanel } from './side-panel/useSidePanel.js';
|
|
95
104
|
export { SkipLink } from './skip-link/SkipLink.js';
|
|
96
105
|
export { RangeSlider } from './slider/RangeSlider.js';
|
|
97
106
|
export { Slider } from './slider/Slider.js';
|
|
@@ -112,6 +121,13 @@ export { TFoot } from './table/TFoot.js';
|
|
|
112
121
|
export { TH } from './table/TH.js';
|
|
113
122
|
export { THead } from './table/THead.js';
|
|
114
123
|
export { TR } from './table/TR.js';
|
|
124
|
+
export { Tab } from './tabs/Tab.js';
|
|
125
|
+
export { TabAction } from './tabs/TabAction.js';
|
|
126
|
+
export { TabBar } from './tabs/TabBar.js';
|
|
127
|
+
export { TabList } from './tabs/TabList.js';
|
|
128
|
+
export { TabPanel } from './tabs/TabPanel.js';
|
|
129
|
+
export { Tabs } from './tabs/Tabs.js';
|
|
130
|
+
export { TabTrigger } from './tabs/TabTrigger.js';
|
|
115
131
|
export { Tag } from './tag/Tag.js';
|
|
116
132
|
export { Code } from './text/Code.js';
|
|
117
133
|
export { Display1, Display2, Display3, Display4 } from './text/Display.js';
|
package/dist-es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -28,6 +28,7 @@ const NavigationItem = forwardRef(
|
|
|
28
28
|
level = 0,
|
|
29
29
|
onExpand,
|
|
30
30
|
style: styleProp,
|
|
31
|
+
"aria-controls": ariaControls,
|
|
31
32
|
...rest
|
|
32
33
|
} = props;
|
|
33
34
|
const targetWindow = useWindow();
|
|
@@ -65,6 +66,7 @@ const NavigationItem = forwardRef(
|
|
|
65
66
|
),
|
|
66
67
|
render: render ?? (isLink ? void 0 : /* @__PURE__ */ jsx("button", { type: "button" })),
|
|
67
68
|
"aria-expanded": isLink ? void 0 : expanded,
|
|
69
|
+
"aria-controls": ariaControls,
|
|
68
70
|
onClick: handleClick,
|
|
69
71
|
"aria-current": isLink && active ? "page" : void 0,
|
|
70
72
|
href,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEvent,\n type MouseEventHandler,\n} from \"react\";\nimport type { RenderPropsType } from \"../utils\";\nimport { makePrefixer } from \"../utils\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { NavigationItemAction } from \"./NavigationItemAction\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Render prop to enable customisation of navigation item element.\n */\n render?: RenderPropsType[\"render\"];\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n render,\n children,\n className,\n expanded = false,\n href,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n style: styleProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n const isLink = href !== undefined;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onExpand?.(event);\n };\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n style={style}\n {...rest}\n >\n <NavigationItemAction\n className={clsx(\n withBaseName(\"wrapper\"),\n {\n [withBaseName(\"active\")]: active || blurActive,\n [withBaseName(\"blurActive\")]: blurActive,\n [withBaseName(\"rootItem\")]: level === 0,\n },\n withBaseName(orientation),\n )}\n render={render ?? (isLink ? undefined : <button type=\"button\" />)}\n aria-expanded={isLink ? undefined : expanded}\n onClick={handleClick}\n aria-current={isLink && active ? \"page\" : undefined}\n href={href}\n >\n <span className={withBaseName(\"label\")}>{children}</span>\n {parent ? (\n <ExpansionIcon expanded={expanded} orientation={orientation} />\n ) : null}\n </NavigationItemAction>\n </div>\n );\n },\n);\n"],"names":["NavigationItem","navigationItemCss"],"mappings":";;;;;;;;;;;;;;AAsDA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAA,GAAiB,UAAA;AAAA,EAC5B,SAASA,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,GAAW,KAAA;AAAA,MACX,IAAA;AAAA,MACA,WAAA,GAAc,YAAA;AAAA,MACd,MAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,QAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,4BAAA,EAA8B,GAAG,KAAK,CAAA;AAAA,KACxC;AAEA,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyC;AAC5D,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,IAAA;AAAA,cACT,aAAa,SAAS,CAAA;AAAA,cACtB;AAAA,gBACE,CAAC,YAAA,CAAa,QAAQ,CAAC,GAAG,MAAA,IAAU,UAAA;AAAA,gBACpC,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,gBAC9B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,KAAA,KAAU;AAAA,eACxC;AAAA,cACA,aAAa,WAAW;AAAA,aAC1B;AAAA,YACA,QAAQ,MAAA,KAAW,MAAA,GAAS,yBAAY,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,CAAA,CAAA;AAAA,YAC9D,eAAA,EAAe,SAAS,MAAA,GAAY,QAAA;AAAA,YACpC,OAAA,EAAS,WAAA;AAAA,YACT,cAAA,EAAc,MAAA,IAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,YAC1C,IAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,OAAO,GAAI,QAAA,EAAS,CAAA;AAAA,cACjD,MAAA,mBACC,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAoB,aAA0B,CAAA,GAC3D;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEvent,\n type MouseEventHandler,\n} from \"react\";\nimport type { RenderPropsType } from \"../utils\";\nimport { makePrefixer } from \"../utils\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { NavigationItemAction } from \"./NavigationItemAction\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Render prop to enable customisation of navigation item element.\n */\n render?: RenderPropsType[\"render\"];\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n render,\n children,\n className,\n expanded = false,\n href,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n style: styleProp,\n \"aria-controls\": ariaControls,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n const isLink = href !== undefined;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onExpand?.(event);\n };\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n style={style}\n {...rest}\n >\n <NavigationItemAction\n className={clsx(\n withBaseName(\"wrapper\"),\n {\n [withBaseName(\"active\")]: active || blurActive,\n [withBaseName(\"blurActive\")]: blurActive,\n [withBaseName(\"rootItem\")]: level === 0,\n },\n withBaseName(orientation),\n )}\n render={render ?? (isLink ? undefined : <button type=\"button\" />)}\n aria-expanded={isLink ? undefined : expanded}\n aria-controls={ariaControls}\n onClick={handleClick}\n aria-current={isLink && active ? \"page\" : undefined}\n href={href}\n >\n <span className={withBaseName(\"label\")}>{children}</span>\n {parent ? (\n <ExpansionIcon expanded={expanded} orientation={orientation} />\n ) : null}\n </NavigationItemAction>\n </div>\n );\n },\n);\n"],"names":["NavigationItem","navigationItemCss"],"mappings":";;;;;;;;;;;;;;AAsDA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAA,GAAiB,UAAA;AAAA,EAC5B,SAASA,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,GAAW,KAAA;AAAA,MACX,IAAA;AAAA,MACA,WAAA,GAAc,YAAA;AAAA,MACd,MAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,QAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,YAAA;AAAA,MACjB,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,4BAAA,EAA8B,GAAG,KAAK,CAAA;AAAA,KACxC;AAEA,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyC;AAC5D,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAA,IAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,IAAA;AAAA,cACT,aAAa,SAAS,CAAA;AAAA,cACtB;AAAA,gBACE,CAAC,YAAA,CAAa,QAAQ,CAAC,GAAG,MAAA,IAAU,UAAA;AAAA,gBACpC,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,gBAC9B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,KAAA,KAAU;AAAA,eACxC;AAAA,cACA,aAAa,WAAW;AAAA,aAC1B;AAAA,YACA,QAAQ,MAAA,KAAW,MAAA,GAAS,yBAAY,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,CAAA,CAAA;AAAA,YAC9D,eAAA,EAAe,SAAS,MAAA,GAAY,QAAA;AAAA,YACpC,eAAA,EAAe,YAAA;AAAA,YACf,OAAA,EAAS,WAAA;AAAA,YACT,cAAA,EAAc,MAAA,IAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,YAC1C,IAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,OAAO,GAAI,QAAA,EAAS,CAAA;AAAA,cACjD,MAAA,mBACC,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAoB,aAA0B,CAAA,GAC3D;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css_248z = ".saltRating {\n display: inline-flex;\n box-sizing: border-box;\n}\n\n.saltFormField .saltRating-container {\n height: var(--salt-size-base);\n padding-top: calc(var(--salt-spacing-100) + var(--salt-spacing-fixed-100));\n}\n\n.saltFormField .saltRating-label {\n min-height: var(--salt-size-base);\n padding-top: var(--salt-spacing-100);\n}\n\n.saltRating-labelBottom {\n flex-direction: column;\n align-items: flex-start;\n gap: var(--salt-spacing-75);\n}\n\n.saltRating-labelRight {\n flex-direction: row;\n gap: var(--salt-spacing-150);\n}\n\n.saltRating-container {\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-150);\n flex-wrap: nowrap;\n justify-content: flex-start;\n padding-top: var(--salt-spacing-fixed-100);\n padding-bottom: var(--salt-spacing-fixed-100);\n box-sizing: border-box;\n}\n\n.saltRating-label {\n color: var(--salt-content-primary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n box-sizing: border-box;\n}\n";
|
|
2
|
+
|
|
3
|
+
export { css_248z as default };
|
|
4
|
+
//# sourceMappingURL=Rating.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rating.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|