@udixio/ui-react 2.10.13 → 2.10.15

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 (173) hide show
  1. package/package.json +4 -2
  2. package/.eslintrc.mjs +0 -22
  3. package/.storybook/main.ts +0 -20
  4. package/.storybook/preview.ts +0 -1
  5. package/CHANGELOG.md +0 -1144
  6. package/postcss.config.mjs +0 -5
  7. package/src/index.css +0 -4
  8. package/src/index.ts +0 -1
  9. package/src/lib/components/AnchorPositioner.tsx +0 -185
  10. package/src/lib/components/Button.tsx +0 -208
  11. package/src/lib/components/Card.tsx +0 -47
  12. package/src/lib/components/Carousel.tsx +0 -437
  13. package/src/lib/components/CarouselItem.tsx +0 -61
  14. package/src/lib/components/Checkbox.tsx +0 -120
  15. package/src/lib/components/Chip.tsx +0 -341
  16. package/src/lib/components/Chips.tsx +0 -331
  17. package/src/lib/components/ContextMenu.tsx +0 -109
  18. package/src/lib/components/DatePicker.tsx +0 -432
  19. package/src/lib/components/Divider.tsx +0 -20
  20. package/src/lib/components/Fab.tsx +0 -127
  21. package/src/lib/components/FabMenu.tsx +0 -239
  22. package/src/lib/components/IconButton.tsx +0 -146
  23. package/src/lib/components/Menu.tsx +0 -88
  24. package/src/lib/components/MenuGroup.tsx +0 -34
  25. package/src/lib/components/MenuHeadline.tsx +0 -9
  26. package/src/lib/components/MenuItem.tsx +0 -215
  27. package/src/lib/components/NavigationRail.tsx +0 -186
  28. package/src/lib/components/NavigationRailItem.tsx +0 -227
  29. package/src/lib/components/ProgressIndicator.tsx +0 -214
  30. package/src/lib/components/SideSheet.tsx +0 -135
  31. package/src/lib/components/Slider.tsx +0 -374
  32. package/src/lib/components/Snackbar.tsx +0 -77
  33. package/src/lib/components/Switch.tsx +0 -107
  34. package/src/lib/components/Tab.tsx +0 -123
  35. package/src/lib/components/TabGroup.tsx +0 -66
  36. package/src/lib/components/TabGroupContext.tsx +0 -16
  37. package/src/lib/components/TabPanel.tsx +0 -27
  38. package/src/lib/components/TabPanels.tsx +0 -76
  39. package/src/lib/components/Tabs.tsx +0 -105
  40. package/src/lib/components/TextField.tsx +0 -586
  41. package/src/lib/components/Tooltip.tsx +0 -217
  42. package/src/lib/components/index.ts +0 -34
  43. package/src/lib/config/config.interface.ts +0 -9
  44. package/src/lib/config/define-config.ts +0 -16
  45. package/src/lib/config/index.ts +0 -2
  46. package/src/lib/effects/AnimateOnScroll.ts +0 -391
  47. package/src/lib/effects/State.tsx +0 -90
  48. package/src/lib/effects/SyncedFixedWrapper.tsx +0 -62
  49. package/src/lib/effects/ThemeProvider.tsx +0 -174
  50. package/src/lib/effects/block-scroll.effect.tsx +0 -313
  51. package/src/lib/effects/custom-scroll/custom-scroll.effect.tsx +0 -407
  52. package/src/lib/effects/custom-scroll/custom-scroll.interface.ts +0 -29
  53. package/src/lib/effects/custom-scroll/custom-scroll.style.ts +0 -32
  54. package/src/lib/effects/custom-scroll/index.ts +0 -3
  55. package/src/lib/effects/index.ts +0 -7
  56. package/src/lib/effects/ripple/RippleEffect.tsx +0 -116
  57. package/src/lib/effects/ripple/index.tsx +0 -1
  58. package/src/lib/effects/scrollDriven.ts +0 -239
  59. package/src/lib/effects/smooth-scroll.effect.tsx +0 -112
  60. package/src/lib/effects/theme.worker.ts +0 -97
  61. package/src/lib/hooks/index.ts +0 -10
  62. package/src/lib/hooks/useTooltipTrigger.ts +0 -270
  63. package/src/lib/icon/icon.tsx +0 -125
  64. package/src/lib/icon/index.ts +0 -1
  65. package/src/lib/index.ts +0 -8
  66. package/src/lib/interfaces/button.interface.ts +0 -65
  67. package/src/lib/interfaces/card.interface.ts +0 -11
  68. package/src/lib/interfaces/carousel-item.interface.ts +0 -12
  69. package/src/lib/interfaces/carousel.interface.ts +0 -41
  70. package/src/lib/interfaces/checkbox.interface.ts +0 -39
  71. package/src/lib/interfaces/chip.interface.ts +0 -97
  72. package/src/lib/interfaces/chips.interface.ts +0 -37
  73. package/src/lib/interfaces/date-picker.interface.ts +0 -79
  74. package/src/lib/interfaces/divider.interface.ts +0 -7
  75. package/src/lib/interfaces/fab-menu.interface.ts +0 -12
  76. package/src/lib/interfaces/fab.interface.ts +0 -27
  77. package/src/lib/interfaces/icon-button.interface.ts +0 -38
  78. package/src/lib/interfaces/index.ts +0 -26
  79. package/src/lib/interfaces/menu-group.interface.ts +0 -13
  80. package/src/lib/interfaces/menu-item.interface.ts +0 -29
  81. package/src/lib/interfaces/menu.interface.ts +0 -19
  82. package/src/lib/interfaces/navigation-rail-item.interface.ts +0 -39
  83. package/src/lib/interfaces/navigation-rail.interface.ts +0 -39
  84. package/src/lib/interfaces/progress-indicator.interface.ts +0 -41
  85. package/src/lib/interfaces/side-sheet.interface.tsx +0 -28
  86. package/src/lib/interfaces/slider.interface.ts +0 -27
  87. package/src/lib/interfaces/snackbar.interface.ts +0 -13
  88. package/src/lib/interfaces/switch.interface.ts +0 -14
  89. package/src/lib/interfaces/tab-group.interface.ts +0 -13
  90. package/src/lib/interfaces/tab-panels.interface.ts +0 -21
  91. package/src/lib/interfaces/tab.interface.ts +0 -31
  92. package/src/lib/interfaces/tabs.interface.ts +0 -22
  93. package/src/lib/interfaces/text-field.interface.ts +0 -61
  94. package/src/lib/interfaces/tooltip.interface.ts +0 -61
  95. package/src/lib/styles/button.style.ts +0 -136
  96. package/src/lib/styles/card.style.ts +0 -29
  97. package/src/lib/styles/carousel-item.style.ts +0 -24
  98. package/src/lib/styles/carousel.style.ts +0 -22
  99. package/src/lib/styles/checkbox.style.ts +0 -64
  100. package/src/lib/styles/chip.style.ts +0 -62
  101. package/src/lib/styles/chips.style.ts +0 -20
  102. package/src/lib/styles/date-picker.style.ts +0 -43
  103. package/src/lib/styles/divider.style.ts +0 -31
  104. package/src/lib/styles/fab-menu.style.ts +0 -29
  105. package/src/lib/styles/fab.style.ts +0 -49
  106. package/src/lib/styles/icon-button.style.ts +0 -168
  107. package/src/lib/styles/index.ts +0 -25
  108. package/src/lib/styles/menu-group.style.ts +0 -34
  109. package/src/lib/styles/menu-headline.style.ts +0 -20
  110. package/src/lib/styles/menu-item.style.ts +0 -45
  111. package/src/lib/styles/menu.style.ts +0 -32
  112. package/src/lib/styles/navigation-rail-item.style.ts +0 -56
  113. package/src/lib/styles/navigation-rail.style.ts +0 -36
  114. package/src/lib/styles/progress-indicator.style.ts +0 -72
  115. package/src/lib/styles/side-sheet.style.ts +0 -45
  116. package/src/lib/styles/slider.style.ts +0 -41
  117. package/src/lib/styles/snackbar.style.ts +0 -26
  118. package/src/lib/styles/switch.style.ts +0 -67
  119. package/src/lib/styles/tab-panels.style.ts +0 -35
  120. package/src/lib/styles/tab.style.ts +0 -78
  121. package/src/lib/styles/tabs.style.ts +0 -22
  122. package/src/lib/styles/text-field.style.ts +0 -115
  123. package/src/lib/styles/tooltip.style.ts +0 -48
  124. package/src/lib/utils/component-helper.ts +0 -134
  125. package/src/lib/utils/component.ts +0 -34
  126. package/src/lib/utils/index.ts +0 -7
  127. package/src/lib/utils/string.ts +0 -9
  128. package/src/lib/utils/styles/classnames.ts +0 -49
  129. package/src/lib/utils/styles/get-classname.ts +0 -96
  130. package/src/lib/utils/styles/index.ts +0 -4
  131. package/src/lib/utils/styles/use-classnames.ts +0 -25
  132. package/src/stories/action/button.stories.tsx +0 -86
  133. package/src/stories/action/fab.stories.tsx +0 -54
  134. package/src/stories/action/icon-button.stories.tsx +0 -134
  135. package/src/stories/assets/accessibility.png +0 -0
  136. package/src/stories/assets/accessibility.svg +0 -5
  137. package/src/stories/assets/addon-library.png +0 -0
  138. package/src/stories/assets/assets.png +0 -0
  139. package/src/stories/assets/context.png +0 -0
  140. package/src/stories/assets/discord.svg +0 -15
  141. package/src/stories/assets/docs.png +0 -0
  142. package/src/stories/assets/figma-plugin.png +0 -0
  143. package/src/stories/assets/github.svg +0 -3
  144. package/src/stories/assets/share.png +0 -0
  145. package/src/stories/assets/styling.png +0 -0
  146. package/src/stories/assets/testing.png +0 -0
  147. package/src/stories/assets/theming.png +0 -0
  148. package/src/stories/assets/tutorials.svg +0 -12
  149. package/src/stories/assets/youtube.svg +0 -4
  150. package/src/stories/communication/ProgressIndicator.stories.tsx +0 -57
  151. package/src/stories/communication/SnackBar.stories.tsx +0 -32
  152. package/src/stories/communication/tool-tip.stories.tsx +0 -133
  153. package/src/stories/containment/card.stories.tsx +0 -42
  154. package/src/stories/containment/carousel.stories.tsx +0 -65
  155. package/src/stories/containment/divider.stories.tsx +0 -35
  156. package/src/stories/containment/slide-sheet.stories.tsx +0 -45
  157. package/src/stories/effect/smooth-scroll.stories.tsx +0 -54
  158. package/src/stories/navigation/navigation-rail/navigation-rail-item.stories.tsx +0 -65
  159. package/src/stories/navigation/navigation-rail/navigation-rail.stories.tsx +0 -122
  160. package/src/stories/navigation/tabs/tab.stories.tsx +0 -57
  161. package/src/stories/navigation/tabs/tabs.stories.tsx +0 -102
  162. package/src/stories/selection/slider.stories.tsx +0 -85
  163. package/src/stories/selection/switch.stories.tsx +0 -46
  164. package/src/stories/text-inputs/text-field.stories.tsx +0 -135
  165. package/src/tests/Button.spec.tsx +0 -67
  166. package/src/tests/useClassNames.spec.tsx +0 -82
  167. package/src/udixio.css +0 -120
  168. package/theme.config.ts +0 -7
  169. package/tsconfig.json +0 -16
  170. package/tsconfig.lib.json +0 -51
  171. package/tsconfig.spec.json +0 -37
  172. package/tsconfig.storybook.json +0 -38
  173. package/vite.config.ts +0 -96
@@ -1,66 +0,0 @@
1
- import React, { useId, useMemo, useRef, useState } from 'react';
2
- import { TabGroupContext, TabGroupContextValue } from './TabGroupContext';
3
- import { TabGroupInterface } from '../interfaces/tab-group.interface';
4
- import { ReactProps } from '../utils/component';
5
-
6
- /**
7
- * TabGroup provides shared state for Tabs and TabPanels
8
- * @status beta
9
- * @parent Tabs
10
- * @category Navigation
11
- * @devx
12
- * - Provides selection + slide direction for Tabs/TabPanels.
13
- * @limitations
14
- * - No URL/hash syncing or persistence built in.
15
- */
16
- export const TabGroup = ({
17
- children,
18
- selectedTab: externalSelectedTab,
19
- setSelectedTab: externalSetSelectedTab,
20
- defaultTab = 0,
21
- }: ReactProps<TabGroupInterface>) => {
22
- const [internalSelectedTab, internalSetSelectedTab] = useState<number | null>(
23
- defaultTab,
24
- );
25
- const previousTabRef = useRef<number | null>(null);
26
-
27
- // Priorité : props externes > état interne
28
- const selectedTab =
29
- externalSelectedTab !== undefined
30
- ? externalSelectedTab
31
- : internalSelectedTab;
32
-
33
- const setSelectedTab = externalSetSelectedTab ?? internalSetSelectedTab;
34
-
35
- // Calculer la direction du slide
36
- const direction =
37
- previousTabRef.current !== null && selectedTab !== null
38
- ? selectedTab > previousTabRef.current
39
- ? 1
40
- : -1
41
- : 0;
42
-
43
- // Mettre à jour la référence précédente
44
- if (selectedTab !== previousTabRef.current) {
45
- previousTabRef.current = selectedTab;
46
- }
47
-
48
- const id = useId();
49
-
50
- const contextValue: TabGroupContextValue = useMemo(
51
- () => ({
52
- selectedTab,
53
- setSelectedTab,
54
- previousTab: previousTabRef.current,
55
- direction,
56
- tabsId: id,
57
- }),
58
- [selectedTab, setSelectedTab, direction, id],
59
- );
60
-
61
- return (
62
- <TabGroupContext.Provider value={contextValue}>
63
- {children}
64
- </TabGroupContext.Provider>
65
- );
66
- };
@@ -1,16 +0,0 @@
1
- import { createContext, Dispatch, SetStateAction } from 'react';
2
-
3
- /**
4
- * Shared state container for Tabs and TabPanels.
5
- * @parent Tabs
6
- * @internal
7
- */
8
- export interface TabGroupContextValue {
9
- selectedTab: number | null;
10
- setSelectedTab: Dispatch<SetStateAction<number | null>>;
11
- previousTab: number | null;
12
- direction: number;
13
- tabsId: string;
14
- }
15
-
16
- export const TabGroupContext = createContext<TabGroupContextValue | null>(null);
@@ -1,27 +0,0 @@
1
- import React from 'react';
2
- import { TabPanelInterface } from '../interfaces/tab-panels.interface';
3
- import { ReactProps } from '../utils/component';
4
- import { useTabPanelStyle } from '../styles/tab-panels.style';
5
-
6
- /**
7
- * TabPanel contains the content for a single tab
8
- * Must be used within TabPanels
9
- * @status beta
10
- * @parent Tabs
11
- * @category Navigation
12
- * @devx
13
- * - Should be rendered inside `TabPanels` for animations and aria wiring.
14
- */
15
- export const TabPanel = ({
16
- children,
17
- className,
18
- isSelected = false,
19
- }: ReactProps<TabPanelInterface>) => {
20
- const styles = useTabPanelStyle({
21
- children,
22
- className,
23
- isSelected,
24
- });
25
-
26
- return <div className={styles.tabPanel}>{children}</div>;
27
- };
@@ -1,76 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { AnimatePresence, motion } from 'motion/react';
3
- import { TabGroupContext } from './TabGroupContext';
4
- import { TabPanelsInterface } from '../interfaces/tab-panels.interface';
5
- import { ReactProps } from '../utils/component';
6
- import { useTabPanelsStyle } from '../styles/tab-panels.style';
7
- import { TabPanel } from './TabPanel';
8
-
9
- /**
10
- * TabPanels renders the content panels with slide animation
11
- * Must be used within a TabGroup
12
- * @status beta
13
- * @parent Tabs
14
- * @category Navigation
15
- * @devx
16
- * - Requires `TabGroup` context; otherwise it renders nothing.
17
- * @limitations
18
- * - Only renders the active panel (no offscreen preservation).
19
- */
20
- export const TabPanels = ({
21
- children,
22
- className,
23
- }: ReactProps<TabPanelsInterface>) => {
24
- const context = useContext(TabGroupContext);
25
-
26
- if (!context) {
27
- console.warn('TabPanels must be used within a TabGroup');
28
- return null;
29
- }
30
-
31
- const { selectedTab, direction, tabsId } = context;
32
-
33
- const panelChildren = React.Children.toArray(children).filter(
34
- (child) => React.isValidElement(child) && child.type === TabPanel,
35
- ) as React.ReactElement[];
36
-
37
- const styles = useTabPanelsStyle({
38
- children,
39
- className,
40
- });
41
-
42
- return (
43
- <div className={styles.tabPanels}>
44
- <AnimatePresence initial={false} custom={direction} mode="popLayout">
45
- {panelChildren.map(
46
- (child, index) =>
47
- selectedTab === index && (
48
- <motion.div
49
- key={index}
50
- custom={direction}
51
- variants={{
52
- enter: (dir: number) => ({
53
- x: dir * 100 + '%',
54
- opacity: 1,
55
- }),
56
- center: { x: 0, opacity: 1 },
57
- exit: (dir: number) => ({
58
- x: dir * -100 + '%',
59
- opacity: 1,
60
- }),
61
- }}
62
- initial="enter"
63
- animate="center"
64
- exit="exit"
65
- transition={{ type: 'spring', stiffness: 400, damping: 40 }}
66
- role="tabpanel"
67
- aria-labelledby={`tab-${tabsId}-${index}`}
68
- >
69
- {React.cloneElement(child, { isSelected: true })}
70
- </motion.div>
71
- ),
72
- )}
73
- </AnimatePresence>
74
- </div>
75
- );
76
- };
@@ -1,105 +0,0 @@
1
- import React, { useContext, useMemo, useState } from 'react';
2
- import { v4 as uuidv4 } from 'uuid';
3
- import { TabsInterface } from '../interfaces/tabs.interface';
4
-
5
- import { useTabsStyle } from '../styles/tabs.style';
6
- import { ReactProps } from '../utils/component';
7
- import { TabProps } from '../interfaces/tab.interface';
8
- import { Tab } from './Tab';
9
- import { TabGroupContext } from './TabGroupContext';
10
-
11
- /**
12
- * Tabs organize content across different screens and views
13
- * @status beta
14
- * @category Navigation
15
- * @devx
16
- * - Can be controlled via `selectedTab`/`setSelectedTab` or through `TabGroup`.
17
- * @a11y
18
- * - No keyboard navigation or roving tabindex.
19
- */
20
- export const Tabs = ({
21
- variant = 'primary',
22
- onTabSelected,
23
- children,
24
- className,
25
- selectedTab: externalSelectedTab,
26
- setSelectedTab: externalSetSelectedTab,
27
- scrollable = false,
28
- }: ReactProps<TabsInterface>) => {
29
- const tabGroupContext = useContext(TabGroupContext);
30
-
31
- const [internalSelectedTab, internalSetSelectedTab] = useState<number | null>(
32
- null,
33
- );
34
-
35
- // Priorité : props > context > état interne
36
- let selectedTab: number | null;
37
- if (externalSelectedTab === 0 || externalSelectedTab != undefined) {
38
- selectedTab = externalSelectedTab;
39
- } else if (tabGroupContext) {
40
- selectedTab = tabGroupContext.selectedTab;
41
- } else {
42
- selectedTab = internalSelectedTab;
43
- }
44
-
45
- const setSelectedTab =
46
- externalSetSelectedTab ?? tabGroupContext?.setSelectedTab ?? internalSetSelectedTab;
47
-
48
- const tabChildren = React.Children.toArray(children).filter(
49
- (child) => React.isValidElement(child) && child.type === Tab,
50
- ) as React.ReactElement<TabProps>[];
51
-
52
- const ref = React.useRef<HTMLDivElement | null>(null);
53
-
54
- const handleOnTabSelected = (
55
- args: { index: number } & Pick<TabProps, 'label' | 'icon'> & {
56
- ref: React.RefObject<any>;
57
- },
58
- ) => {
59
- onTabSelected?.(args);
60
-
61
- if (scrollable) {
62
- const tabs: HTMLElement = ref.current!;
63
- const tabSelected: HTMLElement = args.ref.current;
64
- if (tabs && tabSelected) {
65
- const scrollLeft =
66
- tabSelected.offsetLeft +
67
- tabSelected.offsetWidth / 2 -
68
- tabs.offsetWidth / 2;
69
- tabs.scrollTo({ left: scrollLeft, behavior: 'smooth' });
70
- }
71
- }
72
- };
73
-
74
- const tabsId = useMemo(
75
- () => tabGroupContext?.tabsId ?? uuidv4(),
76
- [tabGroupContext?.tabsId],
77
- );
78
-
79
- const styles = useTabsStyle({
80
- children,
81
- onTabSelected,
82
- scrollable,
83
- selectedTab,
84
- setSelectedTab,
85
- className,
86
- variant,
87
- });
88
-
89
- return (
90
- <div ref={ref} role="tablist" className={styles.tabs}>
91
- {tabChildren.map((child, index) => {
92
- return React.cloneElement(child, {
93
- key: index,
94
- index,
95
- variant: variant,
96
- selectedTab,
97
- setSelectedTab: setSelectedTab,
98
- tabsId: tabsId,
99
- onTabSelected: handleOnTabSelected,
100
- scrollable,
101
- });
102
- })}
103
- </div>
104
- );
105
- };