@ringcentral/spring-ui 1.11.2 → 1.13.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 (241) hide show
  1. package/Accordion.js +90 -34
  2. package/AccordionHeader.js +72 -20
  3. package/Alert.js +120 -28
  4. package/Animation.js +2 -45
  5. package/Announcement.js +46 -35
  6. package/Autocomplete.js +1011 -580
  7. package/Avatar.js +134 -73
  8. package/AvatarGroup.js +50 -7
  9. package/Backdrop.js +45 -7
  10. package/Badge.js +77 -15
  11. package/Block.js +34 -12
  12. package/BlockHeader.js +55 -11
  13. package/BottomNavigation.js +181 -65
  14. package/BottomNavigationItem.js +93 -30
  15. package/Button.js +160 -24
  16. package/CallButton.js +53 -31
  17. package/Checkbox.js +88 -26
  18. package/Chip.js +126 -26
  19. package/CircularProgressIndicator.js +80 -8
  20. package/ClickAwayListener.js +4 -1
  21. package/ComponentsProps.js +1 -0
  22. package/DatePicker.js +611 -190
  23. package/DateUtilsContext.js +43 -25
  24. package/Dialer.js +576 -250
  25. package/Dialog.js +100 -45
  26. package/Divider.js +43 -7
  27. package/DragHandle.js +32 -6
  28. package/Drawer.js +117 -19
  29. package/Dropdown.js +154 -74
  30. package/EmptyState.js +63 -11
  31. package/FabButton.js +51 -17
  32. package/FocusTrap.js +109 -12
  33. package/FormField.js +106 -8
  34. package/FormLabel.js +81 -7
  35. package/Icon.js +1 -8
  36. package/IconButton.js +142 -26
  37. package/IconButtonGroup.js +35 -12
  38. package/InlineEditable.js +98 -44
  39. package/LinearProgressIndicator.js +73 -24
  40. package/Link.js +40 -11
  41. package/List.js +54 -9
  42. package/ListItem.js +152 -23
  43. package/ListItemText.js +44 -16
  44. package/ListNavigation.js +272 -20
  45. package/Menu.js +139 -23
  46. package/MenuActions.js +37 -12
  47. package/MenuDivider.js +34 -8
  48. package/MenuFooter.js +36 -12
  49. package/MenuHeader.js +54 -15
  50. package/MenuItem.js +402 -33
  51. package/MenuItemText.js +51 -8
  52. package/MenuList.js +87 -34
  53. package/Modal.js +345 -16
  54. package/NestedMenuContext.js +183 -11
  55. package/Option.js +32 -34
  56. package/Overlap.js +54 -7
  57. package/PageHeader.js +62 -24
  58. package/PickerTextField.js +156 -33
  59. package/Popover.js +262 -21
  60. package/Popper.js +130 -77
  61. package/PopperPaper.js +54 -8
  62. package/Portal.js +6 -1
  63. package/Radio.js +65 -21
  64. package/RadioGroup.js +56 -17
  65. package/Rating.js +223 -87
  66. package/Select.js +387 -41
  67. package/SingleFilter.js +148 -77
  68. package/Skeleton.js +68 -17
  69. package/Slider.js +168 -69
  70. package/Snackbar.js +122 -59
  71. package/SortableList.js +32 -12
  72. package/SortableListDndContext.js +69 -22
  73. package/SortableListItem.js +92 -47
  74. package/SortableVirtualizedList.js +52 -28
  75. package/SplitButton.js +124 -86
  76. package/Squircle.js +4 -7
  77. package/StatusIndicator.js +51 -9
  78. package/Step.js +63 -38
  79. package/StepButton.js +51 -23
  80. package/StepConnector.js +48 -8
  81. package/StepContent.js +68 -25
  82. package/StepIcon.js +90 -9
  83. package/StepLabel.js +90 -14
  84. package/Stepper.js +65 -23
  85. package/SubMenu.js +203 -99
  86. package/SwipeableDrawer.js +439 -194
  87. package/Switch.js +70 -23
  88. package/Tab.js +120 -57
  89. package/TabContext.js +59 -15
  90. package/TabPanel.js +40 -13
  91. package/Table.js +60 -17
  92. package/TableBody.js +42 -12
  93. package/TableCell.js +84 -50
  94. package/TableContainer.js +32 -10
  95. package/TableFooter.js +38 -10
  96. package/TableHead.js +49 -15
  97. package/TablePagination.js +153 -77
  98. package/TableRow.js +60 -21
  99. package/Tabs.js +593 -268
  100. package/Tag.js +51 -16
  101. package/Text.js +68 -37
  102. package/TextField.js +209 -29
  103. package/Textarea.js +51 -40
  104. package/TimePicker.js +490 -230
  105. package/Tooltip.js +48 -23
  106. package/Tray.js +237 -13
  107. package/TrayMenu.js +62 -41
  108. package/VirtualizedList.js +208 -109
  109. package/VirtualizedMenu.js +359 -29
  110. package/VisuallyHidden.js +29 -6
  111. package/chunks/1250.js +98 -0
  112. package/chunks/1294.js +126 -0
  113. package/chunks/2956.js +18 -0
  114. package/chunks/4476.js +460 -0
  115. package/chunks/4491.js +10 -0
  116. package/chunks/4535.js +364 -0
  117. package/chunks/5047.js +3 -0
  118. package/chunks/6335.js +24 -0
  119. package/chunks/7279.js +10 -0
  120. package/chunks/8011.js +8 -0
  121. package/chunks/8307.js +56 -0
  122. package/chunks/8467.js +8 -0
  123. package/chunks/8809.js +8 -0
  124. package/chunks/{RadioGroup.context.js → 9551.js} +12 -6
  125. package/chunks/987.js +8 -0
  126. package/index.css +2624 -2416
  127. package/index.js +245 -193
  128. package/internal/utils/index.d.ts +1 -0
  129. package/internal/utils/setRef.d.ts +2 -0
  130. package/package.json +8 -8
  131. package/src/Alert/Alert.type.d.ts +2 -1
  132. package/src/Animation/components/Fade/Fade.d.ts +4 -2
  133. package/src/Animation/components/Grow/Grow.d.ts +4 -2
  134. package/src/Animation/components/ShowHideEye/ShowHideEye.d.ts +1 -1
  135. package/src/Animation/components/SlideIn/SlideIn.d.ts +4 -2
  136. package/src/Animation/components/SlideIn/getSlideIn.d.ts +1 -1
  137. package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +2 -0
  138. package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +1 -1
  139. package/src/Autocomplete/useAutocomplete.d.ts +18 -18
  140. package/src/Autocomplete/useAutocompleteTag.d.ts +18 -18
  141. package/src/Badge/Badge.d.ts +2 -1
  142. package/src/Button/Button.classes.d.ts +1 -1
  143. package/src/ComponentsProps.d.ts +111 -110
  144. package/src/DatePicker/DatePickerDataAttributes.d.ts +11 -0
  145. package/src/DatePicker/utils/DatePickerAriaLabelUtils.d.ts +2 -1
  146. package/src/DatePicker/utils/DatePickerUtils.d.ts +1 -1
  147. package/src/Dialer/DialDelete/DialDelete.d.ts +2 -2
  148. package/src/Dialer/DialPad/DialPad.d.ts +2 -2
  149. package/src/Dialer/Dialer.d.ts +4 -2
  150. package/src/Dropdown/Dropdown.type.d.ts +2 -2
  151. package/src/InlineEditable/InlineEditable.type.d.ts +2 -1
  152. package/src/ListNavigation/useListNavigation.d.ts +3 -3
  153. package/src/MenuActions/MenuActions.d.ts +2 -2
  154. package/src/MenuItem/MenuItem.type.d.ts +1 -0
  155. package/src/MenuItem/useMenuItem.d.ts +1 -1
  156. package/src/MenuItem/useVirtualizedMenuItem.d.ts +1 -1
  157. package/src/MenuList/MenuList.type.d.ts +1 -1
  158. package/src/MenuList/MenuListContext.d.ts +2 -3
  159. package/src/Modal/Modal.type.d.ts +1 -0
  160. package/src/NestedMenuContext/MenuOverlayGroupContext.d.ts +2 -2
  161. package/src/Popover/Popover.classes.d.ts +1 -1
  162. package/src/Popover/Popover.internal.d.ts +8 -0
  163. package/src/Popover/Popover.type.d.ts +1 -0
  164. package/src/Popper/Popper.type.d.ts +10 -7
  165. package/src/Rating/utils.d.ts +3 -2
  166. package/src/Select/Select.type.d.ts +7 -5
  167. package/src/Slider/Slider.d.ts +2 -2
  168. package/src/Slider/SliderThumb.d.ts +2 -1
  169. package/src/Squircle/Squircle.d.ts +1 -1
  170. package/src/StatusIndicator/StatusIndicator.d.ts +2 -1
  171. package/src/SubMenu/PopperMenu.type.d.ts +4 -1
  172. package/src/Table/Table.type.d.ts +3 -0
  173. package/src/Table/TableContext.d.ts +3 -0
  174. package/src/Table/TableRowContext.d.ts +7 -0
  175. package/src/Table/index.d.ts +1 -0
  176. package/src/TableCell/TableCell.classes.d.ts +1 -1
  177. package/src/TableFooter/TableFooter.classes.d.ts +1 -1
  178. package/src/TableFooter/TableFooter.type.d.ts +1 -0
  179. package/src/TableHead/TableHead.classes.d.ts +1 -1
  180. package/src/TableHead/TableHead.type.d.ts +1 -0
  181. package/src/TableRow/TableRow.type.d.ts +2 -0
  182. package/chunks/AccordionContext.js +0 -6
  183. package/chunks/Alert.js +0 -48
  184. package/chunks/AvatarGroup.js +0 -22
  185. package/chunks/Backdrop.js +0 -18
  186. package/chunks/Badge.js +0 -32
  187. package/chunks/BottomNavigationItem.js +0 -36
  188. package/chunks/Button.js +0 -88
  189. package/chunks/Chip.js +0 -73
  190. package/chunks/CircularProgressIndicator.js +0 -36
  191. package/chunks/Divider.js +0 -19
  192. package/chunks/DragHandle.js +0 -11
  193. package/chunks/Drawer.js +0 -32
  194. package/chunks/ExpandCollapseCaret.js +0 -24
  195. package/chunks/FormLabel.js +0 -27
  196. package/chunks/Icon.js +0 -25
  197. package/chunks/IconButtonLabel.js +0 -68
  198. package/chunks/List.js +0 -22
  199. package/chunks/ListItem.js +0 -83
  200. package/chunks/Menu.js +0 -61
  201. package/chunks/MenuDivider.js +0 -14
  202. package/chunks/MenuItemText.js +0 -17
  203. package/chunks/MenuList.js +0 -46
  204. package/chunks/Modal.js +0 -212
  205. package/chunks/Overlap.js +0 -25
  206. package/chunks/PickerTextField.js +0 -85
  207. package/chunks/Popover.js +0 -53
  208. package/chunks/PopperPaper.js +0 -15
  209. package/chunks/Select.js +0 -220
  210. package/chunks/ShowHideEye.js +0 -56
  211. package/chunks/SlideIn.js +0 -19
  212. package/chunks/SortableArrow.js +0 -73
  213. package/chunks/Squircle.js +0 -31
  214. package/chunks/StatusIndicator.js +0 -20
  215. package/chunks/StepConnector.js +0 -21
  216. package/chunks/StepIcon.js +0 -43
  217. package/chunks/StepLabel.js +0 -29
  218. package/chunks/StepperContext.js +0 -9
  219. package/chunks/TableContext.js +0 -6
  220. package/chunks/Tablelvl2Context.js +0 -6
  221. package/chunks/TabsContext.js +0 -6
  222. package/chunks/TextField.js +0 -110
  223. package/chunks/Tooltip.js +0 -217
  224. package/chunks/VirtualizedMenu.js +0 -164
  225. package/chunks/VisuallyHidden.js +0 -12
  226. package/chunks/getFade.js +0 -27
  227. package/chunks/getGrow.js +0 -70
  228. package/chunks/getSlideIn.js +0 -30
  229. package/chunks/hasContent.js +0 -3
  230. package/chunks/useAnimationFrame.js +0 -15
  231. package/chunks/useFocusTrapStack.js +0 -36
  232. package/chunks/useHelperTextId.js +0 -22
  233. package/chunks/useListNavigation.js +0 -199
  234. package/chunks/useMenuItemSelect.js +0 -273
  235. package/chunks/useMotionSafeTransition.js +0 -9
  236. package/chunks/useNestedMenuItem.js +0 -27
  237. package/chunks/useNestedParentMenu.js +0 -113
  238. package/chunks/usePrefersReducedMotion.js +0 -36
  239. package/chunks/useTooltipForceHide.js +0 -27
  240. package/chunks/useTrayNavigate.js +0 -150
  241. package/chunks/withTooltip.js +0 -15
package/chunks/4535.js ADDED
@@ -0,0 +1,364 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useThemeProps } from "@ringcentral/spring-theme";
3
+ import { AnimatePresence } from "framer-motion";
4
+ import { cloneElement, forwardRef, useEffect, useRef } from "react";
5
+ import { combineProps, logInDev, useClasses, useControlled, useEventListener, useForkRef, useId, useIsFocusVisible, useWindowContext } from "@ringcentral/spring-base";
6
+ import clsx from "clsx";
7
+ import { getFade } from "./4476.js";
8
+ import { Icon as Icon_Icon } from "./8307.js";
9
+ import { Popper } from "../Popper.js";
10
+ import { PopperPaper as PopperPaper_PopperPaper } from "../PopperPaper.js";
11
+ import { usePrefersReducedMotion } from "./1294.js";
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+ /**
24
+ * Accessibility naming strategy:
25
+ * - Default (label mode): `title` is treated as an accessible label
26
+ * - string `title` → `aria-label`
27
+ * - React element `title` → `aria-labelledby` while the tooltip is open
28
+ * - Description mode (`describeChild = true`): `title` is treated as an accessible description
29
+ * - when closed → native `title` attribute
30
+ * - when open → `aria-describedby` pointing to the tooltip id
31
+ */ const ARIA_DESCRIBEDBY = 'aria-describedby';
32
+ const ARIA_LABEL = 'aria-label';
33
+ const ARIA_LABELLEDBY = 'aria-labelledby';
34
+ const HTML_TITLE = 'title';
35
+ let hasWarnedTriggerWhenDisabledNonStringTitle = false;
36
+ function computeTooltipA11y({ title, describeChild, triggerWhenDisabled, open, tooltipId, child }) {
37
+ const nameOrDescProps = {};
38
+ const disabledOverrides = {};
39
+ const titleIsString = typeof title === 'string';
40
+ const childProps = child.props;
41
+ const hasAriaDescribedBy = ARIA_DESCRIBEDBY in childProps;
42
+ const hasAriaLabel = ARIA_LABEL in childProps;
43
+ const hasAriaLabelledBy = ARIA_LABELLEDBY in childProps;
44
+ const hasUserTitle = HTML_TITLE in childProps;
45
+ if (process.env.NODE_ENV !== 'production' && triggerWhenDisabled && !titleIsString && title != null && !hasUserTitle && !hasWarnedTriggerWhenDisabledNonStringTitle) {
46
+ hasWarnedTriggerWhenDisabledNonStringTitle = true;
47
+ logInDev({
48
+ scope: 'Tooltip',
49
+ level: 'warn',
50
+ message: 'Using Tooltip with `triggerWhenDisabled` and a non-string `title` is not fully accessible. Use a string `title` when explaining why a control is disabled.'
51
+ });
52
+ }
53
+ if (describeChild) {
54
+ // Description mode: tooltip acts as an accessible description
55
+ // When closed: add title attribute (unless user provided their own)
56
+ // When open: swap to aria-describedby
57
+ if (!hasAriaDescribedBy) {
58
+ if (!hasUserTitle) {
59
+ // Only set tooltip title if user hasn't provided one
60
+ nameOrDescProps.title = !open && titleIsString ? title : null;
61
+ } else if (open) {
62
+ // If user provided a title and tooltip is open, remove native title to prevent duplicate
63
+ nameOrDescProps.title = null;
64
+ }
65
+ nameOrDescProps[ARIA_DESCRIBEDBY] = open ? tooltipId : null;
66
+ }
67
+ } else {
68
+ // Label mode (default): tooltip acts as an accessible label
69
+ // Use aria-label for strings, aria-labelledby for React elements
70
+ if (titleIsString && !hasAriaLabel) {
71
+ nameOrDescProps[ARIA_LABEL] = title;
72
+ // For string titles, Tooltip fully owns the label; always remove native title
73
+ nameOrDescProps.title = null;
74
+ } else if (!titleIsString && !hasAriaLabelledBy && title) {
75
+ // Only set aria-labelledby if title is truthy (React element exists)
76
+ nameOrDescProps[ARIA_LABELLEDBY] = open ? tooltipId : null;
77
+ // Only remove native title when tooltip is open to prevent duplicate tooltips.
78
+ // When closed, leave existing title as a fallback accessible name.
79
+ if (open) {
80
+ nameOrDescProps.title = null;
81
+ }
82
+ } else if (open) {
83
+ // Tooltip is open but we're not providing a label (e.g. child already has aria-label);
84
+ // still remove native title to avoid double tooltips.
85
+ nameOrDescProps.title = null;
86
+ }
87
+ }
88
+ if (triggerWhenDisabled) {
89
+ // When open and child does not already have aria-describedby: use tooltip id,
90
+ // and always remove native title on the disabled control to avoid double tooltips.
91
+ // When closed and title is a string: use native title as a fallback for SR on disabled.
92
+ if (open) {
93
+ if (!hasAriaDescribedBy) {
94
+ disabledOverrides[ARIA_DESCRIBEDBY] = tooltipId;
95
+ }
96
+ disabledOverrides.title = null;
97
+ } else if (titleIsString) {
98
+ disabledOverrides.title = title;
99
+ }
100
+ }
101
+ return {
102
+ nameOrDescProps,
103
+ disabledOverrides
104
+ };
105
+ }
106
+
107
+
108
+
109
+
110
+
111
+
112
+ const getDelayTime = (delay)=>{
113
+ if (!delay) return null;
114
+ if (delay === true) return 1500;
115
+ return delay;
116
+ };
117
+ const TooltipTrigger = (props, ref)=>{
118
+ const { renderTooltip, children, open: openProp, delay = false, onOpenStateChange, triggerWhenDisabled, triggerWrapperProps, disableFocusListener, tooltipId: tooltipIdProp, title, describeChild = false } = props;
119
+ const anchorRef = useRef(null);
120
+ const didInitiateWithTouch = useRef(false);
121
+ const { document } = useWindowContext();
122
+ const generatedId = useId();
123
+ const tooltipId = tooltipIdProp ?? generatedId;
124
+ const [open, setOpen] = useControlled({
125
+ controlled: openProp,
126
+ default: false,
127
+ name: 'Tooltip',
128
+ state: 'open'
129
+ });
130
+ const { isFocusVisibleRef, onFocus: handleFocusVisible, onBlur: handleBlurVisible, ref: focusVisibleRef } = useIsFocusVisible();
131
+ const handleAnchorRef = useForkRef(anchorRef, focusVisibleRef, children.ref);
132
+ const delayTimerRef = useRef();
133
+ useEffect(()=>()=>{
134
+ clearTimeout(delayTimerRef.current);
135
+ }, []);
136
+ const handleOpen = (e)=>{
137
+ const delayTime = getDelayTime(delay);
138
+ if (delayTime) {
139
+ delayTimerRef.current = setTimeout(()=>{
140
+ setOpen(true);
141
+ onOpenStateChange?.(e, true);
142
+ }, delayTime);
143
+ } else {
144
+ setOpen(true);
145
+ onOpenStateChange?.(e, true);
146
+ }
147
+ };
148
+ const handleClose = (e)=>{
149
+ clearTimeout(delayTimerRef.current);
150
+ delayTimerRef.current = undefined;
151
+ setOpen(false);
152
+ onOpenStateChange?.(e, false);
153
+ };
154
+ useEventListener(anchorRef, 'mouseenter', (e)=>{
155
+ // Ensures touch devices do not trigger the tooltip, mouseleave will never be fired and the tooltip will be stuck open
156
+ if (didInitiateWithTouch.current) {
157
+ // Immediately reset the flag, touchstart will fire again on the next tap and will set the flag back to true
158
+ didInitiateWithTouch.current = false;
159
+ return;
160
+ }
161
+ // Remove the title ahead of time from the trigger.
162
+ // We don't want to wait for the next render commit.
163
+ // We would risk displaying two tooltips at the same time (native + this one).
164
+ if (anchorRef.current) {
165
+ anchorRef.current.removeAttribute('title');
166
+ }
167
+ handleOpen(e);
168
+ });
169
+ useEventListener(anchorRef, 'mouseleave', (e)=>{
170
+ handleClose(e);
171
+ });
172
+ useEventListener(anchorRef, 'touchstart', (e)=>{
173
+ didInitiateWithTouch.current = true;
174
+ }, {
175
+ passive: true
176
+ });
177
+ useEventListener(anchorRef, 'focus', (e)=>{
178
+ if (disableFocusListener) return;
179
+ // handleFocusVisible only support react event type, but it only need target event
180
+ // oxlint-disable-next-line @typescript-eslint/no-explicit-any
181
+ handleFocusVisible(e);
182
+ if (isFocusVisibleRef.current === true) {
183
+ handleOpen(e);
184
+ }
185
+ });
186
+ useEventListener(anchorRef, 'blur', (e)=>{
187
+ // handleBlurVisible only support react event type, but this param is useless
188
+ // oxlint-disable-next-line @typescript-eslint/no-explicit-any
189
+ handleBlurVisible(e);
190
+ if (isFocusVisibleRef.current === false) {
191
+ handleClose(e);
192
+ }
193
+ });
194
+ // Handle Escape key to close tooltip
195
+ useEventListener(open ? document : null, 'keydown', (e)=>{
196
+ if (e.key === 'Escape') {
197
+ handleClose(e);
198
+ }
199
+ });
200
+ const { nameOrDescProps, disabledOverrides } = computeTooltipA11y({
201
+ title,
202
+ describeChild,
203
+ triggerWhenDisabled,
204
+ open,
205
+ tooltipId,
206
+ child: children
207
+ });
208
+ return /*#__PURE__*/ jsxs(Fragment, {
209
+ children: [
210
+ triggerWhenDisabled ? /*#__PURE__*/ jsx("span", {
211
+ ...triggerWrapperProps,
212
+ className: clsx('sui-tooltip-trigger-wrapper', triggerWrapperProps?.className),
213
+ ref: handleAnchorRef,
214
+ children: /*#__PURE__*/ cloneElement(children, disabledOverrides)
215
+ }) : /*#__PURE__*/ cloneElement(children, {
216
+ ref: handleAnchorRef,
217
+ ...nameOrDescProps
218
+ }),
219
+ renderTooltip(open, ()=>anchorRef.current, tooltipId)
220
+ ]
221
+ });
222
+ };
223
+ TooltipTrigger.displayName = 'SuiTooltipTrigger';
224
+
225
+
226
+
227
+
228
+
229
+ // extracted by css-extract-rspack-plugin
230
+ /* export default */ var TooltipView = ({"sui-tooltip-view-root":"sui-tooltip-view-root","sui-tooltip-view-disable-interactions":"sui-tooltip-view-disable-interactions","sui-tooltip-trigger-wrapper":"sui-tooltip-trigger-wrapper","sui-tooltip-view-paper":"sui-tooltip-view-paper","sui-tooltip-view-paper-content":"sui-tooltip-view-paper-content","sui-tooltip-view-paper-content-medium":"sui-tooltip-view-paper-content-medium","sui-tooltip-view-icon":"sui-tooltip-view-icon","sui-tooltip-view-content":"sui-tooltip-view-content","sui-tooltip-view-neutral":"sui-tooltip-view-neutral","sui-tooltip-view-success":"sui-tooltip-view-success","sui-tooltip-view-danger":"sui-tooltip-view-danger","sui-tooltip-view-inverted":"sui-tooltip-view-inverted","sui-tooltip-view-force-hide":"sui-tooltip-view-force-hide"});
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+ const TooltipView_TooltipView = /*#__PURE__*/ forwardRef((props, ref)=>{
240
+ const { className, icon, size = 'small', classes, children, placement = 'bottom', PopperProps, color = 'neutral', anchorEl, motionProps, tooltipForceHide = false, disableInteractions = true, PopperPaperProps: popperPaperPropsProp } = props;
241
+ const prefersReducedMotion = usePrefersReducedMotion();
242
+ const cls = useClasses('tooltip-view', classes, className);
243
+ const padding = PopperProps?.padding;
244
+ const popperPadding = typeof padding === 'object' ? {
245
+ top: padding.top ?? 16,
246
+ right: padding.right ?? 16,
247
+ bottom: padding.bottom ?? 16,
248
+ left: padding.left ?? 16
249
+ } : padding ?? 16;
250
+ return /*#__PURE__*/ jsx(Popper, {
251
+ role: "tooltip",
252
+ placement: placement,
253
+ offset: 4,
254
+ ...PopperProps,
255
+ padding: popperPadding,
256
+ className: cls('root', {
257
+ 'force-hide': tooltipForceHide,
258
+ 'disable-interactions': disableInteractions
259
+ }),
260
+ anchorEl: anchorEl,
261
+ arrowHeight: 6,
262
+ arrowPadding: 8,
263
+ ref: ref,
264
+ children: ({ arrowRef, arrowStyle })=>/*#__PURE__*/ jsxs(PopperPaper_PopperPaper, {
265
+ ...motionProps ?? getFade({
266
+ prefersReducedMotion
267
+ }),
268
+ ...combineProps({
269
+ arrowRef,
270
+ arrowStyle,
271
+ classes: {
272
+ root: cls('paper', color),
273
+ content: cls('paper-content', `paper-content-${size}`)
274
+ }
275
+ }, popperPaperPropsProp),
276
+ children: [
277
+ icon && /*#__PURE__*/ jsx(Icon_Icon, {
278
+ symbol: icon,
279
+ size: "small",
280
+ className: cls('icon')
281
+ }),
282
+ /*#__PURE__*/ jsx("div", {
283
+ className: cls('content', `content-${size}`),
284
+ children: children
285
+ })
286
+ ]
287
+ })
288
+ });
289
+ });
290
+ TooltipView_TooltipView.displayName = 'SuiTooltipView';
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+ const Tooltip = /*#__PURE__*/ forwardRef((inProps, ref)=>{
300
+ const props = useThemeProps({
301
+ props: inProps,
302
+ name: 'Tooltip'
303
+ });
304
+ const { children, open: openProp, delay, onOpenStateChange, title, disableFocusListener, disableBackdropAnimation, triggerWhenDisabled, triggerWrapperProps, PopperProps, describeChild = false, ...rest } = props;
305
+ const renderTooltip = (open, getAnchorEl, tooltipId)=>{
306
+ // hides '', null/undefined, false, NaN)
307
+ const effectiveOpen = open && !(!title && title !== 0);
308
+ const content = effectiveOpen ? /*#__PURE__*/ jsx(TooltipView_TooltipView, {
309
+ disableInteractions: openProp === undefined,
310
+ ...rest,
311
+ PopperProps: {
312
+ ...PopperProps,
313
+ id: tooltipId
314
+ },
315
+ anchorEl: getAnchorEl,
316
+ ref: ref,
317
+ children: title
318
+ }) : null;
319
+ return disableBackdropAnimation ? /*#__PURE__*/ jsx(Fragment, {
320
+ children: content
321
+ }) : /*#__PURE__*/ jsx(AnimatePresence, {
322
+ children: content
323
+ });
324
+ };
325
+ return /*#__PURE__*/ jsx(TooltipTrigger, {
326
+ disableFocusListener: disableFocusListener,
327
+ open: openProp,
328
+ delay: delay,
329
+ onOpenStateChange: onOpenStateChange,
330
+ renderTooltip: renderTooltip,
331
+ triggerWhenDisabled: triggerWhenDisabled,
332
+ triggerWrapperProps: triggerWrapperProps,
333
+ tooltipId: PopperProps?.id,
334
+ title: title,
335
+ describeChild: describeChild,
336
+ children: children
337
+ });
338
+ });
339
+ Tooltip.displayName = 'SuiTooltip';
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+ function withTooltip(Component) {
348
+ return /*#__PURE__*/ forwardRef((props, ref)=>{
349
+ const { TooltipProps, ...rest } = props;
350
+ const content = /*#__PURE__*/ jsx(Component, {
351
+ ...rest,
352
+ ref: ref
353
+ });
354
+ if (!TooltipProps) return content;
355
+ return /*#__PURE__*/ jsx(Tooltip, {
356
+ ...TooltipProps,
357
+ children: content
358
+ });
359
+ });
360
+ }
361
+
362
+
363
+
364
+ export { Tooltip, TooltipTrigger, TooltipView as tooltipViewStyle, TooltipView_TooltipView as TooltipView, withTooltip };
package/chunks/5047.js ADDED
@@ -0,0 +1,3 @@
1
+ const hasContent = (content)=>Boolean(content) || content === 0;
2
+
3
+ export { hasContent };
package/chunks/6335.js ADDED
@@ -0,0 +1,24 @@
1
+ import { useMemo } from "react";
2
+ import { useWindowContext } from "@ringcentral/spring-base";
3
+
4
+
5
+
6
+
7
+
8
+ function useAnimationFrame() {
9
+ const { externalWindow, globalThis: contextGlobal } = useWindowContext();
10
+ return useMemo(()=>{
11
+ const contextWindow = externalWindow ?? contextGlobal;
12
+ return {
13
+ requestAnimationFrame: (callback)=>contextWindow.requestAnimationFrame(callback),
14
+ cancelAnimationFrame: (handle)=>contextWindow.cancelAnimationFrame(handle)
15
+ };
16
+ }, [
17
+ externalWindow,
18
+ contextGlobal
19
+ ]);
20
+ }
21
+
22
+
23
+
24
+ export { useAnimationFrame };
package/chunks/7279.js ADDED
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+
4
+
5
+ const TableContext = createContext({
6
+ rowDivider: true
7
+ });
8
+ const useTableContext = ()=>useContext(TableContext);
9
+
10
+ export { TableContext, useTableContext };
package/chunks/8011.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+
4
+
5
+ const Tablelvl2Context = createContext({});
6
+ const useTablelvl2Context = ()=>useContext(Tablelvl2Context);
7
+
8
+ export { Tablelvl2Context, useTablelvl2Context };
package/chunks/8307.js ADDED
@@ -0,0 +1,56 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cloneElement, forwardRef, useMemo } from "react";
3
+ import { useClasses } from "@ringcentral/spring-base";
4
+ import { useThemeProps } from "@ringcentral/spring-theme";
5
+
6
+
7
+
8
+
9
+
10
+ // extracted by css-extract-rspack-plugin
11
+ /* export default */ var Icon = ({"sui-icon-root":"sui-icon-root","sui-icon-svg":"sui-icon-svg","sui-icon-xsmall":"sui-icon-xsmall","sui-icon-small":"sui-icon-small","sui-icon-medium":"sui-icon-medium","sui-icon-large":"sui-icon-large","sui-icon-xlarge":"sui-icon-xlarge","sui-icon-xxlarge":"sui-icon-xxlarge","sui-icon-xxxlarge":"sui-icon-xxxlarge"});
12
+
13
+
14
+
15
+
16
+
17
+ const Icon_Icon = /*#__PURE__*/ forwardRef((inProps, ref)=>{
18
+ const props = useThemeProps({
19
+ props: inProps,
20
+ name: 'Icon'
21
+ });
22
+ const { size = 'medium', symbol, children: childrenProp, className, classes, ...rest } = props;
23
+ const cls = useClasses('icon', classes, className);
24
+ const svgClassName = cls('svg');
25
+ const children = useMemo(()=>{
26
+ if (symbol) {
27
+ const Comp = symbol;
28
+ return /*#__PURE__*/ jsx(Comp, {
29
+ className: svgClassName
30
+ });
31
+ } else if (childrenProp) {
32
+ return /*#__PURE__*/ cloneElement(childrenProp, {
33
+ className: svgClassName
34
+ });
35
+ }
36
+ return null;
37
+ }, [
38
+ childrenProp,
39
+ svgClassName,
40
+ symbol
41
+ ]);
42
+ return /*#__PURE__*/ jsx("span", {
43
+ className: cls('root', size),
44
+ ...rest,
45
+ ref: ref,
46
+ children: children
47
+ });
48
+ });
49
+ Icon_Icon.displayName = 'SuiIcon';
50
+
51
+
52
+
53
+
54
+
55
+
56
+ export { Icon as iconStyle, Icon_Icon as Icon };
package/chunks/8467.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+
4
+
5
+ const AccordionContext = createContext({});
6
+ const useAccordionContext = ()=>useContext(AccordionContext);
7
+
8
+ export { AccordionContext, useAccordionContext };
package/chunks/8809.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+
4
+
5
+ const TabsContext = /*#__PURE__*/ createContext({});
6
+ const useTabsContext = ()=>useContext(TabsContext);
7
+
8
+ export { TabsContext, useTabsContext };
@@ -1,19 +1,25 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, useContext } from "react";
2
+
3
+
2
4
 
3
5
  const RadioGroupContext = createContext({});
4
6
  function callbacksInSeries(...callbacks) {
5
- return function (...params) {
6
- callbacks.forEach((cb) => cb?.(...params));
7
+ return function(...params) {
8
+ callbacks.forEach((cb)=>cb?.(...params));
7
9
  };
8
10
  }
9
- function useRadioGroup({ name, value, checked, onChange, }) {
11
+ function useRadioGroup({ name, value, checked, onChange }) {
10
12
  const context = useContext(RadioGroupContext);
11
13
  if (context.onChange) {
12
14
  name = context.name ?? name;
13
15
  checked = value === context.value;
14
16
  onChange = callbacksInSeries(onChange, context.onChange);
15
17
  }
16
- return { name, checked, onChange };
18
+ return {
19
+ name,
20
+ checked,
21
+ onChange
22
+ };
17
23
  }
18
24
 
19
- export { RadioGroupContext as R, callbacksInSeries as c, useRadioGroup as u };
25
+ export { RadioGroupContext, callbacksInSeries, useRadioGroup };
package/chunks/987.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+
4
+
5
+ const TableRowContext = createContext({});
6
+ const useTableRowContext = ()=>useContext(TableRowContext);
7
+
8
+ export { TableRowContext, useTableRowContext };