@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.
Files changed (268) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/css/salt-core.css +492 -1
  3. package/dist-cjs/index.js +32 -0
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/navigation-item/NavigationItem.js +2 -0
  6. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
  7. package/dist-cjs/rating/Rating.css.js +6 -0
  8. package/dist-cjs/rating/Rating.css.js.map +1 -0
  9. package/dist-cjs/rating/Rating.js +140 -0
  10. package/dist-cjs/rating/Rating.js.map +1 -0
  11. package/dist-cjs/rating/RatingItem.css.js +6 -0
  12. package/dist-cjs/rating/RatingItem.css.js.map +1 -0
  13. package/dist-cjs/rating/RatingItem.js +75 -0
  14. package/dist-cjs/rating/RatingItem.js.map +1 -0
  15. package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js +22 -20
  16. package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
  17. package/dist-cjs/side-panel/SidePanel.css.js +6 -0
  18. package/dist-cjs/side-panel/SidePanel.css.js.map +1 -0
  19. package/dist-cjs/side-panel/SidePanel.js +205 -0
  20. package/dist-cjs/side-panel/SidePanel.js.map +1 -0
  21. package/dist-cjs/side-panel/SidePanelCloseButton.js +44 -0
  22. package/dist-cjs/side-panel/SidePanelCloseButton.js.map +1 -0
  23. package/dist-cjs/side-panel/SidePanelContent.css.js +6 -0
  24. package/dist-cjs/side-panel/SidePanelContent.css.js.map +1 -0
  25. package/dist-cjs/side-panel/SidePanelContent.js +70 -0
  26. package/dist-cjs/side-panel/SidePanelContent.js.map +1 -0
  27. package/dist-cjs/side-panel/SidePanelHeader.css.js +6 -0
  28. package/dist-cjs/side-panel/SidePanelHeader.css.js.map +1 -0
  29. package/dist-cjs/side-panel/SidePanelHeader.js +30 -0
  30. package/dist-cjs/side-panel/SidePanelHeader.js.map +1 -0
  31. package/dist-cjs/side-panel/SidePanelProvider.js +83 -0
  32. package/dist-cjs/side-panel/SidePanelProvider.js.map +1 -0
  33. package/dist-cjs/side-panel/SidePanelTitle.css.js +6 -0
  34. package/dist-cjs/side-panel/SidePanelTitle.css.js.map +1 -0
  35. package/dist-cjs/side-panel/SidePanelTitle.js +60 -0
  36. package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -0
  37. package/dist-cjs/side-panel/SidePanelTrigger.js +43 -0
  38. package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -0
  39. package/dist-cjs/side-panel/internal/SidePanelContext.js +38 -0
  40. package/dist-cjs/side-panel/internal/SidePanelContext.js.map +1 -0
  41. package/dist-cjs/side-panel/internal/useIsScrollable.js +50 -0
  42. package/dist-cjs/side-panel/internal/useIsScrollable.js.map +1 -0
  43. package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js +214 -0
  44. package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
  45. package/dist-cjs/side-panel/useSidePanel.js +49 -0
  46. package/dist-cjs/side-panel/useSidePanel.js.map +1 -0
  47. package/dist-cjs/tabs/Tab.css.js +6 -0
  48. package/dist-cjs/tabs/Tab.css.js.map +1 -0
  49. package/dist-cjs/tabs/Tab.js +211 -0
  50. package/dist-cjs/tabs/Tab.js.map +1 -0
  51. package/dist-cjs/tabs/TabAction.js +63 -0
  52. package/dist-cjs/tabs/TabAction.js.map +1 -0
  53. package/dist-cjs/tabs/TabBar.css.js +6 -0
  54. package/dist-cjs/tabs/TabBar.css.js.map +1 -0
  55. package/dist-cjs/tabs/TabBar.js +45 -0
  56. package/dist-cjs/tabs/TabBar.js.map +1 -0
  57. package/dist-cjs/tabs/TabList.css.js +6 -0
  58. package/dist-cjs/tabs/TabList.css.js.map +1 -0
  59. package/dist-cjs/tabs/TabList.js +281 -0
  60. package/dist-cjs/tabs/TabList.js.map +1 -0
  61. package/dist-cjs/tabs/TabPanel.css.js +6 -0
  62. package/dist-cjs/tabs/TabPanel.css.js.map +1 -0
  63. package/dist-cjs/tabs/TabPanel.js +98 -0
  64. package/dist-cjs/tabs/TabPanel.js.map +1 -0
  65. package/dist-cjs/tabs/TabTrigger.css.js +6 -0
  66. package/dist-cjs/tabs/TabTrigger.css.js.map +1 -0
  67. package/dist-cjs/tabs/TabTrigger.js +188 -0
  68. package/dist-cjs/tabs/TabTrigger.js.map +1 -0
  69. package/dist-cjs/tabs/Tabs.css.js +6 -0
  70. package/dist-cjs/tabs/Tabs.css.js.map +1 -0
  71. package/dist-cjs/tabs/Tabs.js +200 -0
  72. package/dist-cjs/tabs/Tabs.js.map +1 -0
  73. package/dist-cjs/tabs/internal/contexts/TabContext.js +26 -0
  74. package/dist-cjs/tabs/internal/contexts/TabContext.js.map +1 -0
  75. package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js +19 -0
  76. package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
  77. package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js +22 -0
  78. package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
  79. package/dist-cjs/tabs/internal/contexts/TabsContext.js +50 -0
  80. package/dist-cjs/tabs/internal/contexts/TabsContext.js.map +1 -0
  81. package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js +64 -0
  82. package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
  83. package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js +76 -0
  84. package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
  85. package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js +165 -0
  86. package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
  87. package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js +87 -0
  88. package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
  89. package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js +6 -0
  90. package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
  91. package/dist-cjs/tabs/internal/overflow/TabOverflowList.js +245 -0
  92. package/dist-cjs/tabs/internal/overflow/TabOverflowList.js.map +1 -0
  93. package/dist-cjs/tabs/internal/overflow/TabSlot.js +30 -0
  94. package/dist-cjs/tabs/internal/overflow/TabSlot.js.map +1 -0
  95. package/dist-cjs/tabs/internal/overflow/overflowMath.js +86 -0
  96. package/dist-cjs/tabs/internal/overflow/overflowMath.js.map +1 -0
  97. package/dist-cjs/tabs/internal/overflow/useOverflow.js +273 -0
  98. package/dist-cjs/tabs/internal/overflow/useOverflow.js.map +1 -0
  99. package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js +99 -0
  100. package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
  101. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js +68 -0
  102. package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
  103. package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js +92 -0
  104. package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
  105. package/dist-cjs/tabs/internal/overflow/widthMeasurement.js +42 -0
  106. package/dist-cjs/tabs/internal/overflow/widthMeasurement.js.map +1 -0
  107. package/dist-cjs/tabs/internal/registry/useCollection.js +197 -0
  108. package/dist-cjs/tabs/internal/registry/useCollection.js.map +1 -0
  109. package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js +206 -0
  110. package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
  111. package/dist-cjs/tabs/internal/utils/domUtils.js +13 -0
  112. package/dist-cjs/tabs/internal/utils/domUtils.js.map +1 -0
  113. package/dist-es/index.js +16 -0
  114. package/dist-es/index.js.map +1 -1
  115. package/dist-es/navigation-item/NavigationItem.js +2 -0
  116. package/dist-es/navigation-item/NavigationItem.js.map +1 -1
  117. package/dist-es/rating/Rating.css.js +4 -0
  118. package/dist-es/rating/Rating.css.js.map +1 -0
  119. package/dist-es/rating/Rating.js +138 -0
  120. package/dist-es/rating/Rating.js.map +1 -0
  121. package/dist-es/rating/RatingItem.css.js +4 -0
  122. package/dist-es/rating/RatingItem.css.js.map +1 -0
  123. package/dist-es/rating/RatingItem.js +73 -0
  124. package/dist-es/rating/RatingItem.js.map +1 -0
  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/side-panel/SidePanel.css.js +4 -0
  128. package/dist-es/side-panel/SidePanel.css.js.map +1 -0
  129. package/dist-es/side-panel/SidePanel.js +203 -0
  130. package/dist-es/side-panel/SidePanel.js.map +1 -0
  131. package/dist-es/side-panel/SidePanelCloseButton.js +42 -0
  132. package/dist-es/side-panel/SidePanelCloseButton.js.map +1 -0
  133. package/dist-es/side-panel/SidePanelContent.css.js +4 -0
  134. package/dist-es/side-panel/SidePanelContent.css.js.map +1 -0
  135. package/dist-es/side-panel/SidePanelContent.js +68 -0
  136. package/dist-es/side-panel/SidePanelContent.js.map +1 -0
  137. package/dist-es/side-panel/SidePanelHeader.css.js +4 -0
  138. package/dist-es/side-panel/SidePanelHeader.css.js.map +1 -0
  139. package/dist-es/side-panel/SidePanelHeader.js +28 -0
  140. package/dist-es/side-panel/SidePanelHeader.js.map +1 -0
  141. package/dist-es/side-panel/SidePanelProvider.js +81 -0
  142. package/dist-es/side-panel/SidePanelProvider.js.map +1 -0
  143. package/dist-es/side-panel/SidePanelTitle.css.js +4 -0
  144. package/dist-es/side-panel/SidePanelTitle.css.js.map +1 -0
  145. package/dist-es/side-panel/SidePanelTitle.js +58 -0
  146. package/dist-es/side-panel/SidePanelTitle.js.map +1 -0
  147. package/dist-es/side-panel/SidePanelTrigger.js +41 -0
  148. package/dist-es/side-panel/SidePanelTrigger.js.map +1 -0
  149. package/dist-es/side-panel/internal/SidePanelContext.js +35 -0
  150. package/dist-es/side-panel/internal/SidePanelContext.js.map +1 -0
  151. package/dist-es/side-panel/internal/useIsScrollable.js +48 -0
  152. package/dist-es/side-panel/internal/useIsScrollable.js.map +1 -0
  153. package/dist-es/side-panel/internal/useSidePanelTabOrder.js +212 -0
  154. package/dist-es/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
  155. package/dist-es/side-panel/useSidePanel.js +47 -0
  156. package/dist-es/side-panel/useSidePanel.js.map +1 -0
  157. package/dist-es/tabs/Tab.css.js +4 -0
  158. package/dist-es/tabs/Tab.css.js.map +1 -0
  159. package/dist-es/tabs/Tab.js +209 -0
  160. package/dist-es/tabs/Tab.js.map +1 -0
  161. package/dist-es/tabs/TabAction.js +61 -0
  162. package/dist-es/tabs/TabAction.js.map +1 -0
  163. package/dist-es/tabs/TabBar.css.js +4 -0
  164. package/dist-es/tabs/TabBar.css.js.map +1 -0
  165. package/dist-es/tabs/TabBar.js +43 -0
  166. package/dist-es/tabs/TabBar.js.map +1 -0
  167. package/dist-es/tabs/TabList.css.js +4 -0
  168. package/dist-es/tabs/TabList.css.js.map +1 -0
  169. package/dist-es/tabs/TabList.js +279 -0
  170. package/dist-es/tabs/TabList.js.map +1 -0
  171. package/dist-es/tabs/TabPanel.css.js +4 -0
  172. package/dist-es/tabs/TabPanel.css.js.map +1 -0
  173. package/dist-es/tabs/TabPanel.js +96 -0
  174. package/dist-es/tabs/TabPanel.js.map +1 -0
  175. package/dist-es/tabs/TabTrigger.css.js +4 -0
  176. package/dist-es/tabs/TabTrigger.css.js.map +1 -0
  177. package/dist-es/tabs/TabTrigger.js +186 -0
  178. package/dist-es/tabs/TabTrigger.js.map +1 -0
  179. package/dist-es/tabs/Tabs.css.js +4 -0
  180. package/dist-es/tabs/Tabs.css.js.map +1 -0
  181. package/dist-es/tabs/Tabs.js +198 -0
  182. package/dist-es/tabs/Tabs.js.map +1 -0
  183. package/dist-es/tabs/internal/contexts/TabContext.js +23 -0
  184. package/dist-es/tabs/internal/contexts/TabContext.js.map +1 -0
  185. package/dist-es/tabs/internal/contexts/TabListLayoutContext.js +16 -0
  186. package/dist-es/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
  187. package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js +19 -0
  188. package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
  189. package/dist-es/tabs/internal/contexts/TabsContext.js +47 -0
  190. package/dist-es/tabs/internal/contexts/TabsContext.js.map +1 -0
  191. package/dist-es/tabs/internal/hooks/useFocusWithRetry.js +62 -0
  192. package/dist-es/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
  193. package/dist-es/tabs/internal/hooks/useTabListRecovery.js +74 -0
  194. package/dist-es/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
  195. package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js +163 -0
  196. package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
  197. package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js +85 -0
  198. package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
  199. package/dist-es/tabs/internal/overflow/TabOverflowList.css.js +4 -0
  200. package/dist-es/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
  201. package/dist-es/tabs/internal/overflow/TabOverflowList.js +243 -0
  202. package/dist-es/tabs/internal/overflow/TabOverflowList.js.map +1 -0
  203. package/dist-es/tabs/internal/overflow/TabSlot.js +28 -0
  204. package/dist-es/tabs/internal/overflow/TabSlot.js.map +1 -0
  205. package/dist-es/tabs/internal/overflow/overflowMath.js +82 -0
  206. package/dist-es/tabs/internal/overflow/overflowMath.js.map +1 -0
  207. package/dist-es/tabs/internal/overflow/useOverflow.js +271 -0
  208. package/dist-es/tabs/internal/overflow/useOverflow.js.map +1 -0
  209. package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js +97 -0
  210. package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
  211. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js +66 -0
  212. package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
  213. package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js +90 -0
  214. package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
  215. package/dist-es/tabs/internal/overflow/widthMeasurement.js +36 -0
  216. package/dist-es/tabs/internal/overflow/widthMeasurement.js.map +1 -0
  217. package/dist-es/tabs/internal/registry/useCollection.js +195 -0
  218. package/dist-es/tabs/internal/registry/useCollection.js.map +1 -0
  219. package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js +204 -0
  220. package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
  221. package/dist-es/tabs/internal/utils/domUtils.js +11 -0
  222. package/dist-es/tabs/internal/utils/domUtils.js.map +1 -0
  223. package/dist-types/index.d.ts +3 -0
  224. package/dist-types/rating/Rating.d.ts +48 -0
  225. package/dist-types/rating/RatingItem.d.ts +47 -0
  226. package/dist-types/rating/index.d.ts +1 -0
  227. package/dist-types/semantic-icon-provider/SemanticIconProvider.d.ts +21 -19
  228. package/dist-types/side-panel/SidePanel.d.ts +26 -0
  229. package/dist-types/side-panel/SidePanelCloseButton.d.ts +2 -0
  230. package/dist-types/side-panel/SidePanelContent.d.ts +5 -0
  231. package/dist-types/side-panel/SidePanelHeader.d.ts +5 -0
  232. package/dist-types/side-panel/SidePanelProvider.d.ts +20 -0
  233. package/dist-types/side-panel/SidePanelTitle.d.ts +3 -0
  234. package/dist-types/side-panel/SidePanelTrigger.d.ts +3 -0
  235. package/dist-types/side-panel/index.d.ts +8 -0
  236. package/dist-types/side-panel/internal/SidePanelContext.d.ts +52 -0
  237. package/dist-types/side-panel/internal/index.d.ts +3 -0
  238. package/dist-types/side-panel/internal/useIsScrollable.d.ts +2 -0
  239. package/dist-types/side-panel/internal/useSidePanelTabOrder.d.ts +7 -0
  240. package/dist-types/side-panel/useSidePanel.d.ts +58 -0
  241. package/dist-types/tabs/Tab.d.ts +12 -0
  242. package/dist-types/tabs/TabAction.d.ts +4 -0
  243. package/dist-types/tabs/TabBar.d.ts +12 -0
  244. package/dist-types/tabs/TabList.d.ts +12 -0
  245. package/dist-types/tabs/TabPanel.d.ts +9 -0
  246. package/dist-types/tabs/TabTrigger.d.ts +4 -0
  247. package/dist-types/tabs/Tabs.d.ts +20 -0
  248. package/dist-types/tabs/index.d.ts +7 -0
  249. package/dist-types/tabs/internal/contexts/TabContext.d.ts +12 -0
  250. package/dist-types/tabs/internal/contexts/TabListLayoutContext.d.ts +9 -0
  251. package/dist-types/tabs/internal/contexts/TabSlotRegistryContext.d.ts +5 -0
  252. package/dist-types/tabs/internal/contexts/TabsContext.d.ts +43 -0
  253. package/dist-types/tabs/internal/hooks/useFocusWithRetry.d.ts +9 -0
  254. package/dist-types/tabs/internal/hooks/useTabListRecovery.d.ts +12 -0
  255. package/dist-types/tabs/internal/hooks/useTabRemovalHandler.d.ts +32 -0
  256. package/dist-types/tabs/internal/hooks/useTabSelectionFocus.d.ts +15 -0
  257. package/dist-types/tabs/internal/overflow/TabOverflowList.d.ts +10 -0
  258. package/dist-types/tabs/internal/overflow/TabSlot.d.ts +6 -0
  259. package/dist-types/tabs/internal/overflow/overflowMath.d.ts +18 -0
  260. package/dist-types/tabs/internal/overflow/useOverflow.d.ts +11 -0
  261. package/dist-types/tabs/internal/overflow/useOverflowLayoutState.d.ts +13 -0
  262. package/dist-types/tabs/internal/overflow/useOverflowSelectionState.d.ts +13 -0
  263. package/dist-types/tabs/internal/overflow/useRenderedTabWidth.d.ts +12 -0
  264. package/dist-types/tabs/internal/overflow/widthMeasurement.d.ts +5 -0
  265. package/dist-types/tabs/internal/registry/useCollection.d.ts +30 -0
  266. package/dist-types/tabs/internal/registry/useRenderedTabsRegistry.d.ts +12 -0
  267. package/dist-types/tabs/internal/utils/domUtils.d.ts +1 -0
  268. 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":"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"}
@@ -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';
@@ -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":";;;;"}