@ds-mo/ui 0.2.4 → 0.3.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 (215) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +29 -0
  2. package/dist/components/Accordion/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion/index.d.ts +3 -0
  4. package/dist/components/Accordion/index.d.ts.map +1 -0
  5. package/dist/components/Badge/Badge.d.ts +18 -0
  6. package/dist/components/Badge/Badge.d.ts.map +1 -0
  7. package/dist/components/Badge/index.d.ts +3 -0
  8. package/dist/components/Badge/index.d.ts.map +1 -0
  9. package/dist/components/Banner/Banner.d.ts +16 -0
  10. package/dist/components/Banner/Banner.d.ts.map +1 -0
  11. package/dist/components/Banner/index.d.ts +3 -0
  12. package/dist/components/Banner/index.d.ts.map +1 -0
  13. package/dist/components/Breadcrumb/Breadcrumb.d.ts +15 -0
  14. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  15. package/dist/components/Breadcrumb/index.d.ts +3 -0
  16. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  17. package/dist/components/Button/Button.d.ts +85 -0
  18. package/dist/components/Button/Button.d.ts.map +1 -0
  19. package/dist/components/Button/index.d.ts +3 -0
  20. package/dist/components/Button/index.d.ts.map +1 -0
  21. package/dist/components/ButtonGroup/ButtonGroup.d.ts +26 -0
  22. package/dist/components/ButtonGroup/ButtonGroup.d.ts.map +1 -0
  23. package/dist/components/ButtonGroup/index.d.ts +3 -0
  24. package/dist/components/ButtonGroup/index.d.ts.map +1 -0
  25. package/dist/components/Card/Card.d.ts +20 -0
  26. package/dist/components/Card/Card.d.ts.map +1 -0
  27. package/dist/components/Card/index.d.ts +3 -0
  28. package/dist/components/Card/index.d.ts.map +1 -0
  29. package/dist/components/Checkbox/Checkbox.d.ts +18 -0
  30. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  31. package/dist/components/Checkbox/index.d.ts +3 -0
  32. package/dist/components/Checkbox/index.d.ts.map +1 -0
  33. package/dist/components/Divider/Divider.d.ts +9 -0
  34. package/dist/components/Divider/Divider.d.ts.map +1 -0
  35. package/dist/components/Divider/index.d.ts +3 -0
  36. package/dist/components/Divider/index.d.ts.map +1 -0
  37. package/dist/components/EmptyState/EmptyState.d.ts +9 -0
  38. package/dist/components/EmptyState/EmptyState.d.ts.map +1 -0
  39. package/dist/components/EmptyState/index.d.ts +3 -0
  40. package/dist/components/EmptyState/index.d.ts.map +1 -0
  41. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts +18 -0
  42. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
  43. package/dist/components/ErrorBoundary/index.d.ts +3 -0
  44. package/dist/components/ErrorBoundary/index.d.ts.map +1 -0
  45. package/dist/components/Fade/Fade.d.ts +11 -0
  46. package/dist/components/Fade/Fade.d.ts.map +1 -0
  47. package/dist/components/Fade/index.d.ts +3 -0
  48. package/dist/components/Fade/index.d.ts.map +1 -0
  49. package/dist/components/Field/Field.d.ts +9 -0
  50. package/dist/components/Field/Field.d.ts.map +1 -0
  51. package/dist/components/Field/index.d.ts +3 -0
  52. package/dist/components/Field/index.d.ts.map +1 -0
  53. package/dist/components/Header/Header.d.ts +12 -0
  54. package/dist/components/Header/Header.d.ts.map +1 -0
  55. package/dist/components/Header/index.d.ts +3 -0
  56. package/dist/components/Header/index.d.ts.map +1 -0
  57. package/dist/components/Input/Input.d.ts +27 -0
  58. package/dist/components/Input/Input.d.ts.map +1 -0
  59. package/dist/components/Input/index.d.ts +3 -0
  60. package/dist/components/Input/index.d.ts.map +1 -0
  61. package/dist/components/LabelWrap/LabelWrap.d.ts +27 -0
  62. package/dist/components/LabelWrap/LabelWrap.d.ts.map +1 -0
  63. package/dist/components/LabelWrap/index.d.ts +2 -0
  64. package/dist/components/LabelWrap/index.d.ts.map +1 -0
  65. package/dist/components/Loader/Loader.d.ts +33 -0
  66. package/dist/components/Loader/Loader.d.ts.map +1 -0
  67. package/dist/components/Loader/index.d.ts +3 -0
  68. package/dist/components/Loader/index.d.ts.map +1 -0
  69. package/dist/components/Menu/DestructiveMenuItem.d.ts +12 -0
  70. package/dist/components/Menu/DestructiveMenuItem.d.ts.map +1 -0
  71. package/dist/components/Menu/Menu.d.ts +55 -0
  72. package/dist/components/Menu/Menu.d.ts.map +1 -0
  73. package/dist/components/Menu/MenuItem.d.ts +33 -0
  74. package/dist/components/Menu/MenuItem.d.ts.map +1 -0
  75. package/dist/components/Menu/index.d.ts +7 -0
  76. package/dist/components/Menu/index.d.ts.map +1 -0
  77. package/dist/components/Modal/Modal.d.ts +15 -0
  78. package/dist/components/Modal/Modal.d.ts.map +1 -0
  79. package/dist/components/Modal/index.d.ts +3 -0
  80. package/dist/components/Modal/index.d.ts.map +1 -0
  81. package/dist/components/Pagination/Pagination.d.ts +16 -0
  82. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  83. package/dist/components/Pagination/index.d.ts +3 -0
  84. package/dist/components/Pagination/index.d.ts.map +1 -0
  85. package/dist/components/Radio/Radio.d.ts +35 -0
  86. package/dist/components/Radio/Radio.d.ts.map +1 -0
  87. package/dist/components/Radio/index.d.ts +3 -0
  88. package/dist/components/Radio/index.d.ts.map +1 -0
  89. package/dist/components/Scrollbar/Scrollbar.d.ts +13 -0
  90. package/dist/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  91. package/dist/components/Scrollbar/index.d.ts +3 -0
  92. package/dist/components/Scrollbar/index.d.ts.map +1 -0
  93. package/dist/components/Select/Select.d.ts +22 -0
  94. package/dist/components/Select/Select.d.ts.map +1 -0
  95. package/dist/components/Select/index.d.ts +3 -0
  96. package/dist/components/Select/index.d.ts.map +1 -0
  97. package/dist/components/Sidebar/Sidebar.d.ts +15 -0
  98. package/dist/components/Sidebar/Sidebar.d.ts.map +1 -0
  99. package/dist/components/Sidebar/SidebarItem.d.ts +14 -0
  100. package/dist/components/Sidebar/SidebarItem.d.ts.map +1 -0
  101. package/dist/components/Sidebar/SidebarSection.d.ts +10 -0
  102. package/dist/components/Sidebar/SidebarSection.d.ts.map +1 -0
  103. package/dist/components/Sidebar/index.d.ts +7 -0
  104. package/dist/components/Sidebar/index.d.ts.map +1 -0
  105. package/dist/components/Skeleton/Skeleton.d.ts +17 -0
  106. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
  107. package/dist/components/Skeleton/index.d.ts +3 -0
  108. package/dist/components/Skeleton/index.d.ts.map +1 -0
  109. package/dist/components/Slider/Slider.d.ts +16 -0
  110. package/dist/components/Slider/Slider.d.ts.map +1 -0
  111. package/dist/components/Slider/index.d.ts +3 -0
  112. package/dist/components/Slider/index.d.ts.map +1 -0
  113. package/dist/components/Surface/Surface.d.ts +59 -0
  114. package/dist/components/Surface/Surface.d.ts.map +1 -0
  115. package/dist/components/Surface/index.d.ts +3 -0
  116. package/dist/components/Surface/index.d.ts.map +1 -0
  117. package/dist/components/Tab/Tab.d.ts +21 -0
  118. package/dist/components/Tab/Tab.d.ts.map +1 -0
  119. package/dist/components/Tab/index.d.ts +3 -0
  120. package/dist/components/Tab/index.d.ts.map +1 -0
  121. package/dist/components/TabGroup/TabGroup.d.ts +26 -0
  122. package/dist/components/TabGroup/TabGroup.d.ts.map +1 -0
  123. package/dist/components/TabGroup/index.d.ts +3 -0
  124. package/dist/components/TabGroup/index.d.ts.map +1 -0
  125. package/dist/components/Table/Table.d.ts +46 -0
  126. package/dist/components/Table/Table.d.ts.map +1 -0
  127. package/dist/components/Table/index.d.ts +3 -0
  128. package/dist/components/Table/index.d.ts.map +1 -0
  129. package/dist/components/Tag/Tag.d.ts +38 -0
  130. package/dist/components/Tag/Tag.d.ts.map +1 -0
  131. package/dist/components/Tag/index.d.ts +3 -0
  132. package/dist/components/Tag/index.d.ts.map +1 -0
  133. package/dist/components/Text/Text.d.ts +41 -0
  134. package/dist/components/Text/Text.d.ts.map +1 -0
  135. package/dist/components/Text/index.d.ts +3 -0
  136. package/dist/components/Text/index.d.ts.map +1 -0
  137. package/dist/components/Toast/Toast.d.ts +33 -0
  138. package/dist/components/Toast/Toast.d.ts.map +1 -0
  139. package/dist/components/Toast/index.d.ts +3 -0
  140. package/dist/components/Toast/index.d.ts.map +1 -0
  141. package/dist/components/Toggle/Toggle.d.ts +17 -0
  142. package/dist/components/Toggle/Toggle.d.ts.map +1 -0
  143. package/dist/components/Toggle/index.d.ts +3 -0
  144. package/dist/components/Toggle/index.d.ts.map +1 -0
  145. package/dist/components/ToggleButton/ToggleButton.d.ts +35 -0
  146. package/dist/components/ToggleButton/ToggleButton.d.ts.map +1 -0
  147. package/dist/components/ToggleButton/index.d.ts +3 -0
  148. package/dist/components/ToggleButton/index.d.ts.map +1 -0
  149. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +24 -0
  150. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts.map +1 -0
  151. package/dist/components/ToggleButtonGroup/index.d.ts +3 -0
  152. package/dist/components/ToggleButtonGroup/index.d.ts.map +1 -0
  153. package/dist/components/Tooltip/Tooltip.d.ts +17 -0
  154. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  155. package/dist/components/Tooltip/index.d.ts +3 -0
  156. package/dist/components/Tooltip/index.d.ts.map +1 -0
  157. package/dist/index.css +1 -1
  158. package/dist/index.d.ts +82 -969
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +1641 -1165
  161. package/dist/index.js.map +1 -1
  162. package/dist/r/badge.json +1 -1
  163. package/dist/r/banner.json +2 -2
  164. package/dist/r/loader.json +2 -2
  165. package/dist/r/menu.json +4 -4
  166. package/dist/r/select.json +1 -1
  167. package/dist/r/tab-group.json +1 -1
  168. package/dist/r/tab.json +1 -1
  169. package/dist/r/toggle.json +1 -1
  170. package/dist/types/icons.d.ts +14 -0
  171. package/dist/types/icons.d.ts.map +1 -0
  172. package/dist/types/index.d.ts +2 -0
  173. package/dist/types/index.d.ts.map +1 -0
  174. package/dist/utils/cn.d.ts +5 -0
  175. package/dist/utils/cn.d.ts.map +1 -0
  176. package/dist/utils/css-tokens.d.ts +11 -0
  177. package/dist/utils/css-tokens.d.ts.map +1 -0
  178. package/package.json +17 -12
  179. package/src/components/Accordion/Accordion.tsx +10 -1
  180. package/src/components/Badge/Badge.stories.tsx +32 -0
  181. package/src/components/Badge/Badge.tsx +19 -2
  182. package/src/components/Banner/Banner.module.css +38 -0
  183. package/src/components/Banner/Banner.tsx +34 -4
  184. package/src/components/Button/Button.stories.tsx +1 -1
  185. package/src/components/Button/Button.tsx +42 -11
  186. package/src/components/Checkbox/Checkbox.tsx +6 -3
  187. package/src/components/Field/Field.tsx +20 -7
  188. package/src/components/Input/Input.module.css +21 -0
  189. package/src/components/Input/Input.tsx +62 -21
  190. package/src/components/Loader/Loader.module.css +17 -0
  191. package/src/components/Loader/Loader.stories.tsx +9 -0
  192. package/src/components/Loader/Loader.tsx +42 -20
  193. package/src/components/Menu/DestructiveMenuItem.tsx +59 -6
  194. package/src/components/Menu/Menu.tsx +160 -11
  195. package/src/components/Menu/MenuItem.module.css +2 -0
  196. package/src/components/Menu/MenuItem.tsx +48 -5
  197. package/src/components/Modal/Modal.tsx +81 -4
  198. package/src/components/Radio/Radio.tsx +117 -29
  199. package/src/components/Scrollbar/Scrollbar.module.css +5 -0
  200. package/src/components/Scrollbar/Scrollbar.tsx +18 -4
  201. package/src/components/Select/Select.tsx +139 -9
  202. package/src/components/Sidebar/Sidebar.module.css +7 -0
  203. package/src/components/Sidebar/Sidebar.tsx +102 -4
  204. package/src/components/Slider/Slider.module.css +5 -1
  205. package/src/components/Slider/Slider.stories.tsx +25 -0
  206. package/src/components/Slider/Slider.tsx +4 -4
  207. package/src/components/Tab/Tab.tsx +32 -2
  208. package/src/components/TabGroup/TabGroup.stories.tsx +46 -15
  209. package/src/components/TabGroup/TabGroup.tsx +77 -10
  210. package/src/components/Table/Table.module.css +10 -0
  211. package/src/components/Table/Table.tsx +58 -29
  212. package/src/components/Tag/Tag.tsx +5 -2
  213. package/src/components/Toast/Toast.tsx +44 -8
  214. package/src/components/Toggle/Toggle.tsx +23 -22
  215. package/src/components/Tooltip/Tooltip.tsx +42 -6
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react';
1
+ import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, useId } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
  import { getCssTimeMs } from '@/utils/css-tokens';
4
4
  import { Text } from '@/components/Text';
@@ -42,6 +42,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
42
42
  const resolvedDelay = delay ?? hoverDelayMs;
43
43
  const anchorRef = useRef<HTMLElement | null>(null);
44
44
  const tooltipRef = useRef<HTMLDivElement>(null);
45
+ const tooltipId = useId();
45
46
 
46
47
  const setAnchorRef = useCallback(
47
48
  (el: HTMLElement | null) => {
@@ -93,6 +94,17 @@ export const Tooltip: React.FC<TooltipProps> = ({
93
94
 
94
95
  useEffect(() => () => { clearDelayTimer(); if (closeTimerRef.current) clearTimeout(closeTimerRef.current); }, []);
95
96
 
97
+ useEffect(() => {
98
+ if (!shouldRender) return;
99
+ const onKeyDown = (e: KeyboardEvent) => {
100
+ if (e.key === 'Escape') handleClose();
101
+ };
102
+ document.addEventListener('keydown', onKeyDown);
103
+ return () => document.removeEventListener('keydown', onKeyDown);
104
+ // handleClose is stable in effect — re-subscribing on each render would churn the listener
105
+ // eslint-disable-next-line react-hooks/exhaustive-deps
106
+ }, [shouldRender]);
107
+
96
108
  useLayoutEffect(() => {
97
109
  if (!shouldRender || !tooltipRef.current) return;
98
110
  const updateSize = () => {
@@ -179,6 +191,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
179
191
  const tooltipContent = shouldRender ? (
180
192
  <div
181
193
  ref={tooltipRef}
194
+ id={tooltipId}
182
195
  className={`${styles.tooltip} ${isClosing ? styles.closing : ''}`}
183
196
  style={{
184
197
  position: 'fixed',
@@ -189,6 +202,8 @@ export const Tooltip: React.FC<TooltipProps> = ({
189
202
  zIndex: 10000,
190
203
  }}
191
204
  role="tooltip"
205
+ onMouseEnter={handleOpen}
206
+ onMouseLeave={handleClose}
192
207
  >
193
208
  <div className={styles.tooltipInner}>
194
209
  {shortcutKey && shortcutKeyPosition === 'start' && keyHint}
@@ -198,19 +213,40 @@ export const Tooltip: React.FC<TooltipProps> = ({
198
213
  </div>
199
214
  ) : null;
200
215
 
216
+ type TriggerProps = {
217
+ onMouseEnter?: (e: React.MouseEvent) => void;
218
+ onMouseLeave?: (e: React.MouseEvent) => void;
219
+ onFocus?: (e: React.FocusEvent) => void;
220
+ onBlur?: (e: React.FocusEvent) => void;
221
+ 'aria-describedby'?: string;
222
+ };
201
223
  const trigger = React.Children.only(children);
202
- const triggerWithRefAndHandlers = React.isValidElement(trigger)
203
- ? React.cloneElement(trigger as React.ReactElement<any>, {
224
+ const triggerEl = React.isValidElement<TriggerProps>(trigger) ? trigger : null;
225
+ const existingDescribedBy = triggerEl?.props['aria-describedby'];
226
+ const mergedDescribedBy =
227
+ [existingDescribedBy, shouldRender ? tooltipId : undefined].filter(Boolean).join(' ') ||
228
+ undefined;
229
+ const triggerWithRefAndHandlers = triggerEl
230
+ ? React.cloneElement(triggerEl, {
204
231
  ref: setAnchorRef,
232
+ 'aria-describedby': mergedDescribedBy,
205
233
  onMouseEnter: (e: React.MouseEvent) => {
206
234
  handleOpen();
207
- (trigger as any).props.onMouseEnter?.(e);
235
+ triggerEl.props.onMouseEnter?.(e);
208
236
  },
209
237
  onMouseLeave: (e: React.MouseEvent) => {
210
238
  handleClose();
211
- (trigger as any).props.onMouseLeave?.(e);
239
+ triggerEl.props.onMouseLeave?.(e);
240
+ },
241
+ onFocus: (e: React.FocusEvent) => {
242
+ handleOpen();
243
+ triggerEl.props.onFocus?.(e);
244
+ },
245
+ onBlur: (e: React.FocusEvent) => {
246
+ handleClose();
247
+ triggerEl.props.onBlur?.(e);
212
248
  },
213
- })
249
+ } as Partial<TriggerProps> & { ref: typeof setAnchorRef })
214
250
  : children;
215
251
 
216
252
  return (